formioangular-colfuturo
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.
90 lines • 21.6 kB
JavaScript
import { Component } from "@angular/core";
import * as i0 from "@angular/core";
import * as i1 from "../form-manager.service";
import * as i2 from "@angular/router";
import * as i3 from "formioangular-colfuturo";
import * as i4 from "../form-manager.config";
import * as i5 from "ngx-bootstrap/modal";
import * as i6 from "@angular/common";
import * as i7 from "@angular/forms";
export class FormManagerFormComponent {
service;
route;
appConfig;
options;
modalService;
choice = "isUrl";
embedCode;
shareUrl;
projectId;
pathName;
goTo = "";
modalRef;
constructor(service, route, appConfig, options, modalService) {
this.service = service;
this.route = route;
this.appConfig = appConfig;
this.options = options;
this.modalService = modalService;
}
ngOnInit() {
this.service.reset(this.route);
this.service.loadForm().then((form) => {
this.service.formSrc = this.appConfig.appUrl + "/" + form.path;
this.projectId = form.project;
this.pathName = form.path;
this.getShareUrl();
});
}
getShareUrl() {
const src = this.appConfig.appUrl + "/" + this.pathName;
this.shareUrl = `${this.options.viewer}/#/?src=${encodeURIComponent(src)}`;
return this.shareUrl;
}
openEmbed(content) {
let goto = "";
if (this.goTo) {
goto += `if (d && d.formSubmission && d.formSubmission._id) { window.location.href = "${this.goTo}";}`;
}
let embedCode = '<script type="text/javascript">';
embedCode += "(function a(d, w, u) {";
embedCode += 'var h = d.getElementsByTagName("head")[0];';
embedCode += 'var s = d.createElement("script");';
embedCode += 's.type = "text/javascript";';
embedCode +=
's.src = "' +
this.options.viewer +
'/assets/lib/seamless/seamless.parent.min.js";';
embedCode += "s.onload = function b() {";
embedCode +=
'var f = d.getElementById("formio-form-' +
this.service.formio.formId +
'");';
embedCode += "if (!f || (typeof w.seamless === u)) {";
embedCode += "return setTimeout(b, 100);";
embedCode += "}";
embedCode +=
"w.seamless(f, {fallback:false}).receive(function(d, e) {" + goto + "});";
embedCode += "};";
embedCode += "h.appendChild(s);";
embedCode += "})(document, window);";
embedCode += "</script>";
embedCode += '<iframe id="formio-form-' + this.service.formio.formId + '" ';
embedCode +=
'style="width:100%;border:none;" height="800px" src="' +
this.shareUrl +
'&iframe=1"></iframe>';
this.embedCode = embedCode;
this.modalRef = this.modalService.show(content, { class: "modal-lg" });
}
choices(string) {
this.choice = string;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerFormComponent, deps: [{ token: i1.FormManagerService }, { token: i2.ActivatedRoute }, { token: i3.FormioAppConfig }, { token: i4.FormManagerConfig }, { token: i5.BsModalService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerFormComponent, selector: "ng-component", ngImport: i0, template: "<button *ngIf=\"options.viewer\" class=\"float-end btn btn-outline-primary\" (click)=\"openEmbed(content)\"><em class=\"fa fa-share-alt bi bi-share\"></em> Share</button>\r\n<ul class=\"nav nav-tabs mb-2\">\r\n <li class=\"nav-item\"><a class=\"nav-link\" routerLink=\"../\"><em class=\"fa fa-chevron-left bi bi-chevron-left\"></em></a></li>\r\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"view\" routerLinkActive=\"active\"><em class=\"fa fa-pencil bi bi-pencil\"></em> Enter Data</a></li>\r\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"submission\" routerLinkActive=\"active\"><em class=\"fa fa-list-alt bi bi-table\"></em> View Data</a></li>\r\n <li *ngIf=\"service.actionAllowed('formEdit')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"edit\" routerLinkActive=\"active\"><em class=\"fa fa-edit bi bi-pencil-square\"></em> Edit Form</a></li>\r\n <li *ngIf=\"service.actionAllowed('formDelete')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"delete\" routerLinkActive=\"active\"><span class=\"fa fa-trash bi bi-trash\"></span></a></li>\r\n</ul>\r\n<router-outlet></router-outlet>\r\n<ng-template #content>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Share or Embed this form</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <ul class=\"nav nav-tabs mr-auto mb-2\">\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isUrl'}\" (click)=\"choices('isUrl')\"><em class=\"fa fa-link bi bi-link\"></em> URL</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isEmbed'}\" (click)=\"choices('isEmbed')\"><em class=\"fa fa-code bi bi-code-slash\"></em> Embed</a>\r\n </li>\r\n </ul>\r\n <pre *ngIf=\"choice === 'isEmbed'\"><textarea onclick=\"this.focus();this.select()\" readonly=\"readonly\" style=\"width:100%;\" rows=\"8\" [ngModel]=\"embedCode\"></textarea></pre>\r\n <input *ngIf=\"choice === 'isUrl'\" type=\"text\" onclick=\"this.focus();this.select()\" readonly=\"readonly\" class=\"form-control\" [ngModel]=\"shareUrl\" placeholder=\"https://examples.form.io/example\">\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-light\" (click)=\"modalRef.hide()\">Close</button>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerFormComponent, decorators: [{
type: Component,
args: [{ template: "<button *ngIf=\"options.viewer\" class=\"float-end btn btn-outline-primary\" (click)=\"openEmbed(content)\"><em class=\"fa fa-share-alt bi bi-share\"></em> Share</button>\r\n<ul class=\"nav nav-tabs mb-2\">\r\n <li class=\"nav-item\"><a class=\"nav-link\" routerLink=\"../\"><em class=\"fa fa-chevron-left bi bi-chevron-left\"></em></a></li>\r\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"view\" routerLinkActive=\"active\"><em class=\"fa fa-pencil bi bi-pencil\"></em> Enter Data</a></li>\r\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"submission\" routerLinkActive=\"active\"><em class=\"fa fa-list-alt bi bi-table\"></em> View Data</a></li>\r\n <li *ngIf=\"service.actionAllowed('formEdit')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"edit\" routerLinkActive=\"active\"><em class=\"fa fa-edit bi bi-pencil-square\"></em> Edit Form</a></li>\r\n <li *ngIf=\"service.actionAllowed('formDelete')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"delete\" routerLinkActive=\"active\"><span class=\"fa fa-trash bi bi-trash\"></span></a></li>\r\n</ul>\r\n<router-outlet></router-outlet>\r\n<ng-template #content>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Share or Embed this form</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <ul class=\"nav nav-tabs mr-auto mb-2\">\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isUrl'}\" (click)=\"choices('isUrl')\"><em class=\"fa fa-link bi bi-link\"></em> URL</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isEmbed'}\" (click)=\"choices('isEmbed')\"><em class=\"fa fa-code bi bi-code-slash\"></em> Embed</a>\r\n </li>\r\n </ul>\r\n <pre *ngIf=\"choice === 'isEmbed'\"><textarea onclick=\"this.focus();this.select()\" readonly=\"readonly\" style=\"width:100%;\" rows=\"8\" [ngModel]=\"embedCode\"></textarea></pre>\r\n <input *ngIf=\"choice === 'isUrl'\" type=\"text\" onclick=\"this.focus();this.select()\" readonly=\"readonly\" class=\"form-control\" [ngModel]=\"shareUrl\" placeholder=\"https://examples.form.io/example\">\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-light\" (click)=\"modalRef.hide()\">Close</button>\r\n </div>\r\n</ng-template>\r\n" }]
}], ctorParameters: () => [{ type: i1.FormManagerService }, { type: i2.ActivatedRoute }, { type: i3.FormioAppConfig }, { type: i4.FormManagerConfig }, { type: i5.BsModalService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWZvcm1pby9tYW5hZ2VyL3NyYy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXVCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFVL0QsTUFBTSxPQUFPLHdCQUF3QjtJQVMxQjtJQUNBO0lBQ0E7SUFDQTtJQUNDO0lBWlYsTUFBTSxHQUFRLE9BQU8sQ0FBQztJQUN0QixTQUFTLENBQU07SUFDZixRQUFRLENBQU07SUFDZCxTQUFTLENBQU07SUFDZixRQUFRLENBQU07SUFDZCxJQUFJLEdBQVEsRUFBRSxDQUFDO0lBQ2YsUUFBUSxDQUFhO0lBQ3JCLFlBQ1MsT0FBMkIsRUFDM0IsS0FBcUIsRUFDckIsU0FBMEIsRUFDMUIsT0FBMEIsRUFDekIsWUFBNEI7UUFKN0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWdCO0lBQ25DLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDL0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN4RCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLFdBQVcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUF5QjtRQUNqQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxnRkFBZ0YsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxJQUFJLFNBQVMsR0FBRyxpQ0FBaUMsQ0FBQztRQUNsRCxTQUFTLElBQUksd0JBQXdCLENBQUM7UUFDdEMsU0FBUyxJQUFJLDRDQUE0QyxDQUFDO1FBQzFELFNBQVMsSUFBSSxvQ0FBb0MsQ0FBQztRQUNsRCxTQUFTLElBQUksNkJBQTZCLENBQUM7UUFDM0MsU0FBUztZQUNQLFdBQVc7Z0JBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUNuQiwrQ0FBK0MsQ0FBQztRQUNsRCxTQUFTLElBQUksMkJBQTJCLENBQUM7UUFDekMsU0FBUztZQUNQLHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTTtnQkFDMUIsS0FBSyxDQUFDO1FBQ1IsU0FBUyxJQUFJLHdDQUF3QyxDQUFDO1FBQ3RELFNBQVMsSUFBSSw0QkFBNEIsQ0FBQztRQUMxQyxTQUFTLElBQUksR0FBRyxDQUFDO1FBQ2pCLFNBQVM7WUFDUCwwREFBMEQsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQzVFLFNBQVMsSUFBSSxJQUFJLENBQUM7UUFDbEIsU0FBUyxJQUFJLG1CQUFtQixDQUFDO1FBQ2pDLFNBQVMsSUFBSSx1QkFBdUIsQ0FBQztRQUNyQyxTQUFTLElBQUksV0FBVyxDQUFDO1FBQ3pCLFNBQVMsSUFBSSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzVFLFNBQVM7WUFDUCxzREFBc0Q7Z0JBQ3RELElBQUksQ0FBQyxRQUFRO2dCQUNiLHNCQUFzQixDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFNO1FBQ1osSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQzt3R0F2RVUsd0JBQXdCOzRGQUF4Qix3QkFBd0Isb0RDVnJDLHNsRkFnQ0E7OzRGRHRCYSx3QkFBd0I7a0JBSHBDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tIFwiLi4vZm9ybS1tYW5hZ2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRm9ybU1hbmFnZXJDb25maWcgfSBmcm9tIFwiLi4vZm9ybS1tYW5hZ2VyLmNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRm9ybWlvQXBwQ29uZmlnIH0gZnJvbSBcImZvcm1pb2FuZ3VsYXItY29sZnV0dXJvXCI7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZm9ybS5jb21wb25lbnQuaHRtbFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybU1hbmFnZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBjaG9pY2U6IGFueSA9IFwiaXNVcmxcIjtcclxuICBlbWJlZENvZGU6IGFueTtcclxuICBzaGFyZVVybDogYW55O1xyXG4gIHByb2plY3RJZDogYW55O1xyXG4gIHBhdGhOYW1lOiBhbnk7XHJcbiAgZ29UbzogYW55ID0gXCJcIjtcclxuICBtb2RhbFJlZjogQnNNb2RhbFJlZjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzZXJ2aWNlOiBGb3JtTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIGFwcENvbmZpZzogRm9ybWlvQXBwQ29uZmlnLFxyXG4gICAgcHVibGljIG9wdGlvbnM6IEZvcm1NYW5hZ2VyQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2VydmljZS5yZXNldCh0aGlzLnJvdXRlKTtcclxuICAgIHRoaXMuc2VydmljZS5sb2FkRm9ybSgpLnRoZW4oKGZvcm0pID0+IHtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmZvcm1TcmMgPSB0aGlzLmFwcENvbmZpZy5hcHBVcmwgKyBcIi9cIiArIGZvcm0ucGF0aDtcclxuICAgICAgdGhpcy5wcm9qZWN0SWQgPSBmb3JtLnByb2plY3Q7XHJcbiAgICAgIHRoaXMucGF0aE5hbWUgPSBmb3JtLnBhdGg7XHJcbiAgICAgIHRoaXMuZ2V0U2hhcmVVcmwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNoYXJlVXJsKCkge1xyXG4gICAgY29uc3Qgc3JjID0gdGhpcy5hcHBDb25maWcuYXBwVXJsICsgXCIvXCIgKyB0aGlzLnBhdGhOYW1lO1xyXG4gICAgdGhpcy5zaGFyZVVybCA9IGAke3RoaXMub3B0aW9ucy52aWV3ZXJ9LyMvP3NyYz0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfWA7XHJcbiAgICByZXR1cm4gdGhpcy5zaGFyZVVybDtcclxuICB9XHJcblxyXG4gIG9wZW5FbWJlZChjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICBsZXQgZ290byA9IFwiXCI7XHJcbiAgICBpZiAodGhpcy5nb1RvKSB7XHJcbiAgICAgIGdvdG8gKz0gYGlmIChkICYmIGQuZm9ybVN1Ym1pc3Npb24gJiYgZC5mb3JtU3VibWlzc2lvbi5faWQpIHsgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIiR7dGhpcy5nb1RvfVwiO31gO1xyXG4gICAgfVxyXG4gICAgbGV0IGVtYmVkQ29kZSA9ICc8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4nO1xyXG4gICAgZW1iZWRDb2RlICs9IFwiKGZ1bmN0aW9uIGEoZCwgdywgdSkge1wiO1xyXG4gICAgZW1iZWRDb2RlICs9ICd2YXIgaCA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdOyc7XHJcbiAgICBlbWJlZENvZGUgKz0gJ3ZhciBzID0gZC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpOyc7XHJcbiAgICBlbWJlZENvZGUgKz0gJ3MudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7JztcclxuICAgIGVtYmVkQ29kZSArPVxyXG4gICAgICAncy5zcmMgPSBcIicgK1xyXG4gICAgICB0aGlzLm9wdGlvbnMudmlld2VyICtcclxuICAgICAgJy9hc3NldHMvbGliL3NlYW1sZXNzL3NlYW1sZXNzLnBhcmVudC5taW4uanNcIjsnO1xyXG4gICAgZW1iZWRDb2RlICs9IFwicy5vbmxvYWQgPSBmdW5jdGlvbiBiKCkge1wiO1xyXG4gICAgZW1iZWRDb2RlICs9XHJcbiAgICAgICd2YXIgZiA9IGQuZ2V0RWxlbWVudEJ5SWQoXCJmb3JtaW8tZm9ybS0nICtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmZvcm1pby5mb3JtSWQgK1xyXG4gICAgICAnXCIpOyc7XHJcbiAgICBlbWJlZENvZGUgKz0gXCJpZiAoIWYgfHwgKHR5cGVvZiB3LnNlYW1sZXNzID09PSB1KSkge1wiO1xyXG4gICAgZW1iZWRDb2RlICs9IFwicmV0dXJuIHNldFRpbWVvdXQoYiwgMTAwKTtcIjtcclxuICAgIGVtYmVkQ29kZSArPSBcIn1cIjtcclxuICAgIGVtYmVkQ29kZSArPVxyXG4gICAgICBcIncuc2VhbWxlc3MoZiwge2ZhbGxiYWNrOmZhbHNlfSkucmVjZWl2ZShmdW5jdGlvbihkLCBlKSB7XCIgKyBnb3RvICsgXCJ9KTtcIjtcclxuICAgIGVtYmVkQ29kZSArPSBcIn07XCI7XHJcbiAgICBlbWJlZENvZGUgKz0gXCJoLmFwcGVuZENoaWxkKHMpO1wiO1xyXG4gICAgZW1iZWRDb2RlICs9IFwifSkoZG9jdW1lbnQsIHdpbmRvdyk7XCI7XHJcbiAgICBlbWJlZENvZGUgKz0gXCI8L3NjcmlwdD5cIjtcclxuICAgIGVtYmVkQ29kZSArPSAnPGlmcmFtZSBpZD1cImZvcm1pby1mb3JtLScgKyB0aGlzLnNlcnZpY2UuZm9ybWlvLmZvcm1JZCArICdcIiAnO1xyXG4gICAgZW1iZWRDb2RlICs9XHJcbiAgICAgICdzdHlsZT1cIndpZHRoOjEwMCU7Ym9yZGVyOm5vbmU7XCIgaGVpZ2h0PVwiODAwcHhcIiBzcmM9XCInICtcclxuICAgICAgdGhpcy5zaGFyZVVybCArXHJcbiAgICAgICcmaWZyYW1lPTFcIj48L2lmcmFtZT4nO1xyXG4gICAgdGhpcy5lbWJlZENvZGUgPSBlbWJlZENvZGU7XHJcbiAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhjb250ZW50LCB7IGNsYXNzOiBcIm1vZGFsLWxnXCIgfSk7XHJcbiAgfVxyXG5cclxuICBjaG9pY2VzKHN0cmluZykge1xyXG4gICAgdGhpcy5jaG9pY2UgPSBzdHJpbmc7XHJcbiAgfVxyXG59XHJcbiIsIjxidXR0b24gKm5nSWY9XCJvcHRpb25zLnZpZXdlclwiIGNsYXNzPVwiZmxvYXQtZW5kIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW5FbWJlZChjb250ZW50KVwiPjxlbSBjbGFzcz1cImZhIGZhLXNoYXJlLWFsdCBiaSBiaS1zaGFyZVwiPjwvZW0+IFNoYXJlPC9idXR0b24+XHJcbjx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBtYi0yXCI+XHJcbiAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj48YSBjbGFzcz1cIm5hdi1saW5rXCIgcm91dGVyTGluaz1cIi4uL1wiPjxlbSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCBiaSBiaS1jaGV2cm9uLWxlZnRcIj48L2VtPjwvYT48L2xpPlxyXG4gIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwidmlld1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48ZW0gY2xhc3M9XCJmYSBmYS1wZW5jaWwgYmkgYmktcGVuY2lsXCI+PC9lbT4gRW50ZXIgRGF0YTwvYT48L2xpPlxyXG4gIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwic3VibWlzc2lvblwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48ZW0gY2xhc3M9XCJmYSBmYS1saXN0LWFsdCBiaSBiaS10YWJsZVwiPjwvZW0+IFZpZXcgRGF0YTwvYT48L2xpPlxyXG4gIDxsaSAqbmdJZj1cInNlcnZpY2UuYWN0aW9uQWxsb3dlZCgnZm9ybUVkaXQnKVwiIGNsYXNzPVwibmF2LWl0ZW1cIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIHJvdXRlckxpbms9XCJlZGl0XCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxlbSBjbGFzcz1cImZhIGZhLWVkaXQgYmkgYmktcGVuY2lsLXNxdWFyZVwiPjwvZW0+IEVkaXQgRm9ybTwvYT48L2xpPlxyXG4gIDxsaSAqbmdJZj1cInNlcnZpY2UuYWN0aW9uQWxsb3dlZCgnZm9ybURlbGV0ZScpXCIgY2xhc3M9XCJuYXYtaXRlbVwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48YSBjbGFzcz1cIm5hdi1saW5rXCIgcm91dGVyTGluaz1cImRlbGV0ZVwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoIGJpIGJpLXRyYXNoXCI+PC9zcGFuPjwvYT48L2xpPlxyXG48L3VsPlxyXG48cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlNoYXJlIG9yIEVtYmVkIHRoaXMgZm9ybTwvaDQ+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsUmVmLmhpZGUoKVwiPlxyXG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBtci1hdXRvIG1iLTJcIj5cclxuICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cclxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBjaG9pY2UgPT09ICdpc1VybCd9XCIgKGNsaWNrKT1cImNob2ljZXMoJ2lzVXJsJylcIj48ZW0gY2xhc3M9XCJmYSBmYS1saW5rIGJpIGJpLWxpbmtcIj48L2VtPiBVUkw8L2E+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogY2hvaWNlID09PSAnaXNFbWJlZCd9XCIgKGNsaWNrKT1cImNob2ljZXMoJ2lzRW1iZWQnKVwiPjxlbSBjbGFzcz1cImZhIGZhLWNvZGUgYmkgYmktY29kZS1zbGFzaFwiPjwvZW0+IEVtYmVkPC9hPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICAgIDxwcmUgICpuZ0lmPVwiY2hvaWNlID09PSAnaXNFbWJlZCdcIj48dGV4dGFyZWEgb25jbGljaz1cInRoaXMuZm9jdXMoKTt0aGlzLnNlbGVjdCgpXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiByb3dzPVwiOFwiIFtuZ01vZGVsXT1cImVtYmVkQ29kZVwiPjwvdGV4dGFyZWE+PC9wcmU+XHJcbiAgICA8aW5wdXQgKm5nSWY9XCJjaG9pY2UgPT09ICdpc1VybCdcIiB0eXBlPVwidGV4dFwiIG9uY2xpY2s9XCJ0aGlzLmZvY3VzKCk7dGhpcy5zZWxlY3QoKVwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtuZ01vZGVsXT1cInNoYXJlVXJsXCIgcGxhY2Vob2xkZXI9XCJodHRwczovL2V4YW1wbGVzLmZvcm0uaW8vZXhhbXBsZVwiPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIChjbGljayk9XCJtb2RhbFJlZi5oaWRlKClcIj5DbG9zZTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=