myrtex-mf-competition 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/modules/competition-header/components/competition-header.component.mjs +3 -3
- package/fesm2015/myrtex-mf-competition.mjs +2 -2
- package/fesm2015/myrtex-mf-competition.mjs.map +1 -1
- package/fesm2020/myrtex-mf-competition.mjs +2 -2
- package/fesm2020/myrtex-mf-competition.mjs.map +1 -1
- package/lib/modules/competition-header/components/competition-header.component.d.ts +1 -1
- package/package.json +2 -2
|
@@ -427,10 +427,10 @@ export class CompetitionHeaderComponent extends UnSubscriber {
|
|
|
427
427
|
}
|
|
428
428
|
}
|
|
429
429
|
CompetitionHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderComponent, deps: [{ token: i1.SignService }, { token: i2.Store }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
|
|
430
|
-
CompetitionHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: CompetitionHeaderComponent, selector: "my-competition-new-header", inputs: { canChangeStatus: "canChangeStatus", validateVersionAction: "validateVersionAction", validateManagementAccess: "validateManagementAccess", validatePiblicationAccess: "validatePiblicationAccess" }, outputs: { selectedCompetitionVersionInfo: "selectedCompetitionVersionInfo" }, queries: [{ propertyName: "customButtonsTemplate", first: true, predicate: CompetitionHeaderCustomButtonsDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && canSeeThreeDots\">\r\n <div class=\"info-banner-control__icon\" (click)=\"showControls()\" [ngClass]=\"{'active': isControl}\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M10.5 12C10.5 12.8284 11.1716 13.5 12 13.5C12.8284 13.5 13.5 12.8284 13.5 12C13.5 11.1716 12.8284 10.5 12 10.5C11.1716 10.5 10.5 11.1716 10.5 12Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 19C10.5 19.8284 11.1716 20.5 12 20.5C12.8284 20.5 13.5 19.8284 13.5 19C13.5 18.1716 12.8284 17.5 12 17.5C11.1716 17.5 10.5 18.1716 10.5 19Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 5C10.5 5.82843 11.1716 6.5 12 6.5C12.8284 6.5 13.5 5.82843 13.5 5C13.5 4.17157 12.8284 3.5 12 3.5C11.1716 3.5 10.5 4.17157 10.5 5Z\" fill=\"#253E49\"/>\r\n </svg>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__menu\">\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active\"\r\n (click)=\"pause()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\"\r\n (click)=\"restore()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M20.5518 10.8276C21.2044 11.2151 21.2044 12.1599 20.5518 12.5474L5.51054 21.4781C4.84395 21.8739 4 21.3935 4 20.6183L4 2.75674C4 1.9815 4.84395 1.50109 5.51054 1.89688L20.5518 10.8276Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{restoreButtonName}}\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying)\r\n && showCompleteCompetitionButton\"\r\n (click)=\"complete()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying ||\r\n competition.status == competitionStatusEnum.Canceled)\r\n && showCancelCompetitionButton\"\r\n (click)=\"cancel()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.7677 4.23213C21.5354 5.9999 20.744 6.79135 19.7677 7.76766L7.76771 19.7677C6.7914 20.744 5.99987 21.5355 4.23217 19.7677C2.46454 17.9999 3.25586 17.2084 4.23217 16.2321L16.2322 4.23213C17.2085 3.25582 18 2.46453 19.7677 4.23213Z\" fill=\"#253E49\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.23222 4.23196C5.96445 2.49991 6.79144 3.25565 7.76775 4.23196L19.7678 16.232C20.7441 17.2083 21.5 18.0353 19.7678 19.7675C18.0355 21.4997 17.2085 20.7438 16.2322 19.7675L4.23222 7.7675C3.25591 6.79119 2.46429 6 4.23222 4.23196Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{cancelCompetitionButtonLabel}}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__bg\" (click)=\"hideControls()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", components: [{ type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CompetitionLabelDirective, selector: "[myCompetitionLabel]" }, { type: i3.TooltipDirective, selector: "[myTooltip]", inputs: ["tooltip", "tooltipPosition", "tooltipMinWidth", "tooltipMaxWidth", "tooltipInteractive", "tooltipActive"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgOptgroupTemplateDirective, selector: "[ng-optgroup-tmp]" }, { type: i4.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i4.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
430
|
+
CompetitionHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: CompetitionHeaderComponent, selector: "mrx-competition-header", inputs: { canChangeStatus: "canChangeStatus", validateVersionAction: "validateVersionAction", validateManagementAccess: "validateManagementAccess", validatePiblicationAccess: "validatePiblicationAccess" }, outputs: { selectedCompetitionVersionInfo: "selectedCompetitionVersionInfo" }, queries: [{ propertyName: "customButtonsTemplate", first: true, predicate: CompetitionHeaderCustomButtonsDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && canSeeThreeDots\">\r\n <div class=\"info-banner-control__icon\" (click)=\"showControls()\" [ngClass]=\"{'active': isControl}\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M10.5 12C10.5 12.8284 11.1716 13.5 12 13.5C12.8284 13.5 13.5 12.8284 13.5 12C13.5 11.1716 12.8284 10.5 12 10.5C11.1716 10.5 10.5 11.1716 10.5 12Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 19C10.5 19.8284 11.1716 20.5 12 20.5C12.8284 20.5 13.5 19.8284 13.5 19C13.5 18.1716 12.8284 17.5 12 17.5C11.1716 17.5 10.5 18.1716 10.5 19Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 5C10.5 5.82843 11.1716 6.5 12 6.5C12.8284 6.5 13.5 5.82843 13.5 5C13.5 4.17157 12.8284 3.5 12 3.5C11.1716 3.5 10.5 4.17157 10.5 5Z\" fill=\"#253E49\"/>\r\n </svg>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__menu\">\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active\"\r\n (click)=\"pause()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\"\r\n (click)=\"restore()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M20.5518 10.8276C21.2044 11.2151 21.2044 12.1599 20.5518 12.5474L5.51054 21.4781C4.84395 21.8739 4 21.3935 4 20.6183L4 2.75674C4 1.9815 4.84395 1.50109 5.51054 1.89688L20.5518 10.8276Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{restoreButtonName}}\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying)\r\n && showCompleteCompetitionButton\"\r\n (click)=\"complete()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying ||\r\n competition.status == competitionStatusEnum.Canceled)\r\n && showCancelCompetitionButton\"\r\n (click)=\"cancel()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.7677 4.23213C21.5354 5.9999 20.744 6.79135 19.7677 7.76766L7.76771 19.7677C6.7914 20.744 5.99987 21.5355 4.23217 19.7677C2.46454 17.9999 3.25586 17.2084 4.23217 16.2321L16.2322 4.23213C17.2085 3.25582 18 2.46453 19.7677 4.23213Z\" fill=\"#253E49\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.23222 4.23196C5.96445 2.49991 6.79144 3.25565 7.76775 4.23196L19.7678 16.232C20.7441 17.2083 21.5 18.0353 19.7678 19.7675C18.0355 21.4997 17.2085 20.7438 16.2322 19.7675L4.23222 7.7675C3.25591 6.79119 2.46429 6 4.23222 4.23196Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{cancelCompetitionButtonLabel}}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__bg\" (click)=\"hideControls()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", components: [{ type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CompetitionLabelDirective, selector: "[myCompetitionLabel]" }, { type: i3.TooltipDirective, selector: "[myTooltip]", inputs: ["tooltip", "tooltipPosition", "tooltipMinWidth", "tooltipMaxWidth", "tooltipInteractive", "tooltipActive"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgOptgroupTemplateDirective, selector: "[ng-optgroup-tmp]" }, { type: i4.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i4.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
|
|
431
431
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderComponent, decorators: [{
|
|
432
432
|
type: Component,
|
|
433
|
-
args: [{ selector: 'my-competition-new-header', template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && canSeeThreeDots\">\r\n <div class=\"info-banner-control__icon\" (click)=\"showControls()\" [ngClass]=\"{'active': isControl}\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M10.5 12C10.5 12.8284 11.1716 13.5 12 13.5C12.8284 13.5 13.5 12.8284 13.5 12C13.5 11.1716 12.8284 10.5 12 10.5C11.1716 10.5 10.5 11.1716 10.5 12Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 19C10.5 19.8284 11.1716 20.5 12 20.5C12.8284 20.5 13.5 19.8284 13.5 19C13.5 18.1716 12.8284 17.5 12 17.5C11.1716 17.5 10.5 18.1716 10.5 19Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 5C10.5 5.82843 11.1716 6.5 12 6.5C12.8284 6.5 13.5 5.82843 13.5 5C13.5 4.17157 12.8284 3.5 12 3.5C11.1716 3.5 10.5 4.17157 10.5 5Z\" fill=\"#253E49\"/>\r\n </svg>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__menu\">\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active\"\r\n (click)=\"pause()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\"\r\n (click)=\"restore()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M20.5518 10.8276C21.2044 11.2151 21.2044 12.1599 20.5518 12.5474L5.51054 21.4781C4.84395 21.8739 4 21.3935 4 20.6183L4 2.75674C4 1.9815 4.84395 1.50109 5.51054 1.89688L20.5518 10.8276Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{restoreButtonName}}\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying)\r\n && showCompleteCompetitionButton\"\r\n (click)=\"complete()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying ||\r\n competition.status == competitionStatusEnum.Canceled)\r\n && showCancelCompetitionButton\"\r\n (click)=\"cancel()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.7677 4.23213C21.5354 5.9999 20.744 6.79135 19.7677 7.76766L7.76771 19.7677C6.7914 20.744 5.99987 21.5355 4.23217 19.7677C2.46454 17.9999 3.25586 17.2084 4.23217 16.2321L16.2322 4.23213C17.2085 3.25582 18 2.46453 19.7677 4.23213Z\" fill=\"#253E49\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.23222 4.23196C5.96445 2.49991 6.79144 3.25565 7.76775 4.23196L19.7678 16.232C20.7441 17.2083 21.5 18.0353 19.7678 19.7675C18.0355 21.4997 17.2085 20.7438 16.2322 19.7675L4.23222 7.7675C3.25591 6.79119 2.46429 6 4.23222 4.23196Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{cancelCompetitionButtonLabel}}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__bg\" (click)=\"hideControls()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
|
|
433
|
+
args: [{ selector: 'mrx-competition-header', template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && canSeeThreeDots\">\r\n <div class=\"info-banner-control__icon\" (click)=\"showControls()\" [ngClass]=\"{'active': isControl}\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M10.5 12C10.5 12.8284 11.1716 13.5 12 13.5C12.8284 13.5 13.5 12.8284 13.5 12C13.5 11.1716 12.8284 10.5 12 10.5C11.1716 10.5 10.5 11.1716 10.5 12Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 19C10.5 19.8284 11.1716 20.5 12 20.5C12.8284 20.5 13.5 19.8284 13.5 19C13.5 18.1716 12.8284 17.5 12 17.5C11.1716 17.5 10.5 18.1716 10.5 19Z\" fill=\"#253E49\"/>\r\n <path d=\"M10.5 5C10.5 5.82843 11.1716 6.5 12 6.5C12.8284 6.5 13.5 5.82843 13.5 5C13.5 4.17157 12.8284 3.5 12 3.5C11.1716 3.5 10.5 4.17157 10.5 5Z\" fill=\"#253E49\"/>\r\n </svg>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__menu\">\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active\"\r\n (click)=\"pause()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying\"\r\n (click)=\"restore()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M20.5518 10.8276C21.2044 11.2151 21.2044 12.1599 20.5518 12.5474L5.51054 21.4781C4.84395 21.8739 4 21.3935 4 20.6183L4 2.75674C4 1.9815 4.84395 1.50109 5.51054 1.89688L20.5518 10.8276Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{restoreButtonName}}\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying)\r\n && showCompleteCompetitionButton\"\r\n (click)=\"complete()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n \u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\r\n </span>\r\n </div>\r\n <div class=\"info-banner-control__menu-item\"\r\n *ngIf=\"(\r\n competition.status == competitionStatusEnum.Active ||\r\n competition.status == competitionStatusEnum.Staying ||\r\n competition.status == competitionStatusEnum.Canceled)\r\n && showCancelCompetitionButton\"\r\n (click)=\"cancel()\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.7677 4.23213C21.5354 5.9999 20.744 6.79135 19.7677 7.76766L7.76771 19.7677C6.7914 20.744 5.99987 21.5355 4.23217 19.7677C2.46454 17.9999 3.25586 17.2084 4.23217 16.2321L16.2322 4.23213C17.2085 3.25582 18 2.46453 19.7677 4.23213Z\" fill=\"#253E49\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.23222 4.23196C5.96445 2.49991 6.79144 3.25565 7.76775 4.23196L19.7678 16.232C20.7441 17.2083 21.5 18.0353 19.7678 19.7675C18.0355 21.4997 17.2085 20.7438 16.2322 19.7675L4.23222 7.7675C3.25591 6.79119 2.46429 6 4.23222 4.23196Z\" fill=\"#253E49\"/>\r\n </svg>\r\n <span>\r\n {{cancelCompetitionButtonLabel}}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isControl\" class=\"info-banner-control__bg\" (click)=\"hideControls()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
|
|
434
434
|
}], ctorParameters: function () { return [{ type: i1.SignService }, { type: i2.Store }, { type: i3.AlertService }]; }, propDecorators: { customButtonsTemplate: [{
|
|
435
435
|
type: ContentChild,
|
|
436
436
|
args: [CompetitionHeaderCustomButtonsDirective]
|
|
@@ -445,4 +445,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
445
445
|
}], selectedCompetitionVersionInfo: [{
|
|
446
446
|
type: Output
|
|
447
447
|
}] } });
|
|
448
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLHNDQUFzQyxFQUN2QyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLFdBQVcsRUFDWCxVQUFVLEVBRVYsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixzQkFBc0IsRUFFdkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQiwrQkFBK0IsRUFDL0IsOEJBQThCLEVBQzlCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3pCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQ0FBa0MsRUFDbEMsdUJB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LFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxhQUFpQyxTQUFTO1FBQ3RFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixVQUFVLEdBQUcsMkNBQTJDLENBQUM7U0FDMUQ7UUFDRCxPQUFPOzs7Ozs7OztvQkFRUyxVQUFVOzs7bUJBR1gsQ0FBQztJQUNsQixDQUFDOzt3SEF0ZFUsMEJBQTBCOzRHQUExQiwwQkFBMEIsaVpBRXZCLHVDQUF1Qyx1RUMzRHZELGk4Z0JBMExBOzRGRGpJYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0UsMkJBQTJCO2lKQU05QixxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUMsdUNBQXVDO2dCQUk5QyxlQUFlO3NCQURyQixLQUFLO2dCQUlDLHFCQUFxQjtzQkFEM0IsS0FBSztnQkFJQyx3QkFBd0I7c0JBRDlCLEtBQUs7Z0JBSUMseUJBQXlCO3NCQUQvQixLQUFLO2dCQUlDLDhCQUE4QjtzQkFEcEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bSxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWwsXHJcbiAgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWxcclxufSBmcm9tICcuLy4uL2VudW1zL2NvbXBldGl0aW9uLXZlcnNpb24tc3RhdHVzLmVudW0nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25WZXJzaW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY29tcGV0aXRpb24tdmVyc2lvbi5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcGV0aXRpb25Nb2RlRW51bSxcclxuICBDb21wZXRpdGlvblN0YXR1c0VudW0sXHJcbiAgQ29tcGV0aXRpb25TdGF0dXNFbnVtTGFiZWwsXHJcbiAgRGlhbG9nQ29sb3IsXHJcbiAgRGlhbG9nVHlwZSxcclxuICBBbGVydFNlcnZpY2UsXHJcbiAgVW5TdWJzY3JpYmVyLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uQ29uZmlnLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uTGFiZWwsXHJcbiAgQ29tcGV0aXRpb25Db25maWdNb2RlbFxyXG59IGZyb20gJ215cnRleC1tZi11aS1jb21wb3NpdGUnO1xyXG5pbXBvcnQge1xyXG4gIGFjdGl2YXRlQ29tcGV0aXRpb24sXHJcbiAgY2FuY2VsQ29tcGV0aXRpb24sXHJcbiAgY2FuY2VsQ29tcGV0aXRpb25XaXRoVmFsaWRhdGlvbixcclxuICBjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMsXHJcbiAgY29tcGxldGVDb21wZXRpdGlvbixcclxuICBjcmVhdGVDb21wZXRpdGlvblZlcnNpb24sXHJcbiAgZGVsZXRlQ29tcGV0aXRpb25WZXJzaW9uLFxyXG4gIGxvYWRDb21wZXRpdGlvbkhlYWRlcixcclxuICBwYXVzZUNvbXBldGl0aW9uLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uVmVyc2lvblxyXG59IGZyb20gJy4uL3N0b3JlL2NvbXBldGl0aW9uLWhlYWRlci5hY3Rpb25zJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25TdGF0dXNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jb21wZXRpdGlvbi1zdGF0dXMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIHNlbGVjdEFjdGl2aXR5SWQsXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25TZWxlY3RlZFZlcnNpb25JZCxcclxuICBzZWxlY3RDb21wZXRpdGlvblN0YXR1cyxcclxuICBzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zLFxyXG4gIHNlbGVjdE1hbnVhbFZlcnNpb25TdGF0dXNDaGFuZ2VkXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLnNlbGVjdG9yJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21wZXRpdGlvbi1oZWFkZXItY3VzdG9tLWJ1dHRvbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENhbmNlbENvbXBldGl0aW9uVHlwZUVudW0gfSBmcm9tICcuLi9lbnVtcy9jYW5jZWwtY29tcGV0aXRpb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2lnblNlcnZpY2UgfSBmcm9tICdteXJ0ZXgtbWYtc2lnbmVyJztcclxuXHJcbmV4cG9ydCBkZWNsYXJlIHR5cGUgdmFsaWRhdGVWZXJzaW9uRm4gPSAoKHBhcmFtOiBzdHJpbmcsIG9uVmFsaWRhdGVkOiAoKSA9PiB2b2lkKSA9PiB2b2lkKTtcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIENyeXB0b0ludGVyY2VwdG9yOiBhbnk7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ215LWNvbXBldGl0aW9uLW5ldy1oZWFkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wZXRpdGlvbi1oZWFkZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21wZXRpdGlvbkhlYWRlckNvbXBvbmVudCBleHRlbmRzIFVuU3Vic2NyaWJlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlKVxyXG4gIHB1YmxpYyBjdXN0b21CdXR0b25zVGVtcGxhdGUhOiBDb21wZXRpdGlvbkhlYWRlckN1c3RvbUJ1dHRvbnNEaXJlY3RpdmU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhbkNoYW5nZVN0YXR1cyA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHZhbGlkYXRlVmVyc2lvbkFjdGlvbjogdW5kZWZpbmVkIHwgdmFsaWRhdGVWZXJzaW9uRm4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHZhbGlkYXRlTWFuYWdlbWVudEFjY2VzczogKCgoKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCkgPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3M6ICgoKCkgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQpID0gdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgc2VsZWN0ZWRDb21wZXRpdGlvblZlcnNpb25JbmZvID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wZXRpdGlvblZlcnNpb25Nb2RlbD4oKTtcclxuXHJcbiAgcHVibGljIGNvbXBldGl0aW9uOiBDb21wZXRpdGlvblN0YXR1c01vZGVsIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyB2ZXJzaW9uczogQ29tcGV0aXRpb25WZXJzaW9uTW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZDogQ29tcGV0aXRpb25WZXJzaW9uTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHNlbGVjdGVkVmVyc2lvbiA9ICcnO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvblN0YXR1c0VudW0gPSBDb21wZXRpdGlvblN0YXR1c0VudW07XHJcbiAgcHVibGljIGNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0gPSBDYW5jZWxDb21wZXRpdGlvblR5cGVFbnVtO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtID0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bTtcclxuICBwdWJsaWMgY29tcGV0aXRpb25MYWJlbCA9ICcnO1xyXG4gIHB1YmxpYyBzaG93Q2FuY2VsQ29tcGV0aXRpb25CdXR0b24gPSBmYWxzZTtcclxuICBwdWJsaWMgY2FuY2VsQ29tcGV0aXRpb25CdXR0b25MYWJlbCA9ICfQntGC0LzQtdC90LjRgtGMINC+0YLQsdC+0YAnO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvbkNvbmZpZzogQ29tcGV0aXRpb25Db25maWdNb2RlbCB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b24gPSBmYWxzZTtcclxuICBwdWJsaWMgcmVzdG9yZUJ1dHRvbk5hbWUgPSAn0JLQvtC30L7QsdC90L7QstC40YLRjCc7XHJcbiAgcHVibGljIGlzQ29udHJvbCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NpZ25DYWxsYmFjazogYW55O1xyXG4gIHByaXZhdGUgX2FjdGl2aXR5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzaWduU2VydmljZTogU2lnblNlcnZpY2UsIHByaXZhdGUgc3RvcmU6IFN0b3JlLCBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0VudW1MYWJlbCgpIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID09IDEgJiYgdGhpcy5zZWxlY3RlZFxyXG4gICAgICAmJiB0aGlzLnNlbGVjdGVkLnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUpIHtcclxuICAgICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbFt0aGlzLnNlbGVjdGVkLnN0YXR1c107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jb21wZXRpdGlvbiA/IENvbXBldGl0aW9uU3RhdHVzRW51bUxhYmVsW3RoaXMuY29tcGV0aXRpb24uc3RhdHVzXSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0Nzc0NsYXNzKCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy52ZXJzaW9ucyAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA9PSAxICYmIHRoaXMuc2VsZWN0ZWRcclxuICAgICAgJiYgKHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyB8fCBDb21wZXRpdGlvblN0YXR1c0VudW0uTmV3KSA8PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgJyc6IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgICAgJ2NvbG9yLWdyZWVuJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJyc6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLk5ld1xyXG4gICAgICAgIHx8IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkNvbXBsZXRlZCxcclxuICAgICAgJ2NvbG9yLWdyZWVuJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlLFxyXG4gICAgICAnY29sb3Itb3JhbmdlJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyxcclxuICAgICAgJ2NvbG9yLXJlZCc6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkNhbmNlbGVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbkNyZWF0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RWZXJzaW9uICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICAgJiYgKFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgfHxcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyB8fFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RWZXJzaW9uICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICAgJiYgKFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgfHxcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyB8fFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZCkgJiZcclxuICAgICAgICB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5EZWxldGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gdGhpcy5jb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgJiYgdGhpcy52ZXJzaW9uc1xyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID4gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IHRoaXMuY29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnNcclxuICAgICAgICAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA+IDFcclxuICAgICAgICAmJiB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5BY3RpdmF0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uKSAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAoKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlZhbGlkYXRpb24pICYmXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSAmJlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gKCF0aGlzLmNhbkNoYW5nZVN0YXR1cyB8fFxyXG4gICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgICAodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkNvbmZpcm1lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICghdGhpcy5jYW5DaGFuZ2VTdGF0dXMgfHxcclxuICAgICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgJiZcclxuICAgICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSkpICYmXHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbGlkYXRlVmVyc2lvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzICYmICEhdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNyZWF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzID0gdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbkNoYW5nZVN0YXR1cyAmJiB2YWxpZGF0aW9uUmVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYWNrVG9FZGl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlcyA9IHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCk7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXMgJiYgdmFsaWRhdGlvblJlcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuVmFsaWRhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQgJiZcclxuICAgICAgICB0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNMYXN0VmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG0gPSBNYXRoLm1heCguLi50aGlzLnZlcnNpb25zLm1hcCh4ID0+IHgubnVtKSk7XHJcbiAgICAgIHJldHVybiBtID09PSB0aGlzLnNlbGVjdGVkPy5udW07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3dSZWplY3Rpb25SZWFzb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkPy5yZWplY3Rpb25SZWFzb24gJiZcclxuICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgIHx8IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmVyc2lvblN0YXR1c0NsYXNzKCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgJ2NvbG9yLWdyZWVuJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqINCa0L7QvdGC0LXQutGB0YIg0LTQu9GPINC60LDRgdGC0L7QvNC90YvRhSDQutC90L7Qv9C+0LosINC80L7QttC10YIg0YDQsNGB0YjQuNGA0Y/RgtGM0YHRjyAqL1xyXG4gIHB1YmxpYyBnZXQgY3VzdG9tQnV0dG9uc1RlbXBsYXRlQ29udGV4dCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWN0aXZpdHlJZDogdGhpcy5fYWN0aXZpdHlJZCxcclxuICAgICAgY29tcGV0aXRpb25JZDogdGhpcy5jb21wZXRpdGlvbj8uaWQsXHJcbiAgICAgIGNvbXBldGl0aW9uVmVyc2lvbklkOiB0aGlzLnNlbGVjdGVkPy5pZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuUmV0dXJuVG9FZGl0KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uUmVqZWN0ZWQgJiYgdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuU2VlVGhyZWVEb3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCkgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT0gdGhpcy5jb21wZXRpdGlvblN0YXR1c0VudW0uTmV3ICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9IHRoaXMuY29tcGV0aXRpb25TdGF0dXNFbnVtLkNvbXBsZXRlZCAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPSB0aGlzLmNvbXBldGl0aW9uU3RhdHVzRW51bS5Ob3RQbGFjZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobG9hZENvbXBldGl0aW9uSGVhZGVyKCkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnZlcnNpb25zID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TZWxlY3RlZFZlcnNpb25JZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZlcnNpb24gPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TdGF0dXMpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24gPSByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uTGFiZWwpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgdGhpcy5jb21wZXRpdGlvbkxhYmVsID0gcmVzdWx0O1xyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0QWN0aXZpdHlJZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLl9hY3Rpdml0eUlkID0gcmVzdWx0O1xyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25Db25maWcpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb25Db25maWcgPSByZXN1bHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uTGFiZWwpIHtcclxuICAgICAgICAgIHRoaXMuY2FuY2VsQ29tcGV0aXRpb25CdXR0b25MYWJlbCA9IHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25MYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25UeXBlXHJcbiAgICAgICAgICAmJiB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZSA+IHRoaXMuY2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bS5EaXNhYmxlZCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2FuY2VsQ29tcGV0aXRpb25CdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dDb21wbGV0ZUNvbXBldGl0aW9uQnV0dG9uID0gdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5zaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbjtcclxuICAgICAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZy5yZXN0b3JlQnV0dG9uTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5yZXN0b3JlQnV0dG9uTmFtZSA9IHRoaXMuY29tcGV0aXRpb25Db25maWcucmVzdG9yZUJ1dHRvbk5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RNYW51YWxWZXJzaW9uU3RhdHVzQ2hhbmdlZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAvLyDQv9GA0L7QuNC30L7RiNC70L4g0YDRg9GH0L3QvtC1INC40LfQvNC10L3QtdC90LjQtSDRgdGC0LDRgtGD0YHQsCwg0YLQvtC70LrQsNC10Lwg0LTQsNC70YzRiNC1INC/0L4g0YLQsNC50LzQsNGD0YLRg1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgICAgdmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgc3RhdHVzOiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkNvbmZpcm1lZFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWwodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbFt2YWx1ZSBhcyBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb21wZXRpdGlvblZlcnNpb25TdGF0dXNHcm91cHBpbmdMYWJlbCh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWxbdmFsdWUgYXMgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlVmVyc2lvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coe1xyXG4gICAgICB0aXRsZTogYNCk0L7RgNC80LjRgNC+0LLQsNC90LjQtSDQuNC30LzQtdC90LXQvdC40LlgLFxyXG4gICAgICBtZXNzYWdlOlxyXG4gICAgICAgIGAke3RoaXMuZ2V0V2FybmluZ01lc3NhZ2VIdG1sKCfQktC90LjQvNCw0L3QuNC1ISDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INC/0YDQuNCy0LXQtNC10YIg0Log0YHQvtC30LTQsNC90LjRjiDQvdC+0LLQvtC5INCy0LXRgNGB0LjQuCDQvtGC0LHQvtGA0LAnKX1cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAg0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YHRhNC+0YDQvNC40YDQvtCy0LDRgtGMINC40LfQvNC10L3QtdC90LjRjz9cclxuICAgICAgICAgICAgPC9wPmAsXHJcbiAgICAgIGNvbG9yOiBEaWFsb2dDb2xvci55ZWxsb3csXHJcbiAgICAgIHR5cGU6IERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgb2tMYWJlbDogJ9Cf0L7QtNGC0LLQtdGA0LTQuNGC0YwnLFxyXG4gICAgICBjYW5jZWxMYWJlbDogJ9Ce0YLQvNC10L3QuNGC0YwnLFxyXG4gICAgICBva0NhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjcmVhdGVDb21wZXRpdGlvblZlcnNpb24oKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdGl2YXRlVmVyc2lvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coe1xyXG4gICAgICAgIHRpdGxlOiBg0J/Rg9Cx0LvQuNC60LDRhtC40Y8gJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx90LBgLFxyXG4gICAgICAgIG1lc3NhZ2U6IGAke3RoaXMuZ2V0V2FybmluZ01lc3NhZ2VIdG1sKCl9XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INC+0L/Rg9Cx0LvQuNC60L7QstCw0YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/XHJcbiAgICAgICAgICAgIDwvcD5gLFxyXG4gICAgICAgIGNvbG9yOiBEaWFsb2dDb2xvci55ZWxsb3csXHJcbiAgICAgICAgdHlwZTogRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICAgIG9rTGFiZWw6ICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJyxcclxuICAgICAgICBjYW5jZWxMYWJlbDogJ9Ce0YLQvNC10L3QuNGC0YwnLFxyXG4gICAgICAgIG9rQ2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGV0aXRpb25WZXJzaW9uQ2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgICAgdmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWQsXHJcbiAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmVcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlVmVyc2lvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0ZWQ7XHJcblxyXG4gICAgICBpZiAodGhpcy52YWxpZGF0ZVZlcnNpb25BY3Rpb24pIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlVmVyc2lvbkFjdGlvbihzZWxlY3RlZEl0ZW0uaWQsICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2lnblNlcnZpY2Uuc2lnbih7XHJcbiAgICAgICAgICAgIHRpdGxlOiAn0J3QsNC/0YDQsNCy0LvQtdC90LjQtSDQtNC+0LrRg9C80LXQvdGC0LAg0L3QsCDRgdC+0LPQu9Cw0YHQvtCy0LDQvdC40LUnLFxyXG4gICAgICAgICAgICBva0xhYmVsOiAn0J7RgtC/0YDQsNCy0LjRgtGMJyxcclxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgICAgICAgcGRmVXJsOiBgL20tZGF0YS9taW5maW4vcGRmLWNvbXBldGl0aW9uLyR7c2VsZWN0ZWRJdGVtLmlkfWAsXHJcbiAgICAgICAgICAgIHhtbFVybDogYC9tLWRhdGEvbWluZmluL3htbC1jb21wZXRpdGlvbi8ke3NlbGVjdGVkSXRlbS5pZH1gLFxyXG4gICAgICAgICAgICBwcm92aWRlcjogJ2VtcHR5J1xyXG4gICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgICAgdmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgc3RhdHVzOiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlZhbGlkYXRpb25cclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQo9C00LDQu9C40YLRjCDQstC10YDRgdC40Y4gICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfdCwP2AsXHJcbiAgICAgICAgYCR7dGhpcy5nZXRXYXJuaW5nTWVzc2FnZUh0bWwoKX1cclxuICAgICAgPHA+XHJcbiAgICAgICAg0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpfdCwP1xyXG4gICAgICA8L3A+YCxcclxuICAgICAgICBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChkZWxldGVDb21wZXRpdGlvblZlcnNpb24oe3ZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkfSkpO1xyXG4gICAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIERpYWxvZ0NvbG9yLnJlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdG9yZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQktC+0LfQvtCx0L3QvtCy0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGFjdGl2YXRlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYXVzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQn9GA0LjQvtGB0YLQsNC90L7QstC40YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/YCwgbnVsbCwgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChwYXVzZUNvbXBldGl0aW9uKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5oaWRlQ29udHJvbHMoKTtcclxuICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnICYmIHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25UeXBlID09IHRoaXMuY2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bS5XaXRoVmFsaWRhdGlvbikge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjYW5jZWxDb21wZXRpdGlvbldpdGhWYWxpZGF0aW9uKHt2ZXJzaW9uSWQ6IHNlbGVjdGVkSXRlbS5pZH0pKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0J7RgtC80LXQvdC40YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/YCwgbnVsbCwgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNhbmNlbENvbXBldGl0aW9uKCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21wbGV0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQl9Cw0LLQtdGA0YjQuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGxldGVDb21wZXRpdGlvbigpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFZlcnNpb24oaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZWxlY3RDb21wZXRpdGlvblZlcnNpb24oe3ZlcnNpb25JZDogaWR9KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmFja1RvRWRpdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INGC0LXQutGD0YnQtdC5INCy0LXRgNGB0LjQuGAsXHJcbiAgICAgIGDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YDRgdC40Y4gJHt0aGlzLmNvbXBldGl0aW9uTGFiZWwudG9Mb3dlckNhc2UoKX1hYCxcclxuICAgICAgRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICAob2spID0+IHtcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgIHZlcnNpb25JZDogdGhpcy5zZWxlY3RlZC5pZCxcclxuICAgICAgICAgICAgc3RhdHVzOiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB1bmRlZmluZWQsIG51bGwsICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJywgdW5kZWZpbmVkLCBEaWFsb2dDb2xvci55ZWxsb3cpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dDb250cm9scygpIHtcclxuICAgIHRoaXMuaXNDb250cm9sID0gIXRoaXMuaXNDb250cm9sO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVDb250cm9scygpIHtcclxuICAgIHRoaXMuaXNDb250cm9sID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1JlamVjdGlvbihtb2RlbDogQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0J/RgNC40YfQuNC90LAg0L7RgtC60LvQvtC90LXQvdC40Y9gLFxyXG4gICAgICBgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5X19hdXRob3JcIj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuYXV0aG9yfTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuY3JlYXRlZERhdGV9PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxwIGNsYXNzPVwibW9kYWwtYm9keV9fdGV4dFwiPiR7bW9kZWwucmVhc29ufTwvcD5cclxuICAgICAgYCwgRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbnVsbCwgdW5kZWZpbmVkLCAnJywgRGlhbG9nQ29sb3IueWVsbG93KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudmVyc2lvbnMgJiYgdGhpcy5zZWxlY3RlZFZlcnNpb24pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMudmVyc2lvbnMuZmluZChzID0+IHMuaWQgPT09IHRoaXMuc2VsZWN0ZWRWZXJzaW9uKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBldGl0aW9uVmVyc2lvbkluZm8uZW1pdCh0aGlzLnNlbGVjdGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0V2FybmluZ01lc3NhZ2VIdG1sKGN1c3RvbVRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWN1c3RvbVRleHQpIHtcclxuICAgICAgY3VzdG9tVGV4dCA9ICfQktC90LjQvNCw0L3QuNC1ISDQlNCw0L3QvdC+0LUg0LTQtdC50YHRgtCy0LjQtSDQvdC10LvRjNC30Y8g0L7RgtC80LXQvdC40YLRjCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJiZy1uZXdzIHB4LTMgcHktMiByYWRpdXMtNCBteS0zIGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci0zXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx1c2UgaHJlZj1cIiNhbGVydFwiPjwvdXNlPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIG0tMCBib2xkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLW9yYW5nZVwiPlxyXG4gICAgICAgICAgICAgICAgICAke2N1c3RvbVRleHR9XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PmA7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lclwiICpuZ0lmPVwic2VsZWN0ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDwhLS0g0J3QsNC30LLQsNC90LjQtSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gd3B4LTE2MCBtci0zXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tINCy0YHRgtCw0LLQuNGC0Ywg0L3QsNC30LLQsNC90LjQtSDRgdGD0YnQvdC+0YHRgtC4LCDQu9C40LHQviBcItCh0YPQsdGB0LjQtNC40Y9cIiDQu9C40LHQviBcItCe0YLQsdC+0YBcIiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIiBteUNvbXBldGl0aW9uTGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDQvdCw0LfQstCw0L3QuNC1INGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDQvtCz0YDQsNC90LjRh9C40YLRjCDQtNC70LjQvdGDINC90LDQt9Cy0LDQvdC40Y8g0LIgNDQg0YHQuNC80LLQvtC70L7QsiAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0g0LLRgdGC0LDQstC40YLRjCDQsiDRgtGD0LvRgtC40L8g0L/QvtC70L3QvtC1INC90LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RleHQgdGV4dC1ub3JtYWxcIiBteVRvb2x0aXAgW3Rvb2x0aXBdPVwic2VsZWN0ZWQubmFtZVwiIFt0b29sdGlwTWF4V2lkdGhdPVwiMzIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWQuc2hvcnROYW1lID8gc2VsZWN0ZWQuc2hvcnROYW1lIDogJ9Cd0LUg0YPQutCw0LfQsNC9JyB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSDRgdGC0LDRgtGD0YEg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xMTBcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICDQodGC0LDRgtGD0YFcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwhLS0g0YHRgtCw0YLRg9GBINGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDQtNC70Y8g0LfQsNC00LDQvdC40Y8g0YbQstC10YLQsCDQtNC+0LHQsNCy0LvRj9GC0Ywg0LrQu9Cw0YHRgdGLOiDQvtGA0LDQvdC20LXQstGL0LkgLSBcImNvbG9yLW9yYW5nZVwiLCDQt9C10LvQtdC90YvQuSAtIFwiY29sb3ItZ3JlZW5cIiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGV4dFwiIFtuZ0NsYXNzXT1cImNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzQ3NzQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0VudW1MYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tINGB0LXQu9C10LrRgiDRgSDQstGL0LHQvtGA0L7QvCDQstC10YDRgdC40LggLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gaW5mby1iYW5uZXItaXRlbV9pbnB1dCB3cHgtMjYwIG1yLTNcIiAqbmdJZj1cInZlcnNpb25zICYmIHZlcnNpb25zLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0Ym94IGlucHV0Ym94LW1kIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInZlcnNpb25zXCIgW25nTW9kZWxdPVwic2VsZWN0ZWQuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RWZXJzaW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBCeT1cInN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdEZvdW5kVGV4dD1cItCd0LUg0L3QsNC50LTQtdC90L5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0Z3JvdXAtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWwoaXRlbS5zdGF0dXMpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXNlYXJjaD1cInNlYXJjaFRlcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAg0JLQtdGA0YHQuNGPIHt7aXRlbS5udW19fSDQvtGCIHt7aXRlbS5jcmVhdGVkRGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAg0JLQtdGA0YHQuNGPIHt7aXRlbS5udW19fSDQvtGCIHt7aXRlbS5jcmVhdGVkRGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tINGB0YLQsNGC0LDRg9GBINCy0LXRgNGB0LjQuCAtLT5cclxuICAgICAgICA8IS0tINC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsINC10YHQu9C4INC90LXRgiDQstC10YDRgdC40LkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gd3B4LTExMFwiICpuZ0lmPVwidmVyc2lvbnMgJiYgdmVyc2lvbnMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICDQodGC0LDRgtGD0YEg0LLQtdGA0YHQuNC4XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSDRgdGC0LDRgtGD0YEg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgICAgICAgICA8IS0tINC00LvRjyDQt9Cw0LTQsNC90LjRjyDRhtCy0LXRgtCwINC00L7QsdCw0LLQu9GP0YLRjCDQutC70LDRgdGB0Ys6INC+0YDQsNC90LbQtdCy0YvQuSAtIFwiY29sb3Itb3JhbmdlXCIsINC30LXQu9C10L3Ri9C5IC0gXCJjb2xvci1ncmVlblwiIC0tPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RleHRcIiAqbmdJZj1cInNlbGVjdGVkXCIgW25nQ2xhc3NdPVwidmVyc2lvblN0YXR1c0NsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBnZXRDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWwoc2VsZWN0ZWQuc3RhdHVzKSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDRg9C00LDQu9C10L3QuNC1LCDQstGL0LfQvtCyINC80L7QtNCw0LvQutC4LCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1INC+0LEg0LLQvdC10YHQtdC90LjQuCDQuNC30LzQtdC90LXQvdC40LkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1cIj5cclxuICAgICAgICAgICAgPCEtLSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCDQtdGB0LvQuCDQvdC1INGC0YDQtdCx0YPQtdGC0YHRjyAtLT5cclxuICAgICAgICAgICAgPCEtLSBcItC60L7QvdCy0LXRgNGCXCIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX19pY29uXCIgKm5nSWY9XCJzaG93UmVqZWN0aW9uUmVhc29uXCJcclxuICAgICAgICAgICAgICAgIG15VG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ9Cf0L7RgdC80L7RgtGA0LXRgtGMINC/0YDQuNGH0LjQvdGDINC+0YLQutC70L7QvdC10L3QuNGPJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1JlamVjdGlvbihzZWxlY3RlZC5yZWplY3Rpb25SZWFzb24pXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCI2XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjEyXCIgcng9XCIxXCIgc3Ryb2tlPVwiIzI4MjgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgNi4yNUwxMS4zMzU2IDEzLjY1OTVDMTEuNzE0NSAxMy45OTYyIDEyLjI4NTUgMTMuOTk2MiAxMi42NjQ0IDEzLjY1OTVMMjEgNi4yNVwiIHN0cm9rZT1cIiMyODI4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE4TDcuNSAxNEw5Ljc1IDEyTTIxIDE4TDE2LjUgMTRMMTQuMjUgMTJcIiBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tINGD0LTQsNC70LXQvdC40LUg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FuRGVsZXRlVmVyc2lvblwiIChjbGljayk9XCJyZW1vdmVWZXJzaW9uKClcIiAgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX19pY29uXCIgbXlUb29sdGlwIFt0b29sdGlwXT1cIifQo9C00LDQu9C40YLRjCDQstC10YDRgdC40Y4nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgNkg1SDIxXCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTggNlY0QzggMy40Njk1NyA4LjIxMDcxIDIuOTYwODYgOC41ODU3OSAyLjU4NTc5QzguOTYwODYgMi4yMTA3MSA5LjQ2OTU3IDIgMTAgMkgxNEMxNC41MzA0IDIgMTUuMDM5MSAyLjIxMDcxIDE1LjQxNDIgMi41ODU3OUMxNS43ODkzIDIuOTYwODYgMTYgMy40Njk1NyAxNiA0VjZNMTkgNlYyMEMxOSAyMC41MzA0IDE4Ljc4OTMgMjEuMDM5MSAxOC40MTQyIDIxLjQxNDJDMTguMDM5MSAyMS43ODkzIDE3LjUzMDQgMjIgMTcgMjJIN0M2LjQ2OTU3IDIyIDUuOTYwODYgMjEuNzg5MyA1LjU4NTc5IDIxLjQxNDJDNS4yMTA3MSAyMS4wMzkxIDUgMjAuNTMwNCA1IDIwVjZIMTlaXCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDExVjE3XCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDExVjE3XCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSDQstC+0YHQutC70LjRhtCw0YLQtdC70YzQvdGL0Lkg0LfQvdCw0LogLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNMYXN0VmVyc2lvblwiIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9faWNvblwiIG15VG9vbHRpcCBbdG9vbHRpcF09XCIn0JLQvdC10YHQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtGB0YLRg9C/0L3QviDQvdCwINC/0L7RgdC70LXQtNC90LXQuSDQstC10YDRgdC40LgnXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyLjIzMDIgMThWMTdNMTIuMjMwMiAxNFYxME00LjAwMjk4IDIxLjI1SDIwLjQ1NzVDMjEuOTk3MSAyMS4yNSAyMi45NTkzIDE5LjU4MzMgMjIuMTg5NSAxOC4yNUwxMy45NjIzIDRDMTMuMTkyNSAyLjY2NjY3IDExLjI2OCAyLjY2NjY3IDEwLjQ5ODIgNEwyLjI3MDkzIDE4LjI1QzEuNTAxMTMgMTkuNTgzMyAyLjQ2MzM4IDIxLjI1IDQuMDAyOTggMjEuMjVaXCIgc3Ryb2tlPVwiI0Q1N0IxQ1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiISFjdXN0b21CdXR0b25zVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21CdXR0b25zVGVtcGxhdGUudGVtcGxhdGVSZWY7Y29udGV4dDpjdXN0b21CdXR0b25zVGVtcGxhdGVDb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZCBncmVlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVZlcnNpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5DcmVhdGVWZXJzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3JlYXRlVmVyc2lvbkRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICDQodGE0L7RgNC80LjRgNC+0LLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZCBncmVlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlVmVyc2lvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbkFjdGl2YXRlVmVyc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGl2YXRlVmVyc2lvbkRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICDQntC/0YPQsdC70LjQutC+0LLQsNGC0YxcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVWZXJzaW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuVmFsaWRhdGVWZXJzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmFsaWRhdGVWZXJzaW9uRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgINCh0L7Qs9C70LDRgdC+0LLQsNC90LjQtVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhblJldHVyblRvRWRpdFwiIGNsYXNzPVwiYnRuIGJ0bi1tZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2tUb0VkaXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJhY2tUb0VkaXREaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAg0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YxcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwhLS0g0YPQv9GA0LDQstC70LXQvdC40LUg0YHRgtCw0YLRg9GB0L7QvC/QvtGC0LHQvtGA0L7QvCAtLT5cclxuICAgICAgICAgICAgPCEtLSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMINC10YHQu9C4INC90LUg0YLRgNC10LHRg9C10YLRgdGPIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBldGl0aW9uICYmIGNhblNlZVRocmVlRG90c1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX2ljb25cIiAoY2xpY2spPVwic2hvd0NvbnRyb2xzKClcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzQ29udHJvbH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC41IDEyQzEwLjUgMTIuODI4NCAxMS4xNzE2IDEzLjUgMTIgMTMuNUMxMi44Mjg0IDEzLjUgMTMuNSAxMi44Mjg0IDEzLjUgMTJDMTMuNSAxMS4xNzE2IDEyLjgyODQgMTAuNSAxMiAxMC41QzExLjE3MTYgMTAuNSAxMC41IDExLjE3MTYgMTAuNSAxMlpcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC41IDE5QzEwLjUgMTkuODI4NCAxMS4xNzE2IDIwLjUgMTIgMjAuNUMxMi44Mjg0IDIwLjUgMTMuNSAxOS44Mjg0IDEzLjUgMTlDMTMuNSAxOC4xNzE2IDEyLjgyODQgMTcuNSAxMiAxNy41QzExLjE3MTYgMTcuNSAxMC41IDE4LjE3MTYgMTAuNSAxOVpcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC41IDVDMTAuNSA1LjgyODQzIDExLjE3MTYgNi41IDEyIDYuNUMxMi44Mjg0IDYuNSAxMy41IDUuODI4NDMgMTMuNSA1QzEzLjUgNC4xNzE1NyAxMi44Mjg0IDMuNSAxMiAzLjVDMTEuMTcxNiAzLjUgMTAuNSA0LjE3MTU3IDEwLjUgNVpcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29udHJvbFwiIGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fbWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sX19tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhdXNlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNVwiIHk9XCIzXCIgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiMThcIiByeD1cIjFcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxNFwiIHk9XCIzXCIgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiMThcIiByeD1cIjFcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0J/RgNC40L7RgdGC0LDQvdC+0LLQuNGC0YxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sX19tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc3RvcmUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjAuNTUxOCAxMC44Mjc2QzIxLjIwNDQgMTEuMjE1MSAyMS4yMDQ0IDEyLjE1OTkgMjAuNTUxOCAxMi41NDc0TDUuNTEwNTQgMjEuNDc4MUM0Ljg0Mzk1IDIxLjg3MzkgNCAyMS4zOTM1IDQgMjAuNjE4M0w0IDIuNzU2NzRDNCAxLjk4MTUgNC44NDM5NSAxLjUwMTA5IDUuNTEwNTQgMS44OTY4OEwyMC41NTE4IDEwLjgyNzZaXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVzdG9yZUJ1dHRvbk5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX21lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBsZXRlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgcng9XCIyXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCX0LDQstC10YDRiNC40YLRjFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX21lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2hvd0NhbmNlbENvbXBldGl0aW9uQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xOS43Njc3IDQuMjMyMTNDMjEuNTM1NCA1Ljk5OTkgMjAuNzQ0IDYuNzkxMzUgMTkuNzY3NyA3Ljc2NzY2TDcuNzY3NzEgMTkuNzY3N0M2Ljc5MTQgMjAuNzQ0IDUuOTk5ODcgMjEuNTM1NSA0LjIzMjE3IDE5Ljc2NzdDMi40NjQ1NCAxNy45OTk5IDMuMjU1ODYgMTcuMjA4NCA0LjIzMjE3IDE2LjIzMjFMMTYuMjMyMiA0LjIzMjEzQzE3LjIwODUgMy4yNTU4MiAxOCAyLjQ2NDUzIDE5Ljc2NzcgNC4yMzIxM1pcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk00LjIzMjIyIDQuMjMxOTZDNS45NjQ0NSAyLjQ5OTkxIDYuNzkxNDQgMy4yNTU2NSA3Ljc2Nzc1IDQuMjMxOTZMMTkuNzY3OCAxNi4yMzJDMjAuNzQ0MSAxNy4yMDgzIDIxLjUgMTguMDM1MyAxOS43Njc4IDE5Ljc2NzVDMTguMDM1NSAyMS40OTk3IDE3LjIwODUgMjAuNzQzOCAxNi4yMzIyIDE5Ljc2NzVMNC4yMzIyMiA3Ljc2NzVDMy4yNTU5MSA2Ljc5MTE5IDIuNDY0MjkgNiA0LjIzMjIyIDQuMjMxOTZaXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2FuY2VsQ29tcGV0aXRpb25CdXR0b25MYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29udHJvbFwiIGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fYmdcIiAoY2xpY2spPVwiaGlkZUNvbnRyb2xzKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
448
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLHNDQUFzQyxFQUN2QyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLFdBQVcsRUFDWCxVQUFVLEVBRVYsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixzQkFBc0IsRUFFdkIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQiwrQkFBK0IsRUFDL0IsOEJBQThCLEVBQzlCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3pCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQ0FBa0MsRUFDbEMsdUJB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LFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxhQUFpQyxTQUFTO1FBQ3RFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixVQUFVLEdBQUcsMkNBQTJDLENBQUM7U0FDMUQ7UUFDRCxPQUFPOzs7Ozs7OztvQkFRUyxVQUFVOzs7bUJBR1gsQ0FBQztJQUNsQixDQUFDOzt3SEF0ZFUsMEJBQTBCOzRHQUExQiwwQkFBMEIsOFlBRXZCLHVDQUF1Qyx1RUMzRHZELGk4Z0JBMExBOzRGRGpJYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0Usd0JBQXdCO2lKQU0zQixxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUMsdUNBQXVDO2dCQUk5QyxlQUFlO3NCQURyQixLQUFLO2dCQUlDLHFCQUFxQjtzQkFEM0IsS0FBSztnQkFJQyx3QkFBd0I7c0JBRDlCLEtBQUs7Z0JBSUMseUJBQXlCO3NCQUQvQixLQUFLO2dCQUlDLDhCQUE4QjtzQkFEcEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bSxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWwsXHJcbiAgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWxcclxufSBmcm9tICcuLy4uL2VudW1zL2NvbXBldGl0aW9uLXZlcnNpb24tc3RhdHVzLmVudW0nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25WZXJzaW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY29tcGV0aXRpb24tdmVyc2lvbi5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcGV0aXRpb25Nb2RlRW51bSxcclxuICBDb21wZXRpdGlvblN0YXR1c0VudW0sXHJcbiAgQ29tcGV0aXRpb25TdGF0dXNFbnVtTGFiZWwsXHJcbiAgRGlhbG9nQ29sb3IsXHJcbiAgRGlhbG9nVHlwZSxcclxuICBBbGVydFNlcnZpY2UsXHJcbiAgVW5TdWJzY3JpYmVyLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uQ29uZmlnLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uTGFiZWwsXHJcbiAgQ29tcGV0aXRpb25Db25maWdNb2RlbFxyXG59IGZyb20gJ215cnRleC1tZi11aS1jb21wb3NpdGUnO1xyXG5pbXBvcnQge1xyXG4gIGFjdGl2YXRlQ29tcGV0aXRpb24sXHJcbiAgY2FuY2VsQ29tcGV0aXRpb24sXHJcbiAgY2FuY2VsQ29tcGV0aXRpb25XaXRoVmFsaWRhdGlvbixcclxuICBjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMsXHJcbiAgY29tcGxldGVDb21wZXRpdGlvbixcclxuICBjcmVhdGVDb21wZXRpdGlvblZlcnNpb24sXHJcbiAgZGVsZXRlQ29tcGV0aXRpb25WZXJzaW9uLFxyXG4gIGxvYWRDb21wZXRpdGlvbkhlYWRlcixcclxuICBwYXVzZUNvbXBldGl0aW9uLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uVmVyc2lvblxyXG59IGZyb20gJy4uL3N0b3JlL2NvbXBldGl0aW9uLWhlYWRlci5hY3Rpb25zJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25TdGF0dXNNb2RlbCB9IGZyb20gJy4uL21vZGVscy9jb21wZXRpdGlvbi1zdGF0dXMubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIHNlbGVjdEFjdGl2aXR5SWQsXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25TZWxlY3RlZFZlcnNpb25JZCxcclxuICBzZWxlY3RDb21wZXRpdGlvblN0YXR1cyxcclxuICBzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zLFxyXG4gIHNlbGVjdE1hbnVhbFZlcnNpb25TdGF0dXNDaGFuZ2VkXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLnNlbGVjdG9yJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21wZXRpdGlvbi1oZWFkZXItY3VzdG9tLWJ1dHRvbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENhbmNlbENvbXBldGl0aW9uVHlwZUVudW0gfSBmcm9tICcuLi9lbnVtcy9jYW5jZWwtY29tcGV0aXRpb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2lnblNlcnZpY2UgfSBmcm9tICdteXJ0ZXgtbWYtc2lnbmVyJztcclxuXHJcbmV4cG9ydCBkZWNsYXJlIHR5cGUgdmFsaWRhdGVWZXJzaW9uRm4gPSAoKHBhcmFtOiBzdHJpbmcsIG9uVmFsaWRhdGVkOiAoKSA9PiB2b2lkKSA9PiB2b2lkKTtcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIENyeXB0b0ludGVyY2VwdG9yOiBhbnk7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21yeC1jb21wZXRpdGlvbi1oZWFkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wZXRpdGlvbi1oZWFkZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21wZXRpdGlvbkhlYWRlckNvbXBvbmVudCBleHRlbmRzIFVuU3Vic2NyaWJlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlKVxyXG4gIHB1YmxpYyBjdXN0b21CdXR0b25zVGVtcGxhdGUhOiBDb21wZXRpdGlvbkhlYWRlckN1c3RvbUJ1dHRvbnNEaXJlY3RpdmU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhbkNoYW5nZVN0YXR1cyA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHZhbGlkYXRlVmVyc2lvbkFjdGlvbjogdW5kZWZpbmVkIHwgdmFsaWRhdGVWZXJzaW9uRm4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHZhbGlkYXRlTWFuYWdlbWVudEFjY2VzczogKCgoKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCkgPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3M6ICgoKCkgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQpID0gdW5kZWZpbmVkO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgc2VsZWN0ZWRDb21wZXRpdGlvblZlcnNpb25JbmZvID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wZXRpdGlvblZlcnNpb25Nb2RlbD4oKTtcclxuXHJcbiAgcHVibGljIGNvbXBldGl0aW9uOiBDb21wZXRpdGlvblN0YXR1c01vZGVsIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyB2ZXJzaW9uczogQ29tcGV0aXRpb25WZXJzaW9uTW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZDogQ29tcGV0aXRpb25WZXJzaW9uTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHNlbGVjdGVkVmVyc2lvbiA9ICcnO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvblN0YXR1c0VudW0gPSBDb21wZXRpdGlvblN0YXR1c0VudW07XHJcbiAgcHVibGljIGNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0gPSBDYW5jZWxDb21wZXRpdGlvblR5cGVFbnVtO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtID0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bTtcclxuICBwdWJsaWMgY29tcGV0aXRpb25MYWJlbCA9ICcnO1xyXG4gIHB1YmxpYyBzaG93Q2FuY2VsQ29tcGV0aXRpb25CdXR0b24gPSBmYWxzZTtcclxuICBwdWJsaWMgY2FuY2VsQ29tcGV0aXRpb25CdXR0b25MYWJlbCA9ICfQntGC0LzQtdC90LjRgtGMINC+0YLQsdC+0YAnO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvbkNvbmZpZzogQ29tcGV0aXRpb25Db25maWdNb2RlbCB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b24gPSBmYWxzZTtcclxuICBwdWJsaWMgcmVzdG9yZUJ1dHRvbk5hbWUgPSAn0JLQvtC30L7QsdC90L7QstC40YLRjCc7XHJcbiAgcHVibGljIGlzQ29udHJvbCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NpZ25DYWxsYmFjazogYW55O1xyXG4gIHByaXZhdGUgX2FjdGl2aXR5SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzaWduU2VydmljZTogU2lnblNlcnZpY2UsIHByaXZhdGUgc3RvcmU6IFN0b3JlLCBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0VudW1MYWJlbCgpIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID09IDEgJiYgdGhpcy5zZWxlY3RlZFxyXG4gICAgICAmJiB0aGlzLnNlbGVjdGVkLnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUpIHtcclxuICAgICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbFt0aGlzLnNlbGVjdGVkLnN0YXR1c107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jb21wZXRpdGlvbiA/IENvbXBldGl0aW9uU3RhdHVzRW51bUxhYmVsW3RoaXMuY29tcGV0aXRpb24uc3RhdHVzXSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0Nzc0NsYXNzKCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy52ZXJzaW9ucyAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA9PSAxICYmIHRoaXMuc2VsZWN0ZWRcclxuICAgICAgJiYgKHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyB8fCBDb21wZXRpdGlvblN0YXR1c0VudW0uTmV3KSA8PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgJyc6IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgICAgJ2NvbG9yLWdyZWVuJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJyc6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLk5ld1xyXG4gICAgICAgIHx8IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkNvbXBsZXRlZCxcclxuICAgICAgJ2NvbG9yLWdyZWVuJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlLFxyXG4gICAgICAnY29sb3Itb3JhbmdlJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyxcclxuICAgICAgJ2NvbG9yLXJlZCc6IHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkNhbmNlbGVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNhbkNyZWF0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RWZXJzaW9uICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICAgJiYgKFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgfHxcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyB8fFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RWZXJzaW9uICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICAgJiYgKFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgfHxcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyB8fFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZCkgJiZcclxuICAgICAgICB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5EZWxldGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gdGhpcy5jb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgJiYgdGhpcy52ZXJzaW9uc1xyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID4gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IHRoaXMuY29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnNcclxuICAgICAgICAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA+IDFcclxuICAgICAgICAmJiB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5BY3RpdmF0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uKSAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAoKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlZhbGlkYXRpb24pICYmXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSAmJlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gKCF0aGlzLmNhbkNoYW5nZVN0YXR1cyB8fFxyXG4gICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgICAodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkNvbmZpcm1lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICghdGhpcy5jYW5DaGFuZ2VTdGF0dXMgfHxcclxuICAgICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgJiZcclxuICAgICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSkpICYmXHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbGlkYXRlVmVyc2lvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzICYmICEhdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNyZWF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzID0gdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbkNoYW5nZVN0YXR1cyAmJiB2YWxpZGF0aW9uUmVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYWNrVG9FZGl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlcyA9IHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCk7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXMgJiYgdmFsaWRhdGlvblJlcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuVmFsaWRhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgPT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQgJiZcclxuICAgICAgICB0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNMYXN0VmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG0gPSBNYXRoLm1heCguLi50aGlzLnZlcnNpb25zLm1hcCh4ID0+IHgubnVtKSk7XHJcbiAgICAgIHJldHVybiBtID09PSB0aGlzLnNlbGVjdGVkPy5udW07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3dSZWplY3Rpb25SZWFzb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkPy5yZWplY3Rpb25SZWFzb24gJiZcclxuICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgIHx8IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmVyc2lvblN0YXR1c0NsYXNzKCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgJ2NvbG9yLWdyZWVuJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqINCa0L7QvdGC0LXQutGB0YIg0LTQu9GPINC60LDRgdGC0L7QvNC90YvRhSDQutC90L7Qv9C+0LosINC80L7QttC10YIg0YDQsNGB0YjQuNGA0Y/RgtGM0YHRjyAqL1xyXG4gIHB1YmxpYyBnZXQgY3VzdG9tQnV0dG9uc1RlbXBsYXRlQ29udGV4dCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWN0aXZpdHlJZDogdGhpcy5fYWN0aXZpdHlJZCxcclxuICAgICAgY29tcGV0aXRpb25JZDogdGhpcy5jb21wZXRpdGlvbj8uaWQsXHJcbiAgICAgIGNvbXBldGl0aW9uVmVyc2lvbklkOiB0aGlzLnNlbGVjdGVkPy5pZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuUmV0dXJuVG9FZGl0KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uUmVqZWN0ZWQgJiYgdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuU2VlVGhyZWVEb3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCkgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT0gdGhpcy5jb21wZXRpdGlvblN0YXR1c0VudW0uTmV3ICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9IHRoaXMuY29tcGV0aXRpb25TdGF0dXNFbnVtLkNvbXBsZXRlZCAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPSB0aGlzLmNvbXBldGl0aW9uU3RhdHVzRW51bS5Ob3RQbGFjZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobG9hZENvbXBldGl0aW9uSGVhZGVyKCkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnZlcnNpb25zID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TZWxlY3RlZFZlcnNpb25JZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZlcnNpb24gPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TdGF0dXMpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24gPSByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uTGFiZWwpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgdGhpcy5jb21wZXRpdGlvbkxhYmVsID0gcmVzdWx0O1xyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0QWN0aXZpdHlJZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLl9hY3Rpdml0eUlkID0gcmVzdWx0O1xyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25Db25maWcpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb25Db25maWcgPSByZXN1bHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uTGFiZWwpIHtcclxuICAgICAgICAgIHRoaXMuY2FuY2VsQ29tcGV0aXRpb25CdXR0b25MYWJlbCA9IHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25MYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25UeXBlXHJcbiAgICAgICAgICAmJiB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZSA+IHRoaXMuY2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bS5EaXNhYmxlZCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2FuY2VsQ29tcGV0aXRpb25CdXR0b24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dDb21wbGV0ZUNvbXBldGl0aW9uQnV0dG9uID0gdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5zaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbjtcclxuICAgICAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZy5yZXN0b3JlQnV0dG9uTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5yZXN0b3JlQnV0dG9uTmFtZSA9IHRoaXMuY29tcGV0aXRpb25Db25maWcucmVzdG9yZUJ1dHRvbk5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RNYW51YWxWZXJzaW9uU3RhdHVzQ2hhbmdlZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAvLyDQv9GA0L7QuNC30L7RiNC70L4g0YDRg9GH0L3QvtC1INC40LfQvNC10L3QtdC90LjQtSDRgdGC0LDRgtGD0YHQsCwg0YLQvtC70LrQsNC10Lwg0LTQsNC70YzRiNC1INC/0L4g0YLQsNC50LzQsNGD0YLRg1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgICAgdmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgc3RhdHVzOiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkNvbmZpcm1lZFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWwodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbFt2YWx1ZSBhcyBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb21wZXRpdGlvblZlcnNpb25TdGF0dXNHcm91cHBpbmdMYWJlbCh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWxbdmFsdWUgYXMgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlVmVyc2lvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coe1xyXG4gICAgICB0aXRsZTogYNCk0L7RgNC80LjRgNC+0LLQsNC90LjQtSDQuNC30LzQtdC90LXQvdC40LlgLFxyXG4gICAgICBtZXNzYWdlOlxyXG4gICAgICAgIGAke3RoaXMuZ2V0V2FybmluZ01lc3NhZ2VIdG1sKCfQktC90LjQvNCw0L3QuNC1ISDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INC/0YDQuNCy0LXQtNC10YIg0Log0YHQvtC30LTQsNC90LjRjiDQvdC+0LLQvtC5INCy0LXRgNGB0LjQuCDQvtGC0LHQvtGA0LAnKX1cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAg0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YHRhNC+0YDQvNC40YDQvtCy0LDRgtGMINC40LfQvNC10L3QtdC90LjRjz9cclxuICAgICAgICAgICAgPC9wPmAsXHJcbiAgICAgIGNvbG9yOiBEaWFsb2dDb2xvci55ZWxsb3csXHJcbiAgICAgIHR5cGU6IERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgb2tMYWJlbDogJ9Cf0L7QtNGC0LLQtdGA0LTQuNGC0YwnLFxyXG4gICAgICBjYW5jZWxMYWJlbDogJ9Ce0YLQvNC10L3QuNGC0YwnLFxyXG4gICAgICBva0NhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjcmVhdGVDb21wZXRpdGlvblZlcnNpb24oKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFjdGl2YXRlVmVyc2lvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coe1xyXG4gICAgICAgIHRpdGxlOiBg0J/Rg9Cx0LvQuNC60LDRhtC40Y8gJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx90LBgLFxyXG4gICAgICAgIG1lc3NhZ2U6IGAke3RoaXMuZ2V0V2FybmluZ01lc3NhZ2VIdG1sKCl9XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INC+0L/Rg9Cx0LvQuNC60L7QstCw0YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/XHJcbiAgICAgICAgICAgIDwvcD5gLFxyXG4gICAgICAgIGNvbG9yOiBEaWFsb2dDb2xvci55ZWxsb3csXHJcbiAgICAgICAgdHlwZTogRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICAgIG9rTGFiZWw6ICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJyxcclxuICAgICAgICBjYW5jZWxMYWJlbDogJ9Ce0YLQvNC10L3QuNGC0YwnLFxyXG4gICAgICAgIG9rQ2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGV0aXRpb25WZXJzaW9uQ2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgICAgdmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWQsXHJcbiAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmVcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlVmVyc2lvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0ZWQ7XHJcblxyXG4gICAgICBpZiAodGhpcy52YWxpZGF0ZVZlcnNpb25BY3Rpb24pIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRlVmVyc2lvbkFjdGlvbihzZWxlY3RlZEl0ZW0uaWQsICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2lnblNlcnZpY2Uuc2lnbih7XHJcbiAgICAgICAgICAgIHRpdGxlOiAn0J3QsNC/0YDQsNCy0LvQtdC90LjQtSDQtNC+0LrRg9C80LXQvdGC0LAg0L3QsCDRgdC+0LPQu9Cw0YHQvtCy0LDQvdC40LUnLFxyXG4gICAgICAgICAgICBva0xhYmVsOiAn0J7RgtC/0YDQsNCy0LjRgtGMJyxcclxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgICAgICAgcGRmVXJsOiBgL20tZGF0YS9taW5maW4vcGRmLWNvbXBldGl0aW9uLyR7c2VsZWN0ZWRJdGVtLmlkfWAsXHJcbiAgICAgICAgICAgIHhtbFVybDogYC9tLWRhdGEvbWluZmluL3htbC1jb21wZXRpdGlvbi8ke3NlbGVjdGVkSXRlbS5pZH1gLFxyXG4gICAgICAgICAgICBwcm92aWRlcjogJ2VtcHR5J1xyXG4gICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgICAgdmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgc3RhdHVzOiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlZhbGlkYXRpb25cclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQo9C00LDQu9C40YLRjCDQstC10YDRgdC40Y4gICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfdCwP2AsXHJcbiAgICAgICAgYCR7dGhpcy5nZXRXYXJuaW5nTWVzc2FnZUh0bWwoKX1cclxuICAgICAgPHA+XHJcbiAgICAgICAg0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpfdCwP1xyXG4gICAgICA8L3A+YCxcclxuICAgICAgICBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChkZWxldGVDb21wZXRpdGlvblZlcnNpb24oe3ZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkfSkpO1xyXG4gICAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIERpYWxvZ0NvbG9yLnJlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdG9yZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQktC+0LfQvtCx0L3QvtCy0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGFjdGl2YXRlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYXVzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQn9GA0LjQvtGB0YLQsNC90L7QstC40YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/YCwgbnVsbCwgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChwYXVzZUNvbXBldGl0aW9uKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5oaWRlQ29udHJvbHMoKTtcclxuICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnICYmIHRoaXMuY29tcGV0aXRpb25Db25maWcuY2FuY2VsQ29tcGV0aXRpb25UeXBlID09IHRoaXMuY2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bS5XaXRoVmFsaWRhdGlvbikge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjYW5jZWxDb21wZXRpdGlvbldpdGhWYWxpZGF0aW9uKHt2ZXJzaW9uSWQ6IHNlbGVjdGVkSXRlbS5pZH0pKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0J7RgtC80LXQvdC40YLRjCAke3RoaXMuY29tcGV0aXRpb25MYWJlbH0/YCwgbnVsbCwgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNhbmNlbENvbXBldGl0aW9uKCkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21wbGV0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQl9Cw0LLQtdGA0YjQuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGxldGVDb21wZXRpdGlvbigpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFZlcnNpb24oaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZWxlY3RDb21wZXRpdGlvblZlcnNpb24oe3ZlcnNpb25JZDogaWR9KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmFja1RvRWRpdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INGC0LXQutGD0YnQtdC5INCy0LXRgNGB0LjQuGAsXHJcbiAgICAgIGDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YDRgdC40Y4gJHt0aGlzLmNvbXBldGl0aW9uTGFiZWwudG9Mb3dlckNhc2UoKX1hYCxcclxuICAgICAgRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICAob2spID0+IHtcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgIHZlcnNpb25JZDogdGhpcy5zZWxlY3RlZC5pZCxcclxuICAgICAgICAgICAgc3RhdHVzOiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB1bmRlZmluZWQsIG51bGwsICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJywgdW5kZWZpbmVkLCBEaWFsb2dDb2xvci55ZWxsb3cpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dDb250cm9scygpIHtcclxuICAgIHRoaXMuaXNDb250cm9sID0gIXRoaXMuaXNDb250cm9sO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVDb250cm9scygpIHtcclxuICAgIHRoaXMuaXNDb250cm9sID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1JlamVjdGlvbihtb2RlbDogQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0J/RgNC40YfQuNC90LAg0L7RgtC60LvQvtC90LXQvdC40Y9gLFxyXG4gICAgICBgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5X19hdXRob3JcIj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuYXV0aG9yfTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuY3JlYXRlZERhdGV9PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxwIGNsYXNzPVwibW9kYWwtYm9keV9fdGV4dFwiPiR7bW9kZWwucmVhc29ufTwvcD5cclxuICAgICAgYCwgRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbnVsbCwgdW5kZWZpbmVkLCAnJywgRGlhbG9nQ29sb3IueWVsbG93KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudmVyc2lvbnMgJiYgdGhpcy5zZWxlY3RlZFZlcnNpb24pIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMudmVyc2lvbnMuZmluZChzID0+IHMuaWQgPT09IHRoaXMuc2VsZWN0ZWRWZXJzaW9uKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbXBldGl0aW9uVmVyc2lvbkluZm8uZW1pdCh0aGlzLnNlbGVjdGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0V2FybmluZ01lc3NhZ2VIdG1sKGN1c3RvbVRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWN1c3RvbVRleHQpIHtcclxuICAgICAgY3VzdG9tVGV4dCA9ICfQktC90LjQvNCw0L3QuNC1ISDQlNCw0L3QvdC+0LUg0LTQtdC50YHRgtCy0LjQtSDQvdC10LvRjNC30Y8g0L7RgtC80LXQvdC40YLRjCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJiZy1uZXdzIHB4LTMgcHktMiByYWRpdXMtNCBteS0zIGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci0zXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx1c2UgaHJlZj1cIiNhbGVydFwiPjwvdXNlPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIG0tMCBib2xkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLW9yYW5nZVwiPlxyXG4gICAgICAgICAgICAgICAgICAke2N1c3RvbVRleHR9XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PmA7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lclwiICpuZ0lmPVwic2VsZWN0ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDwhLS0g0J3QsNC30LLQsNC90LjQtSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gd3B4LTE2MCBtci0zXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tINCy0YHRgtCw0LLQuNGC0Ywg0L3QsNC30LLQsNC90LjQtSDRgdGD0YnQvdC+0YHRgtC4LCDQu9C40LHQviBcItCh0YPQsdGB0LjQtNC40Y9cIiDQu9C40LHQviBcItCe0YLQsdC+0YBcIiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIiBteUNvbXBldGl0aW9uTGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDQvdCw0LfQstCw0L3QuNC1INGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDQvtCz0YDQsNC90LjRh9C40YLRjCDQtNC70LjQvdGDINC90LDQt9Cy0LDQvdC40Y8g0LIgNDQg0YHQuNC80LLQvtC70L7QsiAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0g0LLRgdGC0LDQstC40YLRjCDQsiDRgtGD0LvRgtC40L8g0L/QvtC70L3QvtC1INC90LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RleHQgdGV4dC1ub3JtYWxcIiBteVRvb2x0aXAgW3Rvb2x0aXBdPVwic2VsZWN0ZWQubmFtZVwiIFt0b29sdGlwTWF4V2lkdGhdPVwiMzIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWQuc2hvcnROYW1lID8gc2VsZWN0ZWQuc2hvcnROYW1lIDogJ9Cd0LUg0YPQutCw0LfQsNC9JyB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSDRgdGC0LDRgtGD0YEg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xMTBcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICDQodGC0LDRgtGD0YFcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwhLS0g0YHRgtCw0YLRg9GBINGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDQtNC70Y8g0LfQsNC00LDQvdC40Y8g0YbQstC10YLQsCDQtNC+0LHQsNCy0LvRj9GC0Ywg0LrQu9Cw0YHRgdGLOiDQvtGA0LDQvdC20LXQstGL0LkgLSBcImNvbG9yLW9yYW5nZVwiLCDQt9C10LvQtdC90YvQuSAtIFwiY29sb3ItZ3JlZW5cIiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9fdGV4dFwiIFtuZ0NsYXNzXT1cImNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzQ3NzQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0VudW1MYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tINGB0LXQu9C10LrRgiDRgSDQstGL0LHQvtGA0L7QvCDQstC10YDRgdC40LggLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gaW5mby1iYW5uZXItaXRlbV9pbnB1dCB3cHgtMjYwIG1yLTNcIiAqbmdJZj1cInZlcnNpb25zICYmIHZlcnNpb25zLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0Ym94IGlucHV0Ym94LW1kIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInZlcnNpb25zXCIgW25nTW9kZWxdPVwic2VsZWN0ZWQuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RWZXJzaW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBCeT1cInN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdEZvdW5kVGV4dD1cItCd0LUg0L3QsNC50LTQtdC90L5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0Z3JvdXAtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWwoaXRlbS5zdGF0dXMpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXNlYXJjaD1cInNlYXJjaFRlcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAg0JLQtdGA0YHQuNGPIHt7aXRlbS5udW19fSDQvtGCIHt7aXRlbS5jcmVhdGVkRGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAg0JLQtdGA0YHQuNGPIHt7aXRlbS5udW19fSDQvtGCIHt7aXRlbS5jcmVhdGVkRGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tINGB0YLQsNGC0LDRg9GBINCy0LXRgNGB0LjQuCAtLT5cclxuICAgICAgICA8IS0tINC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsINC10YHQu9C4INC90LXRgiDQstC10YDRgdC40LkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW0gd3B4LTExMFwiICpuZ0lmPVwidmVyc2lvbnMgJiYgdmVyc2lvbnMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICDQodGC0LDRgtGD0YEg0LLQtdGA0YHQuNC4XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSDRgdGC0LDRgtGD0YEg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgICAgICAgICA8IS0tINC00LvRjyDQt9Cw0LTQsNC90LjRjyDRhtCy0LXRgtCwINC00L7QsdCw0LLQu9GP0YLRjCDQutC70LDRgdGB0Ys6INC+0YDQsNC90LbQtdCy0YvQuSAtIFwiY29sb3Itb3JhbmdlXCIsINC30LXQu9C10L3Ri9C5IC0gXCJjb2xvci1ncmVlblwiIC0tPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RleHRcIiAqbmdJZj1cInNlbGVjdGVkXCIgW25nQ2xhc3NdPVwidmVyc2lvblN0YXR1c0NsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBnZXRDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWwoc2VsZWN0ZWQuc3RhdHVzKSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDRg9C00LDQu9C10L3QuNC1LCDQstGL0LfQvtCyINC80L7QtNCw0LvQutC4LCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1INC+0LEg0LLQvdC10YHQtdC90LjQuCDQuNC30LzQtdC90LXQvdC40LkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1cIj5cclxuICAgICAgICAgICAgPCEtLSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCDQtdGB0LvQuCDQvdC1INGC0YDQtdCx0YPQtdGC0YHRjyAtLT5cclxuICAgICAgICAgICAgPCEtLSBcItC60L7QvdCy0LXRgNGCXCIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX19pY29uXCIgKm5nSWY9XCJzaG93UmVqZWN0aW9uUmVhc29uXCJcclxuICAgICAgICAgICAgICAgIG15VG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ9Cf0L7RgdC80L7RgtGA0LXRgtGMINC/0YDQuNGH0LjQvdGDINC+0YLQutC70L7QvdC10L3QuNGPJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1JlamVjdGlvbihzZWxlY3RlZC5yZWplY3Rpb25SZWFzb24pXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCI2XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjEyXCIgcng9XCIxXCIgc3Ryb2tlPVwiIzI4MjgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgNi4yNUwxMS4zMzU2IDEzLjY1OTVDMTEuNzE0NSAxMy45OTYyIDEyLjI4NTUgMTMuOTk2MiAxMi42NjQ0IDEzLjY1OTVMMjEgNi4yNVwiIHN0cm9rZT1cIiMyODI4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE4TDcuNSAxNEw5Ljc1IDEyTTIxIDE4TDE2LjUgMTRMMTQuMjUgMTJcIiBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tINGD0LTQsNC70LXQvdC40LUg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FuRGVsZXRlVmVyc2lvblwiIChjbGljayk9XCJyZW1vdmVWZXJzaW9uKClcIiAgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX19pY29uXCIgbXlUb29sdGlwIFt0b29sdGlwXT1cIifQo9C00LDQu9C40YLRjCDQstC10YDRgdC40Y4nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgNkg1SDIxXCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTggNlY0QzggMy40Njk1NyA4LjIxMDcxIDIuOTYwODYgOC41ODU3OSAyLjU4NTc5QzguOTYwODYgMi4yMTA3MSA5LjQ2OTU3IDIgMTAgMkgxNEMxNC41MzA0IDIgMTUuMDM5MSAyLjIxMDcxIDE1LjQxNDIgMi41ODU3OUMxNS43ODkzIDIuOTYwODYgMTYgMy40Njk1NyAxNiA0VjZNMTkgNlYyMEMxOSAyMC41MzA0IDE4Ljc4OTMgMjEuMDM5MSAxOC40MTQyIDIxLjQxNDJDMTguMDM5MSAyMS43ODkzIDE3LjUzMDQgMjIgMTcgMjJIN0M2LjQ2OTU3IDIyIDUuOTYwODYgMjEuNzg5MyA1LjU4NTc5IDIxLjQxNDJDNS4yMTA3MSAyMS4wMzkxIDUgMjAuNTMwNCA1IDIwVjZIMTlaXCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDExVjE3XCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDExVjE3XCIgc3Ryb2tlPVwiI0QxNDExNFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSDQstC+0YHQutC70LjRhtCw0YLQtdC70YzQvdGL0Lkg0LfQvdCw0LogLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNMYXN0VmVyc2lvblwiIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9faWNvblwiIG15VG9vbHRpcCBbdG9vbHRpcF09XCIn0JLQvdC10YHQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtGB0YLRg9C/0L3QviDQvdCwINC/0L7RgdC70LXQtNC90LXQuSDQstC10YDRgdC40LgnXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyLjIzMDIgMThWMTdNMTIuMjMwMiAxNFYxME00LjAwMjk4IDIxLjI1SDIwLjQ1NzVDMjEuOTk3MSAyMS4yNSAyMi45NTkzIDE5LjU4MzMgMjIuMTg5NSAxOC4yNUwxMy45NjIzIDRDMTMuMTkyNSAyLjY2NjY3IDExLjI2OCAyLjY2NjY3IDEwLjQ5ODIgNEwyLjI3MDkzIDE4LjI1QzEuNTAxMTMgMTkuNTgzMyAyLjQ2MzM4IDIxLjI1IDQuMDAyOTggMjEuMjVaXCIgc3Ryb2tlPVwiI0Q1N0IxQ1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiISFjdXN0b21CdXR0b25zVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21CdXR0b25zVGVtcGxhdGUudGVtcGxhdGVSZWY7Y29udGV4dDpjdXN0b21CdXR0b25zVGVtcGxhdGVDb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZCBncmVlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZVZlcnNpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5DcmVhdGVWZXJzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3JlYXRlVmVyc2lvbkRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICDQodGE0L7RgNC80LjRgNC+0LLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZCBncmVlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlVmVyc2lvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbkFjdGl2YXRlVmVyc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGl2YXRlVmVyc2lvbkRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICDQntC/0YPQsdC70LjQutC+0LLQsNGC0YxcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVWZXJzaW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuVmFsaWRhdGVWZXJzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmFsaWRhdGVWZXJzaW9uRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgINCh0L7Qs9C70LDRgdC+0LLQsNC90LjQtVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhblJldHVyblRvRWRpdFwiIGNsYXNzPVwiYnRuIGJ0bi1tZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2tUb0VkaXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJhY2tUb0VkaXREaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAg0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YxcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwhLS0g0YPQv9GA0LDQstC70LXQvdC40LUg0YHRgtCw0YLRg9GB0L7QvC/QvtGC0LHQvtGA0L7QvCAtLT5cclxuICAgICAgICAgICAgPCEtLSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMINC10YHQu9C4INC90LUg0YLRgNC10LHRg9C10YLRgdGPIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fYWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBldGl0aW9uICYmIGNhblNlZVRocmVlRG90c1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX2ljb25cIiAoY2xpY2spPVwic2hvd0NvbnRyb2xzKClcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzQ29udHJvbH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC41IDEyQzEwLjUgMTIuODI4NCAxMS4xNzE2IDEzLjUgMTIgMTMuNUMxMi44Mjg0IDEzLjUgMTMuNSAxMi44Mjg0IDEzLjUgMTJDMTMuNSAxMS4xNzE2IDEyLjgyODQgMTAuNSAxMiAxMC41QzExLjE3MTYgMTAuNSAxMC41IDExLjE3MTYgMTAuNSAxMlpcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC41IDE5QzEwLjUgMTkuODI4NCAxMS4xNzE2IDIwLjUgMTIgMjAuNUMxMi44Mjg0IDIwLjUgMTMuNSAxOS44Mjg0IDEzLjUgMTlDMTMuNSAxOC4xNzE2IDEyLjgyODQgMTcuNSAxMiAxNy41QzExLjE3MTYgMTcuNSAxMC41IDE4LjE3MTYgMTAuNSAxOVpcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC41IDVDMTAuNSA1LjgyODQzIDExLjE3MTYgNi41IDEyIDYuNUMxMi44Mjg0IDYuNSAxMy41IDUuODI4NDMgMTMuNSA1QzEzLjUgNC4xNzE1NyAxMi44Mjg0IDMuNSAxMiAzLjVDMTEuMTcxNiAzLjUgMTAuNSA0LjE3MTU3IDEwLjUgNVpcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29udHJvbFwiIGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fbWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sX19tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhdXNlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNVwiIHk9XCIzXCIgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiMThcIiByeD1cIjFcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxNFwiIHk9XCIzXCIgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiMThcIiByeD1cIjFcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0J/RgNC40L7RgdGC0LDQvdC+0LLQuNGC0YxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1jb250cm9sX19tZW51LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc3RvcmUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjAuNTUxOCAxMC44Mjc2QzIxLjIwNDQgMTEuMjE1MSAyMS4yMDQ0IDEyLjE1OTkgMjAuNTUxOCAxMi41NDc0TDUuNTEwNTQgMjEuNDc4MUM0Ljg0Mzk1IDIxLjg3MzkgNCAyMS4zOTM1IDQgMjAuNjE4M0w0IDIuNzU2NzRDNCAxLjk4MTUgNC44NDM5NSAxLjUwMTA5IDUuNTEwNTQgMS44OTY4OEwyMC41NTE4IDEwLjgyNzZaXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVzdG9yZUJ1dHRvbk5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX21lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBsZXRlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgcng9XCIyXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCX0LDQstC10YDRiNC40YLRjFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX21lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLlN0YXlpbmcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2hvd0NhbmNlbENvbXBldGl0aW9uQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xOS43Njc3IDQuMjMyMTNDMjEuNTM1NCA1Ljk5OTkgMjAuNzQ0IDYuNzkxMzUgMTkuNzY3NyA3Ljc2NzY2TDcuNzY3NzEgMTkuNzY3N0M2Ljc5MTQgMjAuNzQ0IDUuOTk5ODcgMjEuNTM1NSA0LjIzMjE3IDE5Ljc2NzdDMi40NjQ1NCAxNy45OTk5IDMuMjU1ODYgMTcuMjA4NCA0LjIzMjE3IDE2LjIzMjFMMTYuMjMyMiA0LjIzMjEzQzE3LjIwODUgMy4yNTU4MiAxOCAyLjQ2NDUzIDE5Ljc2NzcgNC4yMzIxM1pcIiBmaWxsPVwiIzI1M0U0OVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk00LjIzMjIyIDQuMjMxOTZDNS45NjQ0NSAyLjQ5OTkxIDYuNzkxNDQgMy4yNTU2NSA3Ljc2Nzc1IDQuMjMxOTZMMTkuNzY3OCAxNi4yMzJDMjAuNzQ0MSAxNy4yMDgzIDIxLjUgMTguMDM1MyAxOS43Njc4IDE5Ljc2NzVDMTguMDM1NSAyMS40OTk3IDE3LjIwODUgMjAuNzQzOCAxNi4yMzIyIDE5Ljc2NzVMNC4yMzIyMiA3Ljc2NzVDMy4yNTU5MSA2Ljc5MTE5IDIuNDY0MjkgNiA0LjIzMjIyIDQuMjMxOTZaXCIgZmlsbD1cIiMyNTNFNDlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2FuY2VsQ29tcGV0aXRpb25CdXR0b25MYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29udHJvbFwiIGNsYXNzPVwiaW5mby1iYW5uZXItY29udHJvbF9fYmdcIiAoY2xpY2spPVwiaGlkZUNvbnRyb2xzKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|