ngh-spinner
Version:
Library for Loading Spinner - Angular 4/5/6
162 lines (154 loc) • 19.9 kB
JavaScript
import { Injectable, Component, Input, NgModule, defineInjectable, inject } from '@angular/core';
import { Subject, throwError } from 'rxjs';
import { catchError, map, finalize } from 'rxjs/operators';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { CommonModule } from '@angular/common';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NghSpinnerService {
constructor() {
this.spinnerChange = new Subject();
}
/**
* @return {?}
*/
show() {
console.log('ddd');
this.spinnerChange.next(true);
}
/**
* @return {?}
*/
hide() {
this.spinnerChange.next(false);
}
/**
* @return {?}
*/
getState() {
return this.spinnerChange.asObservable();
}
}
NghSpinnerService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] },
];
/** @nocollapse */
NghSpinnerService.ctorParameters = () => [];
/** @nocollapse */ NghSpinnerService.ngInjectableDef = defineInjectable({ factory: function NghSpinnerService_Factory() { return new NghSpinnerService(); }, token: NghSpinnerService, providedIn: "root" });
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NghSpinnerComponent {
/**
* @param {?} spinnerService
*/
constructor(spinnerService) {
this.spinnerService = spinnerService;
this.bgColor = 'rgba(0,0,0,0.5)';
this.color = '#2598db';
this.type = 'circle-clip';
this.showHide = false;
this.subscription = this.spinnerService.getState().subscribe(showHide => { this.showHide = showHide; });
}
/**
* @return {?}
*/
ngOnInit() {
}
}
NghSpinnerComponent.decorators = [
{ type: Component, args: [{
selector: 'ngh-spinner',
template: `<div class="overlay" [ngStyle]="{'background-color':bgColor,'color': color}" *ngIf="showHide" >
<div class="loader" [ngClass]="type">
<div></div>
</div>
</div>`,
styles: [`.overlay{position:fixed;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:2}.loader{position:absolute;top:50%;left:50%}.circle-clip{border:5px solid transparent;border-radius:50%;border-top:5px solid;width:25px;height:25px;-webkit-animation:2s linear infinite spin;animation:2s linear infinite spin}.square-spin{border:5px solid;width:25px;height:25px;-webkit-animation:2s linear infinite spin;animation:2s linear infinite spin}.bar-load{height:4px;position:relative;overflow:hidden;background-color:#c3c3c3;width:25%;left:37.5%}.bar-load div{display:block;position:absolute;content:"";left:-200px;width:200px;height:4px;background-color:currentColor;-webkit-animation:2s linear infinite loading;animation:2s linear infinite loading}@-webkit-keyframes loading{from{left:-200px;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}} loading{from{left:-200px;width:30%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}.bar-center{height:4px;position:relative;overflow:hidden;background-color:#c3c3c3;width:25%;left:37.5%}.bar-center div{content:"";display:inline;position:absolute;width:0;height:100%;left:50%;text-align:center;background-color:currentColor;-webkit-animation:3s linear infinite center-loading;animation:3s linear infinite center-loading}@-webkit-keyframes center-loading{from{left:50%;width:0;z-index:100}33.3333%{left:0;width:100%;z-index:10}to{left:0;width:100%}} center-loading{from{left:50%;width:0;z-index:100}33.3333%{left:0;width:100%;z-index:10}to{left:0;width:100%}}.spinner{width:40px;height:40px;margin:40px;-webkit-animation:1.4s ease-in-out infinite rotate,1.4s ease-in-out infinite alternate background;animation:1.4s ease-in-out infinite rotate,1.4s ease-in-out infinite alternate background}@-webkit-keyframes rotate{0%{-webkit-transform:perspective(120px) rotateX(0) rotateY(0);transform:perspective(120px) rotateX(0) rotateY(0)}50%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(0);transform:perspective(120px) rotateX(-180deg) rotateY(0)}100%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-180deg);transform:perspective(120px) rotateX(-180deg) rotateY(-180deg)}} rotate{0%{-webkit-transform:perspective(120px) rotateX(0) rotateY(0);transform:perspective(120px) rotateX(0) rotateY(0)}50%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(0);transform:perspective(120px) rotateX(-180deg) rotateY(0)}100%{-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-180deg);transform:perspective(120px) rotateX(-180deg) rotateY(-180deg)}}@-webkit-keyframes background{0%,100%,50%{background-color:currentColor}} background{0%,100%,50%{background-color:currentColor}}.signal{border:5px solid currentColor;border-radius:30px;height:30px;left:50%;margin:-15px 0 0 -15px;opacity:0;position:absolute;top:50%;width:30px;-webkit-animation:1s ease-out infinite pulsate;animation:1s ease-out infinite pulsate}@-webkit-keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}100%{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}} pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}100%{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}} spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}`]
},] },
];
/** @nocollapse */
NghSpinnerComponent.ctorParameters = () => [
{ type: NghSpinnerService }
];
NghSpinnerComponent.propDecorators = {
bgColor: [{ type: Input }],
color: [{ type: Input }],
type: [{ type: Input }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NghInterceptorService {
/**
* @param {?} nghSpinnerService
*/
constructor(nghSpinnerService) {
this.nghSpinnerService = nghSpinnerService;
}
/**
* @param {?} req
* @param {?} next
* @return {?}
*/
intercept(req, next) {
/** @type {?} */
const authReq = req.clone({ headers: req.headers.set("headerName", "headerValue") });
return next.handle(req).pipe(map(event => {
this.nghSpinnerService.show();
return event;
}), catchError(error => {
return throwError(error);
}), finalize(() => {
this.nghSpinnerService.hide();
}));
}
}
NghInterceptorService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] },
];
/** @nocollapse */
NghInterceptorService.ctorParameters = () => [
{ type: NghSpinnerService }
];
/** @nocollapse */ NghInterceptorService.ngInjectableDef = defineInjectable({ factory: function NghInterceptorService_Factory() { return new NghInterceptorService(inject(NghSpinnerService)); }, token: NghInterceptorService, providedIn: "root" });
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class NghSpinnerModule {
}
NghSpinnerModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule
],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: NghInterceptorService,
multi: true
}
],
declarations: [NghSpinnerComponent],
exports: [NghSpinnerComponent]
},] },
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
export { NghSpinnerService, NghSpinnerComponent, NghSpinnerModule, NghInterceptorService as ɵa };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdoLXNwaW5uZXIuanMubWFwIiwic291cmNlcyI6WyJuZzovL25naC1zcGlubmVyL2xpYi9uZ2gtc3Bpbm5lci5zZXJ2aWNlLnRzIiwibmc6Ly9uZ2gtc3Bpbm5lci9saWIvbmdoLXNwaW5uZXIuY29tcG9uZW50LnRzIiwibmc6Ly9uZ2gtc3Bpbm5lci9saWIvbmdoLWludGVyY2VwdG9yLnNlcnZpY2UudHMiLCJuZzovL25naC1zcGlubmVyL2xpYi9uZ2gtc3Bpbm5lci5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdoU3Bpbm5lclNlcnZpY2Uge1xyXG4gIHByaXZhdGUgc3Bpbm5lckNoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIHNob3coKSB7XHJcblx0ICBjb25zb2xlLmxvZygnZGRkJyk7XHJcbiAgICB0aGlzLnNwaW5uZXJDaGFuZ2UubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIGhpZGUoKXtcclxuICAgIHRoaXMuc3Bpbm5lckNoYW5nZS5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGdldFN0YXRlKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zcGlubmVyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsT25EZXN0cm95LE9uQ2hhbmdlcywgSW5wdXQgIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOZ2hTcGlubmVyU2VydmljZSB9IGZyb20gJy4vbmdoLXNwaW5uZXIuc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmdoLXNwaW5uZXInLFxyXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOmJnQ29sb3IsJ2NvbG9yJzogY29sb3J9XCIgKm5nSWY9XCJzaG93SGlkZVwiID5cclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkZXJcIiBbbmdDbGFzc109XCJ0eXBlXCI+XHJcbiAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICA8L2Rpdj5cclxuPC9kaXY+YCxcclxuICBzdHlsZXM6IFtgLm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDt6LWluZGV4OjJ9LmxvYWRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlfS5jaXJjbGUtY2xpcHtib3JkZXI6NXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlci10b3A6NXB4IHNvbGlkO3dpZHRoOjI1cHg7aGVpZ2h0OjI1cHg7LXdlYmtpdC1hbmltYXRpb246MnMgbGluZWFyIGluZmluaXRlIHNwaW47YW5pbWF0aW9uOjJzIGxpbmVhciBpbmZpbml0ZSBzcGlufS5zcXVhcmUtc3Bpbntib3JkZXI6NXB4IHNvbGlkO3dpZHRoOjI1cHg7aGVpZ2h0OjI1cHg7LXdlYmtpdC1hbmltYXRpb246MnMgbGluZWFyIGluZmluaXRlIHNwaW47YW5pbWF0aW9uOjJzIGxpbmVhciBpbmZpbml0ZSBzcGlufS5iYXItbG9hZHtoZWlnaHQ6NHB4O3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNjM2MzYzM7d2lkdGg6MjUlO2xlZnQ6MzcuNSV9LmJhci1sb2FkIGRpdntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6XCJcIjtsZWZ0Oi0yMDBweDt3aWR0aDoyMDBweDtoZWlnaHQ6NHB4O2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yOy13ZWJraXQtYW5pbWF0aW9uOjJzIGxpbmVhciBpbmZpbml0ZSBsb2FkaW5nO2FuaW1hdGlvbjoycyBsaW5lYXIgaW5maW5pdGUgbG9hZGluZ31ALXdlYmtpdC1rZXlmcmFtZXMgbG9hZGluZ3tmcm9te2xlZnQ6LTIwMHB4O3dpZHRoOjMwJX01MCV7d2lkdGg6MzAlfTcwJXt3aWR0aDo3MCV9ODAle2xlZnQ6NTAlfTk1JXtsZWZ0OjEyMCV9dG97bGVmdDoxMDAlfX1Aa2V5ZnJhbWVzIGxvYWRpbmd7ZnJvbXtsZWZ0Oi0yMDBweDt3aWR0aDozMCV9NTAle3dpZHRoOjMwJX03MCV7d2lkdGg6NzAlfTgwJXtsZWZ0OjUwJX05NSV7bGVmdDoxMjAlfXRve2xlZnQ6MTAwJX19LmJhci1jZW50ZXJ7aGVpZ2h0OjRweDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojYzNjM2MzO3dpZHRoOjI1JTtsZWZ0OjM3LjUlfS5iYXItY2VudGVyIGRpdntjb250ZW50OlwiXCI7ZGlzcGxheTppbmxpbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MTAwJTtsZWZ0OjUwJTt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjstd2Via2l0LWFuaW1hdGlvbjozcyBsaW5lYXIgaW5maW5pdGUgY2VudGVyLWxvYWRpbmc7YW5pbWF0aW9uOjNzIGxpbmVhciBpbmZpbml0ZSBjZW50ZXItbG9hZGluZ31ALXdlYmtpdC1rZXlmcmFtZXMgY2VudGVyLWxvYWRpbmd7ZnJvbXtsZWZ0OjUwJTt3aWR0aDowO3otaW5kZXg6MTAwfTMzLjMzMzMle2xlZnQ6MDt3aWR0aDoxMDAlO3otaW5kZXg6MTB9dG97bGVmdDowO3dpZHRoOjEwMCV9fUBrZXlmcmFtZXMgY2VudGVyLWxvYWRpbmd7ZnJvbXtsZWZ0OjUwJTt3aWR0aDowO3otaW5kZXg6MTAwfTMzLjMzMzMle2xlZnQ6MDt3aWR0aDoxMDAlO3otaW5kZXg6MTB9dG97bGVmdDowO3dpZHRoOjEwMCV9fS5zcGlubmVye3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luOjQwcHg7LXdlYmtpdC1hbmltYXRpb246MS40cyBlYXNlLWluLW91dCBpbmZpbml0ZSByb3RhdGUsMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGUgYmFja2dyb3VuZDthbmltYXRpb246MS40cyBlYXNlLWluLW91dCBpbmZpbml0ZSByb3RhdGUsMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGUgYmFja2dyb3VuZH1ALXdlYmtpdC1rZXlmcmFtZXMgcm90YXRlezAley13ZWJraXQtdHJhbnNmb3JtOnBlcnNwZWN0aXZlKDEyMHB4KSByb3RhdGVYKDApIHJvdGF0ZVkoMCk7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDEyMHB4KSByb3RhdGVYKDApIHJvdGF0ZVkoMCl9NTAley13ZWJraXQtdHJhbnNmb3JtOnBlcnNwZWN0aXZlKDEyMHB4KSByb3RhdGVYKC0xODBkZWcpIHJvdGF0ZVkoMCk7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDEyMHB4KSByb3RhdGVYKC0xODBkZWcpIHJvdGF0ZVkoMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMjBweCkgcm90YXRlWCgtMTgwZGVnKSByb3RhdGVZKC0xODBkZWcpO3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMjBweCkgcm90YXRlWCgtMTgwZGVnKSByb3RhdGVZKC0xODBkZWcpfX1Aa2V5ZnJhbWVzIHJvdGF0ZXswJXstd2Via2l0LXRyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMjBweCkgcm90YXRlWCgwKSByb3RhdGVZKDApO3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMjBweCkgcm90YXRlWCgwKSByb3RhdGVZKDApfTUwJXstd2Via2l0LXRyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMjBweCkgcm90YXRlWCgtMTgwZGVnKSByb3RhdGVZKDApO3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMjBweCkgcm90YXRlWCgtMTgwZGVnKSByb3RhdGVZKDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cGVyc3BlY3RpdmUoMTIwcHgpIHJvdGF0ZVgoLTE4MGRlZykgcm90YXRlWSgtMTgwZGVnKTt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoMTIwcHgpIHJvdGF0ZVgoLTE4MGRlZykgcm90YXRlWSgtMTgwZGVnKX19QC13ZWJraXQta2V5ZnJhbWVzIGJhY2tncm91bmR7MCUsMTAwJSw1MCV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9fUBrZXlmcmFtZXMgYmFja2dyb3VuZHswJSwxMDAlLDUwJXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn19LnNpZ25hbHtib3JkZXI6NXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtib3JkZXItcmFkaXVzOjMwcHg7aGVpZ2h0OjMwcHg7bGVmdDo1MCU7bWFyZ2luOi0xNXB4IDAgMCAtMTVweDtvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDozMHB4Oy13ZWJraXQtYW5pbWF0aW9uOjFzIGVhc2Utb3V0IGluZmluaXRlIHB1bHNhdGU7YW5pbWF0aW9uOjFzIGVhc2Utb3V0IGluZmluaXRlIHB1bHNhdGV9QC13ZWJraXQta2V5ZnJhbWVzIHB1bHNhdGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjEpO3RyYW5zZm9ybTpzY2FsZSguMSk7b3BhY2l0eTowfTUwJXtvcGFjaXR5OjF9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxLjIpO3RyYW5zZm9ybTpzY2FsZSgxLjIpO29wYWNpdHk6MH19QGtleWZyYW1lcyBwdWxzYXRlezAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC4xKTt0cmFuc2Zvcm06c2NhbGUoLjEpO29wYWNpdHk6MH01MCV7b3BhY2l0eToxfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4yKTt0cmFuc2Zvcm06c2NhbGUoMS4yKTtvcGFjaXR5OjB9fUAtd2Via2l0LWtleWZyYW1lcyBzcGluezAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNwaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDApO3RyYW5zZm9ybTpyb3RhdGUoMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fWBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ2hTcGlubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0ICB7XHJcbiAgQElucHV0KCkgYmdDb2xvcj0gJ3JnYmEoMCwwLDAsMC41KSc7IC8vb3ZlcmxheSBiYWNrZ3JvdW5kIGNvbG9yXHJcbiAgQElucHV0KCkgY29sb3I9ICcjMjU5OGRiJzsgLy8gc3Bpbm5lciBjb2xvclxyXG4gIEBJbnB1dCgpIHR5cGU9ICdjaXJjbGUtY2xpcCc7IC8vIHNwaW5uZXIgdHlwZVxyXG4gIHNob3dIaWRlID1mYWxzZTsgLy8gU2hvdyBvciBIaWRlIExvYWRlclxyXG5cclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNwaW5uZXJTZXJ2aWNlIDogTmdoU3Bpbm5lclNlcnZpY2UpIHsgXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9dGhpcy5zcGlubmVyU2VydmljZS5nZXRTdGF0ZSgpLnN1YnNjcmliZSggc2hvd0hpZGUgPT4ge3RoaXMuc2hvd0hpZGUgPSBzaG93SGlkZSB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBcclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBOZ2hTcGlubmVyU2VydmljZSB9IGZyb20gJy4vbmdoLXNwaW5uZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5naEludGVyY2VwdG9yU2VydmljZSBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ2hTcGlubmVyU2VydmljZTogTmdoU3Bpbm5lclNlcnZpY2UpIHsgfVxyXG5cclxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIGNvbnN0IGF1dGhSZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoXCJoZWFkZXJOYW1lXCIsIFwiaGVhZGVyVmFsdWVcIikgfSk7XHJcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKS5waXBlKFxyXG4gICAgICBtYXAoZXZlbnQgPT4ge1xyXG4gICAgICAgIHRoaXMubmdoU3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgICAgIHJldHVybiBldmVudDtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgfSksXHJcbiAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICB0aGlzLm5naFNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgfSlcclxuXHJcblxyXG4gICAgKVxyXG5cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5naFNwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuL25naC1zcGlubmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5naEludGVyY2VwdG9yU2VydmljZSB9IGZyb20gJy4vbmdoLWludGVyY2VwdG9yLnNlcnZpY2UnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGVcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUyxcclxuICAgICAgdXNlQ2xhc3M6IE5naEludGVyY2VwdG9yU2VydmljZSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICAgIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbTmdoU3Bpbm5lckNvbXBvbmVudF0sXHJcbiAgZXhwb3J0czogW05naFNwaW5uZXJDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ2hTcGlubmVyTW9kdWxlIHsgfVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0lBU0U7NkJBRndCLElBQUksT0FBTyxFQUFXO0tBRTdCOzs7O0lBRWpCLElBQUk7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQy9COzs7O0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2hDOzs7O0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUMxQzs7O1lBbkJGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Ozs7Ozs7OztBQ0xEOzs7O0lBb0JFLFlBQW9CLGNBQWtDO1FBQWxDLG1CQUFjLEdBQWQsY0FBYyxDQUFvQjt1QkFQcEMsaUJBQWlCO3FCQUNuQixTQUFTO29CQUNWLGFBQWE7d0JBQ2xCLEtBQUs7UUFLYixJQUFJLENBQUMsWUFBWSxHQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFFLFFBQVEsTUFBSyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQSxFQUFFLENBQUMsQ0FBQztLQUN2Rzs7OztJQUNELFFBQVE7S0FFUDs7O1lBdEJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsUUFBUSxFQUFFOzs7O09BSUw7Z0JBQ0wsTUFBTSxFQUFFLENBQUMsdThHQUF1OEcsQ0FBQzthQUNsOUc7Ozs7WUFUUSxpQkFBaUI7OztzQkFXdkIsS0FBSztvQkFDTCxLQUFLO21CQUNMLEtBQUs7Ozs7Ozs7QUNmUjs7OztJQVVFLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0tBQUs7Ozs7OztJQUU3RCxTQUFTLENBQUMsR0FBcUIsRUFBRSxJQUFpQjs7UUFDaEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQzFCLEdBQUcsQ0FBQyxLQUFLO1lBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlCLE9BQU8sS0FBSyxDQUFDO1NBQ2QsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLO1lBQ2QsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUIsQ0FBQyxFQUNGLFFBQVEsQ0FBQztZQUNQLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMvQixDQUFDLENBR0gsQ0FBQTtLQUVGOzs7WUF2QkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7O1lBTlEsaUJBQWlCOzs7Ozs7OztBQ0YxQjs7O1lBTUMsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO2lCQUNiO2dCQUNELFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixRQUFRLEVBQUUscUJBQXFCO3dCQUMvQixLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDQTtnQkFDSCxZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbkMsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7YUFDL0I7Ozs7Ozs7Ozs7Ozs7OzsifQ==