@kre-form/ant
Version:
277 lines • 34.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, } from "@angular/core";
import { FieldArrayType, FormGlobalService } from "@kre-form/core";
import { KreFormAntService } from "../../tools/service";
export class DeonFieldOverTime extends FieldArrayType {
/**
* @param {?} dyService
* @param {?} globalService
*/
constructor(dyService, globalService) {
super();
this.globalService = globalService;
this.titles = [];
this.showXScroll = true;
this.screenTableWidth = window.screen.width - 162;
this.tableWidth = 0;
this.chartresize = (/**
* @return {?}
*/
() => {
this.changeWidth();
});
this.service = dyService;
}
/**
* @return {?}
*/
ngOnChanges() { }
/**
* @return {?}
*/
ngOnInit() {
if (!!((/** @type {?} */ (this.field)))["repeatRole"]) {
// this.initProperty(
// (this.field as any)["repeatRole"],
// this.field.fieldGroup
// );
}
if (!!this.field["show"]) {
this.field.hide = !this.field["show"];
}
this.changeWidth();
window.addEventListener("resize", this.chartresize, true);
}
/**
* @param {?} overTimeRole
* @param {?} fieldGroups
* @return {?}
*/
initProperty(overTimeRole, fieldGroups) {
Object.keys(overTimeRole).forEach((/**
* @param {?} overtimeItemKey
* @return {?}
*/
(overtimeItemKey) => {
/** @type {?} */
let index = Number(overtimeItemKey.substr(overtimeItemKey.lastIndexOf("$") + 1));
if (!!fieldGroups) {
fieldGroups.forEach((/**
* @param {?} overtimes
* @param {?} ind
* @return {?}
*/
(overtimes, ind) => {
if (index === ind) {
overtimes.fieldGroup.forEach((/**
* @param {?} overtime
* @return {?}
*/
(overtime) => {
if (!!overTimeRole[overtimeItemKey][overtime.key]) {
if ((overtime.templateOptions === undefined ||
overtime.templateOptions === null) &&
overtime.type !== "repeat") {
overtime.templateOptions = {};
}
if (overtime.editProperty === undefined ||
overtime.editProperty === null) {
overtime.editProperty = {};
}
overtime.templateOptions = Object.assign(overtime.templateOptions, overTimeRole[overtimeItemKey][overtime.key].templateOptions);
if (overTimeRole[overtimeItemKey][overtime.key]["editor"] ===
false ||
overTimeRole[overtimeItemKey][overtime.key]["editor"] === true) {
overtime.editor =
overTimeRole[overtimeItemKey][overtime.key]["editor"];
}
if (overTimeRole[overtimeItemKey][overtime.key]["show"] ===
false ||
overTimeRole[overtimeItemKey][overtime.key]["show"] === true) {
overtime.show =
overTimeRole[overtimeItemKey][overtime.key]["show"];
}
overtime.editProperty = Object.assign(overtime.editProperty, overTimeRole[overtimeItemKey][overtime.key].editProperty);
if (overtime.type === "repeat") {
/** @type {?} */
let repeatRole = overTimeRole[overtimeItemKey][overtime.key];
console.log(repeatRole);
/** @type {?} */
let fieldGroups = (/** @type {?} */ (((/** @type {?} */ (overtime)))
.fieldGroup));
this.initProperty(repeatRole, fieldGroups);
}
}
}));
}
}));
}
}));
}
/**
* @return {?}
*/
ngOnDestroy() {
window.removeEventListener("resize", this.chartresize, true);
}
/**
* @return {?}
*/
ngAfterViewInit() { }
/**
* @param {?} sign
* @return {?}
*/
fieldOperational(sign) {
this.service.fieldOperational(sign, this.field);
}
/**
* @param {?} type
* @return {?}
*/
groupOperational(type) {
this.service.groupOperational(type, this.field);
}
/**
* @param {?} i
* @return {?}
*/
delete(i) {
if (this.field.fieldGroup && this.field.fieldGroup.length > 1) {
this.remove(i);
}
else {
}
}
/**
* @return {?}
*/
changeWidth() {
/** @type {?} */
let width = 300;
if (this.field != undefined &&
this.field != null &&
this.field.fieldArray != undefined &&
this.field.fieldArray != null &&
this.field.fieldArray.fieldGroup != undefined &&
this.field.fieldArray.fieldGroup != null) {
width = this.field.fieldArray.fieldGroup.length * 245 + 120;
}
this.tableWidth = width;
}
/**
* @return {?}
*/
addIndex() {
((/** @type {?} */ (this.field.fieldGroup))).forEach((/**
* @param {?} el
* @param {?} index
* @return {?}
*/
(el, index) => {
el.fieldGroup.forEach((/**
* @param {?} ele
* @return {?}
*/
(ele) => {
ele.templateOptions.index = index;
if (this.field &&
this.field.templateOptions &&
(!!this.field.templateOptions.index ||
this.field.templateOptions.index === 0)) {
ele.templateOptions.pIndex = this.field.templateOptions.index;
}
}));
}));
}
/**
* @param {?} f
* @return {?}
*/
isRemoved(f) {
/** @type {?} */
let result = true;
if (this.editor === false) {
result = false;
}
if ((/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ (f)).fieldGroup)).filter((/**
* @param {?} el
* @return {?}
*/
(el) => el.type !== "line" && el.type !== "htmlcontent")))).every((/**
* @param {?} el
* @return {?}
*/
(el) => !!(/** @type {?} */ (el)).editProperty && !!(/** @type {?} */ ((/** @type {?} */ (el)).editProperty)).delete))) {
result = false;
}
return result;
}
/**
* @param {?} i
* @param {?} isRemove
* @return {?}
*/
removed(i, isRemove) {
if (!isRemove) {
return;
}
this.remove(i);
this.addIndex();
}
/**
* @return {?}
*/
showErrors() {
/** @type {?} */
let that = this;
return that.showError;
}
/**
* @param {?} i
* @return {?}
*/
newRowId(i) {
return `${this.field.id}_${i}`;
}
/**
* @return {?}
*/
newRepeatClass() {
return `${this.field.id}_overTime`;
}
}
DeonFieldOverTime.decorators = [
{ type: Component, args: [{
selector: "kreform-overTime",
template: "<!-- <ng-container *ngIf=\"formStatus === 0\">\n <ng-container\n *ngIf=\"field.fieldGroup!==undefined && field.fieldGroup!==null && field.fieldGroup.length>0;else cardEmpty\"\n >\n <div *ngFor=\"let field of field.fieldGroup; let i = index\" class=\"row\">\n <ng-container *ngIf=\"field.hide!=true\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n <span class=\"del\" (click)=\"remove(i)\">\u5220\u9664</span>\n <div class=\"tips\"></div>\n </div>\n </ng-container>\n <ng-template #cardEmpty>\n <div class=\"repeat-card-empty\">\n <div class=\"repeat-empty-image\"></div>\n <p class=\"ant-empty-description\">\u6682\u65E0\u6570\u636E</p>\n </div>\n </ng-template>\n <div class=\"add\" (click)=\"add();addIndex()\">\n <span>\u65B0\u589E</span>\n </div>\n</ng-container>\n<ng-container *ngIf=\"formStatus !== 0\">\n <div class=\"fieldOperational\">\n <div class=\"reportControl\">\n <div class=\"report-header\" *ngIf=\"field?.editProperty?.config !== false \">\n <div class=\"left\">\n <ul>\n <li>\n <label nz-checkbox [(ngModel)]=\"field.checked\"></label>\n </li>\n <li (click)=\"groupOperational('item')\">\n <i class=\"icon-TianJiaZiDuan\"></i>\u6DFB\u52A0\u5B57\u6BB5\n </li>\n <li (click)=\"groupOperational('remark')\">\n <i class=\"icon-other-WenBen\"></i>\u6DFB\u52A0\u6587\u672C\n </li>\n <li (click)=\"groupOperational('line')\">\n <i class=\"icon-FenGeXian\"></i>\u6DFB\u52A0\u5206\u5272\u7EBF\n </li>\n </ul>\n </div>\n <div class=\"right\">\n <ul>\n <li (click)=\"groupOperational('edit')\">\n <i class=\"icon-Edit03\"></i>\u7F16\u8F91\n </li>\n <li (click)=\"groupOperational('delete')\">\n <i class=\"icon-N_delete2\"></i>\u5220\u9664\n </li>\n <li (click)=\"groupOperational('up')\">\n <i class=\"icon-ShangYi\"></i>\u4E0A\u79FB\n </li>\n <li (click)=\"groupOperational('down')\">\n <i class=\"icon-XiaYi\"></i>\u4E0B\u79FB\n </li>\n <ng-container\n *ngIf=\"to && to.isButintin && to.isButintin==true;else tdDelete\"\n >\n <li></li>\n </ng-container>\n <ng-template #tdDelete>\n <li (click)=\"fieldOperational('delete')\">\n <button class=\"btnDel\">\n <i class=\"icon-KT-Close\"></i>\n </button>\n </li>\n </ng-template>\n </ul>\n </div>\n </div>\n <div class=\"report-body\">\n <ng-container *ngFor=\"let field of field.fieldGroup; let i = index\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n </div>\n </div>\n <div class=\"field-hide\" *ngIf=\"field.hide == true\">\u5DF2\u9690\u85CF</div>\n </div>\n</ng-container> -->\n<ng-container *ngIf=\"formStatus !== 0\">\n <div class=\"fieldOperational\">\n <div\n class=\"reportControl\"\n [class.hide-header]=\"!(field?.editProperty?.config !== false) \"\n >\n <div class=\"report-header\" *ngIf=\"field?.editProperty?.config !== false \">\n <div class=\"left\">\n <ul>\n <li>\n <label\n nz-checkbox\n [(ngModel)]=\"field.checked\"\n [nzDisabled]=\"\n !!field.editProperty &&\n field.editProperty.canMove !== undefined &&\n field.editProperty.canMove === false\n \"\n ></label>\n </li>\n <li (click)=\"groupOperational('item')\">\n <i class=\"icon-TianJiaZiDuan\"></i>\u6DFB\u52A0\u5B57\u6BB5\n </li>\n <li (click)=\"groupOperational('remark')\">\n <i class=\"icon-other-WenBen\"></i>\u6DFB\u52A0\u6587\u672C\n </li>\n <li (click)=\"groupOperational('line')\">\n <i class=\"icon-FenGeXian\"></i>\u6DFB\u52A0\u5206\u5272\u7EBF\n </li>\n </ul>\n </div>\n <div class=\"right\">\n <ul>\n <li (click)=\"groupOperational('edit')\">\n <i class=\"icon-Edit03\"></i>\u7F16\u8F91\n </li>\n <li (click)=\"groupOperational('delete')\">\n <i class=\"icon-N_delete2\"></i>\u5220\u9664\n </li>\n <li (click)=\"groupOperational('up')\">\n <i class=\"icon-ShangYi\"></i>\u4E0A\u79FB\n </li>\n <li (click)=\"groupOperational('down')\">\n <i class=\"icon-XiaYi\"></i>\u4E0B\u79FB\n </li>\n <ng-container\n *ngIf=\"to && to.isButintin && to.isButintin==true;else tdDelete\"\n >\n <li></li>\n </ng-container>\n <ng-template #tdDelete>\n <li (click)=\"fieldOperational('delete')\">\n <button class=\"btnDel\">\n <i class=\"icon-KT-Close\"></i>\n </button>\n </li>\n </ng-template>\n </ul>\n </div>\n </div>\n <div class=\"report-body\">\n <ng-container *ngFor=\"let field of field.fieldGroup; let i = index\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n </div>\n </div>\n <div class=\"field-hide\" *ngIf=\"field.hide == true\">\n <div class=\"field-hide-content\">\u5DF2\u9690\u85CF</div>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"formStatus === 0\">\n <ng-container *ngIf=\"to.type=='table';else cardTmp\">\n <div class=\"mb-2 add-box\">\n <div *ngIf=\"isAdd\" class=\"flex-h new-flex-1 flex-justify-end\">\n <span class=\"add-button w-5\" (click)=\"add();addIndex()\">\n <i class=\"icon-tianjin\"></i>\n \u65B0\u589E\n </span>\n </div>\n </div>\n <div class=\"w-100\">\n <nz-table\n #basicTable\n nzShowPagination=\"false\"\n nzSize=\"small\"\n [nzData]=\"field.fieldGroup\"\n [nzScroll]=\"{\n x: showXScroll ? tableWidth + 'px' : null,y:'210px'\n }\"\n [nzPageSize]=\"field?.fieldGroup?.length\"\n [class.showScroll]=\"showXScroll\"\n >\n <thead>\n <tr>\n <th nzWidth=\"50px\" class=\"select-box td\" nzLeft=\"0px\">\u5E8F\u53F7</th>\n <ng-container *ngFor=\"let title of field?.fieldArray?.fieldGroup\">\n <th\n *ngIf=\"title && title.type!==undefined && title.type!==null && (title.type!=='line' && title.type!=='htmlcontent') && title.hide !=true\"\n >\n <div class=\"new-flex-1 repeat-table-title\">\n <ng-container\n *ngIf=\"title && title.templateOptions!==undefined && title.templateOptions!==null\"\n >\n <span\n *ngIf=\"title.templateOptions.required\"\n class=\"required\"\n >*</span\n >\n {{ title.templateOptions.label }}\n </ng-container>\n </div>\n </th>\n </ng-container>\n <th nzRight=\"0px\" class=\"select-box td td-th\" *ngIf=\"isDelete\">\n <span class=\"\"> </span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let field of basicTable.data; let i = index\" class=\"tr\">\n <td nzLeft=\"0px\" class=\"td-bg\">\n <span class=\"serial\">{{ i + 1 }}</span>\n </td>\n <ng-container *ngFor=\"let f of field.fieldGroup\">\n <td\n class=\"w-100-td\"\n *ngIf=\"f && f.type!==undefined && f.type!==null &&(f.type!=='line' && f.type!=='htmlcontent') && f.hide!=true\"\n >\n <kreform-field [field]=\"f\"></kreform-field>\n </td>\n </ng-container>\n <td\n *ngIf=\"isDelete\"\n nzRight=\"0px\"\n class=\"select-box td\"\n [class.isRemoved]=\"!isRemoved(field)\"\n (click)=\"removed(i , isRemoved(field))\"\n >\n <span class=\"select\">\u5220\u9664</span>\n </td>\n </tr>\n </tbody>\n </nz-table>\n </div>\n </ng-container>\n <ng-template #cardTmp>\n <ng-container\n *ngIf=\"field.fieldGroup!==undefined && field.fieldGroup!==null && field.fieldGroup.length>0;else cardEmpty\"\n >\n <div *ngFor=\"let field of field.fieldGroup; let i = index\" class=\"row\">\n <ng-container *ngIf=\"field.hide!=true\">\n <kreform-field class=\"col\" [field]=\"field\"></kreform-field>\n </ng-container>\n <span\n (click)=\"removed(i , isRemoved(field))\"\n class=\"del\"\n *ngIf=\"isRemoved(field) && isDelete\"\n >\u5220\u9664</span\n >\n\n <div class=\"tips\"></div>\n </div>\n </ng-container>\n <ng-template #cardEmpty>\n <div class=\"repeat-card-empty\">\n <div class=\"repeat-empty-image\"></div>\n <p class=\"ant-empty-description\">\u6682\u65E0\u6570\u636E</p>\n </div>\n </ng-template>\n <div class=\"add\" *ngIf=\"isAdd\">\n <span (click)=\"add();addIndex()\">\u65B0\u589E</span>\n </div>\n </ng-template>\n</ng-container>\n"
}] }
];
/** @nocollapse */
DeonFieldOverTime.ctorParameters = () => [
{ type: KreFormAntService },
{ type: FormGlobalService }
];
if (false) {
/** @type {?} */
DeonFieldOverTime.prototype.service;
/** @type {?} */
DeonFieldOverTime.prototype.titles;
/** @type {?} */
DeonFieldOverTime.prototype.showXScroll;
/** @type {?} */
DeonFieldOverTime.prototype.screenTableWidth;
/** @type {?} */
DeonFieldOverTime.prototype.tableWidth;
/** @type {?} */
DeonFieldOverTime.prototype.chartresize;
/**
* @type {?}
* @private
*/
DeonFieldOverTime.prototype.globalService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa3JlLWZvcm0vYW50LyIsInNvdXJjZXMiOlsibGliL3RlbXBsYXRlcy9vdmVydGltZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsR0FNVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFLeEQsTUFBTSxPQUFPLGlCQUNYLFNBQVEsY0FBYzs7Ozs7SUFRdEIsWUFDRSxTQUE0QixFQUNwQixhQUFnQztRQUV4QyxLQUFLLEVBQUUsQ0FBQztRQUZBLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQU4xQyxXQUFNLEdBQTZCLEVBQUUsQ0FBQztRQUN0QyxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDN0MsZUFBVSxHQUFHLENBQUMsQ0FBQztRQTJHZixnQkFBVzs7O1FBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDLEVBQUM7UUF2R0EsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7SUFDM0IsQ0FBQzs7OztJQUNELFdBQVcsS0FBSSxDQUFDOzs7O0lBQ2hCLFFBQVE7UUFDTixJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksQ0FBQyxLQUFLLEVBQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3ZDLHFCQUFxQjtZQUNyQix1Q0FBdUM7WUFDdkMsMEJBQTBCO1lBQzFCLEtBQUs7U0FDTjtRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDOzs7Ozs7SUFFRCxZQUFZLENBQUMsWUFBaUIsRUFBRSxXQUFnQjtRQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxDQUFDLGVBQXVCLEVBQUUsRUFBRTs7Z0JBQ3hELEtBQUssR0FBVyxNQUFNLENBQ3hCLGVBQWUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDN0Q7WUFDRCxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pCLFdBQVcsQ0FBQyxPQUFPOzs7OztnQkFBQyxDQUFDLFNBQWMsRUFBRSxHQUFXLEVBQUUsRUFBRTtvQkFDbEQsSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO3dCQUNqQixTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU87Ozs7d0JBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTs0QkFDN0MsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQ0FDakQsSUFDRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssU0FBUztvQ0FDckMsUUFBUSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUM7b0NBQ3BDLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUMxQjtvQ0FDQSxRQUFRLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztpQ0FDL0I7Z0NBQ0QsSUFDRSxRQUFRLENBQUMsWUFBWSxLQUFLLFNBQVM7b0NBQ25DLFFBQVEsQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUM5QjtvQ0FDQSxRQUFRLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztpQ0FDNUI7Z0NBQ0QsUUFBUSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUN0QyxRQUFRLENBQUMsZUFBZSxFQUN4QixZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FDNUQsQ0FBQztnQ0FDRixJQUNFLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO29DQUNuRCxLQUFLO29DQUNQLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUM5RDtvQ0FDQSxRQUFRLENBQUMsTUFBTTt3Q0FDYixZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lDQUN6RDtnQ0FDRCxJQUNFLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO29DQUNqRCxLQUFLO29DQUNQLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUM1RDtvQ0FDQSxRQUFRLENBQUMsSUFBSTt3Q0FDWCxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lDQUN2RDtnQ0FFRCxRQUFRLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ25DLFFBQVEsQ0FBQyxZQUFZLEVBQ3JCLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUN6RCxDQUFDO2dDQUNGLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7O3dDQUMxQixVQUFVLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0NBQzVELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7O3dDQUNwQixXQUFXLEdBQUcsbUJBQUEsQ0FBQyxtQkFBQSxRQUFRLEVBQXNCLENBQUM7eUNBQy9DLFVBQVUsRUFBd0I7b0NBRXJDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2lDQUM1Qzs2QkFDRjt3QkFDSCxDQUFDLEVBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLEVBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBRUQsV0FBVztRQUNULE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDOzs7O0lBQ0QsZUFBZSxLQUFJLENBQUM7Ozs7O0lBQ3BCLGdCQUFnQixDQUFDLElBQVk7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7Ozs7O0lBRUQsZ0JBQWdCLENBQUMsSUFBWTtRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7Ozs7SUFFRCxNQUFNLENBQUMsQ0FBTTtRQUNYLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hCO2FBQU07U0FDTjtJQUNILENBQUM7Ozs7SUFLRCxXQUFXOztZQUNMLEtBQUssR0FBRyxHQUFHO1FBQ2YsSUFDRSxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVM7WUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLFNBQVM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSTtZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksU0FBUztZQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUN4QztZQUNBLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDN0Q7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDOzs7O0lBQ0QsUUFBUTtRQUNOLENBQUMsbUJBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQVMsQ0FBQyxDQUFDLE9BQU87Ozs7O1FBQUMsQ0FBQyxFQUFPLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDbEUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPOzs7O1lBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNsQyxJQUNFLElBQUksQ0FBQyxLQUFLO29CQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtvQkFDMUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSzt3QkFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUN6QztvQkFDQSxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7aUJBQy9EO1lBQ0gsQ0FBQyxFQUFDLENBQUM7UUFDTCxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7O0lBQ0QsU0FBUyxDQUFDLENBQXFCOztZQUN6QixNQUFNLEdBQUcsSUFBSTtRQUNqQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO1lBQ3pCLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDaEI7UUFFRCxJQUNFLG1CQUFBLG1CQUFBLG1CQUFBLENBQUMsRUFBQyxDQUNDLFVBQVUsRUFBQyxDQUFDLE1BQU07Ozs7UUFDakIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUN4RCxFQUFDLENBQ0QsS0FBSzs7OztRQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQUEsRUFBRSxFQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxtQkFBQSxtQkFBQSxFQUFFLEVBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxNQUFNLEVBQUMsRUFDdkU7WUFDQSxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7Ozs7O0lBQ0QsT0FBTyxDQUFDLENBQVMsRUFBRSxRQUFpQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDOzs7O0lBQ0QsVUFBVTs7WUFDSixJQUFJLEdBQUcsSUFBSTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDOzs7OztJQUNELFFBQVEsQ0FBQyxDQUFTO1FBQ2hCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzs7O0lBQ0QsY0FBYztRQUNaLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQ3JDLENBQUM7OztZQXpMRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsb2lUQUEyQjthQUM1Qjs7OztZQUpRLGlCQUFpQjtZQVBELGlCQUFpQjs7OztJQWdCeEMsb0NBQWE7O0lBQ2IsbUNBQXNDOztJQUN0Qyx3Q0FBbUI7O0lBQ25CLDZDQUE2Qzs7SUFDN0MsdUNBQWU7O0lBMkdmLHdDQUVFOzs7OztJQTFHQSwwQ0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBPbkNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGaWVsZEFycmF5VHlwZSwgRm9ybUdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiQGtyZS1mb3JtL2NvcmVcIjtcbmltcG9ydCB7XG4gIEtyZUZvcm1Db21tb25TZXJ2aWNlLFxuICBLcmVGb3JtVGVtcGxhdGVPcHRpb25zLFxuICBLcmVGb3JtRmllbGRDb25maWcsXG59IGZyb20gXCJAa3JlLWZvcm0vY29yZVwiO1xuXG5pbXBvcnQgeyBLcmVGb3JtQW50U2VydmljZSB9IGZyb20gXCIuLi8uLi90b29scy9zZXJ2aWNlXCI7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3JlZm9ybS1vdmVyVGltZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4Lmh0bWxcIixcbn0pXG5leHBvcnQgY2xhc3MgRGVvbkZpZWxkT3ZlclRpbWVcbiAgZXh0ZW5kcyBGaWVsZEFycmF5VHlwZVxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXNcbntcbiAgc2VydmljZTogYW55O1xuICB0aXRsZXM6IEtyZUZvcm1UZW1wbGF0ZU9wdGlvbnNbXSA9IFtdO1xuICBzaG93WFNjcm9sbCA9IHRydWU7XG4gIHNjcmVlblRhYmxlV2lkdGggPSB3aW5kb3cuc2NyZWVuLndpZHRoIC0gMTYyO1xuICB0YWJsZVdpZHRoID0gMDtcbiAgY29uc3RydWN0b3IoXG4gICAgZHlTZXJ2aWNlOiBLcmVGb3JtQW50U2VydmljZSxcbiAgICBwcml2YXRlIGdsb2JhbFNlcnZpY2U6IEZvcm1HbG9iYWxTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zZXJ2aWNlID0gZHlTZXJ2aWNlO1xuICB9XG4gIG5nT25DaGFuZ2VzKCkge31cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCEhKHRoaXMuZmllbGQgYXMgYW55KVtcInJlcGVhdFJvbGVcIl0pIHtcbiAgICAgIC8vIHRoaXMuaW5pdFByb3BlcnR5KFxuICAgICAgLy8gICAodGhpcy5maWVsZCBhcyBhbnkpW1wicmVwZWF0Um9sZVwiXSxcbiAgICAgIC8vICAgdGhpcy5maWVsZC5maWVsZEdyb3VwXG4gICAgICAvLyApO1xuICAgIH1cblxuICAgIGlmICghIXRoaXMuZmllbGRbXCJzaG93XCJdKSB7XG4gICAgICB0aGlzLmZpZWxkLmhpZGUgPSAhdGhpcy5maWVsZFtcInNob3dcIl07XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlV2lkdGgoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLmNoYXJ0cmVzaXplLCB0cnVlKTtcbiAgfVxuXG4gIGluaXRQcm9wZXJ0eShvdmVyVGltZVJvbGU6IGFueSwgZmllbGRHcm91cHM6IGFueSkge1xuICAgIE9iamVjdC5rZXlzKG92ZXJUaW1lUm9sZSkuZm9yRWFjaCgob3ZlcnRpbWVJdGVtS2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGxldCBpbmRleDogbnVtYmVyID0gTnVtYmVyKFxuICAgICAgICBvdmVydGltZUl0ZW1LZXkuc3Vic3RyKG92ZXJ0aW1lSXRlbUtleS5sYXN0SW5kZXhPZihcIiRcIikgKyAxKVxuICAgICAgKTtcbiAgICAgIGlmICghIWZpZWxkR3JvdXBzKSB7XG4gICAgICAgIGZpZWxkR3JvdXBzLmZvckVhY2goKG92ZXJ0aW1lczogYW55LCBpbmQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gaW5kKSB7XG4gICAgICAgICAgICBvdmVydGltZXMuZmllbGRHcm91cC5mb3JFYWNoKChvdmVydGltZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghIW92ZXJUaW1lUm9sZVtvdmVydGltZUl0ZW1LZXldW292ZXJ0aW1lLmtleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAob3ZlcnRpbWUudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnRpbWUudGVtcGxhdGVPcHRpb25zID09PSBudWxsKSAmJlxuICAgICAgICAgICAgICAgICAgb3ZlcnRpbWUudHlwZSAhPT0gXCJyZXBlYXRcIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgb3ZlcnRpbWUudGVtcGxhdGVPcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIG92ZXJ0aW1lLmVkaXRQcm9wZXJ0eSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICBvdmVydGltZS5lZGl0UHJvcGVydHkgPT09IG51bGxcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIG92ZXJ0aW1lLmVkaXRQcm9wZXJ0eSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdmVydGltZS50ZW1wbGF0ZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgb3ZlcnRpbWUudGVtcGxhdGVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgb3ZlclRpbWVSb2xlW292ZXJ0aW1lSXRlbUtleV1bb3ZlcnRpbWUua2V5XS50ZW1wbGF0ZU9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIG92ZXJUaW1lUm9sZVtvdmVydGltZUl0ZW1LZXldW292ZXJ0aW1lLmtleV1bXCJlZGl0b3JcIl0gPT09XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlIHx8XG4gICAgICAgICAgICAgICAgICBvdmVyVGltZVJvbGVbb3ZlcnRpbWVJdGVtS2V5XVtvdmVydGltZS5rZXldW1wiZWRpdG9yXCJdID09PSB0cnVlXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBvdmVydGltZS5lZGl0b3IgPVxuICAgICAgICAgICAgICAgICAgICBvdmVyVGltZVJvbGVbb3ZlcnRpbWVJdGVtS2V5XVtvdmVydGltZS5rZXldW1wiZWRpdG9yXCJdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvdmVyVGltZVJvbGVbb3ZlcnRpbWVJdGVtS2V5XVtvdmVydGltZS5rZXldW1wic2hvd1wiXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgZmFsc2UgfHxcbiAgICAgICAgICAgICAgICAgIG92ZXJUaW1lUm9sZVtvdmVydGltZUl0ZW1LZXldW292ZXJ0aW1lLmtleV1bXCJzaG93XCJdID09PSB0cnVlXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBvdmVydGltZS5zaG93ID1cbiAgICAgICAgICAgICAgICAgICAgb3ZlclRpbWVSb2xlW292ZXJ0aW1lSXRlbUtleV1bb3ZlcnRpbWUua2V5XVtcInNob3dcIl07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb3ZlcnRpbWUuZWRpdFByb3BlcnR5ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICAgIG92ZXJ0aW1lLmVkaXRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgIG92ZXJUaW1lUm9sZVtvdmVydGltZUl0ZW1LZXldW292ZXJ0aW1lLmtleV0uZWRpdFByb3BlcnR5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAob3ZlcnRpbWUudHlwZSA9PT0gXCJyZXBlYXRcIikge1xuICAgICAgICAgICAgICAgICAgbGV0IHJlcGVhdFJvbGUgPSBvdmVyVGltZVJvbGVbb3ZlcnRpbWVJdGVtS2V5XVtvdmVydGltZS5rZXldO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVwZWF0Um9sZSk7XG4gICAgICAgICAgICAgICAgICBsZXQgZmllbGRHcm91cHMgPSAob3ZlcnRpbWUgYXMgS3JlRm9ybUZpZWxkQ29uZmlnKVxuICAgICAgICAgICAgICAgICAgICAuZmllbGRHcm91cCBhcyBLcmVGb3JtRmllbGRDb25maWdbXTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5pbml0UHJvcGVydHkocmVwZWF0Um9sZSwgZmllbGRHcm91cHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHRoaXMuY2hhcnRyZXNpemUsIHRydWUpO1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHt9XG4gIGZpZWxkT3BlcmF0aW9uYWwoc2lnbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmZpZWxkT3BlcmF0aW9uYWwoc2lnbiwgdGhpcy5maWVsZCk7XG4gIH1cblxuICBncm91cE9wZXJhdGlvbmFsKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuc2VydmljZS5ncm91cE9wZXJhdGlvbmFsKHR5cGUsIHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZGVsZXRlKGk6IGFueSkge1xuICAgIGlmICh0aGlzLmZpZWxkLmZpZWxkR3JvdXAgJiYgdGhpcy5maWVsZC5maWVsZEdyb3VwLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMucmVtb3ZlKGkpO1xuICAgIH0gZWxzZSB7XG4gICAgfVxuICB9XG5cbiAgY2hhcnRyZXNpemUgPSAoKSA9PiB7XG4gICAgdGhpcy5jaGFuZ2VXaWR0aCgpO1xuICB9O1xuICBjaGFuZ2VXaWR0aCgpIHtcbiAgICBsZXQgd2lkdGggPSAzMDA7XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWVsZCAhPSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZmllbGQgIT0gbnVsbCAmJlxuICAgICAgdGhpcy5maWVsZC5maWVsZEFycmF5ICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5maWVsZC5maWVsZEFycmF5ICE9IG51bGwgJiZcbiAgICAgIHRoaXMuZmllbGQuZmllbGRBcnJheS5maWVsZEdyb3VwICE9IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5maWVsZC5maWVsZEFycmF5LmZpZWxkR3JvdXAgIT0gbnVsbFxuICAgICkge1xuICAgICAgd2lkdGggPSB0aGlzLmZpZWxkLmZpZWxkQXJyYXkuZmllbGRHcm91cC5sZW5ndGggKiAyNDUgKyAxMjA7XG4gICAgfVxuXG4gICAgdGhpcy50YWJsZVdpZHRoID0gd2lkdGg7XG4gIH1cbiAgYWRkSW5kZXgoKSB7XG4gICAgKHRoaXMuZmllbGQuZmllbGRHcm91cCBhcyBhbnlbXSkuZm9yRWFjaCgoZWw6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgZWwuZmllbGRHcm91cC5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICBlbGUudGVtcGxhdGVPcHRpb25zLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmZpZWxkICYmXG4gICAgICAgICAgdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMgJiZcbiAgICAgICAgICAoISF0aGlzLmZpZWxkLnRlbXBsYXRlT3B0aW9ucy5pbmRleCB8fFxuICAgICAgICAgICAgdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMuaW5kZXggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgIGVsZS50ZW1wbGF0ZU9wdGlvbnMucEluZGV4ID0gdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMuaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGlzUmVtb3ZlZChmOiBLcmVGb3JtRmllbGRDb25maWcpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5lZGl0b3IgPT09IGZhbHNlKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmIVxuICAgICAgICAuZmllbGRHcm91cCEuZmlsdGVyKFxuICAgICAgICAgIChlbCkgPT4gZWwudHlwZSAhPT0gXCJsaW5lXCIgJiYgZWwudHlwZSAhPT0gXCJodG1sY29udGVudFwiXG4gICAgICAgICkhXG4gICAgICAgIC5ldmVyeSgoZWw6IGFueSkgPT4gISFlbCEuZWRpdFByb3BlcnR5ICYmICEhZWwhLmVkaXRQcm9wZXJ0eSEuZGVsZXRlKVxuICAgICkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmVtb3ZlZChpOiBudW1iZXIsIGlzUmVtb3ZlOiBib29sZWFuKSB7XG4gICAgaWYgKCFpc1JlbW92ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZShpKTtcbiAgICB0aGlzLmFkZEluZGV4KCk7XG4gIH1cbiAgc2hvd0Vycm9ycygpIHtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQuc2hvd0Vycm9yO1xuICB9XG4gIG5ld1Jvd0lkKGk6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZmllbGQuaWR9XyR7aX1gO1xuICB9XG4gIG5ld1JlcGVhdENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZmllbGQuaWR9X292ZXJUaW1lYDtcbiAgfVxufVxuIl19