UNPKG

@mescius/inputman.comment.angular

Version:

このパッケージには、Angular用の[InputManJS](https://developer.mescius.jp/inputmanjs)コンポーネントが含まれます。

288 lines 37.3 kB
import { ElementRef, Input, Output, EventEmitter, Component, } from "@angular/core"; import { GC } from "../inputman"; import { MethodType, isEmpty, getMethodPrefix, IMCommentCtrl, } from "./common"; import * as i0 from "@angular/core"; export class GcCommentComponent { constructor(ref) { this.editorCreated = new EventEmitter(); this.preprocessError = new EventEmitter(); this.beforeExecuteCommand = new EventEmitter(); this.afterExecuteCommand = new EventEmitter(); this.beforeFirstLoad = new EventEmitter(); this.afterFirstLoad = new EventEmitter(); this.onInitialized = new EventEmitter(); this._container = ref.nativeElement; } ngOnChanges(changes) { if (!this._imGcComment) { return; } Object.keys(changes).forEach((key) => { let currentValue = changes[key].currentValue; this.setValueToIMControl(key, currentValue); }); } setValueToIMControl(key, value) { if (value === undefined) { return; } if (this.isSetAccessor(key)) { this._imGcComment[key] = value; return; } let setter = this.tryGetPropertyOperator(key, MethodType.setter); if (this.hasRealMethod(setter)) { if (this.propDic && this.propDic[key] && this.propDic[key].isPramArr === true) { this._imGcComment[setter].apply(this._imGcComment, value); } else { this._imGcComment[setter](value); } } } hasRealMethod(methodName) { return (this._imGcComment && typeof this._imGcComment[methodName] === "function"); } isSetAccessor(key) { let descriptor = Object.getOwnPropertyDescriptor(this._imGcComment.constructor.prototype, key); if (descriptor && descriptor.set) { return true; } return false; } tryGetPropertyOperator(propertyName, methodType) { let method = ""; if (this.propDic && this.propDic[propertyName]) { method = methodType === MethodType.getter ? this.propDic[propertyName].getter : this.propDic[propertyName].setter; if (!isEmpty(method)) { return method; } } return (getMethodPrefix(methodType) + propertyName[0].toUpperCase() + propertyName.slice(1)); } ngAfterContentInit() { this.initGcComment(); this.bindEvent(); if (this.propDic) { var unSupportWithinConfigProps = Object.keys(this.propDic).filter((p) => this.propDic[p] && this.propDic[p].supportWithinConfig === false); unSupportWithinConfigProps.sort((p1, p2) => { return this.propDic[p1].order - this.propDic[p2].order; }); unSupportWithinConfigProps.forEach((p) => { this.setValueToIMControl(p, this[p]); }); } this._container[IMCommentCtrl] = this._imGcComment; } bindEvent() { if (!this._imGcComment) { return; } this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.EditorCreated, (e) => { this.editorCreated.emit(e); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.PreprocessError, (e) => { this.preprocessError.emit(e); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.BeforeExecuteCommand, (e) => { this.beforeExecuteCommand.emit(e); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.AfterExecuteCommand, (e) => { this.afterExecuteCommand.emit(e); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.BeforeFirstLoad, () => { this.beforeFirstLoad.emit(); }); this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.AfterFirstLoad, () => { this.afterFirstLoad.emit(); }); } ngOnDestroy() { if (this._container != null) { this._container.remove(); this._imGcComment?.destroy?.(); this._imGcComment = null; } } initGcComment() { let element = document.createElement('div'); this.createTemplate(element); this._imGcComment = new GC.InputMan.GcComment(element, this); if (Array.isArray(this.comments)) { this._imGcComment.comments = this.comments; } if (this.stickedComment) { this._imGcComment.stickedComment = this.stickedComment; } this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.CreateEditor, this.createEditor); this.onInitialized.emit(this._imGcComment); } createTemplate(element) { this._container.innerHTML = ""; this._container.appendChild(element); } getNestedIMControl() { return this._imGcComment; } } GcCommentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcCommentComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); GcCommentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GcCommentComponent, selector: "gc-comment", inputs: { userInfo: "userInfo", candidateReactionList: "candidateReactionList", candidateReactionListColumns: "candidateReactionListColumns", postTimeFormatter: "postTimeFormatter", updateTimeFormatter: "updateTimeFormatter", showIcon: "showIcon", addCommentEditorPosition: "addCommentEditorPosition", commentMode: "commentMode", header: "header", footer: "footer", headerFooterItems: "headerFooterItems", commentAction: "commentAction", commentInfoAction: "commentInfoAction", commentActionItem: "commentActionItem", commentInfoActionItem: "commentInfoActionItem", commentActionButtonType: "commentActionButtonType", pageSize: "pageSize", loadOnDemand: "loadOnDemand", allowAnonymous: "allowAnonymous", anonymousUserInfo: "anonymousUserInfo", warningMessage: "warningMessage", watermark: "watermark", commentFormatter: "commentFormatter", editorConfig: "editorConfig", avatarType: "avatarType", loadUsersInfoHandler: "loadUsersInfoHandler", loadComments: "loadComments", addNewCommentTo: "addNewCommentTo", keepDraft: "keepDraft", dataSource: "dataSource", loadCommentCount: "loadCommentCount", commentCountFormatter: "commentCountFormatter", loadReactionCount: "loadReactionCount", reactionCountFormatter: "reactionCountFormatter", sortInfo: "sortInfo", createEditor: "createEditor", loadRepliesOnDemand: "loadRepliesOnDemand", replyLevel: "replyLevel", collapseRepliesMode: "collapseRepliesMode", showCurrentUserName: "showCurrentUserName", contextToolbar: "contextToolbar", contextToolbarItem: "contextToolbarItem", loadCommentReplies: "loadCommentReplies", comments: "comments", stickedComment: "stickedComment", copiedLinkDisplayTextFormatter: "copiedLinkDisplayTextFormatter", copiedLinkFormatter: "copiedLinkFormatter", copiedLinkSearchParams: "copiedLinkSearchParams", pastedLinkType: "pastedLinkType", showLinkTypeContextToolbar: "showLinkTypeContextToolbar", loadCommentByLink: "loadCommentByLink", openLinkMode: "openLinkMode", loadStickedComment: "loadStickedComment", showZeroReaction: "showZeroReaction", showOpenReactionListButton: "showOpenReactionListButton", readOnly: "readOnly", enabled: "enabled", height: "height", width: "width", maxHeight: "maxHeight", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", banner: "banner" }, outputs: { editorCreated: "editorCreated", preprocessError: "preprocessError", beforeExecuteCommand: "beforeExecuteCommand", afterExecuteCommand: "afterExecuteCommand", beforeFirstLoad: "beforeFirstLoad", afterFirstLoad: "afterFirstLoad", onInitialized: "onInitialized" }, usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcCommentComponent, decorators: [{ type: Component, args: [{ selector: "gc-comment", template: `<ng-content></ng-content>`, }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { userInfo: [{ type: Input }], candidateReactionList: [{ type: Input }], candidateReactionListColumns: [{ type: Input }], postTimeFormatter: [{ type: Input }], updateTimeFormatter: [{ type: Input }], showIcon: [{ type: Input }], addCommentEditorPosition: [{ type: Input }], commentMode: [{ type: Input }], header: [{ type: Input }], footer: [{ type: Input }], headerFooterItems: [{ type: Input }], commentAction: [{ type: Input }], commentInfoAction: [{ type: Input }], commentActionItem: [{ type: Input }], commentInfoActionItem: [{ type: Input }], commentActionButtonType: [{ type: Input }], pageSize: [{ type: Input }], loadOnDemand: [{ type: Input }], allowAnonymous: [{ type: Input }], anonymousUserInfo: [{ type: Input }], warningMessage: [{ type: Input }], watermark: [{ type: Input }], commentFormatter: [{ type: Input }], editorConfig: [{ type: Input }], avatarType: [{ type: Input }], loadUsersInfoHandler: [{ type: Input }], loadComments: [{ type: Input }], addNewCommentTo: [{ type: Input }], keepDraft: [{ type: Input }], dataSource: [{ type: Input }], loadCommentCount: [{ type: Input }], commentCountFormatter: [{ type: Input }], loadReactionCount: [{ type: Input }], reactionCountFormatter: [{ type: Input }], sortInfo: [{ type: Input }], createEditor: [{ type: Input }], loadRepliesOnDemand: [{ type: Input }], replyLevel: [{ type: Input }], collapseRepliesMode: [{ type: Input }], showCurrentUserName: [{ type: Input }], contextToolbar: [{ type: Input }], contextToolbarItem: [{ type: Input }], loadCommentReplies: [{ type: Input }], comments: [{ type: Input }], stickedComment: [{ type: Input }], copiedLinkDisplayTextFormatter: [{ type: Input }], copiedLinkFormatter: [{ type: Input }], copiedLinkSearchParams: [{ type: Input }], pastedLinkType: [{ type: Input }], showLinkTypeContextToolbar: [{ type: Input }], loadCommentByLink: [{ type: Input }], openLinkMode: [{ type: Input }], loadStickedComment: [{ type: Input }], showZeroReaction: [{ type: Input }], showOpenReactionListButton: [{ type: Input }], readOnly: [{ type: Input }], enabled: [{ type: Input }], height: [{ type: Input }], width: [{ type: Input }], maxHeight: [{ type: Input }], maxWidth: [{ type: Input }], minHeight: [{ type: Input }], minWidth: [{ type: Input }], banner: [{ type: Input }], editorCreated: [{ type: Output }], preprocessError: [{ type: Output }], beforeExecuteCommand: [{ type: Output }], afterExecuteCommand: [{ type: Output }], beforeFirstLoad: [{ type: Output }], afterFirstLoad: [{ type: Output }], onInitialized: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2NDb21tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tbWVudC9HY0NvbW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILFVBQVUsRUFFVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBRWYsYUFBYSxHQUNoQixNQUFNLFVBQVUsQ0FBQzs7QUFNbEIsTUFBTSxPQUFPLGtCQUFrQjtJQU8zQixZQUFZLEdBQWU7UUFnVHBCLGtCQUFhLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekQsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzRCx5QkFBb0IsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRSx3QkFBbUIsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUvRCxvQkFBZSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTNELG1CQUFjLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQsa0JBQWEsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQTNUNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzdDLElBQUksQ0FBQyxtQkFBbUIs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QkFEYixLQUFLO2dCQUdOLDhCQUE4QjtzQkFEN0IsS0FBSztnQkFHTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBR04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSztnQkFHTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBR04saUJBQWlCO3NCQURoQixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBR04sMEJBQTBCO3NCQUR6QixLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxLQUFLO2dCQUdOLEtBQUs7c0JBREosS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixRQUFRO3NCQURQLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLE1BQU07Z0JBR0EsZUFBZTtzQkFEckIsTUFBTTtnQkFHQSxvQkFBb0I7c0JBRDFCLE1BQU07Z0JBR0EsbUJBQW1CO3NCQUR6QixNQUFNO2dCQUdBLGVBQWU7c0JBRHJCLE1BQU07Z0JBR0EsY0FBYztzQkFEcEIsTUFBTTtnQkFHQSxhQUFhO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ29tcG9uZW50LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgR0MgfSBmcm9tIFwiLi4vaW5wdXRtYW5cIjtcbmltcG9ydCB7XG4gICAgTWV0aG9kVHlwZSxcbiAgICBpc0VtcHR5LFxuICAgIGdldE1ldGhvZFByZWZpeCxcbiAgICBQcm9wZXJ0eURpY3Rpb25hcnksXG4gICAgSU1Db21tZW50Q3RybCxcbn0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcImdjLWNvbW1lbnRcIixcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxufSlcbmV4cG9ydCBjbGFzcyBHY0NvbW1lbnRDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XG57XG4gICAgcHJvdGVjdGVkIF9jb250YWluZXI6IEVsZW1lbnQ7XG4gICAgcHJvdGVjdGVkIF9pbUdjQ29tbWVudDogR0MuSW5wdXRNYW4uR2NDb21tZW50O1xuICAgIHByb3RlY3RlZCBwcm9wRGljOiBQcm9wZXJ0eURpY3Rpb25hcnk7XG5cbiAgICBjb25zdHJ1Y3RvcihyZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gcmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbUdjQ29tbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZVRvSU1Db250cm9sKGtleSwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFZhbHVlVG9JTUNvbnRyb2woa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzU2V0QWNjZXNzb3Ioa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNldHRlciA9IHRoaXMudHJ5R2V0UHJvcGVydHlPcGVyYXRvcihrZXksIE1ldGhvZFR5cGUuc2V0dGVyKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVhbE1ldGhvZChzZXR0ZXIpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wRGljICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wRGljW2tleV0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BEaWNba2V5XS5pc1ByYW1BcnIgPT09IHRydWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50W3NldHRlcl0uYXBwbHkodGhpcy5faW1HY0NvbW1lbnQsIHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnRbc2V0dGVyXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1JlYWxNZXRob2QobWV0aG9kTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9pbUdjQ29tbWVudCAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuX2ltR2NDb21tZW50W21ldGhvZE5hbWVdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2V0QWNjZXNzb3Ioa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQuY29uc3RydWN0b3IucHJvdG90eXBlLFxuICAgICAgICAgICAga2V5XG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cnlHZXRQcm9wZXJ0eU9wZXJhdG9yKFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICAgICAgbWV0aG9kVHlwZTogTWV0aG9kVHlwZVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGxldCBtZXRob2Q6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLnByb3BEaWMgJiYgdGhpcy5wcm9wRGljW3Byb3BlcnR5TmFtZV0pIHtcbiAgICAgICAgICAgIG1ldGhvZCA9XG4gICAgICAgICAgICAgICAgbWV0aG9kVHlwZSA9PT0gTWV0aG9kVHlwZS5nZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb3BEaWNbcHJvcGVydHlOYW1lXS5nZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnByb3BEaWNbcHJvcGVydHlOYW1lXS5zZXR0ZXI7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkobWV0aG9kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldE1ldGhvZFByZWZpeChtZXRob2RUeXBlKSArXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWVbMF0udG9VcHBlckNhc2UoKSArXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUuc2xpY2UoMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRHY0NvbW1lbnQoKTtcbiAgICAgICAgdGhpcy5iaW5kRXZlbnQoKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcERpYykge1xuICAgICAgICAgICAgdmFyIHVuU3VwcG9ydFdpdGhpbkNvbmZpZ1Byb3BzID0gT2JqZWN0LmtleXModGhpcy5wcm9wRGljKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcERpY1twXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BEaWNbcF0uc3VwcG9ydFdpdGhpbkNvbmZpZyA9PT0gZmFsc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB1blN1cHBvcnRXaXRoaW5Db25maWdQcm9wcy5zb3J0KChwMSwgcDIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wRGljW3AxXS5vcmRlciAtIHRoaXMucHJvcERpY1twMl0ub3JkZXI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdW5TdXBwb3J0V2l0aGluQ29uZmlnUHJvcHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVUb0lNQ29udHJvbChwLCB0aGlzW3BdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lcltJTUNvbW1lbnRDdHJsXSA9IHRoaXMuX2ltR2NDb21tZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBiaW5kRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5faW1HY0NvbW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuRWRpdG9yQ3JlYXRlZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JDcmVhdGVkLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5QcmVwcm9jZXNzRXJyb3IsXG4gICAgICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc0Vycm9yLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5CZWZvcmVFeGVjdXRlQ29tbWFuZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVFeGVjdXRlQ29tbWFuZC5lbWl0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuQWZ0ZXJFeGVjdXRlQ29tbWFuZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckV4ZWN1dGVDb21tYW5kLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5CZWZvcmVGaXJzdExvYWQsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVGaXJzdExvYWQuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuQWZ0ZXJGaXJzdExvYWQsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckZpcnN0TG9hZC5lbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50Py5kZXN0cm95Py4oKTtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEdjQ29tbWVudCgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUZW1wbGF0ZShlbGVtZW50KTtcbiAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQgPSBuZXcgR0MuSW5wdXRNYW4uR2NDb21tZW50KGVsZW1lbnQsIHRoaXMgYXMgYW55KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb21tZW50cykpIHtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmNvbW1lbnRzID0gdGhpcy5jb21tZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGlja2VkQ29tbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQuc3RpY2tlZENvbW1lbnQgPSB0aGlzLnN0aWNrZWRDb21tZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5DcmVhdGVFZGl0b3IsXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUVkaXRvclxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9uSW5pdGlhbGl6ZWQuZW1pdCh0aGlzLl9pbUdjQ29tbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUZW1wbGF0ZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROZXN0ZWRJTUNvbnRyb2woKTogR0MuSW5wdXRNYW4uR2NDb21tZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltR2NDb21tZW50O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgdXNlckluZm8/OiBHQy5JbnB1dE1hbi5Vc2VySW5mbztcbiAgICBASW5wdXQoKVxuICAgIGNhbmRpZGF0ZVJlYWN0aW9uTGlzdD86IChzdHJpbmd8IEdDLklucHV0TWFuLkNhbmRpZGF0ZVJlYWN0aW9uSXRlbSlbXTtcbiAgICBASW5wdXQoKVxuICAgIGNhbmRpZGF0ZVJlYWN0aW9uTGlzdENvbHVtbnM/OiBudW1iZXI7XG4gICAgQElucHV0KClcbiAgICBwb3N0VGltZUZvcm1hdHRlcj86IEdDLklucHV0TWFuLkRhdGVGb3JtYXR0ZXI7XG4gICAgQElucHV0KClcbiAgICB1cGRhdGVUaW1lRm9ybWF0dGVyPzogR0MuSW5wdXRNYW4uRGF0ZUZvcm1hdHRlcjtcbiAgICBASW5wdXQoKVxuICAgIHNob3dJY29uPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGFkZENvbW1lbnRFZGl0b3JQb3NpdGlvbj86IEdDLklucHV0TWFuLkdjQ29tbWVudEVkaXRvclBvc2l0aW9uO1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudE1vZGU/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRNb2RlO1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVyPzogKHN0cmluZyB8IEdDLklucHV0TWFuLkdjQ29tbWVudEhlYWRlckZvb3Rlckl0ZW0pW107XG4gICAgQElucHV0KClcbiAgICBmb290ZXI/OiAoc3RyaW5nIHwgR0MuSW5wdXRNYW4uR2NDb21tZW50SGVhZGVyRm9vdGVySXRlbSlbXTtcbiAgICBASW5wdXQoKVxuICAgIGhlYWRlckZvb3Rlckl0ZW1zPzogeyBba2V5OiBzdHJpbmddOiAoZ2NDb21tZW50OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnQpID0+IEdDLklucHV0TWFuLklIZWFkZXJGb290ZXJJdGVtIH07XG4gICAgQElucHV0KClcbiAgICBjb21tZW50QWN0aW9uPzogKHN0cmluZyB8IEdDLklucHV0TWFuLkdjQ29tbWVudENvbW1lbnRBY3Rpb25JdGVtKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudEluZm9BY3Rpb24/OiAoc3RyaW5nIHwgR0MuSW5wdXRNYW4uR2NDb21tZW50Q29tbWVudEluZm9BY3Rpb25JdGVtKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudEFjdGlvbkl0ZW0/OiB7IFtrZXk6IHN0cmluZ106IEdDLklucHV0TWFuLklDb21tZW50QWN0aW9uSXRlbSB9O1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudEluZm9BY3Rpb25JdGVtPzogeyBba2V5OiBzdHJpbmddOiBHQy5JbnB1dE1hbi5JQ29tbWVudEluZm9BY3Rpb25JdGVtIH07XG4gICAgQElucHV0KClcbiAgICBjb21tZW50QWN0aW9uQnV0dG9uVHlwZT86IEdDLklucHV0TWFuLkdjQ29tbWVudEFjdGlvbkJ1dHRvblR5cGU7XG4gICAgQElucHV0KClcbiAgICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRPbkRlbWFuZD86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBhbGxvd0Fub255bW91cz86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBhbm9ueW1vdXNVc2VySW5mbz86IEdDLklucHV0TWFuLlVzZXJJbmZvO1xuICAgIEBJbnB1dCgpXG4gICAgd2FybmluZ01lc3NhZ2U/OiBHQy5JbnB1dE1hbi5JV2FybmluZ01lc3NhZ2U7XG4gICAgQElucHV0KClcbiAgICB3YXRlcm1hcms/OiBHQy5JbnB1dE1hbi5JV2F0ZXJNYXJrO1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudEZvcm1hdHRlcj86IEdDLklucHV0TWFuLkNvbW1lbnRGb3JtYXR0ZXI7XG4gICAgQElucHV0KClcbiAgICBlZGl0b3JDb25maWc/OiBHQy5JbnB1dE1hbi5FZGl0b3JDb25maWc7XG4gICAgQElucHV0KClcbiAgICBhdmF0YXJUeXBlPzogR0MuSW5wdXRNYW4uR2NDb21tZW50VXNlckljb25UeXBlO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFVzZXJzSW5mb0hhbmRsZXI/OiBHQy5JbnB1dE1hbi5Mb2FkVXNlcnNDYWxsYmFjaztcbiAgICBASW5wdXQoKVxuICAgIGxvYWRDb21tZW50cz86IChhcmdzOiBHQy5JbnB1dE1hbi5Mb2FkTW9yZUNvbW1lbnRzSW5mbykgPT4gR0MuSW5wdXRNYW4uTG9hZENvbW1lbnRzUmVzdWx0O1xuICAgIEBJbnB1dCgpXG4gICAgYWRkTmV3Q29tbWVudFRvPzogR0MuSW5wdXRNYW4uQWRkTmV3Q29tbWVudFBvc2l0aW9uO1xuICAgIEBJbnB1dCgpXG4gICAga2VlcERyYWZ0PzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGRhdGFTb3VyY2U/OiBHQy5JbnB1dE1hbi5JR2NDb21tZW50RGF0YVNvdXJjZTtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRDb21tZW50Q291bnQ/OiAoKSA9PiBudW1iZXIgfCBQcm9taXNlPG51bWJlcj47XG4gICAgQElucHV0KClcbiAgICBjb21tZW50Q291bnRGb3JtYXR0ZXI/OiAobjogbnVtYmVyKSA9PiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRSZWFjdGlvbkNvdW50PzogKCkgPT4gbnVtYmVyIHwgUHJvbWlzZTxudW1iZXI+O1xuICAgIEBJbnB1dCgpXG4gICAgcmVhY3Rpb25Db3VudEZvcm1hdHRlcj86IChuOiBudW1iZXIpID0+IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpXG4gICAgc29ydEluZm8/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRTb3J0SW5mbztcbiAgICBASW5wdXQoKVxuICAgIGNyZWF0ZUVkaXRvcj86IChhcmdzOiBHQy5JbnB1dE1hbi5DcmVhdGVFZGl0b3JBcmdzKSA9PiBHQy5JbnB1dE1hbi5JQ29tbWVudEVkaXRvcjtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRSZXBsaWVzT25EZW1hbmQ/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcmVwbHlMZXZlbD86IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIGNvbGxhcHNlUmVwbGllc01vZGU/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRDb2xsYXBzZVJlcGxpZXNNb2RlO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0N1cnJlbnRVc2VyTmFtZT86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBjb250ZXh0VG9vbGJhcj86IChzdHJpbmcgfCBHQy5JbnB1dE1hbi5HY0NvbW1lbnRDb250ZXh0VG9vbGJhciB8IEdDLklucHV0TWFuLkNvbnRleHRUb29sYmFyT3B0aW9uKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgY29udGV4dFRvb2xiYXJJdGVtPzogeyBba2V5OiBzdHJpbmddOiBHQy5JbnB1dE1hbi5JQ29tbWVudENvbnRleHRUb29sYmFySXRlbSB9O1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZENvbW1lbnRSZXBsaWVzPzogKGNvbW1lbnQ6IEdDLklucHV0TWFuLklDb21tZW50LCBsb2FkZWRDb3VudDogbnVtYmVyKSA9PiBHQy5JbnB1dE1hbi5Mb2FkQ29tbWVudHNSZXN1bHQ7XG4gICAgQElucHV0KClcbiAgICBjb21tZW50cz86IEdDLklucHV0TWFuLklDb21tZW50W107XG4gICAgQElucHV0KClcbiAgICBzdGlja2VkQ29tbWVudD86IEdDLklucHV0TWFuLklDb21tZW50O1xuICAgIEBJbnB1dCgpXG4gICAgY29waWVkTGlua0Rpc3BsYXlUZXh0Rm9ybWF0dGVyPzogKGNvbW1lbnQ6IEdDLklucHV0TWFuLklDb21tZW50KSA9PiBHQy5JbnB1dE1hbi5JQ29waWVkTGlua0Rpc3BsYXlUZXh0Q29uZmlnO1xuICAgIEBJbnB1dCgpXG4gICAgY29waWVkTGlua0Zvcm1hdHRlcj86IChjb21tZW50OiBHQy5JbnB1dE1hbi5JQ29tbWVudCkgPT4gc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgY29waWVkTGlua1NlYXJjaFBhcmFtcz86IChHQy5JbnB1dE1hbi5HY0NvbW1lbnRMaW5rU2VhcmNoUGFyYW1zIHwgR0MuSW5wdXRNYW4uQ3VzdG9tTGlua1NlYXJjaFBhcmFtKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgcGFzdGVkTGlua1R5cGU/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRQYXN0ZUxpbmtUeXBlO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0xpbmtUeXBlQ29udGV4dFRvb2xiYXI/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZENvbW1lbnRCeUxpbms/OiAobGluazogc3RyaW5nKSA9PiBQcm9taXNlPEdDLklucHV0TWFuLkxvYWRDb21tZW50QnlMaW5rUmVzdWx0PjtcbiAgICBASW5wdXQoKVxuICAgIG9wZW5MaW5rTW9kZT86IEdDLklucHV0TWFuLk9wZW5MaW5rTW9kZTtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRTdGlja2VkQ29tbWVudD86ICgpID0+IEdDLklucHV0TWFuLklDb21tZW50IHwgbnVsbDtcbiAgICBASW5wdXQoKVxuICAgIHNob3daZXJvUmVhY3Rpb24/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd09wZW5SZWFjdGlvbkxpc3RCdXR0b24/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZE9ubHk/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7IFxuICAgIEBJbnB1dCgpXG4gICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7IFxuICAgIEBJbnB1dCgpXG4gICAgbWF4V2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBtaW5IZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBtaW5XaWR0aD86IG51bWJlciB8IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIGJhbm5lcj86IHN0cmluZztcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBlZGl0b3JDcmVhdGVkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcHJlcHJvY2Vzc0Vycm9yOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYmVmb3JlRXhlY3V0ZUNvbW1hbmQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBhZnRlckV4ZWN1dGVDb21tYW5kOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYmVmb3JlRmlyc3RMb2FkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWZ0ZXJGaXJzdExvYWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbn1cbiJdfQ==