Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

rfx-scroll-animation

Package Overview
Dependencies
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rfx-scroll-animation - npm Package Compare versions

Comparing version 3.4.0 to 3.5.0

46

bundles/rfx-scroll-animation.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/platform-browser'), require('@angular/platform-browser/animations'), require('rxjs'), require('@angular/animations')) :
typeof define === 'function' && define.amd ? define('rfx-scroll-animation', ['exports', '@angular/core', '@angular/platform-browser', '@angular/platform-browser/animations', 'rxjs', '@angular/animations'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['rfx-scroll-animation'] = {}, global.ng.core, global.ng.platformBrowser, global.ng.platformBrowser.animations, global.rxjs, global.ng.animations));
}(this, (function (exports, i0, platformBrowser, animations$1, rxjs, animations) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/platform-browser'), require('@angular/platform-browser/animations'), require('rxjs'), require('@angular/common'), require('@angular/animations')) :
typeof define === 'function' && define.amd ? define('rfx-scroll-animation', ['exports', '@angular/core', '@angular/platform-browser', '@angular/platform-browser/animations', 'rxjs', '@angular/common', '@angular/animations'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['rfx-scroll-animation'] = {}, global.ng.core, global.ng.platformBrowser, global.ng.platformBrowser.animations, global.rxjs, global.ng.common, global.ng.animations));
}(this, (function (exports, i0, platformBrowser, animations$1, rxjs, common, animations) { 'use strict';

@@ -581,3 +581,3 @@ function _interopNamespace(e) {

var RfxScrollAnimationService = /** @class */ (function () {
function RfxScrollAnimationService(scrollEventService, resizeEventService, heightEventService, elementsManagementService) {
function RfxScrollAnimationService(scrollEventService, resizeEventService, heightEventService, elementsManagementService, platformId) {
this.scrollEventService = scrollEventService;

@@ -587,2 +587,4 @@ this.resizeEventService = resizeEventService;

this.elementsManagementService = elementsManagementService;
this.platformId = platformId;
this.isBrowser = common.isPlatformBrowser(this.platformId);
}

@@ -604,10 +606,11 @@ RfxScrollAnimationService.prototype.ngOnDestroy = function () {

* Default body element is the document element.
* @param {HTMLElement} element - Scroll element to use.
* @param {HTMLElement | Document | undefined} element - Scroll element to use.
*/
RfxScrollAnimationService.prototype.initListeners = function (element) {
if (element === void 0) { element = document; }
this.destroyListeners();
this.scrollEventService.createListener(element);
this.resizeEventService.createListener();
this.heightEventService.createListener(element);
if (this.isBrowser) {
this.scrollEventService.createListener(element !== null && element !== void 0 ? element : document);
this.resizeEventService.createListener();
this.heightEventService.createListener(element !== null && element !== void 0 ? element : document);
}
};

@@ -637,3 +640,3 @@ /**

}());
RfxScrollAnimationService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function RfxScrollAnimationService_Factory() { return new RfxScrollAnimationService(i0__namespace.ɵɵinject(ScrollEventService), i0__namespace.ɵɵinject(ResizeEventService), i0__namespace.ɵɵinject(HeightEventService), i0__namespace.ɵɵinject(ElementsManagementService)); }, token: RfxScrollAnimationService, providedIn: "root" });
RfxScrollAnimationService.ɵprov = i0__namespace.ɵɵdefineInjectable({ factory: function RfxScrollAnimationService_Factory() { return new RfxScrollAnimationService(i0__namespace.ɵɵinject(ScrollEventService), i0__namespace.ɵɵinject(ResizeEventService), i0__namespace.ɵɵinject(HeightEventService), i0__namespace.ɵɵinject(ElementsManagementService), i0__namespace.ɵɵinject(i0__namespace.PLATFORM_ID)); }, token: RfxScrollAnimationService, providedIn: "root" });
RfxScrollAnimationService.decorators = [

@@ -648,3 +651,4 @@ { type: i0.Injectable, args: [{

{ type: HeightEventService },
{ type: ElementsManagementService }
{ type: ElementsManagementService },
{ type: Object, decorators: [{ type: i0.Inject, args: [i0.PLATFORM_ID,] }] }
]; };

@@ -685,3 +689,3 @@

var RfxScrollAnimationComponent = /** @class */ (function () {
function RfxScrollAnimationComponent(htmlElement, renderer, scrollEventService, heightEventService, resizeEventService, elementsManagementService) {
function RfxScrollAnimationComponent(htmlElement, renderer, scrollEventService, heightEventService, resizeEventService, elementsManagementService, platformId) {
this.htmlElement = htmlElement;

@@ -693,2 +697,3 @@ this.renderer = renderer;

this.elementsManagementService = elementsManagementService;
this.platformId = platformId;
this.animationType = exports.AnimationTypeEnum.NONE;

@@ -709,2 +714,3 @@ this.animationDistancePx = 25;

this.elementIndex = this.elementsManagementService.registerElement(this);
this.isBrowser = common.isPlatformBrowser(platformId);
}

@@ -731,3 +737,5 @@ Object.defineProperty(RfxScrollAnimationComponent.prototype, "visibility", {

RfxScrollAnimationComponent.prototype.ngAfterViewInit = function () {
this.createListeners();
if (this.isBrowser) {
this.createListeners();
}
this.subscribeToElementsReadyEvent();

@@ -805,3 +813,8 @@ this.elementsManagementService.setElementReady(this.elementIndex);

_this.isPageReady = true;
_this.calculateElementProperties();
if (_this.isBrowser) {
_this.calculateElementProperties();
}
else {
_this.setVisibility(exports.AnimationVisibilityEnum.VISIBLE);
}
}

@@ -971,3 +984,4 @@ });

{ type: ResizeEventService },
{ type: ElementsManagementService }
{ type: ElementsManagementService },
{ type: Object, decorators: [{ type: i0.Inject, args: [i0.PLATFORM_ID,] }] }
]; };

@@ -974,0 +988,0 @@ RfxScrollAnimationComponent.propDecorators = {

@@ -1,7 +0,8 @@

import { Component, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2 } from '@angular/core';
import { Component, ElementRef, EventEmitter, HostBinding, Inject, Input, Output, PLATFORM_ID, Renderer2 } from '@angular/core';
import { ElementsManagementService, ScrollEventService, ResizeEventService, HeightEventService } from '../../services';
import { visibilityAnimation } from '../../animations';
import { AnimationTypeEnum, AnimationVisibilityEnum } from '../../models';
import { isPlatformBrowser } from '@angular/common';
export class RfxScrollAnimationComponent {
constructor(htmlElement, renderer, scrollEventService, heightEventService, resizeEventService, elementsManagementService) {
constructor(htmlElement, renderer, scrollEventService, heightEventService, resizeEventService, elementsManagementService, platformId) {
this.htmlElement = htmlElement;

@@ -13,2 +14,3 @@ this.renderer = renderer;

this.elementsManagementService = elementsManagementService;
this.platformId = platformId;
this.animationType = AnimationTypeEnum.NONE;

@@ -29,2 +31,3 @@ this.animationDistancePx = 25;

this.elementIndex = this.elementsManagementService.registerElement(this);
this.isBrowser = isPlatformBrowser(platformId);
}

@@ -47,3 +50,5 @@ /**

ngAfterViewInit() {
this.createListeners();
if (this.isBrowser) {
this.createListeners();
}
this.subscribeToElementsReadyEvent();

@@ -117,3 +122,8 @@ this.elementsManagementService.setElementReady(this.elementIndex);

this.isPageReady = true;
this.calculateElementProperties();
if (this.isBrowser) {
this.calculateElementProperties();
}
else {
this.setVisibility(AnimationVisibilityEnum.VISIBLE);
}
}

@@ -280,3 +290,4 @@ });

{ type: ResizeEventService },
{ type: ElementsManagementService }
{ type: ElementsManagementService },
{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
];

@@ -295,2 +306,2 @@ RfxScrollAnimationComponent.propDecorators = {

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmZ4LXNjcm9sbC1hbmltYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmZ4LXNjcm9sbC1hbmltYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL3JmeC1zY3JvbGwtYW5pbWF0aW9uL3JmeC1zY3JvbGwtYW5pbWF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXdCLE1BQU0sRUFBRSxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRS9KLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBeUIsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQW9CLE1BQU0sY0FBYyxDQUFDO0FBV25ILE1BQU0sT0FBTywyQkFBMkI7SUF5S3RDLFlBQ1UsV0FBdUIsRUFDdkIsUUFBbUIsRUFDbkIsa0JBQXNDLEVBQ3RDLGtCQUFzQyxFQUN0QyxrQkFBc0MsRUFDdEMseUJBQW9EO1FBTHBELGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUU1RCxJQUFJLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUM1QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsZ0NBQWdDLENBQUM7UUFDakUsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUN4RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztRQUMxRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUF4Q0Q7O09BRUc7SUFDSCxJQUNJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVELEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CO1lBQy9CLE1BQU0sRUFBRTtnQkFDTixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2dCQUN2Qyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCO2dCQUN2RCxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO2dCQUMvQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUN6QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7YUFDNUI7U0FDRixDQUFBO0lBQ0gsQ0FBQztJQTJCTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQXNCOztRQUN2QyxJQUNFLENBQUEsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsYUFBYSwwQ0FBRSxZQUFZLE1BQUssU0FBUztZQUNsRCxDQUFBLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLG1CQUFtQiwwQ0FBRSxZQUFZLE1BQUssU0FBUztZQUN4RCxDQUFBLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFVBQVUsMENBQUUsWUFBWSxNQUFLLFNBQVMsRUFDL0M7WUFDQSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUM5QyxJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsbUJBQW1CLEVBQ3hCLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjs7UUFDdEIsTUFBQSxJQUFJLENBQUMsMEJBQTBCLDBDQUFFLFdBQVcsRUFBRSxDQUFDO1FBQy9DLE1BQUEsSUFBSSxDQUFDLDBCQUEwQiwwQ0FBRSxXQUFXLEVBQUUsQ0FBQztRQUMvQyxNQUFBLElBQUksQ0FBQywwQkFBMEIsMENBQUUsV0FBVyxFQUFFLENBQUM7UUFDL0MsTUFBQSxJQUFJLENBQUMsaUNBQWlDLDBDQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7O09BR0c7SUFDSyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQzdFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUN4QyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNLLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsQ0FDN0UsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLE1BQU0sRUFBRTtnQkFDckMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7YUFDbkM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FDbEYsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssNkJBQTZCO1FBQ25DLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQ2xHLENBQUMsT0FBZ0IsRUFBRSxFQUFFOztZQUNuQixJQUFJLE9BQU8sRUFBRTtnQkFDWCxNQUFBLElBQUksQ0FBQyxpQ0FBaUMsMENBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQzthQUNuQztRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSwwQkFBMEI7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxNQUFNLGNBQWMsR0FBVyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFXLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFbEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQ3ZELENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQ3RILENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxpQkFBaUIsQ0FBQyxPQUFvQixFQUFFLE1BQWMsRUFBRSxjQUFzQjtRQUNwRixNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3RCxNQUFNLFVBQVUsR0FBVyxXQUFXLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNwRCxNQUFNLFdBQVcsR0FBVyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFXLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFDakQsTUFBTSxVQUFVLEdBQVcsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUNwRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSyxvQkFBb0IsQ0FDMUIsT0FBb0IsRUFDcEIsTUFBYyxFQUNkLGNBQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLGdDQUF3QztRQUV4QyxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3RCxNQUFNLGdCQUFnQixHQUFXLGNBQWMsR0FBRyxnQ0FBZ0MsR0FBRyxHQUFHLENBQUM7UUFDekYsTUFBTSxhQUFhLEdBQVcsV0FBVyxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsY0FBYyxHQUFHLGdCQUFnQixDQUFDO1FBQzNGLE1BQU0saUJBQWlCLEdBQVcsWUFBWSxHQUFHLGNBQWMsQ0FBQztRQUNoRSxPQUFPLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssbUJBQW1CLENBQUMsYUFBeUMsRUFBRSxzQkFBOEIsQ0FBQyxFQUFFLGFBQXFCLENBQUM7UUFDNUgsUUFBUSxhQUFhLEVBQUU7WUFDckIsS0FBSyxpQkFBaUIsQ0FBQyxHQUFHO2dCQUN4QixPQUFPLGlCQUFpQixtQkFBbUIsY0FBYyxDQUFDO1lBQzVELEtBQUssaUJBQWlCLENBQUMsTUFBTTtnQkFDM0IsT0FBTyxnQkFBZ0IsbUJBQW1CLGNBQWMsQ0FBQztZQUMzRCxLQUFLLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3pCLE9BQU8sY0FBYyxtQkFBbUIsaUJBQWlCLENBQUM7WUFDNUQsS0FBSyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLGFBQWEsbUJBQW1CLGlCQUFpQixDQUFDO1lBQzNELEtBQUssaUJBQWlCLENBQUMsSUFBSTtnQkFDekIsT0FBTyx5QkFBeUIsVUFBVSxHQUFHLENBQUM7WUFDaEQ7Z0JBQ0UsT0FBTywwQkFBMEIsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssYUFBYSxDQUFDLE1BQWM7UUFDbEMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7WUFDakcsTUFBTSxVQUFVLEdBQTRCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRS9GLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxVQUFVLEtBQUssdUJBQXVCLENBQUMsT0FBTyxFQUFFO2dCQUMxRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUN6QjtZQUVELElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNoQztZQUVELE1BQU0sZUFBZSxHQUFZLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUVuRixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRTtnQkFDM0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNyQztZQUVELElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxVQUFVLEtBQUssdUJBQXVCLENBQUMsT0FBTyxFQUFFO2dCQUMxRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzNCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssYUFBYSxDQUFDLE1BQWMsRUFBRSxpQkFBeUI7UUFDN0QsTUFBTSxTQUFTLEdBQVksTUFBTSxJQUFJLGlCQUFpQixDQUFDO1FBQ3ZELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztJQUN0RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGFBQWEsQ0FBQyxPQUFnQztRQUNuRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssYUFBYSxDQUFDLFVBQW1CO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUM5QixhQUFhLEVBQ2IsVUFBVSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssZUFBZSxDQUFDLE1BQWMsRUFBRSxjQUFnQztRQUN0RSxPQUFPLE1BQU0sSUFBSSxjQUFjLENBQUMsR0FBRyxJQUFJLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ3pFLENBQUM7OztZQW5kRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMseUNBQW9EO2dCQUVwRCxVQUFVLEVBQUU7b0JBQ1YsbUJBQW1CO2lCQUNwQjs7YUFDRjs7O1lBZGtDLFVBQVU7WUFBa0UsU0FBUztZQUVwRixrQkFBa0I7WUFBc0Isa0JBQWtCO1lBQXRDLGtCQUFrQjtZQUFqRSx5QkFBeUI7Ozs0QkFvQi9CLEtBQUs7a0NBU0wsS0FBSzt5QkFTTCxLQUFLO21DQVVMLEtBQUs7Z0NBVUwsS0FBSzt1Q0FRTCxLQUFLOytDQVFMLEtBQUs7OEJBUUwsS0FBSzttQ0FPTCxNQUFNO3lCQStFTixXQUFXLFNBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRWxlbWVudHNNYW5hZ2VtZW50U2VydmljZSwgU2Nyb2xsRXZlbnRTZXJ2aWNlLCBSZXNpemVFdmVudFNlcnZpY2UsIEhlaWdodEV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgdmlzaWJpbGl0eUFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBBbmltYXRpb25FeHBJbnRlcmZhY2UsIEFuaW1hdGlvblR5cGVFbnVtLCBBbmltYXRpb25WaXNpYmlsaXR5RW51bSwgU2VjdGlvbkFyZWFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbbGliUmZ4U2Nyb2xsQW5pbWF0aW9uXScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JmeC1zY3JvbGwtYW5pbWF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZngtc2Nyb2xsLWFuaW1hdGlvbi5jb21wb25lbnQubGVzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHZpc2liaWxpdHlBbmltYXRpb25cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZnhTY3JvbGxBbmltYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgLyoqXHJcbiAgICogRWxlbWVudCBhbmltYXRpb24gdHlwZS5cclxuICAgKiBEZWZhdWx0IGlzIE5PTkUuXHJcbiAgICogTXVzdCBiZSAnTk9ORScgaWYgeW91IHdhbnQgdG8gaW1wbGVtZW50IGN1c3RvbSBhbmltYXRpb24uXHJcbiAgICogQHR5cGUge0FuaW1hdGlvblR5cGVFbnVtfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFuaW1hdGlvblR5cGU6IEFuaW1hdGlvblR5cGVFbnVtIHwgc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBFbGVtZW50IGFuaW1hdGlvbiBzaGlmdCBmcm9tIGNvcnJlY3QgcG9zaXRpb24uXHJcbiAgICogSWYgemVybywgdGhlcmUgaXMgbm8gYW5pbWF0aW9uLlxyXG4gICAqIERlZmF1bHQgaXMgMjVweC5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFuaW1hdGlvbkRpc3RhbmNlUHg6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogWm9vbSBhbmltYXRpb24gcmF0aW8uXHJcbiAgICogQ2FuIGJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLlxyXG4gICAqIERlZmF1bHQgaXMgMS41LlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2NhbGVSYXRpbzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBBbmltYXRpb24gdHJhbnNpdGlvbiBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICogTXVzdCBiZSBtb3JlIG9yIGVxdWFsIHRvIHplcm8uXHJcbiAgICogSWYgemVybywgdGhlcmUgaXMgbm8gYW5pbWF0aW9uLlxyXG4gICAqIERlZmF1bHQgaXMgNTAwLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdHJhbnNpdGlvbkR1cmF0aW9uTXM6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogQW5pbWF0aW9uIHRyYW5zaXRpb24gZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAqIE11c3QgYmUgbW9yZSBvciBlcXVhbCB0byB6ZXJvLlxyXG4gICAqIElmIHplcm8sIHRoZXJlIGlzIG5vIGRlbGF5LlxyXG4gICAqIERlZmF1bHQgaXMgMC5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHRyYW5zaXRpb25EZWxheU1zOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuaW1hdGlvbiB0aW1pbmcgZnVuY3Rpb25cclxuICAgKiBEZWZhdWx0IGlzICdjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknLlxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhvdyBtdWNoIHNwYWNlIChpbiBwZXJjZW50YWdlKSBmcm9tIHRoZSBib3R0b20gb2YgdGhlIHBhZ2VcclxuICAgKiBiZWZvcmUgdGhlIGVsZW1lbnQgaXMgY29uc2lkZXJlZCB0byBiZSB2aXNpYmxlLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGlzdGFuY2VGcm9tUGFnZUJvdHRvbVBlcmNlbnRhZ2U6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdHJ1ZSwgZWxlbWVudCBhcHBlYXJzIG9ubHkgb25jZSBhbmQgbmV2ZXIgaGlkZXMuXHJcbiAgICogRGVmYXVsdCBpcyB0cnVlLlxyXG4gICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlzT25seUZpcnN0VGltZTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdCBlbGVtZW50IHZpc2liaWxpdHkgY2hhbmdlIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNWaXNpYmxlXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGVsZW1lbnRWaXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byBib2R5IGhlaWdodCBjaGFuZ2VzLlxyXG4gICAqIEB0eXBlIHtTdWJzY3JpcHRpb259XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBoZWlnaHRMaXN0ZW5lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gc2Nyb2xsIHZhbHVlIGNoYW5nZXMuXHJcbiAgICogQHR5cGUge1N1YnNjcmlwdGlvbn1cclxuICAgKi9cclxuICBwcml2YXRlIHNjcm9sbExpc3RlbmVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB3aW5kb3cgcmVzaXplIGNoYW5nZXMuXHJcbiAgICogQHR5cGUge1N1YnNjcmlwdGlvbn1cclxuICAgKi9cclxuICBwcml2YXRlIHJlc2l6ZUxpc3RlbmVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byBlbGVtZW50cyByZWFkeSB2YWx1ZSBjaGFuZ2VzLlxyXG4gICAqIEB0eXBlIHtTdWJzY3JpcHRpb259XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbGVtZW50c1JlYWR5TGlzdGVuZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQW5pbWF0aW9uIHZpc2liaWxpdHkgc3RhdHVzLlxyXG4gICAqIENhbiBiZSAnSElEREVOJyBvciAnVklTSUJMRScuXHJcbiAgICogQHR5cGUge0FuaW1hdGlvblZpc2liaWxpdHlFbnVtfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYW5pbWF0aW9uVmlzaWJpbGl0eTogQW5pbWF0aW9uVmlzaWJpbGl0eUVudW07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuaW1hdGlvbiB3aWxsIGNoYW5nZSB2YWx1ZS5cclxuICAgKi9cclxuICBwcml2YXRlIGFuaW1hdGlvbldpbGxDaGFuZ2U6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1cnJlbnQgdHJhbnNmb3JtIHZhbHVlLlxyXG4gICAqIERlZmF1bHQgaXMgJ3RyYW5zbGF0ZSgwLCAwKSBzY2FsZSgxKScuXHJcbiAgICogQHR5cGUge3N0cmluZ31cclxuICAgKi9cclxuICBwcml2YXRlIGN1cnJlbnRUcmFuc2Zvcm06IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VycmVudCBwYWdlIGhlaWdodCBpbiBwaXhlbHMuXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBwcml2YXRlIGN1cnJlbnRQYWdlSGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIElzIHBhZ2UgcmVhZHkgdG8gYW5pbWF0ZSBlbGVtZW50cy5cclxuICAgKiBEZWZhdWx0IGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNQYWdlUmVhZHk6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVyZWQgZWxlbWVudCBpbmRleCBpbnNpZGUgc2VydmljZS5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBlbGVtZW50SW5kZXg6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogVmFsdWUgd2hlcmUgdGhlIGVsZW1lbnQgaXMgY29uc2lkZXJlZCB0byBiZSB2aXNpYmxlLlxyXG4gICAqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSB2aXNpYmlsaXR5QmFycmllcjogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBWYWx1ZXMgd2hlcmUgdGhlIGVsZW1lbnQgaGF2ZSB3aWxsLWNoYW5nZSBwcm9wZXJ0eS5cclxuICAgKiBAdHlwZSB7U2VjdGlvbkFyZWFNb2RlbCB8IHVuZGVmaW5lZH1cclxuICAgKi9cclxuICBwcml2YXRlIHdpbGxDaGFuZ2VBcmVhOiBTZWN0aW9uQXJlYU1vZGVsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBCaW5kIHZpc2liaWxpdHkgYW5pbWF0aW9uIHRvIGhvc3QgZWxlbWVudC5cclxuICAgKi9cclxuICBASG9zdEJpbmRpbmcoJ0B2aXNpYmlsaXR5JylcclxuICBnZXQgdmlzaWJpbGl0eSgpOiBBbmltYXRpb25FeHBJbnRlcmZhY2UgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmFuaW1hdGlvblR5cGUgPT09IEFuaW1hdGlvblR5cGVFbnVtLk5PTkUgPyBudWxsIDoge1xyXG4gICAgICB2YWx1ZTogdGhpcy5hbmltYXRpb25WaXNpYmlsaXR5LFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBjdXJyZW50VHJhbnNmb3JtOiB0aGlzLmN1cnJlbnRUcmFuc2Zvcm0sXHJcbiAgICAgICAgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiB0aGlzLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbixcclxuICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb25NczogdGhpcy50cmFuc2l0aW9uRHVyYXRpb25NcyxcclxuICAgICAgICB0cmFuc2l0aW9uRGVsYXlNczogdGhpcy50cmFuc2l0aW9uRGVsYXlNcyxcclxuICAgICAgICBzY2FsZVJhdGlvOiB0aGlzLnNjYWxlUmF0aW9cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0bWxFbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBzY3JvbGxFdmVudFNlcnZpY2U6IFNjcm9sbEV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgaGVpZ2h0RXZlbnRTZXJ2aWNlOiBIZWlnaHRFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc2l6ZUV2ZW50U2VydmljZTogUmVzaXplRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50c01hbmFnZW1lbnRTZXJ2aWNlOiBFbGVtZW50c01hbmFnZW1lbnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFuaW1hdGlvblR5cGUgPSBBbmltYXRpb25UeXBlRW51bS5OT05FO1xyXG4gICAgdGhpcy5hbmltYXRpb25EaXN0YW5jZVB4ID0gMjU7XHJcbiAgICB0aGlzLnNjYWxlUmF0aW8gPSAxLjU7XHJcbiAgICB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbk1zID0gNTAwO1xyXG4gICAgdGhpcy50cmFuc2l0aW9uRGVsYXlNcyA9IDA7XHJcbiAgICB0aGlzLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiA9ICdjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknO1xyXG4gICAgdGhpcy5kaXN0YW5jZUZyb21QYWdlQm90dG9tUGVyY2VudGFnZSA9IDIwO1xyXG4gICAgdGhpcy5pc09ubHlGaXJzdFRpbWUgPSB0cnVlO1xyXG4gICAgdGhpcy5lbGVtZW50VmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgIHRoaXMuY3VycmVudFRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoMCwgMCkgc2NhbGUoMSknO1xyXG4gICAgdGhpcy5hbmltYXRpb25WaXNpYmlsaXR5ID0gQW5pbWF0aW9uVmlzaWJpbGl0eUVudW0uSElEREVOO1xyXG4gICAgdGhpcy5hbmltYXRpb25XaWxsQ2hhbmdlID0gdHJ1ZTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2VIZWlnaHQgPSAwO1xyXG4gICAgdGhpcy5pc1BhZ2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5lbGVtZW50SW5kZXggPSB0aGlzLmVsZW1lbnRzTWFuYWdlbWVudFNlcnZpY2UucmVnaXN0ZXJFbGVtZW50KHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlTGlzdGVuZXJzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvRWxlbWVudHNSZWFkeUV2ZW50KCk7XHJcbiAgICB0aGlzLmVsZW1lbnRzTWFuYWdlbWVudFNlcnZpY2Uuc2V0RWxlbWVudFJlYWR5KHRoaXMuZWxlbWVudEluZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoYW5nZXM/LmFuaW1hdGlvblR5cGU/LmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIGNoYW5nZXM/LmFuaW1hdGlvbkRpc3RhbmNlUHg/LmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIGNoYW5nZXM/LnNjYWxlUmF0aW8/LmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jdXJyZW50VHJhbnNmb3JtID0gdGhpcy5nZXRDdXJyZW50VHJhbnNmb3JtKFxyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uVHlwZSxcclxuICAgICAgICB0aGlzLmFuaW1hdGlvbkRpc3RhbmNlUHgsXHJcbiAgICAgICAgdGhpcy5zY2FsZVJhdGlvXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3lMaXN0ZW5lcnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBsaXN0ZW5lcnMuXHJcbiAgICogRGVzdHJveSBhbGwgZXhpc3RpbmcgbGlzdGVuZXJzIGJlZm9yZSBjcmVhdGluZyBuZXcgb25lcy5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUxpc3RlbmVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveUxpc3RlbmVycygpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb1Jlc2l6ZUV2ZW50KCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvSGVpZ2h0RXZlbnQoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9TY3JvbGxFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVzdHJveSBhbGwgbGlzdGVuZXJzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVzdHJveUxpc3RlbmVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVpZ2h0TGlzdGVuZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNjcm9sbExpc3RlbmVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5yZXNpemVMaXN0ZW5lclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZWxlbWVudHNSZWFkeUxpc3RlbmVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaWJlIHRvIHdpbmRvdyByZXNpemUgZXZlbnQuXHJcbiAgICogV2hlbiB3aW5kb3cgaXMgcmVzaXplZCwgdXBkYXRlIGVsZW1lbnQgcHJvcGVydGllcy5cclxuICAgKi9cclxuICBwcml2YXRlIHN1YnNjcmliZVRvUmVzaXplRXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyU3Vic2NyaXB0aW9uID0gdGhpcy5yZXNpemVFdmVudFNlcnZpY2UuZ2V0UmVzaXplKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoKSA9PiB0aGlzLmNhbGN1bGF0ZUVsZW1lbnRQcm9wZXJ0aWVzKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gaGVpZ2h0IGNoYW5nZSBldmVudC5cclxuICAgKiBXaGVuIGhlaWdodCBjaGFuZ2UsIHVwZGF0ZSBlbGVtZW50IHByb3BlcnRpZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0hlaWdodEV2ZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWlnaHRMaXN0ZW5lclN1YnNjcmlwdGlvbiA9IHRoaXMuaGVpZ2h0RXZlbnRTZXJ2aWNlLmdldEhlaWdodCgpLnN1YnNjcmliZShcclxuICAgICAgKGhlaWdodCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSGVpZ2h0ICE9PSBoZWlnaHQpIHtcclxuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlRWxlbWVudFByb3BlcnRpZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gc2Nyb2xsIGNoYW5nZSBldmVudC5cclxuICAgKi9cclxuICBwcml2YXRlIHN1YnNjcmliZVRvU2Nyb2xsRXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNjcm9sbExpc3RlbmVyU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxFdmVudFNlcnZpY2UuZ2V0TW91c2VTY3JvbGwoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChzY3JvbGw6IG51bWJlcikgPT4gdGhpcy5vblNjcm9sbEV2ZW50KHNjcm9sbClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gZWxlbWVudHMgcmVhZHkgZmxhZyBldmVudC5cclxuICAgKiBJZiBlbGVtZW50cyBhcmUgcmVhZHksIGNhbGN1bGF0ZSBlbGVtZW50IHByb3BlcnRpZXMgYW5kIGRlc3Ryb3kgdGhpcyBsaXN0ZW5lci5cclxuICAgKi9cclxuICBwcml2YXRlIHN1YnNjcmliZVRvRWxlbWVudHNSZWFkeUV2ZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbGVtZW50c1JlYWR5TGlzdGVuZXJTdWJzY3JpcHRpb24gPSB0aGlzLmVsZW1lbnRzTWFuYWdlbWVudFNlcnZpY2UuZ2V0RWxlbWVudHNSZWFkeSgpLnN1YnNjcmliZShcclxuICAgICAgKGlzUmVhZHk6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoaXNSZWFkeSkge1xyXG4gICAgICAgICAgdGhpcy5lbGVtZW50c1JlYWR5TGlzdGVuZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB0aGlzLmlzUGFnZVJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlRWxlbWVudFByb3BlcnRpZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhdGUgYW5kIHNldCB3aWxsLWNoYW5nZSBhcmVhLlxyXG4gICAqIENhbGN1bGF0ZSBhbmQgc2V0IHZpc2liaWxpdHkgYmFycmllci5cclxuICAgKiBUcmlnZ2VyIHBhZ2Ugc2Nyb2xsIGV2ZW50IHNvIHRoYXQgZWxlbWVudCBjYW4gYmUgdXBkYXRlZC5cclxuICAgKi9cclxuICBwdWJsaWMgY2FsY3VsYXRlRWxlbWVudFByb3BlcnRpZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpc2liaWxpdHlCYXJyaWVyID0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3Qgd2luZG93SGVpZ2h0UHg6IG51bWJlciA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgIGNvbnN0IHNjcm9sbDogbnVtYmVyID0gdGhpcy5zY3JvbGxFdmVudFNlcnZpY2UuZ2V0TW91c2VTY3JvbGxWYWx1ZSgpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZUhlaWdodCA9IHRoaXMuaGVpZ2h0RXZlbnRTZXJ2aWNlLmdldEhlaWdodFZhbHVlKCk7XHJcblxyXG4gICAgdGhpcy53aWxsQ2hhbmdlQXJlYSA9IHRoaXMuZ2V0V2lsbENoYW5nZUFyZWEoXHJcbiAgICAgIHRoaXMuaHRtbEVsZW1lbnQubmF0aXZlRWxlbWVudCwgc2Nyb2xsLCB3aW5kb3dIZWlnaHRQeFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZpc2liaWxpdHlCYXJyaWVyID0gdGhpcy5nZXRWaXNpYmlsaXR5QmFycmllcihcclxuICAgICAgdGhpcy5odG1sRWxlbWVudC5uYXRpdmVFbGVtZW50LCBzY3JvbGwsIHdpbmRvd0hlaWdodFB4LCB0aGlzLmN1cnJlbnRQYWdlSGVpZ2h0LCB0aGlzLmRpc3RhbmNlRnJvbVBhZ2VCb3R0b21QZXJjZW50YWdlXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMub25TY3JvbGxFdmVudChzY3JvbGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsY3VsYXRlIGFyZWEgd2hlcmUgZWxlbWVudCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhbmltYXRlZCBzb29uLlxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGNhbGN1bGF0ZSB3aWxsLWNoYW5nZSBhcmVhIGZvci5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Nyb2xsIC0gQ3VycmVudCBzY3JvbGwgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpbmRvd0hlaWdodFB4IC0gQ3VycmVudCB3aW5kb3cgaGVpZ2h0LlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gV2lsbC1jaGFuZ2UgYXJlYS5cclxuICAgKi9cclxuICBwcml2YXRlIGdldFdpbGxDaGFuZ2VBcmVhKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzY3JvbGw6IG51bWJlciwgd2luZG93SGVpZ2h0UHg6IG51bWJlcik6IFNlY3Rpb25BcmVhTW9kZWwge1xyXG4gICAgY29uc3QgZWxlbWVudFJlY3Q6IERPTVJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgZWxlbWVudFRvcDogbnVtYmVyID0gZWxlbWVudFJlY3QudG9wICsgc2Nyb2xsO1xyXG4gICAgY29uc3QgdHJpZ2dlckFyZWE6IG51bWJlciA9IHdpbmRvd0hlaWdodFB4ICogMjtcclxuICAgIGNvbnN0IGFyZWFUb3A6IG51bWJlciA9IGVsZW1lbnRUb3AgLSB0cmlnZ2VyQXJlYTtcclxuICAgIGNvbnN0IGFyZWFCb3R0b206IG51bWJlciA9IGVsZW1lbnRUb3AgKyB0cmlnZ2VyQXJlYTtcclxuICAgIHJldHVybiB7IHRvcDogYXJlYVRvcCwgYm90dG9tOiBhcmVhQm90dG9tIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdmFsdWUgd2hpY2ggaW5kaWNhdGVzIHdoZXJlIGVsZW1lbnQgaXMgdmlzaWJsZS5cclxuICAgKiBJZiBib3R0b20gbGltaXQgY2Fubm90IGJlIHJlYWNoZWQsIGZvcmNlIGl0IGF0IHRoZSB2ZXJ5IGJvdHRvbSBvZiB0aGUgcGFnZVxyXG4gICAqIHNvIHdlIGNhbiBzZWUgdGhlIGVsZW1lbnQuXHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gY2hlY2suXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNjcm9sbCAtIEN1cnJlbnQgc2Nyb2xsIHZhbHVlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aW5kb3dIZWlnaHRQeCAtIFdpbmRvdyBoZWlnaHQgaW4gcGl4ZWxzLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlSGVpZ2h0UHggLSBQYWdlIGhlaWdodCBpbiBwaXhlbHMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlRnJvbVBhZ2VCb3R0b21QZXJjZW50YWdlIC0gRGlzdGFuY2UgZnJvbSBwYWdlIGJvdHRvbSBpbiBwZXJjZW50YWdlLlxyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gVmlzaWJpbGl0eSBiYXJyaWVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0VmlzaWJpbGl0eUJhcnJpZXIoXHJcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudCxcclxuICAgIHNjcm9sbDogbnVtYmVyLFxyXG4gICAgd2luZG93SGVpZ2h0UHg6IG51bWJlcixcclxuICAgIHBhZ2VIZWlnaHRQeDogbnVtYmVyLFxyXG4gICAgZGlzdGFuY2VGcm9tUGFnZUJvdHRvbVBlcmNlbnRhZ2U6IG51bWJlclxyXG4gICk6IG51bWJlciB7XHJcbiAgICBjb25zdCBlbGVtZW50UmVjdDogRE9NUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBib3R0b21EaXN0YW5jZVB4OiBudW1iZXIgPSB3aW5kb3dIZWlnaHRQeCAqIGRpc3RhbmNlRnJvbVBhZ2VCb3R0b21QZXJjZW50YWdlIC8gMTAwO1xyXG4gICAgY29uc3QgYm90dG9tTGltaXRQeDogbnVtYmVyID0gZWxlbWVudFJlY3QudG9wICsgc2Nyb2xsIC0gd2luZG93SGVpZ2h0UHggKyBib3R0b21EaXN0YW5jZVB4O1xyXG4gICAgY29uc3QgYm90dG9tUGFnZUxpbWl0UHg6IG51bWJlciA9IHBhZ2VIZWlnaHRQeCAtIHdpbmRvd0hlaWdodFB4O1xyXG4gICAgcmV0dXJuIGJvdHRvbUxpbWl0UHggPiBib3R0b21QYWdlTGltaXRQeCA/IGJvdHRvbVBhZ2VMaW1pdFB4IDogYm90dG9tTGltaXRQeDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVucyBjdXJyZW50IHRyYW5zZm9ybSB2YWx1ZSBiYXNlZCBvbiBhbmltYXRpb24gdHlwZSwgZGlzdGFuY2UgYW5kIHNjYWxlIHJhdGlvLlxyXG4gICAqIEBwYXJhbSB7QW5pbWF0aW9uVHlwZUVudW19IGFuaW1hdGlvblR5cGUgLSBBbmltYXRpb24gdHlwZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gYW5pbWF0aW9uRGlzdGFuY2VQeCAtIEFuaW1hdGlvbiBkaXN0YW5jZSBpbiBwaXhlbHMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNjYWxlUmF0aW8gLSBTY2FsZSByYXRpby5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEN1cnJlbnQgdHJhbnNmb3JtIHZhbHVlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0Q3VycmVudFRyYW5zZm9ybShhbmltYXRpb25UeXBlOiBBbmltYXRpb25UeXBlRW51bSB8IHN0cmluZywgYW5pbWF0aW9uRGlzdGFuY2VQeDogbnVtYmVyID0gMCwgc2NhbGVSYXRpbzogbnVtYmVyID0gMSk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKGFuaW1hdGlvblR5cGUpIHtcclxuICAgICAgY2FzZSBBbmltYXRpb25UeXBlRW51bS5UT1A6XHJcbiAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoMCwgLSR7YW5pbWF0aW9uRGlzdGFuY2VQeH1weCkgc2NhbGUoMSlgO1xyXG4gICAgICBjYXNlIEFuaW1hdGlvblR5cGVFbnVtLkJPVFRPTTpcclxuICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgwLCAke2FuaW1hdGlvbkRpc3RhbmNlUHh9cHgpIHNjYWxlKDEpYDtcclxuICAgICAgY2FzZSBBbmltYXRpb25UeXBlRW51bS5MRUZUOlxyXG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlKC0ke2FuaW1hdGlvbkRpc3RhbmNlUHh9cHgsIDApIHNjYWxlKDEpYDtcclxuICAgICAgY2FzZSBBbmltYXRpb25UeXBlRW51bS5SSUdIVDpcclxuICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke2FuaW1hdGlvbkRpc3RhbmNlUHh9cHgsIDApIHNjYWxlKDEpYDtcclxuICAgICAgY2FzZSBBbmltYXRpb25UeXBlRW51bS5aT09NOlxyXG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlKDAsIDApIHNjYWxlKCR7c2NhbGVSYXRpb30pYDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLCAwKSBzY2FsZSgxKSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGwgZXZlbnQgaGFuZGxlcjpcclxuICAgKiAtIGNhbGN1bGF0ZSB2aXNpYmlsaXR5XHJcbiAgICogLSBkZXN0cm95IGxpc3RlbmVycyBpZiBlbGVtZW50IGlzIHZpc2libGUgYW5kIGlzIGEgb25lLXNob3QgZWxlbWVudFxyXG4gICAqIC0gc2V0IGVsZW1lbnQgdmlzaWJpbGl0eSBpZiBjaGFuZ2VkXHJcbiAgICogLSBzZXQgd2lsbC1jaGFuZ2UgcHJvcGVydHkgaWYgZWxlbWVudCBpcyBuZWFyIHRoZSBiYXJyaWVyIHZhbHVlXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNjcm9sbCAtIEN1cnJlbnQgc2Nyb2xsIHZhbHVlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgb25TY3JvbGxFdmVudChzY3JvbGw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNQYWdlUmVhZHkgJiYgdGhpcy52aXNpYmlsaXR5QmFycmllciAhPT0gdW5kZWZpbmVkICYmIHRoaXMud2lsbENoYW5nZUFyZWEgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCB2aXNpYmlsaXR5OiBBbmltYXRpb25WaXNpYmlsaXR5RW51bSA9IHRoaXMuZ2V0VmlzaWJpbGl0eShzY3JvbGwsIHRoaXMudmlzaWJpbGl0eUJhcnJpZXIpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNPbmx5Rmlyc3RUaW1lICYmIHZpc2liaWxpdHkgPT09IEFuaW1hdGlvblZpc2liaWxpdHlFbnVtLlZJU0lCTEUpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lMaXN0ZW5lcnMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHZpc2liaWxpdHkgIT09IHRoaXMuYW5pbWF0aW9uVmlzaWJpbGl0eSkge1xyXG4gICAgICAgIHRoaXMuc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaXNFbGVtZW50SW5BcmVhOiBib29sZWFuID0gdGhpcy5pc0VsZW1lbnRJbkFyZWEoc2Nyb2xsLCB0aGlzLndpbGxDaGFuZ2VBcmVhKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc09ubHlGaXJzdFRpbWUgJiYgKGlzRWxlbWVudEluQXJlYSAhPT0gdGhpcy5hbmltYXRpb25XaWxsQ2hhbmdlKSkge1xyXG4gICAgICAgIHRoaXMuc2V0V2lsbENoYW5nZShpc0VsZW1lbnRJbkFyZWEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pc09ubHlGaXJzdFRpbWUgJiYgdmlzaWJpbGl0eSA9PT0gQW5pbWF0aW9uVmlzaWJpbGl0eUVudW0uVklTSUJMRSkge1xyXG4gICAgICAgIHRoaXMuc2V0V2lsbENoYW5nZShmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB2aXNpYmlsaXR5IHN0YXRlLlxyXG4gICAqIEVsZW1lbnQgaXMgdmlzaWJsZSB3aGVuIHNjcm9sbCBwb3NpdGlvbiBjcm9zc2VzIHZpc2liaWxpdHkgYmFycmllci5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Nyb2xsIC0gU2Nyb2xsIHBvc2l0aW9uLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aXNpYmlsaXR5QmFycmllciAtIHRoZSBsaW1pdCB3aGVyZSB0aGUgZWxlbWVudCBiZWNvbWVzIHZpc2libGUuXHJcbiAgICogQHJldHVybnMge0FuaW1hdGlvblZpc2liaWxpdHlFbnVtfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0VmlzaWJpbGl0eShzY3JvbGw6IG51bWJlciwgdmlzaWJpbGl0eUJhcnJpZXI6IG51bWJlcik6IEFuaW1hdGlvblZpc2liaWxpdHlFbnVtIHtcclxuICAgIGNvbnN0IGlzVmlzaWJsZTogYm9vbGVhbiA9IHNjcm9sbCA+PSB2aXNpYmlsaXR5QmFycmllcjtcclxuICAgIHJldHVybiBpc1Zpc2libGUgPyBBbmltYXRpb25WaXNpYmlsaXR5RW51bS5WSVNJQkxFIDogQW5pbWF0aW9uVmlzaWJpbGl0eUVudW0uSElEREVOO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGVsZW1lbnQgdmlzaWJsaXR5IGFuZCBlbWl0IHZpc2liaWxpdHkgY2hhbmdlIGV2ZW50LlxyXG4gICAqIElmIGFuaW1hdGlvbiBpcyBvbmx5IGZpcnN0IHRpbWUsIHdhaXQgZm9yIGFuaW1hdGlvbiB0byBmaW5pc2ggYW5kIHJlbW92ZSB3aWxsLWNoYW5nZS5cclxuICAgKiBAcGFyYW0ge0FuaW1hdGlvblZpc2liaWxpdHlFbnVtfSB2aXNpYmlsaXR5IC0gVmlzaWJpbGl0eSB2YWx1ZS5cclxuICAgKi9cclxuICBwdWJsaWMgc2V0VmlzaWJpbGl0eSh2aXNpYmxlOiBBbmltYXRpb25WaXNpYmlsaXR5RW51bSk6IHZvaWQge1xyXG4gICAgdGhpcy5hbmltYXRpb25WaXNpYmlsaXR5ID0gdmlzaWJsZTtcclxuICAgIHRoaXMuZWxlbWVudFZpc2libGVDaGFuZ2UuZW1pdCh2aXNpYmxlID09PSBBbmltYXRpb25WaXNpYmlsaXR5RW51bS5WSVNJQkxFKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IGVsZW1lbnQgdmlzaWJpbGl0eSBzdGF0ZS5cclxuICAgKiBVc2VmdWxsIHdoZW4gZWxlbWVudCBpcyBhIG9uZS1zaG90IGVsZW1lbnQgYW5kXHJcbiAgICogd2Ugd2FudCB0byBoaWRlIGl0IGFmdGVyIGl0IGhhcyBiZWVuIHZpc2libGUuXHJcbiAgICovXHJcbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jcmVhdGVMaXN0ZW5lcnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBlbGVtZW50IHdpbGwtY2hhbmdlIHByb3BlcnR5LlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gd2lsbENoYW5nZSAtIHdpbGwtY2hhbmdlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRXaWxsQ2hhbmdlKHdpbGxDaGFuZ2U6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuYW5pbWF0aW9uV2lsbENoYW5nZSA9IHdpbGxDaGFuZ2U7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxyXG4gICAgICB0aGlzLmh0bWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICd3aWxsLWNoYW5nZScsXHJcbiAgICAgIHdpbGxDaGFuZ2UgPyAnb3BhY2l0eSwgdHJhbnNmb3JtJyA6ICdhdXRvJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGVsZW1lbnQgaXMgaW4gd2lsbC1jaGFuZ2UgYXJlYS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Nyb2xsIC0gU2Nyb2xsIHBvc2l0aW9uLlxyXG4gICAqIEBwYXJhbSB7U2VjdGlvbkFyZWFNb2RlbH0gd2lsbENoYW5nZUFyZWEgLSBXaWxsLWNoYW5nZSBhcmVhLlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIElzIGVsZW1lbnQgaW4gd2lsbC1jaGFuZ2UgYXJlYS5cclxuICAgKi9cclxuICBwcml2YXRlIGlzRWxlbWVudEluQXJlYShzY3JvbGw6IG51bWJlciwgd2lsbENoYW5nZUFyZWE6IFNlY3Rpb25BcmVhTW9kZWwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBzY3JvbGwgPj0gd2lsbENoYW5nZUFyZWEudG9wICYmIHNjcm9sbCA8PSB3aWxsQ2hhbmdlQXJlYS5ib3R0b207XHJcbiAgfVxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmZ4LXNjcm9sbC1hbmltYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmZ4LXNjcm9sbC1hbmltYXRpb24vc3JjL2xpYi9jb21wb25lbnRzL3JmeC1zY3JvbGwtYW5pbWF0aW9uL3JmeC1zY3JvbGwtYW5pbWF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEwsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUF5QixpQkFBaUIsRUFBRSx1QkFBdUIsRUFBb0IsTUFBTSxjQUFjLENBQUM7QUFDbkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFXcEQsTUFBTSxPQUFPLDJCQUEyQjtJQWdMdEMsWUFDVSxXQUF1QixFQUN2QixRQUFtQixFQUNuQixrQkFBc0MsRUFDdEMsa0JBQXNDLEVBQ3RDLGtCQUFzQyxFQUN0Qyx5QkFBb0QsRUFDL0IsVUFBa0I7UUFOdkMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQy9CLGVBQVUsR0FBVixVQUFV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QUFRLEVBQUUseUJBQXlCO2dCQUNuQyx5Q0FBb0Q7Z0JBRXBELFVBQVUsRUFBRTtvQkFDVixtQkFBbUI7aUJBQ3BCOzthQUNGOzs7WUFma0MsVUFBVTtZQUF1RixTQUFTO1lBRXpHLGtCQUFrQjtZQUFzQixrQkFBa0I7WUFBdEMsa0JBQWtCO1lBQWpFLHlCQUF5QjtZQXFNVyxNQUFNLHVCQUE5QyxNQUFNLFNBQUMsV0FBVzs7OzRCQWhMcEIsS0FBSztrQ0FTTCxLQUFLO3lCQVNMLEtBQUs7bUNBVUwsS0FBSztnQ0FVTCxLQUFLO3VDQVFMLEtBQUs7K0NBUUwsS0FBSzs4QkFRTCxLQUFLO21DQU9MLE1BQU07eUJBc0ZOLFdBQVcsU0FBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBQTEFURk9STV9JRCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFbGVtZW50c01hbmFnZW1lbnRTZXJ2aWNlLCBTY3JvbGxFdmVudFNlcnZpY2UsIFJlc2l6ZUV2ZW50U2VydmljZSwgSGVpZ2h0RXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyB2aXNpYmlsaXR5QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkV4cEludGVyZmFjZSwgQW5pbWF0aW9uVHlwZUVudW0sIEFuaW1hdGlvblZpc2liaWxpdHlFbnVtLCBTZWN0aW9uQXJlYU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnW2xpYlJmeFNjcm9sbEFuaW1hdGlvbl0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZngtc2Nyb2xsLWFuaW1hdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmZ4LXNjcm9sbC1hbmltYXRpb24uY29tcG9uZW50Lmxlc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB2aXNpYmlsaXR5QW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmZ4U2Nyb2xsQW5pbWF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIC8qKlxyXG4gICAqIEVsZW1lbnQgYW5pbWF0aW9uIHR5cGUuXHJcbiAgICogRGVmYXVsdCBpcyBOT05FLlxyXG4gICAqIE11c3QgYmUgJ05PTkUnIGlmIHlvdSB3YW50IHRvIGltcGxlbWVudCBjdXN0b20gYW5pbWF0aW9uLlxyXG4gICAqIEB0eXBlIHtBbmltYXRpb25UeXBlRW51bX1cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbmltYXRpb25UeXBlOiBBbmltYXRpb25UeXBlRW51bSB8IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogRWxlbWVudCBhbmltYXRpb24gc2hpZnQgZnJvbSBjb3JyZWN0IHBvc2l0aW9uLlxyXG4gICAqIElmIHplcm8sIHRoZXJlIGlzIG5vIGFuaW1hdGlvbi5cclxuICAgKiBEZWZhdWx0IGlzIDI1cHguXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbmltYXRpb25EaXN0YW5jZVB4OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFpvb20gYW5pbWF0aW9uIHJhdGlvLlxyXG4gICAqIENhbiBiZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZS5cclxuICAgKiBEZWZhdWx0IGlzIDEuNS5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNjYWxlUmF0aW86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogQW5pbWF0aW9uIHRyYW5zaXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAqIE11c3QgYmUgbW9yZSBvciBlcXVhbCB0byB6ZXJvLlxyXG4gICAqIElmIHplcm8sIHRoZXJlIGlzIG5vIGFuaW1hdGlvbi5cclxuICAgKiBEZWZhdWx0IGlzIDUwMC5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHRyYW5zaXRpb25EdXJhdGlvbk1zOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuaW1hdGlvbiB0cmFuc2l0aW9uIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cclxuICAgKiBNdXN0IGJlIG1vcmUgb3IgZXF1YWwgdG8gemVyby5cclxuICAgKiBJZiB6ZXJvLCB0aGVyZSBpcyBubyBkZWxheS5cclxuICAgKiBEZWZhdWx0IGlzIDAuXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB0cmFuc2l0aW9uRGVsYXlNczogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBBbmltYXRpb24gdGltaW5nIGZ1bmN0aW9uXHJcbiAgICogRGVmYXVsdCBpcyAnY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJy5cclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBIb3cgbXVjaCBzcGFjZSAoaW4gcGVyY2VudGFnZSkgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBwYWdlXHJcbiAgICogYmVmb3JlIHRoZSBlbGVtZW50IGlzIGNvbnNpZGVyZWQgdG8gYmUgdmlzaWJsZS5cclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGRpc3RhbmNlRnJvbVBhZ2VCb3R0b21QZXJjZW50YWdlOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUsIGVsZW1lbnQgYXBwZWFycyBvbmx5IG9uY2UgYW5kIG5ldmVyIGhpZGVzLlxyXG4gICAqIERlZmF1bHQgaXMgdHJ1ZS5cclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBpc09ubHlGaXJzdFRpbWU6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXQgZWxlbWVudCB2aXNpYmlsaXR5IGNoYW5nZSBldmVudC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzVmlzaWJsZVxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBlbGVtZW50VmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+O1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gYm9keSBoZWlnaHQgY2hhbmdlcy5cclxuICAgKiBAdHlwZSB7U3Vic2NyaXB0aW9ufVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGVpZ2h0TGlzdGVuZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHNjcm9sbCB2YWx1ZSBjaGFuZ2VzLlxyXG4gICAqIEB0eXBlIHtTdWJzY3JpcHRpb259XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzY3JvbGxMaXN0ZW5lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gd2luZG93IHJlc2l6ZSBjaGFuZ2VzLlxyXG4gICAqIEB0eXBlIHtTdWJzY3JpcHRpb259XHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXNpemVMaXN0ZW5lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gZWxlbWVudHMgcmVhZHkgdmFsdWUgY2hhbmdlcy5cclxuICAgKiBAdHlwZSB7U3Vic2NyaXB0aW9ufVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZWxlbWVudHNSZWFkeUxpc3RlbmVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuaW1hdGlvbiB2aXNpYmlsaXR5IHN0YXR1cy5cclxuICAgKiBDYW4gYmUgJ0hJRERFTicgb3IgJ1ZJU0lCTEUnLlxyXG4gICAqIEB0eXBlIHtBbmltYXRpb25WaXNpYmlsaXR5RW51bX1cclxuICAgKi9cclxuICBwcml2YXRlIGFuaW1hdGlvblZpc2liaWxpdHk6IEFuaW1hdGlvblZpc2liaWxpdHlFbnVtO1xyXG5cclxuICAvKipcclxuICAgKiBBbmltYXRpb24gd2lsbCBjaGFuZ2UgdmFsdWUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhbmltYXRpb25XaWxsQ2hhbmdlOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBDdXJyZW50IHRyYW5zZm9ybSB2YWx1ZS5cclxuICAgKiBEZWZhdWx0IGlzICd0cmFuc2xhdGUoMCwgMCkgc2NhbGUoMSknLlxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjdXJyZW50VHJhbnNmb3JtOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1cnJlbnQgcGFnZSBoZWlnaHQgaW4gcGl4ZWxzLlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFnZUhlaWdodDogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBJcyBwYWdlIHJlYWR5IHRvIGFuaW1hdGUgZWxlbWVudHMuXHJcbiAgICogRGVmYXVsdCBpcyBmYWxzZS5cclxuICAgKi9cclxuICBwcml2YXRlIGlzUGFnZVJlYWR5OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcmVkIGVsZW1lbnQgaW5kZXggaW5zaWRlIHNlcnZpY2UuXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKi9cclxuICBwdWJsaWMgZWxlbWVudEluZGV4OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbHVlIHdoZXJlIHRoZSBlbGVtZW50IGlzIGNvbnNpZGVyZWQgdG8gYmUgdmlzaWJsZS5cclxuICAgKiBAdHlwZSB7bnVtYmVyIHwgdW5kZWZpbmVkfVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdmlzaWJpbGl0eUJhcnJpZXI6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogVmFsdWVzIHdoZXJlIHRoZSBlbGVtZW50IGhhdmUgd2lsbC1jaGFuZ2UgcHJvcGVydHkuXHJcbiAgICogQHR5cGUge1NlY3Rpb25BcmVhTW9kZWwgfCB1bmRlZmluZWR9XHJcbiAgICovXHJcbiAgcHJpdmF0ZSB3aWxsQ2hhbmdlQXJlYTogU2VjdGlvbkFyZWFNb2RlbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogSXMgcGxhdGZvcm0gYnJvd3Nlci5cclxuICAgKiBGYWxzZSBmb3IgZXhhbXBsZSB3aGVuIHVzaW5nIFNTUi5cclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBwcml2YXRlIGlzQnJvd3NlcjogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQmluZCB2aXNpYmlsaXR5IGFuaW1hdGlvbiB0byBob3N0IGVsZW1lbnQuXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdAdmlzaWJpbGl0eScpXHJcbiAgZ2V0IHZpc2liaWxpdHkoKTogQW5pbWF0aW9uRXhwSW50ZXJmYWNlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5hbmltYXRpb25UeXBlID09PSBBbmltYXRpb25UeXBlRW51bS5OT05FID8gbnVsbCA6IHtcclxuICAgICAgdmFsdWU6IHRoaXMuYW5pbWF0aW9uVmlzaWJpbGl0eSxcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgY3VycmVudFRyYW5zZm9ybTogdGhpcy5jdXJyZW50VHJhbnNmb3JtLFxyXG4gICAgICAgIHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogdGhpcy50cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24sXHJcbiAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uTXM6IHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uTXMsXHJcbiAgICAgICAgdHJhbnNpdGlvbkRlbGF5TXM6IHRoaXMudHJhbnNpdGlvbkRlbGF5TXMsXHJcbiAgICAgICAgc2NhbGVSYXRpbzogdGhpcy5zY2FsZVJhdGlvXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodG1sRWxlbWVudDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgc2Nyb2xsRXZlbnRTZXJ2aWNlOiBTY3JvbGxFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGhlaWdodEV2ZW50U2VydmljZTogSGVpZ2h0RXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNpemVFdmVudFNlcnZpY2U6IFJlc2l6ZUV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudHNNYW5hZ2VtZW50U2VydmljZTogRWxlbWVudHNNYW5hZ2VtZW50U2VydmljZSxcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0XHJcbiAgKSB7XHJcbiAgICB0aGlzLmFuaW1hdGlvblR5cGUgPSBBbmltYXRpb25UeXBlRW51bS5OT05FO1xyXG4gICAgdGhpcy5hbmltYXRpb25EaXN0YW5jZVB4ID0gMjU7XHJcbiAgICB0aGlzLnNjYWxlUmF0aW8gPSAxLjU7XHJcbiAgICB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbk1zID0gNTAwO1xyXG4gICAgdGhpcy50cmFuc2l0aW9uRGVsYXlNcyA9IDA7XHJcbiAgICB0aGlzLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiA9ICdjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknO1xyXG4gICAgdGhpcy5kaXN0YW5jZUZyb21QYWdlQm90dG9tUGVyY2VudGFnZSA9IDIwO1xyXG4gICAgdGhpcy5pc09ubHlGaXJzdFRpbWUgPSB0cnVlO1xyXG4gICAgdGhpcy5lbGVtZW50VmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgIHRoaXMuY3VycmVudFRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoMCwgMCkgc2NhbGUoMSknO1xyXG4gICAgdGhpcy5hbmltYXRpb25WaXNpYmlsaXR5ID0gQW5pbWF0aW9uVmlzaWJpbGl0eUVudW0uSElEREVOO1xyXG4gICAgdGhpcy5hbmltYXRpb25XaWxsQ2hhbmdlID0gdHJ1ZTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2VIZWlnaHQgPSAwO1xyXG4gICAgdGhpcy5pc1BhZ2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5lbGVtZW50SW5kZXggPSB0aGlzLmVsZW1lbnRzTWFuYWdlbWVudFNlcnZpY2UucmVnaXN0ZXJFbGVtZW50KHRoaXMpO1xyXG4gICAgdGhpcy5pc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0Jyb3dzZXIpIHtcclxuICAgICAgdGhpcy5jcmVhdGVMaXN0ZW5lcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvRWxlbWVudHNSZWFkeUV2ZW50KCk7XHJcbiAgICB0aGlzLmVsZW1lbnRzTWFuYWdlbWVudFNlcnZpY2Uuc2V0RWxlbWVudFJlYWR5KHRoaXMuZWxlbWVudEluZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoYW5nZXM/LmFuaW1hdGlvblR5cGU/LmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIGNoYW5nZXM/LmFuaW1hdGlvbkRpc3RhbmNlUHg/LmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIGNoYW5nZXM/LnNjYWxlUmF0aW8/LmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jdXJyZW50VHJhbnNmb3JtID0gdGhpcy5nZXRDdXJyZW50VHJhbnNmb3JtKFxyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uVHlwZSxcclxuICAgICAgICB0aGlzLmFuaW1hdGlvbkRpc3RhbmNlUHgsXHJcbiAgICAgICAgdGhpcy5zY2FsZVJhdGlvXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3lMaXN0ZW5lcnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBsaXN0ZW5lcnMuXHJcbiAgICogRGVzdHJveSBhbGwgZXhpc3RpbmcgbGlzdGVuZXJzIGJlZm9yZSBjcmVhdGluZyBuZXcgb25lcy5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUxpc3RlbmVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveUxpc3RlbmVycygpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb1Jlc2l6ZUV2ZW50KCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvSGVpZ2h0RXZlbnQoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9TY3JvbGxFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVzdHJveSBhbGwgbGlzdGVuZXJzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVzdHJveUxpc3RlbmVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVpZ2h0TGlzdGVuZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNjcm9sbExpc3RlbmVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5yZXNpemVMaXN0ZW5lclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZWxlbWVudHNSZWFkeUxpc3RlbmVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaWJlIHRvIHdpbmRvdyByZXNpemUgZXZlbnQuXHJcbiAgICogV2hlbiB3aW5kb3cgaXMgcmVzaXplZCwgdXBkYXRlIGVsZW1lbnQgcHJvcGVydGllcy5cclxuICAgKi9cclxuICBwcml2YXRlIHN1YnNjcmliZVRvUmVzaXplRXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyU3Vic2NyaXB0aW9uID0gdGhpcy5yZXNpemVFdmVudFNlcnZpY2UuZ2V0UmVzaXplKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoKSA9PiB0aGlzLmNhbGN1bGF0ZUVsZW1lbnRQcm9wZXJ0aWVzKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gaGVpZ2h0IGNoYW5nZSBldmVudC5cclxuICAgKiBXaGVuIGhlaWdodCBjaGFuZ2UsIHVwZGF0ZSBlbGVtZW50IHByb3BlcnRpZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0hlaWdodEV2ZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWlnaHRMaXN0ZW5lclN1YnNjcmlwdGlvbiA9IHRoaXMuaGVpZ2h0RXZlbnRTZXJ2aWNlLmdldEhlaWdodCgpLnN1YnNjcmliZShcclxuICAgICAgKGhlaWdodCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSGVpZ2h0ICE9PSBoZWlnaHQpIHtcclxuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlRWxlbWVudFByb3BlcnRpZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gc2Nyb2xsIGNoYW5nZSBldmVudC5cclxuICAgKi9cclxuICBwcml2YXRlIHN1YnNjcmliZVRvU2Nyb2xsRXZlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNjcm9sbExpc3RlbmVyU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxFdmVudFNlcnZpY2UuZ2V0TW91c2VTY3JvbGwoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChzY3JvbGw6IG51bWJlcikgPT4gdGhpcy5vblNjcm9sbEV2ZW50KHNjcm9sbClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gZWxlbWVudHMgcmVhZHkgZmxhZyBldmVudC5cclxuICAgKiBJZiBlbGVtZW50cyBhcmUgcmVhZHksIGNhbGN1bGF0ZSBlbGVtZW50IHByb3BlcnRpZXMgYW5kIGRlc3Ryb3kgdGhpcyBsaXN0ZW5lci5cclxuICAgKi9cclxuICBwcml2YXRlIHN1YnNjcmliZVRvRWxlbWVudHNSZWFkeUV2ZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbGVtZW50c1JlYWR5TGlzdGVuZXJTdWJzY3JpcHRpb24gPSB0aGlzLmVsZW1lbnRzTWFuYWdlbWVudFNlcnZpY2UuZ2V0RWxlbWVudHNSZWFkeSgpLnN1YnNjcmliZShcclxuICAgICAgKGlzUmVhZHk6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoaXNSZWFkeSkge1xyXG4gICAgICAgICAgdGhpcy5lbGVtZW50c1JlYWR5TGlzdGVuZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB0aGlzLmlzUGFnZVJlYWR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc0Jyb3dzZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVFbGVtZW50UHJvcGVydGllcygpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWaXNpYmlsaXR5KEFuaW1hdGlvblZpc2liaWxpdHlFbnVtLlZJU0lCTEUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZSBhbmQgc2V0IHdpbGwtY2hhbmdlIGFyZWEuXHJcbiAgICogQ2FsY3VsYXRlIGFuZCBzZXQgdmlzaWJpbGl0eSBiYXJyaWVyLlxyXG4gICAqIFRyaWdnZXIgcGFnZSBzY3JvbGwgZXZlbnQgc28gdGhhdCBlbGVtZW50IGNhbiBiZSB1cGRhdGVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjYWxjdWxhdGVFbGVtZW50UHJvcGVydGllcygpOiB2b2lkIHtcclxuICAgIHRoaXMudmlzaWJpbGl0eUJhcnJpZXIgPSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCB3aW5kb3dIZWlnaHRQeDogbnVtYmVyID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgY29uc3Qgc2Nyb2xsOiBudW1iZXIgPSB0aGlzLnNjcm9sbEV2ZW50U2VydmljZS5nZXRNb3VzZVNjcm9sbFZhbHVlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlSGVpZ2h0ID0gdGhpcy5oZWlnaHRFdmVudFNlcnZpY2UuZ2V0SGVpZ2h0VmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLndpbGxDaGFuZ2VBcmVhID0gdGhpcy5nZXRXaWxsQ2hhbmdlQXJlYShcclxuICAgICAgdGhpcy5odG1sRWxlbWVudC5uYXRpdmVFbGVtZW50LCBzY3JvbGwsIHdpbmRvd0hlaWdodFB4XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmlzaWJpbGl0eUJhcnJpZXIgPSB0aGlzLmdldFZpc2liaWxpdHlCYXJyaWVyKFxyXG4gICAgICB0aGlzLmh0bWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHNjcm9sbCwgd2luZG93SGVpZ2h0UHgsIHRoaXMuY3VycmVudFBhZ2VIZWlnaHQsIHRoaXMuZGlzdGFuY2VGcm9tUGFnZUJvdHRvbVBlcmNlbnRhZ2VcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5vblNjcm9sbEV2ZW50KHNjcm9sbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhdGUgYXJlYSB3aGVyZSBlbGVtZW50IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGFuaW1hdGVkIHNvb24uXHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gY2FsY3VsYXRlIHdpbGwtY2hhbmdlIGFyZWEgZm9yLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGwgLSBDdXJyZW50IHNjcm9sbCB2YWx1ZS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gd2luZG93SGVpZ2h0UHggLSBDdXJyZW50IHdpbmRvdyBoZWlnaHQuXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBXaWxsLWNoYW5nZSBhcmVhLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0V2lsbENoYW5nZUFyZWEoZWxlbWVudDogSFRNTEVsZW1lbnQsIHNjcm9sbDogbnVtYmVyLCB3aW5kb3dIZWlnaHRQeDogbnVtYmVyKTogU2VjdGlvbkFyZWFNb2RlbCB7XHJcbiAgICBjb25zdCBlbGVtZW50UmVjdDogRE9NUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBlbGVtZW50VG9wOiBudW1iZXIgPSBlbGVtZW50UmVjdC50b3AgKyBzY3JvbGw7XHJcbiAgICBjb25zdCB0cmlnZ2VyQXJlYTogbnVtYmVyID0gd2luZG93SGVpZ2h0UHggKiAyO1xyXG4gICAgY29uc3QgYXJlYVRvcDogbnVtYmVyID0gZWxlbWVudFRvcCAtIHRyaWdnZXJBcmVhO1xyXG4gICAgY29uc3QgYXJlYUJvdHRvbTogbnVtYmVyID0gZWxlbWVudFRvcCArIHRyaWdnZXJBcmVhO1xyXG4gICAgcmV0dXJuIHsgdG9wOiBhcmVhVG9wLCBib3R0b206IGFyZWFCb3R0b20gfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB2YWx1ZSB3aGljaCBpbmRpY2F0ZXMgd2hlcmUgZWxlbWVudCBpcyB2aXNpYmxlLlxyXG4gICAqIElmIGJvdHRvbSBsaW1pdCBjYW5ub3QgYmUgcmVhY2hlZCwgZm9yY2UgaXQgYXQgdGhlIHZlcnkgYm90dG9tIG9mIHRoZSBwYWdlXHJcbiAgICogc28gd2UgY2FuIHNlZSB0aGUgZWxlbWVudC5cclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBjaGVjay5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Nyb2xsIC0gQ3VycmVudCBzY3JvbGwgdmFsdWUuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpbmRvd0hlaWdodFB4IC0gV2luZG93IGhlaWdodCBpbiBwaXhlbHMuXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VIZWlnaHRQeCAtIFBhZ2UgaGVpZ2h0IGluIHBpeGVscy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VGcm9tUGFnZUJvdHRvbVBlcmNlbnRhZ2UgLSBEaXN0YW5jZSBmcm9tIHBhZ2UgYm90dG9tIGluIHBlcmNlbnRhZ2UuXHJcbiAgICogQHJldHVybnMge251bWJlcn0gLSBWaXNpYmlsaXR5IGJhcnJpZXIuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRWaXNpYmlsaXR5QmFycmllcihcclxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxyXG4gICAgc2Nyb2xsOiBudW1iZXIsXHJcbiAgICB3aW5kb3dIZWlnaHRQeDogbnVtYmVyLFxyXG4gICAgcGFnZUhlaWdodFB4OiBudW1iZXIsXHJcbiAgICBkaXN0YW5jZUZyb21QYWdlQm90dG9tUGVyY2VudGFnZTogbnVtYmVyXHJcbiAgKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGVsZW1lbnRSZWN0OiBET01SZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGJvdHRvbURpc3RhbmNlUHg6IG51bWJlciA9IHdpbmRvd0hlaWdodFB4ICogZGlzdGFuY2VGcm9tUGFnZUJvdHRvbVBlcmNlbnRhZ2UgLyAxMDA7XHJcbiAgICBjb25zdCBib3R0b21MaW1pdFB4OiBudW1iZXIgPSBlbGVtZW50UmVjdC50b3AgKyBzY3JvbGwgLSB3aW5kb3dIZWlnaHRQeCArIGJvdHRvbURpc3RhbmNlUHg7XHJcbiAgICBjb25zdCBib3R0b21QYWdlTGltaXRQeDogbnVtYmVyID0gcGFnZUhlaWdodFB4IC0gd2luZG93SGVpZ2h0UHg7XHJcbiAgICByZXR1cm4gYm90dG9tTGltaXRQeCA+IGJvdHRvbVBhZ2VMaW1pdFB4ID8gYm90dG9tUGFnZUxpbWl0UHggOiBib3R0b21MaW1pdFB4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dW5zIGN1cnJlbnQgdHJhbnNmb3JtIHZhbHVlIGJhc2VkIG9uIGFuaW1hdGlvbiB0eXBlLCBkaXN0YW5jZSBhbmQgc2NhbGUgcmF0aW8uXHJcbiAgICogQHBhcmFtIHtBbmltYXRpb25UeXBlRW51bX0gYW5pbWF0aW9uVHlwZSAtIEFuaW1hdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbmltYXRpb25EaXN0YW5jZVB4IC0gQW5pbWF0aW9uIGRpc3RhbmNlIGluIHBpeGVscy5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2NhbGVSYXRpbyAtIFNjYWxlIHJhdGlvLlxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQ3VycmVudCB0cmFuc2Zvcm0gdmFsdWUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRDdXJyZW50VHJhbnNmb3JtKGFuaW1hdGlvblR5cGU6IEFuaW1hdGlvblR5cGVFbnVtIHwgc3RyaW5nLCBhbmltYXRpb25EaXN0YW5jZVB4OiBudW1iZXIgPSAwLCBzY2FsZVJhdGlvOiBudW1iZXIgPSAxKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoYW5pbWF0aW9uVHlwZSkge1xyXG4gICAgICBjYXNlIEFuaW1hdGlvblR5cGVFbnVtLlRPUDpcclxuICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgwLCAtJHthbmltYXRpb25EaXN0YW5jZVB4fXB4KSBzY2FsZSgxKWA7XHJcbiAgICAgIGNhc2UgQW5pbWF0aW9uVHlwZUVudW0uQk9UVE9NOlxyXG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlKDAsICR7YW5pbWF0aW9uRGlzdGFuY2VQeH1weCkgc2NhbGUoMSlgO1xyXG4gICAgICBjYXNlIEFuaW1hdGlvblR5cGVFbnVtLkxFRlQ6XHJcbiAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoLSR7YW5pbWF0aW9uRGlzdGFuY2VQeH1weCwgMCkgc2NhbGUoMSlgO1xyXG4gICAgICBjYXNlIEFuaW1hdGlvblR5cGVFbnVtLlJJR0hUOlxyXG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7YW5pbWF0aW9uRGlzdGFuY2VQeH1weCwgMCkgc2NhbGUoMSlgO1xyXG4gICAgICBjYXNlIEFuaW1hdGlvblR5cGVFbnVtLlpPT006XHJcbiAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoMCwgMCkgc2NhbGUoJHtzY2FsZVJhdGlvfSlgO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAndHJhbnNsYXRlKDAsIDApIHNjYWxlKDEpJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbCBldmVudCBoYW5kbGVyOlxyXG4gICAqIC0gY2FsY3VsYXRlIHZpc2liaWxpdHlcclxuICAgKiAtIGRlc3Ryb3kgbGlzdGVuZXJzIGlmIGVsZW1lbnQgaXMgdmlzaWJsZSBhbmQgaXMgYSBvbmUtc2hvdCBlbGVtZW50XHJcbiAgICogLSBzZXQgZWxlbWVudCB2aXNpYmlsaXR5IGlmIGNoYW5nZWRcclxuICAgKiAtIHNldCB3aWxsLWNoYW5nZSBwcm9wZXJ0eSBpZiBlbGVtZW50IGlzIG5lYXIgdGhlIGJhcnJpZXIgdmFsdWVcclxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Nyb2xsIC0gQ3VycmVudCBzY3JvbGwgdmFsdWUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvblNjcm9sbEV2ZW50KHNjcm9sbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1BhZ2VSZWFkeSAmJiB0aGlzLnZpc2liaWxpdHlCYXJyaWVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy53aWxsQ2hhbmdlQXJlYSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHZpc2liaWxpdHk6IEFuaW1hdGlvblZpc2liaWxpdHlFbnVtID0gdGhpcy5nZXRWaXNpYmlsaXR5KHNjcm9sbCwgdGhpcy52aXNpYmlsaXR5QmFycmllcik7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc09ubHlGaXJzdFRpbWUgJiYgdmlzaWJpbGl0eSA9PT0gQW5pbWF0aW9uVmlzaWJpbGl0eUVudW0uVklTSUJMRSkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUxpc3RlbmVycygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodmlzaWJpbGl0eSAhPT0gdGhpcy5hbmltYXRpb25WaXNpYmlsaXR5KSB7XHJcbiAgICAgICAgdGhpcy5zZXRWaXNpYmlsaXR5KHZpc2liaWxpdHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpc0VsZW1lbnRJbkFyZWE6IGJvb2xlYW4gPSB0aGlzLmlzRWxlbWVudEluQXJlYShzY3JvbGwsIHRoaXMud2lsbENoYW5nZUFyZWEpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmlzT25seUZpcnN0VGltZSAmJiAoaXNFbGVtZW50SW5BcmVhICE9PSB0aGlzLmFuaW1hdGlvbldpbGxDaGFuZ2UpKSB7XHJcbiAgICAgICAgdGhpcy5zZXRXaWxsQ2hhbmdlKGlzRWxlbWVudEluQXJlYSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmlzT25seUZpcnN0VGltZSAmJiB2aXNpYmlsaXR5ID09PSBBbmltYXRpb25WaXNpYmlsaXR5RW51bS5WSVNJQkxFKSB7XHJcbiAgICAgICAgdGhpcy5zZXRXaWxsQ2hhbmdlKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHZpc2liaWxpdHkgc3RhdGUuXHJcbiAgICogRWxlbWVudCBpcyB2aXNpYmxlIHdoZW4gc2Nyb2xsIHBvc2l0aW9uIGNyb3NzZXMgdmlzaWJpbGl0eSBiYXJyaWVyLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGwgLSBTY3JvbGwgcG9zaXRpb24uXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc2liaWxpdHlCYXJyaWVyIC0gdGhlIGxpbWl0IHdoZXJlIHRoZSBlbGVtZW50IGJlY29tZXMgdmlzaWJsZS5cclxuICAgKiBAcmV0dXJucyB7QW5pbWF0aW9uVmlzaWJpbGl0eUVudW19XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRWaXNpYmlsaXR5KHNjcm9sbDogbnVtYmVyLCB2aXNpYmlsaXR5QmFycmllcjogbnVtYmVyKTogQW5pbWF0aW9uVmlzaWJpbGl0eUVudW0ge1xyXG4gICAgY29uc3QgaXNWaXNpYmxlOiBib29sZWFuID0gc2Nyb2xsID49IHZpc2liaWxpdHlCYXJyaWVyO1xyXG4gICAgcmV0dXJuIGlzVmlzaWJsZSA/IEFuaW1hdGlvblZpc2liaWxpdHlFbnVtLlZJU0lCTEUgOiBBbmltYXRpb25WaXNpYmlsaXR5RW51bS5ISURERU47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZWxlbWVudCB2aXNpYmxpdHkgYW5kIGVtaXQgdmlzaWJpbGl0eSBjaGFuZ2UgZXZlbnQuXHJcbiAgICogSWYgYW5pbWF0aW9uIGlzIG9ubHkgZmlyc3QgdGltZSwgd2FpdCBmb3IgYW5pbWF0aW9uIHRvIGZpbmlzaCBhbmQgcmVtb3ZlIHdpbGwtY2hhbmdlLlxyXG4gICAqIEBwYXJhbSB7QW5pbWF0aW9uVmlzaWJpbGl0eUVudW19IHZpc2liaWxpdHkgLSBWaXNpYmlsaXR5IHZhbHVlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRWaXNpYmlsaXR5KHZpc2libGU6IEFuaW1hdGlvblZpc2liaWxpdHlFbnVtKTogdm9pZCB7XHJcbiAgICB0aGlzLmFuaW1hdGlvblZpc2liaWxpdHkgPSB2aXNpYmxlO1xyXG4gICAgdGhpcy5lbGVtZW50VmlzaWJsZUNoYW5nZS5lbWl0KHZpc2libGUgPT09IEFuaW1hdGlvblZpc2liaWxpdHlFbnVtLlZJU0lCTEUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgZWxlbWVudCB2aXNpYmlsaXR5IHN0YXRlLlxyXG4gICAqIFVzZWZ1bGwgd2hlbiBlbGVtZW50IGlzIGEgb25lLXNob3QgZWxlbWVudCBhbmRcclxuICAgKiB3ZSB3YW50IHRvIGhpZGUgaXQgYWZ0ZXIgaXQgaGFzIGJlZW4gdmlzaWJsZS5cclxuICAgKi9cclxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNyZWF0ZUxpc3RlbmVycygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGVsZW1lbnQgd2lsbC1jaGFuZ2UgcHJvcGVydHkuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSB3aWxsQ2hhbmdlIC0gd2lsbC1jaGFuZ2UgZW5hYmxlZCBvciBkaXNhYmxlZC5cclxuICAgKi9cclxuICBwcml2YXRlIHNldFdpbGxDaGFuZ2Uod2lsbENoYW5nZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5hbmltYXRpb25XaWxsQ2hhbmdlID0gd2lsbENoYW5nZTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXHJcbiAgICAgIHRoaXMuaHRtbEVsZW1lbnQubmF0aXZlRWxlbWVudCxcclxuICAgICAgJ3dpbGwtY2hhbmdlJyxcclxuICAgICAgd2lsbENoYW5nZSA/ICdvcGFjaXR5LCB0cmFuc2Zvcm0nIDogJ2F1dG8nXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgZWxlbWVudCBpcyBpbiB3aWxsLWNoYW5nZSBhcmVhLlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzY3JvbGwgLSBTY3JvbGwgcG9zaXRpb24uXHJcbiAgICogQHBhcmFtIHtTZWN0aW9uQXJlYU1vZGVsfSB3aWxsQ2hhbmdlQXJlYSAtIFdpbGwtY2hhbmdlIGFyZWEuXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gSXMgZWxlbWVudCBpbiB3aWxsLWNoYW5nZSBhcmVhLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNFbGVtZW50SW5BcmVhKHNjcm9sbDogbnVtYmVyLCB3aWxsQ2hhbmdlQXJlYTogU2VjdGlvbkFyZWFNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHNjcm9sbCA+PSB3aWxsQ2hhbmdlQXJlYS50b3AgJiYgc2Nyb2xsIDw9IHdpbGxDaGFuZ2VBcmVhLmJvdHRvbTtcclxuICB9XHJcbn1cclxuIl19

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

import { Injectable } from '@angular/core';
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
import { ScrollEventService } from './scroll-event.service';

@@ -6,2 +6,3 @@ import { ResizeEventService } from './resize-event.service';

import { ElementsManagementService } from './elements-management.service';
import { isPlatformBrowser } from '@angular/common';
import * as i0 from "@angular/core";

@@ -13,3 +14,3 @@ import * as i1 from "./scroll-event.service";

export class RfxScrollAnimationService {
constructor(scrollEventService, resizeEventService, heightEventService, elementsManagementService) {
constructor(scrollEventService, resizeEventService, heightEventService, elementsManagementService, platformId) {
this.scrollEventService = scrollEventService;

@@ -19,2 +20,4 @@ this.resizeEventService = resizeEventService;

this.elementsManagementService = elementsManagementService;
this.platformId = platformId;
this.isBrowser = isPlatformBrowser(this.platformId);
}

@@ -36,9 +39,11 @@ ngOnDestroy() {

* Default body element is the document element.
* @param {HTMLElement} element - Scroll element to use.
* @param {HTMLElement | Document | undefined} element - Scroll element to use.
*/
initListeners(element = document) {
initListeners(element) {
this.destroyListeners();
this.scrollEventService.createListener(element);
this.resizeEventService.createListener();
this.heightEventService.createListener(element);
if (this.isBrowser) {
this.scrollEventService.createListener(element !== null && element !== void 0 ? element : document);
this.resizeEventService.createListener();
this.heightEventService.createListener(element !== null && element !== void 0 ? element : document);
}
}

@@ -56,3 +61,3 @@ /**

}
RfxScrollAnimationService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RfxScrollAnimationService_Factory() { return new RfxScrollAnimationService(i0.ɵɵinject(i1.ScrollEventService), i0.ɵɵinject(i2.ResizeEventService), i0.ɵɵinject(i3.HeightEventService), i0.ɵɵinject(i4.ElementsManagementService)); }, token: RfxScrollAnimationService, providedIn: "root" });
RfxScrollAnimationService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RfxScrollAnimationService_Factory() { return new RfxScrollAnimationService(i0.ɵɵinject(i1.ScrollEventService), i0.ɵɵinject(i2.ResizeEventService), i0.ɵɵinject(i3.HeightEventService), i0.ɵɵinject(i4.ElementsManagementService), i0.ɵɵinject(i0.PLATFORM_ID)); }, token: RfxScrollAnimationService, providedIn: "root" });
RfxScrollAnimationService.decorators = [

@@ -67,4 +72,5 @@ { type: Injectable, args: [{

{ type: HeightEventService },
{ type: ElementsManagementService }
{ type: ElementsManagementService },
{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmZ4LXNjcm9sbC1hbmltYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JmeC1zY3JvbGwtYW5pbWF0aW9uL3NyYy9saWIvc2VydmljZXMvcmZ4LXNjcm9sbC1hbmltYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7QUFNMUUsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUNVLGtCQUFzQyxFQUN0QyxrQkFBc0MsRUFDdEMsa0JBQXNDLEVBQ3RDLHlCQUFvRDtRQUhwRCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO0lBQzFELENBQUM7SUFFRSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsVUFBa0MsUUFBUTtRQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLO1FBQ1YsTUFBTSxrQkFBa0IsR0FBMkIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWhHLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxrQkFBa0IsRUFBRTtZQUNsRCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbkM7SUFDSCxDQUFDOzs7O1lBL0NGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBUlEsa0JBQWtCO1lBQ2xCLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNjcm9sbEV2ZW50U2VydmljZSB9IGZyb20gJy4vc2Nyb2xsLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNpemVFdmVudFNlcnZpY2UgfSBmcm9tICcuL3Jlc2l6ZS1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSGVpZ2h0RXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9oZWlnaHQtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRzTWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuL2VsZW1lbnRzLW1hbmFnZW1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFuaW1hdGVkRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJmeFNjcm9sbEFuaW1hdGlvblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzY3JvbGxFdmVudFNlcnZpY2U6IFNjcm9sbEV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzaXplRXZlbnRTZXJ2aWNlOiBSZXNpemVFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGhlaWdodEV2ZW50U2VydmljZTogSGVpZ2h0RXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50c01hbmFnZW1lbnRTZXJ2aWNlOiBFbGVtZW50c01hbmFnZW1lbnRTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95TGlzdGVuZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXN0cm95IGFsbCBsaXN0ZW5lcnMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZXN0cm95TGlzdGVuZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNpemVFdmVudFNlcnZpY2UuZGVzdHJveUxpc3RlbmVyKCk7XHJcbiAgICB0aGlzLnNjcm9sbEV2ZW50U2VydmljZS5kZXN0cm95TGlzdGVuZXIoKTtcclxuICAgIHRoaXMuaGVpZ2h0RXZlbnRTZXJ2aWNlLmRlc3Ryb3lMaXN0ZW5lcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVzdHJveSBhbGwgZXh0aXN0aW5nIGxpc3RlbmVycyBhbmQgdGhlbiBjcmVhdGUgbmV3IGxpc3RlbmVycy5cclxuICAgKiBJbml0aWFsaXplIG1vdXNlIHNjcm9sbCwgYm9keSBoZWlnaHQgYW5kIGhlaWdodCBjaGFuZ2UgbGlzdGVuZXJzLlxyXG4gICAqIERlZmF1bHQgYm9keSBlbGVtZW50IGlzIHRoZSBkb2N1bWVudCBlbGVtZW50LlxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBTY3JvbGwgZWxlbWVudCB0byB1c2UuXHJcbiAgICovXHJcbiAgcHVibGljIGluaXRMaXN0ZW5lcnMoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBEb2N1bWVudCA9IGRvY3VtZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3lMaXN0ZW5lcnMoKTtcclxuICAgIHRoaXMuc2Nyb2xsRXZlbnRTZXJ2aWNlLmNyZWF0ZUxpc3RlbmVyKGVsZW1lbnQpO1xyXG4gICAgdGhpcy5yZXNpemVFdmVudFNlcnZpY2UuY3JlYXRlTGlzdGVuZXIoKTtcclxuICAgIHRoaXMuaGVpZ2h0RXZlbnRTZXJ2aWNlLmNyZWF0ZUxpc3RlbmVyKGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgYWxsIGVsZW1lbnRzIHBvc2l0aW9ucy5cclxuICAgKiBVc2VmdWwgd2hlbiB5b3Ugd2FudCB0byByZXNldCBhbGwgZWxlbWVudHMgdG8gdGhlaXIgb3JpZ2luYWwgcG9zaXRpb24uXHJcbiAgICovXHJcbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVnaXN0ZXJlZEVsZW1lbnRzOiBBbmltYXRlZEVsZW1lbnRNb2RlbFtdID0gdGhpcy5lbGVtZW50c01hbmFnZW1lbnRTZXJ2aWNlLmdldEVsZW1lbnRzKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCByZWdpc3RlcmVkRWxlbWVudCBvZiByZWdpc3RlcmVkRWxlbWVudHMpIHtcclxuICAgICAgcmVnaXN0ZXJlZEVsZW1lbnQuZWxlbWVudC5yZXNldCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmZ4LXNjcm9sbC1hbmltYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JmeC1zY3JvbGwtYW5pbWF0aW9uL3NyYy9saWIvc2VydmljZXMvcmZ4LXNjcm9sbC1hbmltYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBYSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFMUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQUtwRCxNQUFNLE9BQU8seUJBQXlCO0lBR3BDLFlBQ1Usa0JBQXNDLEVBQ3RDLGtCQUFzQyxFQUN0QyxrQkFBc0MsRUFDdEMseUJBQW9ELEVBQy9CLFVBQWtCO1FBSnZDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDL0IsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUUvQyxJQUFJLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksYUFBYSxDQUFDLE9BQTJDO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLFFBQVEsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLFFBQVEsQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUs7UUFDVixNQUFNLGtCQUFrQixHQUEyQixJQUFJLENBQUMseUJBQXlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFaEcsS0FBSyxNQUFNLGlCQUFpQixJQUFJLGtCQUFrQixFQUFFO1lBQ2xELGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQztJQUNILENBQUM7Ozs7WUF2REYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFUUSxrQkFBa0I7WUFDbEIsa0JBQWtCO1lBQ2xCLGtCQUFrQjtZQUNsQix5QkFBeUI7WUFlVyxNQUFNLHVCQUE5QyxNQUFNLFNBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTY3JvbGxFdmVudFNlcnZpY2UgfSBmcm9tICcuL3Njcm9sbC1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzaXplRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9yZXNpemUtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEhlaWdodEV2ZW50U2VydmljZSB9IGZyb20gJy4vaGVpZ2h0LWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbGVtZW50c01hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9lbGVtZW50cy1tYW5hZ2VtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbmltYXRlZEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJmeFNjcm9sbEFuaW1hdGlvblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgaXNCcm93c2VyOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2Nyb2xsRXZlbnRTZXJ2aWNlOiBTY3JvbGxFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc2l6ZUV2ZW50U2VydmljZTogUmVzaXplRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBoZWlnaHRFdmVudFNlcnZpY2U6IEhlaWdodEV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudHNNYW5hZ2VtZW50U2VydmljZTogRWxlbWVudHNNYW5hZ2VtZW50U2VydmljZSxcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0XHJcbiAgKSB7XHJcbiAgICB0aGlzLmlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3lMaXN0ZW5lcnMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc3Ryb3kgYWxsIGxpc3RlbmVycy5cclxuICAgKi9cclxuICBwcml2YXRlIGRlc3Ryb3lMaXN0ZW5lcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZUV2ZW50U2VydmljZS5kZXN0cm95TGlzdGVuZXIoKTtcclxuICAgIHRoaXMuc2Nyb2xsRXZlbnRTZXJ2aWNlLmRlc3Ryb3lMaXN0ZW5lcigpO1xyXG4gICAgdGhpcy5oZWlnaHRFdmVudFNlcnZpY2UuZGVzdHJveUxpc3RlbmVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXN0cm95IGFsbCBleHRpc3RpbmcgbGlzdGVuZXJzIGFuZCB0aGVuIGNyZWF0ZSBuZXcgbGlzdGVuZXJzLlxyXG4gICAqIEluaXRpYWxpemUgbW91c2Ugc2Nyb2xsLCBib2R5IGhlaWdodCBhbmQgaGVpZ2h0IGNoYW5nZSBsaXN0ZW5lcnMuXHJcbiAgICogRGVmYXVsdCBib2R5IGVsZW1lbnQgaXMgdGhlIGRvY3VtZW50IGVsZW1lbnQuXHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudCB8IERvY3VtZW50IHwgdW5kZWZpbmVkfSBlbGVtZW50IC0gU2Nyb2xsIGVsZW1lbnQgdG8gdXNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBpbml0TGlzdGVuZXJzKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveUxpc3RlbmVycygpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzQnJvd3Nlcikge1xyXG4gICAgICB0aGlzLnNjcm9sbEV2ZW50U2VydmljZS5jcmVhdGVMaXN0ZW5lcihlbGVtZW50ID8/IGRvY3VtZW50KTtcclxuICAgICAgdGhpcy5yZXNpemVFdmVudFNlcnZpY2UuY3JlYXRlTGlzdGVuZXIoKTtcclxuICAgICAgdGhpcy5oZWlnaHRFdmVudFNlcnZpY2UuY3JlYXRlTGlzdGVuZXIoZWxlbWVudCA/PyBkb2N1bWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCBhbGwgZWxlbWVudHMgcG9zaXRpb25zLlxyXG4gICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJlc2V0IGFsbCBlbGVtZW50cyB0byB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbi5cclxuICAgKi9cclxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudHM6IEFuaW1hdGVkRWxlbWVudE1vZGVsW10gPSB0aGlzLmVsZW1lbnRzTWFuYWdlbWVudFNlcnZpY2UuZ2V0RWxlbWVudHMoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJlZ2lzdGVyZWRFbGVtZW50IG9mIHJlZ2lzdGVyZWRFbGVtZW50cykge1xyXG4gICAgICByZWdpc3RlcmVkRWxlbWVudC5lbGVtZW50LnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
import * as i0 from '@angular/core';
import { Injectable, EventEmitter, Component, ElementRef, Renderer2, Input, Output, HostBinding, NgModule } from '@angular/core';
import { Injectable, Inject, PLATFORM_ID, EventEmitter, Component, ElementRef, Renderer2, Input, Output, HostBinding, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { BehaviorSubject, Subject } from 'rxjs';
import { isPlatformBrowser } from '@angular/common';
import { trigger, state, style, transition, animate } from '@angular/animations';

@@ -237,3 +238,3 @@

class RfxScrollAnimationService {
constructor(scrollEventService, resizeEventService, heightEventService, elementsManagementService) {
constructor(scrollEventService, resizeEventService, heightEventService, elementsManagementService, platformId) {
this.scrollEventService = scrollEventService;

@@ -243,2 +244,4 @@ this.resizeEventService = resizeEventService;

this.elementsManagementService = elementsManagementService;
this.platformId = platformId;
this.isBrowser = isPlatformBrowser(this.platformId);
}

@@ -260,9 +263,11 @@ ngOnDestroy() {

* Default body element is the document element.
* @param {HTMLElement} element - Scroll element to use.
* @param {HTMLElement | Document | undefined} element - Scroll element to use.
*/
initListeners(element = document) {
initListeners(element) {
this.destroyListeners();
this.scrollEventService.createListener(element);
this.resizeEventService.createListener();
this.heightEventService.createListener(element);
if (this.isBrowser) {
this.scrollEventService.createListener(element !== null && element !== void 0 ? element : document);
this.resizeEventService.createListener();
this.heightEventService.createListener(element !== null && element !== void 0 ? element : document);
}
}

@@ -280,3 +285,3 @@ /**

}
RfxScrollAnimationService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RfxScrollAnimationService_Factory() { return new RfxScrollAnimationService(i0.ɵɵinject(ScrollEventService), i0.ɵɵinject(ResizeEventService), i0.ɵɵinject(HeightEventService), i0.ɵɵinject(ElementsManagementService)); }, token: RfxScrollAnimationService, providedIn: "root" });
RfxScrollAnimationService.ɵprov = i0.ɵɵdefineInjectable({ factory: function RfxScrollAnimationService_Factory() { return new RfxScrollAnimationService(i0.ɵɵinject(ScrollEventService), i0.ɵɵinject(ResizeEventService), i0.ɵɵinject(HeightEventService), i0.ɵɵinject(ElementsManagementService), i0.ɵɵinject(i0.PLATFORM_ID)); }, token: RfxScrollAnimationService, providedIn: "root" });
RfxScrollAnimationService.decorators = [

@@ -291,3 +296,4 @@ { type: Injectable, args: [{

{ type: HeightEventService },
{ type: ElementsManagementService }
{ type: ElementsManagementService },
{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
];

@@ -328,3 +334,3 @@

class RfxScrollAnimationComponent {
constructor(htmlElement, renderer, scrollEventService, heightEventService, resizeEventService, elementsManagementService) {
constructor(htmlElement, renderer, scrollEventService, heightEventService, resizeEventService, elementsManagementService, platformId) {
this.htmlElement = htmlElement;

@@ -336,2 +342,3 @@ this.renderer = renderer;

this.elementsManagementService = elementsManagementService;
this.platformId = platformId;
this.animationType = AnimationTypeEnum.NONE;

@@ -352,2 +359,3 @@ this.animationDistancePx = 25;

this.elementIndex = this.elementsManagementService.registerElement(this);
this.isBrowser = isPlatformBrowser(platformId);
}

@@ -370,3 +378,5 @@ /**

ngAfterViewInit() {
this.createListeners();
if (this.isBrowser) {
this.createListeners();
}
this.subscribeToElementsReadyEvent();

@@ -440,3 +450,8 @@ this.elementsManagementService.setElementReady(this.elementIndex);

this.isPageReady = true;
this.calculateElementProperties();
if (this.isBrowser) {
this.calculateElementProperties();
}
else {
this.setVisibility(AnimationVisibilityEnum.VISIBLE);
}
}

@@ -603,3 +618,4 @@ });

{ type: ResizeEventService },
{ type: ElementsManagementService }
{ type: ElementsManagementService },
{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
];

@@ -606,0 +622,0 @@ RfxScrollAnimationComponent.propDecorators = {

@@ -11,2 +11,3 @@ import { AfterViewInit, ElementRef, EventEmitter, OnChanges, OnDestroy, Renderer2, SimpleChanges } from '@angular/core';

private elementsManagementService;
private platformId;
/**

@@ -134,6 +135,12 @@ * Element animation type.

/**
* Is platform browser.
* False for example when using SSR.
* @type {boolean}
*/
private isBrowser;
/**
* Bind visibility animation to host element.
*/
get visibility(): AnimationExpInterface | null;
constructor(htmlElement: ElementRef, renderer: Renderer2, scrollEventService: ScrollEventService, heightEventService: HeightEventService, resizeEventService: ResizeEventService, elementsManagementService: ElementsManagementService);
constructor(htmlElement: ElementRef, renderer: Renderer2, scrollEventService: ScrollEventService, heightEventService: HeightEventService, resizeEventService: ResizeEventService, elementsManagementService: ElementsManagementService, platformId: Object);
ngAfterViewInit(): void;

@@ -140,0 +147,0 @@ ngOnChanges(changes: SimpleChanges): void;

@@ -11,3 +11,5 @@ import { OnDestroy } from '@angular/core';

private elementsManagementService;
constructor(scrollEventService: ScrollEventService, resizeEventService: ResizeEventService, heightEventService: HeightEventService, elementsManagementService: ElementsManagementService);
private platformId;
private isBrowser;
constructor(scrollEventService: ScrollEventService, resizeEventService: ResizeEventService, heightEventService: HeightEventService, elementsManagementService: ElementsManagementService, platformId: Object);
ngOnDestroy(): void;

@@ -22,5 +24,5 @@ /**

* Default body element is the document element.
* @param {HTMLElement} element - Scroll element to use.
* @param {HTMLElement | Document | undefined} element - Scroll element to use.
*/
initListeners(element?: HTMLElement | Document): void;
initListeners(element: HTMLElement | Document | undefined): void;
/**

@@ -27,0 +29,0 @@ * Reset all elements positions.

{
"name": "rfx-scroll-animation",
"version": "3.4.0",
"version": "3.5.0",
"description": "RfxScrollAnimation - animate your page elements on scroll",

@@ -5,0 +5,0 @@ "author": {

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

{"__symbolic":"module","version":4,"metadata":{"RfxScrollAnimationModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"RfxScrollAnimationComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/platform-browser","name":"BrowserModule","line":10,"character":4},{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"BrowserAnimationsModule","line":11,"character":4}],"exports":[{"__symbolic":"reference","name":"RfxScrollAnimationComponent"}]}]}],"members":{}},"RfxScrollAnimationService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵg"},{"__symbolic":"reference","name":"ɵh"},{"__symbolic":"reference","name":"ɵi"}]}],"ngOnDestroy":[{"__symbolic":"method"}],"destroyListeners":[{"__symbolic":"method"}],"initListeners":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"RfxScrollAnimationComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":7,"character":1},"arguments":[{"selector":"[libRfxScrollAnimation]","animations":[{"__symbolic":"reference","name":"ɵa"}],"template":"<ng-content></ng-content>\r\n","styles":[":host{will-change:transform,opacity}\n"]}]}],"members":{"animationType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3}}]}],"animationDistancePx":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"scaleRatio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3}}]}],"transitionDurationMs":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"transitionDelayMs":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":60,"character":3}}]}],"transitionTimingFunction":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3}}]}],"distanceFromPageBottomPercentage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"isOnlyFirstTime":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3}}]}],"elementVisibleChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":91,"character":3}}]}],"visibility":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":170,"character":3},"arguments":["@visibility"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":185,"character":25},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":186,"character":22},{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵe"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"createListeners":[{"__symbolic":"method"}],"destroyListeners":[{"__symbolic":"method"}],"subscribeToResizeEvent":[{"__symbolic":"method"}],"subscribeToHeightEvent":[{"__symbolic":"method"}],"subscribeToScrollEvent":[{"__symbolic":"method"}],"subscribeToElementsReadyEvent":[{"__symbolic":"method"}],"calculateElementProperties":[{"__symbolic":"method"}],"getWillChangeArea":[{"__symbolic":"method"}],"getVisibilityBarrier":[{"__symbolic":"method"}],"getCurrentTransform":[{"__symbolic":"method"}],"onScrollEvent":[{"__symbolic":"method"}],"getVisibility":[{"__symbolic":"method"}],"setVisibility":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"setWillChange":[{"__symbolic":"method"}],"isElementInArea":[{"__symbolic":"method"}]}},"AnimationTypeEnum":{"NONE":"none","TOP":"top","BOTTOM":"bottom","RIGHT":"right","LEFT":"left","ZOOM":"zoom"},"AnimationVisibilityEnum":{"VISIBLE":"visible","HIDDEN":"hidden"},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnDestroy":[{"__symbolic":"method"}],"createListener":[{"__symbolic":"method"}],"destroyListener":[{"__symbolic":"method"}],"onMouseScroll":[{"__symbolic":"method"}],"getMouseScroll":[{"__symbolic":"method"}],"getMouseScrollValue":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵg":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnDestroy":[{"__symbolic":"method"}],"createListener":[{"__symbolic":"method"}],"destroyListener":[{"__symbolic":"method"}],"onResizeEvent":[{"__symbolic":"method"}],"getResize":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵh":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnDestroy":[{"__symbolic":"method"}],"createListener":[{"__symbolic":"method"}],"destroyListener":[{"__symbolic":"method"}],"onHeightEvent":[{"__symbolic":"method"}],"getHeight":[{"__symbolic":"method"}],"getHeightValue":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵi":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"onElementsReady":[{"__symbolic":"method"}],"getElementsReady":[{"__symbolic":"method"}],"registerElement":[{"__symbolic":"method"}],"setElementReady":[{"__symbolic":"method"}],"getElements":[{"__symbolic":"method"}],"checkElementsReady":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}}},"origins":{"RfxScrollAnimationModule":"./lib/rfx-scroll-animation.module","RfxScrollAnimationService":"./lib/services/rfx-scroll-animation.service","RfxScrollAnimationComponent":"./lib/components/rfx-scroll-animation/rfx-scroll-animation.component","AnimationTypeEnum":"./lib/models/animation-type.enum","AnimationVisibilityEnum":"./lib/models/animation-visiblity.enum","ɵa":"./lib/animations","ɵb":"./lib/services","ɵc":"./lib/services","ɵd":"./lib/services","ɵe":"./lib/services","ɵf":"./lib/services/scroll-event.service","ɵg":"./lib/services/resize-event.service","ɵh":"./lib/services/height-event.service","ɵi":"./lib/services/elements-management.service"},"importAs":"rfx-scroll-animation"}
{"__symbolic":"module","version":4,"metadata":{"RfxScrollAnimationModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"RfxScrollAnimationComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/platform-browser","name":"BrowserModule","line":10,"character":4},{"__symbolic":"reference","module":"@angular/platform-browser/animations","name":"BrowserAnimationsModule","line":11,"character":4}],"exports":[{"__symbolic":"reference","name":"RfxScrollAnimationComponent"}]}]}],"members":{}},"RfxScrollAnimationService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":8,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":19,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":19,"character":12}]}]],"parameters":[{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵg"},{"__symbolic":"reference","name":"ɵh"},{"__symbolic":"reference","name":"ɵi"},{"__symbolic":"reference","name":"Object"}]}],"ngOnDestroy":[{"__symbolic":"method"}],"destroyListeners":[{"__symbolic":"method"}],"initListeners":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"RfxScrollAnimationComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":8,"character":1},"arguments":[{"selector":"[libRfxScrollAnimation]","animations":[{"__symbolic":"reference","name":"ɵa"}],"template":"<ng-content></ng-content>\r\n","styles":[":host{will-change:transform,opacity}\n"]}]}],"members":{"animationType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":23,"character":3}}]}],"animationDistancePx":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":3}}]}],"scaleRatio":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"transitionDurationMs":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":51,"character":3}}]}],"transitionDelayMs":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"transitionTimingFunction":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":69,"character":3}}]}],"distanceFromPageBottomPercentage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"isOnlyFirstTime":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":85,"character":3}}]}],"elementVisibleChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":92,"character":3}}]}],"visibility":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":178,"character":3},"arguments":["@visibility"]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":199,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":199,"character":12}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":193,"character":25},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":194,"character":22},{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"Object"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"createListeners":[{"__symbolic":"method"}],"destroyListeners":[{"__symbolic":"method"}],"subscribeToResizeEvent":[{"__symbolic":"method"}],"subscribeToHeightEvent":[{"__symbolic":"method"}],"subscribeToScrollEvent":[{"__symbolic":"method"}],"subscribeToElementsReadyEvent":[{"__symbolic":"method"}],"calculateElementProperties":[{"__symbolic":"method"}],"getWillChangeArea":[{"__symbolic":"method"}],"getVisibilityBarrier":[{"__symbolic":"method"}],"getCurrentTransform":[{"__symbolic":"method"}],"onScrollEvent":[{"__symbolic":"method"}],"getVisibility":[{"__symbolic":"method"}],"setVisibility":[{"__symbolic":"method"}],"reset":[{"__symbolic":"method"}],"setWillChange":[{"__symbolic":"method"}],"isElementInArea":[{"__symbolic":"method"}]}},"AnimationTypeEnum":{"NONE":"none","TOP":"top","BOTTOM":"bottom","RIGHT":"right","LEFT":"left","ZOOM":"zoom"},"AnimationVisibilityEnum":{"VISIBLE":"visible","HIDDEN":"hidden"},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnDestroy":[{"__symbolic":"method"}],"createListener":[{"__symbolic":"method"}],"destroyListener":[{"__symbolic":"method"}],"onMouseScroll":[{"__symbolic":"method"}],"getMouseScroll":[{"__symbolic":"method"}],"getMouseScrollValue":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵg":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnDestroy":[{"__symbolic":"method"}],"createListener":[{"__symbolic":"method"}],"destroyListener":[{"__symbolic":"method"}],"onResizeEvent":[{"__symbolic":"method"}],"getResize":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵh":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnDestroy":[{"__symbolic":"method"}],"createListener":[{"__symbolic":"method"}],"destroyListener":[{"__symbolic":"method"}],"onHeightEvent":[{"__symbolic":"method"}],"getHeight":[{"__symbolic":"method"}],"getHeightValue":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ɵi":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":5,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"onElementsReady":[{"__symbolic":"method"}],"getElementsReady":[{"__symbolic":"method"}],"registerElement":[{"__symbolic":"method"}],"setElementReady":[{"__symbolic":"method"}],"getElements":[{"__symbolic":"method"}],"checkElementsReady":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}}},"origins":{"RfxScrollAnimationModule":"./lib/rfx-scroll-animation.module","RfxScrollAnimationService":"./lib/services/rfx-scroll-animation.service","RfxScrollAnimationComponent":"./lib/components/rfx-scroll-animation/rfx-scroll-animation.component","AnimationTypeEnum":"./lib/models/animation-type.enum","AnimationVisibilityEnum":"./lib/models/animation-visiblity.enum","ɵa":"./lib/animations","ɵb":"./lib/services","ɵc":"./lib/services","ɵd":"./lib/services","ɵe":"./lib/services","ɵf":"./lib/services/scroll-event.service","ɵg":"./lib/services/resize-event.service","ɵh":"./lib/services/height-event.service","ɵi":"./lib/services/elements-management.service"},"importAs":"rfx-scroll-animation"}

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
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc