Socket
Socket
Sign inDemoInstall

@angular/google-maps

Package Overview
Dependencies
6
Maintainers
2
Versions
366
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 9.0.0-rc.4 to 9.0.0-rc.5

esm2015/map-event-manager.js

717

bundles/google-maps.umd.js

@@ -14,2 +14,73 @@ (function (global, factory) {

*/
/** Manages event on a Google Maps object, ensuring that events are added only when necessary. */
var MapEventManager = /** @class */ (function () {
function MapEventManager() {
/** Pending listeners that were added before the target was set. */
this._pending = [];
this._listeners = [];
}
/** Clears all currently-registered event listeners. */
MapEventManager.prototype._clearListeners = function () {
var e_1, _a;
try {
for (var _b = tslib.__values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this._listeners = [];
};
/** Gets an observable that adds an event listener to the map when a consumer subscribes to it. */
MapEventManager.prototype.getLazyEmitter = function (name) {
var _this = this;
var observable = new rxjs.Observable(function (observer) {
// If the target hasn't been initialized yet, cache the observer so it can be added later.
if (!_this._target) {
_this._pending.push({ observable: observable, observer: observer });
return undefined;
}
var listener = _this._target.addListener(name, function (event) { return observer.next(event); });
_this._listeners.push(listener);
return function () { return listener.remove(); };
});
return observable;
};
/** Sets the current target that the manager should bind events to. */
MapEventManager.prototype.setTarget = function (target) {
if (target === this._target) {
return;
}
// Clear the listeners from the pre-existing target.
if (this._target) {
this._clearListeners();
this._pending = [];
}
this._target = target;
// Add the listeners that were bound before the map was initialized.
this._pending.forEach(function (subscriber) { return subscriber.observable.subscribe(subscriber.observer); });
this._pending = [];
};
/** Destroys the manager and clears the event listeners. */
MapEventManager.prototype.destroy = function () {
this._clearListeners();
this._pending = [];
this._target = undefined;
};
return MapEventManager;
}());
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/** default options set to the Googleplex */

@@ -37,2 +108,7 @@ var DEFAULT_OPTIONS = {

this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new rxjs.BehaviorSubject(DEFAULT_OPTIONS);
this._center = new rxjs.BehaviorSubject(undefined);
this._zoom = new rxjs.BehaviorSubject(undefined);
this._destroy = new rxjs.Subject();
this.height = DEFAULT_HEIGHT;

@@ -44,3 +120,3 @@ this.width = DEFAULT_WIDTH;

*/
this.boundsChanged = new core.EventEmitter();
this.boundsChanged = this._eventManager.getLazyEmitter('bounds_changed');
/**

@@ -50,3 +126,3 @@ * See

*/
this.centerChanged = new core.EventEmitter();
this.centerChanged = this._eventManager.getLazyEmitter('center_changed');
/**

@@ -56,3 +132,3 @@ * See

*/
this.mapClick = new core.EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -62,3 +138,3 @@ * See

*/
this.mapDblclick = new core.EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -68,3 +144,3 @@ * See

*/
this.mapDrag = new core.EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -74,3 +150,3 @@ * See

*/
this.mapDragend = new core.EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -80,3 +156,3 @@ * See

*/
this.mapDragstart = new core.EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -86,3 +162,3 @@ * See

*/
this.headingChanged = new core.EventEmitter();
this.headingChanged = this._eventManager.getLazyEmitter('heading_changed');
/**

@@ -92,3 +168,3 @@ * See

*/
this.idle = new core.EventEmitter();
this.idle = this._eventManager.getLazyEmitter('idle');
/**

@@ -98,3 +174,3 @@ * See

*/
this.maptypeidChanged = new core.EventEmitter();
this.maptypeidChanged = this._eventManager.getLazyEmitter('maptypeid_changed');
/**

@@ -104,3 +180,3 @@ * See

*/
this.mapMousemove = new core.EventEmitter();
this.mapMousemove = this._eventManager.getLazyEmitter('mousemove');
/**

@@ -110,3 +186,3 @@ * See

*/
this.mapMouseout = new core.EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -116,3 +192,3 @@ * See

*/
this.mapMouseover = new core.EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -122,3 +198,3 @@ * See

*/
this.projectionChanged = new core.EventEmitter();
this.projectionChanged = this._eventManager.getLazyEmitter('projection_changed');
/**

@@ -128,3 +204,3 @@ * See

*/
this.mapRightclick = new core.EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -134,3 +210,3 @@ * See

*/
this.tilesloaded = new core.EventEmitter();
this.tilesloaded = this._eventManager.getLazyEmitter('tilesloaded');
/**

@@ -140,3 +216,3 @@ * See

*/
this.tiltChanged = new core.EventEmitter();
this.tiltChanged = this._eventManager.getLazyEmitter('tilt_changed');
/**

@@ -146,8 +222,3 @@ * See

*/
this.zoomChanged = new core.EventEmitter();
this._listeners = [];
this._options = new rxjs.BehaviorSubject(DEFAULT_OPTIONS);
this._center = new rxjs.BehaviorSubject(undefined);
this._zoom = new rxjs.BehaviorSubject(undefined);
this._destroy = new rxjs.Subject();
this.zoomChanged = this._eventManager.getLazyEmitter('zoomChanged');
// @breaking-change 10.0.0 Remove null check for `platformId`.

@@ -196,7 +267,6 @@ this._isBrowser =

this._setSize();
var combinedOptionsChanges = this._combineOptions();
this._googleMapChanges = this._initializeMap(combinedOptionsChanges);
this._googleMapChanges = this._initializeMap(this._combineOptions());
this._googleMapChanges.subscribe(function (googleMap) {
_this._googleMap = googleMap;
_this._initializeEventHandlers();
_this._eventManager.setTarget(_this._googleMap);
});

@@ -209,5 +279,5 @@ this._watchForOptionsChanges();

GoogleMap.prototype.ngOnDestroy = function () {
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
this._clearListeners();
};

@@ -219,2 +289,3 @@ /**

GoogleMap.prototype.fitBounds = function (bounds, padding) {
this._assertInitialized();
this._googleMap.fitBounds(bounds, padding);

@@ -227,2 +298,3 @@ };

GoogleMap.prototype.panBy = function (x, y) {
this._assertInitialized();
this._googleMap.panBy(x, y);

@@ -235,2 +307,3 @@ };

GoogleMap.prototype.panTo = function (latLng) {
this._assertInitialized();
this._googleMap.panTo(latLng);

@@ -243,2 +316,3 @@ };

GoogleMap.prototype.panToBounds = function (latLngBounds, padding) {
this._assertInitialized();
this._googleMap.panToBounds(latLngBounds, padding);

@@ -251,2 +325,3 @@ };

GoogleMap.prototype.getBounds = function () {
this._assertInitialized();
return this._googleMap.getBounds() || null;

@@ -259,2 +334,3 @@ };

GoogleMap.prototype.getCenter = function () {
this._assertInitialized();
return this._googleMap.getCenter();

@@ -267,2 +343,3 @@ };

GoogleMap.prototype.getClickableIcons = function () {
this._assertInitialized();
return this._googleMap.getClickableIcons();

@@ -275,2 +352,3 @@ };

GoogleMap.prototype.getHeading = function () {
this._assertInitialized();
return this._googleMap.getHeading();

@@ -283,2 +361,3 @@ };

GoogleMap.prototype.getMapTypeId = function () {
this._assertInitialized();
return this._googleMap.getMapTypeId();

@@ -291,2 +370,3 @@ };

GoogleMap.prototype.getProjection = function () {
this._assertInitialized();
return this._googleMap.getProjection();

@@ -299,2 +379,3 @@ };

GoogleMap.prototype.getStreetView = function () {
this._assertInitialized();
return this._googleMap.getStreetView();

@@ -307,2 +388,3 @@ };

GoogleMap.prototype.getTilt = function () {
this._assertInitialized();
return this._googleMap.getTilt();

@@ -315,2 +397,3 @@ };

GoogleMap.prototype.getZoom = function () {
this._assertInitialized();
return this._googleMap.getZoom();

@@ -324,2 +407,3 @@ };

get: function () {
this._assertInitialized();
return this._googleMap.controls;

@@ -336,2 +420,3 @@ },

get: function () {
this._assertInitialized();
return this._googleMap.data;

@@ -348,2 +433,3 @@ },

get: function () {
this._assertInitialized();
return this._googleMap.mapTypes;

@@ -360,2 +446,3 @@ },

get: function () {
this._assertInitialized();
return this._googleMap.overlayMapTypes;

@@ -383,5 +470,3 @@ },

var _this = this;
return optionsChanges.pipe(operators.take(1), operators.map(function (options) {
return new google.maps.Map(_this._mapEl, options);
}), operators.shareReplay(1));
return optionsChanges.pipe(operators.take(1), operators.map(function (options) { return new google.maps.Map(_this._mapEl, options); }), operators.shareReplay(1));
};

@@ -416,65 +501,9 @@ GoogleMap.prototype._watchForOptionsChanges = function () {

};
GoogleMap.prototype._initializeEventHandlers = function () {
var _this = this;
// Ensure that we don't leak if called multiple times.
this._clearListeners();
var eventHandlers = new Map([
['bounds_changed', this.boundsChanged],
['center_changed', this.centerChanged],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['heading_changed', this.headingChanged],
['idle', this.idle],
['maptypeid_changed', this.maptypeidChanged],
['projection_changed', this.projectionChanged],
['tilesloaded', this.tilesloaded],
['tilt_changed', this.tiltChanged],
['zoomChanged', this.zoomChanged],
]);
var mouseEventHandlers = new Map([
['dblclick', this.mapDblclick],
['mousemove', this.mapMousemove],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._googleMap.addListener(name, function () {
eventHandler.emit();
}));
}
});
mouseEventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._googleMap.addListener(name, function (event) {
eventHandler.emit(event);
}));
}
});
if (this.mapClick.observers.length > 0) {
this._listeners.push(this._googleMap.addListener('click', function (event) {
_this.mapClick.emit(event);
}));
/** Asserts that the map has been initialized. */
GoogleMap.prototype._assertInitialized = function () {
if (!this._googleMap) {
throw Error('Cannot access Google Map information before the API has been initialized. ' +
'Please wait for the API to load before trying to interact with it.');
}
};
/** Clears all currently-registered event listeners. */
GoogleMap.prototype._clearListeners = function () {
var e_1, _a;
try {
for (var _b = tslib.__values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this._listeners = [];
};
GoogleMap.decorators = [

@@ -529,2 +558,154 @@ { type: core.Component, args: [{

/**
* Angular component that renders a Google Maps info window via the Google Maps JavaScript API.
* @see developers.google.com/maps/documentation/javascript/reference/info-window
*/
var MapInfoWindow = /** @class */ (function () {
function MapInfoWindow(_googleMap, _elementRef) {
this._googleMap = _googleMap;
this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new rxjs.BehaviorSubject({});
this._position = new rxjs.BehaviorSubject(undefined);
this._destroy = new rxjs.Subject();
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick
*/
this.closeclick = this._eventManager.getLazyEmitter('closeclick');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.content_changed
*/
this.contentChanged = this._eventManager.getLazyEmitter('content_changed');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.domready
*/
this.domready = this._eventManager.getLazyEmitter('domready');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.position_changed
*/
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.zindex_changed
*/
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}
Object.defineProperty(MapInfoWindow.prototype, "options", {
set: function (options) {
this._options.next(options || {});
},
enumerable: true,
configurable: true
});
Object.defineProperty(MapInfoWindow.prototype, "position", {
set: function (position) {
this._position.next(position);
},
enumerable: true,
configurable: true
});
MapInfoWindow.prototype.ngOnInit = function () {
var _this = this;
this._combineOptions().pipe(operators.takeUntil(this._destroy)).subscribe(function (options) {
if (_this._infoWindow) {
_this._infoWindow.setOptions(options);
}
else {
_this._infoWindow = new google.maps.InfoWindow(options);
_this._eventManager.setTarget(_this._infoWindow);
}
});
};
MapInfoWindow.prototype.ngOnDestroy = function () {
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
this.close();
};
/**
* See developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.close
*/
MapInfoWindow.prototype.close = function () {
if (this._infoWindow) {
this._infoWindow.close();
}
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getContent
*/
MapInfoWindow.prototype.getContent = function () {
return this._infoWindow.getContent();
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.getPosition
*/
MapInfoWindow.prototype.getPosition = function () {
return this._infoWindow.getPosition() || null;
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getZIndex
*/
MapInfoWindow.prototype.getZIndex = function () {
return this._infoWindow.getZIndex();
};
/**
* Opens the MapInfoWindow using the provided MapMarker as the anchor. If the anchor is not set,
* then the position property of the options input is used instead.
*/
MapInfoWindow.prototype.open = function (anchor) {
var marker = anchor ? anchor._marker : undefined;
if (this._googleMap._googleMap) {
this._elementRef.nativeElement.style.display = '';
this._infoWindow.open(this._googleMap._googleMap, marker);
}
};
MapInfoWindow.prototype._combineOptions = function () {
var _this = this;
return rxjs.combineLatest([this._options, this._position]).pipe(operators.map(function (_a) {
var _b = tslib.__read(_a, 2), options = _b[0], position = _b[1];
var combinedOptions = tslib.__assign(tslib.__assign({}, options), { position: position || options.position, content: _this._elementRef.nativeElement });
return combinedOptions;
}));
};
MapInfoWindow.decorators = [
{ type: core.Directive, args: [{
selector: 'map-info-window',
host: { 'style': 'display: none' },
},] }
];
/** @nocollapse */
MapInfoWindow.ctorParameters = function () { return [
{ type: GoogleMap },
{ type: core.ElementRef }
]; };
MapInfoWindow.propDecorators = {
options: [{ type: core.Input }],
position: [{ type: core.Input }],
closeclick: [{ type: core.Output }],
contentChanged: [{ type: core.Output }],
domready: [{ type: core.Output }],
positionChanged: [{ type: core.Output }],
zindexChanged: [{ type: core.Output }]
};
return MapInfoWindow;
}());
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/**
* Default options for the Google Maps marker component. Displays a marker

@@ -543,2 +724,9 @@ * at the Googleplex.

this._googleMap = _googleMap;
this._eventManager = new MapEventManager();
this._options = new rxjs.BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new rxjs.BehaviorSubject(undefined);
this._position = new rxjs.BehaviorSubject(undefined);
this._label = new rxjs.BehaviorSubject(undefined);
this._clickable = new rxjs.BehaviorSubject(undefined);
this._destroy = new rxjs.Subject();
/**

@@ -548,3 +736,3 @@ * See

*/
this.animationChanged = new core.EventEmitter();
this.animationChanged = this._eventManager.getLazyEmitter('animation_changed');
/**

@@ -554,3 +742,3 @@ * See

*/
this.mapClick = new core.EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -560,3 +748,3 @@ * See

*/
this.clickableChanged = new core.EventEmitter();
this.clickableChanged = this._eventManager.getLazyEmitter('clickable_changed');
/**

@@ -566,3 +754,3 @@ * See

*/
this.cursorChanged = new core.EventEmitter();
this.cursorChanged = this._eventManager.getLazyEmitter('cursor_changed');
/**

@@ -572,3 +760,3 @@ * See

*/
this.mapDblclick = new core.EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -578,3 +766,3 @@ * See

*/
this.mapDrag = new core.EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -584,3 +772,3 @@ * See

*/
this.mapDragend = new core.EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -590,3 +778,3 @@ * See

*/
this.draggableChanged = new core.EventEmitter();
this.draggableChanged = this._eventManager.getLazyEmitter('draggable_changed');
/**

@@ -596,3 +784,3 @@ * See

*/
this.mapDragstart = new core.EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -602,3 +790,3 @@ * See

*/
this.flatChanged = new core.EventEmitter();
this.flatChanged = this._eventManager.getLazyEmitter('flat_changed');
/**

@@ -608,3 +796,3 @@ * See

*/
this.iconChanged = new core.EventEmitter();
this.iconChanged = this._eventManager.getLazyEmitter('icon_changed');
/**

@@ -614,3 +802,3 @@ * See

*/
this.mapMousedown = new core.EventEmitter();
this.mapMousedown = this._eventManager.getLazyEmitter('mousedown');
/**

@@ -620,3 +808,3 @@ * See

*/
this.mapMouseout = new core.EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -626,3 +814,3 @@ * See

*/
this.mapMouseover = new core.EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -632,3 +820,3 @@ * See

*/
this.mapMouseup = new core.EventEmitter();
this.mapMouseup = this._eventManager.getLazyEmitter('mouseup');
/**

@@ -638,3 +826,3 @@ * See

*/
this.positionChanged = new core.EventEmitter();
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**

@@ -644,3 +832,3 @@ * See

*/
this.mapRightclick = new core.EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -650,3 +838,3 @@ * See

*/
this.shapeChanged = new core.EventEmitter();
this.shapeChanged = this._eventManager.getLazyEmitter('shape_changed');
/**

@@ -656,3 +844,3 @@ * See

*/
this.titleChanged = new core.EventEmitter();
this.titleChanged = this._eventManager.getLazyEmitter('title_changed');
/**

@@ -662,3 +850,3 @@ * See

*/
this.visibleChanged = new core.EventEmitter();
this.visibleChanged = this._eventManager.getLazyEmitter('visible_changed');
/**

@@ -668,10 +856,3 @@ * See

*/
this.zindexChanged = new core.EventEmitter();
this._options = new rxjs.BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new rxjs.BehaviorSubject(undefined);
this._position = new rxjs.BehaviorSubject(undefined);
this._label = new rxjs.BehaviorSubject(undefined);
this._clickable = new rxjs.BehaviorSubject(undefined);
this._destroy = new rxjs.Subject();
this._listeners = [];
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}

@@ -719,3 +900,3 @@ Object.defineProperty(MapMarker.prototype, "options", {

_this._marker.setMap(_this._googleMap._googleMap);
_this._initializeEventHandlers();
_this._eventManager.setTarget(_this._marker);
});

@@ -731,3 +912,3 @@ this._watchForOptionsChanges();

this._destroy.complete();
this._clearListeners();
this._eventManager.destroy();
if (this._marker) {

@@ -870,64 +1051,2 @@ this._marker.setMap(null);

};
MapMarker.prototype._initializeEventHandlers = function () {
var _this = this;
// Ensure that we don't leak if called multiple times.
this._clearListeners();
var eventHandlers = new Map([
['animation_changed', this.animationChanged],
['clickable_changed', this.clickableChanged],
['cursor_changed', this.cursorChanged],
['draggable_changed', this.draggableChanged],
['flat_changed', this.flatChanged],
['icon_changed', this.iconChanged],
['position_changed', this.positionChanged],
['shape_changed', this.shapeChanged],
['title_changed', this.titleChanged],
['visible_changed', this.visibleChanged],
['zindex_changed', this.zindexChanged],
]);
var mouseEventHandlers = new Map([
['click', this.mapClick],
['dblclick', this.mapDblclick],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['mousedown', this.mapMousedown],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['mouseup', this.mapMouseup],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._marker.addListener(name, function () {
eventHandler.emit();
}));
}
});
mouseEventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._marker.addListener(name, function (event) {
eventHandler.emit(event);
}));
}
});
};
/** Clears all currently-registered event listeners. */
MapMarker.prototype._clearListeners = function () {
var e_1, _a;
try {
for (var _b = tslib.__values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this._listeners = [];
};
MapMarker.decorators = [

@@ -984,43 +1103,59 @@ { type: core.Component, args: [{

/**
* Angular component that renders a Google Maps info window via the Google Maps JavaScript API.
* @see developers.google.com/maps/documentation/javascript/reference/info-window
* Angular component that renders a Google Maps Polyline via the Google Maps JavaScript API.
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline
*/
var MapInfoWindow = /** @class */ (function () {
function MapInfoWindow(_googleMap, _elementRef) {
this._googleMap = _googleMap;
this._elementRef = _elementRef;
var MapPolyline = /** @class */ (function () {
function MapPolyline(_map) {
this._map = _map;
this._eventManager = new MapEventManager();
this._options = new rxjs.BehaviorSubject({});
this._path = new rxjs.BehaviorSubject(undefined);
this._destroyed = new rxjs.Subject();
this._listeners = [];
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.click
*/
this.closeclick = new core.EventEmitter();
this.polylineClick = this._eventManager.getLazyEmitter('click');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.content_changed
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dblclick
*/
this.contentChanged = new core.EventEmitter();
this.polylineDblclick = this._eventManager.getLazyEmitter('dblclick');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.domready
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.drag
*/
this.domready = new core.EventEmitter();
this.polylineDrag = this._eventManager.getLazyEmitter('drag');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.position_changed
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragend
*/
this.positionChanged = new core.EventEmitter();
this.polylineDragend = this._eventManager.getLazyEmitter('dragend');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.zindex_changed
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragstart
*/
this.zindexChanged = new core.EventEmitter();
this._options = new rxjs.BehaviorSubject({});
this._position = new rxjs.BehaviorSubject(undefined);
this._listeners = [];
this._destroy = new rxjs.Subject();
this.polylineDragstart = this._eventManager.getLazyEmitter('dragstart');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousedown
*/
this.polylineMousedown = this._eventManager.getLazyEmitter('mousedown');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousemove
*/
this.polylineMousemove = this._eventManager.getLazyEmitter('mousemove');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseout
*/
this.polylineMouseout = this._eventManager.getLazyEmitter('mouseout');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseover
*/
this.polylineMouseover = this._eventManager.getLazyEmitter('mouseover');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseup
*/
this.polylineMouseup = this._eventManager.getLazyEmitter('mouseup');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.rightclick
*/
this.polylineRightclick = this._eventManager.getLazyEmitter('rightclick');
}
Object.defineProperty(MapInfoWindow.prototype, "options", {
Object.defineProperty(MapPolyline.prototype, "options", {
set: function (options) {

@@ -1032,5 +1167,5 @@ this._options.next(options || {});

});
Object.defineProperty(MapInfoWindow.prototype, "position", {
set: function (position) {
this._position.next(position);
Object.defineProperty(MapPolyline.prototype, "path", {
set: function (path) {
this._path.next(path);
},

@@ -1040,18 +1175,18 @@ enumerable: true,

});
MapInfoWindow.prototype.ngOnInit = function () {
MapPolyline.prototype.ngOnInit = function () {
var _this = this;
this._combineOptions().pipe(operators.takeUntil(this._destroy)).subscribe(function (options) {
if (_this._infoWindow) {
_this._infoWindow.setOptions(options);
}
else {
_this._infoWindow = new google.maps.InfoWindow(options);
_this._initializeEventHandlers();
}
var combinedOptionsChanges = this._combineOptions();
combinedOptionsChanges.pipe(operators.take(1)).subscribe(function (options) {
_this._polyline = new google.maps.Polyline(options);
_this._polyline.setMap(_this._map._googleMap);
_this._eventManager.setTarget(_this._polyline);
});
this._watchForOptionsChanges();
this._watchForPathChanges();
};
MapInfoWindow.prototype.ngOnDestroy = function () {
MapPolyline.prototype.ngOnDestroy = function () {
var e_1, _a;
this._destroy.next();
this._destroy.complete();
this._eventManager.destroy();
this._destroyed.next();
this._destroyed.complete();
try {

@@ -1070,111 +1205,75 @@ for (var _b = tslib.__values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {

}
this.close();
this._polyline.setMap(null);
};
/**
* See developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.close
* @see
* developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getDraggable
*/
MapInfoWindow.prototype.close = function () {
if (this._infoWindow) {
this._infoWindow.close();
}
MapPolyline.prototype.getDraggable = function () {
return this._polyline.getDraggable();
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getContent
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getEditable
*/
MapInfoWindow.prototype.getContent = function () {
return this._infoWindow.getContent();
MapPolyline.prototype.getEditable = function () {
return this._polyline.getEditable();
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.getPosition
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getPath
*/
MapInfoWindow.prototype.getPosition = function () {
return this._infoWindow.getPosition() || null;
MapPolyline.prototype.getPath = function () {
return this._polyline.getPath();
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getZIndex
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getVisible
*/
MapInfoWindow.prototype.getZIndex = function () {
return this._infoWindow.getZIndex();
MapPolyline.prototype.getVisible = function () {
return this._polyline.getVisible();
};
/**
* Opens the MapInfoWindow using the provided MapMarker as the anchor. If the anchor is not set,
* then the position property of the options input is used instead.
*/
MapInfoWindow.prototype.open = function (anchor) {
var marker = anchor ? anchor._marker : undefined;
if (this._googleMap._googleMap) {
this._elementRef.nativeElement.style.display = '';
this._infoWindow.open(this._googleMap._googleMap, marker);
}
};
MapInfoWindow.prototype._combineOptions = function () {
var _this = this;
return rxjs.combineLatest([this._options, this._position]).pipe(operators.map(function (_a) {
var _b = tslib.__read(_a, 2), options = _b[0], position = _b[1];
var combinedOptions = tslib.__assign(tslib.__assign({}, options), { position: position || options.position, content: _this._elementRef.nativeElement });
MapPolyline.prototype._combineOptions = function () {
return rxjs.combineLatest([this._options, this._path]).pipe(operators.map(function (_a) {
var _b = tslib.__read(_a, 2), options = _b[0], path = _b[1];
var combinedOptions = tslib.__assign(tslib.__assign({}, options), { path: path || options.path });
return combinedOptions;
}));
};
MapInfoWindow.prototype._initializeEventHandlers = function () {
MapPolyline.prototype._watchForOptionsChanges = function () {
var _this = this;
// Ensure that we don't leak if called multiple times.
this._clearListeners();
var eventHandlers = new Map([
['closeclick', this.closeclick],
['content_changed', this.contentChanged],
['domready', this.domready],
['position_changed', this.positionChanged],
['zindex_changed', this.zindexChanged],
]);
eventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._infoWindow.addListener(name, function () {
eventHandler.emit();
}));
}
this._options.pipe(operators.takeUntil(this._destroyed)).subscribe(function (options) {
_this._polyline.setOptions(options);
});
};
/** Clears all currently-registered event listeners. */
MapInfoWindow.prototype._clearListeners = function () {
var e_2, _a;
try {
for (var _b = tslib.__values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
MapPolyline.prototype._watchForPathChanges = function () {
var _this = this;
this._path.pipe(operators.takeUntil(this._destroyed)).subscribe(function (path) {
if (path) {
_this._polyline.setPath(path);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
this._listeners = [];
});
};
MapInfoWindow.decorators = [
MapPolyline.decorators = [
{ type: core.Directive, args: [{
selector: 'map-info-window',
host: { 'style': 'display: none' },
selector: 'map-polyline',
},] }
];
/** @nocollapse */
MapInfoWindow.ctorParameters = function () { return [
{ type: GoogleMap },
{ type: core.ElementRef }
MapPolyline.ctorParameters = function () { return [
{ type: GoogleMap }
]; };
MapInfoWindow.propDecorators = {
MapPolyline.propDecorators = {
options: [{ type: core.Input }],
position: [{ type: core.Input }],
closeclick: [{ type: core.Output }],
contentChanged: [{ type: core.Output }],
domready: [{ type: core.Output }],
positionChanged: [{ type: core.Output }],
zindexChanged: [{ type: core.Output }]
path: [{ type: core.Input }],
polylineClick: [{ type: core.Output }],
polylineDblclick: [{ type: core.Output }],
polylineDrag: [{ type: core.Output }],
polylineDragend: [{ type: core.Output }],
polylineDragstart: [{ type: core.Output }],
polylineMousedown: [{ type: core.Output }],
polylineMousemove: [{ type: core.Output }],
polylineMouseout: [{ type: core.Output }],
polylineMouseover: [{ type: core.Output }],
polylineMouseup: [{ type: core.Output }],
polylineRightclick: [{ type: core.Output }]
};
return MapInfoWindow;
return MapPolyline;
}());

@@ -1193,2 +1292,3 @@

MapMarker,
MapPolyline,
];

@@ -1223,2 +1323,3 @@ var GoogleMapsModule = /** @class */ (function () {

exports.MapMarker = MapMarker;
exports.MapPolyline = MapPolyline;

@@ -1225,0 +1326,0 @@ Object.defineProperty(exports, '__esModule', { value: true });

@@ -1,2 +0,2 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("tslib"),require("@angular/core"),require("@angular/common"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@angular/google-maps",["exports","tslib","@angular/core","@angular/common","rxjs","rxjs/operators"],e):e(((t=t||self).ng=t.ng||{},t.ng.googleMaps={}),t.tslib,t.ng.core,t.ng.common,t.rxjs,t.rxjs.operators)}(this,(function(t,e,n,i,o,r){"use strict";
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("tslib"),require("@angular/core"),require("@angular/common"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@angular/google-maps",["exports","tslib","@angular/core","@angular/common","rxjs","rxjs/operators"],e):e(((t=t||self).ng=t.ng||{},t.ng.googleMaps={}),t.tslib,t.ng.core,t.ng.common,t.rxjs,t.rxjs.operators)}(this,(function(t,e,i,n,o,a){"use strict";
/**

@@ -8,3 +8,3 @@ * @license

* found in the LICENSE file at https://angular.io/license
*/var s={center:{lat:37.421995,lng:-122.084092},zoom:17},a="500px",p="500px",h=function(){function t(t,e){if(this._elementRef=t,this.height=a,this.width=p,this.boundsChanged=new n.EventEmitter,this.centerChanged=new n.EventEmitter,this.mapClick=new n.EventEmitter,this.mapDblclick=new n.EventEmitter,this.mapDrag=new n.EventEmitter,this.mapDragend=new n.EventEmitter,this.mapDragstart=new n.EventEmitter,this.headingChanged=new n.EventEmitter,this.idle=new n.EventEmitter,this.maptypeidChanged=new n.EventEmitter,this.mapMousemove=new n.EventEmitter,this.mapMouseout=new n.EventEmitter,this.mapMouseover=new n.EventEmitter,this.projectionChanged=new n.EventEmitter,this.mapRightclick=new n.EventEmitter,this.tilesloaded=new n.EventEmitter,this.tiltChanged=new n.EventEmitter,this.zoomChanged=new n.EventEmitter,this._listeners=[],this._options=new o.BehaviorSubject(s),this._center=new o.BehaviorSubject(void 0),this._zoom=new o.BehaviorSubject(void 0),this._destroy=new o.Subject,this._isBrowser=e?i.isPlatformBrowser(e):"object"==typeof window&&!!window,this._isBrowser&&!window.google)throw Error("Namespace google not found, cannot construct embedded google map. Please install the Google Maps JavaScript API: https://developers.google.com/maps/documentation/javascript/tutorial#Loading_the_Maps_API")}return Object.defineProperty(t.prototype,"center",{set:function(t){this._center.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"zoom",{set:function(t){this._zoom.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"options",{set:function(t){this._options.next(t||s)},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(){this._setSize()},t.prototype.ngOnInit=function(){var t=this;if(this._isBrowser){this._mapEl=this._elementRef.nativeElement.querySelector(".map-container"),this._setSize();var e=this._combineOptions();this._googleMapChanges=this._initializeMap(e),this._googleMapChanges.subscribe((function(e){t._googleMap=e,t._initializeEventHandlers()})),this._watchForOptionsChanges(),this._watchForCenterChanges(),this._watchForZoomChanges()}},t.prototype.ngOnDestroy=function(){this._destroy.next(),this._destroy.complete(),this._clearListeners()},t.prototype.fitBounds=function(t,e){this._googleMap.fitBounds(t,e)},t.prototype.panBy=function(t,e){this._googleMap.panBy(t,e)},t.prototype.panTo=function(t){this._googleMap.panTo(t)},t.prototype.panToBounds=function(t,e){this._googleMap.panToBounds(t,e)},t.prototype.getBounds=function(){return this._googleMap.getBounds()||null},t.prototype.getCenter=function(){return this._googleMap.getCenter()},t.prototype.getClickableIcons=function(){return this._googleMap.getClickableIcons()},t.prototype.getHeading=function(){return this._googleMap.getHeading()},t.prototype.getMapTypeId=function(){return this._googleMap.getMapTypeId()},t.prototype.getProjection=function(){return this._googleMap.getProjection()},t.prototype.getStreetView=function(){return this._googleMap.getStreetView()},t.prototype.getTilt=function(){return this._googleMap.getTilt()},t.prototype.getZoom=function(){return this._googleMap.getZoom()},Object.defineProperty(t.prototype,"controls",{get:function(){return this._googleMap.controls},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"data",{get:function(){return this._googleMap.data},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapTypes",{get:function(){return this._googleMap.mapTypes},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"overlayMapTypes",{get:function(){return this._googleMap.overlayMapTypes},enumerable:!0,configurable:!0}),t.prototype._setSize=function(){this._mapEl&&(this._mapEl.style.height=this.height||a,this._mapEl.style.width=this.width||p)},t.prototype._combineOptions=function(){return o.combineLatest([this._options,this._center,this._zoom]).pipe(r.map((function(t){var n=e.__read(t,3),i=n[0],o=n[1],r=n[2];return e.__assign(e.__assign({},i),{center:o||i.center,zoom:void 0!==r?r:i.zoom})})))},t.prototype._initializeMap=function(t){var e=this;return t.pipe(r.take(1),r.map((function(t){return new google.maps.Map(e._mapEl,t)})),r.shareReplay(1))},t.prototype._watchForOptionsChanges=function(){o.combineLatest([this._googleMapChanges,this._options]).pipe(r.takeUntil(this._destroy)).subscribe((function(t){var n=e.__read(t,2);n[0].setOptions(n[1])}))},t.prototype._watchForCenterChanges=function(){o.combineLatest([this._googleMapChanges,this._center]).pipe(r.takeUntil(this._destroy)).subscribe((function(t){var n=e.__read(t,2),i=n[1];i&&n[0].setCenter(i)}))},t.prototype._watchForZoomChanges=function(){o.combineLatest([this._googleMapChanges,this._zoom]).pipe(r.takeUntil(this._destroy)).subscribe((function(t){var n=e.__read(t,2),i=n[1];void 0!==i&&n[0].setZoom(i)}))},t.prototype._initializeEventHandlers=function(){var t=this;this._clearListeners();var e=new Map([["bounds_changed",this.boundsChanged],["center_changed",this.centerChanged],["drag",this.mapDrag],["dragend",this.mapDragend],["dragstart",this.mapDragstart],["heading_changed",this.headingChanged],["idle",this.idle],["maptypeid_changed",this.maptypeidChanged],["projection_changed",this.projectionChanged],["tilesloaded",this.tilesloaded],["tilt_changed",this.tiltChanged],["zoomChanged",this.zoomChanged]]),n=new Map([["dblclick",this.mapDblclick],["mousemove",this.mapMousemove],["mouseout",this.mapMouseout],["mouseover",this.mapMouseover],["rightclick",this.mapRightclick]]);e.forEach((function(e,n){e.observers.length>0&&t._listeners.push(t._googleMap.addListener(n,(function(){e.emit()})))})),n.forEach((function(e,n){e.observers.length>0&&t._listeners.push(t._googleMap.addListener(n,(function(t){e.emit(t)})))})),this.mapClick.observers.length>0&&this._listeners.push(this._googleMap.addListener("click",(function(e){t.mapClick.emit(e)})))},t.prototype._clearListeners=function(){var t,n;try{for(var i=e.__values(this._listeners),o=i.next();!o.done;o=i.next())o.value.remove()}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}this._listeners=[]},t.decorators=[{type:n.Component,args:[{selector:"google-map",changeDetection:n.ChangeDetectionStrategy.OnPush,template:'<div class="map-container"></div><ng-content></ng-content>',encapsulation:n.ViewEncapsulation.None}]}],t.ctorParameters=function(){return[{type:n.ElementRef},{type:Object,decorators:[{type:n.Optional},{type:n.Inject,args:[n.PLATFORM_ID]}]}]},t.propDecorators={height:[{type:n.Input}],width:[{type:n.Input}],center:[{type:n.Input}],zoom:[{type:n.Input}],options:[{type:n.Input}],boundsChanged:[{type:n.Output}],centerChanged:[{type:n.Output}],mapClick:[{type:n.Output}],mapDblclick:[{type:n.Output}],mapDrag:[{type:n.Output}],mapDragend:[{type:n.Output}],mapDragstart:[{type:n.Output}],headingChanged:[{type:n.Output}],idle:[{type:n.Output}],maptypeidChanged:[{type:n.Output}],mapMousemove:[{type:n.Output}],mapMouseout:[{type:n.Output}],mapMouseover:[{type:n.Output}],projectionChanged:[{type:n.Output}],mapRightclick:[{type:n.Output}],tilesloaded:[{type:n.Output}],tiltChanged:[{type:n.Output}],zoomChanged:[{type:n.Output}]},t}(),c={position:{lat:37.421995,lng:-122.084092}},u=function(){function t(t){this._googleMap=t,this.animationChanged=new n.EventEmitter,this.mapClick=new n.EventEmitter,this.clickableChanged=new n.EventEmitter,this.cursorChanged=new n.EventEmitter,this.mapDblclick=new n.EventEmitter,this.mapDrag=new n.EventEmitter,this.mapDragend=new n.EventEmitter,this.draggableChanged=new n.EventEmitter,this.mapDragstart=new n.EventEmitter,this.flatChanged=new n.EventEmitter,this.iconChanged=new n.EventEmitter,this.mapMousedown=new n.EventEmitter,this.mapMouseout=new n.EventEmitter,this.mapMouseover=new n.EventEmitter,this.mapMouseup=new n.EventEmitter,this.positionChanged=new n.EventEmitter,this.mapRightclick=new n.EventEmitter,this.shapeChanged=new n.EventEmitter,this.titleChanged=new n.EventEmitter,this.visibleChanged=new n.EventEmitter,this.zindexChanged=new n.EventEmitter,this._options=new o.BehaviorSubject(c),this._title=new o.BehaviorSubject(void 0),this._position=new o.BehaviorSubject(void 0),this._label=new o.BehaviorSubject(void 0),this._clickable=new o.BehaviorSubject(void 0),this._destroy=new o.Subject,this._listeners=[]}return Object.defineProperty(t.prototype,"options",{set:function(t){this._options.next(t||c)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"title",{set:function(t){this._title.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"position",{set:function(t){this._position.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"label",{set:function(t){this._label.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"clickable",{set:function(t){this._clickable.next(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this._combineOptions().pipe(r.take(1)).subscribe((function(e){t._marker=new google.maps.Marker(e),t._marker.setMap(t._googleMap._googleMap),t._initializeEventHandlers()})),this._watchForOptionsChanges(),this._watchForTitleChanges(),this._watchForPositionChanges(),this._watchForLabelChanges(),this._watchForClickableChanges()},t.prototype.ngOnDestroy=function(){this._destroy.next(),this._destroy.complete(),this._clearListeners(),this._marker&&this._marker.setMap(null)},t.prototype.getAnimation=function(){return this._marker.getAnimation()||null},t.prototype.getClickable=function(){return this._marker.getClickable()},t.prototype.getCursor=function(){return this._marker.getCursor()||null},t.prototype.getDraggable=function(){return!!this._marker.getDraggable()},t.prototype.getIcon=function(){return this._marker.getIcon()||null},t.prototype.getLabel=function(){return this._marker.getLabel()||null},t.prototype.getOpacity=function(){return this._marker.getOpacity()||null},t.prototype.getPosition=function(){return this._marker.getPosition()||null},t.prototype.getShape=function(){return this._marker.getShape()||null},t.prototype.getTitle=function(){return this._marker.getTitle()||null},t.prototype.getVisible=function(){return this._marker.getVisible()},t.prototype.getZIndex=function(){return this._marker.getZIndex()||null},t.prototype._combineOptions=function(){var t=this;return o.combineLatest([this._options,this._title,this._position,this._label,this._clickable]).pipe(r.map((function(n){var i=e.__read(n,5),o=i[0],r=i[1],s=i[2],a=i[3],p=i[4];return e.__assign(e.__assign({},o),{title:r||o.title,position:s||o.position,label:a||o.label,clickable:void 0!==p?p:o.clickable,map:t._googleMap._googleMap||null})})))},t.prototype._watchForOptionsChanges=function(){var t=this;this._options.pipe(r.takeUntil(this._destroy)).subscribe((function(e){t._marker&&t._marker.setOptions(e)}))},t.prototype._watchForTitleChanges=function(){var t=this;this._title.pipe(r.takeUntil(this._destroy)).subscribe((function(e){t._marker&&void 0!==e&&t._marker.setTitle(e)}))},t.prototype._watchForPositionChanges=function(){var t=this;this._position.pipe(r.takeUntil(this._destroy)).subscribe((function(e){t._marker&&e&&t._marker.setPosition(e)}))},t.prototype._watchForLabelChanges=function(){var t=this;this._label.pipe(r.takeUntil(this._destroy)).subscribe((function(e){t._marker&&void 0!==e&&t._marker.setLabel(e)}))},t.prototype._watchForClickableChanges=function(){var t=this;this._clickable.pipe(r.takeUntil(this._destroy)).subscribe((function(e){t._marker&&void 0!==e&&t._marker.setClickable(e)}))},t.prototype._initializeEventHandlers=function(){var t=this;this._clearListeners();var e=new Map([["animation_changed",this.animationChanged],["clickable_changed",this.clickableChanged],["cursor_changed",this.cursorChanged],["draggable_changed",this.draggableChanged],["flat_changed",this.flatChanged],["icon_changed",this.iconChanged],["position_changed",this.positionChanged],["shape_changed",this.shapeChanged],["title_changed",this.titleChanged],["visible_changed",this.visibleChanged],["zindex_changed",this.zindexChanged]]),n=new Map([["click",this.mapClick],["dblclick",this.mapDblclick],["drag",this.mapDrag],["dragend",this.mapDragend],["dragstart",this.mapDragstart],["mousedown",this.mapMousedown],["mouseout",this.mapMouseout],["mouseover",this.mapMouseover],["mouseup",this.mapMouseup],["rightclick",this.mapRightclick]]);e.forEach((function(e,n){e.observers.length>0&&t._listeners.push(t._marker.addListener(n,(function(){e.emit()})))})),n.forEach((function(e,n){e.observers.length>0&&t._listeners.push(t._marker.addListener(n,(function(t){e.emit(t)})))}))},t.prototype._clearListeners=function(){var t,n;try{for(var i=e.__values(this._listeners),o=i.next();!o.done;o=i.next())o.value.remove()}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}this._listeners=[]},t.decorators=[{type:n.Component,args:[{selector:"map-marker",template:"<ng-content></ng-content>",changeDetection:n.ChangeDetectionStrategy.OnPush,encapsulation:n.ViewEncapsulation.None}]}],t.ctorParameters=function(){return[{type:h}]},t.propDecorators={options:[{type:n.Input}],title:[{type:n.Input}],position:[{type:n.Input}],label:[{type:n.Input}],clickable:[{type:n.Input}],animationChanged:[{type:n.Output}],mapClick:[{type:n.Output}],clickableChanged:[{type:n.Output}],cursorChanged:[{type:n.Output}],mapDblclick:[{type:n.Output}],mapDrag:[{type:n.Output}],mapDragend:[{type:n.Output}],draggableChanged:[{type:n.Output}],mapDragstart:[{type:n.Output}],flatChanged:[{type:n.Output}],iconChanged:[{type:n.Output}],mapMousedown:[{type:n.Output}],mapMouseout:[{type:n.Output}],mapMouseover:[{type:n.Output}],mapMouseup:[{type:n.Output}],positionChanged:[{type:n.Output}],mapRightclick:[{type:n.Output}],shapeChanged:[{type:n.Output}],titleChanged:[{type:n.Output}],visibleChanged:[{type:n.Output}],zindexChanged:[{type:n.Output}]},t}(),l=function(){function t(t,e){this._googleMap=t,this._elementRef=e,this.closeclick=new n.EventEmitter,this.contentChanged=new n.EventEmitter,this.domready=new n.EventEmitter,this.positionChanged=new n.EventEmitter,this.zindexChanged=new n.EventEmitter,this._options=new o.BehaviorSubject({}),this._position=new o.BehaviorSubject(void 0),this._listeners=[],this._destroy=new o.Subject}return Object.defineProperty(t.prototype,"options",{set:function(t){this._options.next(t||{})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"position",{set:function(t){this._position.next(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this._combineOptions().pipe(r.takeUntil(this._destroy)).subscribe((function(e){t._infoWindow?t._infoWindow.setOptions(e):(t._infoWindow=new google.maps.InfoWindow(e),t._initializeEventHandlers())}))},t.prototype.ngOnDestroy=function(){var t,n;this._destroy.next(),this._destroy.complete();try{for(var i=e.__values(this._listeners),o=i.next();!o.done;o=i.next())o.value.remove()}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}this.close()},t.prototype.close=function(){this._infoWindow&&this._infoWindow.close()},t.prototype.getContent=function(){return this._infoWindow.getContent()},t.prototype.getPosition=function(){return this._infoWindow.getPosition()||null},t.prototype.getZIndex=function(){return this._infoWindow.getZIndex()},t.prototype.open=function(t){var e=t?t._marker:void 0;this._googleMap._googleMap&&(this._elementRef.nativeElement.style.display="",this._infoWindow.open(this._googleMap._googleMap,e))},t.prototype._combineOptions=function(){var t=this;return o.combineLatest([this._options,this._position]).pipe(r.map((function(n){var i=e.__read(n,2),o=i[0],r=i[1];return e.__assign(e.__assign({},o),{position:r||o.position,content:t._elementRef.nativeElement})})))},t.prototype._initializeEventHandlers=function(){var t=this;this._clearListeners(),new Map([["closeclick",this.closeclick],["content_changed",this.contentChanged],["domready",this.domready],["position_changed",this.positionChanged],["zindex_changed",this.zindexChanged]]).forEach((function(e,n){e.observers.length>0&&t._listeners.push(t._infoWindow.addListener(n,(function(){e.emit()})))}))},t.prototype._clearListeners=function(){var t,n;try{for(var i=e.__values(this._listeners),o=i.next();!o.done;o=i.next())o.value.remove()}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}this._listeners=[]},t.decorators=[{type:n.Directive,args:[{selector:"map-info-window",host:{style:"display: none"}}]}],t.ctorParameters=function(){return[{type:h},{type:n.ElementRef}]},t.propDecorators={options:[{type:n.Input}],position:[{type:n.Input}],closeclick:[{type:n.Output}],contentChanged:[{type:n.Output}],domready:[{type:n.Output}],positionChanged:[{type:n.Output}],zindexChanged:[{type:n.Output}]},t}(),g=[h,l,u],d=function(){function t(){}return t.decorators=[{type:n.NgModule,args:[{declarations:g,exports:g}]}],t}();
*/var r=function(){function t(){this._pending=[],this._listeners=[]}return t.prototype._clearListeners=function(){var t,i;try{for(var n=e.__values(this._listeners),o=n.next();!o.done;o=n.next())o.value.remove()}catch(e){t={error:e}}finally{try{o&&!o.done&&(i=n.return)&&i.call(n)}finally{if(t)throw t.error}}this._listeners=[]},t.prototype.getLazyEmitter=function(t){var e=this,i=new o.Observable((function(n){if(e._target){var o=e._target.addListener(t,(function(t){return n.next(t)}));return e._listeners.push(o),function(){return o.remove()}}e._pending.push({observable:i,observer:n})}));return i},t.prototype.setTarget=function(t){t!==this._target&&(this._target&&(this._clearListeners(),this._pending=[]),this._target=t,this._pending.forEach((function(t){return t.observable.subscribe(t.observer)})),this._pending=[])},t.prototype.destroy=function(){this._clearListeners(),this._pending=[],this._target=void 0},t}(),s={center:{lat:37.421995,lng:-122.084092},zoom:17},p="500px",g="500px",h=function(){function t(t,e){if(this._elementRef=t,this._eventManager=new r,this._options=new o.BehaviorSubject(s),this._center=new o.BehaviorSubject(void 0),this._zoom=new o.BehaviorSubject(void 0),this._destroy=new o.Subject,this.height=p,this.width=g,this.boundsChanged=this._eventManager.getLazyEmitter("bounds_changed"),this.centerChanged=this._eventManager.getLazyEmitter("center_changed"),this.mapClick=this._eventManager.getLazyEmitter("click"),this.mapDblclick=this._eventManager.getLazyEmitter("dblclick"),this.mapDrag=this._eventManager.getLazyEmitter("drag"),this.mapDragend=this._eventManager.getLazyEmitter("dragend"),this.mapDragstart=this._eventManager.getLazyEmitter("dragstart"),this.headingChanged=this._eventManager.getLazyEmitter("heading_changed"),this.idle=this._eventManager.getLazyEmitter("idle"),this.maptypeidChanged=this._eventManager.getLazyEmitter("maptypeid_changed"),this.mapMousemove=this._eventManager.getLazyEmitter("mousemove"),this.mapMouseout=this._eventManager.getLazyEmitter("mouseout"),this.mapMouseover=this._eventManager.getLazyEmitter("mouseover"),this.projectionChanged=this._eventManager.getLazyEmitter("projection_changed"),this.mapRightclick=this._eventManager.getLazyEmitter("rightclick"),this.tilesloaded=this._eventManager.getLazyEmitter("tilesloaded"),this.tiltChanged=this._eventManager.getLazyEmitter("tilt_changed"),this.zoomChanged=this._eventManager.getLazyEmitter("zoomChanged"),this._isBrowser=e?n.isPlatformBrowser(e):"object"==typeof window&&!!window,this._isBrowser&&!window.google)throw Error("Namespace google not found, cannot construct embedded google map. Please install the Google Maps JavaScript API: https://developers.google.com/maps/documentation/javascript/tutorial#Loading_the_Maps_API")}return Object.defineProperty(t.prototype,"center",{set:function(t){this._center.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"zoom",{set:function(t){this._zoom.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"options",{set:function(t){this._options.next(t||s)},enumerable:!0,configurable:!0}),t.prototype.ngOnChanges=function(){this._setSize()},t.prototype.ngOnInit=function(){var t=this;this._isBrowser&&(this._mapEl=this._elementRef.nativeElement.querySelector(".map-container"),this._setSize(),this._googleMapChanges=this._initializeMap(this._combineOptions()),this._googleMapChanges.subscribe((function(e){t._googleMap=e,t._eventManager.setTarget(t._googleMap)})),this._watchForOptionsChanges(),this._watchForCenterChanges(),this._watchForZoomChanges())},t.prototype.ngOnDestroy=function(){this._eventManager.destroy(),this._destroy.next(),this._destroy.complete()},t.prototype.fitBounds=function(t,e){this._assertInitialized(),this._googleMap.fitBounds(t,e)},t.prototype.panBy=function(t,e){this._assertInitialized(),this._googleMap.panBy(t,e)},t.prototype.panTo=function(t){this._assertInitialized(),this._googleMap.panTo(t)},t.prototype.panToBounds=function(t,e){this._assertInitialized(),this._googleMap.panToBounds(t,e)},t.prototype.getBounds=function(){return this._assertInitialized(),this._googleMap.getBounds()||null},t.prototype.getCenter=function(){return this._assertInitialized(),this._googleMap.getCenter()},t.prototype.getClickableIcons=function(){return this._assertInitialized(),this._googleMap.getClickableIcons()},t.prototype.getHeading=function(){return this._assertInitialized(),this._googleMap.getHeading()},t.prototype.getMapTypeId=function(){return this._assertInitialized(),this._googleMap.getMapTypeId()},t.prototype.getProjection=function(){return this._assertInitialized(),this._googleMap.getProjection()},t.prototype.getStreetView=function(){return this._assertInitialized(),this._googleMap.getStreetView()},t.prototype.getTilt=function(){return this._assertInitialized(),this._googleMap.getTilt()},t.prototype.getZoom=function(){return this._assertInitialized(),this._googleMap.getZoom()},Object.defineProperty(t.prototype,"controls",{get:function(){return this._assertInitialized(),this._googleMap.controls},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"data",{get:function(){return this._assertInitialized(),this._googleMap.data},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mapTypes",{get:function(){return this._assertInitialized(),this._googleMap.mapTypes},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"overlayMapTypes",{get:function(){return this._assertInitialized(),this._googleMap.overlayMapTypes},enumerable:!0,configurable:!0}),t.prototype._setSize=function(){this._mapEl&&(this._mapEl.style.height=this.height||p,this._mapEl.style.width=this.width||g)},t.prototype._combineOptions=function(){return o.combineLatest([this._options,this._center,this._zoom]).pipe(a.map((function(t){var i=e.__read(t,3),n=i[0],o=i[1],a=i[2];return e.__assign(e.__assign({},n),{center:o||n.center,zoom:void 0!==a?a:n.zoom})})))},t.prototype._initializeMap=function(t){var e=this;return t.pipe(a.take(1),a.map((function(t){return new google.maps.Map(e._mapEl,t)})),a.shareReplay(1))},t.prototype._watchForOptionsChanges=function(){o.combineLatest([this._googleMapChanges,this._options]).pipe(a.takeUntil(this._destroy)).subscribe((function(t){var i=e.__read(t,2);i[0].setOptions(i[1])}))},t.prototype._watchForCenterChanges=function(){o.combineLatest([this._googleMapChanges,this._center]).pipe(a.takeUntil(this._destroy)).subscribe((function(t){var i=e.__read(t,2),n=i[1];n&&i[0].setCenter(n)}))},t.prototype._watchForZoomChanges=function(){o.combineLatest([this._googleMapChanges,this._zoom]).pipe(a.takeUntil(this._destroy)).subscribe((function(t){var i=e.__read(t,2),n=i[1];void 0!==n&&i[0].setZoom(n)}))},t.prototype._assertInitialized=function(){if(!this._googleMap)throw Error("Cannot access Google Map information before the API has been initialized. Please wait for the API to load before trying to interact with it.")},t.decorators=[{type:i.Component,args:[{selector:"google-map",changeDetection:i.ChangeDetectionStrategy.OnPush,template:'<div class="map-container"></div><ng-content></ng-content>',encapsulation:i.ViewEncapsulation.None}]}],t.ctorParameters=function(){return[{type:i.ElementRef},{type:Object,decorators:[{type:i.Optional},{type:i.Inject,args:[i.PLATFORM_ID]}]}]},t.propDecorators={height:[{type:i.Input}],width:[{type:i.Input}],center:[{type:i.Input}],zoom:[{type:i.Input}],options:[{type:i.Input}],boundsChanged:[{type:i.Output}],centerChanged:[{type:i.Output}],mapClick:[{type:i.Output}],mapDblclick:[{type:i.Output}],mapDrag:[{type:i.Output}],mapDragend:[{type:i.Output}],mapDragstart:[{type:i.Output}],headingChanged:[{type:i.Output}],idle:[{type:i.Output}],maptypeidChanged:[{type:i.Output}],mapMousemove:[{type:i.Output}],mapMouseout:[{type:i.Output}],mapMouseover:[{type:i.Output}],projectionChanged:[{type:i.Output}],mapRightclick:[{type:i.Output}],tilesloaded:[{type:i.Output}],tiltChanged:[{type:i.Output}],zoomChanged:[{type:i.Output}]},t}(),u=function(){function t(t,e){this._googleMap=t,this._elementRef=e,this._eventManager=new r,this._options=new o.BehaviorSubject({}),this._position=new o.BehaviorSubject(void 0),this._destroy=new o.Subject,this.closeclick=this._eventManager.getLazyEmitter("closeclick"),this.contentChanged=this._eventManager.getLazyEmitter("content_changed"),this.domready=this._eventManager.getLazyEmitter("domready"),this.positionChanged=this._eventManager.getLazyEmitter("position_changed"),this.zindexChanged=this._eventManager.getLazyEmitter("zindex_changed")}return Object.defineProperty(t.prototype,"options",{set:function(t){this._options.next(t||{})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"position",{set:function(t){this._position.next(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this._combineOptions().pipe(a.takeUntil(this._destroy)).subscribe((function(e){t._infoWindow?t._infoWindow.setOptions(e):(t._infoWindow=new google.maps.InfoWindow(e),t._eventManager.setTarget(t._infoWindow))}))},t.prototype.ngOnDestroy=function(){this._eventManager.destroy(),this._destroy.next(),this._destroy.complete(),this.close()},t.prototype.close=function(){this._infoWindow&&this._infoWindow.close()},t.prototype.getContent=function(){return this._infoWindow.getContent()},t.prototype.getPosition=function(){return this._infoWindow.getPosition()||null},t.prototype.getZIndex=function(){return this._infoWindow.getZIndex()},t.prototype.open=function(t){var e=t?t._marker:void 0;this._googleMap._googleMap&&(this._elementRef.nativeElement.style.display="",this._infoWindow.open(this._googleMap._googleMap,e))},t.prototype._combineOptions=function(){var t=this;return o.combineLatest([this._options,this._position]).pipe(a.map((function(i){var n=e.__read(i,2),o=n[0],a=n[1];return e.__assign(e.__assign({},o),{position:a||o.position,content:t._elementRef.nativeElement})})))},t.decorators=[{type:i.Directive,args:[{selector:"map-info-window",host:{style:"display: none"}}]}],t.ctorParameters=function(){return[{type:h},{type:i.ElementRef}]},t.propDecorators={options:[{type:i.Input}],position:[{type:i.Input}],closeclick:[{type:i.Output}],contentChanged:[{type:i.Output}],domready:[{type:i.Output}],positionChanged:[{type:i.Output}],zindexChanged:[{type:i.Output}]},t}(),l={position:{lat:37.421995,lng:-122.084092}},c=function(){function t(t){this._googleMap=t,this._eventManager=new r,this._options=new o.BehaviorSubject(l),this._title=new o.BehaviorSubject(void 0),this._position=new o.BehaviorSubject(void 0),this._label=new o.BehaviorSubject(void 0),this._clickable=new o.BehaviorSubject(void 0),this._destroy=new o.Subject,this.animationChanged=this._eventManager.getLazyEmitter("animation_changed"),this.mapClick=this._eventManager.getLazyEmitter("click"),this.clickableChanged=this._eventManager.getLazyEmitter("clickable_changed"),this.cursorChanged=this._eventManager.getLazyEmitter("cursor_changed"),this.mapDblclick=this._eventManager.getLazyEmitter("dblclick"),this.mapDrag=this._eventManager.getLazyEmitter("drag"),this.mapDragend=this._eventManager.getLazyEmitter("dragend"),this.draggableChanged=this._eventManager.getLazyEmitter("draggable_changed"),this.mapDragstart=this._eventManager.getLazyEmitter("dragstart"),this.flatChanged=this._eventManager.getLazyEmitter("flat_changed"),this.iconChanged=this._eventManager.getLazyEmitter("icon_changed"),this.mapMousedown=this._eventManager.getLazyEmitter("mousedown"),this.mapMouseout=this._eventManager.getLazyEmitter("mouseout"),this.mapMouseover=this._eventManager.getLazyEmitter("mouseover"),this.mapMouseup=this._eventManager.getLazyEmitter("mouseup"),this.positionChanged=this._eventManager.getLazyEmitter("position_changed"),this.mapRightclick=this._eventManager.getLazyEmitter("rightclick"),this.shapeChanged=this._eventManager.getLazyEmitter("shape_changed"),this.titleChanged=this._eventManager.getLazyEmitter("title_changed"),this.visibleChanged=this._eventManager.getLazyEmitter("visible_changed"),this.zindexChanged=this._eventManager.getLazyEmitter("zindex_changed")}return Object.defineProperty(t.prototype,"options",{set:function(t){this._options.next(t||l)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"title",{set:function(t){this._title.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"position",{set:function(t){this._position.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"label",{set:function(t){this._label.next(t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"clickable",{set:function(t){this._clickable.next(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this._combineOptions().pipe(a.take(1)).subscribe((function(e){t._marker=new google.maps.Marker(e),t._marker.setMap(t._googleMap._googleMap),t._eventManager.setTarget(t._marker)})),this._watchForOptionsChanges(),this._watchForTitleChanges(),this._watchForPositionChanges(),this._watchForLabelChanges(),this._watchForClickableChanges()},t.prototype.ngOnDestroy=function(){this._destroy.next(),this._destroy.complete(),this._eventManager.destroy(),this._marker&&this._marker.setMap(null)},t.prototype.getAnimation=function(){return this._marker.getAnimation()||null},t.prototype.getClickable=function(){return this._marker.getClickable()},t.prototype.getCursor=function(){return this._marker.getCursor()||null},t.prototype.getDraggable=function(){return!!this._marker.getDraggable()},t.prototype.getIcon=function(){return this._marker.getIcon()||null},t.prototype.getLabel=function(){return this._marker.getLabel()||null},t.prototype.getOpacity=function(){return this._marker.getOpacity()||null},t.prototype.getPosition=function(){return this._marker.getPosition()||null},t.prototype.getShape=function(){return this._marker.getShape()||null},t.prototype.getTitle=function(){return this._marker.getTitle()||null},t.prototype.getVisible=function(){return this._marker.getVisible()},t.prototype.getZIndex=function(){return this._marker.getZIndex()||null},t.prototype._combineOptions=function(){var t=this;return o.combineLatest([this._options,this._title,this._position,this._label,this._clickable]).pipe(a.map((function(i){var n=e.__read(i,5),o=n[0],a=n[1],r=n[2],s=n[3],p=n[4];return e.__assign(e.__assign({},o),{title:a||o.title,position:r||o.position,label:s||o.label,clickable:void 0!==p?p:o.clickable,map:t._googleMap._googleMap||null})})))},t.prototype._watchForOptionsChanges=function(){var t=this;this._options.pipe(a.takeUntil(this._destroy)).subscribe((function(e){t._marker&&t._marker.setOptions(e)}))},t.prototype._watchForTitleChanges=function(){var t=this;this._title.pipe(a.takeUntil(this._destroy)).subscribe((function(e){t._marker&&void 0!==e&&t._marker.setTitle(e)}))},t.prototype._watchForPositionChanges=function(){var t=this;this._position.pipe(a.takeUntil(this._destroy)).subscribe((function(e){t._marker&&e&&t._marker.setPosition(e)}))},t.prototype._watchForLabelChanges=function(){var t=this;this._label.pipe(a.takeUntil(this._destroy)).subscribe((function(e){t._marker&&void 0!==e&&t._marker.setLabel(e)}))},t.prototype._watchForClickableChanges=function(){var t=this;this._clickable.pipe(a.takeUntil(this._destroy)).subscribe((function(e){t._marker&&void 0!==e&&t._marker.setClickable(e)}))},t.decorators=[{type:i.Component,args:[{selector:"map-marker",template:"<ng-content></ng-content>",changeDetection:i.ChangeDetectionStrategy.OnPush,encapsulation:i.ViewEncapsulation.None}]}],t.ctorParameters=function(){return[{type:h}]},t.propDecorators={options:[{type:i.Input}],title:[{type:i.Input}],position:[{type:i.Input}],label:[{type:i.Input}],clickable:[{type:i.Input}],animationChanged:[{type:i.Output}],mapClick:[{type:i.Output}],clickableChanged:[{type:i.Output}],cursorChanged:[{type:i.Output}],mapDblclick:[{type:i.Output}],mapDrag:[{type:i.Output}],mapDragend:[{type:i.Output}],draggableChanged:[{type:i.Output}],mapDragstart:[{type:i.Output}],flatChanged:[{type:i.Output}],iconChanged:[{type:i.Output}],mapMousedown:[{type:i.Output}],mapMouseout:[{type:i.Output}],mapMouseover:[{type:i.Output}],mapMouseup:[{type:i.Output}],positionChanged:[{type:i.Output}],mapRightclick:[{type:i.Output}],shapeChanged:[{type:i.Output}],titleChanged:[{type:i.Output}],visibleChanged:[{type:i.Output}],zindexChanged:[{type:i.Output}]},t}(),_=function(){function t(t){this._map=t,this._eventManager=new r,this._options=new o.BehaviorSubject({}),this._path=new o.BehaviorSubject(void 0),this._destroyed=new o.Subject,this._listeners=[],this.polylineClick=this._eventManager.getLazyEmitter("click"),this.polylineDblclick=this._eventManager.getLazyEmitter("dblclick"),this.polylineDrag=this._eventManager.getLazyEmitter("drag"),this.polylineDragend=this._eventManager.getLazyEmitter("dragend"),this.polylineDragstart=this._eventManager.getLazyEmitter("dragstart"),this.polylineMousedown=this._eventManager.getLazyEmitter("mousedown"),this.polylineMousemove=this._eventManager.getLazyEmitter("mousemove"),this.polylineMouseout=this._eventManager.getLazyEmitter("mouseout"),this.polylineMouseover=this._eventManager.getLazyEmitter("mouseover"),this.polylineMouseup=this._eventManager.getLazyEmitter("mouseup"),this.polylineRightclick=this._eventManager.getLazyEmitter("rightclick")}return Object.defineProperty(t.prototype,"options",{set:function(t){this._options.next(t||{})},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"path",{set:function(t){this._path.next(t)},enumerable:!0,configurable:!0}),t.prototype.ngOnInit=function(){var t=this;this._combineOptions().pipe(a.take(1)).subscribe((function(e){t._polyline=new google.maps.Polyline(e),t._polyline.setMap(t._map._googleMap),t._eventManager.setTarget(t._polyline)})),this._watchForOptionsChanges(),this._watchForPathChanges()},t.prototype.ngOnDestroy=function(){var t,i;this._eventManager.destroy(),this._destroyed.next(),this._destroyed.complete();try{for(var n=e.__values(this._listeners),o=n.next();!o.done;o=n.next())o.value.remove()}catch(e){t={error:e}}finally{try{o&&!o.done&&(i=n.return)&&i.call(n)}finally{if(t)throw t.error}}this._polyline.setMap(null)},t.prototype.getDraggable=function(){return this._polyline.getDraggable()},t.prototype.getEditable=function(){return this._polyline.getEditable()},t.prototype.getPath=function(){return this._polyline.getPath()},t.prototype.getVisible=function(){return this._polyline.getVisible()},t.prototype._combineOptions=function(){return o.combineLatest([this._options,this._path]).pipe(a.map((function(t){var i=e.__read(t,2),n=i[0],o=i[1];return e.__assign(e.__assign({},n),{path:o||n.path})})))},t.prototype._watchForOptionsChanges=function(){var t=this;this._options.pipe(a.takeUntil(this._destroyed)).subscribe((function(e){t._polyline.setOptions(e)}))},t.prototype._watchForPathChanges=function(){var t=this;this._path.pipe(a.takeUntil(this._destroyed)).subscribe((function(e){e&&t._polyline.setPath(e)}))},t.decorators=[{type:i.Directive,args:[{selector:"map-polyline"}]}],t.ctorParameters=function(){return[{type:h}]},t.propDecorators={options:[{type:i.Input}],path:[{type:i.Input}],polylineClick:[{type:i.Output}],polylineDblclick:[{type:i.Output}],polylineDrag:[{type:i.Output}],polylineDragend:[{type:i.Output}],polylineDragstart:[{type:i.Output}],polylineMousedown:[{type:i.Output}],polylineMousemove:[{type:i.Output}],polylineMouseout:[{type:i.Output}],polylineMouseover:[{type:i.Output}],polylineMouseup:[{type:i.Output}],polylineRightclick:[{type:i.Output}]},t}(),y=[h,u,c,_],d=function(){function t(){}return t.decorators=[{type:i.NgModule,args:[{declarations:y,exports:y}]}],t}();
/**

@@ -17,2 +17,9 @@ * @license

*/
t.GoogleMap=h,t.GoogleMapsModule=d,t.MapInfoWindow=l,t.MapMarker=u,Object.defineProperty(t,"__esModule",{value:!0})}));
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
t.GoogleMap=h,t.GoogleMapsModule=d,t.MapInfoWindow=u,t.MapMarker=c,t.MapPolyline=_,Object.defineProperty(t,"__esModule",{value:!0})}));
/**
* @fileoverview added by tsickle
* Generated from: src/google-maps/google-map/google-map.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc

@@ -15,6 +16,7 @@ */

/// <reference types="googlemaps" />
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewEncapsulation, Optional, Inject, PLATFORM_ID, } from '@angular/core';
import { ChangeDetectionStrategy, Component, ElementRef, Input, Output, ViewEncapsulation, Optional, Inject, PLATFORM_ID, } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
import { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';
import { map, shareReplay, take, takeUntil } from 'rxjs/operators';
import { MapEventManager } from '../map-event-manager';
/**

@@ -73,2 +75,7 @@ * @record

this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject(DEFAULT_OPTIONS);
this._center = new BehaviorSubject(undefined);
this._zoom = new BehaviorSubject(undefined);
this._destroy = new Subject();
this.height = DEFAULT_HEIGHT;

@@ -80,3 +87,3 @@ this.width = DEFAULT_WIDTH;

*/
this.boundsChanged = new EventEmitter();
this.boundsChanged = this._eventManager.getLazyEmitter('bounds_changed');
/**

@@ -86,3 +93,3 @@ * See

*/
this.centerChanged = new EventEmitter();
this.centerChanged = this._eventManager.getLazyEmitter('center_changed');
/**

@@ -92,3 +99,3 @@ * See

*/
this.mapClick = new EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -98,3 +105,3 @@ * See

*/
this.mapDblclick = new EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -104,3 +111,3 @@ * See

*/
this.mapDrag = new EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -110,3 +117,3 @@ * See

*/
this.mapDragend = new EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -116,3 +123,3 @@ * See

*/
this.mapDragstart = new EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -122,3 +129,3 @@ * See

*/
this.headingChanged = new EventEmitter();
this.headingChanged = this._eventManager.getLazyEmitter('heading_changed');
/**

@@ -128,3 +135,3 @@ * See

*/
this.idle = new EventEmitter();
this.idle = this._eventManager.getLazyEmitter('idle');
/**

@@ -134,3 +141,3 @@ * See

*/
this.maptypeidChanged = new EventEmitter();
this.maptypeidChanged = this._eventManager.getLazyEmitter('maptypeid_changed');
/**

@@ -140,3 +147,3 @@ * See

*/
this.mapMousemove = new EventEmitter();
this.mapMousemove = this._eventManager.getLazyEmitter('mousemove');
/**

@@ -146,3 +153,3 @@ * See

*/
this.mapMouseout = new EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -152,3 +159,3 @@ * See

*/
this.mapMouseover = new EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -158,3 +165,3 @@ * See

*/
this.projectionChanged = new EventEmitter();
this.projectionChanged = this._eventManager.getLazyEmitter('projection_changed');
/**

@@ -164,3 +171,3 @@ * See

*/
this.mapRightclick = new EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -170,3 +177,3 @@ * See

*/
this.tilesloaded = new EventEmitter();
this.tilesloaded = this._eventManager.getLazyEmitter('tilesloaded');
/**

@@ -176,3 +183,3 @@ * See

*/
this.tiltChanged = new EventEmitter();
this.tiltChanged = this._eventManager.getLazyEmitter('tilt_changed');
/**

@@ -182,8 +189,3 @@ * See

*/
this.zoomChanged = new EventEmitter();
this._listeners = [];
this._options = new BehaviorSubject(DEFAULT_OPTIONS);
this._center = new BehaviorSubject(undefined);
this._zoom = new BehaviorSubject(undefined);
this._destroy = new Subject();
this.zoomChanged = this._eventManager.getLazyEmitter('zoomChanged');
// @breaking-change 10.0.0 Remove null check for `platformId`.

@@ -238,5 +240,3 @@ this._isBrowser =

this._setSize();
/** @type {?} */
const combinedOptionsChanges = this._combineOptions();
this._googleMapChanges = this._initializeMap(combinedOptionsChanges);
this._googleMapChanges = this._initializeMap(this._combineOptions());
this._googleMapChanges.subscribe((/**

@@ -248,3 +248,3 @@ * @param {?} googleMap

this._googleMap = (/** @type {?} */ (googleMap));
this._initializeEventHandlers();
this._eventManager.setTarget(this._googleMap);
}));

@@ -260,5 +260,5 @@ this._watchForOptionsChanges();

ngOnDestroy() {
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
this._clearListeners();
}

@@ -273,2 +273,3 @@ /**

fitBounds(bounds, padding) {
this._assertInitialized();
this._googleMap.fitBounds(bounds, padding);

@@ -284,2 +285,3 @@ }

panBy(x, y) {
this._assertInitialized();
this._googleMap.panBy(x, y);

@@ -294,2 +296,3 @@ }

panTo(latLng) {
this._assertInitialized();
this._googleMap.panTo(latLng);

@@ -305,2 +308,3 @@ }

panToBounds(latLngBounds, padding) {
this._assertInitialized();
this._googleMap.panToBounds(latLngBounds, padding);

@@ -314,2 +318,3 @@ }

getBounds() {
this._assertInitialized();
return this._googleMap.getBounds() || null;

@@ -323,2 +328,3 @@ }

getCenter() {
this._assertInitialized();
return this._googleMap.getCenter();

@@ -332,2 +338,3 @@ }

getClickableIcons() {
this._assertInitialized();
return this._googleMap.getClickableIcons();

@@ -341,2 +348,3 @@ }

getHeading() {
this._assertInitialized();
return this._googleMap.getHeading();

@@ -350,2 +358,3 @@ }

getMapTypeId() {
this._assertInitialized();
return this._googleMap.getMapTypeId();

@@ -359,2 +368,3 @@ }

getProjection() {
this._assertInitialized();
return this._googleMap.getProjection();

@@ -368,2 +378,3 @@ }

getStreetView() {
this._assertInitialized();
return this._googleMap.getStreetView();

@@ -377,2 +388,3 @@ }

getTilt() {
this._assertInitialized();
return this._googleMap.getTilt();

@@ -386,2 +398,3 @@ }

getZoom() {
this._assertInitialized();
return this._googleMap.getZoom();

@@ -395,2 +408,3 @@ }

get controls() {
this._assertInitialized();
return this._googleMap.controls;

@@ -404,2 +418,3 @@ }

get data() {
this._assertInitialized();
return this._googleMap.data;

@@ -413,2 +428,3 @@ }

get mapTypes() {
this._assertInitialized();
return this._googleMap.mapTypes;

@@ -422,2 +438,3 @@ }

get overlayMapTypes() {
this._assertInitialized();
return this._googleMap.overlayMapTypes;

@@ -462,5 +479,3 @@ }

*/
options => {
return new google.maps.Map(this._mapEl, options);
})), shareReplay(1));
options => new google.maps.Map(this._mapEl, options))), shareReplay(1));
}

@@ -517,83 +532,12 @@ /**

/**
* Asserts that the map has been initialized.
* @private
* @return {?}
*/
_initializeEventHandlers() {
// Ensure that we don't leak if called multiple times.
this._clearListeners();
/** @type {?} */
const eventHandlers = new Map([
['bounds_changed', this.boundsChanged],
['center_changed', this.centerChanged],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['heading_changed', this.headingChanged],
['idle', this.idle],
['maptypeid_changed', this.maptypeidChanged],
['projection_changed', this.projectionChanged],
['tilesloaded', this.tilesloaded],
['tilt_changed', this.tiltChanged],
['zoomChanged', this.zoomChanged],
]);
/** @type {?} */
const mouseEventHandlers = new Map([
['dblclick', this.mapDblclick],
['mousemove', this.mapMousemove],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push(this._googleMap.addListener(name, (/**
* @return {?}
*/
() => {
eventHandler.emit();
})));
}
}));
mouseEventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push(this._googleMap.addListener(name, (/**
* @param {?} event
* @return {?}
*/
(event) => {
eventHandler.emit(event);
})));
}
}));
if (this.mapClick.observers.length > 0) {
this._listeners.push(this._googleMap.addListener('click', (/**
* @param {?} event
* @return {?}
*/
(event) => {
this.mapClick.emit(event);
})));
_assertInitialized() {
if (!this._googleMap) {
throw Error('Cannot access Google Map information before the API has been initialized. ' +
'Please wait for the API to load before trying to interact with it.');
}
}
/**
* Clears all currently-registered event listeners.
* @private
* @return {?}
*/
_clearListeners() {
for (let listener of this._listeners) {
listener.remove();
}
this._listeners = [];
}
}

@@ -639,3 +583,46 @@ GoogleMap.decorators = [

if (false) {
/**
* @type {?}
* @private
*/
GoogleMap.prototype._eventManager;
/**
* Whether we're currently rendering inside a browser.
* @type {?}
* @private
*/
GoogleMap.prototype._isBrowser;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._googleMapChanges;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._options;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._center;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._zoom;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._destroy;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._mapEl;
/** @type {?} */
GoogleMap.prototype._googleMap;
/** @type {?} */
GoogleMap.prototype.height;

@@ -756,47 +743,4 @@ /** @type {?} */

*/
GoogleMap.prototype._mapEl;
/** @type {?} */
GoogleMap.prototype._googleMap;
/**
* Whether we're currently rendering inside a browser.
* @type {?}
* @private
*/
GoogleMap.prototype._isBrowser;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._googleMapChanges;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._listeners;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._options;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._center;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._zoom;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._destroy;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._elementRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9nb29nbGUtbWFwL2dvb2dsZS1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVNBLG9DQUFvQzs7Ozs7Ozs7OztBQUVwQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFakUsK0JBRUM7OztJQURDLGtDQUF1Qjs7Ozs7OztBQVF6QixzQ0FFQzs7O0lBREMsNkNBQWlDOzs7Ozs7QUFJbkMsTUFBTSxPQUFPLGVBQWUsR0FBMkI7SUFDckQsTUFBTSxFQUFFLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUM7SUFDMUMsSUFBSSxFQUFFLEVBQUU7Q0FDVDs7Ozs7QUFHRCxNQUFNLE9BQU8sY0FBYyxHQUFHLE9BQU87Ozs7O0FBRXJDLE1BQU0sT0FBTyxhQUFhLEdBQUcsT0FBTzs7Ozs7O0FBYXBDLE1BQU0sT0FBTyxTQUFTOzs7OztJQThJcEIsWUFDbUIsV0FBdUI7SUFDeEM7OztPQUdHO0lBQzhCLFVBQW1CO1FBTG5DLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBOUlqQyxXQUFNLEdBQUcsY0FBYyxDQUFDO1FBRXhCLFVBQUssR0FBRyxhQUFhLENBQUM7Ozs7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SUFHOUIsK0JBQTRCOzs7OztJQUM1QixzQ0FBd0Q7Ozs7O0lBRXhELCtCQUF5RDs7Ozs7SUFFekQsNkJBQXlGOzs7OztJQUN6Riw0QkFDMkY7Ozs7O0lBQzNGLDBCQUEwRTs7Ozs7SUFFMUUsNkJBQWdEOzs7OztJQUc5QyxnQ0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLy8gV29ya2Fyb3VuZCBmb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYXplbGJ1aWxkL3J1bGVzX25vZGVqcy9pc3N1ZXMvMTI2NVxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJnb29nbGVtYXBzXCIgLz5cblxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT3B0aW9uYWwsXG4gIEluamVjdCxcbiAgUExBVEZPUk1fSUQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtpc1BsYXRmb3JtQnJvd3Nlcn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCBzaGFyZVJlcGxheSwgdGFrZSwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmludGVyZmFjZSBHb29nbGVNYXBzV2luZG93IGV4dGVuZHMgV2luZG93IHtcbiAgZ29vZ2xlPzogdHlwZW9mIGdvb2dsZTtcbn1cblxuLy8gVE9ETyhtYmVocmxpY2gpOiBVcGRhdGUgdGhpcyB0byB1c2Ugb3JpZ2luYWwgbWFwIGFmdGVyIHVwZGF0aW5nIERlZmluaXRlbHlUeXBlZFxuLyoqXG4gKiBFeHRlbmRzIHRoZSBHb29nbGUgTWFwIGludGVyZmFjZSBkdWUgdG8gdGhlIERlZmluaXRlbHkgVHlwZWQgaW1wbGVtZW50YXRpb25cbiAqIG1pc3NpbmcgXCJnZXRDbGlja2FibGVJY29uc1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZWRHb29nbGVNYXAgZXh0ZW5kcyBnb29nbGUubWFwcy5NYXAge1xuICBnZXRDbGlja2FibGVJY29uczogKCkgPT4gYm9vbGVhbjtcbn1cblxuLyoqIGRlZmF1bHQgb3B0aW9ucyBzZXQgdG8gdGhlIEdvb2dsZXBsZXggKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX09QVElPTlM6IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnMgPSB7XG4gIGNlbnRlcjoge2xhdDogMzcuNDIxOTk1LCBsbmc6IC0xMjIuMDg0MDkyfSxcbiAgem9vbTogMTcsXG59O1xuXG4vKiogQXJiaXRyYXJ5IGRlZmF1bHQgaGVpZ2h0IGZvciB0aGUgbWFwIGVsZW1lbnQgKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9ICc1MDBweCc7XG4vKiogQXJiaXRyYXJ5IGRlZmF1bHQgd2lkdGggZm9yIHRoZSBtYXAgZWxlbWVudCAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAnNTAwcHgnO1xuXG4vKipcbiAqIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhIEdvb2dsZSBNYXAgdmlhIHRoZSBHb29nbGUgTWFwcyBKYXZhU2NyaXB0XG4gKiBBUEkuXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ29vZ2xlLW1hcCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+PC9kaXY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZU1hcCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBoZWlnaHQgPSBERUZBVUxUX0hFSUdIVDtcblxuICBASW5wdXQoKSB3aWR0aCA9IERFRkFVTFRfV0lEVEg7XG5cbiAgQElucHV0KClcbiAgc2V0IGNlbnRlcihjZW50ZXI6IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWx8Z29vZ2xlLm1hcHMuTGF0TG5nKSB7XG4gICAgdGhpcy5fY2VudGVyLm5leHQoY2VudGVyKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgem9vbSh6b29tOiBudW1iZXIpIHtcbiAgICB0aGlzLl96b29tLm5leHQoem9vbSk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnMob3B0aW9uczogZ29vZ2xlLm1hcHMuTWFwT3B0aW9ucykge1xuICAgIHRoaXMuX29wdGlvbnMubmV4dChvcHRpb25zIHx8IERFRkFVTFRfT1BUSU9OUyk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmJvdW5kc19jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgYm91bmRzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmNlbnRlcl9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgY2VudGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmNsaWNrXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnR8Z29vZ2xlLm1hcHMuSWNvbk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5kYmxjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpIG1hcERibGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZHJhZ1xuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWcgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5kcmFnZW5kXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwRHJhZ2VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmRyYWdzdGFydFxuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWdzdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmhlYWRpbmdfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIGhlYWRpbmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuaWRsZVxuICAgKi9cbiAgQE91dHB1dCgpIGlkbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5tYXB0eXBlaWRfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIG1hcHR5cGVpZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5tb3VzZW1vdmVcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBNb3VzZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5tb3VzZW91dFxuICAgKi9cbiAgQE91dHB1dCgpIG1hcE1vdXNlb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAubW91c2VvdmVyXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwTW91c2VvdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLnByb2plY3Rpb25fY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIHByb2plY3Rpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAucmlnaHRjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpIG1hcFJpZ2h0Y2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC50aWxlc2xvYWRlZFxuICAgKi9cbiAgQE91dHB1dCgpIHRpbGVzbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAudGlsdF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgdGlsdENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC56b29tX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSB6b29tQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIF9tYXBFbDogSFRNTEVsZW1lbnQ7XG4gIF9nb29nbGVNYXAhOiBVcGRhdGVkR29vZ2xlTWFwO1xuXG4gIC8qKiBXaGV0aGVyIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgaW5zaWRlIGEgYnJvd3Nlci4gKi9cbiAgcHJpdmF0ZSBfaXNCcm93c2VyOiBib29sZWFuO1xuICBwcml2YXRlIF9nb29nbGVNYXBDaGFuZ2VzITogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5NYXA+O1xuXG4gIHByaXZhdGUgX2xpc3RlbmVyczogZ29vZ2xlLm1hcHMuTWFwc0V2ZW50TGlzdGVuZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGdvb2dsZS5tYXBzLk1hcE9wdGlvbnM+KERFRkFVTFRfT1BUSU9OUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NlbnRlciA9XG4gICAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWx8Z29vZ2xlLm1hcHMuTGF0TG5nfHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfem9vbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyfHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIGBwbGF0Zm9ybUlkYCBwYXJhbWV0ZXIgdG8gYmVjb21lIHJlcXVpcmVkLlxuICAgICAqIEBicmVha2luZy1jaGFuZ2UgMTAuMC4wXG4gICAgICovXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZD86IE9iamVjdCkge1xuXG4gICAgLy8gQGJyZWFraW5nLWNoYW5nZSAxMC4wLjAgUmVtb3ZlIG51bGwgY2hlY2sgZm9yIGBwbGF0Zm9ybUlkYC5cbiAgICB0aGlzLl9pc0Jyb3dzZXIgPVxuICAgICAgICBwbGF0Zm9ybUlkID8gaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkgOiB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiAhIXdpbmRvdztcblxuICAgIGlmICh0aGlzLl9pc0Jyb3dzZXIpIHtcbiAgICAgIGNvbnN0IGdvb2dsZU1hcHNXaW5kb3c6IEdvb2dsZU1hcHNXaW5kb3cgPSB3aW5kb3c7XG4gICAgICBpZiAoIWdvb2dsZU1hcHNXaW5kb3cuZ29vZ2xlKSB7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgJ05hbWVzcGFjZSBnb29nbGUgbm90IGZvdW5kLCBjYW5ub3QgY29uc3RydWN0IGVtYmVkZGVkIGdvb2dsZSAnICtcbiAgICAgICAgICAgICdtYXAuIFBsZWFzZSBpbnN0YWxsIHRoZSBHb29nbGUgTWFwcyBKYXZhU2NyaXB0IEFQSTogJyArXG4gICAgICAgICAgICAnaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvJyArXG4gICAgICAgICAgICAndHV0b3JpYWwjTG9hZGluZ190aGVfTWFwc19BUEknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9zZXRTaXplKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBJdCBzaG91bGQgYmUgYSBub29wIGR1cmluZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgaWYgKHRoaXMuX2lzQnJvd3Nlcikge1xuICAgICAgdGhpcy5fbWFwRWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1hcC1jb250YWluZXInKSE7XG4gICAgICB0aGlzLl9zZXRTaXplKCk7XG5cbiAgICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uc0NoYW5nZXMgPSB0aGlzLl9jb21iaW5lT3B0aW9ucygpO1xuXG4gICAgICB0aGlzLl9nb29nbGVNYXBDaGFuZ2VzID0gdGhpcy5faW5pdGlhbGl6ZU1hcChjb21iaW5lZE9wdGlvbnNDaGFuZ2VzKTtcbiAgICAgIHRoaXMuX2dvb2dsZU1hcENoYW5nZXMuc3Vic2NyaWJlKChnb29nbGVNYXA6IGdvb2dsZS5tYXBzLk1hcCkgPT4ge1xuICAgICAgICB0aGlzLl9nb29nbGVNYXAgPSBnb29nbGVNYXAgYXMgVXBkYXRlZEdvb2dsZU1hcDtcblxuICAgICAgICB0aGlzLl9pbml0aWFsaXplRXZlbnRIYW5kbGVycygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3dhdGNoRm9yT3B0aW9uc0NoYW5nZXMoKTtcbiAgICAgIHRoaXMuX3dhdGNoRm9yQ2VudGVyQ2hhbmdlcygpO1xuICAgICAgdGhpcy5fd2F0Y2hGb3Jab29tQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcbiAgICB0aGlzLl9jbGVhckxpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5maXRCb3VuZHNcbiAgICovXG4gIGZpdEJvdW5kcyhcbiAgICAgIGJvdW5kczogZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzfGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kc0xpdGVyYWwsXG4gICAgICBwYWRkaW5nPzogbnVtYmVyfGdvb2dsZS5tYXBzLlBhZGRpbmcpIHtcbiAgICB0aGlzLl9nb29nbGVNYXAuZml0Qm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLnBhbkJ5XG4gICAqL1xuICBwYW5CeSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIHRoaXMuX2dvb2dsZU1hcC5wYW5CeSh4LCB5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAucGFuVG9cbiAgICovXG4gIHBhblRvKGxhdExuZzogZ29vZ2xlLm1hcHMuTGF0TG5nfGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwpIHtcbiAgICB0aGlzLl9nb29nbGVNYXAucGFuVG8obGF0TG5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAucGFuVG9Cb3VuZHNcbiAgICovXG4gIHBhblRvQm91bmRzKFxuICAgICAgbGF0TG5nQm91bmRzOiBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHN8Z29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzTGl0ZXJhbCxcbiAgICAgIHBhZGRpbmc/OiBudW1iZXJ8Z29vZ2xlLm1hcHMuUGFkZGluZykge1xuICAgIHRoaXMuX2dvb2dsZU1hcC5wYW5Ub0JvdW5kcyhsYXRMbmdCb3VuZHMsIHBhZGRpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRCb3VuZHNcbiAgICovXG4gIGdldEJvdW5kcygpOiBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHN8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5nZXRCb3VuZHMoKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRDZW50ZXJcbiAgICovXG4gIGdldENlbnRlcigpOiBnb29nbGUubWFwcy5MYXRMbmcge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0Q2VudGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldENsaWNrYWJsZUljb25zXG4gICAqL1xuICBnZXRDbGlja2FibGVJY29ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldENsaWNrYWJsZUljb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldEhlYWRpbmdcbiAgICovXG4gIGdldEhlYWRpbmcoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldEhlYWRpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZ2V0TWFwVHlwZUlkXG4gICAqL1xuICBnZXRNYXBUeXBlSWQoKTogZ29vZ2xlLm1hcHMuTWFwVHlwZUlkfHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5nZXRNYXBUeXBlSWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZ2V0UHJvamVjdGlvblxuICAgKi9cbiAgZ2V0UHJvamVjdGlvbigpOiBnb29nbGUubWFwcy5Qcm9qZWN0aW9ufG51bGwge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0UHJvamVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRTdHJlZXRWaWV3XG4gICAqL1xuICBnZXRTdHJlZXRWaWV3KCk6IGdvb2dsZS5tYXBzLlN0cmVldFZpZXdQYW5vcmFtYSB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5nZXRTdHJlZXRWaWV3KCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldFRpbHRcbiAgICovXG4gIGdldFRpbHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldFRpbHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZ2V0Wm9vbVxuICAgKi9cbiAgZ2V0Wm9vbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0Wm9vbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5jb250cm9sc1xuICAgKi9cbiAgZ2V0IGNvbnRyb2xzKCk6IEFycmF5PGdvb2dsZS5tYXBzLk1WQ0FycmF5PE5vZGU+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5jb250cm9scztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZGF0YVxuICAgKi9cbiAgZ2V0IGRhdGEoKTogZ29vZ2xlLm1hcHMuRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5tYXBUeXBlc1xuICAgKi9cbiAgZ2V0IG1hcFR5cGVzKCk6IGdvb2dsZS5tYXBzLk1hcFR5cGVSZWdpc3RyeSB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5tYXBUeXBlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAub3ZlcmxheU1hcFR5cGVzXG4gICAqL1xuICBnZXQgb3ZlcmxheU1hcFR5cGVzKCk6IGdvb2dsZS5tYXBzLk1WQ0FycmF5PGdvb2dsZS5tYXBzLk1hcFR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLm92ZXJsYXlNYXBUeXBlcztcbiAgfVxuXG4gIHByaXZhdGUgX3NldFNpemUoKSB7XG4gICAgaWYgKHRoaXMuX21hcEVsKSB7XG4gICAgICB0aGlzLl9tYXBFbC5zdHlsZS5oZWlnaHQgPSB0aGlzLmhlaWdodCB8fCBERUZBVUxUX0hFSUdIVDtcbiAgICAgIHRoaXMuX21hcEVsLnN0eWxlLndpZHRoID0gdGhpcy53aWR0aCB8fCBERUZBVUxUX1dJRFRIO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDb21iaW5lcyB0aGUgY2VudGVyIGFuZCB6b29tIGFuZCB0aGUgb3RoZXIgbWFwIG9wdGlvbnMgaW50byBhIHNpbmdsZSBvYmplY3QgKi9cbiAgcHJpdmF0ZSBfY29tYmluZU9wdGlvbnMoKTogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5NYXBPcHRpb25zPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuX29wdGlvbnMsIHRoaXMuX2NlbnRlciwgdGhpcy5fem9vbV0pXG4gICAgICAgIC5waXBlKG1hcCgoW29wdGlvbnMsIGNlbnRlciwgem9vbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBjb21iaW5lZE9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgY2VudGVyOiBjZW50ZXIgfHwgb3B0aW9ucy5jZW50ZXIsXG4gICAgICAgICAgICB6b29tOiB6b29tICE9PSB1bmRlZmluZWQgPyB6b29tIDogb3B0aW9ucy56b29tLFxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVkT3B0aW9ucztcbiAgICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZU1hcChvcHRpb25zQ2hhbmdlczogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5NYXBPcHRpb25zPik6XG4gICAgICBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcD4ge1xuICAgIHJldHVybiBvcHRpb25zQ2hhbmdlcy5waXBlKFxuICAgICAgICB0YWtlKDEpLCBtYXAob3B0aW9ucyA9PiB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBnb29nbGUubWFwcy5NYXAodGhpcy5fbWFwRWwsIG9wdGlvbnMpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JPcHRpb25zQ2hhbmdlcygpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9nb29nbGVNYXBDaGFuZ2VzLCB0aGlzLl9vcHRpb25zXSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZ29vZ2xlTWFwLCBvcHRpb25zXSkgPT4ge1xuICAgICAgICAgIGdvb2dsZU1hcC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoRm9yQ2VudGVyQ2hhbmdlcygpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9nb29nbGVNYXBDaGFuZ2VzLCB0aGlzLl9jZW50ZXJdKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtnb29nbGVNYXAsIGNlbnRlcl0pID0+IHtcbiAgICAgICAgICBpZiAoY2VudGVyKSB7XG4gICAgICAgICAgICBnb29nbGVNYXAuc2V0Q2VudGVyKGNlbnRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoRm9yWm9vbUNoYW5nZXMoKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fZ29vZ2xlTWFwQ2hhbmdlcywgdGhpcy5fem9vbV0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgoW2dvb2dsZU1hcCwgem9vbV0pID0+IHtcbiAgICAgICAgICBpZiAoem9vbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBnb29nbGVNYXAuc2V0Wm9vbSh6b29tKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUV2ZW50SGFuZGxlcnMoKSB7XG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgbGVhayBpZiBjYWxsZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgdGhpcy5fY2xlYXJMaXN0ZW5lcnMoKTtcblxuICAgIGNvbnN0IGV2ZW50SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgRXZlbnRFbWl0dGVyPHZvaWQ+PihbXG4gICAgICBbJ2JvdW5kc19jaGFuZ2VkJywgdGhpcy5ib3VuZHNDaGFuZ2VkXSxcbiAgICAgIFsnY2VudGVyX2NoYW5nZWQnLCB0aGlzLmNlbnRlckNoYW5nZWRdLFxuICAgICAgWydkcmFnJywgdGhpcy5tYXBEcmFnXSxcbiAgICAgIFsnZHJhZ2VuZCcsIHRoaXMubWFwRHJhZ2VuZF0sXG4gICAgICBbJ2RyYWdzdGFydCcsIHRoaXMubWFwRHJhZ3N0YXJ0XSxcbiAgICAgIFsnaGVhZGluZ19jaGFuZ2VkJywgdGhpcy5oZWFkaW5nQ2hhbmdlZF0sXG4gICAgICBbJ2lkbGUnLCB0aGlzLmlkbGVdLFxuICAgICAgWydtYXB0eXBlaWRfY2hhbmdlZCcsIHRoaXMubWFwdHlwZWlkQ2hhbmdlZF0sXG4gICAgICBbJ3Byb2plY3Rpb25fY2hhbmdlZCcsIHRoaXMucHJvamVjdGlvbkNoYW5nZWRdLFxuICAgICAgWyd0aWxlc2xvYWRlZCcsIHRoaXMudGlsZXNsb2FkZWRdLFxuICAgICAgWyd0aWx0X2NoYW5nZWQnLCB0aGlzLnRpbHRDaGFuZ2VkXSxcbiAgICAgIFsnem9vbUNoYW5nZWQnLCB0aGlzLnpvb21DaGFuZ2VkXSxcbiAgICBdKTtcbiAgICBjb25zdCBtb3VzZUV2ZW50SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+PihbXG4gICAgICBbJ2RibGNsaWNrJywgdGhpcy5tYXBEYmxjbGlja10sXG4gICAgICBbJ21vdXNlbW92ZScsIHRoaXMubWFwTW91c2Vtb3ZlXSxcbiAgICAgIFsnbW91c2VvdXQnLCB0aGlzLm1hcE1vdXNlb3V0XSxcbiAgICAgIFsnbW91c2VvdmVyJywgdGhpcy5tYXBNb3VzZW92ZXJdLFxuICAgICAgWydyaWdodGNsaWNrJywgdGhpcy5tYXBSaWdodGNsaWNrXSxcbiAgICBdKTtcbiAgICBldmVudEhhbmRsZXJzLmZvckVhY2goKGV2ZW50SGFuZGxlcjogRXZlbnRFbWl0dGVyPHZvaWQ+LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChldmVudEhhbmRsZXIub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2godGhpcy5fZ29vZ2xlTWFwLmFkZExpc3RlbmVyKG5hbWUsICgpID0+IHtcbiAgICAgICAgICBldmVudEhhbmRsZXIuZW1pdCgpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbW91c2VFdmVudEhhbmRsZXJzLmZvckVhY2goXG4gICAgICAgIChldmVudEhhbmRsZXI6IEV2ZW50RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50SGFuZGxlci5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5fZ29vZ2xlTWFwLmFkZExpc3RlbmVyKG5hbWUsIChldmVudDogZ29vZ2xlLm1hcHMuTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIGlmICh0aGlzLm1hcENsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaCh0aGlzLl9nb29nbGVNYXAuYWRkTGlzdGVuZXIoXG4gICAgICAgICAgJ2NsaWNrJywgKGV2ZW50OiBnb29nbGUubWFwcy5Nb3VzZUV2ZW50fGdvb2dsZS5tYXBzLkljb25Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1hcENsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2xlYXJzIGFsbCBjdXJyZW50bHktcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuICovXG4gIHByaXZhdGUgX2NsZWFyTGlzdGVuZXJzKCkge1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9nb29nbGUtbWFwL2dvb2dsZS1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSxvQ0FBb0M7Ozs7Ozs7Ozs7QUFFcEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFJTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQUVyRCwrQkFFQzs7O0lBREMsa0NBQXVCOzs7Ozs7O0FBUXpCLHNDQUVDOzs7SUFEQyw2Q0FBaUM7Ozs7OztBQUluQyxNQUFNLE9BQU8sZUFBZSxHQUEyQjtJQUNyRCxNQUFNLEVBQUUsRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBQztJQUMxQyxJQUFJLEVBQUUsRUFBRTtDQUNUOzs7OztBQUdELE1BQU0sT0FBTyxjQUFjLEdBQUcsT0FBTzs7Ozs7QUFFckMsTUFBTSxPQUFPLGFBQWEsR0FBRyxPQUFPOzs7Ozs7QUFhcEMsTUFBTSxPQUFPLFNBQVM7Ozs7O0lBOEpwQixZQUNtQixXQUF1QjtJQUN4Qzs7O09BR0c7SUFDOEIsVUFBbUI7UUFMbkMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUE5SmxDLGtCQUFh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QkFBNkI7O0lBRTdCLDJCQUFpQzs7SUFFakMsMEJBQStCOzs7Ozs7SUFtQi9CLGtDQUM0Rjs7Ozs7O0lBTTVGLGtDQUM0Rjs7Ozs7O0lBTTVGLDZCQUVrRzs7Ozs7O0lBTWxHLGdDQUUwRTs7Ozs7O0lBTTFFLDRCQUFzRjs7Ozs7O0lBTXRGLCtCQUE0Rjs7Ozs7O0lBTTVGLGlDQUFnRzs7Ozs7O0lBTWhHLG1DQUM4Rjs7Ozs7O0lBTTlGLHlCQUFtRjs7Ozs7O0lBTW5GLHFDQUNrRzs7Ozs7O0lBTWxHLGlDQUUyRTs7Ozs7O0lBTTNFLGdDQUUwRTs7Ozs7O0lBTTFFLGlDQUUyRTs7Ozs7O0lBTTNFLHNDQUVrRTs7Ozs7O0lBTWxFLGtDQUU0RTs7Ozs7O0lBTTVFLGdDQUFpRzs7Ozs7O0lBTWpHLGdDQUFrRzs7Ozs7O0lBTWxHLGdDQUFpRzs7Ozs7SUFHL0YsZ0NBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFdvcmthcm91bmQgZm9yOiBodHRwczovL2dpdGh1Yi5jb20vYmF6ZWxidWlsZC9ydWxlc19ub2RlanMvaXNzdWVzLzEyNjVcbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiZ29vZ2xlbWFwc1wiIC8+XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPcHRpb25hbCxcbiAgSW5qZWN0LFxuICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2lzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHNoYXJlUmVwbGF5LCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TWFwRXZlbnRNYW5hZ2VyfSBmcm9tICcuLi9tYXAtZXZlbnQtbWFuYWdlcic7XG5cbmludGVyZmFjZSBHb29nbGVNYXBzV2luZG93IGV4dGVuZHMgV2luZG93IHtcbiAgZ29vZ2xlPzogdHlwZW9mIGdvb2dsZTtcbn1cblxuLy8gVE9ETyhtYmVocmxpY2gpOiBVcGRhdGUgdGhpcyB0byB1c2Ugb3JpZ2luYWwgbWFwIGFmdGVyIHVwZGF0aW5nIERlZmluaXRlbHlUeXBlZFxuLyoqXG4gKiBFeHRlbmRzIHRoZSBHb29nbGUgTWFwIGludGVyZmFjZSBkdWUgdG8gdGhlIERlZmluaXRlbHkgVHlwZWQgaW1wbGVtZW50YXRpb25cbiAqIG1pc3NpbmcgXCJnZXRDbGlja2FibGVJY29uc1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZWRHb29nbGVNYXAgZXh0ZW5kcyBnb29nbGUubWFwcy5NYXAge1xuICBnZXRDbGlja2FibGVJY29uczogKCkgPT4gYm9vbGVhbjtcbn1cblxuLyoqIGRlZmF1bHQgb3B0aW9ucyBzZXQgdG8gdGhlIEdvb2dsZXBsZXggKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX09QVElPTlM6IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnMgPSB7XG4gIGNlbnRlcjoge2xhdDogMzcuNDIxOTk1LCBsbmc6IC0xMjIuMDg0MDkyfSxcbiAgem9vbTogMTcsXG59O1xuXG4vKiogQXJiaXRyYXJ5IGRlZmF1bHQgaGVpZ2h0IGZvciB0aGUgbWFwIGVsZW1lbnQgKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9ICc1MDBweCc7XG4vKiogQXJiaXRyYXJ5IGRlZmF1bHQgd2lkdGggZm9yIHRoZSBtYXAgZWxlbWVudCAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAnNTAwcHgnO1xuXG4vKipcbiAqIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhIEdvb2dsZSBNYXAgdmlhIHRoZSBHb29nbGUgTWFwcyBKYXZhU2NyaXB0XG4gKiBBUEkuXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ29vZ2xlLW1hcCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+PC9kaXY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZU1hcCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9ldmVudE1hbmFnZXIgPSBuZXcgTWFwRXZlbnRNYW5hZ2VyKCk7XG5cbiAgLyoqIFdoZXRoZXIgd2UncmUgY3VycmVudGx5IHJlbmRlcmluZyBpbnNpZGUgYSBicm93c2VyLiAqL1xuICBwcml2YXRlIF9pc0Jyb3dzZXI6IGJvb2xlYW47XG4gIHByaXZhdGUgX2dvb2dsZU1hcENoYW5nZXM6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTWFwPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5NYXBPcHRpb25zPihERUZBVUxUX09QVElPTlMpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jZW50ZXIgPVxuICAgICAgbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsfGdvb2dsZS5tYXBzLkxhdExuZ3x1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3pvb20gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcnx1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9tYXBFbDogSFRNTEVsZW1lbnQ7XG4gIF9nb29nbGVNYXA6IFVwZGF0ZWRHb29nbGVNYXA7XG5cbiAgQElucHV0KCkgaGVpZ2h0ID0gREVGQVVMVF9IRUlHSFQ7XG5cbiAgQElucHV0KCkgd2lkdGggPSBERUZBVUxUX1dJRFRIO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjZW50ZXIoY2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsfGdvb2dsZS5tYXBzLkxhdExuZykge1xuICAgIHRoaXMuX2NlbnRlci5uZXh0KGNlbnRlcik7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgdGhpcy5fem9vbS5uZXh0KHpvb20pO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnMpIHtcbiAgICB0aGlzLl9vcHRpb25zLm5leHQob3B0aW9ucyB8fCBERUZBVUxUX09QVElPTlMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5ib3VuZHNfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGJvdW5kc0NoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2JvdW5kc19jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5jZW50ZXJfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGNlbnRlckNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2NlbnRlcl9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5jbGlja1xuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcENsaWNrOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnR8Z29vZ2xlLm1hcHMuSWNvbk1vdXNlRXZlbnQ+ID1cbiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50fGdvb2dsZS5tYXBzLkljb25Nb3VzZUV2ZW50PignY2xpY2snKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmRibGNsaWNrXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwRGJsY2xpY2s6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdkYmxjbGljaycpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZHJhZ1xuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWc6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2RyYWcnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmRyYWdlbmRcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBEcmFnZW5kOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdkcmFnZW5kJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5kcmFnc3RhcnRcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBEcmFnc3RhcnQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2RyYWdzdGFydCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuaGVhZGluZ19jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgaGVhZGluZ0NoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2hlYWRpbmdfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuaWRsZVxuICAgKi9cbiAgQE91dHB1dCgpIGlkbGU6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2lkbGUnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLm1hcHR5cGVpZF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwdHlwZWlkQ2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPignbWFwdHlwZWlkX2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLm1vdXNlbW92ZVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcE1vdXNlbW92ZTogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ21vdXNlbW92ZScpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAubW91c2VvdXRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBNb3VzZW91dDogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ21vdXNlb3V0Jyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5tb3VzZW92ZXJcbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBNb3VzZW92ZXI6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdtb3VzZW92ZXInKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5wcm9qZWN0aW9uX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwcm9qZWN0aW9uQ2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3Byb2plY3Rpb25fY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAucmlnaHRjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcFJpZ2h0Y2xpY2s6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdyaWdodGNsaWNrJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC50aWxlc2xvYWRlZFxuICAgKi9cbiAgQE91dHB1dCgpIHRpbGVzbG9hZGVkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCd0aWxlc2xvYWRlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAudGlsdF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgdGlsdENoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3RpbHRfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuem9vbV9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgem9vbUNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3pvb21DaGFuZ2VkJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBgcGxhdGZvcm1JZGAgcGFyYW1ldGVyIHRvIGJlY29tZSByZXF1aXJlZC5cbiAgICAgKiBAYnJlYWtpbmctY2hhbmdlIDEwLjAuMFxuICAgICAqL1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ/OiBPYmplY3QpIHtcblxuICAgIC8vIEBicmVha2luZy1jaGFuZ2UgMTAuMC4wIFJlbW92ZSBudWxsIGNoZWNrIGZvciBgcGxhdGZvcm1JZGAuXG4gICAgdGhpcy5faXNCcm93c2VyID1cbiAgICAgICAgcGxhdGZvcm1JZCA/IGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpIDogdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgISF3aW5kb3c7XG5cbiAgICBpZiAodGhpcy5faXNCcm93c2VyKSB7XG4gICAgICBjb25zdCBnb29nbGVNYXBzV2luZG93OiBHb29nbGVNYXBzV2luZG93ID0gd2luZG93O1xuICAgICAgaWYgKCFnb29nbGVNYXBzV2luZG93Lmdvb2dsZSkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICdOYW1lc3BhY2UgZ29vZ2xlIG5vdCBmb3VuZCwgY2Fubm90IGNvbnN0cnVjdCBlbWJlZGRlZCBnb29nbGUgJyArXG4gICAgICAgICAgICAnbWFwLiBQbGVhc2UgaW5zdGFsbCB0aGUgR29vZ2xlIE1hcHMgSmF2YVNjcmlwdCBBUEk6ICcgK1xuICAgICAgICAgICAgJ2h0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0LycgK1xuICAgICAgICAgICAgJ3R1dG9yaWFsI0xvYWRpbmdfdGhlX01hcHNfQVBJJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gSXQgc2hvdWxkIGJlIGEgbm9vcCBkdXJpbmcgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGlmICh0aGlzLl9pc0Jyb3dzZXIpIHtcbiAgICAgIHRoaXMuX21hcEVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYXAtY29udGFpbmVyJykhO1xuICAgICAgdGhpcy5fc2V0U2l6ZSgpO1xuICAgICAgdGhpcy5fZ29vZ2xlTWFwQ2hhbmdlcyA9IHRoaXMuX2luaXRpYWxpemVNYXAodGhpcy5fY29tYmluZU9wdGlvbnMoKSk7XG4gICAgICB0aGlzLl9nb29nbGVNYXBDaGFuZ2VzLnN1YnNjcmliZSgoZ29vZ2xlTWFwOiBnb29nbGUubWFwcy5NYXApID0+IHtcbiAgICAgICAgdGhpcy5fZ29vZ2xlTWFwID0gZ29vZ2xlTWFwIGFzIFVwZGF0ZWRHb29nbGVNYXA7XG4gICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5zZXRUYXJnZXQodGhpcy5fZ29vZ2xlTWFwKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl93YXRjaEZvck9wdGlvbnNDaGFuZ2VzKCk7XG4gICAgICB0aGlzLl93YXRjaEZvckNlbnRlckNoYW5nZXMoKTtcbiAgICAgIHRoaXMuX3dhdGNoRm9yWm9vbUNoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZml0Qm91bmRzXG4gICAqL1xuICBmaXRCb3VuZHMoXG4gICAgICBib3VuZHM6IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kc3xnb29nbGUubWFwcy5MYXRMbmdCb3VuZHNMaXRlcmFsLFxuICAgICAgcGFkZGluZz86IG51bWJlcnxnb29nbGUubWFwcy5QYWRkaW5nKSB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICB0aGlzLl9nb29nbGVNYXAuZml0Qm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLnBhbkJ5XG4gICAqL1xuICBwYW5CeSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCk7XG4gICAgdGhpcy5fZ29vZ2xlTWFwLnBhbkJ5KHgsIHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5wYW5Ub1xuICAgKi9cbiAgcGFuVG8obGF0TG5nOiBnb29nbGUubWFwcy5MYXRMbmd8Z29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCkge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCk7XG4gICAgdGhpcy5fZ29vZ2xlTWFwLnBhblRvKGxhdExuZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLnBhblRvQm91bmRzXG4gICAqL1xuICBwYW5Ub0JvdW5kcyhcbiAgICAgIGxhdExuZ0JvdW5kczogZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzfGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kc0xpdGVyYWwsXG4gICAgICBwYWRkaW5nPzogbnVtYmVyfGdvb2dsZS5tYXBzLlBhZGRpbmcpIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHRoaXMuX2dvb2dsZU1hcC5wYW5Ub0JvdW5kcyhsYXRMbmdCb3VuZHMsIHBhZGRpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRCb3VuZHNcbiAgICovXG4gIGdldEJvdW5kcygpOiBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHN8bnVsbCB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldEJvdW5kcygpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldENlbnRlclxuICAgKi9cbiAgZ2V0Q2VudGVyKCk6IGdvb2dsZS5tYXBzLkxhdExuZyB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldENlbnRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRDbGlja2FibGVJY29uc1xuICAgKi9cbiAgZ2V0Q2xpY2thYmxlSWNvbnMoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldENsaWNrYWJsZUljb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldEhlYWRpbmdcbiAgICovXG4gIGdldEhlYWRpbmcoKTogbnVtYmVyIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0SGVhZGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRNYXBUeXBlSWRcbiAgICovXG4gIGdldE1hcFR5cGVJZCgpOiBnb29nbGUubWFwcy5NYXBUeXBlSWR8c3RyaW5nIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0TWFwVHlwZUlkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldFByb2plY3Rpb25cbiAgICovXG4gIGdldFByb2plY3Rpb24oKTogZ29vZ2xlLm1hcHMuUHJvamVjdGlvbnxudWxsIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0UHJvamVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRTdHJlZXRWaWV3XG4gICAqL1xuICBnZXRTdHJlZXRWaWV3KCk6IGdvb2dsZS5tYXBzLlN0cmVldFZpZXdQYW5vcmFtYSB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldFN0cmVldFZpZXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZ2V0VGlsdFxuICAgKi9cbiAgZ2V0VGlsdCgpOiBudW1iZXIge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5nZXRUaWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldFpvb21cbiAgICovXG4gIGdldFpvb20oKTogbnVtYmVyIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0Wm9vbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5jb250cm9sc1xuICAgKi9cbiAgZ2V0IGNvbnRyb2xzKCk6IEFycmF5PGdvb2dsZS5tYXBzLk1WQ0FycmF5PE5vZGU+PiB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmNvbnRyb2xzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5kYXRhXG4gICAqL1xuICBnZXQgZGF0YSgpOiBnb29nbGUubWFwcy5EYXRhIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAubWFwVHlwZXNcbiAgICovXG4gIGdldCBtYXBUeXBlcygpOiBnb29nbGUubWFwcy5NYXBUeXBlUmVnaXN0cnkge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5tYXBUeXBlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAub3ZlcmxheU1hcFR5cGVzXG4gICAqL1xuICBnZXQgb3ZlcmxheU1hcFR5cGVzKCk6IGdvb2dsZS5tYXBzLk1WQ0FycmF5PGdvb2dsZS5tYXBzLk1hcFR5cGU+IHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAub3ZlcmxheU1hcFR5cGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0U2l6ZSgpIHtcbiAgICBpZiAodGhpcy5fbWFwRWwpIHtcbiAgICAgIHRoaXMuX21hcEVsLnN0eWxlLmhlaWdodCA9IHRoaXMuaGVpZ2h0IHx8IERFRkFVTFRfSEVJR0hUO1xuICAgICAgdGhpcy5fbWFwRWwuc3R5bGUud2lkdGggPSB0aGlzLndpZHRoIHx8IERFRkFVTFRfV0lEVEg7XG4gICAgfVxuICB9XG5cbiAgLyoqIENvbWJpbmVzIHRoZSBjZW50ZXIgYW5kIHpvb20gYW5kIHRoZSBvdGhlciBtYXAgb3B0aW9ucyBpbnRvIGEgc2luZ2xlIG9iamVjdCAqL1xuICBwcml2YXRlIF9jb21iaW5lT3B0aW9ucygpOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcE9wdGlvbnM+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fb3B0aW9ucywgdGhpcy5fY2VudGVyLCB0aGlzLl96b29tXSlcbiAgICAgICAgLnBpcGUobWFwKChbb3B0aW9ucywgY2VudGVyLCB6b29tXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uczogZ29vZ2xlLm1hcHMuTWFwT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBjZW50ZXI6IGNlbnRlciB8fCBvcHRpb25zLmNlbnRlcixcbiAgICAgICAgICAgIHpvb206IHpvb20gIT09IHVuZGVmaW5lZCA/IHpvb20gOiBvcHRpb25zLnpvb20sXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gY29tYmluZWRPcHRpb25zO1xuICAgICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplTWFwKG9wdGlvbnNDaGFuZ2VzOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcE9wdGlvbnM+KTpcbiAgICAgIE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTWFwPiB7XG4gICAgcmV0dXJuIG9wdGlvbnNDaGFuZ2VzLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcChvcHRpb25zID0+IG5ldyBnb29nbGUubWFwcy5NYXAodGhpcy5fbWFwRWwsIG9wdGlvbnMpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JPcHRpb25zQ2hhbmdlcygpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9nb29nbGVNYXBDaGFuZ2VzLCB0aGlzLl9vcHRpb25zXSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZ29vZ2xlTWFwLCBvcHRpb25zXSkgPT4ge1xuICAgICAgICAgIGdvb2dsZU1hcC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoRm9yQ2VudGVyQ2hhbmdlcygpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9nb29nbGVNYXBDaGFuZ2VzLCB0aGlzLl9jZW50ZXJdKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtnb29nbGVNYXAsIGNlbnRlcl0pID0+IHtcbiAgICAgICAgICBpZiAoY2VudGVyKSB7XG4gICAgICAgICAgICBnb29nbGVNYXAuc2V0Q2VudGVyKGNlbnRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoRm9yWm9vbUNoYW5nZXMoKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fZ29vZ2xlTWFwQ2hhbmdlcywgdGhpcy5fem9vbV0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgoW2dvb2dsZU1hcCwgem9vbV0pID0+IHtcbiAgICAgICAgICBpZiAoem9vbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBnb29nbGVNYXAuc2V0Wm9vbSh6b29tKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICB9XG5cbiAgLyoqIEFzc2VydHMgdGhhdCB0aGUgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkLiAqL1xuICBwcml2YXRlIF9hc3NlcnRJbml0aWFsaXplZCgpIHtcbiAgICBpZiAoIXRoaXMuX2dvb2dsZU1hcCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgR29vZ2xlIE1hcCBpbmZvcm1hdGlvbiBiZWZvcmUgdGhlIEFQSSBoYXMgYmVlbiBpbml0aWFsaXplZC4gJyArXG4gICAgICAgICAgICAgICAgICAnUGxlYXNlIHdhaXQgZm9yIHRoZSBBUEkgdG8gbG9hZCBiZWZvcmUgdHJ5aW5nIHRvIGludGVyYWN0IHdpdGggaXQuJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
/**
* @fileoverview added by tsickle
* Generated from: src/google-maps/google-maps-module.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc

@@ -16,2 +17,3 @@ */

import { MapMarker } from './map-marker/map-marker';
import { MapPolyline } from './map-polyline/map-polyline';
/** @type {?} */

@@ -22,2 +24,3 @@ const COMPONENTS = [

MapMarker,
MapPolyline,
];

@@ -32,2 +35,2 @@ export class GoogleMapsModule {

];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0seUJBQXlCLENBQUM7O01BRTVDLFVBQVUsR0FBRztJQUNqQixTQUFTO0lBQ1QsYUFBYTtJQUNiLFNBQVM7Q0FDVjtBQU1ELE1BQU0sT0FBTyxnQkFBZ0I7OztZQUo1QixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLE9BQU8sRUFBRSxVQUFVO2FBQ3BCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0dvb2dsZU1hcH0gZnJvbSAnLi9nb29nbGUtbWFwL2dvb2dsZS1tYXAnO1xuaW1wb3J0IHtNYXBJbmZvV2luZG93fSBmcm9tICcuL21hcC1pbmZvLXdpbmRvdy9tYXAtaW5mby13aW5kb3cnO1xuaW1wb3J0IHtNYXBNYXJrZXJ9IGZyb20gJy4vbWFwLW1hcmtlci9tYXAtbWFya2VyJztcblxuY29uc3QgQ09NUE9ORU5UUyA9IFtcbiAgR29vZ2xlTWFwLFxuICBNYXBJbmZvV2luZG93LFxuICBNYXBNYXJrZXIsXG5dO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IENPTVBPTkVOVFMsXG4gIGV4cG9ydHM6IENPTVBPTkVOVFMsXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZU1hcHNNb2R1bGUge1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFRQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQzs7TUFFbEQsVUFBVSxHQUFHO0lBQ2pCLFNBQVM7SUFDVCxhQUFhO0lBQ2IsU0FBUztJQUNULFdBQVc7Q0FDWjtBQU1ELE1BQU0sT0FBTyxnQkFBZ0I7OztZQUo1QixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLE9BQU8sRUFBRSxVQUFVO2FBQ3BCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0dvb2dsZU1hcH0gZnJvbSAnLi9nb29nbGUtbWFwL2dvb2dsZS1tYXAnO1xuaW1wb3J0IHtNYXBJbmZvV2luZG93fSBmcm9tICcuL21hcC1pbmZvLXdpbmRvdy9tYXAtaW5mby13aW5kb3cnO1xuaW1wb3J0IHtNYXBNYXJrZXJ9IGZyb20gJy4vbWFwLW1hcmtlci9tYXAtbWFya2VyJztcbmltcG9ydCB7TWFwUG9seWxpbmV9IGZyb20gJy4vbWFwLXBvbHlsaW5lL21hcC1wb2x5bGluZSc7XG5cbmNvbnN0IENPTVBPTkVOVFMgPSBbXG4gIEdvb2dsZU1hcCxcbiAgTWFwSW5mb1dpbmRvdyxcbiAgTWFwTWFya2VyLFxuICBNYXBQb2x5bGluZSxcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogQ09NUE9ORU5UUyxcbiAgZXhwb3J0czogQ09NUE9ORU5UUyxcbn0pXG5leHBvcnQgY2xhc3MgR29vZ2xlTWFwc01vZHVsZSB7XG59XG4iXX0=
/**
* @fileoverview added by tsickle
* Generated from: src/google-maps/map-info-window/map-info-window.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc

@@ -15,6 +16,7 @@ */

/// <reference types="googlemaps" />
import { Directive, ElementRef, EventEmitter, Input, Output, } from '@angular/core';
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
import { Directive, ElementRef, Input, Output, } from '@angular/core';
import { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';
import { map, takeUntil } from 'rxjs/operators';
import { GoogleMap } from '../google-map/google-map';
import { MapEventManager } from '../map-event-manager';
/**

@@ -32,2 +34,6 @@ * Angular component that renders a Google Maps info window via the Google Maps JavaScript API.

this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject({});
this._position = new BehaviorSubject(undefined);
this._destroy = new Subject();
/**

@@ -37,3 +43,3 @@ * See

*/
this.closeclick = new EventEmitter();
this.closeclick = this._eventManager.getLazyEmitter('closeclick');
/**

@@ -44,3 +50,3 @@ * See

*/
this.contentChanged = new EventEmitter();
this.contentChanged = this._eventManager.getLazyEmitter('content_changed');
/**

@@ -50,3 +56,3 @@ * See

*/
this.domready = new EventEmitter();
this.domready = this._eventManager.getLazyEmitter('domready');
/**

@@ -57,3 +63,3 @@ * See

*/
this.positionChanged = new EventEmitter();
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**

@@ -64,7 +70,3 @@ * See

*/
this.zindexChanged = new EventEmitter();
this._options = new BehaviorSubject({});
this._position = new BehaviorSubject(undefined);
this._listeners = [];
this._destroy = new Subject();
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}

@@ -99,3 +101,3 @@ /**

this._infoWindow = new google.maps.InfoWindow(options);
this._initializeEventHandlers();
this._eventManager.setTarget(this._infoWindow);
}

@@ -108,7 +110,5 @@ }));

ngOnDestroy() {
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
for (let listener of this._listeners) {
listener.remove();
}
this.close();

@@ -179,44 +179,2 @@ }

}
/**
* @private
* @return {?}
*/
_initializeEventHandlers() {
// Ensure that we don't leak if called multiple times.
this._clearListeners();
/** @type {?} */
const eventHandlers = new Map([
['closeclick', this.closeclick],
['content_changed', this.contentChanged],
['domready', this.domready],
['position_changed', this.positionChanged],
['zindex_changed', this.zindexChanged],
]);
eventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push((/** @type {?} */ (this._infoWindow)).addListener(name, (/**
* @return {?}
*/
() => {
eventHandler.emit();
})));
}
}));
}
/**
* Clears all currently-registered event listeners.
* @private
* @return {?}
*/
_clearListeners() {
for (let listener of this._listeners) {
listener.remove();
}
this._listeners = [];
}
}

@@ -245,2 +203,27 @@ MapInfoWindow.decorators = [

/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._eventManager;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._options;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._position;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._destroy;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._infoWindow;
/**
* See

@@ -282,27 +265,2 @@ * developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick

*/
MapInfoWindow.prototype._options;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._position;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._listeners;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._destroy;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._infoWindow;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._googleMap;

@@ -315,2 +273,2 @@ /**

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWluZm8td2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2dvb2dsZS1tYXBzL21hcC1pbmZvLXdpbmRvdy9tYXAtaW5mby13aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVNBLG9DQUFvQzs7Ozs7Ozs7OztBQUVwQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBV25ELE1BQU0sT0FBTyxhQUFhOzs7OztJQXNEeEIsWUFBNkIsVUFBcUIsRUFDOUIsV0FBb0M7UUFEM0IsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7Ozs7O1FBeEM5QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQzs7Ozs7O1FBT3RDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQzs7Ozs7UUFNMUMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7Ozs7OztRQU9wQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7Ozs7OztRQU8zQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFbEMsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFnQyxFQUFFLENBQUMsQ0FBQztRQUNsRSxjQUFTLEdBQ3RCLElBQUksZUFBZSxDQUF5RCxTQUFTLENBQUMsQ0FBQztRQUVuRixlQUFVLEdBQW9DLEVBQUUsQ0FBQztRQUV4QyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEs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TixNQUFNO3VCQU1OLE1BQU07OEJBT04sTUFBTTs0QkFPTixNQUFNOzs7Ozs7OztJQTNCUCxtQ0FBZ0Q7Ozs7Ozs7SUFPaEQsdUNBQW9EOzs7Ozs7SUFNcEQsaUNBQThDOzs7Ozs7O0lBTzlDLHdDQUFxRDs7Ozs7OztJQU9yRCxzQ0FBbUQ7Ozs7O0lBRW5ELGlDQUFtRjs7Ozs7SUFDbkYsa0NBQzJGOzs7OztJQUUzRixtQ0FBeUQ7Ozs7O0lBRXpELGlDQUFnRDs7Ozs7SUFFaEQsb0NBQTZDOzs7OztJQUVqQyxtQ0FBc0M7Ozs7O0lBQ3RDLG9DQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvcnVsZXNfbm9kZWpzL2lzc3Vlcy8xMjY1XG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cImdvb2dsZW1hcHNcIiAvPlxuXG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0dvb2dsZU1hcH0gZnJvbSAnLi4vZ29vZ2xlLW1hcC9nb29nbGUtbWFwJztcbmltcG9ydCB7TWFwTWFya2VyfSBmcm9tICcuLi9tYXAtbWFya2VyL21hcC1tYXJrZXInO1xuXG4vKipcbiAqIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhIEdvb2dsZSBNYXBzIGluZm8gd2luZG93IHZpYSB0aGUgR29vZ2xlIE1hcHMgSmF2YVNjcmlwdCBBUEkuXG4gKiBAc2VlIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3dcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbWFwLWluZm8td2luZG93JyxcbiAgaG9zdDogeydzdHlsZSc6ICdkaXNwbGF5OiBub25lJ30sXG59KVxuZXhwb3J0IGNsYXNzIE1hcEluZm9XaW5kb3cgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IGdvb2dsZS5tYXBzLkluZm9XaW5kb3dPcHRpb25zKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5uZXh0KG9wdGlvbnMgfHwge30pO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHBvc2l0aW9uKHBvc2l0aW9uOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsfGdvb2dsZS5tYXBzLkxhdExuZykge1xuICAgIHRoaXMuX3Bvc2l0aW9uLm5leHQocG9zaXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93I0luZm9XaW5kb3cuY2xvc2VjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpIGNsb3NlY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LmNvbnRlbnRfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIGNvbnRlbnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvdyNJbmZvV2luZG93LmRvbXJlYWR5XG4gICAqL1xuICBAT3V0cHV0KCkgZG9tcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LnBvc2l0aW9uX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBwb3NpdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LnppbmRleF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgemluZGV4Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5JbmZvV2luZG93T3B0aW9ucz4oe30pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wb3NpdGlvbiA9XG4gICAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWx8Z29vZ2xlLm1hcHMuTGF0TG5nfHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9saXN0ZW5lcnM6IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyW10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9pbmZvV2luZG93PzogZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9nb29nbGVNYXA6IEdvb2dsZU1hcCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fY29tYmluZU9wdGlvbnMoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgaWYgKHRoaXMuX2luZm9XaW5kb3cpIHtcbiAgICAgICAgdGhpcy5faW5mb1dpbmRvdy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplRXZlbnRIYW5kbGVycygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgfVxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWUgZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvdyNJbmZvV2luZG93LmNsb3NlXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5faW5mb1dpbmRvdykge1xuICAgICAgdGhpcy5faW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvdyNJbmZvV2luZG93LmdldENvbnRlbnRcbiAgICovXG4gIGdldENvbnRlbnQoKTogc3RyaW5nfE5vZGUge1xuICAgIHJldHVybiB0aGlzLl9pbmZvV2luZG93IS5nZXRDb250ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3dcbiAgICogI0luZm9XaW5kb3cuZ2V0UG9zaXRpb25cbiAgICovXG4gIGdldFBvc2l0aW9uKCk6IGdvb2dsZS5tYXBzLkxhdExuZ3xudWxsIHtcbiAgICByZXR1cm4gdGhpcy5faW5mb1dpbmRvdyEuZ2V0UG9zaXRpb24oKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93I0luZm9XaW5kb3cuZ2V0WkluZGV4XG4gICAqL1xuICBnZXRaSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faW5mb1dpbmRvdyEuZ2V0WkluZGV4KCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIE1hcEluZm9XaW5kb3cgdXNpbmcgdGhlIHByb3ZpZGVkIE1hcE1hcmtlciBhcyB0aGUgYW5jaG9yLiBJZiB0aGUgYW5jaG9yIGlzIG5vdCBzZXQsXG4gICAqIHRoZW4gdGhlIHBvc2l0aW9uIHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIGlucHV0IGlzIHVzZWQgaW5zdGVhZC5cbiAgICovXG4gIG9wZW4oYW5jaG9yPzogTWFwTWFya2VyKSB7XG4gICAgY29uc3QgbWFya2VyID0gYW5jaG9yID8gYW5jaG9yLl9tYXJrZXIgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuX2dvb2dsZU1hcC5fZ29vZ2xlTWFwKSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgdGhpcy5faW5mb1dpbmRvdyEub3Blbih0aGlzLl9nb29nbGVNYXAuX2dvb2dsZU1hcCwgbWFya2VyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb21iaW5lT3B0aW9ucygpOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLkluZm9XaW5kb3dPcHRpb25zPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuX29wdGlvbnMsIHRoaXMuX3Bvc2l0aW9uXSkucGlwZShtYXAoKFtvcHRpb25zLCBwb3NpdGlvbl0pID0+IHtcbiAgICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uczogZ29vZ2xlLm1hcHMuSW5mb1dpbmRvd09wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiB8fCBvcHRpb25zLnBvc2l0aW9uLFxuICAgICAgICBjb250ZW50OiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNvbWJpbmVkT3B0aW9ucztcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplRXZlbnRIYW5kbGVycygpIHtcbiAgICAvLyBFbnN1cmUgdGhhdCB3ZSBkb24ndCBsZWFrIGlmIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAgICB0aGlzLl9jbGVhckxpc3RlbmVycygpO1xuXG4gICAgY29uc3QgZXZlbnRIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudEVtaXR0ZXI8dm9pZD4+KFtcbiAgICAgIFsnY2xvc2VjbGljaycsIHRoaXMuY2xvc2VjbGlja10sXG4gICAgICBbJ2NvbnRlbnRfY2hhbmdlZCcsIHRoaXMuY29udGVudENoYW5nZWRdLFxuICAgICAgWydkb21yZWFkeScsIHRoaXMuZG9tcmVhZHldLFxuICAgICAgWydwb3NpdGlvbl9jaGFuZ2VkJywgdGhpcy5wb3NpdGlvbkNoYW5nZWRdLFxuICAgICAgWyd6aW5kZXhfY2hhbmdlZCcsIHRoaXMuemluZGV4Q2hhbmdlZF0sXG4gICAgXSk7XG4gICAgZXZlbnRIYW5kbGVycy5mb3JFYWNoKChldmVudEhhbmRsZXI6IEV2ZW50RW1pdHRlcjx2b2lkPiwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoZXZlbnRIYW5kbGVyLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKHRoaXMuX2luZm9XaW5kb3chLmFkZExpc3RlbmVyKG5hbWUsICgpID0+IHtcbiAgICAgICAgICBldmVudEhhbmRsZXIuZW1pdCgpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogQ2xlYXJzIGFsbCBjdXJyZW50bHktcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuICovXG4gIHByaXZhdGUgX2NsZWFyTGlzdGVuZXJzKCkge1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWluZm8td2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2dvb2dsZS1tYXBzL21hcC1pbmZvLXdpbmRvdy9tYXAtaW5mby13aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSxvQ0FBb0M7Ozs7Ozs7Ozs7QUFFcEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFVckQsTUFBTSxPQUFPLGFBQWE7Ozs7O0lBc0R4QixZQUE2QixVQUFxQixFQUM5QixXQUFvQztRQUQzQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQXREaEQsa0JBQWEsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFDbEUsY0FBUyxHQUN0QixJQUFJLGVBQWUsQ0FBeUQsU0FBUyxDQUFDLENBQUM7UUFDMUUsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7Ozs7O1FBaUJ0QyxlQUFVLEdBQXFCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFPLFlBQVksQ0FBQyxDQUFDOzs7Ozs7UUFRL0YsbUJBQWMsR0FBcUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQU8saUJBQWlCLENBQUMsQ0FBQzs7Ozs7UUFNcEYs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RSxlQUFlLG1DQUNoQixPQUFPLEtBQ1YsUUFBUSxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUN0QyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQ3hDO1lBQ0QsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7OztZQXRJRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsSUFBSSxFQUFFLEVBQUMsT0FBTyxFQUFFLGVBQWUsRUFBQzthQUNqQzs7OztZQVhPLFNBQVM7WUFUZixVQUFVOzs7c0JBNkJULEtBQUs7dUJBS0wsS0FBSzt5QkFTTCxNQUFNOzZCQU9OLE1BQU07dUJBT04sTUFBTTs4QkFPTixNQUFNOzRCQVFOLE1BQU07Ozs7Ozs7SUFsRFAsc0NBQThDOzs7OztJQUM5QyxpQ0FBbUY7Ozs7O0lBQ25GLGtDQUMyRjs7Ozs7SUFDM0YsaUNBQWdEOzs7OztJQUNoRCxvQ0FBNkM7Ozs7OztJQWdCN0MsbUNBQStGOzs7Ozs7O0lBTy9GLHVDQUM4Rjs7Ozs7O0lBTTlGLGlDQUEyRjs7Ozs7OztJQU8zRix3Q0FDZ0c7Ozs7Ozs7SUFPaEcsc0NBQzRGOzs7OztJQUVoRixtQ0FBc0M7Ozs7O0lBQ3RDLG9DQUE0QyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvcnVsZXNfbm9kZWpzL2lzc3Vlcy8xMjY1XG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cImdvb2dsZW1hcHNcIiAvPlxuXG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtHb29nbGVNYXB9IGZyb20gJy4uL2dvb2dsZS1tYXAvZ29vZ2xlLW1hcCc7XG5pbXBvcnQge01hcE1hcmtlcn0gZnJvbSAnLi4vbWFwLW1hcmtlci9tYXAtbWFya2VyJztcbmltcG9ydCB7TWFwRXZlbnRNYW5hZ2VyfSBmcm9tICcuLi9tYXAtZXZlbnQtbWFuYWdlcic7XG5cbi8qKlxuICogQW5ndWxhciBjb21wb25lbnQgdGhhdCByZW5kZXJzIGEgR29vZ2xlIE1hcHMgaW5mbyB3aW5kb3cgdmlhIHRoZSBHb29nbGUgTWFwcyBKYXZhU2NyaXB0IEFQSS5cbiAqIEBzZWUgZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvd1xuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdtYXAtaW5mby13aW5kb3cnLFxuICBob3N0OiB7J3N0eWxlJzogJ2Rpc3BsYXk6IG5vbmUnfSxcbn0pXG5leHBvcnQgY2xhc3MgTWFwSW5mb1dpbmRvdyBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfZXZlbnRNYW5hZ2VyID0gbmV3IE1hcEV2ZW50TWFuYWdlcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5JbmZvV2luZG93T3B0aW9ucz4oe30pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wb3NpdGlvbiA9XG4gICAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWx8Z29vZ2xlLm1hcHMuTGF0TG5nfHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX2luZm9XaW5kb3c/OiBnb29nbGUubWFwcy5JbmZvV2luZG93O1xuXG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IGdvb2dsZS5tYXBzLkluZm9XaW5kb3dPcHRpb25zKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5uZXh0KG9wdGlvbnMgfHwge30pO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHBvc2l0aW9uKHBvc2l0aW9uOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsfGdvb2dsZS5tYXBzLkxhdExuZykge1xuICAgIHRoaXMuX3Bvc2l0aW9uLm5leHQocG9zaXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93I0luZm9XaW5kb3cuY2xvc2VjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpIGNsb3NlY2xpY2s6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2Nsb3NlY2xpY2snKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3dcbiAgICogI0luZm9XaW5kb3cuY29udGVudF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgY29udGVudENoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2NvbnRlbnRfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvdyNJbmZvV2luZG93LmRvbXJlYWR5XG4gICAqL1xuICBAT3V0cHV0KCkgZG9tcmVhZHk6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2RvbXJlYWR5Jyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LnBvc2l0aW9uX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwb3NpdGlvbkNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3Bvc2l0aW9uX2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3dcbiAgICogI0luZm9XaW5kb3cuemluZGV4X2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICB6aW5kZXhDaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCd6aW5kZXhfY2hhbmdlZCcpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX2dvb2dsZU1hcDogR29vZ2xlTWFwLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9jb21iaW5lT3B0aW9ucygpLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICBpZiAodGhpcy5faW5mb1dpbmRvdykge1xuICAgICAgICB0aGlzLl9pbmZvV2luZG93LnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3cob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5zZXRUYXJnZXQodGhpcy5faW5mb1dpbmRvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3cjSW5mb1dpbmRvdy5jbG9zZVxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuX2luZm9XaW5kb3cpIHtcbiAgICAgIHRoaXMuX2luZm9XaW5kb3cuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3cjSW5mb1dpbmRvdy5nZXRDb250ZW50XG4gICAqL1xuICBnZXRDb250ZW50KCk6IHN0cmluZ3xOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5faW5mb1dpbmRvdyEuZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LmdldFBvc2l0aW9uXG4gICAqL1xuICBnZXRQb3NpdGlvbigpOiBnb29nbGUubWFwcy5MYXRMbmd8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2luZm9XaW5kb3chLmdldFBvc2l0aW9uKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvdyNJbmZvV2luZG93LmdldFpJbmRleFxuICAgKi9cbiAgZ2V0WkluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2luZm9XaW5kb3chLmdldFpJbmRleCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBNYXBJbmZvV2luZG93IHVzaW5nIHRoZSBwcm92aWRlZCBNYXBNYXJrZXIgYXMgdGhlIGFuY2hvci4gSWYgdGhlIGFuY2hvciBpcyBub3Qgc2V0LFxuICAgKiB0aGVuIHRoZSBwb3NpdGlvbiBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBpbnB1dCBpcyB1c2VkIGluc3RlYWQuXG4gICAqL1xuICBvcGVuKGFuY2hvcj86IE1hcE1hcmtlcikge1xuICAgIGNvbnN0IG1hcmtlciA9IGFuY2hvciA/IGFuY2hvci5fbWFya2VyIDogdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLl9nb29nbGVNYXAuX2dvb2dsZU1hcCkge1xuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgIHRoaXMuX2luZm9XaW5kb3chLm9wZW4odGhpcy5fZ29vZ2xlTWFwLl9nb29nbGVNYXAsIG1hcmtlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY29tYmluZU9wdGlvbnMoKTogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5JbmZvV2luZG93T3B0aW9ucz4ge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLl9vcHRpb25zLCB0aGlzLl9wb3NpdGlvbl0pLnBpcGUobWFwKChbb3B0aW9ucywgcG9zaXRpb25dKSA9PiB7XG4gICAgICBjb25zdCBjb21iaW5lZE9wdGlvbnM6IGdvb2dsZS5tYXBzLkluZm9XaW5kb3dPcHRpb25zID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24gfHwgb3B0aW9ucy5wb3NpdGlvbixcbiAgICAgICAgY29udGVudDogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBjb21iaW5lZE9wdGlvbnM7XG4gICAgfSkpO1xuICB9XG59XG4iXX0=
/**
* @fileoverview added by tsickle
* Generated from: src/google-maps/map-marker/map-marker.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc

@@ -15,6 +16,7 @@ */

/// <reference types="googlemaps" />
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
import { ChangeDetectionStrategy, Component, Input, Output, ViewEncapsulation } from '@angular/core';
import { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';
import { map, take, takeUntil } from 'rxjs/operators';
import { GoogleMap } from '../google-map/google-map';
import { MapEventManager } from '../map-event-manager';
/**

@@ -38,2 +40,9 @@ * Default options for the Google Maps marker component. Displays a marker

this._googleMap = _googleMap;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new BehaviorSubject(undefined);
this._position = new BehaviorSubject(undefined);
this._label = new BehaviorSubject(undefined);
this._clickable = new BehaviorSubject(undefined);
this._destroy = new Subject();
/**

@@ -43,3 +52,3 @@ * See

*/
this.animationChanged = new EventEmitter();
this.animationChanged = this._eventManager.getLazyEmitter('animation_changed');
/**

@@ -49,3 +58,3 @@ * See

*/
this.mapClick = new EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -55,3 +64,3 @@ * See

*/
this.clickableChanged = new EventEmitter();
this.clickableChanged = this._eventManager.getLazyEmitter('clickable_changed');
/**

@@ -61,3 +70,3 @@ * See

*/
this.cursorChanged = new EventEmitter();
this.cursorChanged = this._eventManager.getLazyEmitter('cursor_changed');
/**

@@ -67,3 +76,3 @@ * See

*/
this.mapDblclick = new EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -73,3 +82,3 @@ * See

*/
this.mapDrag = new EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -79,3 +88,3 @@ * See

*/
this.mapDragend = new EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -85,3 +94,3 @@ * See

*/
this.draggableChanged = new EventEmitter();
this.draggableChanged = this._eventManager.getLazyEmitter('draggable_changed');
/**

@@ -91,3 +100,3 @@ * See

*/
this.mapDragstart = new EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -97,3 +106,3 @@ * See

*/
this.flatChanged = new EventEmitter();
this.flatChanged = this._eventManager.getLazyEmitter('flat_changed');
/**

@@ -103,3 +112,3 @@ * See

*/
this.iconChanged = new EventEmitter();
this.iconChanged = this._eventManager.getLazyEmitter('icon_changed');
/**

@@ -109,3 +118,3 @@ * See

*/
this.mapMousedown = new EventEmitter();
this.mapMousedown = this._eventManager.getLazyEmitter('mousedown');
/**

@@ -115,3 +124,3 @@ * See

*/
this.mapMouseout = new EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -121,3 +130,3 @@ * See

*/
this.mapMouseover = new EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -127,3 +136,3 @@ * See

*/
this.mapMouseup = new EventEmitter();
this.mapMouseup = this._eventManager.getLazyEmitter('mouseup');
/**

@@ -133,3 +142,3 @@ * See

*/
this.positionChanged = new EventEmitter();
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**

@@ -139,3 +148,3 @@ * See

*/
this.mapRightclick = new EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -145,3 +154,3 @@ * See

*/
this.shapeChanged = new EventEmitter();
this.shapeChanged = this._eventManager.getLazyEmitter('shape_changed');
/**

@@ -151,3 +160,3 @@ * See

*/
this.titleChanged = new EventEmitter();
this.titleChanged = this._eventManager.getLazyEmitter('title_changed');
/**

@@ -157,3 +166,3 @@ * See

*/
this.visibleChanged = new EventEmitter();
this.visibleChanged = this._eventManager.getLazyEmitter('visible_changed');
/**

@@ -163,10 +172,3 @@ * See

*/
this.zindexChanged = new EventEmitter();
this._options = new BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new BehaviorSubject(undefined);
this._position = new BehaviorSubject(undefined);
this._label = new BehaviorSubject(undefined);
this._clickable = new BehaviorSubject(undefined);
this._destroy = new Subject();
this._listeners = [];
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}

@@ -221,3 +223,3 @@ /**

this._marker.setMap(this._googleMap._googleMap);
this._initializeEventHandlers();
this._eventManager.setTarget(this._marker);
}));

@@ -236,3 +238,3 @@ this._watchForOptionsChanges();

this._destroy.complete();
this._clearListeners();
this._eventManager.destroy();
if (this._marker) {

@@ -429,79 +431,2 @@ this._marker.setMap(null);

}
/**
* @private
* @return {?}
*/
_initializeEventHandlers() {
// Ensure that we don't leak if called multiple times.
this._clearListeners();
/** @type {?} */
const eventHandlers = new Map([
['animation_changed', this.animationChanged],
['clickable_changed', this.clickableChanged],
['cursor_changed', this.cursorChanged],
['draggable_changed', this.draggableChanged],
['flat_changed', this.flatChanged],
['icon_changed', this.iconChanged],
['position_changed', this.positionChanged],
['shape_changed', this.shapeChanged],
['title_changed', this.titleChanged],
['visible_changed', this.visibleChanged],
['zindex_changed', this.zindexChanged],
]);
/** @type {?} */
const mouseEventHandlers = new Map([
['click', this.mapClick],
['dblclick', this.mapDblclick],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['mousedown', this.mapMousedown],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['mouseup', this.mapMouseup],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push((/** @type {?} */ (this._marker)).addListener(name, (/**
* @return {?}
*/
() => {
eventHandler.emit();
})));
}
}));
mouseEventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push((/** @type {?} */ (this._marker)).addListener(name, (/**
* @param {?} event
* @return {?}
*/
(event) => {
eventHandler.emit(event);
})));
}
}));
}
/**
* Clears all currently-registered event listeners.
* @private
* @return {?}
*/
_clearListeners() {
for (let listener of this._listeners) {
listener.remove();
}
this._listeners = [];
}
}

@@ -550,2 +475,37 @@ MapMarker.decorators = [

/**
* @type {?}
* @private
*/
MapMarker.prototype._eventManager;
/**
* @type {?}
* @private
*/
MapMarker.prototype._options;
/**
* @type {?}
* @private
*/
MapMarker.prototype._title;
/**
* @type {?}
* @private
*/
MapMarker.prototype._position;
/**
* @type {?}
* @private
*/
MapMarker.prototype._label;
/**
* @type {?}
* @private
*/
MapMarker.prototype._clickable;
/**
* @type {?}
* @private
*/
MapMarker.prototype._destroy;
/**
* See

@@ -676,37 +636,2 @@ * developers.google.com/maps/documentation/javascript/reference/marker#Marker.animation_changed

MapMarker.prototype.zindexChanged;
/**
* @type {?}
* @private
*/
MapMarker.prototype._options;
/**
* @type {?}
* @private
*/
MapMarker.prototype._title;
/**
* @type {?}
* @private
*/
MapMarker.prototype._position;
/**
* @type {?}
* @private
*/
MapMarker.prototype._label;
/**
* @type {?}
* @private
*/
MapMarker.prototype._clickable;
/**
* @type {?}
* @private
*/
MapMarker.prototype._destroy;
/**
* @type {?}
* @private
*/
MapMarker.prototype._listeners;
/** @type {?} */

@@ -720,2 +645,2 @@ MapMarker.prototype._marker;

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLW1hcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9tYXAtbWFya2VyL21hcC1tYXJrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVNBLG9DQUFvQzs7Ozs7Ozs7OztBQUVwQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBTW5ELE1BQU0sT0FBTyxzQkFBc0IsR0FBRztJQUNwQyxRQUFRLEVBQUUsRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBQztDQUM3Qzs7Ozs7QUFZRCxNQUFNLE9BQU8sU0FBUzs7OztJQXVLcEIsWUFBNkIsVUFBcUI7UUFBckIsZUFBVSxHQUFWLFVBQVUsQ0FBVzs7Ozs7UUF6SXhDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7Ozs7O1FBTTVDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQzs7Ozs7UUFNdEQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQzs7Ozs7UUFNNUMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDOzs7OztRQU16QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDOzs7OztRQU16RCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7Ozs7O1FBTXJELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBMEIs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TixNQUFNO3lCQU1OLE1BQU07OEJBTU4sTUFBTTs0QkFNTixNQUFNOzJCQU1OLE1BQU07MkJBTU4sTUFBTTs2QkFNTixNQUFNOzRCQU1OLE1BQU07Ozs7Ozs7O0lBeEhQLHFDQUFzRDs7Ozs7O0lBTXRELDZCQUFnRTs7Ozs7O0lBTWhFLHFDQUFzRDs7Ozs7O0lBTXRELGtDQUFtRDs7Ozs7O0lBTW5ELGdDQUFtRTs7Ozs7O0lBTW5FLDRCQUErRDs7Ozs7O0lBTS9ELCtCQUFrRTs7Ozs7O0lBTWxFLHFDQUFzRDs7Ozs7O0lBTXRELGlDQUFvRTs7Ozs7O0lBTXBFLGdDQUFpRDs7Ozs7O0lBTWpELGdDQUFpRDs7Ozs7O0lBTWpELGlDQUFvRTs7Ozs7O0lBTXBFLGdDQUFtRTs7Ozs7O0lBTW5FLGlDQUFvRTs7Ozs7O0lBTXBFLCtCQUFrRTs7Ozs7O0lBTWxFLG9DQUFxRDs7Ozs7O0lBTXJELGtDQUFxRTs7Ozs7O0lBTXJFLGlDQUFrRDs7Ozs7O0lBTWxELGlDQUFrRDs7Ozs7O0lBTWxELG1DQUFvRDs7Ozs7O0lBTXBELGtDQUFtRDs7Ozs7SUFFbkQsNkJBQzJFOzs7OztJQUMzRSwyQkFBMkU7Ozs7O0lBQzNFLDhCQUMyRjs7Ozs7SUFDM0YsMkJBQzZFOzs7OztJQUM3RSwrQkFBZ0Y7Ozs7O0lBRWhGLDZCQUFnRDs7Ozs7SUFFaEQsK0JBQXlEOztJQUV6RCw0QkFBNkI7Ozs7O0lBRWpCLCtCQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvcnVsZXNfbm9kZWpzL2lzc3Vlcy8xMjY1XG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cImdvb2dsZW1hcHNcIiAvPlxuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtHb29nbGVNYXB9IGZyb20gJy4uL2dvb2dsZS1tYXAvZ29vZ2xlLW1hcCc7XG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIGZvciB0aGUgR29vZ2xlIE1hcHMgbWFya2VyIGNvbXBvbmVudC4gRGlzcGxheXMgYSBtYXJrZXJcbiAqIGF0IHRoZSBHb29nbGVwbGV4LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVJLRVJfT1BUSU9OUyA9IHtcbiAgcG9zaXRpb246IHtsYXQ6IDM3LjQyMTk5NSwgbG5nOiAtMTIyLjA4NDA5Mn0sXG59O1xuXG4vKipcbiAqIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhIEdvb2dsZSBNYXBzIG1hcmtlciB2aWEgdGhlIEdvb2dsZSBNYXBzIEphdmFTY3JpcHQgQVBJLlxuICogQHNlZSBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlclxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXAtbWFya2VyJyxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIE1hcE1hcmtlciBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnMob3B0aW9uczogZ29vZ2xlLm1hcHMuTWFya2VyT3B0aW9ucykge1xuICAgIHRoaXMuX29wdGlvbnMubmV4dChvcHRpb25zIHx8IERFRkFVTFRfTUFSS0VSX09QVElPTlMpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aXRsZS5uZXh0KHRpdGxlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwb3NpdGlvbihwb3NpdGlvbjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbHxnb29nbGUubWFwcy5MYXRMbmcpIHtcbiAgICB0aGlzLl9wb3NpdGlvbi5uZXh0KHBvc2l0aW9uKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbChsYWJlbDogc3RyaW5nfGdvb2dsZS5tYXBzLk1hcmtlckxhYmVsKSB7XG4gICAgdGhpcy5fbGFiZWwubmV4dChsYWJlbCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgY2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsaWNrYWJsZS5uZXh0KGNsaWNrYWJsZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5hbmltYXRpb25fY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIGFuaW1hdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuY2xpY2tcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5jbGlja2FibGVfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIGNsaWNrYWJsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuY3Vyc29yX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBjdXJzb3JDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmRibGNsaWNrXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwRGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ1xuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWcgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ2VuZFxuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWdlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ2dhYmxlX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBkcmFnZ2FibGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmRyYWdzdGFydFxuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWdzdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5mbGF0X2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBmbGF0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5pY29uX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBpY29uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5tb3VzZWRvd25cbiAgICovXG4gIEBPdXRwdXQoKSBtYXBNb3VzZWRvd24gPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIubW91c2VvdXRcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBNb3VzZW91dCA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5tb3VzZW92ZXJcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBNb3VzZW92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIubW91c2V1cFxuICAgKi9cbiAgQE91dHB1dCgpIG1hcE1vdXNldXAgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIucG9zaXRpb25fY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5yaWdodGNsaWNrXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwUmlnaHRjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5zaGFwZV9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgc2hhcGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLnRpdGxlX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSB0aXRsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIudmlzaWJsZV9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuemluZGV4X2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSB6aW5kZXhDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnMgPVxuICAgICAgbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5NYXJrZXJPcHRpb25zPihERUZBVUxUX01BUktFUl9PUFRJT05TKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGl0bGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ3x1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Bvc2l0aW9uID1cbiAgICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8Z29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbHxnb29nbGUubWFwcy5MYXRMbmd8dW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYWJlbCA9XG4gICAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ3xnb29nbGUubWFwcy5NYXJrZXJMYWJlbHx1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsaWNrYWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbnx1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiBnb29nbGUubWFwcy5NYXBzRXZlbnRMaXN0ZW5lcltdID0gW107XG5cbiAgX21hcmtlcj86IGdvb2dsZS5tYXBzLk1hcmtlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9nb29nbGVNYXA6IEdvb2dsZU1hcCkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjb21iaW5lZE9wdGlvbnNDaGFuZ2VzID0gdGhpcy5fY29tYmluZU9wdGlvbnMoKTtcblxuICAgIGNvbWJpbmVkT3B0aW9uc0NoYW5nZXMucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLl9tYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKG9wdGlvbnMpO1xuICAgICAgdGhpcy5fbWFya2VyLnNldE1hcCh0aGlzLl9nb29nbGVNYXAuX2dvb2dsZU1hcCk7XG4gICAgICB0aGlzLl9pbml0aWFsaXplRXZlbnRIYW5kbGVycygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fd2F0Y2hGb3JPcHRpb25zQ2hhbmdlcygpO1xuICAgIHRoaXMuX3dhdGNoRm9yVGl0bGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5fd2F0Y2hGb3JQb3NpdGlvbkNoYW5nZXMoKTtcbiAgICB0aGlzLl93YXRjaEZvckxhYmVsQ2hhbmdlcygpO1xuICAgIHRoaXMuX3dhdGNoRm9yQ2xpY2thYmxlQ2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2NsZWFyTGlzdGVuZXJzKCk7XG4gICAgaWYgKHRoaXMuX21hcmtlcikge1xuICAgICAgdGhpcy5fbWFya2VyLnNldE1hcChudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRBbmltYXRpb25cbiAgICovXG4gIGdldEFuaW1hdGlvbigpOiBnb29nbGUubWFwcy5BbmltYXRpb258bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0QW5pbWF0aW9uKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldENsaWNrYWJsZVxuICAgKi9cbiAgZ2V0Q2xpY2thYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldENsaWNrYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0Q3Vyc29yXG4gICAqL1xuICBnZXRDdXJzb3IoKTogc3RyaW5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldEN1cnNvcigpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXREcmFnZ2FibGVcbiAgICovXG4gIGdldERyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9tYXJrZXIhLmdldERyYWdnYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0SWNvblxuICAgKi9cbiAgZ2V0SWNvbigpOiBzdHJpbmd8Z29vZ2xlLm1hcHMuSWNvbnxnb29nbGUubWFwcy5TeW1ib2x8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0SWNvbigpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRMYWJlbFxuICAgKi9cbiAgZ2V0TGFiZWwoKTogZ29vZ2xlLm1hcHMuTWFya2VyTGFiZWx8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0TGFiZWwoKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0T3BhY2l0eVxuICAgKi9cbiAgZ2V0T3BhY2l0eSgpOiBudW1iZXJ8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0T3BhY2l0eSgpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRQb3NpdGlvblxuICAgKi9cbiAgZ2V0UG9zaXRpb24oKTogZ29vZ2xlLm1hcHMuTGF0TG5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFBvc2l0aW9uKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldFNoYXBlXG4gICAqL1xuICBnZXRTaGFwZSgpOiBnb29nbGUubWFwcy5NYXJrZXJTaGFwZXxudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyIS5nZXRTaGFwZSgpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRUaXRsZVxuICAgKi9cbiAgZ2V0VGl0bGUoKTogc3RyaW5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFRpdGxlKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldFZpc2libGVcbiAgICovXG4gIGdldFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0VmlzaWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0WkluZGV4XG4gICAqL1xuICBnZXRaSW5kZXgoKTogbnVtYmVyfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFpJbmRleCgpIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9jb21iaW5lT3B0aW9ucygpOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcmtlck9wdGlvbnM+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fb3B0aW9ucywgdGhpcy5fdGl0bGUsIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9sYWJlbCwgdGhpcy5fY2xpY2thYmxlXSlcbiAgICAgICAgLnBpcGUobWFwKChbb3B0aW9ucywgdGl0bGUsIHBvc2l0aW9uLCBsYWJlbCwgY2xpY2thYmxlXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uczogZ29vZ2xlLm1hcHMuTWFya2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgb3B0aW9ucy50aXRsZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiB8fCBvcHRpb25zLnBvc2l0aW9uLFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsIHx8IG9wdGlvbnMubGFiZWwsXG4gICAgICAgICAgICBjbGlja2FibGU6IGNsaWNrYWJsZSAhPT0gdW5kZWZpbmVkID8gY2xpY2thYmxlIDogb3B0aW9ucy5jbGlja2FibGUsXG4gICAgICAgICAgICBtYXA6IHRoaXMuX2dvb2dsZU1hcC5fZ29vZ2xlTWFwIHx8IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gY29tYmluZWRPcHRpb25zO1xuICAgICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvck9wdGlvbnNDaGFuZ2VzKCkge1xuICAgIHRoaXMuX29wdGlvbnMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShvcHRpb25zID0+IHtcbiAgICAgIGlmICh0aGlzLl9tYXJrZXIpIHtcbiAgICAgICAgdGhpcy5fbWFya2VyLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvclRpdGxlQ2hhbmdlcygpIHtcbiAgICB0aGlzLl90aXRsZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHRpdGxlID0+IHtcbiAgICAgIGlmICh0aGlzLl9tYXJrZXIgJiYgdGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9tYXJrZXIuc2V0VGl0bGUodGl0bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JQb3NpdGlvbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5fcG9zaXRpb24ucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShwb3NpdGlvbiA9PiB7XG4gICAgICBpZiAodGhpcy5fbWFya2VyICYmIHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuX21hcmtlci5zZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvckxhYmVsQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9sYWJlbC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGxhYmVsID0+IHtcbiAgICAgIGlmICh0aGlzLl9tYXJrZXIgJiYgbGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9tYXJrZXIuc2V0TGFiZWwobGFiZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JDbGlja2FibGVDaGFuZ2VzKCkge1xuICAgIHRoaXMuX2NsaWNrYWJsZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGNsaWNrYWJsZSA9PiB7XG4gICAgICBpZiAodGhpcy5fbWFya2VyICYmIGNsaWNrYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX21hcmtlci5zZXRDbGlja2FibGUoY2xpY2thYmxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVFdmVudEhhbmRsZXJzKCkge1xuICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGxlYWsgaWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlxuICAgIHRoaXMuX2NsZWFyTGlzdGVuZXJzKCk7XG5cbiAgICBjb25zdCBldmVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIEV2ZW50RW1pdHRlcjx2b2lkPj4oW1xuICAgICAgWydhbmltYXRpb25fY2hhbmdlZCcsIHRoaXMuYW5pbWF0aW9uQ2hhbmdlZF0sXG4gICAgICBbJ2NsaWNrYWJsZV9jaGFuZ2VkJywgdGhpcy5jbGlja2FibGVDaGFuZ2VkXSxcbiAgICAgIFsnY3Vyc29yX2NoYW5nZWQnLCB0aGlzLmN1cnNvckNoYW5nZWRdLFxuICAgICAgWydkcmFnZ2FibGVfY2hhbmdlZCcsIHRoaXMuZHJhZ2dhYmxlQ2hhbmdlZF0sXG4gICAgICBbJ2ZsYXRfY2hhbmdlZCcsIHRoaXMuZmxhdENoYW5nZWRdLFxuICAgICAgWydpY29uX2NoYW5nZWQnLCB0aGlzLmljb25DaGFuZ2VkXSxcbiAgICAgIFsncG9zaXRpb25fY2hhbmdlZCcsIHRoaXMucG9zaXRpb25DaGFuZ2VkXSxcbiAgICAgIFsnc2hhcGVfY2hhbmdlZCcsIHRoaXMuc2hhcGVDaGFuZ2VkXSxcbiAgICAgIFsndGl0bGVfY2hhbmdlZCcsIHRoaXMudGl0bGVDaGFuZ2VkXSxcbiAgICAgIFsndmlzaWJsZV9jaGFuZ2VkJywgdGhpcy52aXNpYmxlQ2hhbmdlZF0sXG4gICAgICBbJ3ppbmRleF9jaGFuZ2VkJywgdGhpcy56aW5kZXhDaGFuZ2VkXSxcbiAgICBdKTtcbiAgICBjb25zdCBtb3VzZUV2ZW50SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+PihbXG4gICAgICBbJ2NsaWNrJywgdGhpcy5tYXBDbGlja10sXG4gICAgICBbJ2RibGNsaWNrJywgdGhpcy5tYXBEYmxjbGlja10sXG4gICAgICBbJ2RyYWcnLCB0aGlzLm1hcERyYWddLFxuICAgICAgWydkcmFnZW5kJywgdGhpcy5tYXBEcmFnZW5kXSxcbiAgICAgIFsnZHJhZ3N0YXJ0JywgdGhpcy5tYXBEcmFnc3RhcnRdLFxuICAgICAgWydtb3VzZWRvd24nLCB0aGlzLm1hcE1vdXNlZG93bl0sXG4gICAgICBbJ21vdXNlb3V0JywgdGhpcy5tYXBNb3VzZW91dF0sXG4gICAgICBbJ21vdXNlb3ZlcicsIHRoaXMubWFwTW91c2VvdmVyXSxcbiAgICAgIFsnbW91c2V1cCcsIHRoaXMubWFwTW91c2V1cF0sXG4gICAgICBbJ3JpZ2h0Y2xpY2snLCB0aGlzLm1hcFJpZ2h0Y2xpY2tdLFxuICAgIF0pO1xuXG4gICAgZXZlbnRIYW5kbGVycy5mb3JFYWNoKChldmVudEhhbmRsZXI6IEV2ZW50RW1pdHRlcjx2b2lkPiwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoZXZlbnRIYW5kbGVyLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKHRoaXMuX21hcmtlciEuYWRkTGlzdGVuZXIobmFtZSwgKCkgPT4ge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5lbWl0KCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb3VzZUV2ZW50SGFuZGxlcnMuZm9yRWFjaChcbiAgICAgICAgKGV2ZW50SGFuZGxlcjogRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZXIhLmFkZExpc3RlbmVyKG5hbWUsIChldmVudDogZ29vZ2xlLm1hcHMuTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICB9XG5cbiAgLyoqIENsZWFycyBhbGwgY3VycmVudGx5LXJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLiAqL1xuICBwcml2YXRlIF9jbGVhckxpc3RlbmVycygpIHtcbiAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLW1hcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9tYXAtbWFya2VyL21hcC1tYXJrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSxvQ0FBb0M7Ozs7Ozs7Ozs7QUFFcEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLE1BQU0sRUFDTixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFNckQsTUFBTSxPQUFPLHNCQUFzQixHQUFHO0lBQ3BDLFFBQVEsRUFBRSxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFDO0NBQzdDOzs7OztBQVlELE1BQU0sT0FBTyxTQUFTOzs7O0lBa01wQixZQUE2QixVQUFxQjtRQUFyQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBak0xQyxrQkFBYSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDN0IsYUFBUSxHQUNyQixJQUFJLGVBQWUsQ0FBNEIsc0JBQXNCLENBQUMsQ0FBQztRQUMxRCxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQW1CLFNBQVMsQ0FBQyxDQUFDO1FBQzFELGNBQVMsR0FDdEIsSUFBSSxlQUFlLENBQXlELFNBQVMsQ0FBQyxDQUFDO1FBQzFFLFdBQU0sR0FDbkIsSUFBSSxlQUFlLENBQTJDLFNBQVMsQ0FBQyxDQUFDO1FBQzVELGVBQVUs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Ozs7Ozs7SUFNbEcsa0NBQzRGOzs7Ozs7SUFNNUYsZ0NBRTBFOzs7Ozs7SUFNMUUsNEJBRXNFOzs7Ozs7SUFNdEUsK0JBRXlFOzs7Ozs7SUFNekUscUNBQ2tHOzs7Ozs7SUFNbEcsaUNBRTJFOzs7Ozs7SUFNM0UsZ0NBQWtHOzs7Ozs7SUFNbEcsZ0NBQWtHOzs7Ozs7SUFNbEcsaUNBRTJFOzs7Ozs7SUFNM0UsZ0NBRTBFOzs7Ozs7SUFNMUUsaUNBRTJFOzs7Ozs7SUFNM0UsK0JBRXlFOzs7Ozs7SUFNekUsb0NBQ2dHOzs7Ozs7SUFNaEcsa0NBRTRFOzs7Ozs7SUFNNUUsaUNBQzRFOzs7Ozs7SUFNNUUsaUNBQzBGOzs7Ozs7SUFNMUYsbUNBQzhGOzs7Ozs7SUFNOUYsa0NBQzRGOztJQUU1Riw0QkFBNkI7Ozs7O0lBRWpCLCtCQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvcnVsZXNfbm9kZWpzL2lzc3Vlcy8xMjY1XG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cImdvb2dsZW1hcHNcIiAvPlxuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgdGFrZSwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7R29vZ2xlTWFwfSBmcm9tICcuLi9nb29nbGUtbWFwL2dvb2dsZS1tYXAnO1xuaW1wb3J0IHtNYXBFdmVudE1hbmFnZXJ9IGZyb20gJy4uL21hcC1ldmVudC1tYW5hZ2VyJztcblxuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnMgZm9yIHRoZSBHb29nbGUgTWFwcyBtYXJrZXIgY29tcG9uZW50LiBEaXNwbGF5cyBhIG1hcmtlclxuICogYXQgdGhlIEdvb2dsZXBsZXguXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUktFUl9PUFRJT05TID0ge1xuICBwb3NpdGlvbjoge2xhdDogMzcuNDIxOTk1LCBsbmc6IC0xMjIuMDg0MDkyfSxcbn07XG5cbi8qKlxuICogQW5ndWxhciBjb21wb25lbnQgdGhhdCByZW5kZXJzIGEgR29vZ2xlIE1hcHMgbWFya2VyIHZpYSB0aGUgR29vZ2xlIE1hcHMgSmF2YVNjcmlwdCBBUEkuXG4gKiBAc2VlIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hcC1tYXJrZXInLFxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTWFwTWFya2VyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9ldmVudE1hbmFnZXIgPSBuZXcgTWFwRXZlbnRNYW5hZ2VyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnMgPVxuICAgICAgbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5NYXJrZXJPcHRpb25zPihERUZBVUxUX01BUktFUl9PUFRJT05TKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGl0bGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ3x1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Bvc2l0aW9uID1cbiAgICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8Z29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbHxnb29nbGUubWFwcy5MYXRMbmd8dW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYWJlbCA9XG4gICAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ3xnb29nbGUubWFwcy5NYXJrZXJMYWJlbHx1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsaWNrYWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbnx1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcmtlck9wdGlvbnMpIHtcbiAgICB0aGlzLl9vcHRpb25zLm5leHQob3B0aW9ucyB8fCBERUZBVUxUX01BUktFUl9PUFRJT05TKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB0aXRsZSh0aXRsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGl0bGUubmV4dCh0aXRsZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgcG9zaXRpb24ocG9zaXRpb246IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWx8Z29vZ2xlLm1hcHMuTGF0TG5nKSB7XG4gICAgdGhpcy5fcG9zaXRpb24ubmV4dChwb3NpdGlvbik7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbGFiZWwobGFiZWw6IHN0cmluZ3xnb29nbGUubWFwcy5NYXJrZXJMYWJlbCkge1xuICAgIHRoaXMuX2xhYmVsLm5leHQobGFiZWwpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGNsaWNrYWJsZShjbGlja2FibGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGlja2FibGUubmV4dChjbGlja2FibGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuYW5pbWF0aW9uX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBhbmltYXRpb25DaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdhbmltYXRpb25fY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmNsaWNrXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwQ2xpY2s6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdjbGljaycpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmNsaWNrYWJsZV9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgY2xpY2thYmxlQ2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPignY2xpY2thYmxlX2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5jdXJzb3JfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGN1cnNvckNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2N1cnNvcl9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZGJsY2xpY2tcbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBEYmxjbGljazogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ2RibGNsaWNrJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ1xuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcERyYWc6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdkcmFnJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ2VuZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcERyYWdlbmQ6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdkcmFnZW5kJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ2dhYmxlX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBkcmFnZ2FibGVDaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdkcmFnZ2FibGVfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmRyYWdzdGFydFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcERyYWdzdGFydDogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ2RyYWdzdGFydCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmZsYXRfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIGZsYXRDaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdmbGF0X2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5pY29uX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBpY29uQ2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPignaWNvbl9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIubW91c2Vkb3duXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwTW91c2Vkb3duOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+ID1cbiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PignbW91c2Vkb3duJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIubW91c2VvdXRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBNb3VzZW91dDogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ21vdXNlb3V0Jyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIubW91c2VvdmVyXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwTW91c2VvdmVyOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+ID1cbiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PignbW91c2VvdmVyJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIubW91c2V1cFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcE1vdXNldXA6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdtb3VzZXVwJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIucG9zaXRpb25fY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHBvc2l0aW9uQ2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPigncG9zaXRpb25fY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLnJpZ2h0Y2xpY2tcbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBSaWdodGNsaWNrOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+ID1cbiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PigncmlnaHRjbGljaycpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLnNoYXBlX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBzaGFwZUNoYW5nZWQ6XG4gIE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3NoYXBlX2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci50aXRsZV9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgdGl0bGVDaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCd0aXRsZV9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIudmlzaWJsZV9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgdmlzaWJsZUNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3Zpc2libGVfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLnppbmRleF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgemluZGV4Q2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPignemluZGV4X2NoYW5nZWQnKTtcblxuICBfbWFya2VyPzogZ29vZ2xlLm1hcHMuTWFya2VyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX2dvb2dsZU1hcDogR29vZ2xlTWFwKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uc0NoYW5nZXMgPSB0aGlzLl9jb21iaW5lT3B0aW9ucygpO1xuXG4gICAgY29tYmluZWRPcHRpb25zQ2hhbmdlcy5waXBlKHRha2UoMSkpLnN1YnNjcmliZShvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuX21hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIob3B0aW9ucyk7XG4gICAgICB0aGlzLl9tYXJrZXIuc2V0TWFwKHRoaXMuX2dvb2dsZU1hcC5fZ29vZ2xlTWFwKTtcbiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5zZXRUYXJnZXQodGhpcy5fbWFya2VyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3dhdGNoRm9yT3B0aW9uc0NoYW5nZXMoKTtcbiAgICB0aGlzLl93YXRjaEZvclRpdGxlQ2hhbmdlcygpO1xuICAgIHRoaXMuX3dhdGNoRm9yUG9zaXRpb25DaGFuZ2VzKCk7XG4gICAgdGhpcy5fd2F0Y2hGb3JMYWJlbENoYW5nZXMoKTtcbiAgICB0aGlzLl93YXRjaEZvckNsaWNrYWJsZUNoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcbiAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLl9tYXJrZXIpIHtcbiAgICAgIHRoaXMuX21hcmtlci5zZXRNYXAobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0QW5pbWF0aW9uXG4gICAqL1xuICBnZXRBbmltYXRpb24oKTogZ29vZ2xlLm1hcHMuQW5pbWF0aW9ufG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldEFuaW1hdGlvbigpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRDbGlja2FibGVcbiAgICovXG4gIGdldENsaWNrYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyIS5nZXRDbGlja2FibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldEN1cnNvclxuICAgKi9cbiAgZ2V0Q3Vyc29yKCk6IHN0cmluZ3xudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyIS5nZXRDdXJzb3IoKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0RHJhZ2dhYmxlXG4gICAqL1xuICBnZXREcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fbWFya2VyIS5nZXREcmFnZ2FibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldEljb25cbiAgICovXG4gIGdldEljb24oKTogc3RyaW5nfGdvb2dsZS5tYXBzLkljb258Z29vZ2xlLm1hcHMuU3ltYm9sfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldEljb24oKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0TGFiZWxcbiAgICovXG4gIGdldExhYmVsKCk6IGdvb2dsZS5tYXBzLk1hcmtlckxhYmVsfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldExhYmVsKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldE9wYWNpdHlcbiAgICovXG4gIGdldE9wYWNpdHkoKTogbnVtYmVyfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldE9wYWNpdHkoKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0UG9zaXRpb25cbiAgICovXG4gIGdldFBvc2l0aW9uKCk6IGdvb2dsZS5tYXBzLkxhdExuZ3xudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyIS5nZXRQb3NpdGlvbigpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRTaGFwZVxuICAgKi9cbiAgZ2V0U2hhcGUoKTogZ29vZ2xlLm1hcHMuTWFya2VyU2hhcGV8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0U2hhcGUoKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0VGl0bGVcbiAgICovXG4gIGdldFRpdGxlKCk6IHN0cmluZ3xudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyIS5nZXRUaXRsZSgpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRWaXNpYmxlXG4gICAqL1xuICBnZXRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFZpc2libGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldFpJbmRleFxuICAgKi9cbiAgZ2V0WkluZGV4KCk6IG51bWJlcnxudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyIS5nZXRaSW5kZXgoKSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tYmluZU9wdGlvbnMoKTogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5NYXJrZXJPcHRpb25zPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuX29wdGlvbnMsIHRoaXMuX3RpdGxlLCB0aGlzLl9wb3NpdGlvbiwgdGhpcy5fbGFiZWwsIHRoaXMuX2NsaWNrYWJsZV0pXG4gICAgICAgIC5waXBlKG1hcCgoW29wdGlvbnMsIHRpdGxlLCBwb3NpdGlvbiwgbGFiZWwsIGNsaWNrYWJsZV0pID0+IHtcbiAgICAgICAgICBjb25zdCBjb21iaW5lZE9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcmtlck9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlIHx8IG9wdGlvbnMudGl0bGUsXG4gICAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24gfHwgb3B0aW9ucy5wb3NpdGlvbixcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbCB8fCBvcHRpb25zLmxhYmVsLFxuICAgICAgICAgICAgY2xpY2thYmxlOiBjbGlja2FibGUgIT09IHVuZGVmaW5lZCA/IGNsaWNrYWJsZSA6IG9wdGlvbnMuY2xpY2thYmxlLFxuICAgICAgICAgICAgbWFwOiB0aGlzLl9nb29nbGVNYXAuX2dvb2dsZU1hcCB8fCBudWxsLFxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVkT3B0aW9ucztcbiAgICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JPcHRpb25zQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9vcHRpb25zLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICBpZiAodGhpcy5fbWFya2VyKSB7XG4gICAgICAgIHRoaXMuX21hcmtlci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JUaXRsZUNoYW5nZXMoKSB7XG4gICAgdGhpcy5fdGl0bGUucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSh0aXRsZSA9PiB7XG4gICAgICBpZiAodGhpcy5fbWFya2VyICYmIHRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fbWFya2VyLnNldFRpdGxlKHRpdGxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoRm9yUG9zaXRpb25DaGFuZ2VzKCkge1xuICAgIHRoaXMuX3Bvc2l0aW9uLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocG9zaXRpb24gPT4ge1xuICAgICAgaWYgKHRoaXMuX21hcmtlciAmJiBwb3NpdGlvbikge1xuICAgICAgICB0aGlzLl9tYXJrZXIuc2V0UG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JMYWJlbENoYW5nZXMoKSB7XG4gICAgdGhpcy5fbGFiZWwucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShsYWJlbCA9PiB7XG4gICAgICBpZiAodGhpcy5fbWFya2VyICYmIGxhYmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fbWFya2VyLnNldExhYmVsKGxhYmVsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoRm9yQ2xpY2thYmxlQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9jbGlja2FibGUucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShjbGlja2FibGUgPT4ge1xuICAgICAgaWYgKHRoaXMuX21hcmtlciAmJiBjbGlja2FibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9tYXJrZXIuc2V0Q2xpY2thYmxlKGNsaWNrYWJsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
/**
* @fileoverview added by tsickle
* Generated from: src/google-maps/public-api.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc

@@ -13,5 +14,6 @@ */

export { GoogleMap } from './google-map/google-map';
export { MapMarker } from './map-marker/map-marker';
export { GoogleMapsModule } from './google-maps-module';
export { MapInfoWindow } from './map-info-window/map-info-window';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuZXhwb3J0IHtHb29nbGVNYXB9IGZyb20gJy4vZ29vZ2xlLW1hcC9nb29nbGUtbWFwJztcbmV4cG9ydCB7TWFwTWFya2VyfSBmcm9tICcuL21hcC1tYXJrZXIvbWFwLW1hcmtlcic7XG5leHBvcnQge0dvb2dsZU1hcHNNb2R1bGV9IGZyb20gJy4vZ29vZ2xlLW1hcHMtbW9kdWxlJztcbmV4cG9ydCB7TWFwSW5mb1dpbmRvd30gZnJvbSAnLi9tYXAtaW5mby13aW5kb3cvbWFwLWluZm8td2luZG93JztcbiJdfQ==
export { MapMarker } from './map-marker/map-marker';
export { MapPolyline } from './map-polyline/map-polyline';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge0dvb2dsZU1hcH0gZnJvbSAnLi9nb29nbGUtbWFwL2dvb2dsZS1tYXAnO1xuZXhwb3J0IHtHb29nbGVNYXBzTW9kdWxlfSBmcm9tICcuL2dvb2dsZS1tYXBzLW1vZHVsZSc7XG5leHBvcnQge01hcEluZm9XaW5kb3d9IGZyb20gJy4vbWFwLWluZm8td2luZG93L21hcC1pbmZvLXdpbmRvdyc7XG5leHBvcnQge01hcE1hcmtlcn0gZnJvbSAnLi9tYXAtbWFya2VyL21hcC1tYXJrZXInO1xuZXhwb3J0IHtNYXBQb2x5bGluZX0gZnJvbSAnLi9tYXAtcG9seWxpbmUvbWFwLXBvbHlsaW5lJztcbiJdfQ==

@@ -8,9 +8,10 @@ /**

*/
import { __assign, __read, __values } from "tslib";
import { __assign, __read } from "tslib";
// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265
/// <reference types="googlemaps" />
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewEncapsulation, Optional, Inject, PLATFORM_ID, } from '@angular/core';
import { ChangeDetectionStrategy, Component, ElementRef, Input, Output, ViewEncapsulation, Optional, Inject, PLATFORM_ID, } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
import { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';
import { map, shareReplay, take, takeUntil } from 'rxjs/operators';
import { MapEventManager } from '../map-event-manager';
/** default options set to the Googleplex */

@@ -38,2 +39,7 @@ export var DEFAULT_OPTIONS = {

this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject(DEFAULT_OPTIONS);
this._center = new BehaviorSubject(undefined);
this._zoom = new BehaviorSubject(undefined);
this._destroy = new Subject();
this.height = DEFAULT_HEIGHT;

@@ -45,3 +51,3 @@ this.width = DEFAULT_WIDTH;

*/
this.boundsChanged = new EventEmitter();
this.boundsChanged = this._eventManager.getLazyEmitter('bounds_changed');
/**

@@ -51,3 +57,3 @@ * See

*/
this.centerChanged = new EventEmitter();
this.centerChanged = this._eventManager.getLazyEmitter('center_changed');
/**

@@ -57,3 +63,3 @@ * See

*/
this.mapClick = new EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -63,3 +69,3 @@ * See

*/
this.mapDblclick = new EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -69,3 +75,3 @@ * See

*/
this.mapDrag = new EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -75,3 +81,3 @@ * See

*/
this.mapDragend = new EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -81,3 +87,3 @@ * See

*/
this.mapDragstart = new EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -87,3 +93,3 @@ * See

*/
this.headingChanged = new EventEmitter();
this.headingChanged = this._eventManager.getLazyEmitter('heading_changed');
/**

@@ -93,3 +99,3 @@ * See

*/
this.idle = new EventEmitter();
this.idle = this._eventManager.getLazyEmitter('idle');
/**

@@ -99,3 +105,3 @@ * See

*/
this.maptypeidChanged = new EventEmitter();
this.maptypeidChanged = this._eventManager.getLazyEmitter('maptypeid_changed');
/**

@@ -105,3 +111,3 @@ * See

*/
this.mapMousemove = new EventEmitter();
this.mapMousemove = this._eventManager.getLazyEmitter('mousemove');
/**

@@ -111,3 +117,3 @@ * See

*/
this.mapMouseout = new EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -117,3 +123,3 @@ * See

*/
this.mapMouseover = new EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -123,3 +129,3 @@ * See

*/
this.projectionChanged = new EventEmitter();
this.projectionChanged = this._eventManager.getLazyEmitter('projection_changed');
/**

@@ -129,3 +135,3 @@ * See

*/
this.mapRightclick = new EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -135,3 +141,3 @@ * See

*/
this.tilesloaded = new EventEmitter();
this.tilesloaded = this._eventManager.getLazyEmitter('tilesloaded');
/**

@@ -141,3 +147,3 @@ * See

*/
this.tiltChanged = new EventEmitter();
this.tiltChanged = this._eventManager.getLazyEmitter('tilt_changed');
/**

@@ -147,8 +153,3 @@ * See

*/
this.zoomChanged = new EventEmitter();
this._listeners = [];
this._options = new BehaviorSubject(DEFAULT_OPTIONS);
this._center = new BehaviorSubject(undefined);
this._zoom = new BehaviorSubject(undefined);
this._destroy = new Subject();
this.zoomChanged = this._eventManager.getLazyEmitter('zoomChanged');
// @breaking-change 10.0.0 Remove null check for `platformId`.

@@ -197,7 +198,6 @@ this._isBrowser =

this._setSize();
var combinedOptionsChanges = this._combineOptions();
this._googleMapChanges = this._initializeMap(combinedOptionsChanges);
this._googleMapChanges = this._initializeMap(this._combineOptions());
this._googleMapChanges.subscribe(function (googleMap) {
_this._googleMap = googleMap;
_this._initializeEventHandlers();
_this._eventManager.setTarget(_this._googleMap);
});

@@ -210,5 +210,5 @@ this._watchForOptionsChanges();

GoogleMap.prototype.ngOnDestroy = function () {
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
this._clearListeners();
};

@@ -220,2 +220,3 @@ /**

GoogleMap.prototype.fitBounds = function (bounds, padding) {
this._assertInitialized();
this._googleMap.fitBounds(bounds, padding);

@@ -228,2 +229,3 @@ };

GoogleMap.prototype.panBy = function (x, y) {
this._assertInitialized();
this._googleMap.panBy(x, y);

@@ -236,2 +238,3 @@ };

GoogleMap.prototype.panTo = function (latLng) {
this._assertInitialized();
this._googleMap.panTo(latLng);

@@ -244,2 +247,3 @@ };

GoogleMap.prototype.panToBounds = function (latLngBounds, padding) {
this._assertInitialized();
this._googleMap.panToBounds(latLngBounds, padding);

@@ -252,2 +256,3 @@ };

GoogleMap.prototype.getBounds = function () {
this._assertInitialized();
return this._googleMap.getBounds() || null;

@@ -260,2 +265,3 @@ };

GoogleMap.prototype.getCenter = function () {
this._assertInitialized();
return this._googleMap.getCenter();

@@ -268,2 +274,3 @@ };

GoogleMap.prototype.getClickableIcons = function () {
this._assertInitialized();
return this._googleMap.getClickableIcons();

@@ -276,2 +283,3 @@ };

GoogleMap.prototype.getHeading = function () {
this._assertInitialized();
return this._googleMap.getHeading();

@@ -284,2 +292,3 @@ };

GoogleMap.prototype.getMapTypeId = function () {
this._assertInitialized();
return this._googleMap.getMapTypeId();

@@ -292,2 +301,3 @@ };

GoogleMap.prototype.getProjection = function () {
this._assertInitialized();
return this._googleMap.getProjection();

@@ -300,2 +310,3 @@ };

GoogleMap.prototype.getStreetView = function () {
this._assertInitialized();
return this._googleMap.getStreetView();

@@ -308,2 +319,3 @@ };

GoogleMap.prototype.getTilt = function () {
this._assertInitialized();
return this._googleMap.getTilt();

@@ -316,2 +328,3 @@ };

GoogleMap.prototype.getZoom = function () {
this._assertInitialized();
return this._googleMap.getZoom();

@@ -325,2 +338,3 @@ };

get: function () {
this._assertInitialized();
return this._googleMap.controls;

@@ -337,2 +351,3 @@ },

get: function () {
this._assertInitialized();
return this._googleMap.data;

@@ -349,2 +364,3 @@ },

get: function () {
this._assertInitialized();
return this._googleMap.mapTypes;

@@ -361,2 +377,3 @@ },

get: function () {
this._assertInitialized();
return this._googleMap.overlayMapTypes;

@@ -384,5 +401,3 @@ },

var _this = this;
return optionsChanges.pipe(take(1), map(function (options) {
return new google.maps.Map(_this._mapEl, options);
}), shareReplay(1));
return optionsChanges.pipe(take(1), map(function (options) { return new google.maps.Map(_this._mapEl, options); }), shareReplay(1));
};

@@ -417,65 +432,9 @@ GoogleMap.prototype._watchForOptionsChanges = function () {

};
GoogleMap.prototype._initializeEventHandlers = function () {
var _this = this;
// Ensure that we don't leak if called multiple times.
this._clearListeners();
var eventHandlers = new Map([
['bounds_changed', this.boundsChanged],
['center_changed', this.centerChanged],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['heading_changed', this.headingChanged],
['idle', this.idle],
['maptypeid_changed', this.maptypeidChanged],
['projection_changed', this.projectionChanged],
['tilesloaded', this.tilesloaded],
['tilt_changed', this.tiltChanged],
['zoomChanged', this.zoomChanged],
]);
var mouseEventHandlers = new Map([
['dblclick', this.mapDblclick],
['mousemove', this.mapMousemove],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._googleMap.addListener(name, function () {
eventHandler.emit();
}));
}
});
mouseEventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._googleMap.addListener(name, function (event) {
eventHandler.emit(event);
}));
}
});
if (this.mapClick.observers.length > 0) {
this._listeners.push(this._googleMap.addListener('click', function (event) {
_this.mapClick.emit(event);
}));
/** Asserts that the map has been initialized. */
GoogleMap.prototype._assertInitialized = function () {
if (!this._googleMap) {
throw Error('Cannot access Google Map information before the API has been initialized. ' +
'Please wait for the API to load before trying to interact with it.');
}
};
/** Clears all currently-registered event listeners. */
GoogleMap.prototype._clearListeners = function () {
var e_1, _a;
try {
for (var _b = __values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this._listeners = [];
};
GoogleMap.decorators = [

@@ -522,2 +481,2 @@ { type: Component, args: [{

export { GoogleMap };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9nb29nbGUtbWFwL2dvb2dsZS1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILHlFQUF5RTtBQUN6RSxvQ0FBb0M7QUFFcEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBZWpFLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsSUFBTSxlQUFlLEdBQTJCO0lBQ3JELE1BQU0sRUFBRSxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFDO0lBQzFDLElBQUksRUFBRSxFQUFFO0NBQ1QsQ0FBQztBQUVGLG1EQUFtRDtBQUNuRCxNQUFNLENBQUMsSUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBQ3RDLGtEQUFrRDtBQUNsRCxNQUFNLENBQUMsSUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDO0FBRXJDOzs7O0dBSUc7QUFDSDtJQW9KRSxtQkFDbUIsV0FBdUI7SUFDeEM7OztPQUdHO0lBQzhCLFVBQW1CO1FBTG5DLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBOUlqQyxXQUFNLEdBQUcsY0FBYyxDQUFDO1FBRXhCLFVBQUssR0FBRyxhQUFhLENBQUM7UUFlL0I7OztXQUdHO1FBQ08sa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRW5EOzs7V0FHRztRQUNPLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVuRDs7O1dBR0c7UUFDTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXFELENBQUM7UUFFM0Y7OztXQUdHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUVuRTs7O1dBR0c7UUFDTyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3Qzs7O1dBR0c7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVoRDs7O1dBR0c7UUFDTyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFbEQ7OztXQUdHO1FBQ08sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXBEOzs7V0FHRztRQUNPLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTFDOzs7V0FHRztRQUNPLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEQ7OztXQUdHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUVwRTs7O1dBR0c7UUFDTyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO1FBRW5FOzs7V0FHRztRQUNPLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFFcEU7OztXQUdHO1FBQ08sc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2RDs7O1dBR0c7UUFDTyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO1FBRXJFOzs7V0FHRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVqRDs7O1dBR0c7UUFDTyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFakQ7OztXQUdHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBU3pDLGVBQVUsR0FBb0MsRUFBRSxDQUFDO1FBRXhDLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBeUIsZUFBZSxDQUFDLENBQUM7UUFDeEUsWUFBTyxHQUNwQixJQUFJLGVBQWUsQ0FBeUQsU0FBUyxDQUFDLENBQUM7UUFDMUUsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFtQixTQUFTLENBQUMsQ0FBQztRQUV6RCxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVU5Qyw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLFVBQVU7WUFDWCxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUV4RixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBTSxnQkFBZ0IsR0FBcUIsTUFBTSxDQUFDO1lBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7Z0JBQzVCLE1BQU0sS0FBSyxDQUNQLCtEQUErRDtvQkFDL0Qsc0RBQXNEO29CQUN0RCw4REFBOEQ7b0JBQzlELCtCQUErQixDQUFDLENBQUM7YUFDdEM7U0FDRjtJQUNILENBQUM7SUEvSkQsc0JBQ0ksNkJBQU07YUFEVixVQUNXLE1BQW9EO1lBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQ0ksMkJBQUk7YUFEUixVQUNTLElBQVk7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQzs7O09BQUE7SUFDRCxzQkFDSSw4QkFBTzthQURYLFVBQ1ksT0FBK0I7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7OztPQUFBO0lBc0pELCtCQUFXLEdBQVg7UUFDRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELDRCQUFRLEdBQVI7UUFBQSxpQkFtQkM7UUFsQkMsb0RBQW9EO1FBQ3BELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBRSxDQUFDO1lBQzlFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVoQixJQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV0RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsVUFBQyxTQUEwQjtnQkFDMUQsS0FBSSxDQUFDLFVBQVUsR0FBRyxTQUE2QixDQUFDO2dCQUVoRCxLQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELCtCQUFXLEdBQVg7UUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCw2QkFBUyxHQUFULFVBQ0ksTUFBZ0UsRUFDaEUsT0FBb0M7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBSyxHQUFMLFVBQU0sQ0FBUyxFQUFFLENBQVM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBSyxHQUFMLFVBQU0sTUFBb0Q7UUFDeEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILCtCQUFXLEdBQVgsVUFDSSxZQUFzRSxFQUN0RSxPQUFvQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILDZCQUFTLEdBQVQ7UUFDRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSCw2QkFBUyxHQUFUO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQ0FBaUIsR0FBakI7UUFDRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsOEJBQVUsR0FBVjtRQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0NBQVksR0FBWjtRQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUNBQWEsR0FBYjtRQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUNBQWEsR0FBYjtRQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsMkJBQU8sR0FBUDtRQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsMkJBQU8sR0FBUDtRQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBTUQsc0JBQUksK0JBQVE7UUFKWjs7O1dBR0c7YUFDSDtZQUNFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDbEMsQ0FBQzs7O09BQUE7SUFNRCxzQkFBSSwyQkFBSTtRQUpSOzs7V0FHRzthQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM5QixDQUFDOzs7T0FBQTtJQU1ELHNCQUFJLCtCQUFRO1FBSlo7OztXQUdHO2FBQ0g7WUFDRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ2xDLENBQUM7OztPQUFBO0lBTUQsc0JBQUksc0NBQWU7UUFKbkI7OztXQUdHO2FBQ0g7WUFDRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQ3pDLENBQUM7OztPQUFBO0lBRU8sNEJBQVEsR0FBaEI7UUFDRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUM7WUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVELGtGQUFrRjtJQUMxRSxtQ0FBZSxHQUF2QjtRQUNFLE9BQU8sYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUMsRUFBdUI7Z0JBQXZCLGtCQUF1QixFQUF0QixlQUFPLEVBQUUsY0FBTSxFQUFFLFlBQUk7WUFDL0IsSUFBTSxlQUFlLHlCQUNoQixPQUFPLEtBQ1YsTUFBTSxFQUFFLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUNoQyxJQUFJLEVBQUUsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUMvQyxDQUFDO1lBQ0YsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFTyxrQ0FBYyxHQUF0QixVQUF1QixjQUFrRDtRQUF6RSxpQkFPQztRQUxDLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxVQUFBLE9BQU87WUFDbEIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVPLDJDQUF1QixHQUEvQjtRQUNFLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLFVBQUMsRUFBb0I7Z0JBQXBCLGtCQUFvQixFQUFuQixpQkFBUyxFQUFFLGVBQU87WUFDN0IsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTywwQ0FBc0IsR0FBOUI7UUFDRSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxVQUFDLEVBQW1CO2dCQUFuQixrQkFBbUIsRUFBbEIsaUJBQVMsRUFBRSxjQUFNO1lBQzVCLElBQUksTUFBTSxFQUFFO2dCQUNWLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0I7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTyx3Q0FBb0IsR0FBNUI7UUFDRSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxVQUFDLEVBQWlCO2dCQUFqQixrQkFBaUIsRUFBaEIsaUJBQVMsRUFBRSxZQUFJO1lBQzFCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtnQkFDdEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVPLDRDQUF3QixHQUFoQztRQUFBLGlCQStDQztRQTlDQyxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUE2QjtZQUN4RCxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDdEMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3RDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDdEIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM1QixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2hDLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN4QyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ25CLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQzVDLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzlDLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDakMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNsQyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQ2xDLENBQUMsQ0FBQztRQUNILElBQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQStDO1lBQy9FLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDOUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNoQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzlCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDaEMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUNuQyxDQUFDLENBQUM7UUFDSCxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUMsWUFBZ0MsRUFBRSxJQUFZO1lBQ25FLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUU7b0JBQ3JELFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNMO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxrQkFBa0IsQ0FBQyxPQUFPLENBQ3RCLFVBQUMsWUFBa0QsRUFBRSxJQUFZO1lBQy9ELElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDaEIsS0FBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQUMsS0FBNkI7b0JBQzlELFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUM1QyxPQUFPLEVBQUUsVUFBQyxLQUF3RDtnQkFDaEUsS0FBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNUO0lBQ0gsQ0FBQztJQUVELHVEQUF1RDtJQUMvQyxtQ0FBZSxHQUF2Qjs7O1lBQ0UsS0FBcUIsSUFBQSxLQUFBLFNBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQSxnQkFBQSw0QkFBRTtnQkFBakMsSUFBSSxRQUFRLFdBQUE7Z0JBQ2YsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ25COzs7Ozs7Ozs7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDOztnQkF4Y0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsUUFBUSxFQUFFLDREQUE0RDtvQkFDdEUsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzs7O2dCQWxEQyxVQUFVO2dCQXVNc0MsTUFBTSx1QkFBbkQsUUFBUSxZQUFJLE1BQU0sU0FBQyxXQUFXOzs7eUJBbkpoQyxLQUFLO3dCQUVMLEtBQUs7eUJBRUwsS0FBSzt1QkFJTCxLQUFLOzBCQUlMLEtBQUs7Z0NBU0wsTUFBTTtnQ0FNTixNQUFNOzJCQU1OLE1BQU07OEJBTU4sTUFBTTswQkFNTixNQUFNOzZCQU1OLE1BQU07K0JBTU4sTUFBTTtpQ0FNTixNQUFNO3VCQU1OLE1BQU07bUNBTU4sTUFBTTsrQkFNTixNQUFNOzhCQU1OLE1BQU07K0JBTU4sTUFBTTtvQ0FNTixNQUFNO2dDQU1OLE1BQU07OEJBTU4sTUFBTTs4QkFNTixNQUFNOzhCQU1OLE1BQU07O0lBdVVULGdCQUFDO0NBQUEsQUF6Y0QsSUF5Y0M7U0FuY1ksU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvcnVsZXNfbm9kZWpzL2lzc3Vlcy8xMjY1XG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cImdvb2dsZW1hcHNcIiAvPlxuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPcHRpb25hbCxcbiAgSW5qZWN0LFxuICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2lzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHNoYXJlUmVwbGF5LCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW50ZXJmYWNlIEdvb2dsZU1hcHNXaW5kb3cgZXh0ZW5kcyBXaW5kb3cge1xuICBnb29nbGU/OiB0eXBlb2YgZ29vZ2xlO1xufVxuXG4vLyBUT0RPKG1iZWhybGljaCk6IFVwZGF0ZSB0aGlzIHRvIHVzZSBvcmlnaW5hbCBtYXAgYWZ0ZXIgdXBkYXRpbmcgRGVmaW5pdGVseVR5cGVkXG4vKipcbiAqIEV4dGVuZHMgdGhlIEdvb2dsZSBNYXAgaW50ZXJmYWNlIGR1ZSB0byB0aGUgRGVmaW5pdGVseSBUeXBlZCBpbXBsZW1lbnRhdGlvblxuICogbWlzc2luZyBcImdldENsaWNrYWJsZUljb25zXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlZEdvb2dsZU1hcCBleHRlbmRzIGdvb2dsZS5tYXBzLk1hcCB7XG4gIGdldENsaWNrYWJsZUljb25zOiAoKSA9PiBib29sZWFuO1xufVxuXG4vKiogZGVmYXVsdCBvcHRpb25zIHNldCB0byB0aGUgR29vZ2xlcGxleCAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1BUSU9OUzogZ29vZ2xlLm1hcHMuTWFwT3B0aW9ucyA9IHtcbiAgY2VudGVyOiB7bGF0OiAzNy40MjE5OTUsIGxuZzogLTEyMi4wODQwOTJ9LFxuICB6b29tOiAxNyxcbn07XG5cbi8qKiBBcmJpdHJhcnkgZGVmYXVsdCBoZWlnaHQgZm9yIHRoZSBtYXAgZWxlbWVudCAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSEVJR0hUID0gJzUwMHB4Jztcbi8qKiBBcmJpdHJhcnkgZGVmYXVsdCB3aWR0aCBmb3IgdGhlIG1hcCBlbGVtZW50ICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9XSURUSCA9ICc1MDBweCc7XG5cbi8qKlxuICogQW5ndWxhciBjb21wb25lbnQgdGhhdCByZW5kZXJzIGEgR29vZ2xlIE1hcCB2aWEgdGhlIEdvb2dsZSBNYXBzIEphdmFTY3JpcHRcbiAqIEFQSS5cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnb29nbGUtbWFwJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cIm1hcC1jb250YWluZXJcIj48L2Rpdj48bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgR29vZ2xlTWFwIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGhlaWdodCA9IERFRkFVTFRfSEVJR0hUO1xuXG4gIEBJbnB1dCgpIHdpZHRoID0gREVGQVVMVF9XSURUSDtcblxuICBASW5wdXQoKVxuICBzZXQgY2VudGVyKGNlbnRlcjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbHxnb29nbGUubWFwcy5MYXRMbmcpIHtcbiAgICB0aGlzLl9jZW50ZXIubmV4dChjZW50ZXIpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB6b29tKHpvb206IG51bWJlcikge1xuICAgIHRoaXMuX3pvb20ubmV4dCh6b29tKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBnb29nbGUubWFwcy5NYXBPcHRpb25zKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5uZXh0KG9wdGlvbnMgfHwgREVGQVVMVF9PUFRJT05TKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuYm91bmRzX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBib3VuZHNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuY2VudGVyX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBjZW50ZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuY2xpY2tcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudHxnb29nbGUubWFwcy5JY29uTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmRibGNsaWNrXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwRGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5kcmFnXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwRHJhZyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmRyYWdlbmRcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBEcmFnZW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZHJhZ3N0YXJ0XG4gICAqL1xuICBAT3V0cHV0KCkgbWFwRHJhZ3N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuaGVhZGluZ19jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgaGVhZGluZ0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5pZGxlXG4gICAqL1xuICBAT3V0cHV0KCkgaWRsZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLm1hcHR5cGVpZF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwdHlwZWlkQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLm1vdXNlbW92ZVxuICAgKi9cbiAgQE91dHB1dCgpIG1hcE1vdXNlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLm1vdXNlb3V0XG4gICAqL1xuICBAT3V0cHV0KCkgbWFwTW91c2VvdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5tb3VzZW92ZXJcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBNb3VzZW92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAucHJvamVjdGlvbl9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgcHJvamVjdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5yaWdodGNsaWNrXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwUmlnaHRjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLnRpbGVzbG9hZGVkXG4gICAqL1xuICBAT3V0cHV0KCkgdGlsZXNsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC50aWx0X2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSB0aWx0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLnpvb21fY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIHpvb21DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByaXZhdGUgX21hcEVsOiBIVE1MRWxlbWVudDtcbiAgX2dvb2dsZU1hcCE6IFVwZGF0ZWRHb29nbGVNYXA7XG5cbiAgLyoqIFdoZXRoZXIgd2UncmUgY3VycmVudGx5IHJlbmRlcmluZyBpbnNpZGUgYSBicm93c2VyLiAqL1xuICBwcml2YXRlIF9pc0Jyb3dzZXI6IGJvb2xlYW47XG4gIHByaXZhdGUgX2dvb2dsZU1hcENoYW5nZXMhOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcD47XG5cbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiBnb29nbGUubWFwcy5NYXBzRXZlbnRMaXN0ZW5lcltdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Z29vZ2xlLm1hcHMuTWFwT3B0aW9ucz4oREVGQVVMVF9PUFRJT05TKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2VudGVyID1cbiAgICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8Z29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbHxnb29nbGUubWFwcy5MYXRMbmd8dW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF96b29tID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXJ8dW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgYHBsYXRmb3JtSWRgIHBhcmFtZXRlciB0byBiZWNvbWUgcmVxdWlyZWQuXG4gICAgICogQGJyZWFraW5nLWNoYW5nZSAxMC4wLjBcbiAgICAgKi9cbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkPzogT2JqZWN0KSB7XG5cbiAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDEwLjAuMCBSZW1vdmUgbnVsbCBjaGVjayBmb3IgYHBsYXRmb3JtSWRgLlxuICAgIHRoaXMuX2lzQnJvd3NlciA9XG4gICAgICAgIHBsYXRmb3JtSWQgPyBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSA6IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmICEhd2luZG93O1xuXG4gICAgaWYgKHRoaXMuX2lzQnJvd3Nlcikge1xuICAgICAgY29uc3QgZ29vZ2xlTWFwc1dpbmRvdzogR29vZ2xlTWFwc1dpbmRvdyA9IHdpbmRvdztcbiAgICAgIGlmICghZ29vZ2xlTWFwc1dpbmRvdy5nb29nbGUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAnTmFtZXNwYWNlIGdvb2dsZSBub3QgZm91bmQsIGNhbm5vdCBjb25zdHJ1Y3QgZW1iZWRkZWQgZ29vZ2xlICcgK1xuICAgICAgICAgICAgJ21hcC4gUGxlYXNlIGluc3RhbGwgdGhlIEdvb2dsZSBNYXBzIEphdmFTY3JpcHQgQVBJOiAnICtcbiAgICAgICAgICAgICdodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC8nICtcbiAgICAgICAgICAgICd0dXRvcmlhbCNMb2FkaW5nX3RoZV9NYXBzX0FQSScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMuX3NldFNpemUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEl0IHNob3VsZCBiZSBhIG5vb3AgZHVyaW5nIHNlcnZlci1zaWRlIHJlbmRlcmluZy5cbiAgICBpZiAodGhpcy5faXNCcm93c2VyKSB7XG4gICAgICB0aGlzLl9tYXBFbCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWFwLWNvbnRhaW5lcicpITtcbiAgICAgIHRoaXMuX3NldFNpemUoKTtcblxuICAgICAgY29uc3QgY29tYmluZWRPcHRpb25zQ2hhbmdlcyA9IHRoaXMuX2NvbWJpbmVPcHRpb25zKCk7XG5cbiAgICAgIHRoaXMuX2dvb2dsZU1hcENoYW5nZXMgPSB0aGlzLl9pbml0aWFsaXplTWFwKGNvbWJpbmVkT3B0aW9uc0NoYW5nZXMpO1xuICAgICAgdGhpcy5fZ29vZ2xlTWFwQ2hhbmdlcy5zdWJzY3JpYmUoKGdvb2dsZU1hcDogZ29vZ2xlLm1hcHMuTWFwKSA9PiB7XG4gICAgICAgIHRoaXMuX2dvb2dsZU1hcCA9IGdvb2dsZU1hcCBhcyBVcGRhdGVkR29vZ2xlTWFwO1xuXG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVFdmVudEhhbmRsZXJzKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fd2F0Y2hGb3JPcHRpb25zQ2hhbmdlcygpO1xuICAgICAgdGhpcy5fd2F0Y2hGb3JDZW50ZXJDaGFuZ2VzKCk7XG4gICAgICB0aGlzLl93YXRjaEZvclpvb21DaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2NsZWFyTGlzdGVuZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmZpdEJvdW5kc1xuICAgKi9cbiAgZml0Qm91bmRzKFxuICAgICAgYm91bmRzOiBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHN8Z29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzTGl0ZXJhbCxcbiAgICAgIHBhZGRpbmc/OiBudW1iZXJ8Z29vZ2xlLm1hcHMuUGFkZGluZykge1xuICAgIHRoaXMuX2dvb2dsZU1hcC5maXRCb3VuZHMoYm91bmRzLCBwYWRkaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAucGFuQnlcbiAgICovXG4gIHBhbkJ5KHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwLnBhbkJ5KHgsIHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5wYW5Ub1xuICAgKi9cbiAgcGFuVG8obGF0TG5nOiBnb29nbGUubWFwcy5MYXRMbmd8Z29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCkge1xuICAgIHRoaXMuX2dvb2dsZU1hcC5wYW5UbyhsYXRMbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5wYW5Ub0JvdW5kc1xuICAgKi9cbiAgcGFuVG9Cb3VuZHMoXG4gICAgICBsYXRMbmdCb3VuZHM6IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kc3xnb29nbGUubWFwcy5MYXRMbmdCb3VuZHNMaXRlcmFsLFxuICAgICAgcGFkZGluZz86IG51bWJlcnxnb29nbGUubWFwcy5QYWRkaW5nKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwLnBhblRvQm91bmRzKGxhdExuZ0JvdW5kcywgcGFkZGluZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldEJvdW5kc1xuICAgKi9cbiAgZ2V0Qm91bmRzKCk6IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kc3xudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldEJvdW5kcygpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldENlbnRlclxuICAgKi9cbiAgZ2V0Q2VudGVyKCk6IGdvb2dsZS5tYXBzLkxhdExuZyB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5nZXRDZW50ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZ2V0Q2xpY2thYmxlSWNvbnNcbiAgICovXG4gIGdldENsaWNrYWJsZUljb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0Q2xpY2thYmxlSWNvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZ2V0SGVhZGluZ1xuICAgKi9cbiAgZ2V0SGVhZGluZygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0SGVhZGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRNYXBUeXBlSWRcbiAgICovXG4gIGdldE1hcFR5cGVJZCgpOiBnb29nbGUubWFwcy5NYXBUeXBlSWR8c3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldE1hcFR5cGVJZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRQcm9qZWN0aW9uXG4gICAqL1xuICBnZXRQcm9qZWN0aW9uKCk6IGdvb2dsZS5tYXBzLlByb2plY3Rpb258bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5nZXRQcm9qZWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldFN0cmVldFZpZXdcbiAgICovXG4gIGdldFN0cmVldFZpZXcoKTogZ29vZ2xlLm1hcHMuU3RyZWV0Vmlld1Bhbm9yYW1hIHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldFN0cmVldFZpZXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZ2V0VGlsdFxuICAgKi9cbiAgZ2V0VGlsdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0VGlsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRab29tXG4gICAqL1xuICBnZXRab29tKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5nZXRab29tKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmNvbnRyb2xzXG4gICAqL1xuICBnZXQgY29udHJvbHMoKTogQXJyYXk8Z29vZ2xlLm1hcHMuTVZDQXJyYXk8Tm9kZT4+IHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmNvbnRyb2xzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5kYXRhXG4gICAqL1xuICBnZXQgZGF0YSgpOiBnb29nbGUubWFwcy5EYXRhIHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLm1hcFR5cGVzXG4gICAqL1xuICBnZXQgbWFwVHlwZXMoKTogZ29vZ2xlLm1hcHMuTWFwVHlwZVJlZ2lzdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLm1hcFR5cGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5vdmVybGF5TWFwVHlwZXNcbiAgICovXG4gIGdldCBvdmVybGF5TWFwVHlwZXMoKTogZ29vZ2xlLm1hcHMuTVZDQXJyYXk8Z29vZ2xlLm1hcHMuTWFwVHlwZT4ge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAub3ZlcmxheU1hcFR5cGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0U2l6ZSgpIHtcbiAgICBpZiAodGhpcy5fbWFwRWwpIHtcbiAgICAgIHRoaXMuX21hcEVsLnN0eWxlLmhlaWdodCA9IHRoaXMuaGVpZ2h0IHx8IERFRkFVTFRfSEVJR0hUO1xuICAgICAgdGhpcy5fbWFwRWwuc3R5bGUud2lkdGggPSB0aGlzLndpZHRoIHx8IERFRkFVTFRfV0lEVEg7XG4gICAgfVxuICB9XG5cbiAgLyoqIENvbWJpbmVzIHRoZSBjZW50ZXIgYW5kIHpvb20gYW5kIHRoZSBvdGhlciBtYXAgb3B0aW9ucyBpbnRvIGEgc2luZ2xlIG9iamVjdCAqL1xuICBwcml2YXRlIF9jb21iaW5lT3B0aW9ucygpOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcE9wdGlvbnM+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fb3B0aW9ucywgdGhpcy5fY2VudGVyLCB0aGlzLl96b29tXSlcbiAgICAgICAgLnBpcGUobWFwKChbb3B0aW9ucywgY2VudGVyLCB6b29tXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uczogZ29vZ2xlLm1hcHMuTWFwT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBjZW50ZXI6IGNlbnRlciB8fCBvcHRpb25zLmNlbnRlcixcbiAgICAgICAgICAgIHpvb206IHpvb20gIT09IHVuZGVmaW5lZCA/IHpvb20gOiBvcHRpb25zLnpvb20sXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gY29tYmluZWRPcHRpb25zO1xuICAgICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplTWFwKG9wdGlvbnNDaGFuZ2VzOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcE9wdGlvbnM+KTpcbiAgICAgIE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTWFwPiB7XG4gICAgcmV0dXJuIG9wdGlvbnNDaGFuZ2VzLnBpcGUoXG4gICAgICAgIHRha2UoMSksIG1hcChvcHRpb25zID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IGdvb2dsZS5tYXBzLk1hcCh0aGlzLl9tYXBFbCwgb3B0aW9ucyk7XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvck9wdGlvbnNDaGFuZ2VzKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX2dvb2dsZU1hcENoYW5nZXMsIHRoaXMuX29wdGlvbnNdKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtnb29nbGVNYXAsIG9wdGlvbnNdKSA9PiB7XG4gICAgICAgICAgZ29vZ2xlTWFwLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JDZW50ZXJDaGFuZ2VzKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX2dvb2dsZU1hcENoYW5nZXMsIHRoaXMuX2NlbnRlcl0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgoW2dvb2dsZU1hcCwgY2VudGVyXSkgPT4ge1xuICAgICAgICAgIGlmIChjZW50ZXIpIHtcbiAgICAgICAgICAgIGdvb2dsZU1hcC5zZXRDZW50ZXIoY2VudGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3Jab29tQ2hhbmdlcygpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9nb29nbGVNYXBDaGFuZ2VzLCB0aGlzLl96b29tXSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZ29vZ2xlTWFwLCB6b29tXSkgPT4ge1xuICAgICAgICAgIGlmICh6b29tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGdvb2dsZU1hcC5zZXRab29tKHpvb20pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplRXZlbnRIYW5kbGVycygpIHtcbiAgICAvLyBFbnN1cmUgdGhhdCB3ZSBkb24ndCBsZWFrIGlmIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAgICB0aGlzLl9jbGVhckxpc3RlbmVycygpO1xuXG4gICAgY29uc3QgZXZlbnRIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudEVtaXR0ZXI8dm9pZD4+KFtcbiAgICAgIFsnYm91bmRzX2NoYW5nZWQnLCB0aGlzLmJvdW5kc0NoYW5nZWRdLFxuICAgICAgWydjZW50ZXJfY2hhbmdlZCcsIHRoaXMuY2VudGVyQ2hhbmdlZF0sXG4gICAgICBbJ2RyYWcnLCB0aGlzLm1hcERyYWddLFxuICAgICAgWydkcmFnZW5kJywgdGhpcy5tYXBEcmFnZW5kXSxcbiAgICAgIFsnZHJhZ3N0YXJ0JywgdGhpcy5tYXBEcmFnc3RhcnRdLFxuICAgICAgWydoZWFkaW5nX2NoYW5nZWQnLCB0aGlzLmhlYWRpbmdDaGFuZ2VkXSxcbiAgICAgIFsnaWRsZScsIHRoaXMuaWRsZV0sXG4gICAgICBbJ21hcHR5cGVpZF9jaGFuZ2VkJywgdGhpcy5tYXB0eXBlaWRDaGFuZ2VkXSxcbiAgICAgIFsncHJvamVjdGlvbl9jaGFuZ2VkJywgdGhpcy5wcm9qZWN0aW9uQ2hhbmdlZF0sXG4gICAgICBbJ3RpbGVzbG9hZGVkJywgdGhpcy50aWxlc2xvYWRlZF0sXG4gICAgICBbJ3RpbHRfY2hhbmdlZCcsIHRoaXMudGlsdENoYW5nZWRdLFxuICAgICAgWyd6b29tQ2hhbmdlZCcsIHRoaXMuem9vbUNoYW5nZWRdLFxuICAgIF0pO1xuICAgIGNvbnN0IG1vdXNlRXZlbnRIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4+KFtcbiAgICAgIFsnZGJsY2xpY2snLCB0aGlzLm1hcERibGNsaWNrXSxcbiAgICAgIFsnbW91c2Vtb3ZlJywgdGhpcy5tYXBNb3VzZW1vdmVdLFxuICAgICAgWydtb3VzZW91dCcsIHRoaXMubWFwTW91c2VvdXRdLFxuICAgICAgWydtb3VzZW92ZXInLCB0aGlzLm1hcE1vdXNlb3Zlcl0sXG4gICAgICBbJ3JpZ2h0Y2xpY2snLCB0aGlzLm1hcFJpZ2h0Y2xpY2tdLFxuICAgIF0pO1xuICAgIGV2ZW50SGFuZGxlcnMuZm9yRWFjaCgoZXZlbnRIYW5kbGVyOiBFdmVudEVtaXR0ZXI8dm9pZD4sIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGV2ZW50SGFuZGxlci5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaCh0aGlzLl9nb29nbGVNYXAuYWRkTGlzdGVuZXIobmFtZSwgKCkgPT4ge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5lbWl0KCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb3VzZUV2ZW50SGFuZGxlcnMuZm9yRWFjaChcbiAgICAgICAgKGV2ZW50SGFuZGxlcjogRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLl9nb29nbGVNYXAuYWRkTGlzdGVuZXIobmFtZSwgKGV2ZW50OiBnb29nbGUubWFwcy5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICBldmVudEhhbmRsZXIuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgaWYgKHRoaXMubWFwQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKHRoaXMuX2dvb2dsZU1hcC5hZGRMaXN0ZW5lcihcbiAgICAgICAgICAnY2xpY2snLCAoZXZlbnQ6IGdvb2dsZS5tYXBzLk1vdXNlRXZlbnR8Z29vZ2xlLm1hcHMuSWNvbk1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWFwQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbGVhcnMgYWxsIGN1cnJlbnRseS1yZWdpc3RlcmVkIGV2ZW50IGxpc3RlbmVycy4gKi9cbiAgcHJpdmF0ZSBfY2xlYXJMaXN0ZW5lcnMoKSB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lci5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9nb29nbGUtbWFwL2dvb2dsZS1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILHlFQUF5RTtBQUN6RSxvQ0FBb0M7QUFFcEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFJTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekUsT0FBTyxFQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQWVyRCw0Q0FBNEM7QUFDNUMsTUFBTSxDQUFDLElBQU0sZUFBZSxHQUEyQjtJQUNyRCxNQUFNLEVBQUUsRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBQztJQUMxQyxJQUFJLEVBQUUsRUFBRTtDQUNULENBQUM7QUFFRixtREFBbUQ7QUFDbkQsTUFBTSxDQUFDLElBQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQztBQUN0QyxrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLElBQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUVyQzs7OztHQUlHO0FBQ0g7SUFvS0UsbUJBQ21CLFdBQXVCO0lBQ3hDOzs7T0FHRztJQUM4QixVQUFtQjtRQUxuQyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQTlK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QUN0RSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7Ozs7Z0JBbERDLFVBQVU7Z0JBdU5zQyxNQUFNLHVCQUFuRCxRQUFRLFlBQUksTUFBTSxTQUFDLFdBQVc7Ozt5QkFySmhDLEtBQUs7d0JBRUwsS0FBSzt5QkFFTCxLQUFLO3VCQUlMLEtBQUs7MEJBSUwsS0FBSztnQ0FTTCxNQUFNO2dDQU9OLE1BQU07MkJBT04sTUFBTTs4QkFRTixNQUFNOzBCQVFOLE1BQU07NkJBTU4sTUFBTTsrQkFNTixNQUFNO2lDQU1OLE1BQU07dUJBT04sTUFBTTttQ0FNTixNQUFNOytCQU9OLE1BQU07OEJBUU4sTUFBTTsrQkFRTixNQUFNO29DQVFOLE1BQU07Z0NBUU4sTUFBTTs4QkFRTixNQUFNOzhCQU1OLE1BQU07OEJBTU4sTUFBTTs7SUFpUlQsZ0JBQUM7Q0FBQSxBQW5iRCxJQW1iQztTQTdhWSxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFdvcmthcm91bmQgZm9yOiBodHRwczovL2dpdGh1Yi5jb20vYmF6ZWxidWlsZC9ydWxlc19ub2RlanMvaXNzdWVzLzEyNjVcbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiZ29vZ2xlbWFwc1wiIC8+XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPcHRpb25hbCxcbiAgSW5qZWN0LFxuICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2lzUGxhdGZvcm1Ccm93c2VyfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHNoYXJlUmVwbGF5LCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TWFwRXZlbnRNYW5hZ2VyfSBmcm9tICcuLi9tYXAtZXZlbnQtbWFuYWdlcic7XG5cbmludGVyZmFjZSBHb29nbGVNYXBzV2luZG93IGV4dGVuZHMgV2luZG93IHtcbiAgZ29vZ2xlPzogdHlwZW9mIGdvb2dsZTtcbn1cblxuLy8gVE9ETyhtYmVocmxpY2gpOiBVcGRhdGUgdGhpcyB0byB1c2Ugb3JpZ2luYWwgbWFwIGFmdGVyIHVwZGF0aW5nIERlZmluaXRlbHlUeXBlZFxuLyoqXG4gKiBFeHRlbmRzIHRoZSBHb29nbGUgTWFwIGludGVyZmFjZSBkdWUgdG8gdGhlIERlZmluaXRlbHkgVHlwZWQgaW1wbGVtZW50YXRpb25cbiAqIG1pc3NpbmcgXCJnZXRDbGlja2FibGVJY29uc1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZWRHb29nbGVNYXAgZXh0ZW5kcyBnb29nbGUubWFwcy5NYXAge1xuICBnZXRDbGlja2FibGVJY29uczogKCkgPT4gYm9vbGVhbjtcbn1cblxuLyoqIGRlZmF1bHQgb3B0aW9ucyBzZXQgdG8gdGhlIEdvb2dsZXBsZXggKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX09QVElPTlM6IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnMgPSB7XG4gIGNlbnRlcjoge2xhdDogMzcuNDIxOTk1LCBsbmc6IC0xMjIuMDg0MDkyfSxcbiAgem9vbTogMTcsXG59O1xuXG4vKiogQXJiaXRyYXJ5IGRlZmF1bHQgaGVpZ2h0IGZvciB0aGUgbWFwIGVsZW1lbnQgKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFSUdIVCA9ICc1MDBweCc7XG4vKiogQXJiaXRyYXJ5IGRlZmF1bHQgd2lkdGggZm9yIHRoZSBtYXAgZWxlbWVudCAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lEVEggPSAnNTAwcHgnO1xuXG4vKipcbiAqIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhIEdvb2dsZSBNYXAgdmlhIHRoZSBHb29nbGUgTWFwcyBKYXZhU2NyaXB0XG4gKiBBUEkuXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ29vZ2xlLW1hcCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+PC9kaXY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZU1hcCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9ldmVudE1hbmFnZXIgPSBuZXcgTWFwRXZlbnRNYW5hZ2VyKCk7XG5cbiAgLyoqIFdoZXRoZXIgd2UncmUgY3VycmVudGx5IHJlbmRlcmluZyBpbnNpZGUgYSBicm93c2VyLiAqL1xuICBwcml2YXRlIF9pc0Jyb3dzZXI6IGJvb2xlYW47XG4gIHByaXZhdGUgX2dvb2dsZU1hcENoYW5nZXM6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTWFwPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5NYXBPcHRpb25zPihERUZBVUxUX09QVElPTlMpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jZW50ZXIgPVxuICAgICAgbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsfGdvb2dsZS5tYXBzLkxhdExuZ3x1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3pvb20gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcnx1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9tYXBFbDogSFRNTEVsZW1lbnQ7XG4gIF9nb29nbGVNYXA6IFVwZGF0ZWRHb29nbGVNYXA7XG5cbiAgQElucHV0KCkgaGVpZ2h0ID0gREVGQVVMVF9IRUlHSFQ7XG5cbiAgQElucHV0KCkgd2lkdGggPSBERUZBVUxUX1dJRFRIO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjZW50ZXIoY2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsfGdvb2dsZS5tYXBzLkxhdExuZykge1xuICAgIHRoaXMuX2NlbnRlci5uZXh0KGNlbnRlcik7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgdGhpcy5fem9vbS5uZXh0KHpvb20pO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnMpIHtcbiAgICB0aGlzLl9vcHRpb25zLm5leHQob3B0aW9ucyB8fCBERUZBVUxUX09QVElPTlMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5ib3VuZHNfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGJvdW5kc0NoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2JvdW5kc19jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5jZW50ZXJfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGNlbnRlckNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2NlbnRlcl9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5jbGlja1xuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcENsaWNrOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnR8Z29vZ2xlLm1hcHMuSWNvbk1vdXNlRXZlbnQ+ID1cbiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50fGdvb2dsZS5tYXBzLkljb25Nb3VzZUV2ZW50PignY2xpY2snKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmRibGNsaWNrXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwRGJsY2xpY2s6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdkYmxjbGljaycpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZHJhZ1xuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWc6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2RyYWcnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmRyYWdlbmRcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBEcmFnZW5kOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdkcmFnZW5kJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5kcmFnc3RhcnRcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBEcmFnc3RhcnQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2RyYWdzdGFydCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuaGVhZGluZ19jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgaGVhZGluZ0NoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2hlYWRpbmdfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuaWRsZVxuICAgKi9cbiAgQE91dHB1dCgpIGlkbGU6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2lkbGUnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLm1hcHR5cGVpZF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwdHlwZWlkQ2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPignbWFwdHlwZWlkX2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLm1vdXNlbW92ZVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcE1vdXNlbW92ZTogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ21vdXNlbW92ZScpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAubW91c2VvdXRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBNb3VzZW91dDogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ21vdXNlb3V0Jyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5tb3VzZW92ZXJcbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBNb3VzZW92ZXI6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdtb3VzZW92ZXInKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5wcm9qZWN0aW9uX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwcm9qZWN0aW9uQ2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3Byb2plY3Rpb25fY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAucmlnaHRjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcFJpZ2h0Y2xpY2s6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdyaWdodGNsaWNrJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC50aWxlc2xvYWRlZFxuICAgKi9cbiAgQE91dHB1dCgpIHRpbGVzbG9hZGVkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCd0aWxlc2xvYWRlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAudGlsdF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgdGlsdENoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3RpbHRfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuem9vbV9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgem9vbUNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3pvb21DaGFuZ2VkJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBgcGxhdGZvcm1JZGAgcGFyYW1ldGVyIHRvIGJlY29tZSByZXF1aXJlZC5cbiAgICAgKiBAYnJlYWtpbmctY2hhbmdlIDEwLjAuMFxuICAgICAqL1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ/OiBPYmplY3QpIHtcblxuICAgIC8vIEBicmVha2luZy1jaGFuZ2UgMTAuMC4wIFJlbW92ZSBudWxsIGNoZWNrIGZvciBgcGxhdGZvcm1JZGAuXG4gICAgdGhpcy5faXNCcm93c2VyID1cbiAgICAgICAgcGxhdGZvcm1JZCA/IGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpIDogdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgISF3aW5kb3c7XG5cbiAgICBpZiAodGhpcy5faXNCcm93c2VyKSB7XG4gICAgICBjb25zdCBnb29nbGVNYXBzV2luZG93OiBHb29nbGVNYXBzV2luZG93ID0gd2luZG93O1xuICAgICAgaWYgKCFnb29nbGVNYXBzV2luZG93Lmdvb2dsZSkge1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICdOYW1lc3BhY2UgZ29vZ2xlIG5vdCBmb3VuZCwgY2Fubm90IGNvbnN0cnVjdCBlbWJlZGRlZCBnb29nbGUgJyArXG4gICAgICAgICAgICAnbWFwLiBQbGVhc2UgaW5zdGFsbCB0aGUgR29vZ2xlIE1hcHMgSmF2YVNjcmlwdCBBUEk6ICcgK1xuICAgICAgICAgICAgJ2h0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0LycgK1xuICAgICAgICAgICAgJ3R1dG9yaWFsI0xvYWRpbmdfdGhlX01hcHNfQVBJJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5fc2V0U2l6ZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gSXQgc2hvdWxkIGJlIGEgbm9vcCBkdXJpbmcgc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICAgIGlmICh0aGlzLl9pc0Jyb3dzZXIpIHtcbiAgICAgIHRoaXMuX21hcEVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYXAtY29udGFpbmVyJykhO1xuICAgICAgdGhpcy5fc2V0U2l6ZSgpO1xuICAgICAgdGhpcy5fZ29vZ2xlTWFwQ2hhbmdlcyA9IHRoaXMuX2luaXRpYWxpemVNYXAodGhpcy5fY29tYmluZU9wdGlvbnMoKSk7XG4gICAgICB0aGlzLl9nb29nbGVNYXBDaGFuZ2VzLnN1YnNjcmliZSgoZ29vZ2xlTWFwOiBnb29nbGUubWFwcy5NYXApID0+IHtcbiAgICAgICAgdGhpcy5fZ29vZ2xlTWFwID0gZ29vZ2xlTWFwIGFzIFVwZGF0ZWRHb29nbGVNYXA7XG4gICAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5zZXRUYXJnZXQodGhpcy5fZ29vZ2xlTWFwKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl93YXRjaEZvck9wdGlvbnNDaGFuZ2VzKCk7XG4gICAgICB0aGlzLl93YXRjaEZvckNlbnRlckNoYW5nZXMoKTtcbiAgICAgIHRoaXMuX3dhdGNoRm9yWm9vbUNoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9ldmVudE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZml0Qm91bmRzXG4gICAqL1xuICBmaXRCb3VuZHMoXG4gICAgICBib3VuZHM6IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kc3xnb29nbGUubWFwcy5MYXRMbmdCb3VuZHNMaXRlcmFsLFxuICAgICAgcGFkZGluZz86IG51bWJlcnxnb29nbGUubWFwcy5QYWRkaW5nKSB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICB0aGlzLl9nb29nbGVNYXAuZml0Qm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLnBhbkJ5XG4gICAqL1xuICBwYW5CeSh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCk7XG4gICAgdGhpcy5fZ29vZ2xlTWFwLnBhbkJ5KHgsIHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5wYW5Ub1xuICAgKi9cbiAgcGFuVG8obGF0TG5nOiBnb29nbGUubWFwcy5MYXRMbmd8Z29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCkge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCk7XG4gICAgdGhpcy5fZ29vZ2xlTWFwLnBhblRvKGxhdExuZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLnBhblRvQm91bmRzXG4gICAqL1xuICBwYW5Ub0JvdW5kcyhcbiAgICAgIGxhdExuZ0JvdW5kczogZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzfGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kc0xpdGVyYWwsXG4gICAgICBwYWRkaW5nPzogbnVtYmVyfGdvb2dsZS5tYXBzLlBhZGRpbmcpIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHRoaXMuX2dvb2dsZU1hcC5wYW5Ub0JvdW5kcyhsYXRMbmdCb3VuZHMsIHBhZGRpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRCb3VuZHNcbiAgICovXG4gIGdldEJvdW5kcygpOiBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHN8bnVsbCB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldEJvdW5kcygpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldENlbnRlclxuICAgKi9cbiAgZ2V0Q2VudGVyKCk6IGdvb2dsZS5tYXBzLkxhdExuZyB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldENlbnRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRDbGlja2FibGVJY29uc1xuICAgKi9cbiAgZ2V0Q2xpY2thYmxlSWNvbnMoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldENsaWNrYWJsZUljb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldEhlYWRpbmdcbiAgICovXG4gIGdldEhlYWRpbmcoKTogbnVtYmVyIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0SGVhZGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRNYXBUeXBlSWRcbiAgICovXG4gIGdldE1hcFR5cGVJZCgpOiBnb29nbGUubWFwcy5NYXBUeXBlSWR8c3RyaW5nIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0TWFwVHlwZUlkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldFByb2plY3Rpb25cbiAgICovXG4gIGdldFByb2plY3Rpb24oKTogZ29vZ2xlLm1hcHMuUHJvamVjdGlvbnxudWxsIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0UHJvamVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5nZXRTdHJlZXRWaWV3XG4gICAqL1xuICBnZXRTdHJlZXRWaWV3KCk6IGdvb2dsZS5tYXBzLlN0cmVldFZpZXdQYW5vcmFtYSB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmdldFN0cmVldFZpZXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAuZ2V0VGlsdFxuICAgKi9cbiAgZ2V0VGlsdCgpOiBudW1iZXIge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5nZXRUaWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXAjTWFwLmdldFpvb21cbiAgICovXG4gIGdldFpvb20oKTogbnVtYmVyIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZ2V0Wm9vbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5jb250cm9sc1xuICAgKi9cbiAgZ2V0IGNvbnRyb2xzKCk6IEFycmF5PGdvb2dsZS5tYXBzLk1WQ0FycmF5PE5vZGU+PiB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5fZ29vZ2xlTWFwLmNvbnRyb2xzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFwI01hcC5kYXRhXG4gICAqL1xuICBnZXQgZGF0YSgpOiBnb29nbGUubWFwcy5EYXRhIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAubWFwVHlwZXNcbiAgICovXG4gIGdldCBtYXBUeXBlcygpOiBnb29nbGUubWFwcy5NYXBUeXBlUmVnaXN0cnkge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCk7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcC5tYXBUeXBlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcCNNYXAub3ZlcmxheU1hcFR5cGVzXG4gICAqL1xuICBnZXQgb3ZlcmxheU1hcFR5cGVzKCk6IGdvb2dsZS5tYXBzLk1WQ0FycmF5PGdvb2dsZS5tYXBzLk1hcFR5cGU+IHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpO1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXAub3ZlcmxheU1hcFR5cGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0U2l6ZSgpIHtcbiAgICBpZiAodGhpcy5fbWFwRWwpIHtcbiAgICAgIHRoaXMuX21hcEVsLnN0eWxlLmhlaWdodCA9IHRoaXMuaGVpZ2h0IHx8IERFRkFVTFRfSEVJR0hUO1xuICAgICAgdGhpcy5fbWFwRWwuc3R5bGUud2lkdGggPSB0aGlzLndpZHRoIHx8IERFRkFVTFRfV0lEVEg7XG4gICAgfVxuICB9XG5cbiAgLyoqIENvbWJpbmVzIHRoZSBjZW50ZXIgYW5kIHpvb20gYW5kIHRoZSBvdGhlciBtYXAgb3B0aW9ucyBpbnRvIGEgc2luZ2xlIG9iamVjdCAqL1xuICBwcml2YXRlIF9jb21iaW5lT3B0aW9ucygpOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcE9wdGlvbnM+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fb3B0aW9ucywgdGhpcy5fY2VudGVyLCB0aGlzLl96b29tXSlcbiAgICAgICAgLnBpcGUobWFwKChbb3B0aW9ucywgY2VudGVyLCB6b29tXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uczogZ29vZ2xlLm1hcHMuTWFwT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBjZW50ZXI6IGNlbnRlciB8fCBvcHRpb25zLmNlbnRlcixcbiAgICAgICAgICAgIHpvb206IHpvb20gIT09IHVuZGVmaW5lZCA/IHpvb20gOiBvcHRpb25zLnpvb20sXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gY29tYmluZWRPcHRpb25zO1xuICAgICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplTWFwKG9wdGlvbnNDaGFuZ2VzOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcE9wdGlvbnM+KTpcbiAgICAgIE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTWFwPiB7XG4gICAgcmV0dXJuIG9wdGlvbnNDaGFuZ2VzLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcChvcHRpb25zID0+IG5ldyBnb29nbGUubWFwcy5NYXAodGhpcy5fbWFwRWwsIG9wdGlvbnMpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JPcHRpb25zQ2hhbmdlcygpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9nb29nbGVNYXBDaGFuZ2VzLCB0aGlzLl9vcHRpb25zXSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZ29vZ2xlTWFwLCBvcHRpb25zXSkgPT4ge1xuICAgICAgICAgIGdvb2dsZU1hcC5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoRm9yQ2VudGVyQ2hhbmdlcygpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9nb29nbGVNYXBDaGFuZ2VzLCB0aGlzLl9jZW50ZXJdKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtnb29nbGVNYXAsIGNlbnRlcl0pID0+IHtcbiAgICAgICAgICBpZiAoY2VudGVyKSB7XG4gICAgICAgICAgICBnb29nbGVNYXAuc2V0Q2VudGVyKGNlbnRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3dhdGNoRm9yWm9vbUNoYW5nZXMoKSB7XG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fZ29vZ2xlTWFwQ2hhbmdlcywgdGhpcy5fem9vbV0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSlcbiAgICAgICAgLnN1YnNjcmliZSgoW2dvb2dsZU1hcCwgem9vbV0pID0+IHtcbiAgICAgICAgICBpZiAoem9vbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBnb29nbGVNYXAuc2V0Wm9vbSh6b29tKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICB9XG5cbiAgLyoqIEFzc2VydHMgdGhhdCB0aGUgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkLiAqL1xuICBwcml2YXRlIF9hc3NlcnRJbml0aWFsaXplZCgpIHtcbiAgICBpZiAoIXRoaXMuX2dvb2dsZU1hcCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgR29vZ2xlIE1hcCBpbmZvcm1hdGlvbiBiZWZvcmUgdGhlIEFQSSBoYXMgYmVlbiBpbml0aWFsaXplZC4gJyArXG4gICAgICAgICAgICAgICAgICAnUGxlYXNlIHdhaXQgZm9yIHRoZSBBUEkgdG8gbG9hZCBiZWZvcmUgdHJ5aW5nIHRvIGludGVyYWN0IHdpdGggaXQuJyk7XG4gICAgfVxuICB9XG59XG4iXX0=

@@ -12,2 +12,3 @@ /**

import { MapMarker } from './map-marker/map-marker';
import { MapPolyline } from './map-polyline/map-polyline';
var COMPONENTS = [

@@ -17,2 +18,3 @@ GoogleMap,

MapMarker,
MapPolyline,
];

@@ -31,2 +33,2 @@ var GoogleMapsModule = /** @class */ (function () {

export { GoogleMapsModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRWxELElBQU0sVUFBVSxHQUFHO0lBQ2pCLFNBQVM7SUFDVCxhQUFhO0lBQ2IsU0FBUztDQUNWLENBQUM7QUFFRjtJQUFBO0lBS0EsQ0FBQzs7Z0JBTEEsUUFBUSxTQUFDO29CQUNSLFlBQVksRUFBRSxVQUFVO29CQUN4QixPQUFPLEVBQUUsVUFBVTtpQkFDcEI7O0lBRUQsdUJBQUM7Q0FBQSxBQUxELElBS0M7U0FEWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7R29vZ2xlTWFwfSBmcm9tICcuL2dvb2dsZS1tYXAvZ29vZ2xlLW1hcCc7XG5pbXBvcnQge01hcEluZm9XaW5kb3d9IGZyb20gJy4vbWFwLWluZm8td2luZG93L21hcC1pbmZvLXdpbmRvdyc7XG5pbXBvcnQge01hcE1hcmtlcn0gZnJvbSAnLi9tYXAtbWFya2VyL21hcC1tYXJrZXInO1xuXG5jb25zdCBDT01QT05FTlRTID0gW1xuICBHb29nbGVNYXAsXG4gIE1hcEluZm9XaW5kb3csXG4gIE1hcE1hcmtlcixcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogQ09NUE9ORU5UUyxcbiAgZXhwb3J0czogQ09NUE9ORU5UUyxcbn0pXG5leHBvcnQgY2xhc3MgR29vZ2xlTWFwc01vZHVsZSB7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RCxJQUFNLFVBQVUsR0FBRztJQUNqQixTQUFTO0lBQ1QsYUFBYTtJQUNiLFNBQVM7SUFDVCxXQUFXO0NBQ1osQ0FBQztBQUVGO0lBQUE7SUFLQSxDQUFDOztnQkFMQSxRQUFRLFNBQUM7b0JBQ1IsWUFBWSxFQUFFLFVBQVU7b0JBQ3hCLE9BQU8sRUFBRSxVQUFVO2lCQUNwQjs7SUFFRCx1QkFBQztDQUFBLEFBTEQsSUFLQztTQURZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtHb29nbGVNYXB9IGZyb20gJy4vZ29vZ2xlLW1hcC9nb29nbGUtbWFwJztcbmltcG9ydCB7TWFwSW5mb1dpbmRvd30gZnJvbSAnLi9tYXAtaW5mby13aW5kb3cvbWFwLWluZm8td2luZG93JztcbmltcG9ydCB7TWFwTWFya2VyfSBmcm9tICcuL21hcC1tYXJrZXIvbWFwLW1hcmtlcic7XG5pbXBvcnQge01hcFBvbHlsaW5lfSBmcm9tICcuL21hcC1wb2x5bGluZS9tYXAtcG9seWxpbmUnO1xuXG5jb25zdCBDT01QT05FTlRTID0gW1xuICBHb29nbGVNYXAsXG4gIE1hcEluZm9XaW5kb3csXG4gIE1hcE1hcmtlcixcbiAgTWFwUG9seWxpbmUsXG5dO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IENPTVBPTkVOVFMsXG4gIGV4cG9ydHM6IENPTVBPTkVOVFMsXG59KVxuZXhwb3J0IGNsYXNzIEdvb2dsZU1hcHNNb2R1bGUge1xufVxuIl19

@@ -8,9 +8,10 @@ /**

*/
import { __assign, __read, __values } from "tslib";
import { __assign, __read } from "tslib";
// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265
/// <reference types="googlemaps" />
import { Directive, ElementRef, EventEmitter, Input, Output, } from '@angular/core';
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
import { Directive, ElementRef, Input, Output, } from '@angular/core';
import { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';
import { map, takeUntil } from 'rxjs/operators';
import { GoogleMap } from '../google-map/google-map';
import { MapEventManager } from '../map-event-manager';
/**

@@ -24,2 +25,6 @@ * Angular component that renders a Google Maps info window via the Google Maps JavaScript API.

this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject({});
this._position = new BehaviorSubject(undefined);
this._destroy = new Subject();
/**

@@ -29,3 +34,3 @@ * See

*/
this.closeclick = new EventEmitter();
this.closeclick = this._eventManager.getLazyEmitter('closeclick');
/**

@@ -36,3 +41,3 @@ * See

*/
this.contentChanged = new EventEmitter();
this.contentChanged = this._eventManager.getLazyEmitter('content_changed');
/**

@@ -42,3 +47,3 @@ * See

*/
this.domready = new EventEmitter();
this.domready = this._eventManager.getLazyEmitter('domready');
/**

@@ -49,3 +54,3 @@ * See

*/
this.positionChanged = new EventEmitter();
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**

@@ -56,7 +61,3 @@ * See

*/
this.zindexChanged = new EventEmitter();
this._options = new BehaviorSubject({});
this._position = new BehaviorSubject(undefined);
this._listeners = [];
this._destroy = new Subject();
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}

@@ -85,3 +86,3 @@ Object.defineProperty(MapInfoWindow.prototype, "options", {

_this._infoWindow = new google.maps.InfoWindow(options);
_this._initializeEventHandlers();
_this._eventManager.setTarget(_this._infoWindow);
}

@@ -91,18 +92,5 @@ });

MapInfoWindow.prototype.ngOnDestroy = function () {
var e_1, _a;
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
try {
for (var _b = __values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this.close();

@@ -159,39 +147,2 @@ };

};
MapInfoWindow.prototype._initializeEventHandlers = function () {
var _this = this;
// Ensure that we don't leak if called multiple times.
this._clearListeners();
var eventHandlers = new Map([
['closeclick', this.closeclick],
['content_changed', this.contentChanged],
['domready', this.domready],
['position_changed', this.positionChanged],
['zindex_changed', this.zindexChanged],
]);
eventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._infoWindow.addListener(name, function () {
eventHandler.emit();
}));
}
});
};
/** Clears all currently-registered event listeners. */
MapInfoWindow.prototype._clearListeners = function () {
var e_2, _a;
try {
for (var _b = __values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
this._listeners = [];
};
MapInfoWindow.decorators = [

@@ -220,2 +171,2 @@ { type: Directive, args: [{

export { MapInfoWindow };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWluZm8td2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2dvb2dsZS1tYXBzL21hcC1pbmZvLXdpbmRvdy9tYXAtaW5mby13aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILHlFQUF5RTtBQUN6RSxvQ0FBb0M7QUFFcEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBR25EOzs7R0FHRztBQUNIO0lBMERFLHVCQUE2QixVQUFxQixFQUM5QixXQUFvQztRQUQzQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQTVDeEQ7OztXQUdHO1FBQ08sZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFaEQ7Ozs7V0FJRztRQUNPLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwRDs7O1dBR0c7UUFDTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5Qzs7OztXQUlHO1FBQ08sb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXJEOzs7O1dBSUc7UUFDTyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFbEMsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFnQyxFQUFFLENBQUMsQ0FBQztRQUNsRSxjQUFTLEdBQ3RCLElBQUksZUFBZSxDQUF5RCxTQUFTLENBQUMsQ0FBQztRQUVuRixlQUFVLEdBQW9DLEVBQUUsQ0FBQztRQUV4QyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUtXLENBQUM7SUF0RDVELHNCQUNJLGtDQUFPO2FBRFgsVUFDWSxPQUFzQztZQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQzs7O09BQUE7SUFFRCxzQkFDSSxtQ0FBUTthQURaLFVBQ2EsUUFBc0Q7WUFDakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQzs7O09BQUE7SUFnREQsZ0NBQVEsR0FBUjtRQUFBLGlCQVNDO1FBUkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQUEsT0FBTztZQUNyRSxJQUFJLEtBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLEtBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNMLEtBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkQsS0FBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7YUFDakM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQ0FBVyxHQUFYOztRQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7WUFDekIsS0FBcUIsSUFBQSxLQUFBLFNBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQSxnQkFBQSw0QkFBRTtnQkFBakMsSUFBSSxRQUFRLFdBQUE7Z0JBQ2YsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ25COzs7Ozs7Ozs7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCw2QkFBSyxHQUFMO1FBQ0UsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0NBQVUsR0FBVjtRQUNFLE9BQU8sSUFBSSxDQUFDLFdBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1DQUFXLEdBQVg7UUFDRSxPQUFPLElBQUksQ0FBQyxXQUFZLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQ0FBUyxHQUFUO1FBQ0UsT0FBTyxJQUFJLENBQUMsV0FBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCw0QkFBSSxHQUFKLFVBQUssTUFBa0I7UUFDckIsSUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsV0FBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFTyx1Q0FBZSxHQUF2QjtRQUFBLGlCQVNDO1FBUkMsT0FBTyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQyxFQUFtQjtnQkFBbkIsa0JBQW1CLEVBQWxCLGVBQU8sRUFBRSxnQkFBUTtZQUNoRixJQUFNLGVBQWUseUJBQ2hCLE9BQU8sS0FDVixRQUFRLEVBQUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQ3RDLE9BQU8sRUFBRSxLQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FDeEMsQ0FBQztZQUNGLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sZ0RBQXdCLEdBQWhDO1FBQUEsaUJBa0JDO1FBakJDLHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQTZCO1lBQ3hELENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDL0IsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3hDLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDM0IsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQzFDLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUN2QyxDQUFDLENBQUM7UUFDSCxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUMsWUFBZ0MsRUFBRSxJQUFZO1lBQ25FLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsV0FBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZELFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNMO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdURBQXVEO0lBQy9DLHVDQUFlLEdBQXZCOzs7WUFDRSxLQUFxQixJQUFBLEtBQUEsU0FBQSxJQUFJLENBQUMsVUFBVSxDQUFBLGdCQUFBLDRCQUFFO2dCQUFqQyxJQUFJLFFBQVEsV0FBQTtnQkFDZixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDbkI7Ozs7Ozs7OztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7O2dCQXJLRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsSUFBSSxFQUFFLEVBQUMsT0FBTyxFQUFFLGVBQWUsRUFBQztpQkFDakM7Ozs7Z0JBVk8sU0FBUztnQkFWZixVQUFVOzs7MEJBc0JULEtBQUs7MkJBS0wsS0FBSzs2QkFTTCxNQUFNO2lDQU9OLE1BQU07MkJBTU4sTUFBTTtrQ0FPTixNQUFNO2dDQU9OLE1BQU07O0lBd0hULG9CQUFDO0NBQUEsQUF0S0QsSUFzS0M7U0FsS1ksYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvcnVsZXNfbm9kZWpzL2lzc3Vlcy8xMjY1XG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cImdvb2dsZW1hcHNcIiAvPlxuXG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0dvb2dsZU1hcH0gZnJvbSAnLi4vZ29vZ2xlLW1hcC9nb29nbGUtbWFwJztcbmltcG9ydCB7TWFwTWFya2VyfSBmcm9tICcuLi9tYXAtbWFya2VyL21hcC1tYXJrZXInO1xuXG4vKipcbiAqIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhIEdvb2dsZSBNYXBzIGluZm8gd2luZG93IHZpYSB0aGUgR29vZ2xlIE1hcHMgSmF2YVNjcmlwdCBBUEkuXG4gKiBAc2VlIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3dcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbWFwLWluZm8td2luZG93JyxcbiAgaG9zdDogeydzdHlsZSc6ICdkaXNwbGF5OiBub25lJ30sXG59KVxuZXhwb3J0IGNsYXNzIE1hcEluZm9XaW5kb3cgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IGdvb2dsZS5tYXBzLkluZm9XaW5kb3dPcHRpb25zKSB7XG4gICAgdGhpcy5fb3B0aW9ucy5uZXh0KG9wdGlvbnMgfHwge30pO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHBvc2l0aW9uKHBvc2l0aW9uOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsfGdvb2dsZS5tYXBzLkxhdExuZykge1xuICAgIHRoaXMuX3Bvc2l0aW9uLm5leHQocG9zaXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93I0luZm9XaW5kb3cuY2xvc2VjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpIGNsb3NlY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LmNvbnRlbnRfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIGNvbnRlbnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvdyNJbmZvV2luZG93LmRvbXJlYWR5XG4gICAqL1xuICBAT3V0cHV0KCkgZG9tcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LnBvc2l0aW9uX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBwb3NpdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LnppbmRleF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgemluZGV4Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5JbmZvV2luZG93T3B0aW9ucz4oe30pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wb3NpdGlvbiA9XG4gICAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWx8Z29vZ2xlLm1hcHMuTGF0TG5nfHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9saXN0ZW5lcnM6IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyW10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9pbmZvV2luZG93PzogZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9nb29nbGVNYXA6IEdvb2dsZU1hcCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fY29tYmluZU9wdGlvbnMoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgaWYgKHRoaXMuX2luZm9XaW5kb3cpIHtcbiAgICAgICAgdGhpcy5faW5mb1dpbmRvdy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplRXZlbnRIYW5kbGVycygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgfVxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWUgZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvdyNJbmZvV2luZG93LmNsb3NlXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5faW5mb1dpbmRvdykge1xuICAgICAgdGhpcy5faW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvdyNJbmZvV2luZG93LmdldENvbnRlbnRcbiAgICovXG4gIGdldENvbnRlbnQoKTogc3RyaW5nfE5vZGUge1xuICAgIHJldHVybiB0aGlzLl9pbmZvV2luZG93IS5nZXRDb250ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3dcbiAgICogI0luZm9XaW5kb3cuZ2V0UG9zaXRpb25cbiAgICovXG4gIGdldFBvc2l0aW9uKCk6IGdvb2dsZS5tYXBzLkxhdExuZ3xudWxsIHtcbiAgICByZXR1cm4gdGhpcy5faW5mb1dpbmRvdyEuZ2V0UG9zaXRpb24oKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93I0luZm9XaW5kb3cuZ2V0WkluZGV4XG4gICAqL1xuICBnZXRaSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faW5mb1dpbmRvdyEuZ2V0WkluZGV4KCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIE1hcEluZm9XaW5kb3cgdXNpbmcgdGhlIHByb3ZpZGVkIE1hcE1hcmtlciBhcyB0aGUgYW5jaG9yLiBJZiB0aGUgYW5jaG9yIGlzIG5vdCBzZXQsXG4gICAqIHRoZW4gdGhlIHBvc2l0aW9uIHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIGlucHV0IGlzIHVzZWQgaW5zdGVhZC5cbiAgICovXG4gIG9wZW4oYW5jaG9yPzogTWFwTWFya2VyKSB7XG4gICAgY29uc3QgbWFya2VyID0gYW5jaG9yID8gYW5jaG9yLl9tYXJrZXIgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuX2dvb2dsZU1hcC5fZ29vZ2xlTWFwKSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgdGhpcy5faW5mb1dpbmRvdyEub3Blbih0aGlzLl9nb29nbGVNYXAuX2dvb2dsZU1hcCwgbWFya2VyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb21iaW5lT3B0aW9ucygpOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLkluZm9XaW5kb3dPcHRpb25zPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuX29wdGlvbnMsIHRoaXMuX3Bvc2l0aW9uXSkucGlwZShtYXAoKFtvcHRpb25zLCBwb3NpdGlvbl0pID0+IHtcbiAgICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uczogZ29vZ2xlLm1hcHMuSW5mb1dpbmRvd09wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiB8fCBvcHRpb25zLnBvc2l0aW9uLFxuICAgICAgICBjb250ZW50OiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGNvbWJpbmVkT3B0aW9ucztcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplRXZlbnRIYW5kbGVycygpIHtcbiAgICAvLyBFbnN1cmUgdGhhdCB3ZSBkb24ndCBsZWFrIGlmIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAgICB0aGlzLl9jbGVhckxpc3RlbmVycygpO1xuXG4gICAgY29uc3QgZXZlbnRIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudEVtaXR0ZXI8dm9pZD4+KFtcbiAgICAgIFsnY2xvc2VjbGljaycsIHRoaXMuY2xvc2VjbGlja10sXG4gICAgICBbJ2NvbnRlbnRfY2hhbmdlZCcsIHRoaXMuY29udGVudENoYW5nZWRdLFxuICAgICAgWydkb21yZWFkeScsIHRoaXMuZG9tcmVhZHldLFxuICAgICAgWydwb3NpdGlvbl9jaGFuZ2VkJywgdGhpcy5wb3NpdGlvbkNoYW5nZWRdLFxuICAgICAgWyd6aW5kZXhfY2hhbmdlZCcsIHRoaXMuemluZGV4Q2hhbmdlZF0sXG4gICAgXSk7XG4gICAgZXZlbnRIYW5kbGVycy5mb3JFYWNoKChldmVudEhhbmRsZXI6IEV2ZW50RW1pdHRlcjx2b2lkPiwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoZXZlbnRIYW5kbGVyLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKHRoaXMuX2luZm9XaW5kb3chLmFkZExpc3RlbmVyKG5hbWUsICgpID0+IHtcbiAgICAgICAgICBldmVudEhhbmRsZXIuZW1pdCgpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogQ2xlYXJzIGFsbCBjdXJyZW50bHktcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnMuICovXG4gIHByaXZhdGUgX2NsZWFyTGlzdGVuZXJzKCkge1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWluZm8td2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2dvb2dsZS1tYXBzL21hcC1pbmZvLXdpbmRvdy9tYXAtaW5mby13aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILHlFQUF5RTtBQUN6RSxvQ0FBb0M7QUFFcEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRDs7O0dBR0c7QUFDSDtJQTBERSx1QkFBNkIsVUFBcUIsRUFDOUIsV0FBb0M7UUFEM0IsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUF0RGhELGtCQUFhLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QixhQUFRLEdBQUcsSUFBSSxlQUFlLENBQWdDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLGNBQVMsR0FDdEIsSUFBSSxlQUFlLENBQXlELFNBQVMsQ0FBQyxDQUFDO1FBQzFFLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBYWhEOzs7V0FHRztRQUNPLGVBQVUsR0FBcUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQU8sWUFBWSxDQUFDLENBQUM7UUFFL0Y7Ozs7V0FJRztRQUVILG1CQUFjLEdBQXFCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFP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Q0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQyxFQUFtQjtnQkFBbkIsa0JBQW1CLEVBQWxCLGVBQU8sRUFBRSxnQkFBUTtZQUNoRixJQUFNLGVBQWUseUJBQ2hCLE9BQU8sS0FDVixRQUFRLEVBQUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQ3RDLE9BQU8sRUFBRSxLQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FDeEMsQ0FBQztZQUNGLE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDOztnQkF0SUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLElBQUksRUFBRSxFQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUM7aUJBQ2pDOzs7O2dCQVhPLFNBQVM7Z0JBVGYsVUFBVTs7OzBCQTZCVCxLQUFLOzJCQUtMLEtBQUs7NkJBU0wsTUFBTTtpQ0FPTixNQUFNOzJCQU9OLE1BQU07a0NBT04sTUFBTTtnQ0FRTixNQUFNOztJQWdGVCxvQkFBQztDQUFBLEFBdklELElBdUlDO1NBbklZLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLy8gV29ya2Fyb3VuZCBmb3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYXplbGJ1aWxkL3J1bGVzX25vZGVqcy9pc3N1ZXMvMTI2NVxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJnb29nbGVtYXBzXCIgLz5cblxuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7R29vZ2xlTWFwfSBmcm9tICcuLi9nb29nbGUtbWFwL2dvb2dsZS1tYXAnO1xuaW1wb3J0IHtNYXBNYXJrZXJ9IGZyb20gJy4uL21hcC1tYXJrZXIvbWFwLW1hcmtlcic7XG5pbXBvcnQge01hcEV2ZW50TWFuYWdlcn0gZnJvbSAnLi4vbWFwLWV2ZW50LW1hbmFnZXInO1xuXG4vKipcbiAqIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhIEdvb2dsZSBNYXBzIGluZm8gd2luZG93IHZpYSB0aGUgR29vZ2xlIE1hcHMgSmF2YVNjcmlwdCBBUEkuXG4gKiBAc2VlIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3dcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbWFwLWluZm8td2luZG93JyxcbiAgaG9zdDogeydzdHlsZSc6ICdkaXNwbGF5OiBub25lJ30sXG59KVxuZXhwb3J0IGNsYXNzIE1hcEluZm9XaW5kb3cgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2V2ZW50TWFuYWdlciA9IG5ldyBNYXBFdmVudE1hbmFnZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Z29vZ2xlLm1hcHMuSW5mb1dpbmRvd09wdGlvbnM+KHt9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcG9zaXRpb24gPVxuICAgICAgbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsfGdvb2dsZS5tYXBzLkxhdExuZ3x1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9pbmZvV2luZG93PzogZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdztcblxuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBnb29nbGUubWFwcy5JbmZvV2luZG93T3B0aW9ucykge1xuICAgIHRoaXMuX29wdGlvbnMubmV4dChvcHRpb25zIHx8IHt9KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwb3NpdGlvbihwb3NpdGlvbjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbHxnb29nbGUubWFwcy5MYXRMbmcpIHtcbiAgICB0aGlzLl9wb3NpdGlvbi5uZXh0KHBvc2l0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvdyNJbmZvV2luZG93LmNsb3NlY2xpY2tcbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZWNsaWNrOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdjbG9zZWNsaWNrJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LmNvbnRlbnRfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGNvbnRlbnRDaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdjb250ZW50X2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3cjSW5mb1dpbmRvdy5kb21yZWFkeVxuICAgKi9cbiAgQE91dHB1dCgpIGRvbXJlYWR5OiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdkb21yZWFkeScpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvd1xuICAgKiAjSW5mb1dpbmRvdy5wb3NpdGlvbl9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcG9zaXRpb25DaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdwb3NpdGlvbl9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93XG4gICAqICNJbmZvV2luZG93LnppbmRleF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgemluZGV4Q2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPignemluZGV4X2NoYW5nZWQnKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9nb29nbGVNYXA6IEdvb2dsZU1hcCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fY29tYmluZU9wdGlvbnMoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgaWYgKHRoaXMuX2luZm9XaW5kb3cpIHtcbiAgICAgICAgdGhpcy5faW5mb1dpbmRvdy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9ldmVudE1hbmFnZXIuc2V0VGFyZ2V0KHRoaXMuX2luZm9XaW5kb3cpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZSBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93I0luZm9XaW5kb3cuY2xvc2VcbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl9pbmZvV2luZG93KSB7XG4gICAgICB0aGlzLl9pbmZvV2luZG93LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL2luZm8td2luZG93I0luZm9XaW5kb3cuZ2V0Q29udGVudFxuICAgKi9cbiAgZ2V0Q29udGVudCgpOiBzdHJpbmd8Tm9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZm9XaW5kb3chLmdldENvbnRlbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9pbmZvLXdpbmRvd1xuICAgKiAjSW5mb1dpbmRvdy5nZXRQb3NpdGlvblxuICAgKi9cbiAgZ2V0UG9zaXRpb24oKTogZ29vZ2xlLm1hcHMuTGF0TG5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9pbmZvV2luZG93IS5nZXRQb3NpdGlvbigpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvaW5mby13aW5kb3cjSW5mb1dpbmRvdy5nZXRaSW5kZXhcbiAgICovXG4gIGdldFpJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pbmZvV2luZG93IS5nZXRaSW5kZXgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgTWFwSW5mb1dpbmRvdyB1c2luZyB0aGUgcHJvdmlkZWQgTWFwTWFya2VyIGFzIHRoZSBhbmNob3IuIElmIHRoZSBhbmNob3IgaXMgbm90IHNldCxcbiAgICogdGhlbiB0aGUgcG9zaXRpb24gcHJvcGVydHkgb2YgdGhlIG9wdGlvbnMgaW5wdXQgaXMgdXNlZCBpbnN0ZWFkLlxuICAgKi9cbiAgb3BlbihhbmNob3I/OiBNYXBNYXJrZXIpIHtcbiAgICBjb25zdCBtYXJrZXIgPSBhbmNob3IgPyBhbmNob3IuX21hcmtlciA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5fZ29vZ2xlTWFwLl9nb29nbGVNYXApIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICB0aGlzLl9pbmZvV2luZG93IS5vcGVuKHRoaXMuX2dvb2dsZU1hcC5fZ29vZ2xlTWFwLCBtYXJrZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbWJpbmVPcHRpb25zKCk6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuSW5mb1dpbmRvd09wdGlvbnM+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fb3B0aW9ucywgdGhpcy5fcG9zaXRpb25dKS5waXBlKG1hcCgoW29wdGlvbnMsIHBvc2l0aW9uXSkgPT4ge1xuICAgICAgY29uc3QgY29tYmluZWRPcHRpb25zOiBnb29nbGUubWFwcy5JbmZvV2luZG93T3B0aW9ucyA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uIHx8IG9wdGlvbnMucG9zaXRpb24sXG4gICAgICAgIGNvbnRlbnQ6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIH07XG4gICAgICByZXR1cm4gY29tYmluZWRPcHRpb25zO1xuICAgIH0pKTtcbiAgfVxufVxuIl19

@@ -8,9 +8,10 @@ /**

*/
import { __assign, __read, __values } from "tslib";
import { __assign, __read } from "tslib";
// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265
/// <reference types="googlemaps" />
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
import { ChangeDetectionStrategy, Component, Input, Output, ViewEncapsulation } from '@angular/core';
import { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';
import { map, take, takeUntil } from 'rxjs/operators';
import { GoogleMap } from '../google-map/google-map';
import { MapEventManager } from '../map-event-manager';
/**

@@ -30,2 +31,9 @@ * Default options for the Google Maps marker component. Displays a marker

this._googleMap = _googleMap;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new BehaviorSubject(undefined);
this._position = new BehaviorSubject(undefined);
this._label = new BehaviorSubject(undefined);
this._clickable = new BehaviorSubject(undefined);
this._destroy = new Subject();
/**

@@ -35,3 +43,3 @@ * See

*/
this.animationChanged = new EventEmitter();
this.animationChanged = this._eventManager.getLazyEmitter('animation_changed');
/**

@@ -41,3 +49,3 @@ * See

*/
this.mapClick = new EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -47,3 +55,3 @@ * See

*/
this.clickableChanged = new EventEmitter();
this.clickableChanged = this._eventManager.getLazyEmitter('clickable_changed');
/**

@@ -53,3 +61,3 @@ * See

*/
this.cursorChanged = new EventEmitter();
this.cursorChanged = this._eventManager.getLazyEmitter('cursor_changed');
/**

@@ -59,3 +67,3 @@ * See

*/
this.mapDblclick = new EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -65,3 +73,3 @@ * See

*/
this.mapDrag = new EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -71,3 +79,3 @@ * See

*/
this.mapDragend = new EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -77,3 +85,3 @@ * See

*/
this.draggableChanged = new EventEmitter();
this.draggableChanged = this._eventManager.getLazyEmitter('draggable_changed');
/**

@@ -83,3 +91,3 @@ * See

*/
this.mapDragstart = new EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -89,3 +97,3 @@ * See

*/
this.flatChanged = new EventEmitter();
this.flatChanged = this._eventManager.getLazyEmitter('flat_changed');
/**

@@ -95,3 +103,3 @@ * See

*/
this.iconChanged = new EventEmitter();
this.iconChanged = this._eventManager.getLazyEmitter('icon_changed');
/**

@@ -101,3 +109,3 @@ * See

*/
this.mapMousedown = new EventEmitter();
this.mapMousedown = this._eventManager.getLazyEmitter('mousedown');
/**

@@ -107,3 +115,3 @@ * See

*/
this.mapMouseout = new EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -113,3 +121,3 @@ * See

*/
this.mapMouseover = new EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -119,3 +127,3 @@ * See

*/
this.mapMouseup = new EventEmitter();
this.mapMouseup = this._eventManager.getLazyEmitter('mouseup');
/**

@@ -125,3 +133,3 @@ * See

*/
this.positionChanged = new EventEmitter();
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**

@@ -131,3 +139,3 @@ * See

*/
this.mapRightclick = new EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -137,3 +145,3 @@ * See

*/
this.shapeChanged = new EventEmitter();
this.shapeChanged = this._eventManager.getLazyEmitter('shape_changed');
/**

@@ -143,3 +151,3 @@ * See

*/
this.titleChanged = new EventEmitter();
this.titleChanged = this._eventManager.getLazyEmitter('title_changed');
/**

@@ -149,3 +157,3 @@ * See

*/
this.visibleChanged = new EventEmitter();
this.visibleChanged = this._eventManager.getLazyEmitter('visible_changed');
/**

@@ -155,10 +163,3 @@ * See

*/
this.zindexChanged = new EventEmitter();
this._options = new BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new BehaviorSubject(undefined);
this._position = new BehaviorSubject(undefined);
this._label = new BehaviorSubject(undefined);
this._clickable = new BehaviorSubject(undefined);
this._destroy = new Subject();
this._listeners = [];
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}

@@ -206,3 +207,3 @@ Object.defineProperty(MapMarker.prototype, "options", {

_this._marker.setMap(_this._googleMap._googleMap);
_this._initializeEventHandlers();
_this._eventManager.setTarget(_this._marker);
});

@@ -218,3 +219,3 @@ this._watchForOptionsChanges();

this._destroy.complete();
this._clearListeners();
this._eventManager.destroy();
if (this._marker) {

@@ -357,64 +358,2 @@ this._marker.setMap(null);

};
MapMarker.prototype._initializeEventHandlers = function () {
var _this = this;
// Ensure that we don't leak if called multiple times.
this._clearListeners();
var eventHandlers = new Map([
['animation_changed', this.animationChanged],
['clickable_changed', this.clickableChanged],
['cursor_changed', this.cursorChanged],
['draggable_changed', this.draggableChanged],
['flat_changed', this.flatChanged],
['icon_changed', this.iconChanged],
['position_changed', this.positionChanged],
['shape_changed', this.shapeChanged],
['title_changed', this.titleChanged],
['visible_changed', this.visibleChanged],
['zindex_changed', this.zindexChanged],
]);
var mouseEventHandlers = new Map([
['click', this.mapClick],
['dblclick', this.mapDblclick],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['mousedown', this.mapMousedown],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['mouseup', this.mapMouseup],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._marker.addListener(name, function () {
eventHandler.emit();
}));
}
});
mouseEventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._marker.addListener(name, function (event) {
eventHandler.emit(event);
}));
}
});
};
/** Clears all currently-registered event listeners. */
MapMarker.prototype._clearListeners = function () {
var e_1, _a;
try {
for (var _b = __values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this._listeners = [];
};
MapMarker.decorators = [

@@ -463,2 +402,2 @@ { type: Component, args: [{

export { MapMarker };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLW1hcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9tYXAtbWFya2VyL21hcC1tYXJrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILHlFQUF5RTtBQUN6RSxvQ0FBb0M7QUFFcEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFbkQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLElBQU0sc0JBQXNCLEdBQUc7SUFDcEMsUUFBUSxFQUFFLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUM7Q0FDN0MsQ0FBQztBQUVGOzs7R0FHRztBQUNIO0lBNktFLG1CQUE2QixVQUFxQjtRQUFyQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBN0lsRDs7O1dBR0c7UUFDTyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXREOzs7V0FHRztRQUNPLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUVoRTs7O1dBR0c7UUFDTyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXREOzs7V0FHRztRQUNPLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVuRDs7O1dBR0c7UUFDTyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO1FBRW5F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dFpGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0Qzs7OztnQkFuQk8sU0FBUzs7OzBCQXFCZCxLQUFLO3dCQUtMLEtBQUs7MkJBS0wsS0FBSzt3QkFLTCxLQUFLOzRCQUtMLEtBQUs7bUNBU0wsTUFBTTsyQkFNTixNQUFNO21DQU1OLE1BQU07Z0NBTU4sTUFBTTs4QkFNTixNQUFNOzBCQU1OLE1BQU07NkJBTU4sTUFBTTttQ0FNTixNQUFNOytCQU1OLE1BQU07OEJBTU4sTUFBTTs4QkFNTixNQUFNOytCQU1OLE1BQU07OEJBTU4sTUFBTTsrQkFNTixNQUFNOzZCQU1OLE1BQU07a0NBTU4sTUFBTTtnQ0FNTixNQUFNOytCQU1OLE1BQU07K0JBTU4sTUFBTTtpQ0FNTixNQUFNO2dDQU1OLE1BQU07O0lBMlBULGdCQUFDO0NBQUEsQUF2WkQsSUF1WkM7U0FqWlksU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBXb3JrYXJvdW5kIGZvcjogaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvcnVsZXNfbm9kZWpzL2lzc3Vlcy8xMjY1XG4vLy8gPHJlZmVyZW5jZSB0eXBlcz1cImdvb2dsZW1hcHNcIiAvPlxuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtHb29nbGVNYXB9IGZyb20gJy4uL2dvb2dsZS1tYXAvZ29vZ2xlLW1hcCc7XG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIGZvciB0aGUgR29vZ2xlIE1hcHMgbWFya2VyIGNvbXBvbmVudC4gRGlzcGxheXMgYSBtYXJrZXJcbiAqIGF0IHRoZSBHb29nbGVwbGV4LlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVJLRVJfT1BUSU9OUyA9IHtcbiAgcG9zaXRpb246IHtsYXQ6IDM3LjQyMTk5NSwgbG5nOiAtMTIyLjA4NDA5Mn0sXG59O1xuXG4vKipcbiAqIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgcmVuZGVycyBhIEdvb2dsZSBNYXBzIG1hcmtlciB2aWEgdGhlIEdvb2dsZSBNYXBzIEphdmFTY3JpcHQgQVBJLlxuICogQHNlZSBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlclxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXAtbWFya2VyJyxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIE1hcE1hcmtlciBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnMob3B0aW9uczogZ29vZ2xlLm1hcHMuTWFya2VyT3B0aW9ucykge1xuICAgIHRoaXMuX29wdGlvbnMubmV4dChvcHRpb25zIHx8IERFRkFVTFRfTUFSS0VSX09QVElPTlMpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aXRsZS5uZXh0KHRpdGxlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwb3NpdGlvbihwb3NpdGlvbjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbHxnb29nbGUubWFwcy5MYXRMbmcpIHtcbiAgICB0aGlzLl9wb3NpdGlvbi5uZXh0KHBvc2l0aW9uKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbChsYWJlbDogc3RyaW5nfGdvb2dsZS5tYXBzLk1hcmtlckxhYmVsKSB7XG4gICAgdGhpcy5fbGFiZWwubmV4dChsYWJlbCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgY2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsaWNrYWJsZS5uZXh0KGNsaWNrYWJsZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5hbmltYXRpb25fY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIGFuaW1hdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuY2xpY2tcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5jbGlja2FibGVfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIGNsaWNrYWJsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuY3Vyc29yX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBjdXJzb3JDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmRibGNsaWNrXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwRGJsY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ1xuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWcgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ2VuZFxuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWdlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ2dhYmxlX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBkcmFnZ2FibGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmRyYWdzdGFydFxuICAgKi9cbiAgQE91dHB1dCgpIG1hcERyYWdzdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5mbGF0X2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBmbGF0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5pY29uX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSBpY29uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5tb3VzZWRvd25cbiAgICovXG4gIEBPdXRwdXQoKSBtYXBNb3VzZWRvd24gPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIubW91c2VvdXRcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBNb3VzZW91dCA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5tb3VzZW92ZXJcbiAgICovXG4gIEBPdXRwdXQoKSBtYXBNb3VzZW92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIubW91c2V1cFxuICAgKi9cbiAgQE91dHB1dCgpIG1hcE1vdXNldXAgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIucG9zaXRpb25fY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIHBvc2l0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5yaWdodGNsaWNrXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwUmlnaHRjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5zaGFwZV9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgc2hhcGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLnRpdGxlX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSB0aXRsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIudmlzaWJsZV9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuemluZGV4X2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKSB6aW5kZXhDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnMgPVxuICAgICAgbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5NYXJrZXJPcHRpb25zPihERUZBVUxUX01BUktFUl9PUFRJT05TKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGl0bGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ3x1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Bvc2l0aW9uID1cbiAgICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8Z29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbHxnb29nbGUubWFwcy5MYXRMbmd8dW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYWJlbCA9XG4gICAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ3xnb29nbGUubWFwcy5NYXJrZXJMYWJlbHx1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsaWNrYWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbnx1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiBnb29nbGUubWFwcy5NYXBzRXZlbnRMaXN0ZW5lcltdID0gW107XG5cbiAgX21hcmtlcj86IGdvb2dsZS5tYXBzLk1hcmtlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9nb29nbGVNYXA6IEdvb2dsZU1hcCkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjb21iaW5lZE9wdGlvbnNDaGFuZ2VzID0gdGhpcy5fY29tYmluZU9wdGlvbnMoKTtcblxuICAgIGNvbWJpbmVkT3B0aW9uc0NoYW5nZXMucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLl9tYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKG9wdGlvbnMpO1xuICAgICAgdGhpcy5fbWFya2VyLnNldE1hcCh0aGlzLl9nb29nbGVNYXAuX2dvb2dsZU1hcCk7XG4gICAgICB0aGlzLl9pbml0aWFsaXplRXZlbnRIYW5kbGVycygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fd2F0Y2hGb3JPcHRpb25zQ2hhbmdlcygpO1xuICAgIHRoaXMuX3dhdGNoRm9yVGl0bGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5fd2F0Y2hGb3JQb3NpdGlvbkNoYW5nZXMoKTtcbiAgICB0aGlzLl93YXRjaEZvckxhYmVsQ2hhbmdlcygpO1xuICAgIHRoaXMuX3dhdGNoRm9yQ2xpY2thYmxlQ2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2NsZWFyTGlzdGVuZXJzKCk7XG4gICAgaWYgKHRoaXMuX21hcmtlcikge1xuICAgICAgdGhpcy5fbWFya2VyLnNldE1hcChudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRBbmltYXRpb25cbiAgICovXG4gIGdldEFuaW1hdGlvbigpOiBnb29nbGUubWFwcy5BbmltYXRpb258bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0QW5pbWF0aW9uKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldENsaWNrYWJsZVxuICAgKi9cbiAgZ2V0Q2xpY2thYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldENsaWNrYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0Q3Vyc29yXG4gICAqL1xuICBnZXRDdXJzb3IoKTogc3RyaW5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldEN1cnNvcigpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXREcmFnZ2FibGVcbiAgICovXG4gIGdldERyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9tYXJrZXIhLmdldERyYWdnYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0SWNvblxuICAgKi9cbiAgZ2V0SWNvbigpOiBzdHJpbmd8Z29vZ2xlLm1hcHMuSWNvbnxnb29nbGUubWFwcy5TeW1ib2x8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0SWNvbigpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRMYWJlbFxuICAgKi9cbiAgZ2V0TGFiZWwoKTogZ29vZ2xlLm1hcHMuTWFya2VyTGFiZWx8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0TGFiZWwoKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0T3BhY2l0eVxuICAgKi9cbiAgZ2V0T3BhY2l0eSgpOiBudW1iZXJ8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0T3BhY2l0eSgpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRQb3NpdGlvblxuICAgKi9cbiAgZ2V0UG9zaXRpb24oKTogZ29vZ2xlLm1hcHMuTGF0TG5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFBvc2l0aW9uKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldFNoYXBlXG4gICAqL1xuICBnZXRTaGFwZSgpOiBnb29nbGUubWFwcy5NYXJrZXJTaGFwZXxudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyIS5nZXRTaGFwZSgpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRUaXRsZVxuICAgKi9cbiAgZ2V0VGl0bGUoKTogc3RyaW5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFRpdGxlKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldFZpc2libGVcbiAgICovXG4gIGdldFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0VmlzaWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0WkluZGV4XG4gICAqL1xuICBnZXRaSW5kZXgoKTogbnVtYmVyfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFpJbmRleCgpIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9jb21iaW5lT3B0aW9ucygpOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcmtlck9wdGlvbnM+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fb3B0aW9ucywgdGhpcy5fdGl0bGUsIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9sYWJlbCwgdGhpcy5fY2xpY2thYmxlXSlcbiAgICAgICAgLnBpcGUobWFwKChbb3B0aW9ucywgdGl0bGUsIHBvc2l0aW9uLCBsYWJlbCwgY2xpY2thYmxlXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uczogZ29vZ2xlLm1hcHMuTWFya2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgb3B0aW9ucy50aXRsZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiB8fCBvcHRpb25zLnBvc2l0aW9uLFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsIHx8IG9wdGlvbnMubGFiZWwsXG4gICAgICAgICAgICBjbGlja2FibGU6IGNsaWNrYWJsZSAhPT0gdW5kZWZpbmVkID8gY2xpY2thYmxlIDogb3B0aW9ucy5jbGlja2FibGUsXG4gICAgICAgICAgICBtYXA6IHRoaXMuX2dvb2dsZU1hcC5fZ29vZ2xlTWFwIHx8IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gY29tYmluZWRPcHRpb25zO1xuICAgICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvck9wdGlvbnNDaGFuZ2VzKCkge1xuICAgIHRoaXMuX29wdGlvbnMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShvcHRpb25zID0+IHtcbiAgICAgIGlmICh0aGlzLl9tYXJrZXIpIHtcbiAgICAgICAgdGhpcy5fbWFya2VyLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvclRpdGxlQ2hhbmdlcygpIHtcbiAgICB0aGlzLl90aXRsZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHRpdGxlID0+IHtcbiAgICAgIGlmICh0aGlzLl9tYXJrZXIgJiYgdGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9tYXJrZXIuc2V0VGl0bGUodGl0bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JQb3NpdGlvbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5fcG9zaXRpb24ucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShwb3NpdGlvbiA9PiB7XG4gICAgICBpZiAodGhpcy5fbWFya2VyICYmIHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuX21hcmtlci5zZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvckxhYmVsQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9sYWJlbC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGxhYmVsID0+IHtcbiAgICAgIGlmICh0aGlzLl9tYXJrZXIgJiYgbGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9tYXJrZXIuc2V0TGFiZWwobGFiZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JDbGlja2FibGVDaGFuZ2VzKCkge1xuICAgIHRoaXMuX2NsaWNrYWJsZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGNsaWNrYWJsZSA9PiB7XG4gICAgICBpZiAodGhpcy5fbWFya2VyICYmIGNsaWNrYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX21hcmtlci5zZXRDbGlja2FibGUoY2xpY2thYmxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRpYWxpemVFdmVudEhhbmRsZXJzKCkge1xuICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGxlYWsgaWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzLlxuICAgIHRoaXMuX2NsZWFyTGlzdGVuZXJzKCk7XG5cbiAgICBjb25zdCBldmVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIEV2ZW50RW1pdHRlcjx2b2lkPj4oW1xuICAgICAgWydhbmltYXRpb25fY2hhbmdlZCcsIHRoaXMuYW5pbWF0aW9uQ2hhbmdlZF0sXG4gICAgICBbJ2NsaWNrYWJsZV9jaGFuZ2VkJywgdGhpcy5jbGlja2FibGVDaGFuZ2VkXSxcbiAgICAgIFsnY3Vyc29yX2NoYW5nZWQnLCB0aGlzLmN1cnNvckNoYW5nZWRdLFxuICAgICAgWydkcmFnZ2FibGVfY2hhbmdlZCcsIHRoaXMuZHJhZ2dhYmxlQ2hhbmdlZF0sXG4gICAgICBbJ2ZsYXRfY2hhbmdlZCcsIHRoaXMuZmxhdENoYW5nZWRdLFxuICAgICAgWydpY29uX2NoYW5nZWQnLCB0aGlzLmljb25DaGFuZ2VkXSxcbiAgICAgIFsncG9zaXRpb25fY2hhbmdlZCcsIHRoaXMucG9zaXRpb25DaGFuZ2VkXSxcbiAgICAgIFsnc2hhcGVfY2hhbmdlZCcsIHRoaXMuc2hhcGVDaGFuZ2VkXSxcbiAgICAgIFsndGl0bGVfY2hhbmdlZCcsIHRoaXMudGl0bGVDaGFuZ2VkXSxcbiAgICAgIFsndmlzaWJsZV9jaGFuZ2VkJywgdGhpcy52aXNpYmxlQ2hhbmdlZF0sXG4gICAgICBbJ3ppbmRleF9jaGFuZ2VkJywgdGhpcy56aW5kZXhDaGFuZ2VkXSxcbiAgICBdKTtcbiAgICBjb25zdCBtb3VzZUV2ZW50SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+PihbXG4gICAgICBbJ2NsaWNrJywgdGhpcy5tYXBDbGlja10sXG4gICAgICBbJ2RibGNsaWNrJywgdGhpcy5tYXBEYmxjbGlja10sXG4gICAgICBbJ2RyYWcnLCB0aGlzLm1hcERyYWddLFxuICAgICAgWydkcmFnZW5kJywgdGhpcy5tYXBEcmFnZW5kXSxcbiAgICAgIFsnZHJhZ3N0YXJ0JywgdGhpcy5tYXBEcmFnc3RhcnRdLFxuICAgICAgWydtb3VzZWRvd24nLCB0aGlzLm1hcE1vdXNlZG93bl0sXG4gICAgICBbJ21vdXNlb3V0JywgdGhpcy5tYXBNb3VzZW91dF0sXG4gICAgICBbJ21vdXNlb3ZlcicsIHRoaXMubWFwTW91c2VvdmVyXSxcbiAgICAgIFsnbW91c2V1cCcsIHRoaXMubWFwTW91c2V1cF0sXG4gICAgICBbJ3JpZ2h0Y2xpY2snLCB0aGlzLm1hcFJpZ2h0Y2xpY2tdLFxuICAgIF0pO1xuXG4gICAgZXZlbnRIYW5kbGVycy5mb3JFYWNoKChldmVudEhhbmRsZXI6IEV2ZW50RW1pdHRlcjx2b2lkPiwgbmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoZXZlbnRIYW5kbGVyLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKHRoaXMuX21hcmtlciEuYWRkTGlzdGVuZXIobmFtZSwgKCkgPT4ge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5lbWl0KCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb3VzZUV2ZW50SGFuZGxlcnMuZm9yRWFjaChcbiAgICAgICAgKGV2ZW50SGFuZGxlcjogRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+LCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXJrZXIhLmFkZExpc3RlbmVyKG5hbWUsIChldmVudDogZ29vZ2xlLm1hcHMuTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVyLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICB9XG5cbiAgLyoqIENsZWFycyBhbGwgY3VycmVudGx5LXJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLiAqL1xuICBwcml2YXRlIF9jbGVhckxpc3RlbmVycygpIHtcbiAgICBmb3IgKGxldCBsaXN0ZW5lciBvZiB0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLW1hcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9tYXAtbWFya2VyL21hcC1tYXJrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILHlFQUF5RTtBQUN6RSxvQ0FBb0M7QUFFcEMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLE1BQU0sRUFDTixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRXJEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxJQUFNLHNCQUFzQixHQUFHO0lBQ3BDLFFBQVEsRUFBRSxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFDO0NBQzdDLENBQUM7QUFFRjs7O0dBR0c7QUFDSDtJQXdNRSxtQkFBNkIsVUFBcUI7UUFBckIsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQWpNMUMsa0JBQWEsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FDckIsSUFBSSxlQUFlLENBQTRCLHNCQUFzQixDQUFDLENBQUM7UUFDMUQsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFtQixTQUFTLENBQUMsQ0FBQztRQUMxRCxjQUFTLEdBQ3RCLElBQUksZUFBZSxDQUF5RCxTQUFTLENBQUMsQ0FBQztRQUMxRSxXQUFNLEdBQ25CLElBQUksZUFBZSxD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QkFRTixNQUFNO21DQVFOLE1BQU07K0JBT04sTUFBTTs4QkFRTixNQUFNOzhCQU1OLE1BQU07K0JBTU4sTUFBTTs4QkFRTixNQUFNOytCQVFOLE1BQU07NkJBUU4sTUFBTTtrQ0FRTixNQUFNO2dDQU9OLE1BQU07K0JBUU4sTUFBTTsrQkFPTixNQUFNO2lDQU9OLE1BQU07Z0NBT04sTUFBTTs7SUFzTFQsZ0JBQUM7Q0FBQSxBQXpYRCxJQXlYQztTQW5YWSxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFdvcmthcm91bmQgZm9yOiBodHRwczovL2dpdGh1Yi5jb20vYmF6ZWxidWlsZC9ydWxlc19ub2RlanMvaXNzdWVzLzEyNjVcbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiZ29vZ2xlbWFwc1wiIC8+XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtHb29nbGVNYXB9IGZyb20gJy4uL2dvb2dsZS1tYXAvZ29vZ2xlLW1hcCc7XG5pbXBvcnQge01hcEV2ZW50TWFuYWdlcn0gZnJvbSAnLi4vbWFwLWV2ZW50LW1hbmFnZXInO1xuXG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIEdvb2dsZSBNYXBzIG1hcmtlciBjb21wb25lbnQuIERpc3BsYXlzIGEgbWFya2VyXG4gKiBhdCB0aGUgR29vZ2xlcGxleC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFSS0VSX09QVElPTlMgPSB7XG4gIHBvc2l0aW9uOiB7bGF0OiAzNy40MjE5OTUsIGxuZzogLTEyMi4wODQwOTJ9LFxufTtcblxuLyoqXG4gKiBBbmd1bGFyIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgYSBHb29nbGUgTWFwcyBtYXJrZXIgdmlhIHRoZSBHb29nbGUgTWFwcyBKYXZhU2NyaXB0IEFQSS5cbiAqIEBzZWUgZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXJcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWFwLW1hcmtlcicsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBNYXBNYXJrZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX2V2ZW50TWFuYWdlciA9IG5ldyBNYXBFdmVudE1hbmFnZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9ucyA9XG4gICAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PGdvb2dsZS5tYXBzLk1hcmtlck9wdGlvbnM+KERFRkFVTFRfTUFSS0VSX09QVElPTlMpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aXRsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nfHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcG9zaXRpb24gPVxuICAgICAgbmV3IEJlaGF2aW9yU3ViamVjdDxnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsfGdvb2dsZS5tYXBzLkxhdExuZ3x1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhYmVsID1cbiAgICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nfGdvb2dsZS5tYXBzLk1hcmtlckxhYmVsfHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2xpY2thYmxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFufHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnMob3B0aW9uczogZ29vZ2xlLm1hcHMuTWFya2VyT3B0aW9ucykge1xuICAgIHRoaXMuX29wdGlvbnMubmV4dChvcHRpb25zIHx8IERFRkFVTFRfTUFSS0VSX09QVElPTlMpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHRpdGxlKHRpdGxlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aXRsZS5uZXh0KHRpdGxlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBwb3NpdGlvbihwb3NpdGlvbjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbHxnb29nbGUubWFwcy5MYXRMbmcpIHtcbiAgICB0aGlzLl9wb3NpdGlvbi5uZXh0KHBvc2l0aW9uKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbChsYWJlbDogc3RyaW5nfGdvb2dsZS5tYXBzLk1hcmtlckxhYmVsKSB7XG4gICAgdGhpcy5fbGFiZWwubmV4dChsYWJlbCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgY2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsaWNrYWJsZS5uZXh0KGNsaWNrYWJsZSk7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5hbmltYXRpb25fY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGFuaW1hdGlvbkNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2FuaW1hdGlvbl9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuY2xpY2tcbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBDbGljazogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ2NsaWNrJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuY2xpY2thYmxlX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBjbGlja2FibGVDaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdjbGlja2FibGVfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmN1cnNvcl9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgY3Vyc29yQ2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPignY3Vyc29yX2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5kYmxjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcERibGNsaWNrOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+ID1cbiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PignZGJsY2xpY2snKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5kcmFnXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwRHJhZzogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ2RyYWcnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5kcmFnZW5kXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwRHJhZ2VuZDogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ2RyYWdlbmQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5kcmFnZ2FibGVfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGRyYWdnYWJsZUNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2RyYWdnYWJsZV9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZHJhZ3N0YXJ0XG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwRHJhZ3N0YXJ0OiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+ID1cbiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PignZHJhZ3N0YXJ0Jyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZmxhdF9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KCkgZmxhdENoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ2ZsYXRfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmljb25fY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIGljb25DaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdpY29uX2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5tb3VzZWRvd25cbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBNb3VzZWRvd246IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdtb3VzZWRvd24nKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5tb3VzZW91dFxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcE1vdXNlb3V0OiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+ID1cbiAgICAgIHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PignbW91c2VvdXQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5tb3VzZW92ZXJcbiAgICovXG4gIEBPdXRwdXQoKVxuICBtYXBNb3VzZW92ZXI6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdtb3VzZW92ZXInKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5tb3VzZXVwXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbWFwTW91c2V1cDogT2JzZXJ2YWJsZTxnb29nbGUubWFwcy5Nb3VzZUV2ZW50PiA9XG4gICAgICB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4oJ21vdXNldXAnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5wb3NpdGlvbl9jaGFuZ2VkXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcG9zaXRpb25DaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCdwb3NpdGlvbl9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIucmlnaHRjbGlja1xuICAgKi9cbiAgQE91dHB1dCgpXG4gIG1hcFJpZ2h0Y2xpY2s6IE9ic2VydmFibGU8Z29vZ2xlLm1hcHMuTW91c2VFdmVudD4gPVxuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQ+KCdyaWdodGNsaWNrJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuc2hhcGVfY2hhbmdlZFxuICAgKi9cbiAgQE91dHB1dCgpIHNoYXBlQ2hhbmdlZDpcbiAgT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPignc2hhcGVfY2hhbmdlZCcpO1xuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLnRpdGxlX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICB0aXRsZUNoYW5nZWQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9ldmVudE1hbmFnZXIuZ2V0TGF6eUVtaXR0ZXI8dm9pZD4oJ3RpdGxlX2NoYW5nZWQnKTtcblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci52aXNpYmxlX2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICB2aXNpYmxlQ2hhbmdlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IHRoaXMuX2V2ZW50TWFuYWdlci5nZXRMYXp5RW1pdHRlcjx2b2lkPigndmlzaWJsZV9jaGFuZ2VkJyk7XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuemluZGV4X2NoYW5nZWRcbiAgICovXG4gIEBPdXRwdXQoKVxuICB6aW5kZXhDaGFuZ2VkOiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fZXZlbnRNYW5hZ2VyLmdldExhenlFbWl0dGVyPHZvaWQ+KCd6aW5kZXhfY2hhbmdlZCcpO1xuXG4gIF9tYXJrZXI/OiBnb29nbGUubWFwcy5NYXJrZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBfZ29vZ2xlTWFwOiBHb29nbGVNYXApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY29tYmluZWRPcHRpb25zQ2hhbmdlcyA9IHRoaXMuX2NvbWJpbmVPcHRpb25zKCk7XG5cbiAgICBjb21iaW5lZE9wdGlvbnNDaGFuZ2VzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5fbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcihvcHRpb25zKTtcbiAgICAgIHRoaXMuX21hcmtlci5zZXRNYXAodGhpcy5fZ29vZ2xlTWFwLl9nb29nbGVNYXApO1xuICAgICAgdGhpcy5fZXZlbnRNYW5hZ2VyLnNldFRhcmdldCh0aGlzLl9tYXJrZXIpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fd2F0Y2hGb3JPcHRpb25zQ2hhbmdlcygpO1xuICAgIHRoaXMuX3dhdGNoRm9yVGl0bGVDaGFuZ2VzKCk7XG4gICAgdGhpcy5fd2F0Y2hGb3JQb3NpdGlvbkNoYW5nZXMoKTtcbiAgICB0aGlzLl93YXRjaEZvckxhYmVsQ2hhbmdlcygpO1xuICAgIHRoaXMuX3dhdGNoRm9yQ2xpY2thYmxlQ2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2V2ZW50TWFuYWdlci5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMuX21hcmtlcikge1xuICAgICAgdGhpcy5fbWFya2VyLnNldE1hcChudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRBbmltYXRpb25cbiAgICovXG4gIGdldEFuaW1hdGlvbigpOiBnb29nbGUubWFwcy5BbmltYXRpb258bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0QW5pbWF0aW9uKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldENsaWNrYWJsZVxuICAgKi9cbiAgZ2V0Q2xpY2thYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldENsaWNrYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0Q3Vyc29yXG4gICAqL1xuICBnZXRDdXJzb3IoKTogc3RyaW5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldEN1cnNvcigpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXREcmFnZ2FibGVcbiAgICovXG4gIGdldERyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9tYXJrZXIhLmdldERyYWdnYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0SWNvblxuICAgKi9cbiAgZ2V0SWNvbigpOiBzdHJpbmd8Z29vZ2xlLm1hcHMuSWNvbnxnb29nbGUubWFwcy5TeW1ib2x8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0SWNvbigpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRMYWJlbFxuICAgKi9cbiAgZ2V0TGFiZWwoKTogZ29vZ2xlLm1hcHMuTWFya2VyTGFiZWx8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0TGFiZWwoKSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0T3BhY2l0eVxuICAgKi9cbiAgZ2V0T3BhY2l0eSgpOiBudW1iZXJ8bnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0T3BhY2l0eSgpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRQb3NpdGlvblxuICAgKi9cbiAgZ2V0UG9zaXRpb24oKTogZ29vZ2xlLm1hcHMuTGF0TG5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFBvc2l0aW9uKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldFNoYXBlXG4gICAqL1xuICBnZXRTaGFwZSgpOiBnb29nbGUubWFwcy5NYXJrZXJTaGFwZXxudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyIS5nZXRTaGFwZSgpIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2VlXG4gICAqIGRldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9yZWZlcmVuY2UvbWFya2VyI01hcmtlci5nZXRUaXRsZVxuICAgKi9cbiAgZ2V0VGl0bGUoKTogc3RyaW5nfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFRpdGxlKCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWVcbiAgICogZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L3JlZmVyZW5jZS9tYXJrZXIjTWFya2VyLmdldFZpc2libGVcbiAgICovXG4gIGdldFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlciEuZ2V0VmlzaWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlZVxuICAgKiBkZXZlbG9wZXJzLmdvb2dsZS5jb20vbWFwcy9kb2N1bWVudGF0aW9uL2phdmFzY3JpcHQvcmVmZXJlbmNlL21hcmtlciNNYXJrZXIuZ2V0WkluZGV4XG4gICAqL1xuICBnZXRaSW5kZXgoKTogbnVtYmVyfG51bGwge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXIhLmdldFpJbmRleCgpIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9jb21iaW5lT3B0aW9ucygpOiBPYnNlcnZhYmxlPGdvb2dsZS5tYXBzLk1hcmtlck9wdGlvbnM+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fb3B0aW9ucywgdGhpcy5fdGl0bGUsIHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9sYWJlbCwgdGhpcy5fY2xpY2thYmxlXSlcbiAgICAgICAgLnBpcGUobWFwKChbb3B0aW9ucywgdGl0bGUsIHBvc2l0aW9uLCBsYWJlbCwgY2xpY2thYmxlXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkT3B0aW9uczogZ29vZ2xlLm1hcHMuTWFya2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUgfHwgb3B0aW9ucy50aXRsZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiB8fCBvcHRpb25zLnBvc2l0aW9uLFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsIHx8IG9wdGlvbnMubGFiZWwsXG4gICAgICAgICAgICBjbGlja2FibGU6IGNsaWNrYWJsZSAhPT0gdW5kZWZpbmVkID8gY2xpY2thYmxlIDogb3B0aW9ucy5jbGlja2FibGUsXG4gICAgICAgICAgICBtYXA6IHRoaXMuX2dvb2dsZU1hcC5fZ29vZ2xlTWFwIHx8IG51bGwsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gY29tYmluZWRPcHRpb25zO1xuICAgICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvck9wdGlvbnNDaGFuZ2VzKCkge1xuICAgIHRoaXMuX29wdGlvbnMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShvcHRpb25zID0+IHtcbiAgICAgIGlmICh0aGlzLl9tYXJrZXIpIHtcbiAgICAgICAgdGhpcy5fbWFya2VyLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvclRpdGxlQ2hhbmdlcygpIHtcbiAgICB0aGlzLl90aXRsZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKHRpdGxlID0+IHtcbiAgICAgIGlmICh0aGlzLl9tYXJrZXIgJiYgdGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9tYXJrZXIuc2V0VGl0bGUodGl0bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JQb3NpdGlvbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5fcG9zaXRpb24ucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShwb3NpdGlvbiA9PiB7XG4gICAgICBpZiAodGhpcy5fbWFya2VyICYmIHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuX21hcmtlci5zZXRQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF93YXRjaEZvckxhYmVsQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9sYWJlbC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGxhYmVsID0+IHtcbiAgICAgIGlmICh0aGlzLl9tYXJrZXIgJiYgbGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9tYXJrZXIuc2V0TGFiZWwobGFiZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2F0Y2hGb3JDbGlja2FibGVDaGFuZ2VzKCkge1xuICAgIHRoaXMuX2NsaWNrYWJsZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGNsaWNrYWJsZSA9PiB7XG4gICAgICBpZiAodGhpcy5fbWFya2VyICYmIGNsaWNrYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX21hcmtlci5zZXRDbGlja2FibGUoY2xpY2thYmxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19

@@ -9,5 +9,6 @@ /**

export { GoogleMap } from './google-map/google-map';
export { MapMarker } from './map-marker/map-marker';
export { GoogleMapsModule } from './google-maps-module';
export { MapInfoWindow } from './map-info-window/map-info-window';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7R29vZ2xlTWFwfSBmcm9tICcuL2dvb2dsZS1tYXAvZ29vZ2xlLW1hcCc7XG5leHBvcnQge01hcE1hcmtlcn0gZnJvbSAnLi9tYXAtbWFya2VyL21hcC1tYXJrZXInO1xuZXhwb3J0IHtHb29nbGVNYXBzTW9kdWxlfSBmcm9tICcuL2dvb2dsZS1tYXBzLW1vZHVsZSc7XG5leHBvcnQge01hcEluZm9XaW5kb3d9IGZyb20gJy4vbWFwLWluZm8td2luZG93L21hcC1pbmZvLXdpbmRvdyc7XG4iXX0=
export { MapMarker } from './map-marker/map-marker';
export { MapPolyline } from './map-polyline/map-polyline';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9nb29nbGUtbWFwcy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge0dvb2dsZU1hcH0gZnJvbSAnLi9nb29nbGUtbWFwL2dvb2dsZS1tYXAnO1xuZXhwb3J0IHtHb29nbGVNYXBzTW9kdWxlfSBmcm9tICcuL2dvb2dsZS1tYXBzLW1vZHVsZSc7XG5leHBvcnQge01hcEluZm9XaW5kb3d9IGZyb20gJy4vbWFwLWluZm8td2luZG93L21hcC1pbmZvLXdpbmRvdyc7XG5leHBvcnQge01hcE1hcmtlcn0gZnJvbSAnLi9tYXAtbWFya2VyL21hcC1tYXJrZXInO1xuZXhwb3J0IHtNYXBQb2x5bGluZX0gZnJvbSAnLi9tYXAtcG9seWxpbmUvbWFwLXBvbHlsaW5lJztcbiJdfQ==

@@ -1,4 +0,4 @@

import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, Optional, Inject, PLATFORM_ID, Input, Output, Directive, NgModule } from '@angular/core';
import { Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, Optional, Inject, PLATFORM_ID, Input, Output, Directive, NgModule } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { BehaviorSubject, Subject, combineLatest } from 'rxjs';
import { Observable, BehaviorSubject, Subject, combineLatest } from 'rxjs';
import { map, take, shareReplay, takeUntil } from 'rxjs/operators';

@@ -8,5 +8,117 @@

* @fileoverview added by tsickle
* Generated from: src/google-maps/map-event-manager.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* Manages event on a Google Maps object, ensuring that events are added only when necessary.
*/
class MapEventManager {
constructor() {
/**
* Pending listeners that were added before the target was set.
*/
this._pending = [];
this._listeners = [];
}
/**
* Clears all currently-registered event listeners.
* @private
* @return {?}
*/
_clearListeners() {
for (let listener of this._listeners) {
listener.remove();
}
this._listeners = [];
}
/**
* Gets an observable that adds an event listener to the map when a consumer subscribes to it.
* @template T
* @param {?} name
* @return {?}
*/
getLazyEmitter(name) {
/** @type {?} */
const observable = new Observable((/**
* @param {?} observer
* @return {?}
*/
observer => {
// If the target hasn't been initialized yet, cache the observer so it can be added later.
if (!this._target) {
this._pending.push({ observable, observer });
return undefined;
}
/** @type {?} */
const listener = this._target.addListener(name, (/**
* @param {?} event
* @return {?}
*/
(event) => observer.next(event)));
this._listeners.push(listener);
return (/**
* @return {?}
*/
() => listener.remove());
}));
return observable;
}
/**
* Sets the current target that the manager should bind events to.
* @param {?} target
* @return {?}
*/
setTarget(target) {
if (target === this._target) {
return;
}
// Clear the listeners from the pre-existing target.
if (this._target) {
this._clearListeners();
this._pending = [];
}
this._target = target;
// Add the listeners that were bound before the map was initialized.
this._pending.forEach((/**
* @param {?} subscriber
* @return {?}
*/
subscriber => subscriber.observable.subscribe(subscriber.observer)));
this._pending = [];
}
/**
* Destroys the manager and clears the event listeners.
* @return {?}
*/
destroy() {
this._clearListeners();
this._pending = [];
this._target = undefined;
}
}
if (false) {
/**
* Pending listeners that were added before the target was set.
* @type {?}
* @private
*/
MapEventManager.prototype._pending;
/**
* @type {?}
* @private
*/
MapEventManager.prototype._listeners;
/**
* @type {?}
* @private
*/
MapEventManager.prototype._target;
}
/**
* @fileoverview added by tsickle
* Generated from: src/google-maps/google-map/google-map.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @record

@@ -64,2 +176,7 @@ */

this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject(DEFAULT_OPTIONS);
this._center = new BehaviorSubject(undefined);
this._zoom = new BehaviorSubject(undefined);
this._destroy = new Subject();
this.height = DEFAULT_HEIGHT;

@@ -71,3 +188,3 @@ this.width = DEFAULT_WIDTH;

*/
this.boundsChanged = new EventEmitter();
this.boundsChanged = this._eventManager.getLazyEmitter('bounds_changed');
/**

@@ -77,3 +194,3 @@ * See

*/
this.centerChanged = new EventEmitter();
this.centerChanged = this._eventManager.getLazyEmitter('center_changed');
/**

@@ -83,3 +200,3 @@ * See

*/
this.mapClick = new EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -89,3 +206,3 @@ * See

*/
this.mapDblclick = new EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -95,3 +212,3 @@ * See

*/
this.mapDrag = new EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -101,3 +218,3 @@ * See

*/
this.mapDragend = new EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -107,3 +224,3 @@ * See

*/
this.mapDragstart = new EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -113,3 +230,3 @@ * See

*/
this.headingChanged = new EventEmitter();
this.headingChanged = this._eventManager.getLazyEmitter('heading_changed');
/**

@@ -119,3 +236,3 @@ * See

*/
this.idle = new EventEmitter();
this.idle = this._eventManager.getLazyEmitter('idle');
/**

@@ -125,3 +242,3 @@ * See

*/
this.maptypeidChanged = new EventEmitter();
this.maptypeidChanged = this._eventManager.getLazyEmitter('maptypeid_changed');
/**

@@ -131,3 +248,3 @@ * See

*/
this.mapMousemove = new EventEmitter();
this.mapMousemove = this._eventManager.getLazyEmitter('mousemove');
/**

@@ -137,3 +254,3 @@ * See

*/
this.mapMouseout = new EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -143,3 +260,3 @@ * See

*/
this.mapMouseover = new EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -149,3 +266,3 @@ * See

*/
this.projectionChanged = new EventEmitter();
this.projectionChanged = this._eventManager.getLazyEmitter('projection_changed');
/**

@@ -155,3 +272,3 @@ * See

*/
this.mapRightclick = new EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -161,3 +278,3 @@ * See

*/
this.tilesloaded = new EventEmitter();
this.tilesloaded = this._eventManager.getLazyEmitter('tilesloaded');
/**

@@ -167,3 +284,3 @@ * See

*/
this.tiltChanged = new EventEmitter();
this.tiltChanged = this._eventManager.getLazyEmitter('tilt_changed');
/**

@@ -173,8 +290,3 @@ * See

*/
this.zoomChanged = new EventEmitter();
this._listeners = [];
this._options = new BehaviorSubject(DEFAULT_OPTIONS);
this._center = new BehaviorSubject(undefined);
this._zoom = new BehaviorSubject(undefined);
this._destroy = new Subject();
this.zoomChanged = this._eventManager.getLazyEmitter('zoomChanged');
// @breaking-change 10.0.0 Remove null check for `platformId`.

@@ -229,5 +341,3 @@ this._isBrowser =

this._setSize();
/** @type {?} */
const combinedOptionsChanges = this._combineOptions();
this._googleMapChanges = this._initializeMap(combinedOptionsChanges);
this._googleMapChanges = this._initializeMap(this._combineOptions());
this._googleMapChanges.subscribe((/**

@@ -239,3 +349,3 @@ * @param {?} googleMap

this._googleMap = (/** @type {?} */ (googleMap));
this._initializeEventHandlers();
this._eventManager.setTarget(this._googleMap);
}));

@@ -251,5 +361,5 @@ this._watchForOptionsChanges();

ngOnDestroy() {
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
this._clearListeners();
}

@@ -264,2 +374,3 @@ /**

fitBounds(bounds, padding) {
this._assertInitialized();
this._googleMap.fitBounds(bounds, padding);

@@ -275,2 +386,3 @@ }

panBy(x, y) {
this._assertInitialized();
this._googleMap.panBy(x, y);

@@ -285,2 +397,3 @@ }

panTo(latLng) {
this._assertInitialized();
this._googleMap.panTo(latLng);

@@ -296,2 +409,3 @@ }

panToBounds(latLngBounds, padding) {
this._assertInitialized();
this._googleMap.panToBounds(latLngBounds, padding);

@@ -305,2 +419,3 @@ }

getBounds() {
this._assertInitialized();
return this._googleMap.getBounds() || null;

@@ -314,2 +429,3 @@ }

getCenter() {
this._assertInitialized();
return this._googleMap.getCenter();

@@ -323,2 +439,3 @@ }

getClickableIcons() {
this._assertInitialized();
return this._googleMap.getClickableIcons();

@@ -332,2 +449,3 @@ }

getHeading() {
this._assertInitialized();
return this._googleMap.getHeading();

@@ -341,2 +459,3 @@ }

getMapTypeId() {
this._assertInitialized();
return this._googleMap.getMapTypeId();

@@ -350,2 +469,3 @@ }

getProjection() {
this._assertInitialized();
return this._googleMap.getProjection();

@@ -359,2 +479,3 @@ }

getStreetView() {
this._assertInitialized();
return this._googleMap.getStreetView();

@@ -368,2 +489,3 @@ }

getTilt() {
this._assertInitialized();
return this._googleMap.getTilt();

@@ -377,2 +499,3 @@ }

getZoom() {
this._assertInitialized();
return this._googleMap.getZoom();

@@ -386,2 +509,3 @@ }

get controls() {
this._assertInitialized();
return this._googleMap.controls;

@@ -395,2 +519,3 @@ }

get data() {
this._assertInitialized();
return this._googleMap.data;

@@ -404,2 +529,3 @@ }

get mapTypes() {
this._assertInitialized();
return this._googleMap.mapTypes;

@@ -413,2 +539,3 @@ }

get overlayMapTypes() {
this._assertInitialized();
return this._googleMap.overlayMapTypes;

@@ -453,5 +580,3 @@ }

*/
options => {
return new google.maps.Map(this._mapEl, options);
})), shareReplay(1));
options => new google.maps.Map(this._mapEl, options))), shareReplay(1));
}

@@ -508,83 +633,12 @@ /**

/**
* Asserts that the map has been initialized.
* @private
* @return {?}
*/
_initializeEventHandlers() {
// Ensure that we don't leak if called multiple times.
this._clearListeners();
/** @type {?} */
const eventHandlers = new Map([
['bounds_changed', this.boundsChanged],
['center_changed', this.centerChanged],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['heading_changed', this.headingChanged],
['idle', this.idle],
['maptypeid_changed', this.maptypeidChanged],
['projection_changed', this.projectionChanged],
['tilesloaded', this.tilesloaded],
['tilt_changed', this.tiltChanged],
['zoomChanged', this.zoomChanged],
]);
/** @type {?} */
const mouseEventHandlers = new Map([
['dblclick', this.mapDblclick],
['mousemove', this.mapMousemove],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push(this._googleMap.addListener(name, (/**
* @return {?}
*/
() => {
eventHandler.emit();
})));
}
}));
mouseEventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push(this._googleMap.addListener(name, (/**
* @param {?} event
* @return {?}
*/
(event) => {
eventHandler.emit(event);
})));
}
}));
if (this.mapClick.observers.length > 0) {
this._listeners.push(this._googleMap.addListener('click', (/**
* @param {?} event
* @return {?}
*/
(event) => {
this.mapClick.emit(event);
})));
_assertInitialized() {
if (!this._googleMap) {
throw Error('Cannot access Google Map information before the API has been initialized. ' +
'Please wait for the API to load before trying to interact with it.');
}
}
/**
* Clears all currently-registered event listeners.
* @private
* @return {?}
*/
_clearListeners() {
for (let listener of this._listeners) {
listener.remove();
}
this._listeners = [];
}
}

@@ -630,3 +684,46 @@ GoogleMap.decorators = [

if (false) {
/**
* @type {?}
* @private
*/
GoogleMap.prototype._eventManager;
/**
* Whether we're currently rendering inside a browser.
* @type {?}
* @private
*/
GoogleMap.prototype._isBrowser;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._googleMapChanges;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._options;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._center;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._zoom;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._destroy;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._mapEl;
/** @type {?} */
GoogleMap.prototype._googleMap;
/** @type {?} */
GoogleMap.prototype.height;

@@ -747,11 +844,181 @@ /** @type {?} */

*/
GoogleMap.prototype._mapEl;
/** @type {?} */
GoogleMap.prototype._googleMap;
GoogleMap.prototype._elementRef;
}
/**
* @fileoverview added by tsickle
* Generated from: src/google-maps/map-info-window/map-info-window.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* Angular component that renders a Google Maps info window via the Google Maps JavaScript API.
* @see developers.google.com/maps/documentation/javascript/reference/info-window
*/
class MapInfoWindow {
/**
* Whether we're currently rendering inside a browser.
* @type {?}
* @param {?} _googleMap
* @param {?} _elementRef
*/
constructor(_googleMap, _elementRef) {
this._googleMap = _googleMap;
this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject({});
this._position = new BehaviorSubject(undefined);
this._destroy = new Subject();
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick
*/
this.closeclick = this._eventManager.getLazyEmitter('closeclick');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.content_changed
*/
this.contentChanged = this._eventManager.getLazyEmitter('content_changed');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.domready
*/
this.domready = this._eventManager.getLazyEmitter('domready');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.position_changed
*/
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.zindex_changed
*/
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}
/**
* @param {?} options
* @return {?}
*/
set options(options) {
this._options.next(options || {});
}
/**
* @param {?} position
* @return {?}
*/
set position(position) {
this._position.next(position);
}
/**
* @return {?}
*/
ngOnInit() {
this._combineOptions().pipe(takeUntil(this._destroy)).subscribe((/**
* @param {?} options
* @return {?}
*/
options => {
if (this._infoWindow) {
this._infoWindow.setOptions(options);
}
else {
this._infoWindow = new google.maps.InfoWindow(options);
this._eventManager.setTarget(this._infoWindow);
}
}));
}
/**
* @return {?}
*/
ngOnDestroy() {
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
this.close();
}
/**
* See developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.close
* @return {?}
*/
close() {
if (this._infoWindow) {
this._infoWindow.close();
}
}
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getContent
* @return {?}
*/
getContent() {
return (/** @type {?} */ (this._infoWindow)).getContent();
}
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.getPosition
* @return {?}
*/
getPosition() {
return (/** @type {?} */ (this._infoWindow)).getPosition() || null;
}
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getZIndex
* @return {?}
*/
getZIndex() {
return (/** @type {?} */ (this._infoWindow)).getZIndex();
}
/**
* Opens the MapInfoWindow using the provided MapMarker as the anchor. If the anchor is not set,
* then the position property of the options input is used instead.
* @param {?=} anchor
* @return {?}
*/
open(anchor) {
/** @type {?} */
const marker = anchor ? anchor._marker : undefined;
if (this._googleMap._googleMap) {
this._elementRef.nativeElement.style.display = '';
(/** @type {?} */ (this._infoWindow)).open(this._googleMap._googleMap, marker);
}
}
/**
* @private
* @return {?}
*/
GoogleMap.prototype._isBrowser;
_combineOptions() {
return combineLatest([this._options, this._position]).pipe(map((/**
* @param {?} __0
* @return {?}
*/
([options, position]) => {
/** @type {?} */
const combinedOptions = Object.assign(Object.assign({}, options), { position: position || options.position, content: this._elementRef.nativeElement });
return combinedOptions;
})));
}
}
MapInfoWindow.decorators = [
{ type: Directive, args: [{
selector: 'map-info-window',
host: { 'style': 'display: none' },
},] }
];
/** @nocollapse */
MapInfoWindow.ctorParameters = () => [
{ type: GoogleMap },
{ type: ElementRef }
];
MapInfoWindow.propDecorators = {
options: [{ type: Input }],
position: [{ type: Input }],
closeclick: [{ type: Output }],
contentChanged: [{ type: Output }],
domready: [{ type: Output }],
positionChanged: [{ type: Output }],
zindexChanged: [{ type: Output }]
};
if (false) {
/**

@@ -761,3 +1028,3 @@ * @type {?}

*/
GoogleMap.prototype._googleMapChanges;
MapInfoWindow.prototype._eventManager;
/**

@@ -767,3 +1034,3 @@ * @type {?}

*/
GoogleMap.prototype._listeners;
MapInfoWindow.prototype._options;
/**

@@ -773,3 +1040,3 @@ * @type {?}

*/
GoogleMap.prototype._options;
MapInfoWindow.prototype._position;
/**

@@ -779,3 +1046,3 @@ * @type {?}

*/
GoogleMap.prototype._center;
MapInfoWindow.prototype._destroy;
/**

@@ -785,8 +1052,41 @@ * @type {?}

*/
GoogleMap.prototype._zoom;
MapInfoWindow.prototype._infoWindow;
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick
* @type {?}
*/
MapInfoWindow.prototype.closeclick;
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.content_changed
* @type {?}
*/
MapInfoWindow.prototype.contentChanged;
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.domready
* @type {?}
*/
MapInfoWindow.prototype.domready;
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.position_changed
* @type {?}
*/
MapInfoWindow.prototype.positionChanged;
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.zindex_changed
* @type {?}
*/
MapInfoWindow.prototype.zindexChanged;
/**
* @type {?}
* @private
*/
GoogleMap.prototype._destroy;
MapInfoWindow.prototype._googleMap;
/**

@@ -796,3 +1096,3 @@ * @type {?}

*/
GoogleMap.prototype._elementRef;
MapInfoWindow.prototype._elementRef;
}

@@ -802,2 +1102,3 @@

* @fileoverview added by tsickle
* Generated from: src/google-maps/map-marker/map-marker.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc

@@ -823,2 +1124,9 @@ */

this._googleMap = _googleMap;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new BehaviorSubject(undefined);
this._position = new BehaviorSubject(undefined);
this._label = new BehaviorSubject(undefined);
this._clickable = new BehaviorSubject(undefined);
this._destroy = new Subject();
/**

@@ -828,3 +1136,3 @@ * See

*/
this.animationChanged = new EventEmitter();
this.animationChanged = this._eventManager.getLazyEmitter('animation_changed');
/**

@@ -834,3 +1142,3 @@ * See

*/
this.mapClick = new EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -840,3 +1148,3 @@ * See

*/
this.clickableChanged = new EventEmitter();
this.clickableChanged = this._eventManager.getLazyEmitter('clickable_changed');
/**

@@ -846,3 +1154,3 @@ * See

*/
this.cursorChanged = new EventEmitter();
this.cursorChanged = this._eventManager.getLazyEmitter('cursor_changed');
/**

@@ -852,3 +1160,3 @@ * See

*/
this.mapDblclick = new EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -858,3 +1166,3 @@ * See

*/
this.mapDrag = new EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -864,3 +1172,3 @@ * See

*/
this.mapDragend = new EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -870,3 +1178,3 @@ * See

*/
this.draggableChanged = new EventEmitter();
this.draggableChanged = this._eventManager.getLazyEmitter('draggable_changed');
/**

@@ -876,3 +1184,3 @@ * See

*/
this.mapDragstart = new EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -882,3 +1190,3 @@ * See

*/
this.flatChanged = new EventEmitter();
this.flatChanged = this._eventManager.getLazyEmitter('flat_changed');
/**

@@ -888,3 +1196,3 @@ * See

*/
this.iconChanged = new EventEmitter();
this.iconChanged = this._eventManager.getLazyEmitter('icon_changed');
/**

@@ -894,3 +1202,3 @@ * See

*/
this.mapMousedown = new EventEmitter();
this.mapMousedown = this._eventManager.getLazyEmitter('mousedown');
/**

@@ -900,3 +1208,3 @@ * See

*/
this.mapMouseout = new EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -906,3 +1214,3 @@ * See

*/
this.mapMouseover = new EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -912,3 +1220,3 @@ * See

*/
this.mapMouseup = new EventEmitter();
this.mapMouseup = this._eventManager.getLazyEmitter('mouseup');
/**

@@ -918,3 +1226,3 @@ * See

*/
this.positionChanged = new EventEmitter();
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**

@@ -924,3 +1232,3 @@ * See

*/
this.mapRightclick = new EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -930,3 +1238,3 @@ * See

*/
this.shapeChanged = new EventEmitter();
this.shapeChanged = this._eventManager.getLazyEmitter('shape_changed');
/**

@@ -936,3 +1244,3 @@ * See

*/
this.titleChanged = new EventEmitter();
this.titleChanged = this._eventManager.getLazyEmitter('title_changed');
/**

@@ -942,3 +1250,3 @@ * See

*/
this.visibleChanged = new EventEmitter();
this.visibleChanged = this._eventManager.getLazyEmitter('visible_changed');
/**

@@ -948,10 +1256,3 @@ * See

*/
this.zindexChanged = new EventEmitter();
this._options = new BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new BehaviorSubject(undefined);
this._position = new BehaviorSubject(undefined);
this._label = new BehaviorSubject(undefined);
this._clickable = new BehaviorSubject(undefined);
this._destroy = new Subject();
this._listeners = [];
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}

@@ -1006,3 +1307,3 @@ /**

this._marker.setMap(this._googleMap._googleMap);
this._initializeEventHandlers();
this._eventManager.setTarget(this._marker);
}));

@@ -1021,3 +1322,3 @@ this._watchForOptionsChanges();

this._destroy.complete();
this._clearListeners();
this._eventManager.destroy();
if (this._marker) {

@@ -1214,79 +1515,2 @@ this._marker.setMap(null);

}
/**
* @private
* @return {?}
*/
_initializeEventHandlers() {
// Ensure that we don't leak if called multiple times.
this._clearListeners();
/** @type {?} */
const eventHandlers = new Map([
['animation_changed', this.animationChanged],
['clickable_changed', this.clickableChanged],
['cursor_changed', this.cursorChanged],
['draggable_changed', this.draggableChanged],
['flat_changed', this.flatChanged],
['icon_changed', this.iconChanged],
['position_changed', this.positionChanged],
['shape_changed', this.shapeChanged],
['title_changed', this.titleChanged],
['visible_changed', this.visibleChanged],
['zindex_changed', this.zindexChanged],
]);
/** @type {?} */
const mouseEventHandlers = new Map([
['click', this.mapClick],
['dblclick', this.mapDblclick],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['mousedown', this.mapMousedown],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['mouseup', this.mapMouseup],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push((/** @type {?} */ (this._marker)).addListener(name, (/**
* @return {?}
*/
() => {
eventHandler.emit();
})));
}
}));
mouseEventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push((/** @type {?} */ (this._marker)).addListener(name, (/**
* @param {?} event
* @return {?}
*/
(event) => {
eventHandler.emit(event);
})));
}
}));
}
/**
* Clears all currently-registered event listeners.
* @private
* @return {?}
*/
_clearListeners() {
for (let listener of this._listeners) {
listener.remove();
}
this._listeners = [];
}
}

@@ -1335,2 +1559,37 @@ MapMarker.decorators = [

/**
* @type {?}
* @private
*/
MapMarker.prototype._eventManager;
/**
* @type {?}
* @private
*/
MapMarker.prototype._options;
/**
* @type {?}
* @private
*/
MapMarker.prototype._title;
/**
* @type {?}
* @private
*/
MapMarker.prototype._position;
/**
* @type {?}
* @private
*/
MapMarker.prototype._label;
/**
* @type {?}
* @private
*/
MapMarker.prototype._clickable;
/**
* @type {?}
* @private
*/
MapMarker.prototype._destroy;
/**
* See

@@ -1461,37 +1720,2 @@ * developers.google.com/maps/documentation/javascript/reference/marker#Marker.animation_changed

MapMarker.prototype.zindexChanged;
/**
* @type {?}
* @private
*/
MapMarker.prototype._options;
/**
* @type {?}
* @private
*/
MapMarker.prototype._title;
/**
* @type {?}
* @private
*/
MapMarker.prototype._position;
/**
* @type {?}
* @private
*/
MapMarker.prototype._label;
/**
* @type {?}
* @private
*/
MapMarker.prototype._clickable;
/**
* @type {?}
* @private
*/
MapMarker.prototype._destroy;
/**
* @type {?}
* @private
*/
MapMarker.prototype._listeners;
/** @type {?} */

@@ -1508,49 +1732,66 @@ MapMarker.prototype._marker;

* @fileoverview added by tsickle
* Generated from: src/google-maps/map-polyline/map-polyline.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* Angular component that renders a Google Maps info window via the Google Maps JavaScript API.
* @see developers.google.com/maps/documentation/javascript/reference/info-window
* Angular component that renders a Google Maps Polyline via the Google Maps JavaScript API.
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline
*/
class MapInfoWindow {
class MapPolyline {
/**
* @param {?} _googleMap
* @param {?} _elementRef
* @param {?} _map
*/
constructor(_googleMap, _elementRef) {
this._googleMap = _googleMap;
this._elementRef = _elementRef;
constructor(_map) {
this._map = _map;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject({});
this._path = new BehaviorSubject(undefined);
this._destroyed = new Subject();
this._listeners = [];
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.click
*/
this.closeclick = new EventEmitter();
this.polylineClick = this._eventManager.getLazyEmitter('click');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.content_changed
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dblclick
*/
this.contentChanged = new EventEmitter();
this.polylineDblclick = this._eventManager.getLazyEmitter('dblclick');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.domready
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.drag
*/
this.domready = new EventEmitter();
this.polylineDrag = this._eventManager.getLazyEmitter('drag');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.position_changed
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragend
*/
this.positionChanged = new EventEmitter();
this.polylineDragend = this._eventManager.getLazyEmitter('dragend');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.zindex_changed
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragstart
*/
this.zindexChanged = new EventEmitter();
this._options = new BehaviorSubject({});
this._position = new BehaviorSubject(undefined);
this._listeners = [];
this._destroy = new Subject();
this.polylineDragstart = this._eventManager.getLazyEmitter('dragstart');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousedown
*/
this.polylineMousedown = this._eventManager.getLazyEmitter('mousedown');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousemove
*/
this.polylineMousemove = this._eventManager.getLazyEmitter('mousemove');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseout
*/
this.polylineMouseout = this._eventManager.getLazyEmitter('mouseout');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseover
*/
this.polylineMouseover = this._eventManager.getLazyEmitter('mouseover');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseup
*/
this.polylineMouseup = this._eventManager.getLazyEmitter('mouseup');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.rightclick
*/
this.polylineRightclick = this._eventManager.getLazyEmitter('rightclick');
}
// initialized in ngOnInit
/**

@@ -1564,7 +1805,7 @@ * @param {?} options

/**
* @param {?} position
* @param {?} path
* @return {?}
*/
set position(position) {
this._position.next(position);
set path(path) {
this._path.next(path);
}

@@ -1575,3 +1816,5 @@ /**

ngOnInit() {
this._combineOptions().pipe(takeUntil(this._destroy)).subscribe((/**
/** @type {?} */
const combinedOptionsChanges = this._combineOptions();
combinedOptionsChanges.pipe(take(1)).subscribe((/**
* @param {?} options

@@ -1581,10 +1824,8 @@ * @return {?}

options => {
if (this._infoWindow) {
this._infoWindow.setOptions(options);
}
else {
this._infoWindow = new google.maps.InfoWindow(options);
this._initializeEventHandlers();
}
this._polyline = new google.maps.Polyline(options);
this._polyline.setMap(this._map._googleMap);
this._eventManager.setTarget(this._polyline);
}));
this._watchForOptionsChanges();
this._watchForPathChanges();
}

@@ -1595,58 +1836,40 @@ /**

ngOnDestroy() {
this._destroy.next();
this._destroy.complete();
this._eventManager.destroy();
this._destroyed.next();
this._destroyed.complete();
for (let listener of this._listeners) {
listener.remove();
}
this.close();
this._polyline.setMap(null);
}
/**
* See developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.close
* @see
* developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getDraggable
* @return {?}
*/
close() {
if (this._infoWindow) {
this._infoWindow.close();
}
getDraggable() {
return this._polyline.getDraggable();
}
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getContent
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getEditable
* @return {?}
*/
getContent() {
return (/** @type {?} */ (this._infoWindow)).getContent();
getEditable() {
return this._polyline.getEditable();
}
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.getPosition
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getPath
* @return {?}
*/
getPosition() {
return (/** @type {?} */ (this._infoWindow)).getPosition() || null;
getPath() {
return this._polyline.getPath();
}
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getZIndex
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getVisible
* @return {?}
*/
getZIndex() {
return (/** @type {?} */ (this._infoWindow)).getZIndex();
getVisible() {
return this._polyline.getVisible();
}
/**
* Opens the MapInfoWindow using the provided MapMarker as the anchor. If the anchor is not set,
* then the position property of the options input is used instead.
* @param {?=} anchor
* @return {?}
*/
open(anchor) {
/** @type {?} */
const marker = anchor ? anchor._marker : undefined;
if (this._googleMap._googleMap) {
this._elementRef.nativeElement.style.display = '';
(/** @type {?} */ (this._infoWindow)).open(this._googleMap._googleMap, marker);
}
}
/**
* @private

@@ -1656,9 +1879,9 @@ * @return {?}

_combineOptions() {
return combineLatest([this._options, this._position]).pipe(map((/**
return combineLatest([this._options, this._path]).pipe(map((/**
* @param {?} __0
* @return {?}
*/
([options, position]) => {
([options, path]) => {
/** @type {?} */
const combinedOptions = Object.assign(Object.assign({}, options), { position: position || options.position, content: this._elementRef.nativeElement });
const combinedOptions = Object.assign(Object.assign({}, options), { path: path || options.path });
return combinedOptions;

@@ -1671,130 +1894,139 @@ })));

*/
_initializeEventHandlers() {
// Ensure that we don't leak if called multiple times.
this._clearListeners();
/** @type {?} */
const eventHandlers = new Map([
['closeclick', this.closeclick],
['content_changed', this.contentChanged],
['domready', this.domready],
['position_changed', this.positionChanged],
['zindex_changed', this.zindexChanged],
]);
eventHandlers.forEach((/**
* @param {?} eventHandler
* @param {?} name
_watchForOptionsChanges() {
this._options.pipe(takeUntil(this._destroyed)).subscribe((/**
* @param {?} options
* @return {?}
*/
(eventHandler, name) => {
if (eventHandler.observers.length > 0) {
this._listeners.push((/** @type {?} */ (this._infoWindow)).addListener(name, (/**
* @return {?}
*/
() => {
eventHandler.emit();
})));
}
options => {
this._polyline.setOptions(options);
}));
}
/**
* Clears all currently-registered event listeners.
* @private
* @return {?}
*/
_clearListeners() {
for (let listener of this._listeners) {
listener.remove();
}
this._listeners = [];
_watchForPathChanges() {
this._path.pipe(takeUntil(this._destroyed)).subscribe((/**
* @param {?} path
* @return {?}
*/
path => {
if (path) {
this._polyline.setPath(path);
}
}));
}
}
MapInfoWindow.decorators = [
MapPolyline.decorators = [
{ type: Directive, args: [{
selector: 'map-info-window',
host: { 'style': 'display: none' },
selector: 'map-polyline',
},] }
];
/** @nocollapse */
MapInfoWindow.ctorParameters = () => [
{ type: GoogleMap },
{ type: ElementRef }
MapPolyline.ctorParameters = () => [
{ type: GoogleMap }
];
MapInfoWindow.propDecorators = {
MapPolyline.propDecorators = {
options: [{ type: Input }],
position: [{ type: Input }],
closeclick: [{ type: Output }],
contentChanged: [{ type: Output }],
domready: [{ type: Output }],
positionChanged: [{ type: Output }],
zindexChanged: [{ type: Output }]
path: [{ type: Input }],
polylineClick: [{ type: Output }],
polylineDblclick: [{ type: Output }],
polylineDrag: [{ type: Output }],
polylineDragend: [{ type: Output }],
polylineDragstart: [{ type: Output }],
polylineMousedown: [{ type: Output }],
polylineMousemove: [{ type: Output }],
polylineMouseout: [{ type: Output }],
polylineMouseover: [{ type: Output }],
polylineMouseup: [{ type: Output }],
polylineRightclick: [{ type: Output }]
};
if (false) {
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick
* @type {?}
* @private
*/
MapInfoWindow.prototype.closeclick;
MapPolyline.prototype._eventManager;
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.content_changed
* @type {?}
* @private
*/
MapInfoWindow.prototype.contentChanged;
MapPolyline.prototype._options;
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.domready
* @type {?}
* @private
*/
MapInfoWindow.prototype.domready;
MapPolyline.prototype._path;
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.position_changed
* @type {?}
* @private
*/
MapInfoWindow.prototype.positionChanged;
MapPolyline.prototype._destroyed;
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.zindex_changed
* @type {?}
* @private
*/
MapInfoWindow.prototype.zindexChanged;
MapPolyline.prototype._listeners;
/** @type {?} */
MapPolyline.prototype._polyline;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.click
* @type {?}
* @private
*/
MapInfoWindow.prototype._options;
MapPolyline.prototype.polylineClick;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dblclick
* @type {?}
* @private
*/
MapInfoWindow.prototype._position;
MapPolyline.prototype.polylineDblclick;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.drag
* @type {?}
* @private
*/
MapInfoWindow.prototype._listeners;
MapPolyline.prototype.polylineDrag;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragend
* @type {?}
* @private
*/
MapInfoWindow.prototype._destroy;
MapPolyline.prototype.polylineDragend;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragstart
* @type {?}
* @private
*/
MapInfoWindow.prototype._infoWindow;
MapPolyline.prototype.polylineDragstart;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousedown
* @type {?}
* @private
*/
MapInfoWindow.prototype._googleMap;
MapPolyline.prototype.polylineMousedown;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousemove
* @type {?}
*/
MapPolyline.prototype.polylineMousemove;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseout
* @type {?}
*/
MapPolyline.prototype.polylineMouseout;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseover
* @type {?}
*/
MapPolyline.prototype.polylineMouseover;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseup
* @type {?}
*/
MapPolyline.prototype.polylineMouseup;
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.rightclick
* @type {?}
*/
MapPolyline.prototype.polylineRightclick;
/**
* @type {?}
* @private
*/
MapInfoWindow.prototype._elementRef;
MapPolyline.prototype._map;
}

@@ -1804,2 +2036,3 @@

* @fileoverview added by tsickle
* Generated from: src/google-maps/google-maps-module.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc

@@ -1812,2 +2045,3 @@ */

MapMarker,
MapPolyline,
];

@@ -1825,2 +2059,3 @@ class GoogleMapsModule {

* @fileoverview added by tsickle
* Generated from: src/google-maps/public-api.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc

@@ -1833,3 +2068,3 @@ */

export { GoogleMap, GoogleMapsModule, MapInfoWindow, MapMarker };
export { GoogleMap, GoogleMapsModule, MapInfoWindow, MapMarker, MapPolyline };
//# sourceMappingURL=google-maps.js.map

@@ -1,5 +0,5 @@

import { __read, __assign, __values } from 'tslib';
import { EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, Optional, Inject, PLATFORM_ID, Input, Output, Directive, NgModule } from '@angular/core';
import { __values, __read, __assign } from 'tslib';
import { Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, Optional, Inject, PLATFORM_ID, Input, Output, Directive, NgModule } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { BehaviorSubject, Subject, combineLatest } from 'rxjs';
import { Observable, BehaviorSubject, Subject, combineLatest } from 'rxjs';
import { map, take, shareReplay, takeUntil } from 'rxjs/operators';

@@ -14,2 +14,73 @@

*/
/** Manages event on a Google Maps object, ensuring that events are added only when necessary. */
var MapEventManager = /** @class */ (function () {
function MapEventManager() {
/** Pending listeners that were added before the target was set. */
this._pending = [];
this._listeners = [];
}
/** Clears all currently-registered event listeners. */
MapEventManager.prototype._clearListeners = function () {
var e_1, _a;
try {
for (var _b = __values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this._listeners = [];
};
/** Gets an observable that adds an event listener to the map when a consumer subscribes to it. */
MapEventManager.prototype.getLazyEmitter = function (name) {
var _this = this;
var observable = new Observable(function (observer) {
// If the target hasn't been initialized yet, cache the observer so it can be added later.
if (!_this._target) {
_this._pending.push({ observable: observable, observer: observer });
return undefined;
}
var listener = _this._target.addListener(name, function (event) { return observer.next(event); });
_this._listeners.push(listener);
return function () { return listener.remove(); };
});
return observable;
};
/** Sets the current target that the manager should bind events to. */
MapEventManager.prototype.setTarget = function (target) {
if (target === this._target) {
return;
}
// Clear the listeners from the pre-existing target.
if (this._target) {
this._clearListeners();
this._pending = [];
}
this._target = target;
// Add the listeners that were bound before the map was initialized.
this._pending.forEach(function (subscriber) { return subscriber.observable.subscribe(subscriber.observer); });
this._pending = [];
};
/** Destroys the manager and clears the event listeners. */
MapEventManager.prototype.destroy = function () {
this._clearListeners();
this._pending = [];
this._target = undefined;
};
return MapEventManager;
}());
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/** default options set to the Googleplex */

@@ -37,2 +108,7 @@ var DEFAULT_OPTIONS = {

this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject(DEFAULT_OPTIONS);
this._center = new BehaviorSubject(undefined);
this._zoom = new BehaviorSubject(undefined);
this._destroy = new Subject();
this.height = DEFAULT_HEIGHT;

@@ -44,3 +120,3 @@ this.width = DEFAULT_WIDTH;

*/
this.boundsChanged = new EventEmitter();
this.boundsChanged = this._eventManager.getLazyEmitter('bounds_changed');
/**

@@ -50,3 +126,3 @@ * See

*/
this.centerChanged = new EventEmitter();
this.centerChanged = this._eventManager.getLazyEmitter('center_changed');
/**

@@ -56,3 +132,3 @@ * See

*/
this.mapClick = new EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -62,3 +138,3 @@ * See

*/
this.mapDblclick = new EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -68,3 +144,3 @@ * See

*/
this.mapDrag = new EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -74,3 +150,3 @@ * See

*/
this.mapDragend = new EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -80,3 +156,3 @@ * See

*/
this.mapDragstart = new EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -86,3 +162,3 @@ * See

*/
this.headingChanged = new EventEmitter();
this.headingChanged = this._eventManager.getLazyEmitter('heading_changed');
/**

@@ -92,3 +168,3 @@ * See

*/
this.idle = new EventEmitter();
this.idle = this._eventManager.getLazyEmitter('idle');
/**

@@ -98,3 +174,3 @@ * See

*/
this.maptypeidChanged = new EventEmitter();
this.maptypeidChanged = this._eventManager.getLazyEmitter('maptypeid_changed');
/**

@@ -104,3 +180,3 @@ * See

*/
this.mapMousemove = new EventEmitter();
this.mapMousemove = this._eventManager.getLazyEmitter('mousemove');
/**

@@ -110,3 +186,3 @@ * See

*/
this.mapMouseout = new EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -116,3 +192,3 @@ * See

*/
this.mapMouseover = new EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -122,3 +198,3 @@ * See

*/
this.projectionChanged = new EventEmitter();
this.projectionChanged = this._eventManager.getLazyEmitter('projection_changed');
/**

@@ -128,3 +204,3 @@ * See

*/
this.mapRightclick = new EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -134,3 +210,3 @@ * See

*/
this.tilesloaded = new EventEmitter();
this.tilesloaded = this._eventManager.getLazyEmitter('tilesloaded');
/**

@@ -140,3 +216,3 @@ * See

*/
this.tiltChanged = new EventEmitter();
this.tiltChanged = this._eventManager.getLazyEmitter('tilt_changed');
/**

@@ -146,8 +222,3 @@ * See

*/
this.zoomChanged = new EventEmitter();
this._listeners = [];
this._options = new BehaviorSubject(DEFAULT_OPTIONS);
this._center = new BehaviorSubject(undefined);
this._zoom = new BehaviorSubject(undefined);
this._destroy = new Subject();
this.zoomChanged = this._eventManager.getLazyEmitter('zoomChanged');
// @breaking-change 10.0.0 Remove null check for `platformId`.

@@ -196,7 +267,6 @@ this._isBrowser =

this._setSize();
var combinedOptionsChanges = this._combineOptions();
this._googleMapChanges = this._initializeMap(combinedOptionsChanges);
this._googleMapChanges = this._initializeMap(this._combineOptions());
this._googleMapChanges.subscribe(function (googleMap) {
_this._googleMap = googleMap;
_this._initializeEventHandlers();
_this._eventManager.setTarget(_this._googleMap);
});

@@ -209,5 +279,5 @@ this._watchForOptionsChanges();

GoogleMap.prototype.ngOnDestroy = function () {
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
this._clearListeners();
};

@@ -219,2 +289,3 @@ /**

GoogleMap.prototype.fitBounds = function (bounds, padding) {
this._assertInitialized();
this._googleMap.fitBounds(bounds, padding);

@@ -227,2 +298,3 @@ };

GoogleMap.prototype.panBy = function (x, y) {
this._assertInitialized();
this._googleMap.panBy(x, y);

@@ -235,2 +307,3 @@ };

GoogleMap.prototype.panTo = function (latLng) {
this._assertInitialized();
this._googleMap.panTo(latLng);

@@ -243,2 +316,3 @@ };

GoogleMap.prototype.panToBounds = function (latLngBounds, padding) {
this._assertInitialized();
this._googleMap.panToBounds(latLngBounds, padding);

@@ -251,2 +325,3 @@ };

GoogleMap.prototype.getBounds = function () {
this._assertInitialized();
return this._googleMap.getBounds() || null;

@@ -259,2 +334,3 @@ };

GoogleMap.prototype.getCenter = function () {
this._assertInitialized();
return this._googleMap.getCenter();

@@ -267,2 +343,3 @@ };

GoogleMap.prototype.getClickableIcons = function () {
this._assertInitialized();
return this._googleMap.getClickableIcons();

@@ -275,2 +352,3 @@ };

GoogleMap.prototype.getHeading = function () {
this._assertInitialized();
return this._googleMap.getHeading();

@@ -283,2 +361,3 @@ };

GoogleMap.prototype.getMapTypeId = function () {
this._assertInitialized();
return this._googleMap.getMapTypeId();

@@ -291,2 +370,3 @@ };

GoogleMap.prototype.getProjection = function () {
this._assertInitialized();
return this._googleMap.getProjection();

@@ -299,2 +379,3 @@ };

GoogleMap.prototype.getStreetView = function () {
this._assertInitialized();
return this._googleMap.getStreetView();

@@ -307,2 +388,3 @@ };

GoogleMap.prototype.getTilt = function () {
this._assertInitialized();
return this._googleMap.getTilt();

@@ -315,2 +397,3 @@ };

GoogleMap.prototype.getZoom = function () {
this._assertInitialized();
return this._googleMap.getZoom();

@@ -324,2 +407,3 @@ };

get: function () {
this._assertInitialized();
return this._googleMap.controls;

@@ -336,2 +420,3 @@ },

get: function () {
this._assertInitialized();
return this._googleMap.data;

@@ -348,2 +433,3 @@ },

get: function () {
this._assertInitialized();
return this._googleMap.mapTypes;

@@ -360,2 +446,3 @@ },

get: function () {
this._assertInitialized();
return this._googleMap.overlayMapTypes;

@@ -383,5 +470,3 @@ },

var _this = this;
return optionsChanges.pipe(take(1), map(function (options) {
return new google.maps.Map(_this._mapEl, options);
}), shareReplay(1));
return optionsChanges.pipe(take(1), map(function (options) { return new google.maps.Map(_this._mapEl, options); }), shareReplay(1));
};

@@ -416,65 +501,9 @@ GoogleMap.prototype._watchForOptionsChanges = function () {

};
GoogleMap.prototype._initializeEventHandlers = function () {
var _this = this;
// Ensure that we don't leak if called multiple times.
this._clearListeners();
var eventHandlers = new Map([
['bounds_changed', this.boundsChanged],
['center_changed', this.centerChanged],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['heading_changed', this.headingChanged],
['idle', this.idle],
['maptypeid_changed', this.maptypeidChanged],
['projection_changed', this.projectionChanged],
['tilesloaded', this.tilesloaded],
['tilt_changed', this.tiltChanged],
['zoomChanged', this.zoomChanged],
]);
var mouseEventHandlers = new Map([
['dblclick', this.mapDblclick],
['mousemove', this.mapMousemove],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._googleMap.addListener(name, function () {
eventHandler.emit();
}));
}
});
mouseEventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._googleMap.addListener(name, function (event) {
eventHandler.emit(event);
}));
}
});
if (this.mapClick.observers.length > 0) {
this._listeners.push(this._googleMap.addListener('click', function (event) {
_this.mapClick.emit(event);
}));
/** Asserts that the map has been initialized. */
GoogleMap.prototype._assertInitialized = function () {
if (!this._googleMap) {
throw Error('Cannot access Google Map information before the API has been initialized. ' +
'Please wait for the API to load before trying to interact with it.');
}
};
/** Clears all currently-registered event listeners. */
GoogleMap.prototype._clearListeners = function () {
var e_1, _a;
try {
for (var _b = __values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this._listeners = [];
};
GoogleMap.decorators = [

@@ -529,2 +558,154 @@ { type: Component, args: [{

/**
* Angular component that renders a Google Maps info window via the Google Maps JavaScript API.
* @see developers.google.com/maps/documentation/javascript/reference/info-window
*/
var MapInfoWindow = /** @class */ (function () {
function MapInfoWindow(_googleMap, _elementRef) {
this._googleMap = _googleMap;
this._elementRef = _elementRef;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject({});
this._position = new BehaviorSubject(undefined);
this._destroy = new Subject();
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick
*/
this.closeclick = this._eventManager.getLazyEmitter('closeclick');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.content_changed
*/
this.contentChanged = this._eventManager.getLazyEmitter('content_changed');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.domready
*/
this.domready = this._eventManager.getLazyEmitter('domready');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.position_changed
*/
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.zindex_changed
*/
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}
Object.defineProperty(MapInfoWindow.prototype, "options", {
set: function (options) {
this._options.next(options || {});
},
enumerable: true,
configurable: true
});
Object.defineProperty(MapInfoWindow.prototype, "position", {
set: function (position) {
this._position.next(position);
},
enumerable: true,
configurable: true
});
MapInfoWindow.prototype.ngOnInit = function () {
var _this = this;
this._combineOptions().pipe(takeUntil(this._destroy)).subscribe(function (options) {
if (_this._infoWindow) {
_this._infoWindow.setOptions(options);
}
else {
_this._infoWindow = new google.maps.InfoWindow(options);
_this._eventManager.setTarget(_this._infoWindow);
}
});
};
MapInfoWindow.prototype.ngOnDestroy = function () {
this._eventManager.destroy();
this._destroy.next();
this._destroy.complete();
this.close();
};
/**
* See developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.close
*/
MapInfoWindow.prototype.close = function () {
if (this._infoWindow) {
this._infoWindow.close();
}
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getContent
*/
MapInfoWindow.prototype.getContent = function () {
return this._infoWindow.getContent();
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.getPosition
*/
MapInfoWindow.prototype.getPosition = function () {
return this._infoWindow.getPosition() || null;
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getZIndex
*/
MapInfoWindow.prototype.getZIndex = function () {
return this._infoWindow.getZIndex();
};
/**
* Opens the MapInfoWindow using the provided MapMarker as the anchor. If the anchor is not set,
* then the position property of the options input is used instead.
*/
MapInfoWindow.prototype.open = function (anchor) {
var marker = anchor ? anchor._marker : undefined;
if (this._googleMap._googleMap) {
this._elementRef.nativeElement.style.display = '';
this._infoWindow.open(this._googleMap._googleMap, marker);
}
};
MapInfoWindow.prototype._combineOptions = function () {
var _this = this;
return combineLatest([this._options, this._position]).pipe(map(function (_a) {
var _b = __read(_a, 2), options = _b[0], position = _b[1];
var combinedOptions = __assign(__assign({}, options), { position: position || options.position, content: _this._elementRef.nativeElement });
return combinedOptions;
}));
};
MapInfoWindow.decorators = [
{ type: Directive, args: [{
selector: 'map-info-window',
host: { 'style': 'display: none' },
},] }
];
/** @nocollapse */
MapInfoWindow.ctorParameters = function () { return [
{ type: GoogleMap },
{ type: ElementRef }
]; };
MapInfoWindow.propDecorators = {
options: [{ type: Input }],
position: [{ type: Input }],
closeclick: [{ type: Output }],
contentChanged: [{ type: Output }],
domready: [{ type: Output }],
positionChanged: [{ type: Output }],
zindexChanged: [{ type: Output }]
};
return MapInfoWindow;
}());
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/**
* Default options for the Google Maps marker component. Displays a marker

@@ -543,2 +724,9 @@ * at the Googleplex.

this._googleMap = _googleMap;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new BehaviorSubject(undefined);
this._position = new BehaviorSubject(undefined);
this._label = new BehaviorSubject(undefined);
this._clickable = new BehaviorSubject(undefined);
this._destroy = new Subject();
/**

@@ -548,3 +736,3 @@ * See

*/
this.animationChanged = new EventEmitter();
this.animationChanged = this._eventManager.getLazyEmitter('animation_changed');
/**

@@ -554,3 +742,3 @@ * See

*/
this.mapClick = new EventEmitter();
this.mapClick = this._eventManager.getLazyEmitter('click');
/**

@@ -560,3 +748,3 @@ * See

*/
this.clickableChanged = new EventEmitter();
this.clickableChanged = this._eventManager.getLazyEmitter('clickable_changed');
/**

@@ -566,3 +754,3 @@ * See

*/
this.cursorChanged = new EventEmitter();
this.cursorChanged = this._eventManager.getLazyEmitter('cursor_changed');
/**

@@ -572,3 +760,3 @@ * See

*/
this.mapDblclick = new EventEmitter();
this.mapDblclick = this._eventManager.getLazyEmitter('dblclick');
/**

@@ -578,3 +766,3 @@ * See

*/
this.mapDrag = new EventEmitter();
this.mapDrag = this._eventManager.getLazyEmitter('drag');
/**

@@ -584,3 +772,3 @@ * See

*/
this.mapDragend = new EventEmitter();
this.mapDragend = this._eventManager.getLazyEmitter('dragend');
/**

@@ -590,3 +778,3 @@ * See

*/
this.draggableChanged = new EventEmitter();
this.draggableChanged = this._eventManager.getLazyEmitter('draggable_changed');
/**

@@ -596,3 +784,3 @@ * See

*/
this.mapDragstart = new EventEmitter();
this.mapDragstart = this._eventManager.getLazyEmitter('dragstart');
/**

@@ -602,3 +790,3 @@ * See

*/
this.flatChanged = new EventEmitter();
this.flatChanged = this._eventManager.getLazyEmitter('flat_changed');
/**

@@ -608,3 +796,3 @@ * See

*/
this.iconChanged = new EventEmitter();
this.iconChanged = this._eventManager.getLazyEmitter('icon_changed');
/**

@@ -614,3 +802,3 @@ * See

*/
this.mapMousedown = new EventEmitter();
this.mapMousedown = this._eventManager.getLazyEmitter('mousedown');
/**

@@ -620,3 +808,3 @@ * See

*/
this.mapMouseout = new EventEmitter();
this.mapMouseout = this._eventManager.getLazyEmitter('mouseout');
/**

@@ -626,3 +814,3 @@ * See

*/
this.mapMouseover = new EventEmitter();
this.mapMouseover = this._eventManager.getLazyEmitter('mouseover');
/**

@@ -632,3 +820,3 @@ * See

*/
this.mapMouseup = new EventEmitter();
this.mapMouseup = this._eventManager.getLazyEmitter('mouseup');
/**

@@ -638,3 +826,3 @@ * See

*/
this.positionChanged = new EventEmitter();
this.positionChanged = this._eventManager.getLazyEmitter('position_changed');
/**

@@ -644,3 +832,3 @@ * See

*/
this.mapRightclick = new EventEmitter();
this.mapRightclick = this._eventManager.getLazyEmitter('rightclick');
/**

@@ -650,3 +838,3 @@ * See

*/
this.shapeChanged = new EventEmitter();
this.shapeChanged = this._eventManager.getLazyEmitter('shape_changed');
/**

@@ -656,3 +844,3 @@ * See

*/
this.titleChanged = new EventEmitter();
this.titleChanged = this._eventManager.getLazyEmitter('title_changed');
/**

@@ -662,3 +850,3 @@ * See

*/
this.visibleChanged = new EventEmitter();
this.visibleChanged = this._eventManager.getLazyEmitter('visible_changed');
/**

@@ -668,10 +856,3 @@ * See

*/
this.zindexChanged = new EventEmitter();
this._options = new BehaviorSubject(DEFAULT_MARKER_OPTIONS);
this._title = new BehaviorSubject(undefined);
this._position = new BehaviorSubject(undefined);
this._label = new BehaviorSubject(undefined);
this._clickable = new BehaviorSubject(undefined);
this._destroy = new Subject();
this._listeners = [];
this.zindexChanged = this._eventManager.getLazyEmitter('zindex_changed');
}

@@ -719,3 +900,3 @@ Object.defineProperty(MapMarker.prototype, "options", {

_this._marker.setMap(_this._googleMap._googleMap);
_this._initializeEventHandlers();
_this._eventManager.setTarget(_this._marker);
});

@@ -731,3 +912,3 @@ this._watchForOptionsChanges();

this._destroy.complete();
this._clearListeners();
this._eventManager.destroy();
if (this._marker) {

@@ -870,64 +1051,2 @@ this._marker.setMap(null);

};
MapMarker.prototype._initializeEventHandlers = function () {
var _this = this;
// Ensure that we don't leak if called multiple times.
this._clearListeners();
var eventHandlers = new Map([
['animation_changed', this.animationChanged],
['clickable_changed', this.clickableChanged],
['cursor_changed', this.cursorChanged],
['draggable_changed', this.draggableChanged],
['flat_changed', this.flatChanged],
['icon_changed', this.iconChanged],
['position_changed', this.positionChanged],
['shape_changed', this.shapeChanged],
['title_changed', this.titleChanged],
['visible_changed', this.visibleChanged],
['zindex_changed', this.zindexChanged],
]);
var mouseEventHandlers = new Map([
['click', this.mapClick],
['dblclick', this.mapDblclick],
['drag', this.mapDrag],
['dragend', this.mapDragend],
['dragstart', this.mapDragstart],
['mousedown', this.mapMousedown],
['mouseout', this.mapMouseout],
['mouseover', this.mapMouseover],
['mouseup', this.mapMouseup],
['rightclick', this.mapRightclick],
]);
eventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._marker.addListener(name, function () {
eventHandler.emit();
}));
}
});
mouseEventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._marker.addListener(name, function (event) {
eventHandler.emit(event);
}));
}
});
};
/** Clears all currently-registered event listeners. */
MapMarker.prototype._clearListeners = function () {
var e_1, _a;
try {
for (var _b = __values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this._listeners = [];
};
MapMarker.decorators = [

@@ -984,43 +1103,59 @@ { type: Component, args: [{

/**
* Angular component that renders a Google Maps info window via the Google Maps JavaScript API.
* @see developers.google.com/maps/documentation/javascript/reference/info-window
* Angular component that renders a Google Maps Polyline via the Google Maps JavaScript API.
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline
*/
var MapInfoWindow = /** @class */ (function () {
function MapInfoWindow(_googleMap, _elementRef) {
this._googleMap = _googleMap;
this._elementRef = _elementRef;
var MapPolyline = /** @class */ (function () {
function MapPolyline(_map) {
this._map = _map;
this._eventManager = new MapEventManager();
this._options = new BehaviorSubject({});
this._path = new BehaviorSubject(undefined);
this._destroyed = new Subject();
this._listeners = [];
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.closeclick
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.click
*/
this.closeclick = new EventEmitter();
this.polylineClick = this._eventManager.getLazyEmitter('click');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.content_changed
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dblclick
*/
this.contentChanged = new EventEmitter();
this.polylineDblclick = this._eventManager.getLazyEmitter('dblclick');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.domready
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.drag
*/
this.domready = new EventEmitter();
this.polylineDrag = this._eventManager.getLazyEmitter('drag');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.position_changed
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragend
*/
this.positionChanged = new EventEmitter();
this.polylineDragend = this._eventManager.getLazyEmitter('dragend');
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.zindex_changed
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.dragstart
*/
this.zindexChanged = new EventEmitter();
this._options = new BehaviorSubject({});
this._position = new BehaviorSubject(undefined);
this._listeners = [];
this._destroy = new Subject();
this.polylineDragstart = this._eventManager.getLazyEmitter('dragstart');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousedown
*/
this.polylineMousedown = this._eventManager.getLazyEmitter('mousedown');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mousemove
*/
this.polylineMousemove = this._eventManager.getLazyEmitter('mousemove');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseout
*/
this.polylineMouseout = this._eventManager.getLazyEmitter('mouseout');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseover
*/
this.polylineMouseover = this._eventManager.getLazyEmitter('mouseover');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.mouseup
*/
this.polylineMouseup = this._eventManager.getLazyEmitter('mouseup');
/**
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.rightclick
*/
this.polylineRightclick = this._eventManager.getLazyEmitter('rightclick');
}
Object.defineProperty(MapInfoWindow.prototype, "options", {
Object.defineProperty(MapPolyline.prototype, "options", {
set: function (options) {

@@ -1032,5 +1167,5 @@ this._options.next(options || {});

});
Object.defineProperty(MapInfoWindow.prototype, "position", {
set: function (position) {
this._position.next(position);
Object.defineProperty(MapPolyline.prototype, "path", {
set: function (path) {
this._path.next(path);
},

@@ -1040,18 +1175,18 @@ enumerable: true,

});
MapInfoWindow.prototype.ngOnInit = function () {
MapPolyline.prototype.ngOnInit = function () {
var _this = this;
this._combineOptions().pipe(takeUntil(this._destroy)).subscribe(function (options) {
if (_this._infoWindow) {
_this._infoWindow.setOptions(options);
}
else {
_this._infoWindow = new google.maps.InfoWindow(options);
_this._initializeEventHandlers();
}
var combinedOptionsChanges = this._combineOptions();
combinedOptionsChanges.pipe(take(1)).subscribe(function (options) {
_this._polyline = new google.maps.Polyline(options);
_this._polyline.setMap(_this._map._googleMap);
_this._eventManager.setTarget(_this._polyline);
});
this._watchForOptionsChanges();
this._watchForPathChanges();
};
MapInfoWindow.prototype.ngOnDestroy = function () {
MapPolyline.prototype.ngOnDestroy = function () {
var e_1, _a;
this._destroy.next();
this._destroy.complete();
this._eventManager.destroy();
this._destroyed.next();
this._destroyed.complete();
try {

@@ -1070,111 +1205,75 @@ for (var _b = __values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {

}
this.close();
this._polyline.setMap(null);
};
/**
* See developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.close
* @see
* developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getDraggable
*/
MapInfoWindow.prototype.close = function () {
if (this._infoWindow) {
this._infoWindow.close();
}
MapPolyline.prototype.getDraggable = function () {
return this._polyline.getDraggable();
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getContent
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getEditable
*/
MapInfoWindow.prototype.getContent = function () {
return this._infoWindow.getContent();
MapPolyline.prototype.getEditable = function () {
return this._polyline.getEditable();
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window
* #InfoWindow.getPosition
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getPath
*/
MapInfoWindow.prototype.getPosition = function () {
return this._infoWindow.getPosition() || null;
MapPolyline.prototype.getPath = function () {
return this._polyline.getPath();
};
/**
* See
* developers.google.com/maps/documentation/javascript/reference/info-window#InfoWindow.getZIndex
* @see developers.google.com/maps/documentation/javascript/reference/polygon#Polyline.getVisible
*/
MapInfoWindow.prototype.getZIndex = function () {
return this._infoWindow.getZIndex();
MapPolyline.prototype.getVisible = function () {
return this._polyline.getVisible();
};
/**
* Opens the MapInfoWindow using the provided MapMarker as the anchor. If the anchor is not set,
* then the position property of the options input is used instead.
*/
MapInfoWindow.prototype.open = function (anchor) {
var marker = anchor ? anchor._marker : undefined;
if (this._googleMap._googleMap) {
this._elementRef.nativeElement.style.display = '';
this._infoWindow.open(this._googleMap._googleMap, marker);
}
};
MapInfoWindow.prototype._combineOptions = function () {
var _this = this;
return combineLatest([this._options, this._position]).pipe(map(function (_a) {
var _b = __read(_a, 2), options = _b[0], position = _b[1];
var combinedOptions = __assign(__assign({}, options), { position: position || options.position, content: _this._elementRef.nativeElement });
MapPolyline.prototype._combineOptions = function () {
return combineLatest([this._options, this._path]).pipe(map(function (_a) {
var _b = __read(_a, 2), options = _b[0], path = _b[1];
var combinedOptions = __assign(__assign({}, options), { path: path || options.path });
return combinedOptions;
}));
};
MapInfoWindow.prototype._initializeEventHandlers = function () {
MapPolyline.prototype._watchForOptionsChanges = function () {
var _this = this;
// Ensure that we don't leak if called multiple times.
this._clearListeners();
var eventHandlers = new Map([
['closeclick', this.closeclick],
['content_changed', this.contentChanged],
['domready', this.domready],
['position_changed', this.positionChanged],
['zindex_changed', this.zindexChanged],
]);
eventHandlers.forEach(function (eventHandler, name) {
if (eventHandler.observers.length > 0) {
_this._listeners.push(_this._infoWindow.addListener(name, function () {
eventHandler.emit();
}));
}
this._options.pipe(takeUntil(this._destroyed)).subscribe(function (options) {
_this._polyline.setOptions(options);
});
};
/** Clears all currently-registered event listeners. */
MapInfoWindow.prototype._clearListeners = function () {
var e_2, _a;
try {
for (var _b = __values(this._listeners), _c = _b.next(); !_c.done; _c = _b.next()) {
var listener = _c.value;
listener.remove();
MapPolyline.prototype._watchForPathChanges = function () {
var _this = this;
this._path.pipe(takeUntil(this._destroyed)).subscribe(function (path) {
if (path) {
_this._polyline.setPath(path);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
this._listeners = [];
});
};
MapInfoWindow.decorators = [
MapPolyline.decorators = [
{ type: Directive, args: [{
selector: 'map-info-window',
host: { 'style': 'display: none' },
selector: 'map-polyline',
},] }
];
/** @nocollapse */
MapInfoWindow.ctorParameters = function () { return [
{ type: GoogleMap },
{ type: ElementRef }
MapPolyline.ctorParameters = function () { return [
{ type: GoogleMap }
]; };
MapInfoWindow.propDecorators = {
MapPolyline.propDecorators = {
options: [{ type: Input }],
position: [{ type: Input }],
closeclick: [{ type: Output }],
contentChanged: [{ type: Output }],
domready: [{ type: Output }],
positionChanged: [{ type: Output }],
zindexChanged: [{ type: Output }]
path: [{ type: Input }],
polylineClick: [{ type: Output }],
polylineDblclick: [{ type: Output }],
polylineDrag: [{ type: Output }],
polylineDragend: [{ type: Output }],
polylineDragstart: [{ type: Output }],
polylineMousedown: [{ type: Output }],
polylineMousemove: [{ type: Output }],
polylineMouseout: [{ type: Output }],
polylineMouseover: [{ type: Output }],
polylineMouseup: [{ type: Output }],
polylineRightclick: [{ type: Output }]
};
return MapInfoWindow;
return MapPolyline;
}());

@@ -1193,2 +1292,3 @@

MapMarker,
MapPolyline,
];

@@ -1219,3 +1319,3 @@ var GoogleMapsModule = /** @class */ (function () {

export { GoogleMap, GoogleMapsModule, MapInfoWindow, MapMarker };
export { GoogleMap, GoogleMapsModule, MapInfoWindow, MapMarker, MapPolyline };
//# sourceMappingURL=google-maps.js.map

@@ -9,3 +9,4 @@ /**

/// <reference types="googlemaps" />
import { ElementRef, EventEmitter, OnChanges, OnDestroy, OnInit } from '@angular/core';
import { ElementRef, OnChanges, OnDestroy, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
/**

@@ -31,2 +32,12 @@ * Extends the Google Map interface due to the Definitely Typed implementation

private readonly _elementRef;
private _eventManager;
/** Whether we're currently rendering inside a browser. */
private _isBrowser;
private _googleMapChanges;
private readonly _options;
private readonly _center;
private readonly _zoom;
private readonly _destroy;
private _mapEl;
_googleMap: UpdatedGoogleMap;
height: string;

@@ -41,3 +52,3 @@ width: string;

*/
boundsChanged: EventEmitter<void>;
boundsChanged: Observable<void>;
/**

@@ -47,3 +58,3 @@ * See

*/
centerChanged: EventEmitter<void>;
centerChanged: Observable<void>;
/**

@@ -53,3 +64,3 @@ * See

*/
mapClick: EventEmitter<google.maps.MouseEvent | google.maps.IconMouseEvent>;
mapClick: Observable<google.maps.MouseEvent | google.maps.IconMouseEvent>;
/**

@@ -59,3 +70,3 @@ * See

*/
mapDblclick: EventEmitter<google.maps.MouseEvent>;
mapDblclick: Observable<google.maps.MouseEvent>;
/**

@@ -65,3 +76,3 @@ * See

*/
mapDrag: EventEmitter<void>;
mapDrag: Observable<void>;
/**

@@ -71,3 +82,3 @@ * See

*/
mapDragend: EventEmitter<void>;
mapDragend: Observable<void>;
/**

@@ -77,3 +88,3 @@ * See

*/
mapDragstart: EventEmitter<void>;
mapDragstart: Observable<void>;
/**

@@ -83,3 +94,3 @@ * See

*/
headingChanged: EventEmitter<void>;
headingChanged: Observable<void>;
/**

@@ -89,3 +100,3 @@ * See

*/
idle: EventEmitter<void>;
idle: Observable<void>;
/**

@@ -95,3 +106,3 @@ * See

*/
maptypeidChanged: EventEmitter<void>;
maptypeidChanged: Observable<void>;
/**

@@ -101,3 +112,3 @@ * See

*/
mapMousemove: EventEmitter<google.maps.MouseEvent>;
mapMousemove: Observable<google.maps.MouseEvent>;
/**

@@ -107,3 +118,3 @@ * See

*/
mapMouseout: EventEmitter<google.maps.MouseEvent>;
mapMouseout: Observable<google.maps.MouseEvent>;
/**

@@ -113,3 +124,3 @@ * See

*/
mapMouseover: EventEmitter<google.maps.MouseEvent>;
mapMouseover: Observable<google.maps.MouseEvent>;
/**

@@ -119,3 +130,3 @@ * See

*/
projectionChanged: EventEmitter<void>;
projectionChanged: Observable<void>;
/**

@@ -125,3 +136,3 @@ * See

*/
mapRightclick: EventEmitter<google.maps.MouseEvent>;
mapRightclick: Observable<google.maps.MouseEvent>;
/**

@@ -131,3 +142,3 @@ * See

*/
tilesloaded: EventEmitter<void>;
tilesloaded: Observable<void>;
/**

@@ -137,3 +148,3 @@ * See

*/
tiltChanged: EventEmitter<void>;
tiltChanged: Observable<void>;
/**

@@ -143,13 +154,3 @@ * See

*/
zoomChanged: EventEmitter<void>;
private _mapEl;
_googleMap: UpdatedGoogleMap;
/** Whether we're currently rendering inside a browser. */
private _isBrowser;
private _googleMapChanges;
private _listeners;
private readonly _options;
private readonly _center;
private readonly _zoom;
private readonly _destroy;
zoomChanged: Observable<void>;
constructor(_elementRef: ElementRef,

@@ -256,5 +257,4 @@ /**

private _watchForZoomChanges;
private _initializeEventHandlers;
/** Clears all currently-registered event listeners. */
private _clearListeners;
/** Asserts that the map has been initialized. */
private _assertInitialized;
}

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"metadata":{"GoogleMap":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":59,"character":1},"arguments":[{"selector":"google-map","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":61,"character":19},"member":"OnPush"},"template":"<div class=\"map-container\"></div><ng-content></ng-content>","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":63,"character":17},"member":"None"}}]}],"members":{"height":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":66,"character":3}}]}],"width":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3}}]}],"center":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3}}]}],"zoom":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3}}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}}]}],"boundsChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":87,"character":3}}]}],"centerChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":93,"character":3}}]}],"mapClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":99,"character":3}}]}],"mapDblclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":105,"character":3}}]}],"mapDrag":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":111,"character":3}}]}],"mapDragend":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":117,"character":3}}]}],"mapDragstart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":123,"character":3}}]}],"headingChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":129,"character":3}}]}],"idle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":135,"character":3}}]}],"maptypeidChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":141,"character":3}}]}],"mapMousemove":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":147,"character":3}}]}],"mapMouseout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":153,"character":3}}]}],"mapMouseover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":159,"character":3}}]}],"projectionChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":165,"character":3}}]}],"mapRightclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":171,"character":3}}]}],"tilesloaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":177,"character":3}}]}],"tiltChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":183,"character":3}}]}],"zoomChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":189,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":213,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":213,"character":17},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":213,"character":24}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":208,"character":34},{"__symbolic":"reference","name":"Object"}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"fitBounds":[{"__symbolic":"method"}],"panBy":[{"__symbolic":"method"}],"panTo":[{"__symbolic":"method"}],"panToBounds":[{"__symbolic":"method"}],"getBounds":[{"__symbolic":"method"}],"getCenter":[{"__symbolic":"method"}],"getClickableIcons":[{"__symbolic":"method"}],"getHeading":[{"__symbolic":"method"}],"getMapTypeId":[{"__symbolic":"method"}],"getProjection":[{"__symbolic":"method"}],"getStreetView":[{"__symbolic":"method"}],"getTilt":[{"__symbolic":"method"}],"getZoom":[{"__symbolic":"method"}],"_setSize":[{"__symbolic":"method"}],"_combineOptions":[{"__symbolic":"method"}],"_initializeMap":[{"__symbolic":"method"}],"_watchForOptionsChanges":[{"__symbolic":"method"}],"_watchForCenterChanges":[{"__symbolic":"method"}],"_watchForZoomChanges":[{"__symbolic":"method"}],"_initializeEventHandlers":[{"__symbolic":"method"}],"_clearListeners":[{"__symbolic":"method"}]}},"MapMarker":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":38,"character":1},"arguments":[{"selector":"map-marker","template":"<ng-content></ng-content>","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":41,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":42,"character":17},"member":"None"}}]}],"members":{"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"position":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"clickable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":3}}]}],"animationChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":74,"character":3}}]}],"mapClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":80,"character":3}}]}],"clickableChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":86,"character":3}}]}],"cursorChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":92,"character":3}}]}],"mapDblclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":98,"character":3}}]}],"mapDrag":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":104,"character":3}}]}],"mapDragend":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":110,"character":3}}]}],"draggableChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":116,"character":3}}]}],"mapDragstart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":122,"character":3}}]}],"flatChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":128,"character":3}}]}],"iconChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":134,"character":3}}]}],"mapMousedown":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":140,"character":3}}]}],"mapMouseout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":146,"character":3}}]}],"mapMouseover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":152,"character":3}}]}],"mapMouseup":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":158,"character":3}}]}],"positionChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":164,"character":3}}]}],"mapRightclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":170,"character":3}}]}],"shapeChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":176,"character":3}}]}],"titleChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":182,"character":3}}]}],"visibleChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":188,"character":3}}]}],"zindexChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":194,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"GoogleMap"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"getAnimation":[{"__symbolic":"method"}],"getClickable":[{"__symbolic":"method"}],"getCursor":[{"__symbolic":"method"}],"getDraggable":[{"__symbolic":"method"}],"getIcon":[{"__symbolic":"method"}],"getLabel":[{"__symbolic":"method"}],"getOpacity":[{"__symbolic":"method"}],"getPosition":[{"__symbolic":"method"}],"getShape":[{"__symbolic":"method"}],"getTitle":[{"__symbolic":"method"}],"getVisible":[{"__symbolic":"method"}],"getZIndex":[{"__symbolic":"method"}],"_combineOptions":[{"__symbolic":"method"}],"_watchForOptionsChanges":[{"__symbolic":"method"}],"_watchForTitleChanges":[{"__symbolic":"method"}],"_watchForPositionChanges":[{"__symbolic":"method"}],"_watchForLabelChanges":[{"__symbolic":"method"}],"_watchForClickableChanges":[{"__symbolic":"method"}],"_initializeEventHandlers":[{"__symbolic":"method"}],"_clearListeners":[{"__symbolic":"method"}]}},"GoogleMapsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":20,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"GoogleMap"},{"__symbolic":"reference","name":"MapInfoWindow"},{"__symbolic":"reference","name":"MapMarker"}],"exports":[{"__symbolic":"reference","name":"GoogleMap"},{"__symbolic":"reference","name":"MapInfoWindow"},{"__symbolic":"reference","name":"MapMarker"}]}]}],"members":{}},"MapInfoWindow":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":30,"character":1},"arguments":[{"selector":"map-info-window","host":{"style":"display: none","$quoted$":["style"]}}]}],"members":{"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":35,"character":3}}]}],"position":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3}}]}],"closeclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":49,"character":3}}]}],"contentChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":56,"character":3}}]}],"domready":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":62,"character":3}}]}],"positionChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":69,"character":3}}]}],"zindexChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":76,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"GoogleMap"},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":89,"character":46,"context":{"typeName":"HTMLElement"},"module":"./map-info-window/map-info-window"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"getContent":[{"__symbolic":"method"}],"getPosition":[{"__symbolic":"method"}],"getZIndex":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}],"_combineOptions":[{"__symbolic":"method"}],"_initializeEventHandlers":[{"__symbolic":"method"}],"_clearListeners":[{"__symbolic":"method"}]}}},"origins":{"GoogleMap":"./google-map/google-map","MapMarker":"./map-marker/map-marker","GoogleMapsModule":"./google-maps-module","MapInfoWindow":"./map-info-window/map-info-window"},"importAs":"@angular/google-maps"}
{"__symbolic":"module","version":4,"metadata":{"GoogleMap":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":59,"character":1},"arguments":[{"selector":"google-map","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":61,"character":19},"member":"OnPush"},"template":"<div class=\"map-container\"></div><ng-content></ng-content>","encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":63,"character":17},"member":"None"}}]}],"members":{"height":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}}]}],"width":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"center":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3}}]}],"zoom":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":88,"character":3}}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"boundsChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":101,"character":3}}]}],"centerChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":108,"character":3}}]}],"mapClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":115,"character":3}}]}],"mapDblclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":123,"character":3}}]}],"mapDrag":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":131,"character":3}}]}],"mapDragend":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":137,"character":3}}]}],"mapDragstart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":143,"character":3}}]}],"headingChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":149,"character":3}}]}],"idle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":156,"character":3}}]}],"maptypeidChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":162,"character":3}}]}],"mapMousemove":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":169,"character":3}}]}],"mapMouseout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":177,"character":3}}]}],"mapMouseover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":185,"character":3}}]}],"projectionChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":193,"character":3}}]}],"mapRightclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":201,"character":3}}]}],"tilesloaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":209,"character":3}}]}],"tiltChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":215,"character":3}}]}],"zoomChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":221,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":229,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":229,"character":17},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":229,"character":24}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":224,"character":34},{"__symbolic":"reference","name":"Object"}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"fitBounds":[{"__symbolic":"method"}],"panBy":[{"__symbolic":"method"}],"panTo":[{"__symbolic":"method"}],"panToBounds":[{"__symbolic":"method"}],"getBounds":[{"__symbolic":"method"}],"getCenter":[{"__symbolic":"method"}],"getClickableIcons":[{"__symbolic":"method"}],"getHeading":[{"__symbolic":"method"}],"getMapTypeId":[{"__symbolic":"method"}],"getProjection":[{"__symbolic":"method"}],"getStreetView":[{"__symbolic":"method"}],"getTilt":[{"__symbolic":"method"}],"getZoom":[{"__symbolic":"method"}],"_setSize":[{"__symbolic":"method"}],"_combineOptions":[{"__symbolic":"method"}],"_initializeMap":[{"__symbolic":"method"}],"_watchForOptionsChanges":[{"__symbolic":"method"}],"_watchForCenterChanges":[{"__symbolic":"method"}],"_watchForZoomChanges":[{"__symbolic":"method"}],"_assertInitialized":[{"__symbolic":"method"}]}},"GoogleMapsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":22,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"GoogleMap"},{"__symbolic":"reference","name":"MapInfoWindow"},{"__symbolic":"reference","name":"MapMarker"},{"__symbolic":"reference","name":"MapPolyline"}],"exports":[{"__symbolic":"reference","name":"GoogleMap"},{"__symbolic":"reference","name":"MapInfoWindow"},{"__symbolic":"reference","name":"MapMarker"},{"__symbolic":"reference","name":"MapPolyline"}]}]}],"members":{}},"MapInfoWindow":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":30,"character":1},"arguments":[{"selector":"map-info-window","host":{"style":"display: none","$quoted$":["style"]}}]}],"members":{"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":42,"character":3}}]}],"position":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":47,"character":3}}]}],"closeclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":56,"character":3}}]}],"contentChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":63,"character":3}}]}],"domready":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":70,"character":3}}]}],"positionChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":77,"character":3}}]}],"zindexChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":85,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"GoogleMap"},{"__symbolic":"reference","name":"ElementRef","module":"@angular/core","arguments":[{"__symbolic":"error","message":"Could not resolve type","line":89,"character":46,"context":{"typeName":"HTMLElement"},"module":"./map-info-window/map-info-window"}]}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"getContent":[{"__symbolic":"method"}],"getPosition":[{"__symbolic":"method"}],"getZIndex":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}],"_combineOptions":[{"__symbolic":"method"}]}},"MapMarker":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":38,"character":1},"arguments":[{"selector":"map-marker","template":"<ng-content></ng-content>","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":41,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":42,"character":17},"member":"None"}}]}],"members":{"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3}}]}],"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"position":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":66,"character":3}}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"clickable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"animationChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":85,"character":3}}]}],"mapClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":92,"character":3}}]}],"clickableChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":100,"character":3}}]}],"cursorChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":107,"character":3}}]}],"mapDblclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":114,"character":3}}]}],"mapDrag":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":122,"character":3}}]}],"mapDragend":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":130,"character":3}}]}],"draggableChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":138,"character":3}}]}],"mapDragstart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":145,"character":3}}]}],"flatChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":153,"character":3}}]}],"iconChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":159,"character":3}}]}],"mapMousedown":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":165,"character":3}}]}],"mapMouseout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":173,"character":3}}]}],"mapMouseover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":181,"character":3}}]}],"mapMouseup":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":189,"character":3}}]}],"positionChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":197,"character":3}}]}],"mapRightclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":204,"character":3}}]}],"shapeChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":212,"character":3}}]}],"titleChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":219,"character":3}}]}],"visibleChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":226,"character":3}}]}],"zindexChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":233,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"GoogleMap"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"getAnimation":[{"__symbolic":"method"}],"getClickable":[{"__symbolic":"method"}],"getCursor":[{"__symbolic":"method"}],"getDraggable":[{"__symbolic":"method"}],"getIcon":[{"__symbolic":"method"}],"getLabel":[{"__symbolic":"method"}],"getOpacity":[{"__symbolic":"method"}],"getPosition":[{"__symbolic":"method"}],"getShape":[{"__symbolic":"method"}],"getTitle":[{"__symbolic":"method"}],"getVisible":[{"__symbolic":"method"}],"getZIndex":[{"__symbolic":"method"}],"_combineOptions":[{"__symbolic":"method"}],"_watchForOptionsChanges":[{"__symbolic":"method"}],"_watchForTitleChanges":[{"__symbolic":"method"}],"_watchForPositionChanges":[{"__symbolic":"method"}],"_watchForLabelChanges":[{"__symbolic":"method"}],"_watchForClickableChanges":[{"__symbolic":"method"}]}},"MapPolyline":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":28,"character":1},"arguments":[{"selector":"map-polyline"}]}],"members":{"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"path":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"polylineClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":57,"character":3}}]}],"polylineDblclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":64,"character":3}}]}],"polylineDrag":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":71,"character":3}}]}],"polylineDragend":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":78,"character":3}}]}],"polylineDragstart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":85,"character":3}}]}],"polylineMousedown":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":92,"character":3}}]}],"polylineMousemove":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":99,"character":3}}]}],"polylineMouseout":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":106,"character":3}}]}],"polylineMouseover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":113,"character":3}}]}],"polylineMouseup":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":120,"character":3}}]}],"polylineRightclick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":127,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"GoogleMap"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"getDraggable":[{"__symbolic":"method"}],"getEditable":[{"__symbolic":"method"}],"getPath":[{"__symbolic":"method"}],"getVisible":[{"__symbolic":"method"}],"_combineOptions":[{"__symbolic":"method"}],"_watchForOptionsChanges":[{"__symbolic":"method"}],"_watchForPathChanges":[{"__symbolic":"method"}]}}},"origins":{"GoogleMap":"./google-map/google-map","GoogleMapsModule":"./google-maps-module","MapInfoWindow":"./map-info-window/map-info-window","MapMarker":"./map-marker/map-marker","MapPolyline":"./map-polyline/map-polyline"},"importAs":"@angular/google-maps"}

@@ -9,3 +9,4 @@ /**

/// <reference types="googlemaps" />
import { ElementRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
import { ElementRef, OnDestroy, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { GoogleMap } from '../google-map/google-map';

@@ -20,2 +21,7 @@ import { MapMarker } from '../map-marker/map-marker';

private _elementRef;
private _eventManager;
private readonly _options;
private readonly _position;
private readonly _destroy;
private _infoWindow?;
options: google.maps.InfoWindowOptions;

@@ -27,3 +33,3 @@ position: google.maps.LatLngLiteral | google.maps.LatLng;

*/
closeclick: EventEmitter<void>;
closeclick: Observable<void>;
/**

@@ -34,3 +40,3 @@ * See

*/
contentChanged: EventEmitter<void>;
contentChanged: Observable<void>;
/**

@@ -40,3 +46,3 @@ * See

*/
domready: EventEmitter<void>;
domready: Observable<void>;
/**

@@ -47,3 +53,3 @@ * See

*/
positionChanged: EventEmitter<void>;
positionChanged: Observable<void>;
/**

@@ -54,8 +60,3 @@ * See

*/
zindexChanged: EventEmitter<void>;
private readonly _options;
private readonly _position;
private _listeners;
private readonly _destroy;
private _infoWindow?;
zindexChanged: Observable<void>;
constructor(_googleMap: GoogleMap, _elementRef: ElementRef<HTMLElement>);

@@ -90,5 +91,2 @@ ngOnInit(): void;

private _combineOptions;
private _initializeEventHandlers;
/** Clears all currently-registered event listeners. */
private _clearListeners;
}

@@ -9,3 +9,4 @@ /**

/// <reference types="googlemaps" />
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
import { OnDestroy, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { GoogleMap } from '../google-map/google-map';

@@ -28,2 +29,9 @@ /**

private readonly _googleMap;
private _eventManager;
private readonly _options;
private readonly _title;
private readonly _position;
private readonly _label;
private readonly _clickable;
private readonly _destroy;
options: google.maps.MarkerOptions;

@@ -38,3 +46,3 @@ title: string;

*/
animationChanged: EventEmitter<void>;
animationChanged: Observable<void>;
/**

@@ -44,3 +52,3 @@ * See

*/
mapClick: EventEmitter<google.maps.MouseEvent>;
mapClick: Observable<google.maps.MouseEvent>;
/**

@@ -50,3 +58,3 @@ * See

*/
clickableChanged: EventEmitter<void>;
clickableChanged: Observable<void>;
/**

@@ -56,3 +64,3 @@ * See

*/
cursorChanged: EventEmitter<void>;
cursorChanged: Observable<void>;
/**

@@ -62,3 +70,3 @@ * See

*/
mapDblclick: EventEmitter<google.maps.MouseEvent>;
mapDblclick: Observable<google.maps.MouseEvent>;
/**

@@ -68,3 +76,3 @@ * See

*/
mapDrag: EventEmitter<google.maps.MouseEvent>;
mapDrag: Observable<google.maps.MouseEvent>;
/**

@@ -74,3 +82,3 @@ * See

*/
mapDragend: EventEmitter<google.maps.MouseEvent>;
mapDragend: Observable<google.maps.MouseEvent>;
/**

@@ -80,3 +88,3 @@ * See

*/
draggableChanged: EventEmitter<void>;
draggableChanged: Observable<void>;
/**

@@ -86,3 +94,3 @@ * See

*/
mapDragstart: EventEmitter<google.maps.MouseEvent>;
mapDragstart: Observable<google.maps.MouseEvent>;
/**

@@ -92,3 +100,3 @@ * See

*/
flatChanged: EventEmitter<void>;
flatChanged: Observable<void>;
/**

@@ -98,3 +106,3 @@ * See

*/
iconChanged: EventEmitter<void>;
iconChanged: Observable<void>;
/**

@@ -104,3 +112,3 @@ * See

*/
mapMousedown: EventEmitter<google.maps.MouseEvent>;
mapMousedown: Observable<google.maps.MouseEvent>;
/**

@@ -110,3 +118,3 @@ * See

*/
mapMouseout: EventEmitter<google.maps.MouseEvent>;
mapMouseout: Observable<google.maps.MouseEvent>;
/**

@@ -116,3 +124,3 @@ * See

*/
mapMouseover: EventEmitter<google.maps.MouseEvent>;
mapMouseover: Observable<google.maps.MouseEvent>;
/**

@@ -122,3 +130,3 @@ * See

*/
mapMouseup: EventEmitter<google.maps.MouseEvent>;
mapMouseup: Observable<google.maps.MouseEvent>;
/**

@@ -128,3 +136,3 @@ * See

*/
positionChanged: EventEmitter<void>;
positionChanged: Observable<void>;
/**

@@ -134,3 +142,3 @@ * See

*/
mapRightclick: EventEmitter<google.maps.MouseEvent>;
mapRightclick: Observable<google.maps.MouseEvent>;
/**

@@ -140,3 +148,3 @@ * See

*/
shapeChanged: EventEmitter<void>;
shapeChanged: Observable<void>;
/**

@@ -146,3 +154,3 @@ * See

*/
titleChanged: EventEmitter<void>;
titleChanged: Observable<void>;
/**

@@ -152,3 +160,3 @@ * See

*/
visibleChanged: EventEmitter<void>;
visibleChanged: Observable<void>;
/**

@@ -158,10 +166,3 @@ * See

*/
zindexChanged: EventEmitter<void>;
private readonly _options;
private readonly _title;
private readonly _position;
private readonly _label;
private readonly _clickable;
private readonly _destroy;
private _listeners;
zindexChanged: Observable<void>;
_marker?: google.maps.Marker;

@@ -237,5 +238,2 @@ constructor(_googleMap: GoogleMap);

private _watchForClickableChanges;
private _initializeEventHandlers;
/** Clears all currently-registered event listeners. */
private _clearListeners;
}
{
"name": "@angular/google-maps",
"version": "9.0.0-rc.4",
"version": "9.0.0-rc.5",
"description": "Angular Google Maps",

@@ -5,0 +5,0 @@ "main": "./bundles/google-maps.umd.js",

@@ -9,4 +9,5 @@ /**

export { GoogleMap } from './google-map/google-map';
export { MapMarker } from './map-marker/map-marker';
export { GoogleMapsModule } from './google-maps-module';
export { MapInfoWindow } from './map-info-window/map-info-window';
export { MapMarker } from './map-marker/map-marker';
export { MapPolyline } from './map-polyline/map-polyline';

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc