@bixi/label
Version:
385 lines • 34.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { Subscription } from 'rxjs';
import { delayWhen, filter } from 'rxjs/operators';
import { EVENTS } from './label.event';
import { LabelHub } from './label.hub';
import { functionProxy } from './label.util';
var BixiLabelCoreComponent = /** @class */ (function () {
function BixiLabelCoreComponent(sanitizer, cdr) {
var _this = this;
this.sanitizer = sanitizer;
this.cdr = cdr;
this.subscription = new Subscription();
this.hoverInLabelsEvent = null;
this.labelingEvent = null;
this.labelTooltipDisabled = false;
this.labelModalDisabled = false;
this.startLabeling = new EventEmitter();
this.deleteLabels = new EventEmitter();
this.clickLabels = new EventEmitter();
this.pdfLoadFailed = new EventEmitter();
this.pdfScrolling = new EventEmitter();
this.mergeTables = new EventEmitter();
this.splitTable = new EventEmitter();
this.tblOperationRecords = new EventEmitter();
this.messageHandler = (/**
* @param {?} e
* @return {?}
*/
function (e) {
var _a = e.data, id = _a.id, event = _a.event, data = _a.data;
if (_this.hub.id !== id)
return;
if (_this.hub.logAllEvents) {
if (!_this.hub.logIgnoreEvents.includes(event)) {
console.log("[@bixi/label] Event(" + _this.hub.id + ")", e.data);
}
}
switch (event) {
case EVENTS.ready: {
// 初始化标注器
_this.hub.setReady(true);
_this.hub.innerSetPagination({
pageCount: data.pageCount
});
break;
}
case EVENTS.zoomChange: {
_this.hub.setZoom(data.zoom);
break;
}
case EVENTS.startLabeling: {
_this.hub.startLabeling(data);
_this.startLabeling.emit(data);
break;
}
case EVENTS.deleteLabels: {
_this.hub.deleteLabels(data);
_this.deleteLabels.emit(data);
break;
}
case EVENTS.paginationChange: {
_this.hub.innerSetPagination({
pageNumber: data.pageNumber
});
break;
}
case EVENTS.searchResult: {
_this.hub.setSearchResult(data);
break;
}
case EVENTS.clickLabels: {
_this.clickLabels.emit(data);
break;
}
case EVENTS.hoverInLabel: {
_this.hub.hoverInLabels(data);
break;
}
case EVENTS.hoverOutLabel: {
_this.hub.hoverInLabels(null);
break;
}
case EVENTS.pdfScrolling: {
if (_this.hub.hoverInLabelsEvent) {
_this.hub.hoverInLabels(null);
}
_this.pdfScrolling.emit(true);
break;
}
case EVENTS.pdfLoadFailed: {
_this.pdfLoadFailed.emit();
break;
}
case EVENTS.log: {
_this.hub.setLog(data);
break;
}
case EVENTS.resize: {
_this.hub.resize$.next();
break;
}
case EVENTS.mergeTables: {
_this.mergeTables.emit(data);
break;
}
case EVENTS.splitTable: {
_this.splitTable.emit(data);
break;
}
case EVENTS.tblOperationRecords: {
_this.tblOperationRecords.emit(data);
break;
}
default: {
if (_this.hub.logUnhandledEvents) {
if (!_this.hub.logIgnoreEvents.includes(event)) {
console.warn("[@bixi/label] Unhandled Event(" + _this.hub.id + ") ", event, data);
}
}
break;
}
}
});
}
Object.defineProperty(BixiLabelCoreComponent.prototype, "engine", {
get: /**
* @return {?}
*/
function () {
return this._engine;
},
set: /**
* @param {?} val
* @return {?}
*/
function (val) {
this.url = this.sanitizer.bypassSecurityTrustResourceUrl("" + (val || './bixi-label/index.html'));
this._engine = val;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
BixiLabelCoreComponent.prototype.onLoad = /**
* @return {?}
*/
function () {
if (!this.hub)
return;
/** @type {?} */
var api = this.api;
this.hub.setApi(api);
this.hub.setLoaded(!!api);
};
Object.defineProperty(BixiLabelCoreComponent.prototype, "api", {
get: /**
* @return {?}
*/
function () {
if (!this.iframe)
return;
/** @type {?} */
var service = this.iframe.element.nativeElement.contentWindow.ProxyApiService2;
if (this.hub.dev) {
return functionProxy(service);
}
return service;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
BixiLabelCoreComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.subscription.add(this.hub.init$
.pipe(filter((/**
* @param {?} i
* @return {?}
*/
function (i) { return !!i; })), delayWhen((/**
* @return {?}
*/
function () { return _this.hub.loaded$.pipe(filter((/**
* @param {?} r
* @return {?}
*/
function (r) { return r === true; }))); })))
.subscribe((/**
* @param {?} options
* @return {?}
*/
function (options) {
if (!_this.api)
return;
_this.api.init(options);
})));
this.subscription.add(this.hub.labels$
.pipe(filter((/**
* @param {?} i
* @return {?}
*/
function (i) { return !!i; })), delayWhen((/**
* @return {?}
*/
function () { return _this.hub.ready$.pipe(filter((/**
* @param {?} r
* @return {?}
*/
function (r) { return r === true; }))); })))
.subscribe((/**
* @param {?} labels
* @return {?}
*/
function (labels) {
if (!_this.api)
return;
_this.api.setLabels(labels);
})));
this.subscription.add(this.hub.tables$
.pipe(filter((/**
* @param {?} i
* @return {?}
*/
function (i) { return !!i; })), delayWhen((/**
* @return {?}
*/
function () { return _this.hub.ready$.pipe(filter((/**
* @param {?} r
* @return {?}
*/
function (r) { return r === true; }))); })))
.subscribe((/**
* @param {?} tables
* @return {?}
*/
function (tables) {
if (!_this.api)
return;
_this.api.setTables(tables);
})));
this.subscription.add(this.hub.hoverInLabelsEvent$
.subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) {
_this.hoverInLabelsEvent = event;
_this.cdr.detectChanges();
})));
this.subscription.add(this.hub.labelingEvent$
.subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) {
_this.labelingEvent = event;
_this.cdr.detectChanges();
})));
window.addEventListener('message', this.messageHandler);
};
/**
* @return {?}
*/
BixiLabelCoreComponent.prototype.onCloseLabelModal = /**
* @return {?}
*/
function () {
this.hub.stopLabeling();
this.hub.restore();
};
/**
* @return {?}
*/
BixiLabelCoreComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.subscription.unsubscribe();
this.hub.destory();
window.removeEventListener('message', this.messageHandler);
};
BixiLabelCoreComponent.decorators = [
{ type: Component, args: [{
selector: 'bixi-label-core',
template: "\n <div class=\"bixi-label-core\">\n <iframe\n #iframe\n [src]=\"url\"\n (load)=\"onLoad()\"\n [attr.id]=\"hub.id\"\n [title]=\"hub.id\">\n </iframe>\n <bixi-label-tooltip\n *ngIf=\"hoverInLabelsEvent && !labelTooltipDisabled\"\n [tooltip]=\"hoverInLabelsEvent\"\n [content]=\"labelTooltipContent\">\n </bixi-label-tooltip>\n <bixi-label-modal\n *ngIf=\"labelModalContent && labelingEvent && !labelModalDisabled\"\n [dragBoundary]=\"dragBoundary\"\n (close)=\"onCloseLabelModal()\"\n [labeling]=\"labelingEvent\"\n [title]=\"labelModalTitle\"\n [content]=\"labelModalContent\">\n </bixi-label-modal>\n </div>\n ",
exportAs: 'bixiLabelText',
encapsulation: ViewEncapsulation.None,
preserveWhitespaces: true,
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [".bixi-label-core{position:relative;width:100%;height:100%}.bixi-label-core iframe{width:100%;height:100%;vertical-align:top;border:none}.bixi-label-modal-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1000;background-color:rgba(0,0,0,.5);-webkit-tap-highlight-color:transparent;opacity:0;transition:opacity .4s cubic-bezier(.25,.8,.25,1);pointer-events:auto}.bixi-label-modal-backdrop.cdk-overlay-backdrop-showing{opacity:1}.bixi-label-modal,.bixi-label-tooltip{position:absolute;top:0;left:0}.bixi-label-tooltip{pointer-events:none}.bixi-label-modal{display:flex;flex-direction:column;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px rgba(0,0,0,.12),0 6px 16px 0 rgba(0,0,0,.08),0 9px 28px 8px rgba(0,0,0,.05)}.bixi-label-modal-header{height:32px;font-size:12px;border-bottom:1px solid #d9d9d9;cursor:move}.bixi-label-modal-header-inner{display:flex;justify-content:space-between;height:100%;line-height:32px}.bixi-label-modal-content{height:calc(100% - 32px);overflow:auto}.bixi-label-modal .bixi-label-modal-title{padding-left:8px;font-weight:500}.bixi-label-modal .bixi-label-modal-close-icon{width:36px;height:100%;text-align:center;cursor:pointer;-webkit-user-drag:none}"]
}] }
];
/** @nocollapse */
BixiLabelCoreComponent.ctorParameters = function () { return [
{ type: DomSanitizer },
{ type: ChangeDetectorRef }
]; };
BixiLabelCoreComponent.propDecorators = {
dragBoundary: [{ type: Input }],
iframe: [{ type: ViewChild, args: ['iframe', { read: ViewContainerRef },] }],
hub: [{ type: Input }],
engine: [{ type: Input }],
labelTooltipContent: [{ type: Input }],
labelTooltipDisabled: [{ type: Input }],
labelModalTitle: [{ type: Input }],
labelModalDisabled: [{ type: Input }],
labelModalContent: [{ type: Input }],
startLabeling: [{ type: Output }],
deleteLabels: [{ type: Output }],
clickLabels: [{ type: Output }],
pdfLoadFailed: [{ type: Output }],
pdfScrolling: [{ type: Output }],
mergeTables: [{ type: Output }],
splitTable: [{ type: Output }],
tblOperationRecords: [{ type: Output }]
};
return BixiLabelCoreComponent;
}());
export { BixiLabelCoreComponent };
if (false) {
/** @type {?} */
BixiLabelCoreComponent.prototype.subscription;
/** @type {?} */
BixiLabelCoreComponent.prototype._engine;
/** @type {?} */
BixiLabelCoreComponent.prototype.url;
/** @type {?} */
BixiLabelCoreComponent.prototype.hoverInLabelsEvent;
/** @type {?} */
BixiLabelCoreComponent.prototype.labelingEvent;
/** @type {?} */
BixiLabelCoreComponent.prototype.dragBoundary;
/** @type {?} */
BixiLabelCoreComponent.prototype.iframe;
/** @type {?} */
BixiLabelCoreComponent.prototype.hub;
/** @type {?} */
BixiLabelCoreComponent.prototype.labelTooltipContent;
/** @type {?} */
BixiLabelCoreComponent.prototype.labelTooltipDisabled;
/** @type {?} */
BixiLabelCoreComponent.prototype.labelModalTitle;
/** @type {?} */
BixiLabelCoreComponent.prototype.labelModalDisabled;
/** @type {?} */
BixiLabelCoreComponent.prototype.labelModalContent;
/** @type {?} */
BixiLabelCoreComponent.prototype.startLabeling;
/** @type {?} */
BixiLabelCoreComponent.prototype.deleteLabels;
/** @type {?} */
BixiLabelCoreComponent.prototype.clickLabels;
/** @type {?} */
BixiLabelCoreComponent.prototype.pdfLoadFailed;
/** @type {?} */
BixiLabelCoreComponent.prototype.pdfScrolling;
/** @type {?} */
BixiLabelCoreComponent.prototype.mergeTables;
/** @type {?} */
BixiLabelCoreComponent.prototype.splitTable;
/** @type {?} */
BixiLabelCoreComponent.prototype.tblOperationRecords;
/** @type {?} */
BixiLabelCoreComponent.prototype.messageHandler;
/** @type {?} */
BixiLabelCoreComponent.prototype.sanitizer;
/**
* @type {?}
* @private
*/
BixiLabelCoreComponent.prototype.cdr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYml4aS9sYWJlbC8iLCJzb3VyY2VzIjpbInNyYy9sYWJlbC1jb3JlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDO0lBK0RFLGdDQUNTLFNBQXVCLEVBQ3RCLEdBQXNCO1FBRmhDLGlCQUdLO1FBRkksY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQS9CaEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR2xDLHVCQUFrQixHQUErQixJQUFJLENBQUM7UUFDdEQsa0JBQWEsR0FBMEIsSUFBSSxDQUFDO1FBYW5DLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUV0Qyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFbkMsa0JBQWEsR0FBaUMsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDakYsaUJBQVksR0FBcUMsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDeEYsZ0JBQVcsR0FBb0MsSUFBSSxZQUFZLEVB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NEM7O0lBQzVDLDhDQUE4Qjs7SUFDOUIsd0NBQTBFOztJQUMxRSxxQ0FBdUI7O0lBU3ZCLHFEQUFnRTs7SUFDaEUsc0RBQStDOztJQUMvQyxpREFBaUM7O0lBQ2pDLG9EQUE2Qzs7SUFDN0MsbURBQThEOztJQUM5RCwrQ0FBMkY7O0lBQzNGLDhDQUFrRzs7SUFDbEcsNkNBQStGOztJQUMvRiwrQ0FBNkM7O0lBQzdDLDhDQUE0Qzs7SUFDNUMsNkNBQXlFOztJQUN6RSw0Q0FBd0U7O0lBQ3hFLHFEQUEwRjs7SUFvRTFGLGdEQTZGQzs7SUEvSkMsMkNBQThCOzs7OztJQUM5QixxQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheVdoZW4sIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVWRU5UUyB9IGZyb20gJy4vbGFiZWwuZXZlbnQnO1xuaW1wb3J0IHsgTGFiZWxIdWIgfSBmcm9tICcuL2xhYmVsLmh1Yic7XG5pbXBvcnQgeyBJQ2xpY2tMYWJlbHNFdmVudCwgSURlbGV0ZUxhYmVsc0V2ZW50LCBJSG92ZXJJbkxhYmVsc0V2ZW50LCBJTGFiZWxpbmdFdmVudCwgSVNhZmVBbnksIElUYWJsZU1hdHJpeCwgSVRhYmxlT3BlcmF0aW9uUmVjb3JkIH0gZnJvbSAnLi9sYWJlbC50eXBlJztcbmltcG9ydCB7IGZ1bmN0aW9uUHJveHkgfSBmcm9tICcuL2xhYmVsLnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiaXhpLWxhYmVsLWNvcmUnLFxuICB0ZW1wbGF0ZTogYFxuICA8ZGl2IGNsYXNzPVwiYml4aS1sYWJlbC1jb3JlXCI+XG4gICAgPGlmcmFtZVxuICAgICAgI2lmcmFtZVxuICAgICAgW3NyY109XCJ1cmxcIlxuICAgICAgKGxvYWQpPVwib25Mb2FkKClcIlxuICAgICAgW2F0dHIuaWRdPVwiaHViLmlkXCJcbiAgICAgIFt0aXRsZV09XCJodWIuaWRcIj5cbiAgICA8L2lmcmFtZT5cbiAgICA8Yml4aS1sYWJlbC10b29sdGlwXG4gICAgICAqbmdJZj1cImhvdmVySW5MYWJlbHNFdmVudCAmJiAhbGFiZWxUb29sdGlwRGlzYWJsZWRcIlxuICAgICAgW3Rvb2x0aXBdPVwiaG92ZXJJbkxhYmVsc0V2ZW50XCJcbiAgICAgIFtjb250ZW50XT1cImxhYmVsVG9vbHRpcENvbnRlbnRcIj5cbiAgICA8L2JpeGktbGFiZWwtdG9vbHRpcD5cbiAgICA8Yml4aS1sYWJlbC1tb2RhbFxuICAgICAgKm5nSWY9XCJsYWJlbE1vZGFsQ29udGVudCAmJiBsYWJlbGluZ0V2ZW50ICYmICFsYWJlbE1vZGFsRGlzYWJsZWRcIlxuICAgICAgW2RyYWdCb3VuZGFyeV09XCJkcmFnQm91bmRhcnlcIlxuICAgICAgKGNsb3NlKT1cIm9uQ2xvc2VMYWJlbE1vZGFsKClcIlxuICAgICAgW2xhYmVsaW5nXT1cImxhYmVsaW5nRXZlbnRcIlxuICAgICAgW3RpdGxlXT1cImxhYmVsTW9kYWxUaXRsZVwiXG4gICAgICBbY29udGVudF09XCJsYWJlbE1vZGFsQ29udGVudFwiPlxuICAgIDwvYml4aS1sYWJlbC1tb2RhbD5cbiAgIDwvZGl2PlxuICBgLFxuICBleHBvcnRBczogJ2JpeGlMYWJlbFRleHQnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgLy8gVE9ETyDlgZrkuLvpopjliIfmjaJcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUvaW5kZXgubGVzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJpeGlMYWJlbENvcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgX2VuZ2luZTogc3RyaW5nO1xuICB1cmw6IFNhZmVSZXNvdXJjZVVybDtcbiAgaG92ZXJJbkxhYmVsc0V2ZW50OiBJSG92ZXJJbkxhYmVsc0V2ZW50IHwgbnVsbCA9IG51bGw7XG4gIGxhYmVsaW5nRXZlbnQ6IElMYWJlbGluZ0V2ZW50IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGRyYWdCb3VuZGFyeTogc3RyaW5nO1xuICBAVmlld0NoaWxkKCdpZnJhbWUnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaWZyYW1lOiBWaWV3Q29udGFpbmVyUmVmO1xuICBASW5wdXQoKSBodWI6IExhYmVsSHViO1xuICBASW5wdXQoKVxuICBzZXQgZW5naW5lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy51cmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoYCR7dmFsIHx8ICcuL2JpeGktbGFiZWwvaW5kZXguaHRtbCd9YCk7XG4gICAgdGhpcy5fZW5naW5lID0gdmFsO1xuICB9XG4gIGdldCBlbmdpbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZ2luZTtcbiAgfVxuICBASW5wdXQoKSBsYWJlbFRvb2x0aXBDb250ZW50OiBUZW1wbGF0ZVJlZjxJU2FmZUFueT4gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGxhYmVsVG9vbHRpcERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxhYmVsTW9kYWxUaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbE1vZGFsRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbGFiZWxNb2RhbENvbnRlbnQ6IFRlbXBsYXRlUmVmPElTYWZlQW55PiB8IHVuZGVmaW5lZDtcbiAgQE91dHB1dCgpIHN0YXJ0TGFiZWxpbmc6IEV2ZW50RW1pdHRlcjxJTGFiZWxpbmdFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElMYWJlbGluZ0V2ZW50PigpO1xuICBAT3V0cHV0KCkgZGVsZXRlTGFiZWxzOiBFdmVudEVtaXR0ZXI8SURlbGV0ZUxhYmVsc0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SURlbGV0ZUxhYmVsc0V2ZW50PigpO1xuICBAT3V0cHV0KCkgY2xpY2tMYWJlbHM6IEV2ZW50RW1pdHRlcjxJQ2xpY2tMYWJlbHNFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElDbGlja0xhYmVsc0V2ZW50PigpO1xuICBAT3V0cHV0KCkgcGRmTG9hZEZhaWxlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHBkZlNjcm9sbGluZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG1lcmdlVGFibGVzOiBFdmVudEVtaXR0ZXI8SVRhYmxlTWF0cml4W10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc3BsaXRUYWJsZTogRXZlbnRFbWl0dGVyPElUYWJsZU1hdHJpeFtdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHRibE9wZXJhdGlvblJlY29yZHM6IEV2ZW50RW1pdHRlcjxJVGFibGVPcGVyYXRpb25SZWNvcmRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7IH1cblxuICBvbkxvYWQoKSB7XG4gICAgaWYgKCF0aGlzLmh1YikgcmV0dXJuO1xuICAgIGNvbnN0IGFwaSA9IHRoaXMuYXBpO1xuICAgIHRoaXMuaHViLnNldEFwaShhcGkpO1xuICAgIHRoaXMuaHViLnNldExvYWRlZCghIWFwaSk7XG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIGlmICghdGhpcy5pZnJhbWUpIHJldHVybjtcbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5pZnJhbWUuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRlbnRXaW5kb3cuUHJveHlBcGlTZXJ2aWNlMjtcbiAgICBpZiAodGhpcy5odWIuZGV2KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb25Qcm94eShzZXJ2aWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlcnZpY2U7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5odWIuaW5pdCRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoaSA9PiAhIWkpLFxuICAgICAgICBkZWxheVdoZW4oKCkgPT4gdGhpcy5odWIubG9hZGVkJC5waXBlKGZpbHRlcihyID0+IHIgPT09IHRydWUpKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUob3B0aW9ucyA9PiB7XG4gICAgICAgIGlmICghdGhpcy5hcGkpIHJldHVybjtcbiAgICAgICAgdGhpcy5hcGkuaW5pdChvcHRpb25zKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5odWIubGFiZWxzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihpID0+ICEhaSksXG4gICAgICAgIGRlbGF5V2hlbigoKSA9PiB0aGlzLmh1Yi5yZWFkeSQucGlwZShmaWx0ZXIociA9PiByID09PSB0cnVlKSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsYWJlbHMpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFwaSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFwaS5zZXRMYWJlbHMobGFiZWxzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5odWIudGFibGVzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihpID0+ICEhaSksXG4gICAgICAgIGRlbGF5V2hlbigoKSA9PiB0aGlzLmh1Yi5yZWFkeSQucGlwZShmaWx0ZXIociA9PiByID09PSB0cnVlKSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh0YWJsZXMpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFwaSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFwaS5zZXRUYWJsZXModGFibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5odWIuaG92ZXJJbkxhYmVsc0V2ZW50JFxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMuaG92ZXJJbkxhYmVsc0V2ZW50ID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5odWIubGFiZWxpbmdFdmVudCRcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICB0aGlzLmxhYmVsaW5nRXZlbnQgPSBldmVudDtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSkpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XG4gIH1cblxuICBvbkNsb3NlTGFiZWxNb2RhbCgpIHtcbiAgICB0aGlzLmh1Yi5zdG9wTGFiZWxpbmcoKTtcbiAgICB0aGlzLmh1Yi5yZXN0b3JlKCk7XG4gIH1cblxuICBtZXNzYWdlSGFuZGxlciA9IChlOiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGlkLCBldmVudCwgZGF0YSB9ID0gZS5kYXRhO1xuICAgIGlmICh0aGlzLmh1Yi5pZCAhPT0gaWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5odWIubG9nQWxsRXZlbnRzKSB7XG4gICAgICBpZiAoIXRoaXMuaHViLmxvZ0lnbm9yZUV2ZW50cy5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFtAYml4aS9sYWJlbF0gRXZlbnQoJHt0aGlzLmh1Yi5pZH0pYCwgZS5kYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSBFVkVOVFMucmVhZHk6IHtcbiAgICAgICAgLy8g5Yid5aeL5YyW5qCH5rOo5ZmoXG4gICAgICAgIHRoaXMuaHViLnNldFJlYWR5KHRydWUpO1xuICAgICAgICB0aGlzLmh1Yi5pbm5lclNldFBhZ2luYXRpb24oe1xuICAgICAgICAgIHBhZ2VDb3VudDogZGF0YS5wYWdlQ291bnRcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMuem9vbUNoYW5nZToge1xuICAgICAgICB0aGlzLmh1Yi5zZXRab29tKGRhdGEuem9vbSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMuc3RhcnRMYWJlbGluZzoge1xuICAgICAgICB0aGlzLmh1Yi5zdGFydExhYmVsaW5nKGRhdGEpO1xuICAgICAgICB0aGlzLnN0YXJ0TGFiZWxpbmcuZW1pdChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVWRU5UUy5kZWxldGVMYWJlbHM6IHtcbiAgICAgICAgdGhpcy5odWIuZGVsZXRlTGFiZWxzKGRhdGEpO1xuICAgICAgICB0aGlzLmRlbGV0ZUxhYmVscy5lbWl0KGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLnBhZ2luYXRpb25DaGFuZ2U6IHtcbiAgICAgICAgdGhpcy5odWIuaW5uZXJTZXRQYWdpbmF0aW9uKHtcbiAgICAgICAgICBwYWdlTnVtYmVyOiBkYXRhLnBhZ2VOdW1iZXJcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMuc2VhcmNoUmVzdWx0OiB7XG4gICAgICAgIHRoaXMuaHViLnNldFNlYXJjaFJlc3VsdChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVWRU5UUy5jbGlja0xhYmVsczoge1xuICAgICAgICB0aGlzLmNsaWNrTGFiZWxzLmVtaXQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMuaG92ZXJJbkxhYmVsOiB7XG4gICAgICAgIHRoaXMuaHViLmhvdmVySW5MYWJlbHMoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMuaG92ZXJPdXRMYWJlbDoge1xuICAgICAgICB0aGlzLmh1Yi5ob3ZlckluTGFiZWxzKG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLnBkZlNjcm9sbGluZzoge1xuICAgICAgICBpZiAodGhpcy5odWIuaG92ZXJJbkxhYmVsc0V2ZW50KSB7XG4gICAgICAgICAgdGhpcy5odWIuaG92ZXJJbkxhYmVscyhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBkZlNjcm9sbGluZy5lbWl0KHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLnBkZkxvYWRGYWlsZWQ6IHtcbiAgICAgICAgdGhpcy5wZGZMb2FkRmFpbGVkLmVtaXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVWRU5UUy5sb2c6IHtcbiAgICAgICAgdGhpcy5odWIuc2V0TG9nKGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgRVZFTlRTLnJlc2l6ZToge1xuICAgICAgICB0aGlzLmh1Yi5yZXNpemUkLm5leHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVWRU5UUy5tZXJnZVRhYmxlczoge1xuICAgICAgICB0aGlzLm1lcmdlVGFibGVzLmVtaXQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBFVkVOVFMuc3BsaXRUYWJsZToge1xuICAgICAgICB0aGlzLnNwbGl0VGFibGUuZW1pdChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEVWRU5UUy50YmxPcGVyYXRpb25SZWNvcmRzOiB7XG4gICAgICAgIHRoaXMudGJsT3BlcmF0aW9uUmVjb3Jkcy5lbWl0KGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgaWYgKHRoaXMuaHViLmxvZ1VuaGFuZGxlZEV2ZW50cykge1xuICAgICAgICAgIGlmICghdGhpcy5odWIubG9nSWdub3JlRXZlbnRzLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbQGJpeGkvbGFiZWxdIFVuaGFuZGxlZCBFdmVudCgke3RoaXMuaHViLmlkfSkgYCwgZXZlbnQsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaHViLmRlc3RvcnkoKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICB9XG59XG4iXX0=