ng-devui
Version:
DevUI components based on Angular
228 lines • 30.3 kB
JavaScript
import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';
import { GanttScaleUnit } from './gantt.model';
import * as i0 from "@angular/core";
export class GanttMarkerDirective {
constructor(element, renderer) {
this.renderer = renderer;
this.monthMark = false;
this.weekend = false;
this.today = false;
this.milestone = '';
this.showDaySplitLine = false;
this.hostElement = element.nativeElement;
}
ngOnChanges(changes) {
const { index, ganttBarContainerElement, ganttScaleContainerOffsetLeft, monthMark, weekend, last, today, milestone, unit } = changes;
if (this.showDaySplitLine && index) {
if (this.index >= 0 && !this.daySplitLineElement && this.unit === GanttScaleUnit.day) {
this.drawSplitLine();
}
else if (this.index >= 0 && this.daySplitLineElement && this.unit === GanttScaleUnit.day) {
this.updateSplitLine();
}
}
if (ganttBarContainerElement && this.ganttBarContainerElement) {
this.initMarkElement();
}
if (ganttScaleContainerOffsetLeft && this.ganttScaleContainerOffsetLeft) {
this.setElementsStyle();
}
if (monthMark) {
if (this.monthMark) {
this.initMarkElement();
}
else {
this.destroyMarkElement('monthMark');
}
}
if (weekend || last) {
if (this.weekend && !this.last) {
this.initMarkElement();
}
else {
this.destroyMarkElement('weekend');
}
}
if (today) {
if (this.today) {
this.initMarkElement();
}
else {
this.destroyMarkElement('today');
}
}
if (milestone) {
if (this.milestone) {
this.initMarkElement();
}
else {
this.destroyMarkElement('milestone');
}
}
if (unit && this.unit) {
if (this.unit !== GanttScaleUnit.day) {
this.destorySplitLine();
}
this.setElementsStyle();
}
}
initMarkElement() {
if (this.ganttBarContainerElement) {
if (this.monthMark && !this.monthMarkElement) {
const node = this.renderer.createElement('div');
this.renderer.addClass(node, 'devui-mark-line');
this.renderer.appendChild(this.ganttBarContainerElement, node);
this.monthMarkElement = node;
this.setElementsStyle();
}
if (this.weekend && !this.last && !this.weekendElement) {
const node = this.renderer.createElement('div');
this.renderer.addClass(node, 'devui-mark-stripe');
this.renderer.addClass(node, this.unit);
this.renderer.appendChild(this.ganttBarContainerElement, node);
this.weekendElement = node;
this.setElementsStyle();
}
if (this.today && !this.todayElement) {
const node = this.renderer.createElement('div');
this.renderer.addClass(node, 'devui-mark-line');
this.renderer.addClass(node, 'today');
this.renderer.addClass(node, this.unit);
this.renderer.appendChild(this.ganttBarContainerElement, node);
this.todayElement = node;
this.setElementsStyle();
}
if (this.milestone && !this.milestoneElement) {
const node = this.renderer.createElement('div');
this.renderer.addClass(node, 'devui-mark-line');
this.renderer.addClass(node, 'milestone');
this.renderer.addClass(node, this.unit);
this.renderer.appendChild(this.ganttBarContainerElement, node);
this.milestoneElement = node;
this.setElementsStyle();
}
}
}
drawSplitLine() {
const node = this.renderer.createElement('div');
this.renderer.addClass(node, 'devui-day-split-line');
this.renderer.appendChild(this.ganttBarContainerElement, node);
this.daySplitLineElement = node;
this.updateSplitLine();
}
updateSplitLine() {
this.ganttScaleContainerOffsetLeft = this.ganttScaleContainerOffsetLeft ? this.ganttScaleContainerOffsetLeft : 0;
const leftOffset = this.hostElement.offsetLeft + this.ganttScaleContainerOffsetLeft + 'px';
if (!this.weekend && this.index && this.daySplitLineElement) {
this.renderer.setStyle(this.daySplitLineElement, 'left', leftOffset);
}
}
destorySplitLine() {
if (this.showDaySplitLine && this.daySplitLineElement) {
this.renderer.removeChild(this.ganttBarContainerElement, this.daySplitLineElement);
this.daySplitLineElement = null;
}
}
removeMonthMark() {
if (this.monthMarkElement) {
this.renderer.removeChild(this.ganttBarContainerElement, this.monthMarkElement);
this.monthMarkElement = null;
}
}
removeWeekendMark() {
if (this.weekendElement) {
this.renderer.removeChild(this.ganttBarContainerElement, this.weekendElement);
this.weekendElement = null;
}
}
removeTodayMark() {
if (this.todayElement) {
this.renderer.removeChild(this.ganttBarContainerElement, this.todayElement);
this.todayElement = null;
}
}
removeMileStoneMark() {
if (this.milestoneElement) {
this.renderer.removeChild(this.ganttBarContainerElement, this.milestoneElement);
this.milestoneElement = null;
}
}
destroyMarkElement(type = 'all') {
switch (type) {
case 'monthMark':
this.removeMonthMark();
break;
case 'weekend':
this.removeWeekendMark();
break;
case 'today':
this.removeTodayMark();
break;
case 'milestone':
this.removeMileStoneMark();
break;
case 'all':
this.removeMonthMark();
this.removeWeekendMark();
this.removeTodayMark();
this.removeMileStoneMark();
break;
default:
break;
}
}
setElementsStyle() {
this.ganttScaleContainerOffsetLeft = this.ganttScaleContainerOffsetLeft ? this.ganttScaleContainerOffsetLeft : 0;
const leftOffset = this.hostElement.offsetLeft + this.ganttScaleContainerOffsetLeft + 'px';
if (this.monthMark && this.monthMarkElement) {
this.renderer.setStyle(this.monthMarkElement, 'left', leftOffset);
}
if (this.weekend && this.weekendElement) {
this.weekendElement.className = 'devui-mark-stripe ' + this.unit;
this.renderer.setStyle(this.weekendElement, 'left', leftOffset);
}
if (this.today && this.todayElement) {
this.todayElement.className = 'devui-mark-line today ' + this.unit;
this.renderer.setStyle(this.todayElement, 'left', leftOffset);
}
if (this.milestone && this.milestoneElement) {
this.milestoneElement.className = 'devui-mark-line milestone ' + this.unit;
this.renderer.setStyle(this.milestoneElement, 'left', leftOffset);
}
}
ngOnDestroy() {
this.destroyMarkElement();
this.destorySplitLine();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GanttMarkerDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: GanttMarkerDirective, selector: "[dGanttMarker]", inputs: { ganttBarContainerElement: "ganttBarContainerElement", ganttScaleContainerOffsetLeft: "ganttScaleContainerOffsetLeft", monthMark: "monthMark", weekend: "weekend", today: "today", index: "index", milestone: "milestone", unit: "unit", date: "date", last: "last", showDaySplitLine: "showDaySplitLine" }, usesOnChanges: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GanttMarkerDirective, decorators: [{
type: Directive,
args: [{
selector: '[dGanttMarker]',
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { ganttBarContainerElement: [{
type: Input
}], ganttScaleContainerOffsetLeft: [{
type: Input
}], monthMark: [{
type: Input
}], weekend: [{
type: Input
}], today: [{
type: Input
}], index: [{
type: Input
}], milestone: [{
type: Input
}], unit: [{
type: Input
}], date: [{
type: Input
}], last: [{
type: Input
}], showDaySplitLine: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQtbWFya2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL2dhbnR0L2dhbnR0LW1hcmtlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUF3QixTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSy9DLE1BQU0sT0FBTyxvQkFBb0I7SUFtQi9CLFlBQVksT0FBbUIsRUFBVSxRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBaEJuRCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVkLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFJZixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFTaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNySSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNyRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSx3QkFBd0IsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksNkJBQTZCLElBQUksSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7WUFDeEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDO1FBQzNGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RSxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQUksR0FBRyxLQUFLO1FBQzdCLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDZixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsTUFBTTtZQUNSLEtBQUssS0FBSztnQkFDUixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMzQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtRQUNSLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUM7UUFDM0YsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQzsrR0E3TlUsb0JBQW9CO21HQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBSGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7dUdBRVUsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBHYW50dFNjYWxlVW5pdCB9IGZyb20gJy4vZ2FudHQubW9kZWwnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZEdhbnR0TWFya2VyXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHYW50dE1hcmtlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBnYW50dEJhckNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gIEBJbnB1dCgpIGdhbnR0U2NhbGVDb250YWluZXJPZmZzZXRMZWZ0OiBudW1iZXI7XHJcbiAgQElucHV0KCkgbW9udGhNYXJrID0gZmFsc2U7XHJcbiAgQElucHV0KCkgd2Vla2VuZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRvZGF5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcclxuICBASW5wdXQoKSBtaWxlc3RvbmUgPSAnJztcclxuICBASW5wdXQoKSB1bml0OiBHYW50dFNjYWxlVW5pdDtcclxuICBASW5wdXQoKSBkYXRlOiBEYXRlO1xyXG4gIEBJbnB1dCgpIGxhc3Q6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0RheVNwbGl0TGluZSA9IGZhbHNlO1xyXG4gIGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBtb250aE1hcmtFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICB3ZWVrZW5kRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgdG9kYXlFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBtaWxlc3RvbmVFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBkYXlTcGxpdExpbmVFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XHJcbiAgICB0aGlzLmhvc3RFbGVtZW50ID0gZWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgeyBpbmRleCwgZ2FudHRCYXJDb250YWluZXJFbGVtZW50LCBnYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCwgbW9udGhNYXJrLCB3ZWVrZW5kLCBsYXN0LCB0b2RheSwgbWlsZXN0b25lLCB1bml0IH0gPSBjaGFuZ2VzO1xyXG4gICAgaWYgKHRoaXMuc2hvd0RheVNwbGl0TGluZSAmJiBpbmRleCkge1xyXG4gICAgICBpZiAodGhpcy5pbmRleCA+PSAwICYmICF0aGlzLmRheVNwbGl0TGluZUVsZW1lbnQgJiYgdGhpcy51bml0ID09PSBHYW50dFNjYWxlVW5pdC5kYXkpIHtcclxuICAgICAgICB0aGlzLmRyYXdTcGxpdExpbmUoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmluZGV4ID49IDAgJiYgdGhpcy5kYXlTcGxpdExpbmVFbGVtZW50ICYmIHRoaXMudW5pdCA9PT0gR2FudHRTY2FsZVVuaXQuZGF5KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTcGxpdExpbmUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChnYW50dEJhckNvbnRhaW5lckVsZW1lbnQgJiYgdGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5pbml0TWFya0VsZW1lbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZ2FudHRTY2FsZUNvbnRhaW5lck9mZnNldExlZnQgJiYgdGhpcy5nYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCkge1xyXG4gICAgICB0aGlzLnNldEVsZW1lbnRzU3R5bGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobW9udGhNYXJrKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vbnRoTWFyaykge1xyXG4gICAgICAgIHRoaXMuaW5pdE1hcmtFbGVtZW50KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95TWFya0VsZW1lbnQoJ21vbnRoTWFyaycpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdlZWtlbmQgfHwgbGFzdCkge1xyXG4gICAgICBpZiAodGhpcy53ZWVrZW5kICYmICF0aGlzLmxhc3QpIHtcclxuICAgICAgICB0aGlzLmluaXRNYXJrRWxlbWVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveU1hcmtFbGVtZW50KCd3ZWVrZW5kJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodG9kYXkpIHtcclxuICAgICAgaWYgKHRoaXMudG9kYXkpIHtcclxuICAgICAgICB0aGlzLmluaXRNYXJrRWxlbWVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveU1hcmtFbGVtZW50KCd0b2RheScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1pbGVzdG9uZSkge1xyXG4gICAgICBpZiAodGhpcy5taWxlc3RvbmUpIHtcclxuICAgICAgICB0aGlzLmluaXRNYXJrRWxlbWVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveU1hcmtFbGVtZW50KCdtaWxlc3RvbmUnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1bml0ICYmIHRoaXMudW5pdCkge1xyXG4gICAgICBpZiAodGhpcy51bml0ICE9PSBHYW50dFNjYWxlVW5pdC5kYXkpIHtcclxuICAgICAgICB0aGlzLmRlc3RvcnlTcGxpdExpbmUoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldEVsZW1lbnRzU3R5bGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRNYXJrRWxlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLmdhbnR0QmFyQ29udGFpbmVyRWxlbWVudCkge1xyXG4gICAgICBpZiAodGhpcy5tb250aE1hcmsgJiYgIXRoaXMubW9udGhNYXJrRWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mobm9kZSwgJ2RldnVpLW1hcmstbGluZScpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICAgIHRoaXMubW9udGhNYXJrRWxlbWVudCA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50c1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMud2Vla2VuZCAmJiAhdGhpcy5sYXN0ICYmICF0aGlzLndlZWtlbmRFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAnZGV2dWktbWFyay1zdHJpcGUnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKG5vZGUsIHRoaXMudW5pdCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmdhbnR0QmFyQ29udGFpbmVyRWxlbWVudCwgbm9kZSk7XHJcbiAgICAgICAgdGhpcy53ZWVrZW5kRWxlbWVudCA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50c1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudG9kYXkgJiYgIXRoaXMudG9kYXlFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAnZGV2dWktbWFyay1saW5lJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAndG9kYXknKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKG5vZGUsIHRoaXMudW5pdCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmdhbnR0QmFyQ29udGFpbmVyRWxlbWVudCwgbm9kZSk7XHJcbiAgICAgICAgdGhpcy50b2RheUVsZW1lbnQgPSBub2RlO1xyXG4gICAgICAgIHRoaXMuc2V0RWxlbWVudHNTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1pbGVzdG9uZSAmJiAhdGhpcy5taWxlc3RvbmVFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAnZGV2dWktbWFyay1saW5lJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCAnbWlsZXN0b25lJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhub2RlLCB0aGlzLnVuaXQpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIG5vZGUpO1xyXG4gICAgICAgIHRoaXMubWlsZXN0b25lRWxlbWVudCA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50c1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYXdTcGxpdExpbmUoKSB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3Mobm9kZSwgJ2RldnVpLWRheS1zcGxpdC1saW5lJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZ2FudHRCYXJDb250YWluZXJFbGVtZW50LCBub2RlKTtcclxuICAgIHRoaXMuZGF5U3BsaXRMaW5lRWxlbWVudCA9IG5vZGU7XHJcbiAgICB0aGlzLnVwZGF0ZVNwbGl0TGluZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3BsaXRMaW5lKCkge1xyXG4gICAgdGhpcy5nYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCA9IHRoaXMuZ2FudHRTY2FsZUNvbnRhaW5lck9mZnNldExlZnQgPyB0aGlzLmdhbnR0U2NhbGVDb250YWluZXJPZmZzZXRMZWZ0IDogMDtcclxuICAgIGNvbnN0IGxlZnRPZmZzZXQgPSB0aGlzLmhvc3RFbGVtZW50Lm9mZnNldExlZnQgKyB0aGlzLmdhbnR0U2NhbGVDb250YWluZXJPZmZzZXRMZWZ0ICsgJ3B4JztcclxuICAgIGlmICghdGhpcy53ZWVrZW5kICYmIHRoaXMuaW5kZXggJiYgdGhpcy5kYXlTcGxpdExpbmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kYXlTcGxpdExpbmVFbGVtZW50LCAnbGVmdCcsIGxlZnRPZmZzZXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVzdG9yeVNwbGl0TGluZSgpIHtcclxuICAgIGlmICh0aGlzLnNob3dEYXlTcGxpdExpbmUgJiYgdGhpcy5kYXlTcGxpdExpbmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIHRoaXMuZGF5U3BsaXRMaW5lRWxlbWVudCk7XHJcbiAgICAgIHRoaXMuZGF5U3BsaXRMaW5lRWxlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVNb250aE1hcmsoKSB7XHJcbiAgICBpZiAodGhpcy5tb250aE1hcmtFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIHRoaXMubW9udGhNYXJrRWxlbWVudCk7XHJcbiAgICAgIHRoaXMubW9udGhNYXJrRWxlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVXZWVrZW5kTWFyaygpIHtcclxuICAgIGlmICh0aGlzLndlZWtlbmRFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIHRoaXMud2Vla2VuZEVsZW1lbnQpO1xyXG4gICAgICB0aGlzLndlZWtlbmRFbGVtZW50ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVRvZGF5TWFyaygpIHtcclxuICAgIGlmICh0aGlzLnRvZGF5RWxlbWVudCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZ2FudHRCYXJDb250YWluZXJFbGVtZW50LCB0aGlzLnRvZGF5RWxlbWVudCk7XHJcbiAgICAgIHRoaXMudG9kYXlFbGVtZW50ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZU1pbGVTdG9uZU1hcmsoKSB7XHJcbiAgICBpZiAodGhpcy5taWxlc3RvbmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5nYW50dEJhckNvbnRhaW5lckVsZW1lbnQsIHRoaXMubWlsZXN0b25lRWxlbWVudCk7XHJcbiAgICAgIHRoaXMubWlsZXN0b25lRWxlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXN0cm95TWFya0VsZW1lbnQodHlwZSA9ICdhbGwnKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgIGNhc2UgJ21vbnRoTWFyayc6XHJcbiAgICAgIHRoaXMucmVtb3ZlTW9udGhNYXJrKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAnd2Vla2VuZCc6XHJcbiAgICAgIHRoaXMucmVtb3ZlV2Vla2VuZE1hcmsoKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlICd0b2RheSc6XHJcbiAgICAgIHRoaXMucmVtb3ZlVG9kYXlNYXJrKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAnbWlsZXN0b25lJzpcclxuICAgICAgdGhpcy5yZW1vdmVNaWxlU3RvbmVNYXJrKCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSAnYWxsJzpcclxuICAgICAgdGhpcy5yZW1vdmVNb250aE1hcmsoKTtcclxuICAgICAgdGhpcy5yZW1vdmVXZWVrZW5kTWFyaygpO1xyXG4gICAgICB0aGlzLnJlbW92ZVRvZGF5TWFyaygpO1xyXG4gICAgICB0aGlzLnJlbW92ZU1pbGVTdG9uZU1hcmsoKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RWxlbWVudHNTdHlsZSgpIHtcclxuICAgIHRoaXMuZ2FudHRTY2FsZUNvbnRhaW5lck9mZnNldExlZnQgPSB0aGlzLmdhbnR0U2NhbGVDb250YWluZXJPZmZzZXRMZWZ0ID8gdGhpcy5nYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCA6IDA7XHJcbiAgICBjb25zdCBsZWZ0T2Zmc2V0ID0gdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRMZWZ0ICsgdGhpcy5nYW50dFNjYWxlQ29udGFpbmVyT2Zmc2V0TGVmdCArICdweCc7XHJcbiAgICBpZiAodGhpcy5tb250aE1hcmsgJiYgdGhpcy5tb250aE1hcmtFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5tb250aE1hcmtFbGVtZW50LCAnbGVmdCcsIGxlZnRPZmZzZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndlZWtlbmQgJiYgdGhpcy53ZWVrZW5kRWxlbWVudCkge1xyXG4gICAgICB0aGlzLndlZWtlbmRFbGVtZW50LmNsYXNzTmFtZSA9ICdkZXZ1aS1tYXJrLXN0cmlwZSAnICsgdGhpcy51bml0O1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMud2Vla2VuZEVsZW1lbnQsICdsZWZ0JywgbGVmdE9mZnNldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudG9kYXkgJiYgdGhpcy50b2RheUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy50b2RheUVsZW1lbnQuY2xhc3NOYW1lID0gJ2RldnVpLW1hcmstbGluZSB0b2RheSAnICsgdGhpcy51bml0O1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9kYXlFbGVtZW50LCAnbGVmdCcsIGxlZnRPZmZzZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1pbGVzdG9uZSAmJiB0aGlzLm1pbGVzdG9uZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5taWxlc3RvbmVFbGVtZW50LmNsYXNzTmFtZSA9ICdkZXZ1aS1tYXJrLWxpbmUgbWlsZXN0b25lICcgKyB0aGlzLnVuaXQ7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5taWxlc3RvbmVFbGVtZW50LCAnbGVmdCcsIGxlZnRPZmZzZXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3lNYXJrRWxlbWVudCgpO1xyXG4gICAgdGhpcy5kZXN0b3J5U3BsaXRMaW5lKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==