ng-materialgrammi
Version:
An Angular framework which follows
514 lines • 70.6 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
;
;
;
;
export class MaterialgrammiService {
constructor() {
this.widgets = [];
this.collapse = [];
this.dropdown = [];
this.megamenu = [];
this.modal = [];
this.overlay = [];
this.wizard = [];
this.slideshow = [];
this.offcanvas = [];
this.tab = [];
this.notifications = {
topRight: {
status: new BehaviorSubject([]),
data: []
},
topLeft: {
status: new BehaviorSubject([]),
data: []
},
topCenter: {
status: new BehaviorSubject([]),
data: []
},
bottomRight: {
status: new BehaviorSubject([]),
data: []
},
bottomLeft: {
status: new BehaviorSubject([]),
data: []
},
bottomCenter: {
status: new BehaviorSubject([]),
data: []
},
centerRight: {
status: new BehaviorSubject([]),
data: []
},
centerLeft: {
status: new BehaviorSubject([]),
data: []
},
centerCenter: {
status: new BehaviorSubject([]),
data: []
}
};
this.slideshowv2 = [];
/*
options: {
timer: 0 | 1-any-number,
class: "",
size: "s | m | l"
}
*/
this.notificationOptionsDefaults = {
timer: 2000,
class: "blueGrey8 text-grey2 radius-5 pad-10 marginT-10 outline-grey7 shadow-1",
size: "m"
};
}
addNotification(position = "topRight", message = "demo notification", options = {}) {
options.timer = !options.timer ? this.notificationOptionsDefaults.timer : options.timer;
options.class = !options.class ? this.notificationOptionsDefaults.class : options.class;
options.size = !options.size ? this.notificationOptionsDefaults.size : options.size;
let notify = {
message,
options,
id: this.makeid(10, this.makeid(3, "notification"))
};
const allowedPositions = Object.keys(this.notifications);
if (allowedPositions.includes(position)) {
this.notifications[position].data = [notify, ...this.notifications[position].data];
this.notifications[position].status.next(this.notifications[position].data);
}
if (notify.options.timer !== 0) {
var $this = this;
setTimeout(function () {
$this.deleteNotification(position, notify.id);
}, notify.options.timer);
}
}
watchNotification(position = "topRight") {
return Object.keys(this.notifications).includes(position) ? this.notifications[position].status.asObservable() : false;
}
deleteNotification(position = "topRight", id) {
if (Object.keys(this.notifications).includes(position)) {
this.notifications[position].data = this.notifications[position].data.filter((d) => {
return d.id != id;
});
}
this.notifications[position].status.next(this.notifications[position].data);
}
makeid(length, str) {
str = typeof str == "string" ? str.split(" ").join("") : str;
var result = '';
var characters = 'ABCDEFGHIJKLMNOP+QRSTUVWXYZabcdefgh_ijklmnopqrst=uvwxyz0123456789-';
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() *
charactersLength));
}
return result + '-' + str;
}
registerSlideShowv2(id, items, active = items[0]) {
id = id === "" ? this.makeid(10, "slideshowv2") : id;
this.slideshowv2[id] = {
items,
current: active,
active: new BehaviorSubject(active)
};
for (let i = 0; i < items.length; i++) {
this.registerWidget(items[i], "slideshowv2", id);
}
this.openWidget(active, "slideshowv2", id);
return id;
}
watchSlideShowv2(id) {
return this.slideshowv2[id].active.asObservable();
}
nextSlideV2(id) {
let current = this.slideshowv2[id].current;
let next = "";
for (let i = 0; i < this.slideshowv2[id].items.length; i++) {
if (this.slideshowv2[id].items[i] === current) {
next = this.slideshowv2[id].items[i + 1] ? this.slideshowv2[id].items[i + 1] : this.slideshowv2[id].items[0];
}
this.closeWidget(this.slideshowv2[id].items[i], "slideshowv2", id);
}
this.slideshowv2[id].current = next;
this.openWidget(next, "slideshowv2", id);
this.slideshowv2[id].active.next(next);
}
prevSlideV2(id) {
let current = this.slideshowv2[id].current;
let next = "";
for (let i = 0; i < this.slideshowv2[id].items.length; i++) {
if (this.slideshowv2[id].items[i] === current) {
next = this.slideshowv2[id].items[i - 1] ? this.slideshowv2[id].items[i - 1] : this.slideshowv2[id].items[this.slideshowv2[id].items.length - 1];
this.closeWidget(this.slideshowv2[id].items[i], "slideshowv2", id);
}
}
this.slideshowv2[id].current = next;
this.openWidget(next, "slideshowv2", id);
this.slideshowv2[id].active.next(next);
}
registerTab(id, components, active) {
this.tab[id] = {
components,
active: new BehaviorSubject(active)
};
for (let i = 0; i < components.length; i++) {
this.registerWidget(components[i], "tab", id);
}
this.openTab(id, components[0]);
}
openTab(id, component_id) {
this.closeAllTab(id);
this.openWidget(component_id, "tab", id);
this.tab[id].active.next(component_id);
}
closeAllTab(id) {
if (this.tab && this.tab[id]) {
for (let i = 0; i < this.tab[id].components.length; i++) {
this.closeWidget(this.tab[id].components[i], "tab", id);
}
}
}
watchTab(id) {
return this.tab[id].active.asObservable();
}
registerOffCanvas(id, status) {
this.offcanvas[id] = {
id,
status: new BehaviorSubject(status)
};
}
openCanvas(id) {
this.offcanvas[id].status.next(true);
}
closeCanvas(id) {
this.offcanvas[id].status.next(false);
}
watchCanvas(id) {
return this.offcanvas[id].status.asObservable();
}
registerSlideshow(id, activePage, play, next, previous, playInterval, timer) {
var obj = {
id,
playInterval,
timer,
next: new BehaviorSubject(next),
previous: new BehaviorSubject(previous),
active: new BehaviorSubject(activePage),
play: new BehaviorSubject(play)
};
this.slideshow[id] = obj;
}
watchSlideshowPlay(id) {
return this.slideshow[id].play.asObservable();
}
watchSlideshowNext(id) {
return this.slideshow[id].next.asObservable();
}
watchSlideshowPrevious(id) {
return this.slideshow[id].previous.asObservable();
}
watchSlideshowActivePage(id) {
return this.slideshow[id].active.asObservable();
}
nextSlide(id) {
this.slideshow[id].next.next(true);
}
previousSlide(id) {
this.slideshow[id].previous.next(true);
}
changeSlidePlay(id, play) {
this.slideshow[id].play.next(play);
}
changeSlideActivePage(id, activePage) {
this.slideshow[id].active.next(activePage);
}
playSlideShow(id) {
var selected = this.slideshow[id];
if (selected) {
if (selected.playInterval) {
this.pauseSlideshow(id);
}
selected.play.next(true);
var _this = this;
this.nextSlide(id);
selected.playInterval = setInterval(() => {
_this.nextSlide(id);
}, selected.timer);
}
}
pauseSlideshow(id) {
var selected = this.slideshow[id];
if (selected && selected.playInterval) {
clearInterval(selected.playInterval);
selected.playInterval = false;
}
}
registerWizard(wizardId, components, active = 0) {
let next = {};
let prev = {};
if (components[active]) {
next = {
index: components && components[active + 1] ? active + 1 : active,
id: components && components[active + 1] ? components[active + 1] : components[active]
};
prev = {
index: components && components[active - 1] ? active - 1 : active,
id: components && components[active - 1] ? components[active - 1] : components[active]
};
}
else {
// defaults
active = 0;
next = {
index: components && components[1] ? 1 : 0,
id: components && components[1] ? components[1] : components[0]
};
prev = {
index: 0,
id: components[0]
};
}
this.wizard[wizardId] = {
active: new BehaviorSubject(0),
on: active,
completed: new BehaviorSubject(false),
next,
prev,
components
};
for (let i = 0; i < components.length; i++) {
this.registerWidget(components[i], "wizard", wizardId);
}
this.openWidget(components[0], "wizard", wizardId);
}
wizardNextStep(wizardId) {
let activateIndex = this.wizard[wizardId].on + 1;
this.activateWizardStep(wizardId, activateIndex);
}
WizardPreviousStep(wizardId) {
let activateIndex = this.wizard[wizardId].on - 1;
this.activateWizardStep(wizardId, activateIndex);
}
WizardCloseAll(wizardId) {
if (this.wizard[wizardId] && this.wizard[wizardId].components) {
for (let i = 0; i < this.wizard[wizardId].components.length; i++) {
this.closeWidget(this.wizard[wizardId].components[i], "wizard", wizardId);
}
}
}
activateWizardStep(wizardId, index) {
if (this.wizard[wizardId].components[index]) {
if (index >= this.wizard[wizardId].components.length - 1) {
this.isWizardComplete(wizardId);
}
else {
this.isWizardNotComplete(wizardId);
}
this.wizard[wizardId].on = index;
this.wizard[wizardId].prev.index = this.wizard[wizardId].components[index - 1] ? index - 1 : index;
this.wizard[wizardId].next.index = this.wizard[wizardId].components[index + 1] ? index + 1 : index;
this.wizard[wizardId].prev.id = this.wizard[wizardId].components[index - 1] ?
this.wizard[wizardId].components[index - 1] : this.wizard[wizardId].components[index];
this.wizard[wizardId].next.id = this.wizard[wizardId].components[index + 1] ?
this.wizard[wizardId].components[index + 1] : this.wizard[wizardId].components[index];
;
this.WizardCloseAll(wizardId);
this.openWidget(this.wizard[wizardId].components[index], "wizard", wizardId);
this.watchWidget(this.wizard[wizardId].components[index], "wizard", wizardId).subscribe((data) => {
if (data) {
this.wizard[wizardId].active.next(index);
}
});
}
}
isWizardComplete(wizardId) {
this.wizard[wizardId].completed.next(true);
}
isWizardNotComplete(wizardId) {
this.wizard[wizardId].completed.next(false);
}
watchWizardActive(wizardId) {
return this.wizard[wizardId].active.asObservable();
}
watchWizardCompleted(wizardId) {
return this.wizard[wizardId].completed.asObservable();
}
registerOverlay(id, status) {
this.overlay[id] = {
id,
status: new BehaviorSubject(status)
};
}
openOverlay(id) {
this.overlay[id].status.next(true);
}
closeOverlay(id) {
this.overlay[id].status.next(false);
}
watchOverlay(id) {
return this.overlay[id].status.asObservable();
}
registerModal(id, status) {
this.modal[id] = {
id,
status: new BehaviorSubject(status)
};
}
openModal(id) {
this.modal[id].status.next(true);
}
closeModal(id) {
this.modal[id].status.next(false);
}
watchModal(id) {
return this.modal[id].status.asObservable();
}
registerDropDown(id, status) {
this.dropdown[id] = {
id,
status: new BehaviorSubject(status)
};
}
openDropDown(id) {
this.dropdown[id].status.next(true);
}
closeDropDown(id) {
this.dropdown[id].status.next(false);
}
watchDropDown(id) {
return this.dropdown[id].status.asObservable();
}
registerCollapse(id, status) {
this.collapse[id] = {
id,
status: new BehaviorSubject(status)
};
}
openCollapse(id) {
this.collapse[id].status.next(true);
}
closeCollapse(id) {
this.collapse[id].status.next(false);
}
watchCollapse(id) {
return this.collapse[id].status.asObservable();
}
getWidgetId(id, type, parent_id) {
return id + '_' + type + '_' + parent_id;
}
widgetExists(id, parent_type, parent_id) {
return this.widgets[this.getWidgetId(id, parent_type, parent_id)] ? true : false;
}
registerWidget(id, parent_type, parent_id, options = {}) {
let mywidgetid = this.getWidgetId(id, parent_type, parent_id);
this.widgets[mywidgetid] = {
id,
type: parent_type,
parent_id: parent_id,
options: new BehaviorSubject(options),
status: new BehaviorSubject(false)
};
}
openWidget(id, parent_type, parent_id) {
let mywidgetid = this.getWidgetId(id, parent_type, parent_id);
if (this.widgets && this.widgets[mywidgetid]) {
this.widgets[mywidgetid].status.next(true);
}
}
closeWidget(id, parent_type, parent_id) {
let mywidgetid = this.getWidgetId(id, parent_type, parent_id);
if (this.widgets && this.widgets[mywidgetid]) {
this.widgets[mywidgetid].status.next(false);
}
}
closeAllParentWidgets(parent_type, parent_id) {
let allWidgetIds = Object.keys(this.widgets);
for (let i = 0; i < allWidgetIds.length; i++) {
if (this.widgets[allWidgetIds[i]].type == parent_type && this.widgets[allWidgetIds[i]].parent_id == parent_id) {
this.closeWidget(this.widgets[allWidgetIds[i]].id, parent_type, parent_id);
}
}
}
watchWidget(id, parent_type, parent_id) {
return this.widgets[this.getWidgetId(id, parent_type, parent_id)].status.asObservable();
}
watchOptions(id, parent_type, parent_id) {
return this.widgets[this.getWidgetId(id, parent_type, parent_id)].options.asObservable();
}
registerMegaMenu(id, links) {
this.megamenu[id] = {
id,
active: new BehaviorSubject("")
};
for (let i = 0; i < links.length; i++) {
this.registerWidget(links[i], "megamenu", id);
}
}
watchMegaMenu(id) {
return this.megamenu[id].active.asObservable();
}
openMegaMenu(id, targetid) {
this.megamenu[id].active.next(targetid);
if (this.widgetExists(targetid, "megamenu", id)) {
this.closeMegaMenu(id);
this.openWidget(targetid, "megamenu", id);
}
}
closeMegaMenu(id) {
this.closeAllParentWidgets("megamenu", id);
this.megamenu[id].active.next(false);
}
fallbackCopyTextToClipboard(text) {
var textArea = document.createElement("textarea");
textArea.value = text;
// Avoid scrolling to bottom
textArea.style.top = "0";
textArea.style.left = "0";
textArea.style.position = "fixed";
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
var successful = document.execCommand('copy');
var msg = successful ? 'successful' : 'unsuccessful';
console.log('Fallback: Copying text command was ' + msg);
}
catch (err) {
console.error('Fallback: Oops, unable to copy', err);
}
document.body.removeChild(textArea);
}
copyToClipboard(text) {
if (!navigator.clipboard) {
this.fallbackCopyTextToClipboard(text);
return;
}
navigator.clipboard.writeText(text).then(function () {
console.log('Async: Copying to clipboard was successful!');
}, function (err) {
console.error('Async: Could not copy text: ', err);
});
}
scrollTo(query) {
if (document.querySelectorAll(query)[0]) {
document.querySelectorAll(query)[0].scrollIntoView({ behavior: "smooth", block: "start", inline: "nearest" });
}
}
}
MaterialgrammiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: MaterialgrammiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
MaterialgrammiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: MaterialgrammiService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: MaterialgrammiService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWxncmFtbWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsZ3JhbW1pL3NyYy9saWIvbWF0ZXJpYWxncmFtbWkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQXVCLE1BQU0sTUFBTSxDQUFDOztBQU8zRCxDQUFDO0FBS0QsQ0FBQztBQU1ELENBQUM7QUEyQ0QsQ0FBQztBQXlCRixNQUFNLE9BQU8scUJBQXFCO0lBcURoQztRQW5EUSxZQUFPLEdBQW1CLEVBQUUsQ0FBQztRQUM3QixhQUFRLEdBQXFCLEVBQUUsQ0FBQztRQUNoQyxhQUFRLEdBQXFCLEVBQUUsQ0FBQztRQUNoQyxhQUFRLEdBQXFCLEVBQUUsQ0FBQztRQUNoQyxVQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUMxQixZQUFPLEdBQW9CLEVBQUUsQ0FBQztRQUM5QixXQUFNLEdBQW1CLEVBQUUsQ0FBQztRQUM1QixjQUFTLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxjQUFTLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxRQUFHLEdBQWdCLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUFRO1lBQzNCLFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUUsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUMvQixJQUFJLEVBQUUsRUFBRTthQUNUO1lBQ0QsT0FBTyxFQUFDO2dCQUNOLE1BQU0sRUFBRSxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLElBQUksRUFBRSxFQUFFO2FBQ1Q7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLEVBQUU7YUFDVDtZQUNELFdBQVcsRUFBRTtnQkFDWCxNQUFNLEVBQUUsSUFBSSxl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QUFDLEVBQUU7WUFDdEMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztTQUM3RztJQUNILENBQUM7O2tIQXprQlUscUJBQXFCO3NIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2lkZ2V0IHtcbiAgaWQ6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nLFxuICBvcHRpb25zPzogQmVoYXZpb3JTdWJqZWN0PGFueT4sXG4gIHN0YXR1czogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjY29yZGlvbkl0ZW0ge1xuICAvLyB3aWRnZXRJZFxuICBpZD86IHN0cmluZ1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvcmRpb24ge1xuICBpZDogc3RyaW5nLFxuICBpdGVtcz86IFtBY2NvcmRpb25JdGVtXSxcbiAgYWN0aXZlSXRlbT86IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxufTtcblxuZXhwb3J0IGludGVyZmFjZSBDb2xsYXBzZSB7XG4gIGlkOiBzdHJpbmcsXG4gIHN0YXR1czogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd24ge1xuICBpZDogc3RyaW5nLFxuICBzdGF0dXM6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lZ2FNZW51IHtcbiAgaWQ6IHN0cmluZyxcbiAgYWN0aXZlOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgYm9vbGVhbj5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb2RhbCB7XG4gIGlkOiBzdHJpbmcsXG4gIHN0YXR1czogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcmxheSB7XG4gIGlkOiBzdHJpbmcsXG4gIHN0YXR1czogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG59XG5cblxuXG5leHBvcnQgaW50ZXJmYWNlIFdpemFyZCB7XG4gIGlkOiBzdHJpbmcsXG4gIGFjdGl2ZTogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4sXG4gIG9uOiBudW1iZXIsXG4gIGNvbXBsZXRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxuICBuZXh0OiB7XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBpZDogc3RyaW5nXG4gIH0sXG4gIHByZXY6IHtcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGlkOiBzdHJpbmdcbiAgfSxcbiAgY29tcG9uZW50czogW3N0cmluZ11cbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2xpZGVzaG93IHtcbiAgaWQ6IHN0cmluZyxcbiAgcGxheUludGVydmFsOiBhbnksXG4gIHRpbWVyOiBudW1iZXIsXG4gIG5leHQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcbiAgcHJldmlvdXM6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPixcbiAgYWN0aXZlOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPixcbiAgcGxheTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2ZmQ2FudmFzIHtcbiAgaWQ6IHN0cmluZyxcbiAgc3RhdHVzOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWIge1xuICBhY3RpdmU6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+LFxuICBjb21wb25lbnRzOiBbc3RyaW5nXVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbGdyYW1taVNlcnZpY2Uge1xuXG4gIHByaXZhdGUgd2lkZ2V0czogW1dpZGdldF0gfCBhbnkgPSBbXTtcbiAgcHJpdmF0ZSBjb2xsYXBzZTogW0NvbGxhcHNlXSB8IGFueSA9IFtdO1xuICBwcml2YXRlIGRyb3Bkb3duOiBbRHJvcGRvd25dIHwgYW55ID0gW107XG4gIHByaXZhdGUgbWVnYW1lbnU6IFtNZWdhTWVudV0gfCBhbnkgPSBbXTtcbiAgcHJpdmF0ZSBtb2RhbDogW01vZGFsXSB8IGFueSA9IFtdO1xuICBwcml2YXRlIG92ZXJsYXk6IFtPdmVybGF5XSB8IGFueSA9IFtdO1xuICBwcml2YXRlIHdpemFyZDogW1dpemFyZF0gfCBhbnkgPSBbXTtcbiAgcHJpdmF0ZSBzbGlkZXNob3c6IFtTbGlkZXNob3ddIHwgYW55ID0gW107XG4gIHByaXZhdGUgb2ZmY2FudmFzOiBbT2ZmQ2FudmFzXSB8IGFueSA9IFtdO1xuICBwcml2YXRlIHRhYjogW1RhYl0gfCBhbnkgPSBbXTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25zOiBhbnkgPSB7XG4gICAgdG9wUmlnaHQ6IHtcbiAgICAgIHN0YXR1czogbmV3IEJlaGF2aW9yU3ViamVjdChbXSksXG4gICAgICBkYXRhOiBbXVxuICAgIH0sXG4gICAgdG9wTGVmdDp7XG4gICAgICBzdGF0dXM6IG5ldyBCZWhhdmlvclN1YmplY3QoW10pLFxuICAgICAgZGF0YTogW11cbiAgICB9LFxuICAgIHRvcENlbnRlcjoge1xuICAgICAgc3RhdHVzOiBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfSxcbiAgICBib3R0b21SaWdodDoge1xuICAgICAgc3RhdHVzOiBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfSxcbiAgICBib3R0b21MZWZ0OiB7XG4gICAgICBzdGF0dXM6IG5ldyBCZWhhdmlvclN1YmplY3QoW10pLFxuICAgICAgZGF0YTogW11cbiAgICB9LFxuICAgIGJvdHRvbUNlbnRlcjoge1xuICAgICAgc3RhdHVzOiBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfSxcbiAgICBjZW50ZXJSaWdodDoge1xuICAgICAgc3RhdHVzOiBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfSxcbiAgICBjZW50ZXJMZWZ0OiB7XG4gICAgICBzdGF0dXM6IG5ldyBCZWhhdmlvclN1YmplY3QoW10pLFxuICAgICAgZGF0YTogW11cbiAgICB9LFxuICAgIGNlbnRlckNlbnRlcjoge1xuICAgICAgc3RhdHVzOiBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc2xpZGVzaG93djI6YW55ID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICAvKlxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHRpbWVyOiAwIHwgMS1hbnktbnVtYmVyLFxuICAgICAgY2xhc3M6IFwiXCIsXG4gICAgICBzaXplOiBcInMgfCBtIHwgbFwiXG4gICAgfVxuICAqL1xuXG4gIG5vdGlmaWNhdGlvbk9wdGlvbnNEZWZhdWx0cyA9IHtcbiAgICAgIHRpbWVyOiAyMDAwLFxuICAgICAgY2xhc3M6IFwiYmx1ZUdyZXk4IHRleHQtZ3JleTIgcmFkaXVzLTUgcGFkLTEwIG1hcmdpblQtMTAgb3V0bGluZS1ncmV5NyBzaGFkb3ctMVwiLFxuICAgICAgc2l6ZTogXCJtXCJcbiAgICB9O1xuXG4gIGFkZE5vdGlmaWNhdGlvbihwb3NpdGlvbiA9IFwidG9wUmlnaHRcIiwgbWVzc2FnZSA9IFwiZGVtbyBub3RpZmljYXRpb25cIiwgb3B0aW9uczphbnkgPSB7fSl7XG4gICAgXG4gICAgb3B0aW9ucy50aW1lciA9ICFvcHRpb25zLnRpbWVyID8gdGhpcy5ub3RpZmljYXRpb25PcHRpb25zRGVmYXVsdHMudGltZXIgOiBvcHRpb25zLnRpbWVyO1xuICAgIG9wdGlvbnMuY2xhc3MgPSAhb3B0aW9ucy5jbGFzcyA/IHRoaXMubm90aWZpY2F0aW9uT3B0aW9uc0RlZmF1bHRzLmNsYXNzIDogb3B0aW9ucy5jbGFzcztcbiAgICBvcHRpb25zLnNpemUgPSAhb3B0aW9ucy5zaXplID8gdGhpc