qms-angular 1.1.56 → 1.1.58

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.
Files changed (37) hide show
  1. package/bundles/qms-angular.umd.js +52 -22
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/common/enum/data-type.enum.js +2 -1
  4. package/esm2015/lib/common/qms-icon.const.js +5 -1
  5. package/esm2015/lib/components/app-icon/icon-registry.service.js +5 -2
  6. package/esm2015/lib/components/qms-bpmn/models/flow-chart-shape/activity-related-items.js +1 -1
  7. package/esm2015/lib/components/qms-bpmn/qms-bpmn.component.js +3 -3
  8. package/esm2015/lib/components/qms-bpmn/qms-bpmn.module.js +4 -2
  9. package/esm2015/lib/components/related/list-other-related/list-related.component.js +5 -2
  10. package/esm2015/lib/components/related/model/related-data.model.js +1 -1
  11. package/esm2015/lib/components/related/popup/related-popup.component.js +17 -7
  12. package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +5 -2
  13. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +9 -4
  14. package/esm2015/lib/model/en.js +4 -3
  15. package/esm2015/lib/model/no.js +4 -3
  16. package/esm2015/lib/model/sv.js +2 -2
  17. package/esm2015/lib/qms-ckeditor-components/common/enums/related-to-item-type.js +2 -1
  18. package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +2 -1
  19. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +1 -4
  20. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +4 -1
  21. package/fesm2015/qms-angular.js +57 -24
  22. package/fesm2015/qms-angular.js.map +1 -1
  23. package/lib/common/enum/data-type.enum.d.ts +1 -0
  24. package/lib/common/qms-icon.const.d.ts +1 -0
  25. package/lib/components/app-icon/icon-registry.service.d.ts +1 -0
  26. package/lib/components/related/list-other-related/list-related.component.d.ts +1 -1
  27. package/lib/components/related/model/related-data.model.d.ts +1 -0
  28. package/lib/components/select-department-tree/select-department-tree.component.d.ts +1 -0
  29. package/lib/model/en.d.ts +1 -0
  30. package/lib/model/no.d.ts +1 -0
  31. package/lib/qms-ckeditor-components/common/enums/related-to-item-type.d.ts +2 -1
  32. package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +2 -1
  33. package/package.json +1 -1
  34. package/qms-angular.metadata.json +1 -1
  35. package/src/assets/svg-icons/compliance.svg +3 -0
  36. package/src/lib/components/qms-bpmn/qms-bpmn.component.scss +10 -0
  37. package/src/lib/components/select-department-tree/select-department-tree.component.scss +691 -682
@@ -696,6 +696,10 @@ export class SelectDepartmentTreeComponent {
696
696
  this.resultSelected = newLocation;
697
697
  this.onValueChangeEvent.emit(this.resultSelected);
698
698
  }
699
+ setDestinationLocation(node, type) {
700
+ const treeNode = this.treeControl.dataNodes.find(item => item.id === node.id && item.parentId === node.parentId);
701
+ this.moveToLocation(treeNode, type);
702
+ }
699
703
  onCheckNode(node, fireEventCheckNode = true) {
700
704
  if (this.config.moveLocationMode)
701
705
  return;
@@ -965,8 +969,9 @@ export class SelectDepartmentTreeComponent {
965
969
  }
966
970
  }
967
971
  onCheckItemSearchResult(item) {
968
- if (item.disabled)
972
+ if (item.disabled || this.config.moveLocationMode) {
969
973
  return;
974
+ }
970
975
  this.checkListSelectionSearch.toggle(item);
971
976
  if (this.config.isSelectOne) {
972
977
  this.checkListSelectionSearch.deselect(...this.checkListSelectionSearch.selected.filter(x => x.id != item.id));
@@ -1276,12 +1281,12 @@ export class SelectDepartmentTreeComponent {
1276
1281
  SelectDepartmentTreeComponent.decorators = [
1277
1282
  { type: Component, args: [{
1278
1283
  selector: 'qms-select-department-tree',
1279
- template: "<div [ngClass]=\"['qms-select-department-tree-container', (config.customClass || '')]\">\n <div class=\"input-select-department\">\n <form (ngSubmit)=\"!getLoading$.value && onSearch()\" *ngIf=\"config.enableTreeSearch\" class=\"input-field\">\n <mat-form-field class=\"w100\" qms-form qms-search-field>\n <input [formControl]=\"formSearchControl\" type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput />\n <button *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\" matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <mat-progress-spinner [@inOutAnimation] matSuffix mode=\"indeterminate\" diameter=\"20\"\n *ngIf=\"getLoading$.value\"></mat-progress-spinner>\n <div *ngIf=\"!!formSearchControl.value && !getLoading$.value\" qms-input-clear matSuffix>\n <button qms-btn-icon color=\"light\" [@inOutAnimation] aria-label=\"Clear\" (click)=\"formSearchControl.reset()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n <div [@inOutAnimation] *ngIf=\"(getIndexView$ | async) === 1 && (textSearchSubject$ | async)\"\n class=\"sub-text ms-1 fw500\">\n {{LANG.RESULT_SEARCH_FOR}}<i><b>\"{{textSearchSubject$ | async}}\"</b></i>\n </div>\n <div [class.justify-content-between]=\"config.enableIncludeChild && !config.isSelectOne\"\n class=\"select__toggle-include toggle-include-child my-1 d-flex justify-content-end align-items-center\">\n <mat-slide-toggle *ngIf=\"config.enableIncludeChild && !config.isSelectOne\"\n [disabled]=\"(getIndexView$ | async) === 1 && config.disableToggleIncludeChildWhenChangeView\"\n [(ngModel)]=\"isIncludeChildren\" (ngModelChange)=\"toggleIncludeChildEvent.emit($event)\" color=\"default\"\n qms-group-options>\n <span class=\"text-label\">{{config.selectIncludeLabel || LANG.SELECT_INCLUDE_CHILD}}</span>\n </mat-slide-toggle>\n <button class=\"btn-arrow\" [@inOutAnimation] *ngIf=\"(getIndexView$ | async) === 1 && config.enableTreeSearch\"\n (click)=\"setIndexView(0)\" qms-btn-icon color=\"light\" [qms-tool-tip]=\"LANG.BACK_TO_TREE\" mode=\"dark\"\n position=\"top\">\n <mat-icon>arrow_back</mat-icon>\n </button>\n <button class=\"btn-arrow\" [@inOutAnimation]\n *ngIf=\"(getIndexView$ | async) === 0 && config.enableTreeSearch && (textSearchSubject$ | async)\"\n (click)=\"setIndexView(1)\" qms-btn-icon color=\"light\" [qms-tool-tip]=\"LANG.GOTO_SEACH_RESULT\" mode=\"dark\"\n position=\"top\">\n <mat-icon>arrow_forward</mat-icon>\n </button>\n </div>\n </div>\n <div [@inOutAnimation]\n *ngIf=\"(getIndexView$ | async) === 0 && config.modeView === MODE_VIEW_ENUM.ExternalView && !!config.headerName\"\n class=\"header-view-tree\">\n <div class=\"header-view header-title\">\n {{config.headerName.treeName}}\n </div>\n <div class=\"header-view header-title\">\n {{config.headerName.externalName}}\n </div>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <div [@animateSlideView]=\"(getIndexView$ | async)\" [ngStyle]=\"{\n minHeight: height\n }\" class=\"tree-department-wrapper\">\n <div *ngIf=\"(getIndexView$ | async) === 0\" class=\"tree-view w100 h100\">\n <div class=\"tree-view-main h100\">\n <div *ngIf=\"!config.isSelectOne && !!treeControl.dataNodes && config.activeSelectAllNode\"\n class=\"checkbox-all-tree\" [class.sticky-position]=\"config.modeView === MODE_VIEW_ENUM.ExternalView\">\n <!-- Checkbox all root node -->\n <mat-checkbox [@inOutAnimation] (click)=\"onCheckAllRootTreeNode()\"\n [indeterminate]=\"isIndeterminateCheckboxAllTree\" [checked]=\"isAllDepartmentSelected\" qms-group-options\n color=\"default\" label=\"none\" class=\"checkbox-all\">\n <span class=\"text-label \">{{LANG.CHOOSE_ALL}}</span>\n <span>(<b>{{treeControl.dataNodes.length}}</b>)</span>\n </mat-checkbox>\n <mat-divider class=\"mx-auto\"></mat-divider>\n </div>\n <cdk-virtual-scroll-viewport *ngIf=\"dataSource.data\" [ngClass]=\"{\n 'has-checkbox-all': !config.isSelectOne && config.modeView === MODE_VIEW_ENUM.Basic,\n 'select-department-tree': true\n }\" [itemSize]=\"ITEM_SIZE\" [ngStyle]=\"{height: height}\">\n <ng-container *cdkVirtualFor=\"let node of dataSource; trackBy: trackBy\">\n <div class=\"qms-tree-node mt-1\" [style.padding-left]=\"node.level * (config.isMobile ? 12 :24) + 'px'\"\n [attr.data-id]=\"node.id\" [id]=\"'mat-node-'+node.id\" [@triggerColor]=\"activeNode == node.id\" [ngClass]=\"{\n 'w-100': config.isSelectOne,\n 'selected-theme': this.checkListSelection.isSelected(node) && config.isSelectOne,\n 'expand-node': treeControl.isExpandable(node) && treeControl.isExpanded(node),\n 'active-external-view': config.modeView === MODE_VIEW_ENUM.ExternalView,\n 'node-loading': node.isLoading,\n 'move-location-mode': config.moveLocationMode\n }\">\n <div class=\"node-expand-area\">\n <button class=\"btn-toggle\" qms-btn-icon color=\"light\"\n [disabled]=\"(config.moveLocationMode && checkListSelection.isSelected(node))\"\n (click)=\"onExpandNode(node)\" *ngIf=\"treeControl.isExpandable(node) && !node.isLoading\">\n <mat-icon>\n {{ treeControl.isExpanded(node) ? node?.expandIcon?.collapse : node?.expandIcon?.expand }}\n </mat-icon>\n </button>\n <ng-container *ngIf=\"node.isLoading; then loadingSpinner\"></ng-container>\n </div>\n <ng-container [ngTemplateOutlet]=\"config.isSelectOne ? nodeWithoutCheckboxTemplate : showCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\"></ng-container>\n <div *ngIf=\"config.modeView === MODE_VIEW_ENUM.ExternalView\" class=\"external-view-node\">\n <span class=\"node-external\" qms-elipsify position=\"top\" mode=\"dark\">\n {{node.externalName || ''}}\n </span>\n </div>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n <ng-container [@inOutAnimation] *ngIf=\"config.spinnerWhenGetMore && getLoadingMore$| async ;then maskOverlay\">\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"(getIndexView$ | async) === 1\" [ngStyle]=\"{\n height: height\n }\" class=\"qms-view-search-result\">\n <div *ngIf=\"config.modeView === MODE_VIEW_ENUM.ExternalView\"\n class=\"qms-view-search-result__header d-flex align-items-center justify-content-between\">\n <div class=\"header-title\">\n <span qms-elipsify mode=\"dark\" position=\"top\">\n {{config.headerName.resultSearchName}}\n </span>\n </div>\n <div class=\"header-title\">\n <span qms-elipsify mode=\"dark\" position=\"top\">\n {{config.headerName.externalName}}\n </span>\n </div>\n </div>\n <ng-container *ngIf=\"getLoading$.value; then loading\"></ng-container>\n <div class=\"qms-view-search-result__wrapper\"\n [class.active-external]=\"config.modeView === MODE_VIEW_ENUM.ExternalView\"\n *ngIf=\"!!resultSearch.length && !getLoading$.value\">\n <div class=\"\">\n <mat-checkbox [@inOutAnimation]\n [disabled]=\"!resultSearch.length || config.isSelectOne || isDisableChecboxAllSearch()\" #checkAllSearch\n [indeterminate]=\"indeterminateSearchResult\" [checked]=\"isSelectAllResultSearch\" qms-group-options\n color=\"default\" label=\"none\" class=\"checkbox-all\"\n (click)=\"!config.isSelectOne && onSelectAllSearchResult(checkAllSearch.checked)\">\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}</span>\n <span>(<b>{{resultSearch.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <div [@inOutAnimation] [@listAnimation]\n [class.active-paging]=\"searchDepartment$.value.length > 10 && config.enablePagingSearch\" class=\"result\">\n <div [qms-tool-tip]=\"!canHandleItemSearchResult(item) ? LANG.ITEM_NOT_MATCH_TO_TREE : ''\" mode=\"dark\"\n position=\"top\" *ngFor=\"let item of resultSearch\"\n (click)=\"$event.stopImmediatePropagation(); !item.disabled && onCheckItemSearchResult(item)\"\n [class.active]=\"checkListSelectionSearch.isSelected(item)\" class=\"result-item user-select-none\" matRipple>\n <mat-checkbox [@inOutAnimation] *ngIf=\"!item.isLoading\" [disabled]=\"item.disabled\"\n (click)=\"$event.stopImmediatePropagation(); !item.disabled && onCheckItemSearchResult(item)\"\n [checked]=\"checkListSelectionSearch.isSelected(item)\" qms-group-options color=\"default\" label=\"none\">\n </mat-checkbox>\n <div *ngIf=\"item.isLoading\" [@inOutAnimation] class=\"position-relative\">\n <ng-container *ngIf=\"item.isLoading; then loadingSpinner\"></ng-container>\n </div>\n <div class=\"result-item__content\">\n <div class=\"item-result-content-wraper\">\n <div class=\"text-gray fw-bold fs-base mb0\">{{item.name}}</div>\n <qms-breadcrumb *ngIf=\"item.location?.length > 1\" [type]=\"config.isMobile ? 'mobile': ''\"\n [numDisplayItem]=\"6\" (onItemClick)=\"$event.stopImmediatePropagation()\" class=\"breadcrumb-container\"\n [nodes]=\"item.location\">\n </qms-breadcrumb>\n <div *ngIf=\"item.location?.length === 1\" class=\"d-flex align-items-center\">\n <span qms-elipsify mode=\"dark\" position=\"top\"\n class=\"item-breadcrumb-disable d-block\">{{item.location[0].name}}</span>\n </div>\n </div>\n <div *ngIf=\"config.modeView === MODE_VIEW_ENUM.ExternalView\" class=\"external-name\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-gray fs-base mb0\">{{item.externalName}}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!resultSearch.length && !getLoading$.value\" class=\"result no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider *ngIf=\"searchDepartment$.value.length > 10 && config.enablePagingSearch\"\n class=\"mx-auto\"></mat-divider>\n <qms-paginator #paginatorSearch *ngIf=\"searchDepartment$.value.length > 10 && config.enablePagingSearch \"\n [length]=\"searchDepartment$.value.length\" [numHidden]=\"0\" [pageSize]=\"CURRENT_PAGESIZE\"\n [pageSizeOptions]=\"PAGE_SIZE_OPTION\" (page)='onPagingSearchResult($event)'\n [size]='config.isMobile ? PAGINATION_SIZE.small : PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </div>\n\n <!-- Template for Checkbox -->\n <ng-template #showCheckboxTemplate let-node=\"node\">\n <mat-checkbox [id]=\"'node-'+node.id\" qms-group-options color=\"default\" label=\"none\" class=\"flex-direction-row\"\n [disabled]=\"node.isLoading || node.disabled\" [checked]=\"checkListSelection.isSelected(node)\"\n (click)=\"!node.isLoading && onCheckNode(node)\" [attr.disabled]=\"node.disabled || node.isLoading\">\n <img [title]=\"node.itemIconSvg\" *ngIf=\"node.itemIconSvg\" class=\"material-icons type-icon\"\n [src]=\"node.itemIconSvg\" />\n <span *ngIf=\"node.itemIcon\" [class]=\"node.itemIcon\" [qmsTransformIcon]=\"node.itemIcon\"\n class=\"material-icons-outlined type-icon\"></span>\n <span *ngIf=\"node.itemMatIcon\" class=\"material-icons-outlined type-icon\">{{\n node.itemMatIcon }}\n </span>\n <div class=\"node-text\" [ngStyle]=\"{\n maxWidth: (maxWidthNode - 20*node.level)+ 'px'\n }\">\n <span qms-elipsify [mode]=\"'dark'\" position=\"top\" class=\"text-name cursor-pointer ml5 123\"\n [ngClass]=\"{ disabled: node.disabled}\">{{ node.name}}\n </span>\n </div>\n </mat-checkbox>\n </ng-template>\n\n <!-- Template node without checkbox -->\n <ng-template #nodeWithoutCheckboxTemplate let-node=\"node\">\n <div [id]=\"'node-'+node.id\" (click)=\"onCheckNode(node)\" class=\"node-without-checkbox\">\n <div class=\"node-info\">\n <span *ngIf=\"node.itemIcon\" [class]=\"node.itemIcon\" [qmsTransformIcon]=\"node.itemIcon\"\n class=\"material-icons-outlined type-icon\"></span>\n <span *ngIf=\"node.itemMatIcon\" class=\"material-icons-outlined type-icon\">{{\n node.itemMatIcon }}\n </span>\n <span class=\"text-name cursor-pointer pl-10 123\" [ngClass]=\"{ disabled: node.disabled }\">{{ node.name }}</span>\n </div>\n <div class=\"node-state\">\n <mat-icon [class.disabled]=\"(config.moveLocationMode && checkListSelection.isSelected(node))\"\n *ngIf=\"checkListSelection.isSelected(node)\">check</mat-icon>\n <button class=\"move-location-btn\" *ngIf=\"config.moveLocationMode && !checkListSelection.isSelected(node)\"\n qms-btn-icon [matMenuTriggerFor]=\"menu\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n <mat-menu class=\"move-location-menu\" #menu=\"matMenu\">\n <button (click)=\"moveToLocation(node, 'sibling')\" mat-menu-item>\n <span>{{LANG.PLACE_NEXT_TO}}</span>\n </button>\n <button (click)=\"moveToLocation(node, 'child')\" mat-menu-item>\n <span>{{LANG.PLACE_UNDER}}</span>\n </button>\n </mat-menu>\n </div>\n </div>\n </ng-template>\n</div>\n\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n\n<!-- Template loading -->\n<ng-template #loading>\n <div [ngStyle]=\"{\n 'height': searchDepartment$.value.length ? (config.modeView === MODE_VIEW_ENUM.ExternalView ? 'calc(100% - 90px)' : 'calc(100% - 50px)' ) : height\n }\" class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- Template mask overlay -->\n<ng-template #maskOverlay>\n <div class=\"mask-overlay\">\n <mat-spinner [diameter]=\"50\" [strokeWidth]=\"5\" color=\"primary\"></mat-spinner>\n </div>\n</ng-template>\n\n<!-- Loading spinner -->\n<ng-template #loadingSpinner>\n <div class=\"qms-spinner center\">\n <mat-spinner [diameter]=\"20\" [strokeWidth]=\"2\"></mat-spinner>\n </div>\n</ng-template>",
1284
+ template: "<div [ngClass]=\"['qms-select-department-tree-container', (config.customClass || '')]\">\r\n <div class=\"input-select-department\">\r\n <form (ngSubmit)=\"!getLoading$.value && onSearch()\" *ngIf=\"config.enableTreeSearch\" class=\"input-field\">\r\n <mat-form-field class=\"w100\" qms-form qms-search-field>\r\n <input [formControl]=\"formSearchControl\" type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput />\r\n <button *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\" matSuffix>\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n <mat-progress-spinner [@inOutAnimation] matSuffix mode=\"indeterminate\" diameter=\"20\"\r\n *ngIf=\"getLoading$.value\"></mat-progress-spinner>\r\n <div *ngIf=\"!!formSearchControl.value && !getLoading$.value\" qms-input-clear matSuffix>\r\n <button qms-btn-icon color=\"light\" [@inOutAnimation] aria-label=\"Clear\" (click)=\"formSearchControl.reset()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </mat-form-field>\r\n </form>\r\n <div [@inOutAnimation] *ngIf=\"(getIndexView$ | async) === 1 && (textSearchSubject$ | async)\"\r\n class=\"sub-text ms-1 fw500\">\r\n {{LANG.RESULT_SEARCH_FOR}}<i><b>\"{{textSearchSubject$ | async}}\"</b></i>\r\n </div>\r\n <div [class.justify-content-between]=\"config.enableIncludeChild && !config.isSelectOne\"\r\n class=\"select__toggle-include toggle-include-child my-1 d-flex justify-content-end align-items-center\">\r\n <mat-slide-toggle *ngIf=\"config.enableIncludeChild && !config.isSelectOne\"\r\n [disabled]=\"(getIndexView$ | async) === 1 && config.disableToggleIncludeChildWhenChangeView\"\r\n [(ngModel)]=\"isIncludeChildren\" (ngModelChange)=\"toggleIncludeChildEvent.emit($event)\" color=\"default\"\r\n qms-group-options>\r\n <span class=\"text-label\">{{config.selectIncludeLabel || LANG.SELECT_INCLUDE_CHILD}}</span>\r\n </mat-slide-toggle>\r\n <button class=\"btn-arrow\" [@inOutAnimation] *ngIf=\"(getIndexView$ | async) === 1 && config.enableTreeSearch\"\r\n (click)=\"setIndexView(0)\" qms-btn-icon color=\"light\" [qms-tool-tip]=\"LANG.BACK_TO_TREE\" mode=\"dark\"\r\n position=\"top\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button class=\"btn-arrow\" [@inOutAnimation]\r\n *ngIf=\"(getIndexView$ | async) === 0 && config.enableTreeSearch && (textSearchSubject$ | async)\"\r\n (click)=\"setIndexView(1)\" qms-btn-icon color=\"light\" [qms-tool-tip]=\"LANG.GOTO_SEACH_RESULT\" mode=\"dark\"\r\n position=\"top\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <div [@inOutAnimation]\r\n *ngIf=\"(getIndexView$ | async) === 0 && config.modeView === MODE_VIEW_ENUM.ExternalView && !!config.headerName\"\r\n class=\"header-view-tree\">\r\n <div class=\"header-view header-title\">\r\n {{config.headerName.treeName}}\r\n </div>\r\n <div class=\"header-view header-title\">\r\n {{config.headerName.externalName}}\r\n </div>\r\n </div>\r\n <mat-divider class=\"mx-auto\"></mat-divider>\r\n <div [@animateSlideView]=\"(getIndexView$ | async)\" [ngStyle]=\"{\r\n minHeight: height\r\n }\" class=\"tree-department-wrapper\">\r\n <div *ngIf=\"(getIndexView$ | async) === 0\" class=\"tree-view w100 h100\">\r\n <div class=\"tree-view-main h100\">\r\n <div *ngIf=\"!config.isSelectOne && !!treeControl.dataNodes && config.activeSelectAllNode\"\r\n class=\"checkbox-all-tree\" [class.sticky-position]=\"config.modeView === MODE_VIEW_ENUM.ExternalView\">\r\n <!-- Checkbox all root node -->\r\n <mat-checkbox [@inOutAnimation] (click)=\"onCheckAllRootTreeNode()\"\r\n [indeterminate]=\"isIndeterminateCheckboxAllTree\" [checked]=\"isAllDepartmentSelected\" qms-group-options\r\n color=\"default\" label=\"none\" class=\"checkbox-all\">\r\n <span class=\"text-label \">{{LANG.CHOOSE_ALL}}</span>\r\n <span>(<b>{{treeControl.dataNodes.length}}</b>)</span>\r\n </mat-checkbox>\r\n <mat-divider class=\"mx-auto\"></mat-divider>\r\n </div>\r\n <cdk-virtual-scroll-viewport *ngIf=\"dataSource.data\" [ngClass]=\"{\r\n 'has-checkbox-all': !config.isSelectOne && config.modeView === MODE_VIEW_ENUM.Basic,\r\n 'select-department-tree': true\r\n }\" [itemSize]=\"ITEM_SIZE\" [ngStyle]=\"{height: height}\">\r\n <ng-container *cdkVirtualFor=\"let node of dataSource; trackBy: trackBy\">\r\n <div class=\"qms-tree-node mt-1\" [style.padding-left]=\"node.level * (config.isMobile ? 12 :24) + 'px'\"\r\n [attr.data-id]=\"node.id\" [id]=\"'mat-node-'+node.id\" [@triggerColor]=\"activeNode == node.id\" [ngClass]=\"{\r\n 'w-100': config.isSelectOne,\r\n 'selected-theme': this.checkListSelection.isSelected(node) && config.isSelectOne,\r\n 'expand-node': treeControl.isExpandable(node) && treeControl.isExpanded(node),\r\n 'active-external-view': config.modeView === MODE_VIEW_ENUM.ExternalView,\r\n 'node-loading': node.isLoading,\r\n 'move-location-mode': config.moveLocationMode\r\n }\">\r\n <div class=\"node-expand-area\">\r\n <button class=\"btn-toggle\" qms-btn-icon color=\"light\"\r\n [disabled]=\"(config.moveLocationMode && checkListSelection.isSelected(node))\"\r\n (click)=\"onExpandNode(node)\" *ngIf=\"treeControl.isExpandable(node) && !node.isLoading\">\r\n <mat-icon>\r\n {{ treeControl.isExpanded(node) ? node?.expandIcon?.collapse : node?.expandIcon?.expand }}\r\n </mat-icon>\r\n </button>\r\n <ng-container *ngIf=\"node.isLoading; then loadingSpinner\"></ng-container>\r\n </div>\r\n <ng-container [ngTemplateOutlet]=\"config.isSelectOne ? nodeWithoutCheckboxTemplate : showCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"{ node: node }\"></ng-container>\r\n <div *ngIf=\"config.modeView === MODE_VIEW_ENUM.ExternalView\" class=\"external-view-node\">\r\n <span class=\"node-external\" qms-elipsify position=\"top\" mode=\"dark\">\r\n {{node.externalName || ''}}\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </cdk-virtual-scroll-viewport>\r\n <ng-container [@inOutAnimation] *ngIf=\"config.spinnerWhenGetMore && getLoadingMore$| async ;then maskOverlay\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"(getIndexView$ | async) === 1\" [ngStyle]=\"{\r\n height: height\r\n }\" class=\"qms-view-search-result\">\r\n <div *ngIf=\"config.modeView === MODE_VIEW_ENUM.ExternalView\"\r\n class=\"qms-view-search-result__header d-flex align-items-center justify-content-between\">\r\n <div class=\"header-title\">\r\n <span qms-elipsify mode=\"dark\" position=\"top\">\r\n {{config.headerName.resultSearchName}}\r\n </span>\r\n </div>\r\n <div class=\"header-title\">\r\n <span qms-elipsify mode=\"dark\" position=\"top\">\r\n {{config.headerName.externalName}}\r\n </span>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"getLoading$.value; then loading\"></ng-container>\r\n <div class=\"qms-view-search-result__wrapper\" [ngClass]=\"{\r\n 'active-external': config.modeView === MODE_VIEW_ENUM.ExternalView}\"\r\n *ngIf=\"!!resultSearch.length && !getLoading$.value\">\r\n <div *ngIf=\"!config.moveLocationMode\">\r\n <mat-checkbox [@inOutAnimation]\r\n [disabled]=\"!resultSearch.length || config.isSelectOne || isDisableChecboxAllSearch()\" #checkAllSearch\r\n [indeterminate]=\"indeterminateSearchResult\" [checked]=\"isSelectAllResultSearch\" qms-group-options\r\n color=\"default\" label=\"none\" class=\"checkbox-all\"\r\n (click)=\"!config.isSelectOne && onSelectAllSearchResult(checkAllSearch.checked)\">\r\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}</span>\r\n <span>(<b>{{resultSearch.length}}</b>)</span>\r\n </mat-checkbox>\r\n </div>\r\n <div [@inOutAnimation] [@listAnimation]\r\n [class.active-paging]=\"searchDepartment$.value.length > 10 && config.enablePagingSearch\" class=\"result\">\r\n <div [qms-tool-tip]=\"!canHandleItemSearchResult(item) ? LANG.ITEM_NOT_MATCH_TO_TREE : ''\" mode=\"dark\"\r\n position=\"top\" *ngFor=\"let item of resultSearch\"\r\n (click)=\"$event.stopImmediatePropagation(); !item.disabled && onCheckItemSearchResult(item)\"\r\n [ngClass]=\"{'active': checkListSelectionSearch.isSelected(item), 'no-checkbox': config.moveLocationMode}\"\r\n class=\"result-item user-select-none\" matRipple>\r\n <mat-checkbox [@inOutAnimation] *ngIf=\"!item.isLoading && !config.moveLocationMode\"\r\n [disabled]=\"item.disabled\"\r\n (click)=\"$event.stopImmediatePropagation(); !item.disabled && onCheckItemSearchResult(item)\"\r\n [checked]=\"checkListSelectionSearch.isSelected(item)\" qms-group-options color=\"default\" label=\"none\">\r\n </mat-checkbox>\r\n <div *ngIf=\"item.isLoading\" [@inOutAnimation] class=\"position-relative\">\r\n <ng-container *ngIf=\"item.isLoading; then loadingSpinner\"></ng-container>\r\n </div>\r\n <div class=\"result-item__content\">\r\n <div class=\"item-result-content-wraper\">\r\n <div class=\"text-gray fw-bold fs-base mb0\">{{item.name}}</div>\r\n <qms-breadcrumb *ngIf=\"item.location?.length > 1\" [type]=\"config.isMobile ? 'mobile': ''\"\r\n [numDisplayItem]=\"6\" (onItemClick)=\"$event.stopImmediatePropagation()\" class=\"breadcrumb-container\"\r\n [nodes]=\"item.location\">\r\n </qms-breadcrumb>\r\n <div *ngIf=\"item.location?.length === 1\" class=\"d-flex align-items-center\">\r\n <span qms-elipsify mode=\"dark\" position=\"top\"\r\n class=\"item-breadcrumb-disable d-block\">{{item.location[0].name}}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"config.moveLocationMode\">\r\n <button class=\"move-location-btn\" qms-btn-icon [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>swap_vert</mat-icon>\r\n </button>\r\n <mat-menu class=\"move-location-menu\" #menu=\"matMenu\">\r\n <button (click)=\"setDestinationLocation(item, 'sibling')\" mat-menu-item>\r\n <span>{{LANG.PLACE_NEXT_TO}}</span>\r\n </button>\r\n <button (click)=\"setDestinationLocation(item, 'child')\" mat-menu-item>\r\n <span>{{LANG.PLACE_UNDER}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <div *ngIf=\"config.modeView === MODE_VIEW_ENUM.ExternalView\" class=\"external-name\">\r\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-gray fs-base mb0\">{{item.externalName}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [@inOutAnimation] *ngIf=\"!resultSearch.length && !getLoading$.value\" class=\"result no-result\">\r\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\r\n </div>\r\n <mat-divider *ngIf=\"searchDepartment$.value.length > 10 && config.enablePagingSearch\"\r\n class=\"mx-auto\"></mat-divider>\r\n <qms-paginator #paginatorSearch *ngIf=\"searchDepartment$.value.length > 10 && config.enablePagingSearch \"\r\n [length]=\"searchDepartment$.value.length\" [numHidden]=\"0\" [pageSize]=\"CURRENT_PAGESIZE\"\r\n [pageSizeOptions]=\"PAGE_SIZE_OPTION\" (page)='onPagingSearchResult($event)'\r\n [size]='config.isMobile ? PAGINATION_SIZE.small : PAGINATION_SIZE.medium'>\r\n </qms-paginator>\r\n </div>\r\n </div>\r\n\r\n <!-- Template for Checkbox -->\r\n <ng-template #showCheckboxTemplate let-node=\"node\">\r\n <mat-checkbox [id]=\"'node-'+node.id\" qms-group-options color=\"default\" label=\"none\" class=\"flex-direction-row\"\r\n [disabled]=\"node.isLoading || node.disabled\" [checked]=\"checkListSelection.isSelected(node)\"\r\n (click)=\"!node.isLoading && onCheckNode(node)\" [attr.disabled]=\"node.disabled || node.isLoading\">\r\n <img [title]=\"node.itemIconSvg\" *ngIf=\"node.itemIconSvg\" class=\"material-icons type-icon\"\r\n [src]=\"node.itemIconSvg\" />\r\n <span *ngIf=\"node.itemIcon\" [class]=\"node.itemIcon\" [qmsTransformIcon]=\"node.itemIcon\"\r\n class=\"material-icons-outlined type-icon\"></span>\r\n <span *ngIf=\"node.itemMatIcon\" class=\"material-icons-outlined type-icon\">{{\r\n node.itemMatIcon }}\r\n </span>\r\n <div class=\"node-text\" [ngStyle]=\"{\r\n maxWidth: (maxWidthNode - 20*node.level)+ 'px'\r\n }\">\r\n <span qms-elipsify [mode]=\"'dark'\" position=\"top\" class=\"text-name cursor-pointer ml5 123\"\r\n [ngClass]=\"{ disabled: node.disabled}\">{{ node.name}}\r\n </span>\r\n </div>\r\n </mat-checkbox>\r\n </ng-template>\r\n\r\n <!-- Template node without checkbox -->\r\n <ng-template #nodeWithoutCheckboxTemplate let-node=\"node\">\r\n <div [id]=\"'node-'+node.id\" (click)=\"onCheckNode(node)\" class=\"node-without-checkbox\">\r\n <div class=\"node-info\">\r\n <span *ngIf=\"node.itemIcon\" [class]=\"node.itemIcon\" [qmsTransformIcon]=\"node.itemIcon\"\r\n class=\"material-icons-outlined type-icon\"></span>\r\n <span *ngIf=\"node.itemMatIcon\" class=\"material-icons-outlined type-icon\">{{\r\n node.itemMatIcon }}\r\n </span>\r\n <span class=\"text-name cursor-pointer pl-10 123\" [ngClass]=\"{ disabled: node.disabled }\">{{ node.name }}</span>\r\n </div>\r\n <div class=\"node-state\">\r\n <mat-icon [class.disabled]=\"(config.moveLocationMode && checkListSelection.isSelected(node))\"\r\n *ngIf=\"checkListSelection.isSelected(node)\">check</mat-icon>\r\n <button class=\"move-location-btn\" *ngIf=\"config.moveLocationMode && !checkListSelection.isSelected(node)\"\r\n qms-btn-icon [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>swap_vert</mat-icon>\r\n </button>\r\n <mat-menu class=\"move-location-menu\" #menu=\"matMenu\">\r\n <button (click)=\"moveToLocation(node, 'sibling')\" mat-menu-item>\r\n <span>{{LANG.PLACE_NEXT_TO}}</span>\r\n </button>\r\n <button (click)=\"moveToLocation(node, 'child')\" mat-menu-item>\r\n <span>{{LANG.PLACE_UNDER}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</div>\r\n\r\n<ng-template #noResult>\r\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\r\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\r\n <path\r\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\r\n fill=\"#0163B3\" />\r\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\r\n </svg>\r\n</ng-template>\r\n\r\n<!-- Template loading -->\r\n<ng-template #loading>\r\n <div [ngStyle]=\"{\r\n 'height': searchDepartment$.value.length ? (config.modeView === MODE_VIEW_ENUM.ExternalView ? 'calc(100% - 90px)' : 'calc(100% - 50px)' ) : height\r\n }\" class=\"qms-loading-container\">\r\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\r\n <div class=\"qms-loader__wrapper\">\r\n <div class=\"row-loader\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Template mask overlay -->\r\n<ng-template #maskOverlay>\r\n <div class=\"mask-overlay\">\r\n <mat-spinner [diameter]=\"50\" [strokeWidth]=\"5\" color=\"primary\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Loading spinner -->\r\n<ng-template #loadingSpinner>\r\n <div class=\"qms-spinner center\">\r\n <mat-spinner [diameter]=\"20\" [strokeWidth]=\"2\"></mat-spinner>\r\n </div>\r\n</ng-template>",
1280
1285
  animations: [
1281
1286
  AnimationTreeDepartment
1282
1287
  ],
1283
1288
  changeDetection: ChangeDetectionStrategy.OnPush,
1284
- styles: ["@charset \"UTF-8\";@font-face{font-family:icomoon;src:url(../assets/fonts/icomoon.eot?aghldx);src:url(../assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(../assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(../assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(../assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class*=\" icon-\"],[class^=icon-]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\uE91B\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\uE922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\uE923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\uE924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\uE925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\uE926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\uE927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\uE928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\uE929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\uE92A\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\uE92B\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\uE92C\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\uE92D\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\uE92E\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\uE92F\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\uE930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\uE931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\uE932\"}.icon-add-tooltip:before{content:\"\uE933\"}.icon-admin:before{content:\"\uE934\"}.icon-annual-cycle:before{content:\"\uE935\"}.icon-assignment-repete:before{content:\"\uE936\"}.icon-barrier-add:before{content:\"\uE937\"}.icon-barrier-edit:before{content:\"\uE938\"}.icon-barrier-view:before{content:\"\uE939\"}.icon-button-group:before{content:\"\uE93A\"}.icon-chemical-manager:before{content:\"\uE93B\"}.icon-chronic-health-hazard .path1:before{content:\"\uE93C\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\uE93D\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\uE93E\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\uE93F\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\uE940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\uE941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\uE942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\uE943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\uE944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\uE945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\uE946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\uE947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\uE948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\uE949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\uE94A\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\uE94B\"}.icon-corrosive .path1:before{content:\"\uE94C\";color:#323232}.icon-corrosive .path2:before{content:\"\uE94D\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\uE94E\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\uE94F\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\uE950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\uE951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\uE952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\uE953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\uE954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\uE955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\uE956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\uE957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\uE958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\uE959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\uE95A\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\uE95B\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\uE95C\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\uE95D\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\uE95E\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\uE95F\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\uE960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\uE961\"}.icon-database-sds:before{content:\"\uE962\"}.icon-description-add:before{content:\"\uE963\"}.icon-description-edit:before{content:\"\uE964\"}.icon-description-view:before{content:\"\uE965\";color:#666}.icon-document-read .path1:before{content:\"\uE966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\uE967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\uE968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\uE969\"}.icon-expired-off:before{content:\"\uE96A\"}.icon-expired-on:before{content:\"\uE96B\"}.icon-explosive .path1:before{content:\"\uE96C\";color:#e32730}.icon-explosive .path2:before{content:\"\uE96D\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\uE96E\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\uE96F\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\uE970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\uE971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\uE972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\uE973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\uE974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\uE975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\uE976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\uE977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\uE978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\uE979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\uE97A\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\uE97B\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\uE97C\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\uE97D\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\uE97E\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\uE97F\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\uE980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\uE981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\uE982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\uE983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\uE984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\uE985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\uE986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\uE987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\uE988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\uE989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\uE98A\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\uE98B\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\uE98C\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\uE98D\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\uE98E\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\uE98F\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\uE990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\uE991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\uE992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\uE993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\uE994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\uE995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\uE996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\uE997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\uE998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\uE999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\uE99A\"}.icon-file-pdf:before{content:\"\uE99B\"}.icon-file-pdf-verified .path1:before{content:\"\uE99C\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\uE99D\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\uE99E\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\uE99F\"}.icon-filter-alt:before{content:\"\uE9A0\"}.icon-flammable .path1:before{content:\"\uE9A1\";color:#323232}.icon-flammable .path2:before{content:\"\uE9A2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\uE9A3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\uE9A4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\uE9A5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\uE9A6\";color:#323232}.icon-health-hazard .path2:before{content:\"\uE9A7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\uE9A8\"}.icon-location:before{content:\"\uE9A9\"}.icon-measure-add:before{content:\"\uE9AA\"}.icon-measure-edit:before{content:\"\uE9AB\"}.icon-measure-view:before{content:\"\uE9AC\";color:#666}.icon-messages:before{content:\"\uE9AD\"}.icon-monitoring:before{content:\"\uE9AE\";color:#666}.icon-move:before{content:\"\uE9AF\"}.icon-oxidizing .path1:before{content:\"\uE9B0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\uE9B1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\uE9B2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\uE9B3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\uE9B4\"}.icon-process-area-open:before{content:\"\uE9B5\"}.icon-process-linked .path1:before{content:\"\uE9B6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\uE9B7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\uE9B8\"}.icon-search-in-file:before{content:\"\uE9B9\"}.icon-sort-ascending:before{content:\"\uE9BA\"}.icon-sort-descending:before{content:\"\uE9BB\"}.icon-subscript:before{content:\"\uE9BC\"}.icon-superscript:before{content:\"\uE9BD\"}.icon-syncronice-favorites:before{content:\"\uE9BE\"}.icon-system-settings:before{content:\"\uE9BF\"}.icon-view-three-outlined:before{content:\"\uE9C0\"}.icon-workplace-safety:before{content:\"\uE9C1\"}.icon-checklist:before{content:\"\uE900\"}.icon-department-document .path1:before{content:\"\uE901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\uE902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\uE903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\uE904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\uE905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\uE906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\uE907\"}.icon-dropdown-folder .path1:before{content:\"\uE908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\uE909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\uE90A\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\uE90B\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\uE90C\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\uE90D\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\uE90E\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\uE90F\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\uE910\"}.icon-folder-open:before{content:\"\uE911\"}.icon-keyboard_arrow_down:before{content:\"\uE912\"}.icon-keyboard_arrow_up:before{content:\"\uE913\"}.icon-local-document .path1:before{content:\"\uE914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\uE915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\uE916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\uE917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\uE918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\uE919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\uE91A\"}.icon-regional-document .path1:before{content:\"\uE91C\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\uE91D\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\uE91E\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\uE91F\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\uE920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\uE921\";margin-left:-1em;color:#662e0d}.qms-select-department-tree-container{font-family:Open Sans,sans-serif}.qms-select-department-tree-container .mr10{margin-right:10px}.qms-select-department-tree-container .mt5{margin-bottom:5px}.qms-select-department-tree-container .mb5{margin-top:5px}.qms-select-department-tree-container .w100{width:100%}.qms-select-department-tree-container .h100{height:100%}.qms-select-department-tree-container .fw500{font-weight:500!important}.qms-select-department-tree-container .text-right{text-align:right}.qms-select-department-tree-container .mt20{margin-top:20px}.qms-select-department-tree-container .d-flex{display:flex}.qms-select-department-tree-container .align-items-center{align-items:center}.qms-select-department-tree-container .justify-content-end{justify-content:flex-end}.qms-select-department-tree-container .text-selected{color:rgba(0,0,0,.6);font-size:12px;line-height:16px;margin-top:1rem}.qms-select-department-tree-container .input-field{display:flex;align-items:center;position:relative}.qms-select-department-tree-container .input-field ::ng-deep .mat-form-field-wrapper{padding-bottom:8px!important}.qms-select-department-tree-container .input-field ::ng-deep .mat-form-field-underline{bottom:8px!important}.qms-select-department-tree-container .input-field input.input-search{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qms-select-department-tree-container .input-field .btn-search{cursor:pointer;vertical-align:middle;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.qms-select-department-tree-container .input-field .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qms-select-department-tree-container .header-title{font-weight:500;color:var(--ws-text-primary);font-size:16px;display:flex;align-items:center}.qms-select-department-tree-container .header-title .header-view{padding:4px 0}.qms-select-department-tree-container .sticky-position{position:sticky;top:0;left:0;z-index:1;background:#fff}.qms-select-department-tree-container .header-view-tree{display:grid;grid-template-columns:1fr 200px;grid-column-gap:2px;-moz-column-gap:2px;column-gap:2px;padding:4px 12px 4px 0}.qms-select-department-tree-container .header-view-tree .header-view:first-child{padding-left:12px}.qms-select-department-tree-container .tree-department-wrapper{padding-right:4px;overflow:hidden;position:relative;transition:height .3s ease-in-out}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view{width:100%;display:grid;grid-template-columns:1fr 200px;grid-column-gap:2px;-moz-column-gap:2px;column-gap:2px}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main>.separate{height:38px}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main>.separate.h-0{height:0}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main:last-child{height:100%;padding-left:4px;position:relative}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main:last-child:after{position:absolute;content:\"\";top:0;bottom:-38px;left:0;width:1px;background:rgba(0,0,0,.12)}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main .external-list-item-container .node-external{overflow:hidden;transition:all .1s ease-in-out}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main .external-list-item-container .node-external .node-external-content{padding:5px 15px;height:calc(100% - 2px);color:var(--default-color);font-size:14px;display:flex;align-items:center}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main .external-list-item-container .node-external .node-external-content span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.qms-select-department-tree-container .mask-overlay{z-index:1000;background-color:rgba(34,33,33,.1);position:absolute;top:0;left:0;width:100%;height:100%;border-radius:4px;overflow:hidden;display:grid;place-items:center}.qms-select-department-tree-container .select-department-tree>.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{padding:0 4px!important}.qms-select-department-tree-container .select-department-tree .qms-tree-node{display:flex;align-items:center;border-radius:4px}.qms-select-department-tree-container .select-department-tree .qms-tree-node:hover{background-color:rgba(0,0,0,.08)}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.node-expand-area{width:48px;height:48px;position:relative}.qms-select-department-tree-container .select-department-tree .qms-tree-node.active-external-view .mat-checkbox.qms-group-options{width:calc(100% - 250px)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.node-loading{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.external-view-node{flex-basis:200px;overflow:hidden}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.external-view-node .node-external{overflow:hidden;transition:all .1s ease-in-out;display:block}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.external-view-node .node-external .node-external-content{padding:5px 15px;height:calc(100% - 2px);color:var(--default-color);font-size:14px;display:flex;align-items:center}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.external-view-node .node-external .node-external-content span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.qms-select-department-tree-container .select-department-tree .qms-tree-node.expand-node{color:var(--primary)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.expand-node:hover{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.expand-node:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.expand-node .mat-icon{color:var(--primary)}.qms-select-department-tree-container .select-department-tree .qms-tree-node .node-without-checkbox{cursor:pointer;width:100%;display:flex;justify-content:space-between;align-items:center}.qms-select-department-tree-container .select-department-tree .qms-tree-node .node-without-checkbox .mat-icon{color:var(--primary);margin-right:4px}.qms-select-department-tree-container .select-department-tree .qms-tree-node.selected-theme{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all{cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all .mat-icon-rtl-mirror,.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all .type-icon,.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all button.mat-button-disabled{color:rgba(0,0,0,.38)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all .text-name.disabled{color:rgba(0,0,0,.38);cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all.active{background-color:transparent}.qms-select-department-tree-container .select-department-tree .qms-tree-node.move-location-mode:active .move-location-btn,.qms-select-department-tree-container .select-department-tree .qms-tree-node.move-location-mode:hover .move-location-btn{display:block}.qms-select-department-tree-container .text-name{position:relative;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;cursor:pointer;width:100%}.qms-select-department-tree-container .cursor-pointer{cursor:pointer}.qms-select-department-tree-container .ml5{margin-left:15px!important}.qms-select-department-tree-container .pl-10{padding-left:10px}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-layout{white-space:normal}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .node-text>span{display:block}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-label{flex-direction:row;align-items:center;position:relative;padding-bottom:2px}.qms-select-department-tree-container .qms-view-search-result{width:100%;overflow:hidden}.qms-select-department-tree-container .qms-view-search-result__header{position:relative}.qms-select-department-tree-container .qms-view-search-result__header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background-color:rgba(0,0,0,.1)}.qms-select-department-tree-container .qms-view-search-result__header .header-title{padding:8px 0;display:inline-block}.qms-select-department-tree-container .qms-view-search-result__header .header-title:first-child{padding-left:12px}.qms-select-department-tree-container .qms-view-search-result__header .header-title:nth-child(2){flex-basis:200px}.qms-select-department-tree-container .qms-view-search-result>.no-result{height:100%;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container .qms-view-search-result__wrapper{height:calc(100% - 50px);width:100%}.qms-select-department-tree-container .qms-view-search-result__wrapper.active-external{height:calc(100% - 90px)!important}.qms-select-department-tree-container .qms-view-search-result__wrapper .result{max-height:calc(100% - 44px);overflow-y:auto;margin-bottom:4px;padding-right:4px}.qms-select-department-tree-container .qms-view-search-result__wrapper .result.active-paging{max-height:calc(100% - 40px)}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item{border-radius:4px;display:grid;grid-template-columns:45px 1fr;align-items:center;cursor:pointer;transition:background .3s ease;min-height:40px}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item:not(:first-child){margin-top:4px!important}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item.active,.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item:hover{background:linear-gradient(0deg,rgba(1,99,178,.12),rgba(1,99,178,.12)),#fff}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item__content{display:flex;align-items:center}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item__content .item-result-content-wraper{padding:5px 15px;width:100%}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item__content .external-name{flex-basis:200px}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item__content .external-name span{width:200px;display:inline-block}.qms-select-department-tree-container .qms-view-search-result ::ng-deep .mat-checkbox.qms-group-options{display:flex;height:100%}.qms-select-department-tree-container ::ng-deep .breadcrumb-container{flex-wrap:wrap}.qms-select-department-tree-container ::ng-deep .mat-button-focus-overlay{background-color:transparent}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item{margin:0}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transition:color .3s ease}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text:not(:last-child){max-width:150px!important}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result span{font-weight:600;color:rgba(0,0,0,.8)}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions{margin-bottom:0;grid-column-gap:2px;-moz-column-gap:2px;column-gap:2px}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-form-field-wrapper{padding-bottom:0}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size{align-items:center}.qms-select-department-tree-container .text-gray{color:#242424}.qms-select-department-tree-container .mb0{margin-bottom:0!important}.qms-select-department-tree-container .fs-base{font-size:14px!important}.qms-select-department-tree-container .user-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .item-breadcrumb-disable{cursor:not-allowed;color:rgba(0,0,0,.6);font-weight:400;font-size:14px;max-width:250px}.qms-select-department-tree-container ::ng-deep .mat-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row;align-items:center;grid-column-gap:4px;-moz-column-gap:4px;column-gap:4px}.qms-select-department-tree-container ::ng-deep .btn-arrow{width:40px;height:40px;line-height:40px}.qms-select-department-tree-container .qms-loading-container{overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-select-department-tree-container .qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-select-department-tree-container .qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,hsla(0,0%,91%,0),hsla(0,0%,89%,0) 40%,hsla(0,0%,89%,.5) 50%,hsla(0,0%,89%,0) 60%,hsla(0,0%,89%,0));animation:animate-loading 1.2s linear infinite}.qms-select-department-tree-container .qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-select-department-tree-container .qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px}@keyframes animate-loading{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}.qms-select-department-tree-container .qms-spinner{font-size:20px;position:relative;display:inline-block;width:1em;height:1em}.qms-select-department-tree-container .qms-spinner.center{position:absolute;left:0;right:0;top:0;bottom:0;margin:auto}.qms-select-department-tree-container .mat-spinner circle,.qms-select-department-tree-container ::ng-deep .mat-progress-spinner circle{stroke:#1b75be!important}@media screen and (max-width:600px){.qms-select-department-tree-container .external-view-node{flex-basis:65px!important}.qms-select-department-tree-container .qms-tree-node.active-external-view .mat-checkbox.qms-group-options{width:calc(100% - 110px)!important}.qms-select-department-tree-container .header-view-tree{grid-template-columns:1fr 80px!important}.qms-select-department-tree-container ::ng-deep .cdk-virtual-scroll-content-wrapper{right:0!important}.qms-select-department-tree-container .header-title{font-size:14px!important}.qms-select-department-tree-container .node-external,.qms-select-department-tree-container .text-label,.qms-select-department-tree-container .text-label+span,.qms-select-department-tree-container .text-name{font-size:12px}.qms-select-department-tree-container .node-expand-area{width:30px!important;height:30px!important}.qms-select-department-tree-container .node-expand-area .qms-btn-icon{width:30px;height:30px;line-height:30px}.qms-select-department-tree-container .fs-base{font-size:12px!important}.qms-select-department-tree-container .qms-select-department-tree-container .breadcrumb-container{flex-wrap:nowrap!important}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text{font-size:12px!important;max-width:175px!important}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result{display:none!important}.qms-select-department-tree-container ::ng-deep .qms-paginator .size-small .mat-paginator-container{justify-content:center!important}.qms-select-department-tree-container .qms-view-search-result__header>.header-title:nth-child(2){flex-basis:120px!important}.qms-select-department-tree-container .result-item__content .external-name{flex-basis:75px!important}.qms-select-department-tree-container .result-item__content .external-name span{width:75px!important}}.qms-select-department-tree-container ::ng-deep .qms-paginator{margin-top:0}.move-location-btn{display:none;color:var(--primary)}::ng-deep .move-location-menu .mat-menu-item:hover{color:var(--primary)}"]
1289
+ styles: ["@charset \"UTF-8\";@font-face{font-family:icomoon;src:url(../assets/fonts/icomoon.eot?aghldx);src:url(../assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(../assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(../assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(../assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class*=\" icon-\"],[class^=icon-]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\uE91B\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\uE922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\uE923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\uE924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\uE925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\uE926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\uE927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\uE928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\uE929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\uE92A\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\uE92B\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\uE92C\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\uE92D\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\uE92E\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\uE92F\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\uE930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\uE931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\uE932\"}.icon-add-tooltip:before{content:\"\uE933\"}.icon-admin:before{content:\"\uE934\"}.icon-annual-cycle:before{content:\"\uE935\"}.icon-assignment-repete:before{content:\"\uE936\"}.icon-barrier-add:before{content:\"\uE937\"}.icon-barrier-edit:before{content:\"\uE938\"}.icon-barrier-view:before{content:\"\uE939\"}.icon-button-group:before{content:\"\uE93A\"}.icon-chemical-manager:before{content:\"\uE93B\"}.icon-chronic-health-hazard .path1:before{content:\"\uE93C\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\uE93D\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\uE93E\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\uE93F\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\uE940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\uE941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\uE942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\uE943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\uE944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\uE945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\uE946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\uE947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\uE948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\uE949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\uE94A\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\uE94B\"}.icon-corrosive .path1:before{content:\"\uE94C\";color:#323232}.icon-corrosive .path2:before{content:\"\uE94D\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\uE94E\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\uE94F\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\uE950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\uE951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\uE952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\uE953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\uE954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\uE955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\uE956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\uE957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\uE958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\uE959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\uE95A\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\uE95B\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\uE95C\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\uE95D\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\uE95E\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\uE95F\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\uE960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\uE961\"}.icon-database-sds:before{content:\"\uE962\"}.icon-description-add:before{content:\"\uE963\"}.icon-description-edit:before{content:\"\uE964\"}.icon-description-view:before{content:\"\uE965\";color:#666}.icon-document-read .path1:before{content:\"\uE966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\uE967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\uE968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\uE969\"}.icon-expired-off:before{content:\"\uE96A\"}.icon-expired-on:before{content:\"\uE96B\"}.icon-explosive .path1:before{content:\"\uE96C\";color:#e32730}.icon-explosive .path2:before{content:\"\uE96D\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\uE96E\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\uE96F\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\uE970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\uE971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\uE972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\uE973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\uE974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\uE975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\uE976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\uE977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\uE978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\uE979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\uE97A\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\uE97B\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\uE97C\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\uE97D\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\uE97E\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\uE97F\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\uE980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\uE981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\uE982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\uE983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\uE984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\uE985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\uE986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\uE987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\uE988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\uE989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\uE98A\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\uE98B\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\uE98C\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\uE98D\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\uE98E\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\uE98F\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\uE990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\uE991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\uE992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\uE993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\uE994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\uE995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\uE996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\uE997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\uE998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\uE999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\uE99A\"}.icon-file-pdf:before{content:\"\uE99B\"}.icon-file-pdf-verified .path1:before{content:\"\uE99C\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\uE99D\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\uE99E\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\uE99F\"}.icon-filter-alt:before{content:\"\uE9A0\"}.icon-flammable .path1:before{content:\"\uE9A1\";color:#323232}.icon-flammable .path2:before{content:\"\uE9A2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\uE9A3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\uE9A4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\uE9A5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\uE9A6\";color:#323232}.icon-health-hazard .path2:before{content:\"\uE9A7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\uE9A8\"}.icon-location:before{content:\"\uE9A9\"}.icon-measure-add:before{content:\"\uE9AA\"}.icon-measure-edit:before{content:\"\uE9AB\"}.icon-measure-view:before{content:\"\uE9AC\";color:#666}.icon-messages:before{content:\"\uE9AD\"}.icon-monitoring:before{content:\"\uE9AE\";color:#666}.icon-move:before{content:\"\uE9AF\"}.icon-oxidizing .path1:before{content:\"\uE9B0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\uE9B1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\uE9B2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\uE9B3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\uE9B4\"}.icon-process-area-open:before{content:\"\uE9B5\"}.icon-process-linked .path1:before{content:\"\uE9B6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\uE9B7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\uE9B8\"}.icon-search-in-file:before{content:\"\uE9B9\"}.icon-sort-ascending:before{content:\"\uE9BA\"}.icon-sort-descending:before{content:\"\uE9BB\"}.icon-subscript:before{content:\"\uE9BC\"}.icon-superscript:before{content:\"\uE9BD\"}.icon-syncronice-favorites:before{content:\"\uE9BE\"}.icon-system-settings:before{content:\"\uE9BF\"}.icon-view-three-outlined:before{content:\"\uE9C0\"}.icon-workplace-safety:before{content:\"\uE9C1\"}.icon-checklist:before{content:\"\uE900\"}.icon-department-document .path1:before{content:\"\uE901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\uE902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\uE903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\uE904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\uE905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\uE906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\uE907\"}.icon-dropdown-folder .path1:before{content:\"\uE908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\uE909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\uE90A\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\uE90B\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\uE90C\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\uE90D\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\uE90E\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\uE90F\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\uE910\"}.icon-folder-open:before{content:\"\uE911\"}.icon-keyboard_arrow_down:before{content:\"\uE912\"}.icon-keyboard_arrow_up:before{content:\"\uE913\"}.icon-local-document .path1:before{content:\"\uE914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\uE915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\uE916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\uE917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\uE918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\uE919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\uE91A\"}.icon-regional-document .path1:before{content:\"\uE91C\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\uE91D\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\uE91E\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\uE91F\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\uE920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\uE921\";margin-left:-1em;color:#662e0d}.qms-select-department-tree-container{font-family:Open Sans,sans-serif}.qms-select-department-tree-container .mr10{margin-right:10px}.qms-select-department-tree-container .mt5{margin-bottom:5px}.qms-select-department-tree-container .mb5{margin-top:5px}.qms-select-department-tree-container .w100{width:100%}.qms-select-department-tree-container .h100{height:100%}.qms-select-department-tree-container .fw500{font-weight:500!important}.qms-select-department-tree-container .text-right{text-align:right}.qms-select-department-tree-container .mt20{margin-top:20px}.qms-select-department-tree-container .d-flex{display:flex}.qms-select-department-tree-container .align-items-center{align-items:center}.qms-select-department-tree-container .justify-content-end{justify-content:flex-end}.qms-select-department-tree-container .text-selected{color:rgba(0,0,0,.6);font-size:12px;line-height:16px;margin-top:1rem}.qms-select-department-tree-container .input-field{display:flex;align-items:center;position:relative}.qms-select-department-tree-container .input-field ::ng-deep .mat-form-field-wrapper{padding-bottom:8px!important}.qms-select-department-tree-container .input-field ::ng-deep .mat-form-field-underline{bottom:8px!important}.qms-select-department-tree-container .input-field input.input-search{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qms-select-department-tree-container .input-field .btn-search{cursor:pointer;vertical-align:middle;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.qms-select-department-tree-container .input-field .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qms-select-department-tree-container .header-title{font-weight:500;color:var(--ws-text-primary);font-size:16px;display:flex;align-items:center}.qms-select-department-tree-container .header-title .header-view{padding:4px 0}.qms-select-department-tree-container .sticky-position{position:sticky;top:0;left:0;z-index:1;background:#fff}.qms-select-department-tree-container .header-view-tree{display:grid;grid-template-columns:1fr 200px;grid-column-gap:2px;-moz-column-gap:2px;column-gap:2px;padding:4px 12px 4px 0}.qms-select-department-tree-container .header-view-tree .header-view:first-child{padding-left:12px}.qms-select-department-tree-container .tree-department-wrapper{padding-right:4px;overflow:hidden;position:relative;transition:height .3s ease-in-out}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view{width:100%;display:grid;grid-template-columns:1fr 200px;grid-column-gap:2px;-moz-column-gap:2px;column-gap:2px}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main>.separate{height:38px}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main>.separate.h-0{height:0}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main:last-child{height:100%;padding-left:4px;position:relative}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main:last-child:after{position:absolute;content:\"\";top:0;bottom:-38px;left:0;width:1px;background:rgba(0,0,0,.12)}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main .external-list-item-container .node-external{overflow:hidden;transition:all .1s ease-in-out}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main .external-list-item-container .node-external .node-external-content{padding:5px 15px;height:calc(100% - 2px);color:var(--default-color);font-size:14px;display:flex;align-items:center}.qms-select-department-tree-container .tree-department-wrapper .tree-view.active-mode-external-view .tree-view-main .external-list-item-container .node-external .node-external-content span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.qms-select-department-tree-container .mask-overlay{z-index:1000;background-color:rgba(34,33,33,.1);position:absolute;top:0;left:0;width:100%;height:100%;border-radius:4px;overflow:hidden;display:grid;place-items:center}.qms-select-department-tree-container .select-department-tree>.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{padding:0 4px!important}.qms-select-department-tree-container .select-department-tree .qms-tree-node{display:flex;align-items:center;border-radius:4px}.qms-select-department-tree-container .select-department-tree .qms-tree-node:hover{background-color:rgba(0,0,0,.08)}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.node-expand-area{width:48px;height:48px;position:relative}.qms-select-department-tree-container .select-department-tree .qms-tree-node.active-external-view .mat-checkbox.qms-group-options{width:calc(100% - 250px)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.node-loading{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.external-view-node{flex-basis:200px;overflow:hidden}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.external-view-node .node-external{overflow:hidden;transition:all .1s ease-in-out;display:block}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.external-view-node .node-external .node-external-content{padding:5px 15px;height:calc(100% - 2px);color:var(--default-color);font-size:14px;display:flex;align-items:center}.qms-select-department-tree-container .select-department-tree .qms-tree-node>.external-view-node .node-external .node-external-content span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.qms-select-department-tree-container .select-department-tree .qms-tree-node.expand-node{color:var(--primary)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.expand-node:hover{background:var(--primary-light-6-opacity)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.expand-node:active{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.expand-node .mat-icon{color:var(--primary)}.qms-select-department-tree-container .select-department-tree .qms-tree-node .node-without-checkbox{cursor:pointer;width:100%;display:flex;justify-content:space-between;align-items:center}.qms-select-department-tree-container .select-department-tree .qms-tree-node .node-without-checkbox .mat-icon{color:var(--primary);margin-right:4px}.qms-select-department-tree-container .select-department-tree .qms-tree-node.selected-theme{background:var(--primary-light-12-opacity)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all{cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all .mat-icon-rtl-mirror,.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all .type-icon,.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all button.mat-button-disabled{color:rgba(0,0,0,.38)}.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all .text-name.disabled{color:rgba(0,0,0,.38);cursor:default!important;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .select-department-tree .qms-tree-node.mat-tree-node-disabled-all.active{background-color:transparent}.qms-select-department-tree-container .select-department-tree .qms-tree-node.move-location-mode:active .move-location-btn,.qms-select-department-tree-container .select-department-tree .qms-tree-node.move-location-mode:hover .move-location-btn{display:block}.qms-select-department-tree-container .text-name{position:relative;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;cursor:pointer;width:100%}.qms-select-department-tree-container .cursor-pointer{cursor:pointer}.qms-select-department-tree-container .ml5{margin-left:15px!important}.qms-select-department-tree-container .pl-10{padding-left:10px}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-layout{white-space:normal}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .node-text>span{display:block}.qms-select-department-tree-container ::ng-deep .mat-checkbox.qms-group-options.flex-direction-row .mat-checkbox-label{flex-direction:row;align-items:center;position:relative;padding-bottom:2px}.qms-select-department-tree-container .qms-view-search-result{width:100%;overflow:hidden}.qms-select-department-tree-container .qms-view-search-result__header{position:relative}.qms-select-department-tree-container .qms-view-search-result__header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background-color:rgba(0,0,0,.1)}.qms-select-department-tree-container .qms-view-search-result__header .header-title{padding:8px 0;display:inline-block}.qms-select-department-tree-container .qms-view-search-result__header .header-title:first-child{padding-left:12px}.qms-select-department-tree-container .qms-view-search-result__header .header-title:nth-child(2){flex-basis:200px}.qms-select-department-tree-container .qms-view-search-result>.no-result{height:100%;display:flex;justify-content:center;align-items:center}.qms-select-department-tree-container .qms-view-search-result__wrapper{height:calc(100% - 50px);width:100%}.qms-select-department-tree-container .qms-view-search-result__wrapper.active-external{height:calc(100% - 90px)!important}.qms-select-department-tree-container .qms-view-search-result__wrapper .result{max-height:100%;overflow-y:auto;margin-bottom:4px;padding-right:4px}.qms-select-department-tree-container .qms-view-search-result__wrapper .result.active-paging{max-height:calc(100% - 40px)}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item{border-radius:4px;display:grid;grid-template-columns:45px 1fr;align-items:center;cursor:pointer;transition:background .3s ease;min-height:40px}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item:not(:first-child){margin-top:4px!important}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item:hover{background:linear-gradient(0deg,rgba(1,99,178,.12),rgba(1,99,178,.12)),#fff}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item:hover .move-location-btn{display:block}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item.active{background:linear-gradient(0deg,rgba(1,99,178,.12),rgba(1,99,178,.12)),#fff}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item.no-checkbox{grid-template-columns:1fr}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item__content{display:flex;align-items:center}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item__content .item-result-content-wraper{padding:5px 15px;width:100%}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item__content .external-name{flex-basis:200px}.qms-select-department-tree-container .qms-view-search-result__wrapper .result-item__content .external-name span{width:200px;display:inline-block}.qms-select-department-tree-container .qms-view-search-result ::ng-deep .mat-checkbox.qms-group-options{display:flex;height:100%}.qms-select-department-tree-container ::ng-deep .breadcrumb-container{flex-wrap:wrap}.qms-select-department-tree-container ::ng-deep .mat-button-focus-overlay{background-color:transparent}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item{margin:0}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transition:color .3s ease}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text:not(:last-child){max-width:150px!important}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result span{font-weight:600;color:rgba(0,0,0,.8)}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions{margin-bottom:0;grid-column-gap:2px;-moz-column-gap:2px;column-gap:2px}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-form-field-wrapper{padding-bottom:0}.qms-select-department-tree-container ::ng-deep .qms-paginator .qms-paginator-page-size{align-items:center}.qms-select-department-tree-container .text-gray{color:#242424}.qms-select-department-tree-container .mb0{margin-bottom:0!important}.qms-select-department-tree-container .fs-base{font-size:14px!important}.qms-select-department-tree-container .user-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.qms-select-department-tree-container .item-breadcrumb-disable{cursor:not-allowed;color:rgba(0,0,0,.6);font-weight:400;font-size:14px;max-width:250px}.qms-select-department-tree-container ::ng-deep .mat-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row;align-items:center;grid-column-gap:4px;-moz-column-gap:4px;column-gap:4px}.qms-select-department-tree-container ::ng-deep .btn-arrow{width:40px;height:40px;line-height:40px}.qms-select-department-tree-container .qms-loading-container{overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-select-department-tree-container .qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-select-department-tree-container .qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,hsla(0,0%,91%,0),hsla(0,0%,89%,0) 40%,hsla(0,0%,89%,.5) 50%,hsla(0,0%,89%,0) 60%,hsla(0,0%,89%,0));animation:animate-loading 1.2s linear infinite}.qms-select-department-tree-container .qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-select-department-tree-container .qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px}@keyframes animate-loading{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}.qms-select-department-tree-container .qms-spinner{font-size:20px;position:relative;display:inline-block;width:1em;height:1em}.qms-select-department-tree-container .qms-spinner.center{position:absolute;left:0;right:0;top:0;bottom:0;margin:auto}.qms-select-department-tree-container .mat-spinner circle,.qms-select-department-tree-container ::ng-deep .mat-progress-spinner circle{stroke:#1b75be!important}@media screen and (max-width:600px){.qms-select-department-tree-container .external-view-node{flex-basis:65px!important}.qms-select-department-tree-container .qms-tree-node.active-external-view .mat-checkbox.qms-group-options{width:calc(100% - 110px)!important}.qms-select-department-tree-container .header-view-tree{grid-template-columns:1fr 80px!important}.qms-select-department-tree-container ::ng-deep .cdk-virtual-scroll-content-wrapper{right:0!important}.qms-select-department-tree-container .header-title{font-size:14px!important}.qms-select-department-tree-container .node-external,.qms-select-department-tree-container .text-label,.qms-select-department-tree-container .text-label+span,.qms-select-department-tree-container .text-name{font-size:12px}.qms-select-department-tree-container .node-expand-area{width:30px!important;height:30px!important}.qms-select-department-tree-container .node-expand-area .qms-btn-icon{width:30px;height:30px;line-height:30px}.qms-select-department-tree-container .fs-base{font-size:12px!important}.qms-select-department-tree-container .qms-select-department-tree-container .breadcrumb-container{flex-wrap:nowrap!important}.qms-select-department-tree-container ::ng-deep .qms-breadcrumb-item-text{font-size:12px!important;max-width:175px!important}.qms-select-department-tree-container ::ng-deep .qms-paginator .mat-paginator-container .qms-total-result{display:none!important}.qms-select-department-tree-container ::ng-deep .qms-paginator .size-small .mat-paginator-container{justify-content:center!important}.qms-select-department-tree-container .qms-view-search-result__header>.header-title:nth-child(2){flex-basis:120px!important}.qms-select-department-tree-container .result-item__content .external-name{flex-basis:75px!important}.qms-select-department-tree-container .result-item__content .external-name span{width:75px!important}}.qms-select-department-tree-container ::ng-deep .qms-paginator{margin-top:0}.move-location-btn{display:none;color:var(--primary)}::ng-deep .move-location-menu .mat-menu-item:hover{color:var(--primary)}"]
1285
1290
  },] }
1286
1291
  ];
1287
1292
  SelectDepartmentTreeComponent.ctorParameters = () => [
@@ -1313,4 +1318,4 @@ SelectDepartmentTreeComponent.propDecorators = {
1313
1318
  cdkVirtualScrollViewport: [{ type: ViewChild, args: [CdkVirtualScrollViewport,] }],
1314
1319
  paginatorSearch: [{ type: ViewChild, args: ['paginatorSearch',] }]
1315
1320
  };
1316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWtCLE1BQU0sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN00sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUs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LEtBQUs7MkJBQ0wsS0FBSzs0QkFnQkwsTUFBTTtrQ0FDTixNQUFNO2lDQUNOLE1BQU07dUNBQ04sTUFBTTsrQkFDTixNQUFNO2dDQUNOLE1BQU07OEJBQ04sTUFBTTtxQ0FDTixNQUFNO3dDQUNOLE1BQU07c0NBQ04sTUFBTTt1Q0FFTixTQUFTLFNBQUMsd0JBQXdCOzhCQUNsQyxTQUFTLFNBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCBtYXAsIHBhaXJ3aXNlLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBRTVNGbGF0Tm9kZVRyZWUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1mbGF0LW5vZGUubW9kZWwnO1xuaW1wb3J0IHsgUU1TVHJlZU5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy10cmVlLW5vZGUubW9kZWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNpemUsIFFNU1BhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3Ftcy1wYWdpbmF0b3InO1xuaW1wb3J0IHsgSXRlbUljb25UeXBlIH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vaXRlbS1pY29uLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBbmltYXRpb25UcmVlRGVwYXJ0bWVudCB9IGZyb20gJy4vYW5pbWF0aW9uL2FuaW1hdGlvbic7XG5pbXBvcnQgeyBNb2RlRGVwYXJ0bWVudFRyZWVlVmlld0VudW0gfSBmcm9tICcuL2VudW0vbW9kZS1kZXBhcnRtZW50LXRyZWUtdmlldy5lbnVtJztcbmltcG9ydCB7IFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbCB9IGZyb20gJy4vbW9kZWwvZGVwYXJ0bWVudC1wYWdpbmcubW9kZWwnO1xuaW1wb3J0IHsgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYiwgRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50LXNlYXJjaC1yZXN1bHQubW9kZWwnO1xuaW1wb3J0IHsgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcgfSBmcm9tICcuL21vZGVsL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUuY29uZmlnJztcbmltcG9ydCB7IElTZWxlY3Rpb25Ob2RlQ2hhbmdlIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3Rpb24tY2hhbmdlLm1vZGVsJztcbmltcG9ydCB7IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLWdsb2JhbC5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIElIYW5kbGluZ0V2ZW50TGF6eSB7XG4gIGNoZWNrQWxsU2VhcmNoOiBib29sZWFuO1xuICBjaGVja0l0ZW1TZWFyY2g6IGJvb2xlYW47XG4gIGNoZWNrTm9kZTogYm9vbGVhbjtcbiAgZXhwYW5kOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LWRlcGFydG1lbnQtdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBbXG4gICAgQW5pbWF0aW9uVHJlZURlcGFydG1lbnRcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgTEFORzogYW55O1xuICByZWFkb25seSBzcGlubmVyQXJyID0gbmV3IEFycmF5KDEyKS5maWxsKDApO1xuICBhcnJTa2VsZXRvbiA9IG5ldyBBcnJheSg2KS5maWxsKDApO1xuICBASW5wdXQoKSBzZXQgcm93c1NrZWxldG9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmFyclNrZWxldG9uID0gbmV3IEFycmF5KHZhbHVlKS5maWxsKDApO1xuICB9XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gJzUwdmgnO1xuICBASW5wdXQoKSBjb25maWc6IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnID0gbmV3IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnKCk7XG4gIEBJbnB1dCgpIG1heFdpZHRoTm9kZTogbnVtYmVyID0gNjUwO1xuICBpc0luY2x1ZGVDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBnZXQgZGVwYXJ0bWVudFJvb3RzKCkge1xuICAgIGlmICghdGhpcy50cmVlQ29udHJvbClcbiAgICAgIHJldHVybjtcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKG5vZGUgPT4gbm9kZS5sZXZlbCA9PT0gMCk7XG4gIH1cblxuICBnZXQgaXNBbGxEZXBhcnRtZW50U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy50cmVlQ29udHJvbCAmJiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5ldmVyeShub2RlID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpO1xuICB9XG5cbiAgZ2V0IGlzSW5kZXRlcm1pbmF0ZUNoZWNrYm94QWxsVHJlZSgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNBbGxEZXBhcnRtZW50U2VsZWN0ZWQgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvblNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvblBhZ2luZ1NlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1RyZWVOb2RlW10+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElTZWxlY3Rpb25Ob2RlQ2hhbmdlPFFNU1RyZWVOb2RlPj4oKTtcbiAgQE91dHB1dCgpIG9uQ2hlY2tOb2RlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU0ZsYXROb2RlVHJlZT4oKTtcbiAgQE91dHB1dCgpIG9uRXhwYW5kTm9kZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNGbGF0Tm9kZVRyZWU+KCk7XG4gIEBPdXRwdXQoKSBvbkxvYWRNb3JlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNoZWNrSXRlbVNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXRlOiBib29sZWFuLCBpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwgfT4oKTtcbiAgQE91dHB1dCgpIG9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSB0b2dnbGVJbmNsdWRlQ2hpbGRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvclNlYXJjaCcpIHBhZ2luYXRvclNlYXJjaDogUU1TUGFnaW5hdG9yQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5IE1PREVfVklFV19FTlVNID0gTW9kZURlcGFydG1lbnRUcmVlZVZpZXdFbnVtO1xuICBJVEVNX1NJWkUgPSA1MDtcbiAgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlc3VsdFNlYXJjaFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XG4gIHJlc3VsdFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XG4gIHJlYWRvbmx5IGdldERhdGFUcmVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TVHJlZU5vZGVbXT4oW10pO1xuICByZWFkb25seSBzZWFyY2hEZXBhcnRtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4+KG5ldyBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPigpKTtcbiAgcmVzdWx0U2VhcmNoOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWxbXSA9IFtdO1xuXG4gIGdldCBjdXJyZW50VHJlZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVRyZWUkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2goKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xuICB9XG5cbiAgZ2V0IGluZGV0ZXJtaW5hdGVTZWFyY2hSZXN1bHQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoICYmICEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoICYmIHRoaXMucmVzdWx0U2VhcmNoLnNvbWUoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGdldEluZGV4VmlldyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHNjcm9sbFRvTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZ2V0QWN0aXZlTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgYWN0aXZlTm9kZTogc3RyaW5nID0gJy0tJztcblxuICByZWFkb25seSBQQUdJTkFUSU9OX1NJWkUgPSBQYWdpbmF0aW9uU2l6ZTtcbiAgUEFHRV9TSVpFX09QVElPTjogbnVtYmVyW10gPSBbNSwgMTAsIDE1LCAyMCwgMjUsIDEwMF07XG4gIENVUlJFTlRfUEFHRVNJWkU6IG51bWJlciA9IDEwO1xuICByZWFkb25seSBuZXN0ZWRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT4oKTtcbiAgcmVhZG9ubHkgZmxhdFRyZWVOb2RlTWFwID0gbmV3IE1hcDxRTVNGbGF0Tm9kZVRyZWUsIFFNU1RyZWVOb2RlPigpO1xuICByZWFkb25seSBjaGVja0xpc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8UU1TRmxhdE5vZGVUcmVlPih0cnVlKTtcbiAgcmVhZG9ubHkgY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoID0gbmV3IFNlbGVjdGlvbk1vZGVsPERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbD4odHJ1ZSk7XG4gIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8UU1TRmxhdE5vZGVUcmVlPjtcbiAgdHJlZUZsYXR0ZW5lcjogTWF0VHJlZUZsYXR0ZW5lcjxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcbiAgZGF0YVNvdXJjZTogTWF0VHJlZUZsYXREYXRhU291cmNlPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xuXG4gIGRhdGFTb3VyY2VUcmVlU2VhcmNoOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XG4gIHByaXZhdGUgX3NlbGVjdGVkTGlzdDogUU1TVHJlZU5vZGVbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkID0gbmV3IFN1YmplY3Q8UU1TRmxhdE5vZGVUcmVlW10+KCk7XG5cbiAgZm9ybVNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICByZWFkb25seSBnZXRMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBnZXRMb2FkaW5nTW9yZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSB1bnRpbERlc3Ryb3lMb2FkTW9yZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSBvbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICByZWFkb25seSB0ZXh0U2VhcmNoU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBpdGVtSWNvblR5cGUgPSBJdGVtSWNvblR5cGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyID0gKG5vZGU6IFFNU1RyZWVOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmNvbnZlcnRUb0ZsYXROb2RlKG5vZGUpIHx8IG5ldyBRTVNGbGF0Tm9kZVRyZWUoKTtcbiAgICBmbGF0Tm9kZS5pZCA9IG5vZGUuaWQ7XG4gICAgZmxhdE5vZGUubmFtZSA9IG5vZGUubmFtZTtcbiAgICBmbGF0Tm9kZS5leHBhbmRhYmxlID0gKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB8fCAoISFub2RlLmNoaWxkQ291bnQpIHx8IG5vZGUuZXhwYW5kYWJsZTtcbiAgICBmbGF0Tm9kZS5sZXZlbCA9IGxldmVsO1xuICAgIGZsYXROb2RlLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcbiAgICBmbGF0Tm9kZS5tYXJrZWRHZXRDaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICBmbGF0Tm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XG4gICAgZmxhdE5vZGUuaXRlbUljb25TdmcgPSBub2RlLml0ZW1JY29uU3ZnO1xuICAgIGZsYXROb2RlLmlzRmlsZSA9IG5vZGUuaXNGaWxlO1xuICAgIGZsYXROb2RlLmRpc2FibGVkID0gbm9kZS5kaXNhYmxlZDtcbiAgICBmbGF0Tm9kZS5pc0dyb3VwID0gbm9kZS5pc0dyb3VwO1xuICAgIGZsYXROb2RlLmdyb3VwSWQgPSBub2RlLmdyb3VwSWQ7XG4gICAgZmxhdE5vZGUuZXh0ZXJuYWxOYW1lID0gbm9kZS5leHRlcm5hbE5hbWU7XG4gICAgZmxhdE5vZGUuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcbiAgICBmbGF0Tm9kZS5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcbiAgICBmbGF0Tm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZSA9IG5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmU7XG4gICAgZmxhdE5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZCA9IG5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZDtcbiAgICBmbGF0Tm9kZS5leHBhbmRJY29uID0gbm9kZS5leHBhbmRJY29uO1xuXG4gICAgdGhpcy5mbGF0VHJlZU5vZGVNYXAuc2V0KGZsYXROb2RlLCBub2RlKTtcbiAgICB0aGlzLm5lc3RlZFRyZWVOb2RlTWFwLnNldChub2RlLCBmbGF0Tm9kZSk7XG4gICAgcmV0dXJuIGZsYXROb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBnZXRMZXZlbCA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGU/LmxldmVsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9nZXRDaGlsZCA9IChub2RlOiBRTVNUcmVlTm9kZSkgPT4gbm9kZS5jaGlsZHJlbjtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0V4cGFuZGFibGUgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxpbmdMYXp5T2JqZWN0OiBJSGFuZGxpbmdFdmVudExhenkgPSB7XG4gICAgY2hlY2tBbGxTZWFyY2g6IGZhbHNlLFxuICAgIGNoZWNrSXRlbVNlYXJjaDogZmFsc2UsXG4gICAgY2hlY2tOb2RlOiBmYWxzZSxcbiAgICBleHBhbmQ6IGZhbHNlXG4gIH1cblxuICBwcml2YXRlIGxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTtcbiAgc291cmNlX29iamVjdCA9IHt9IGFzIFFNU1RyZWVOb2RlO1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXG4gICAgcHJpdmF0ZSBlbGVSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIHRyYW5zOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcbiAgICBwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIHRyZWVEZXBhcnRtZW50U2VydmljZTogUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVHbG9iYWxTZXJ2aWNlXG4gICkge1xuICAgIC8vIEluaXQgdHJlZSBkYXRhXG4gICAgdGhpcy5nZXREYXRhVHJlZSRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgLy8gUmVnaXN0ZXIgaWNvblxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJSaXNrSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG5cbiAgICB0aGlzLnRyYW5zLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFucy5nZXRPYmplY3RMYW5nKHJlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5faGFuZGxlU2VhcmNoRXZlbnQoKTtcbiAgICB0aGlzLl9oYW5kbGVBY3RpdmVOb2RlRXZlbnQoKTtcbiAgICB0aGlzLl9oYW5kbGVJdGVtU2VsZWN0aW9uQ2hhbmdlZCgpO1xuXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICB0YXAocmVzID0+IHtcbiAgICAgICAgcmVzID8gdGhpcy5mb3JtU2VhcmNoQ29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1TZWFyY2hDb250cm9sLmVuYWJsZSgpO1xuICAgICAgfSkpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0SW5kZXhWaWV3JC5waXBlKFxuICAgICAgdGFrZVVudGlsKG1lcmdlKHRoaXMubmdVbnN1YnNjcmliZSwgdGhpcy51bnRpbERlc3Ryb3lMb2FkTW9yZSQpKSxcbiAgICAgIHRhcChfID0+IHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodGhpcy5jb25maWcubGF6eSkpLFxuICAgICAgZGVsYXkoNzAwKSxcbiAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xuICAgICAgICBpZiAodmFsdWUgPT09IDApXG4gICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgJiZcbiAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2VcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkKSxcbiAgICAgICAgICAgICAgICBtYXAoXyA9PiB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSksXG4gICAgICAgICAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKFt4MSwgeDJdKSA9PiB4MSA+IHgyICYmIHgyIDwgMTQwKSxcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVRpbWUoMjAwKSxcbiAgICAgICAgICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRMb2FkaW5nTW9yZSQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVzdHJveUxvYWRNb3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkTW9yZUV2ZW50LmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMub25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHRhcChfID0+IHtcbiAgICAgICAgdGhpcy5faGFuZGxlTGlzdFNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xuICAgICAgfSkpLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiA9IHRoaXMuY29uZmlnLmlzSW5jbHVkZUNoaWxkcmVuO1xuICAgIHRoaXMuX2luaXRUcmVlRGF0YSgpO1xuICAgIGlmICghdGhpcy5jb25maWcubGF6eSkge1xuICAgICAgdGhpcy5faGFuZGxlTGlzdFNlbGVjdGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vYWN0aW9uIGZvciBsYXp5IGNvbmZpZ1xuICAgIHRoaXMuX2luaXRMaXN0U2VsZWN0ZWQoKTtcbiAgICB0aGlzLl9oYW5kbGVBZnRlckRhdGFOb2RlQ2hhbmdlRXZlbnQoKTtcbiAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkLm5leHQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIG9uRGVzdHJveUxvYWRNb3JlKCk6IHZvaWQge1xuICAgIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkLm5leHQoKTtcbiAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdFRyZWVEYXRhKCkge1xuICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xuICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKHRoaXMuX3RyYW5zZm9ybWVyLCB0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSwgdGhpcy5fZ2V0Q2hpbGQpO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QgJiYgdGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0Lmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0WzBdLmlkKSB7XG4gICAgICB0aGlzLmNvbmZpZy50cmVlRGF0YS5wdXNoKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdFswXSk7XG4gICAgfVxuXG4gICAgY29uc3QgX3RyZWVEYXRhSW5wdXQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gXy5jbG9uZURlZXAodGhpcy5jb25maWcudHJlZURhdGEpXG5cbiAgICBpZiAoIV90cmVlRGF0YUlucHV0Lmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCB0cmVlRGF0YSA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKF90cmVlRGF0YUlucHV0KTtcblxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodHJlZURhdGEpO1xuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVMaXN0U2VsZWN0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHRyZWVOb2RlcyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdC5tYXAoeCA9PiAoeyAuLi54LCBwYXJlbnRJZDogeC5ncm91cElkIH0pKSk7XG5cbiAgICB0aGlzLmV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudCgoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zOiBRTVNUcmVlTm9kZVtdID0gW107XG4gICAgICBjb25zdCByZU1hcFRyZWVOb2RlID0gKGl0ZW06IFFNU1RyZWVOb2RlLCBjbGVhckdyb3VwSWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT0gaXRlbS5pZCk7XG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgIG5vZGUuZ3JvdXBJZCA9IGl0ZW0uZ3JvdXBJZDtcbiAgICAgICAgbm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ubmVzdGVkTm9kZSxcbiAgICAgICAgICBncm91cElkOiBjbGVhckdyb3VwSWQgPyBudWxsIDogaXRlbS5ncm91cElkLFxuICAgICAgICAgIGlzR3JvdXA6IGl0ZW0uaXNHcm91cCxcbiAgICAgICAgICBjaGlsZENvdW50OiBuZXN0ZWROb2RlLmNoaWxkQ291bnQgPz8gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkubGVuZ3RoLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyZWVOb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT0gaXRlbS5pZCk7XG4gICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgIHNlbGVjdGVkSXRlbXMucHVzaCh7IC4uLnJlTWFwVHJlZU5vZGUoaXRlbSwgdHJ1ZSksIGNoaWxkcmVuOiBpdGVtLmNoaWxkcmVuLm1hcCh4ID0+IHJlTWFwVHJlZU5vZGUoeCkpIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5jb25maWcubW92ZUxvY2F0aW9uTW9kZSkge1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2goLi4uc2VsZWN0ZWRJdGVtcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdhZGRlZCcsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdExpc3RTZWxlY3RlZCgpIHtcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YSh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QpO1xuICAgIC8vQ29udmVydCBhcnJheSBzZWxlY3RlZExpc3QgaW50byBuZXN0ZWQgYXJyYXkgYXMgMSBsZXZlbCBmb3JtXG4gICAgY29uc3QgaW5kZXhSZW1vdmUgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3NlbGVjdGVkTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdFtpXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmdldERlc2NlbmRhbnRzT2ZOb2RlKGl0ZW0pLmZpbHRlcih4ID0+IHguZ3JvdXBJZCA9PSBpdGVtLmlkKTtcbiAgICAgIGl0ZW0uY2hpbGRyZW4gPSByZXN1bHQ7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kSW5kZXgoeCA9PiByZXN1bHQuc29tZSh4MSA9PiB4MS5pZCA9PT0geC5pZCkpXG4gICAgICBpZiAoaW5kZXggPCAwKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGluZGV4UmVtb3ZlLnB1c2goaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSB0aGlzLl9zZWxlY3RlZExpc3QuZmlsdGVyKChfLCBpbmRleCkgPT4gIWluZGV4UmVtb3ZlLmluY2x1ZGVzKGluZGV4KSk7XG5cbiAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2goLi4udGhpcy5fc2VsZWN0ZWRMaXN0KTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICB9XG5cbiAgLy8gaGFuZGxlIHNlbGVjdGVkIGxpc3Qgd2hlbiBkYXRhIG5vZGVzIGNoYW5nZVxuICBwcml2YXRlIF9oYW5kbGVBZnRlckRhdGFOb2RlQ2hhbmdlRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgdGFwKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3RlZExpc3QubGVuZ3RoKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZExpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFpdGVtLnBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUpXG4gICAgICAgICAgICAgICAgICBpdGVtLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRhdGFbaV07XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGVsZW1lbnQuaWQgfHwgeC5jaGlsZHJlbj8uc29tZSh4MSA9PiB4MS5pZCA9PT0gZWxlbWVudC5pZCkpO1xuICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlKVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBpdGVtLmlzR3JvdXA7XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3QgPSBkZXNjZW5kYW50cy5maWx0ZXIoeCA9PiBpdGVtLmNoaWxkcmVuLm1hcCh4MSA9PiB4MS5pZCkuaW5jbHVkZXMoeC5pZCkpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtU2VsZWN0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0LmZvckVhY2goX2l0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShfaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIF9uZXN0ZWROb2RlLmdyb3VwSWQgPSBpdGVtLmNoaWxkcmVuWzBdLmdyb3VwSWQ7XG4gICAgICAgICAgICAgICAgICAgIF9uZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLml0ZW1TZWxlY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHVzZSBmb3IgbGF6eSBtb2RlLCBkbyBzb21lIHRoaW5nIGJlZm9yZSBpbml0IGxpc3Qgbm9kZSBzZWxlY3RlZFxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIG9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZChjYWxsYmFjaz86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodHJ1ZSk7XG4gICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICBhd2FpdCBjYWxsYmFjaygpO1xuICAgIHRoaXMub25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJC5uZXh0KCk7XG4gIH1cblxuICAvL0hhbmRsZSBpdGVtIHNlbGVjdGlvbiBjaGFuZ2VkXG4gIHByaXZhdGUgX2hhbmRsZUl0ZW1TZWxlY3Rpb25DaGFuZ2VkKCkge1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmNoYW5nZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoeyBhZGRlZCwgcmVtb3ZlZCB9KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjaGVja0V4aXN0SW5SZXN1bHQgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlIHwgUU1TVHJlZU5vZGUpOiBib29sZWFuID0+IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCkgPiAtMTtcbiAgICAgICAgaWYgKGFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgIGxldCBzZWxlY3RlZE5vZGUgPSBudWxsO1xuXG4gICAgICAgICAgYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGU6IFFNU1RyZWVOb2RlID0gXy5jbG9uZURlZXAodGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkTm9kZSA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKVxuICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xuICAgICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG5lc3RlZE5vZGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgLmZpbmQoeCA9PiB4LmlzR3JvdXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpXG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5jaGlsZENvdW50ID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkubGVuZ3RoO1xuICAgICAgICAgICAgICBjb25zdCBleGlzdEdyb3VwOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHNlbGVjdGVkTm9kZSk7XG5cbiAgICAgICAgICAgICAgaWYgKCEhZXhpc3RHcm91cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsYXRFeGlzdEdyb3VwID0gdGhpcy5nZXROb2RlQnlJZChleGlzdEdyb3VwLmlkKTtcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBleGlzdEdyb3VwLmlkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVzdWx0ID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gZXhpc3RHcm91cC5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwUmVzdWx0ICYmICFncm91cFJlc3VsdC5jaGlsZHJlbi5zb21lKHggPT4geC5pZCA9PT0gbmVzdGVkTm9kZS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgIGdyb3VwUmVzdWx0LmlzR3JvdXAgPSBleGlzdEdyb3VwLmlzR3JvdXA7XG4gICAgICAgICAgICAgICAgICBncm91cFJlc3VsdC5jaGlsZHJlbi5wdXNoKG5lc3RlZE5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgndXBkYXRlZCcsIFtncm91cFJlc3VsdF0pO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbHRlcihpdGVtID0+IGl0ZW0uZGlzYWJsZWQgfHwgIXRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKGZsYXRFeGlzdEdyb3VwKS5tYXAoeCA9PiB4LmlkKS5pbmNsdWRlcyhpdGVtLmlkKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjaGVja0V4aXN0SW5SZXN1bHQobm9kZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2gobmVzdGVkTm9kZSk7XG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdhZGRlZCcsIFtuZXN0ZWROb2RlXSk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVtb3ZlZC5sZW5ndGgpIHtcbiAgICAgICAgICByZW1vdmVkLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcbiAgICAgICAgICAgIGlmIChuZXN0ZWROb2RlLmlzR3JvdXApIHtcbiAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICAgICAgaWYgKCFfaXRlbSkgcmV0dXJuO1xuICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5ncm91cElkID0gbnVsbCk7XG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQuc3BsaWNlKHRoaXMucmVzdWx0U2VsZWN0ZWQuaW5kZXhPZihfaXRlbSksIDEpO1xuICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgncmVtb3ZlZCcsIFtfaXRlbV0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5lc3RlZE5vZGUuZ3JvdXBJZCk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IF9pdGVtID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZS5pZCk7XG4gICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdyZW1vdmVkJywgW19pdGVtXSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5jb25jYXQobm9kZSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNoaWxkTm9kZXNbaV07XG4gICAgICAgICAgICAgIGNvbnN0IF9ub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKVxuICAgICAgICAgICAgICBpZiAoZ3JvdXAuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IF9ub2RlLmlkKSAmJiAhdGhpcy5pc1NlbGVjdGVkTm9kZShfbm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IGdyb3VwLmNoaWxkcmVuLmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XG4gICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uc3BsaWNlKGdyb3VwLmNoaWxkcmVuLmluZGV4T2YoX2l0ZW0pLCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgndXBkYXRlZCcsIFtncm91cF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbWFwVG9SZXN1bHRTZWFyY2goKTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmxlbmd0aCAmJiB0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSB7XG4gICAgICAgICAgLy8gYWRkIHNlbGVjdGVkIG5vZGUgdG8gY2hlY2tlZCBub2RlIGluIHNlYXJjaFxuICAgICAgICAgIGNvbnN0IGZpbmRBbGxDaGlsZHJlbiA9IChwYXJlbnRJZDogc3RyaW5nLCBub2RlczogYW55KTogYW55W10gPT4ge1xuICAgICAgICAgICAgY29uc3QgZm91bmROb2RlID0gZmluZE5vZGVCeUlkKHBhcmVudElkLCBub2Rlcyk7XG4gICAgICAgICAgICBpZiAoIWZvdW5kTm9kZSB8fCAhZm91bmROb2RlPy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm91bmROb2RlPy5jaGlsZHJlbjtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgZmluZE5vZGVCeUlkID0gKGlkOiBzdHJpbmcsIG5vZGVzOiBhbnkpOiBhbnkgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICAgIGlmIChub2RlLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmROb2RlID0gZmluZE5vZGVCeUlkKGlkLCBub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBpZiAoZm91bmROb2RlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9O1xuXG5cbiAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XG4gICAgICAgICAgbGV0IHNlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XG5cbiAgICAgICAgICBpZiAoIXNlbGVjdGVkTGlzdC5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICBsZXQgY2hpbGRyZW5PZkNoZWNrZWROb2RlID0gW107XG4gICAgICAgICAgY2hpbGRyZW5PZkNoZWNrZWROb2RlID0gZmluZEFsbENoaWxkcmVuKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkWzBdLmlkLCB0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG5cblxuICAgICAgICAgIHNlbGVjdGVkTGlzdFswXS5wYXJlbnRJZCA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkWzBdLmlkO1xuICAgICAgICAgIGNoaWxkcmVuT2ZDaGVja2VkTm9kZS51bnNoaWZ0KHNlbGVjdGVkTGlzdFswXSk7XG5cbiAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gY2hpbGRyZW5PZkNoZWNrZWROb2RlLmZpbHRlcigodiwgaSwgYSkgPT4gYS5maW5kSW5kZXgodjIgPT4gWydpZCcsICdwYXJlbnRJZCddLmV2ZXJ5KGsgPT4gdjJba10gPT09IHZba10pKSA9PT0gaSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudChzdGF0ZTogJ3JlbW92ZWQnIHwgJ3VwZGF0ZWQnIHwgJ2FkZGVkJywgZGF0YTogUU1TVHJlZU5vZGVbXSkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcbiAgICAgICAgICByZW1vdmVkOiBkYXRhLFxuICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcbiAgICAgICAgICBzb3VyY2U6IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCB0aGlzLnJlc3VsdFNlbGVjdGVkKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1cGRhdGVkJzpcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XG4gICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgIHVwZGF0ZWQ6IGRhdGEsXG4gICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcbiAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICBhZGRlZDogZGF0YSxcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcbiAgICAgICAgICBzb3VyY2U6IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCB0aGlzLnJlc3VsdFNlbGVjdGVkKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlU2VhcmNoRXZlbnQoKSB7XG4gICAgdGhpcy5zZWFyY2hEZXBhcnRtZW50JFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIHRoaXMucmVzdWx0U2VhcmNoID0gW107XG4gICAgICAgIHRoaXMuQ1VSUkVOVF9QQUdFU0laRSA9IHJlc3VsdC5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy50ZXh0U2VhcmNoU3ViamVjdCQubmV4dCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgbGV0IGxvY2F0aW9uOiBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iW10gPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICAgICAgICAgIGxvY2F0aW9uID0gaXRlbS5wYXRoPy5tYXAoeCA9PiAoeyBuYW1lOiB4IH0gYXMgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikpIHx8IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBub2RlID8gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpIDogW107XG4gICAgICAgICAgICAgIGxvY2F0aW9uID0gcGFyZW50cy5sZW5ndGggPyBwYXJlbnRzLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICAgIH0gYXMgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikpLnJldmVyc2UoKSA6IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWFyY2gucHVzaCh7XG4gICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8ICF0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMuY29uZmlnLmNoZWNrU2VhcmNoTWFwcGluZ1RyZWUgJiYgIW5vZGUsXG4gICAgICAgICAgICAgIGxvY2F0aW9uOiBbXG4gICAgICAgICAgICAgICAgLi4ubG9jYXRpb24sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuY2xlYXJDaGVja0xpc3RTZWxlY3Rpb25TZWFyY2hXaGVuSGFuZGxlKVxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xuICAgICAgICAgIHRoaXMuc2V0SW5kZXhWaWV3KDEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUFjdGl2ZU5vZGVFdmVudCgpIHtcbiAgICB0aGlzLnNjcm9sbFRvTm9kZUV2ZW50JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBzd2l0Y2hNYXAoKHZhbCkgPT4ge1xuICAgICAgY29uc3QgZGVsYXlUaW1pbmcgPSB0aGlzLmdldEluZGV4VmlldyQudmFsdWUgPT09IDEgPyA3MDAgOiAwO1xuICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMCk7XG4gICAgICByZXR1cm4gb2YodmFsKS5waXBlKGRlbGF5KGRlbGF5VGltaW5nKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpO1xuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLm9uU2Nyb2xsSW50b05vZGUocmVzKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHN3aXRjaE1hcCh2YWwgPT4ge1xuICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdmFsO1xuICAgICAgcmV0dXJuIHRpbWVyKDE1MDApO1xuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gJy0tJztcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlRGF0YVRyZWUoZGF0YTogUU1TVHJlZU5vZGVbXSkge1xuICAgIHRoaXMuZ2V0RGF0YVRyZWUkLm5leHQoZGF0YSk7XG4gIH1cblxuICBzZXRMb2FkaW5nU3RhdGVOb2RlKGlzTG9hZGluZzogYm9vbGVhbiwgbm9kZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgIGlmICghbm9kZSlcbiAgICAgIHJldHVybjtcbiAgICBub2RlLmlzTG9hZGluZyA9IGlzTG9hZGluZztcbiAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xuICB9XG5cbiAgb25FeHBhbmROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGlmICghbm9kZT8uZXhwYW5kYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMudHJlZUNvbnRyb2wudG9nZ2xlKG5vZGUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xuICAgICAgbm9kZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcbiAgICB9XG4gICAgdGhpcy5vbkV4cGFuZE5vZGVFdmVudC5lbWl0KG5vZGUpO1xuICB9XG5cbiAgb25PcHRpb25TZWFyY2hTZWxlY3RlZCh2YWx1ZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKHZhbHVlLmlkKTtcbiAgICBpZiAoIWZsYXROb2RlKSByZXR1cm47XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShmbGF0Tm9kZSk7XG4gICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKGZsYXROb2RlLmlkKTtcbiAgfVxuXG4gIG9uQ2hlY2tBbGxSb290VHJlZU5vZGUoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lIHx8ICF0aGlzLmNvbmZpZy5hY3RpdmVTZWxlY3RBbGxOb2RlKVxuICAgICAgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICBpZiAobm9kZS5kaXNhYmxlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi50aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiB4LmRpc2FibGVkKSk7XG4gICAgICByZXR1cm47XG4gICAgfTtcbiAgICB0aGlzLmRlcGFydG1lbnRSb290cy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgaWYgKG5vZGUuZGlzYWJsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5pc0luY2x1ZGVDaGlsZHJlbikge1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiAhdGhpcy5pc1NlbGVjdGVkTm9kZSh4KSlcbiAgICAgICAgICAuZm9yRWFjaCh4ID0+IHRoaXMub25DaGVja05vZGUoeCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpIHtcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgIGlmIChuZXN0ZWROb2RlLmlzR3JvdXAgJiYgdGhpcy5pc0NoZWNrQWxsKG5vZGUpIHx8ICFub2RlLmV4cGFuZGFibGUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSlcbiAgICAgICAgLmZvckVhY2goaXRlbSA9PiAhdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSAmJiB0aGlzLm9uQ2hlY2tOb2RlKGl0ZW0pKTtcbiAgICAgIGlmICghbmVzdGVkTm9kZS5pc0dyb3VwKSB7XG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KG5vZGUpO1xuICAgICAgICB0aGlzLm9uQ2hlY2tOb2RlKG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBtb3ZlVG9Mb2NhdGlvbihub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIHR5cGU6IHN0cmluZykge1xuXG4gICAgY29uc3QgdHJhdmVyc2UgPSAobywgZm4pID0+IHtcbiAgICAgIGZvciAoY29uc3QgayBpbiBvKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGZuLmFwcGx5KHRoaXMsIFtvLCBrXSk7XG5cbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9ba10gIT09IG51bGwgJiYgdHlwZW9mIG9ba10gPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCByZXMgPSB0cmF2ZXJzZShvW2tdLCBmbik7XG4gICAgICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNwbGljZV9zb3VyY2UgPSAob2JqLCBwcmVkaWNhdGUpID0+XG4gICAgICB0cmF2ZXJzZShcbiAgICAgICAgb2JqLFxuICAgICAgICAobywgaykgPT4ge1xuICAgICAgICAgIGxldCBtX2luZGV4ID0gLTE7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1trXSkpIHtcbiAgICAgICAgICAgIG1faW5kZXggPSBvW2tdLmZpbmRJbmRleCgobykgPT4gcHJlZGljYXRlKG8sIGspKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbV9pbmRleCAhPT0gLTEgPyBvW2tdLnNwbGljZShtX2luZGV4LCAxKVswXSA6IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIGNvbnN0IGZpbmRfdGFyZ2V0X2FycmF5ID0gKG9iaiwgcHJlZGljYXRlKSA9PlxuICAgICAgdHJhdmVyc2UoXG4gICAgICAgIG9iaixcbiAgICAgICAgKG8sIGspID0+IChwcmVkaWNhdGUobywgaykgPyBvLmNoaWxkcmVuIDogZmFsc2UpXG4gICAgICApO1xuXG4gICAgY29uc3QgZmluZFBhcmVudCA9IChub2RlSWQsIG5vZGVzKSA9PiB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGlmIChub2RlLmlkID09PSBub2RlSWQpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gZmluZFBhcmVudChub2RlSWQsIG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZExpc3QgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YSh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QpO1xuXG4gICAgaWYgKCFzZWxlY3RlZExpc3QubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xuXG4gICAgY29uc3Qgc291cmNlX2lkID0gc2VsZWN0ZWRMaXN0WzBdLmlkO1xuXG4gICAgLy8gc291cmNlIG11c3QgdG8gaGF2ZSBmb3IgbW92ZW1lbnRcbiAgICB0aGlzLnNvdXJjZV9vYmplY3QgPSBzcGxpY2Vfc291cmNlKHRoaXMuY3VycmVudFRyZWVEYXRhLCAob2JqKSA9PiBvYmo/LmlkID09PSBzb3VyY2VfaWQpO1xuXG4gICAgaWYgKCF0aGlzLnNvdXJjZV9vYmplY3QpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jdXJyZW50VHJlZURhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY3VycmVudFRyZWVEYXRhW2ldO1xuICAgICAgICBpZiAoZWxlbWVudC5pZCA9PT0gc291cmNlX2lkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2Vfb2JqZWN0ID0gZWxlbWVudDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUcmVlRGF0YS5zcGxpY2UoaSwgMSk7O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjaGlsZCc6XG4gICAgICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKT8uY2hpbGRyZW4udW5zaGlmdCh0aGlzLnNvdXJjZV9vYmplY3QpO1xuICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdC5wYXJlbnRJZCA9IG5vZGUuaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0X2FycmF5ID0gZmluZF90YXJnZXRfYXJyYXkodGhpcy5jdXJyZW50VHJlZURhdGEsIChvYmopID0+IG9iaj8uaWQgPT09IG5vZGU/LmlkKTtcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QucGFyZW50SWQgPSBub2RlLmlkO1xuICAgICAgICAgIHRhcmdldF9hcnJheS51bnNoaWZ0KHRoaXMuc291cmNlX29iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3NpYmxpbmcnOlxuICAgICAgICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLmN1cnJlbnRUcmVlRGF0YS5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKSArIDE7XG4gICAgICAgICAgdGhpcy5zb3VyY2Vfb2JqZWN0LnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUcmVlRGF0YS5zcGxpY2UoaWR4LCAwLCB0aGlzLnNvdXJjZV9vYmplY3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRhcmdldF9hcnJheV9wYXJlbnQgPSBmaW5kX3RhcmdldF9hcnJheSh0aGlzLmN1cnJlbnRUcmVlRGF0YSwgKG9iaikgPT4gb2JqPy5pZCA9PT0gcGFyZW50Tm9kZT8uaWQpO1xuICAgICAgICAgIGNvbnN0IG5vZGVfaWR4ID0gdGFyZ2V0X2FycmF5X3BhcmVudC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xuICAgICAgICAgIHRhcmdldF9hcnJheV9wYXJlbnQuc3BsaWNlKG5vZGVfaWR4ICsgMSwgMCwgdGhpcy5zb3VyY2Vfb2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG4gICAgY29uc3QgbmV3TG9jYXRpb24gPSBmaW5kUGFyZW50KHRoaXMuc291cmNlX29iamVjdC5pZCwgdGhpcy5jdXJyZW50VHJlZURhdGEpO1xuXG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBuZXdMb2NhdGlvbjtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICB9XG5cblxuICBvbkNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGZpcmVFdmVudENoZWNrTm9kZTogYm9vbGVhbiA9IHRydWUpIHtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSByZXR1cm47XG5cbiAgICBpZiAoIW5vZGUgfHwgbm9kZS5kaXNhYmxlZClcbiAgICAgIHJldHVybjtcbiAgICBpZiAoZmlyZUV2ZW50Q2hlY2tOb2RlKVxuICAgICAgdGhpcy5vbkNoZWNrTm9kZUV2ZW50LmVtaXQobm9kZSk7XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSkge1xuICAgICAgdGhpcy5faGFuZGxlU2VsZWN0T25lKG5vZGUuaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcubGF6eSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4gJiYgZmlyZUV2ZW50Q2hlY2tOb2RlKSB7XG4gICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZGUuaXNMb2FkaW5nID0gdGhpcy5pc0luY2x1ZGVDaGlsZHJlbjtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4geC5leHBhbmRhYmxlICYmICF4Lm1hcmtlZEdldENoaWxkcmVuKTtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB4LmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdE9uZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGVUcmVlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IG5vZGVJZCk7XG4gICAgY29uc3QgcmVTZWxlY3RTZWxlY3Rpb24gPSAoaWQ6IHN0cmluZywgLi4ucGFyYW1zOiBTZWxlY3Rpb25Nb2RlbDxhbnk+W10pOiB2b2lkID0+IHtcbiAgICAgIHBhcmFtcy5mb3JFYWNoKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgIT0gaWQpO1xuICAgICAgICBzZWxlY3Rpb24uZGVzZWxlY3QoLi4uc2VsZWN0ZWQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICghbm9kZVRyZWUpIHtcbiAgICAgIHRoaXMuZXhlY1dpdGhvdXRFbWl0Tm9kZUNoYW5nZUV2ZW50KCgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbe1xuICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICBleHRlcm5hbE5hbWU6IGl0ZW0uZXh0ZXJuYWxOYW1lLFxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICB9IGFzIFFNU1RyZWVOb2RlXTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgICByZVNlbGVjdFNlbGVjdGlvbihub2RlSWQsIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGVUcmVlKSkge1xuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZSh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKSk7XG4gICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW3sgLi4ubmVzdGVkTm9kZSwgY2hpbGRyZW46IFtdIH1dO1xuICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xuICAgICAgcmVTZWxlY3RTZWxlY3Rpb24obmVzdGVkTm9kZS5pZCwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbXTtcbiAgfVxuXG4gIG9uRXhwYW5kQWxsUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XG4gICAgaWYgKHBhcmVudHM/Lmxlbmd0aCkge1xuICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgIGlmICghdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKHBhcmVudCkpXG4gICAgICAgICAgdGhpcy5vbkV4cGFuZE5vZGUocGFyZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVtb3ZlTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgIGlmICghZmxhdE5vZGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IG5vZGVJZCk7XG4gICAgICBpZiAoIWl0ZW0pXG4gICAgICAgIHJldHVybjtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkTGlzdCgncmVtb3ZlJywgaXRlbSwgdGhpcy5fc2VsZWN0ZWRMaXN0LCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChmbGF0Tm9kZSk7XG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xuICB9XG5cbiAgb25TZWxlY3ROb2RlKC4uLm5vZGVJZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiBub2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcbiAgICBpZiAoIW5vZGVzLmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4ubm9kZXMpO1xuICB9XG5cbiAgb25EZXNlbGVjdE5vZGUoLi4ubm9kZUlkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IG5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xuICAgIGlmICghbm9kZXMubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLm5vZGVzKTtcbiAgfVxuICAvKipcbiAgICogVG9nZ2xlcyBhIHZhbHVlIGJldHdlZW4gc2VsZWN0ZWQgYW5kIGRlc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSBub2RlSWQgOmlkIG9mIG5vZGVcbiAgICovXG4gIG9uVG9nZ2xlTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcbiAgfVxuXG4gIGlzSW5kZXRlcm1pbmF0ZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKGl0ZW0gPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSk7XG4gICAgcmV0dXJuICghIWNoaWxkU2VsZWN0ZWQubGVuZ3RoICYmICF0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKTtcbiAgfVxuXG4gIGlzQ2hlY2tBbGwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgbGlzdENoZWNrID0gWy4uLnRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLCBub2RlXTtcbiAgICByZXR1cm4gbGlzdENoZWNrLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBoYW5kbGUgY2hlY2sgbm9kZSBvZiB0cmVlXG4gICAqIEBwYXJhbSBub2RlIG5vZGUgb2YgdHJlZVxuICAgKiBAcGFyYW0gY2FsbGJhY2sgZG8gc29tZXRoaW5nIGJlZm9yZSBoYW5kbGUgY2hlY2sgbm9kZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgb25CZWZvcmVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBjYWxsYmFjaz86IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrTm9kZSA9IHRydWU7XG4gICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICBhd2FpdCBjYWxsYmFjayhub2RlKTtcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlID0gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XG4gICAgY29uc3QgY2hpbGRTZWxlY3RlZCA9IHRoaXMuZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlKS5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCk7XG4gICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBDaGVjayBleGlzdGVkIGdyb3VwXG4gICAgICBjb25zdCBhbGxQYXJlbk5vZGVJZHMgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSkubWFwKHggPT4geC5pZCk7XG4gICAgICBjb25zdCBleGlzdGVkR3JvdXAgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlzR3JvdXAgJiYgYWxsUGFyZW5Ob2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcblxuICAgICAgaWYgKCF0aGlzLmlzSW5jbHVkZUNoaWxkcmVuKSB7XG4gICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGV4aXN0ZWRHcm91cD8uaWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCk7XG4gICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSAhZXhpc3RlZEdyb3VwICYmICEhY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB7XG4gICAgICAgIGNvbnN0IF9ub2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHgpO1xuICAgICAgICBfbm9kZS5ncm91cElkID0gZXhpc3RlZEdyb3VwID8gZXhpc3RlZEdyb3VwLmlkIDogbm9kZS5pZDtcbiAgICAgICAgX25vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmNoaWxkU2VsZWN0ZWQubWFwKHggPT4gdGhpcy5yZXNldE5vZGUoeCkpKTtcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5jaGlsZHJlbi5tYXAoeCA9PiB0aGlzLnJlc2V0Tm9kZSh4KSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBfc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICBfc2VsZWN0ZWRJbmRleCA+IC0xICYmIHRoaXMuX3NlbGVjdGVkTGlzdC5zcGxpY2UoX3NlbGVjdGVkSW5kZXgsIDEpO1xuICAgIGNvbnN0IGRlc2VsZWN0Tm9kZXMgPSAodGhpcy5pc0luY2x1ZGVDaGlsZHJlbiB8fCBuZXN0ZWROb2RlLmlzR3JvdXApID8gY2hpbGRTZWxlY3RlZCA6IFtub2RlXTtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNlbGVjdE5vZGVzKTtcbiAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIG5vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgaXNTZWxlY3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcbiAgfVxuXG4gIGdldENoaWxkcmVuU2VsZWN0ZWQobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xuICAgIHJldHVybiB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKHgpKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgdGhlIGRhdGEgbm9kZSdzIHN1YnRyZWUgb2YgZGVzY2VuZGVudCBkYXRhIG5vZGVzLlxuICAgKiBAcGFyYW0gbm9kZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlLmlkKTtcbiAgICBpZiAoIWZsYXROb2RlKVxuICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKGZsYXROb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgX21hcFRvTmVzdGVkTGlzdE5vZGUoZmxhdE5vZGVMaXN0OiBRTVNGbGF0Tm9kZVRyZWVbXSk6IFFNU1RyZWVOb2RlW10ge1xuICAgIHJldHVybiBmbGF0Tm9kZUxpc3QubWFwKGl0ZW0gPT4gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pKTtcbiAgfVxuXG4gIGNvbnZlcnRUb05lc3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TVHJlZU5vZGUge1xuICAgIHJldHVybiB0aGlzLmZsYXRUcmVlTm9kZU1hcC5nZXQobm9kZSkgfHwge30gYXMgUU1TVHJlZU5vZGU7XG4gIH1cblxuICBjb252ZXJ0VG9GbGF0Tm9kZShub2RlOiBRTVNUcmVlTm9kZSkge1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFRyZWVOb2RlTWFwLmdldChub2RlKTtcbiAgfVxuXG4gIGdldEFsbFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xuICAgIGNvbnN0IGxpc3RQYXJlbnQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gW107XG4gICAgbGV0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBsaXN0UGFyZW50LnB1c2gocGFyZW50KTtcbiAgICAgIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdFBhcmVudDtcbiAgfVxuXG4gIGdldFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xuICAgIGlmIChjdXJyZW50TGV2ZWwgPCAxKSByZXR1cm47XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xuICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZ2V0SXRlbUljb25UeXBlKGl0ZW06IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgIGlmICghIWl0ZW0uaXRlbU1hdEljb24pIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5uYW1lO1xuICAgIGlmICghIWl0ZW0uaXRlbUljb25TdmcpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5zdmc7XG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnBhdGg7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNjcm9sbEludG9Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlSWQpIHJldHVybjtcbiAgICB0aGlzLm9uRXhwYW5kTm9kZShmbGF0Tm9kZSk7XG4gICAgdGhpcy5vbkV4cGFuZEFsbFBhcmVudChmbGF0Tm9kZSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBmbGF0Tm9kZS5pZCk7XG4gICAgaWYgKCF0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnc21vb3RoJyk7XG4gICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLm5leHQobm9kZUlkKTtcbiAgfVxuXG4gIG9uU2VhcmNoKCkge1xuICAgIGlmICghdGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSB8fCB0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlPy50cmltKCkgPT09ICcnKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnNldEluZGV4VmlldygxKTtcbiAgICB0aGlzLm9uU2VhcmNoRXZlbnQuZW1pdCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcbiAgICBpZiAoIXRoaXMucGFnaW5hdG9yU2VhcmNoKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMucGFnaW5hdG9yU2VhcmNoLmNoYW5nZVBhZ2UoMCk7XG4gICAgdGhpcy5wYWdpbmF0b3JTZWFyY2gucmVuZGVyRGlzcGxheU51bWJlck9mcGFnZXMoKTtcbiAgfVxuXG4gIHNldFJlc3VsdFNlYXJjaChkYXRhOiBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPikge1xuICAgIHRoaXMuc2VhcmNoRGVwYXJ0bWVudCQubmV4dChkYXRhKTtcbiAgfVxuXG4gIG9uQ2xpY2tSZXN1bHRJdGVtKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgIGlmIChub2RlKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvTm9kZShub2RlLmlkKTtcbiAgICB9XG4gIH1cblxuICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgIGlmIChub2RlKSB7XG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcbiAgICAgIG9mKG5vZGUuaWQpLnBpcGUoZGVsYXkoNzAwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLm9uU2Nyb2xsSW50b05vZGUocmVzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hlY2tJdGVtU2VhcmNoUmVzdWx0KGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xuICAgIGlmIChpdGVtLmRpc2FibGVkKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnRvZ2dsZShpdGVtKTtcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KC4uLnRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgIT0gaXRlbS5pZCkpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hlY2tJdGVtU2VhcmNoRXZlbnQuZW1pdChcbiAgICAgIHtcbiAgICAgICAgc3RhdGU6IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSksXG4gICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2gpIHtcbiAgICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgfVxuXG4gIGFzeW5jIG9uQmVmb3JlQ2hlY2tJdGVtU2VhcmNoKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCwgY2FsbGJhY2s/OiAoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgIGl0ZW0uaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoID0gdHJ1ZTtcbiAgICAvLyBob2xkIHN0YXRlIGJlZm9yZSBjYWxsIG1ldGhvZCBjYWxsYmFjayB0byBwcmV2ZW50IGxvc3QgaXQncyBzdGF0ZSB1bmV4cGVjdGVkXG4gICAgY29uc3QgaXNTZWxlY3QgPSB0aGlzLmlzU2VsZWN0SXRlbVNlYXJjaChpdGVtLmlkKTtcbiAgICBpZiAoISFjYWxsYmFjaylcbiAgICAgIGF3YWl0IGNhbGxiYWNrKGl0ZW0pO1xuICAgIGl0ZW0uaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSwgaXNTZWxlY3QpO1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrSXRlbVNlYXJjaCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgb25CZWZvcmVDaGVja0FsbFNlYXJjaChjYWxsYmFjaz86IChkYXRhKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaCA9IHRydWU7XG4gICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICBhd2FpdCBjYWxsYmFjayh0aGlzLnJlc3VsdFNlYXJjaCk7XG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrQWxsU2VhcmNoID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXG4gICAgICByZXR1cm47XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VhcmNoW2ldO1xuICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgY2FuSGFuZGxlSXRlbVNlYXJjaFJlc3VsdChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpIHtcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuc29tZShub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQpIHx8IHRoaXMuY29uZmlnLmxhenk7XG4gIH1cblxuICBwcml2YXRlIF9tYXBUb1Jlc3VsdFNlYXJjaCgpIHtcbiAgICBpZiAoISF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXG4gICAgICB0aGlzLnJlc3VsdFNlYXJjaC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpc0V4aXN0SW5SZXN1bHRTZWxlY3RlZCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQ/LnNvbWUoeCA9PiB4LmlkID09PSBpdGVtLmlkIHx8IHguY2hpbGRyZW4/LnNvbWUoeSA9PiB5LmlkID09PSBpdGVtLmlkKSk7XG4gICAgICAgIGlzRXhpc3RJblJlc3VsdFNlbGVjdGVkID8gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pIDogdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCwgc3RhdGU6IGJvb2xlYW4gPSB0aGlzLmlzU2VsZWN0SXRlbVNlYXJjaChpdGVtLmlkKSkge1xuICAgIGl0ZW0uaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQudG9TdHJpbmcoKSk7XG4gICAgaWYgKCEhY3VycmVudE5vZGUpIHtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSlcbiAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoY3VycmVudE5vZGUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGN1cnJlbnROb2RlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlnLmlzU2VsZWN0T25lID8gdGhpcy5faGFuZGxlU2VsZWN0T25lKGN1cnJlbnROb2RlLmlkKSA6IHRoaXMuaGFuZGxlQ2hlY2tOb2RlKGN1cnJlbnROb2RlKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcbiAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdE9uZShpdGVtLmlkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KHN0YXRlID8gJ2FkZCcgOiAncmVtb3ZlJywgaXRlbSwgdGhpcy5fc2VsZWN0ZWRMaXN0LCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgfVxuXG4gIGlzU2VsZWN0SXRlbVNlYXJjaChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLnNvbWUoeCA9PiB4LmlkID09PSBpZCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVTZWxlY3RlZExpc3Qoc3RhdGU6ICdhZGQnIHwgJ3JlbW92ZScsIGl0ZW06IFFNU1RyZWVOb2RlLCAuLi5zZWxlY3RlZExpc3RzOiBRTVNUcmVlTm9kZVtdW10pIHtcbiAgICBpZiAoIWl0ZW0pXG4gICAgICByZXR1cm47XG4gICAgc2VsZWN0ZWRMaXN0cy5mb3JFYWNoKHNlbGVjdGVkTGlzdCA9PiB7XG4gICAgICBjb25zdCBpdGVtRXhpc3RlZCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgICAgaWYgKGl0ZW0uZ3JvdXBJZCkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBzZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uZ3JvdXBJZCk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwICYmICFpdGVtRXhpc3RlZCkge1xuICAgICAgICAgICAgICBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICFncm91cC5jaGlsZHJlbi5zb21lKHggPT4geC5pZCA9PT0gaXRlbS5pZCkgJiYgZ3JvdXAuY2hpbGRyZW4ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgIWl0ZW1FeGlzdGVkICYmIHNlbGVjdGVkTGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZW1vdmUnOlxuICAgICAgICAgIGlmICghaXRlbUV4aXN0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmNoaWxkcmVuLnNvbWUoeDEgPT4geDEuaWQgPT09IGl0ZW0uaWQpKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXApXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBncm91cC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxlY3RlZExpc3Quc3BsaWNlKHNlbGVjdGVkTGlzdC5pbmRleE9mKGl0ZW1FeGlzdGVkKSwgMSk7XG4gICAgICAgICAgY29uc3QgaXRlbVNlbGVjdGlvblNlYXJjaCA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBpdGVtRXhpc3RlZC5pZCk7XG4gICAgICAgICAgaXRlbVNlbGVjdGlvblNlYXJjaCAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdChpdGVtU2VsZWN0aW9uU2VhcmNoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgb25TZWxlY3RBbGxTZWFyY2hSZXN1bHQoY2hlY2tlZCkge1xuICAgIGNoZWNrZWQgPSAhY2hlY2tlZDtcbiAgICBpZiAoIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5jb25maWcuaGFuZGxlQ2hlY2tBbGxJdGVtU2VhcmNoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlYXJjaFtpXTtcbiAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgY29uc3QgY2FuU2VsZWN0ID0gKCEhdHJlZU5vZGUgfHwgdGhpcy5jb25maWcubGF6eSk7XG4gICAgICAgICAgaWYgKCFjYW5TZWxlY3QpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAhdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3QoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgX2l0ZW1TZWxlY3Rpb25zID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgaWYgKF9pdGVtU2VsZWN0aW9ucy5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdCguLi5faXRlbVNlbGVjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSB8fCAhdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrQWxsU2VhcmNoKVxuICAgICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGNoZWNrZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQuZW1pdChjaGVja2VkKTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIGlzRGlzYWJsZUNoZWNib3hBbGxTZWFyY2goKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0U2VhcmNoICYmIHRoaXMucmVzdWx0U2VhcmNoLmV2ZXJ5KHggPT4geC5kaXNhYmxlZCk7XG4gIH1cblxuICBvblBhZ2luZ1NlYXJjaFJlc3VsdCh2YWw6IFBhZ2VFdmVudCkge1xuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9uUGFnaW5nU2VhcmNoRXZlbnQuZW1pdCh2YWwpO1xuICB9XG5cbiAgc2Nyb2xsVG9Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zY3JvbGxUb05vZGVFdmVudCQubmV4dChub2RlSWQpO1xuICB9XG5cbiAgc2V0SW5kZXhWaWV3KGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoaW5kZXggPT09IDEgJiYgdGhpcy5jb25maWcucmVzZXRUb2dnbGVJbmNsdWRlQ2hpbGRXaGVuQ2hhbmdlVmlldykge1xuICAgICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmdldEluZGV4VmlldyQubmV4dChpbmRleCk7XG4gIH1cblxuICBjYW5BY3RpdmVOb2RlRXh0ZXJuYWwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xuICAgIHJldHVybiAhYWxsUGFyZW50IHx8IGFsbFBhcmVudC5ldmVyeShpdGVtID0+IHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChpdGVtKSk7XG4gIH1cblxuICBnZXRIZWlnaHRTdHlsZVJlZk5vZGUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub2RlRWxlID0gdGhpcy5lbGVSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAubWF0LXRyZWUtbm9kZSNtYXQtbm9kZS0ke25vZGVJZH1gKSBhcyBFbGVtZW50O1xuICAgIHJldHVybiBgJHtub2RlRWxlPy5jbGllbnRIZWlnaHQgfHwgMH1weGA7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkTm9kZVN0b3JhZ2UoKTogUU1TRmxhdE5vZGVUcmVlIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VsZWN0ZWROb2RlJykpIGFzIFFNU0ZsYXROb2RlVHJlZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWROb2RlU3RvcmFnZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuICYmIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3RlZE5vZGUnLCBKU09OLnN0cmluZ2lmeShub2RlKSk7XG4gIH1cblxuICBzZXREZWZhdWx0UGFnaW5hdG9yU2l6ZShvcHRpb25zOiBudW1iZXJbXSkge1xuICAgIHRoaXMuUEFHRV9TSVpFX09QVElPTiA9IG9wdGlvbnM7XG4gIH1cblxuICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICAvKipcbiAgICAgICAqIFRoaXMgZnVuY3Rpb24gdXNlIGZvciBsYXp5IGxvYWQgY2hpbGRyZW4gb2Ygbm9kZVxuICAgICAgICogQHBhcmFtIG5vZGUgbm9kZSB1cGRhdGUuIGlmIG5vZGUgaXMgbnVsbCBkYXRhIGF1dG8gaW5zZXJ0IGFzIHJvb3RzXG4gICAgICAgKiBAcGFyYW0gZGF0YSBsaXN0IGNoaWxkcmVuIHRvIHVwZGF0ZSBub2RlLlxuICAgICAgICogQHBhcmFtIG1vZGUgZGVmYXVsdCBpcyB1cGRhdGUgdGhhdCByZXBsYWNlIGN1cnJlbnQgbGlzdCBjaGlsZHJlbiBieSBuZXcgbGlzdCBjaGlsZHJlbiAsIGlmIG1vZGUgPSAnaW5zZXJ0JyB3aWxsIGluc2VydCBuZXcgdmFsdWVzIHRvIGxpc3QgY2hpbGRyZW4gZXhpc3RlZCBiZWZvcmUuXG4gICovXG4gIHVwZGF0ZUNoaWxkT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSwgZGF0YTogUU1TRmxhdE5vZGVUcmVlW10gPSBbXSwgbW9kZTogJ2luc2VydCcgfCAndXBkYXRlJyA9ICd1cGRhdGUnKSB7XG4gICAgbm9kZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xuICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgY29uc3QgZGF0YU5vZGVzID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoZGF0YSkuZmlsdGVyKHggPT4geC5wYXJlbnRJZCA9PT0gbm9kZS5pZCk7XG4gICAgaWYgKCFuZXN0ZWROb2RlKVxuICAgICAgcmV0dXJuO1xuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgY2FzZSAnaW5zZXJ0JzpcbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbi5wdXNoKC4uLmRhdGFOb2Rlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IGRhdGFOb2RlcztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xuICAgIGNvbnN0IF9ub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlLmlkKTtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMoX25vZGUpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWxlY3RlZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWRbaV07XG4gICAgICB0aGlzLl9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUoaXRlbS5pZCk7XG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmdldERlc2NlbmRhbnRzT2ZOb2RlKGl0ZW0pO1xuICAgICAgaWYgKCFkZXNjZW5kYW50cy5sZW5ndGgpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkZXNjZW5kYW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGRlc2NlbmRhbnRzW2pdO1xuICAgICAgICB0aGlzLl9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUoY2hpbGQuaWQpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dChbX25vZGUsIC4uLm5vZGVzXSk7XG4gIH1cblxuICAvL3JlLXNlbGVjdCB3aGVuIHVwZGF0ZSBjaGlsZHJlbiBvZiBub2RlXG4gIHByaXZhdGUgX3JlVXBkYXRlU2VsZWN0aW9uTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlIHx8IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgZXhpc3RJblNlbGVjdGlvbiA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09IG5vZGUuaWQpO1xuICAgIGlmIChleGlzdEluU2VsZWN0aW9uKVxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZXhpc3RJblNlbGVjdGlvbik7XG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICB9XG5cbiAgY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xuICAgIGlmICghYWxsUGFyZW50Lmxlbmd0aClcbiAgICAgIHJldHVybjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFBhcmVudC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcGFyZW50ID0gYWxsUGFyZW50W2ldO1xuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKHBhcmVudCk7XG4gICAgICBwYXJlbnQuaXNMb2FkaW5nID0gZGVzY2VuZGFudHMuc29tZSh4ID0+IHguaXNMb2FkaW5nKTtcbiAgICB9XG4gIH1cblxuICBnZXROb2RlQnlJZChpZDogc3RyaW5nKTogUU1TRmxhdE5vZGVUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGlkKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRSb290T2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xuICAgIGlmICghYWxsUGFyZW50Lmxlbmd0aClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGFsbFBhcmVudC5wb3AoKTtcbiAgfVxuXG4gIGFkZFJvb3RUcmVlKGRhdGE6IFFNU0ZsYXROb2RlVHJlZVtdID0gW10pIHtcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoIWRhdGEubGVuZ3RoKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IHRyZWVOb2RlRGF0YSA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKGRhdGEpO1xuICAgIC8vIHJlLWNoZWNrIHJvb3Qgd2FzIGV4aXN0ZWQgaW4gdHJlZVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJlZU5vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gdHJlZU5vZGVEYXRhW2ldO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgICBpZiAoISFub2RlICYmIG5vZGUuZXhwYW5kYWJsZSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbjtcbiAgICAgICAgbmVzdGVkTm9kZS5tYXJrZWRHZXRDaGlsZHJlbiA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghbm9kZSlcbiAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEucHVzaChpdGVtKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgZ2V0Q2hlY2tlZFN0YXR1c05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XG4gIH1cblxuICB1cGRhdGVOb2RlSW5mb3JtYXRpb24obm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgbGV0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgaWYgKCFuZXN0ZWROb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmVzdGVkTm9kZS5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xuICAgIG5lc3RlZE5vZGUubmFtZSA9IG5vZGUubmFtZTtcbiAgICBuZXN0ZWROb2RlLml0ZW1JY29uID0gbm9kZS5pdGVtSWNvbjtcbiAgICBuZXN0ZWROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcbiAgICBuZXN0ZWROb2RlLnNlbGVjdGVkQ2hpbGRDb3VudCA9IG5vZGUuc2VsZWN0ZWRDaGlsZENvdW50O1xuICAgIG5lc3RlZE5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmUgPSBub2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlO1xuICAgIG5lc3RlZE5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZCA9IG5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZDtcbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdGVkUmVzdWx0RGF0YShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICBjb25zdCBub2RlUmVzdWx0ID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKCh4KSA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICBpZiAobm9kZVJlc3VsdCkge1xuICAgICAgbm9kZVJlc3VsdC5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xuICAgICAgbm9kZVJlc3VsdC5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcbiAgICB9XG4gIH1cblxuICBjYWxsQ2hlY2tOb2RlT3V0c2lkZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgLy90aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhlY1dpdGhvdXRFbWl0Tm9kZUNoYW5nZUV2ZW50KGFjdGlvbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMubG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSA9IHRydWU7XG4gICAgYWN0aW9uKCk7XG4gICAgdGhpcy5sb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7XG4gIH1cblxuICBpc0Rpc2FibGVkTm9kZSA9IChub2RlSWQ6IHN0cmluZykgPT4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT0gbm9kZUlkKT8uZGlzYWJsZWQ7XG59XG4iXX0=
1321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWtCLE1BQU0sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN00sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUs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R0FBRyxLQUFLLENBQUM7SUFDekMsQ0FBQzs7O1lBdDRDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtnQkFDdEMsb3hoQkFBc0Q7Z0JBRXRELFVBQVUsRUFBRTtvQkFDVix1QkFBdUI7aUJBQ3hCO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNoRDs7O1lBdENrRSxpQkFBaUI7WUFLM0UsWUFBWTtZQU9aLHNCQUFzQjtZQVZ0QixlQUFlO1lBRnlFLFVBQVU7WUFXbEcsdUJBQXVCO1lBZHZCLE9BQU87WUFHcUosZ0JBQWdCO1lBcUI1SyxvQ0FBb0M7OzsyQkFzQjFDLEtBQUs7cUJBR0wsS0FBSztxQkFDTCxLQUFLOzJCQUNMLEtBQUs7NEJBZ0JMLE1BQU07a0NBQ04sTUFBTTtpQ0FDTixNQUFNO3VDQUNOLE1BQU07K0JBQ04sTUFBTTtnQ0FDTixNQUFNOzhCQUNOLE1BQU07cUNBQ04sTUFBTTt3Q0FDTixNQUFNO3NDQUNOLE1BQU07dUNBRU4sU0FBUyxTQUFDLHdCQUF3Qjs4QkFDbEMsU0FBUyxTQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgbWFwLCBwYWlyd2lzZSwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBRTVNGbGF0Tm9kZVRyZWUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1mbGF0LW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLXRyZWUtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uU2l6ZSwgUU1TUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcW1zLXBhZ2luYXRvcic7XHJcbmltcG9ydCB7IEl0ZW1JY29uVHlwZSB9IGZyb20gJy4uL3JlbGF0ZWQvY29tbW9uL2l0ZW0taWNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBbmltYXRpb25UcmVlRGVwYXJ0bWVudCB9IGZyb20gJy4vYW5pbWF0aW9uL2FuaW1hdGlvbic7XHJcbmltcG9ydCB7IE1vZGVEZXBhcnRtZW50VHJlZWVWaWV3RW51bSB9IGZyb20gJy4vZW51bS9tb2RlLWRlcGFydG1lbnQtdHJlZS12aWV3LmVudW0nO1xyXG5pbXBvcnQgeyBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWwgfSBmcm9tICcuL21vZGVsL2RlcGFydG1lbnQtcGFnaW5nLm1vZGVsJztcclxuaW1wb3J0IHsgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYiwgRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50LXNlYXJjaC1yZXN1bHQubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZyB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb25maWcnO1xyXG5pbXBvcnQgeyBJU2VsZWN0aW9uTm9kZUNoYW5nZSB9IGZyb20gJy4vbW9kZWwvc2VsZWN0aW9uLWNoYW5nZS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLWdsb2JhbC5zZXJ2aWNlJztcclxuXHJcbmludGVyZmFjZSBJSGFuZGxpbmdFdmVudExhenkge1xyXG4gIGNoZWNrQWxsU2VhcmNoOiBib29sZWFuO1xyXG4gIGNoZWNrSXRlbVNlYXJjaDogYm9vbGVhbjtcclxuICBjaGVja05vZGU6IGJvb2xlYW47XHJcbiAgZXhwYW5kOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Ftcy1zZWxlY3QtZGVwYXJ0bWVudC10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIEFuaW1hdGlvblRyZWVEZXBhcnRtZW50XHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcclxuICBMQU5HOiBhbnk7XHJcbiAgcmVhZG9ubHkgc3Bpbm5lckFyciA9IG5ldyBBcnJheSgxMikuZmlsbCgwKTtcclxuICBhcnJTa2VsZXRvbiA9IG5ldyBBcnJheSg2KS5maWxsKDApO1xyXG4gIEBJbnB1dCgpIHNldCByb3dzU2tlbGV0b24odmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5hcnJTa2VsZXRvbiA9IG5ldyBBcnJheSh2YWx1ZSkuZmlsbCgwKTtcclxuICB9XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSAnNTB2aCc7XHJcbiAgQElucHV0KCkgY29uZmlnOiBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZyA9IG5ldyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZygpO1xyXG4gIEBJbnB1dCgpIG1heFdpZHRoTm9kZTogbnVtYmVyID0gNjUwO1xyXG4gIGlzSW5jbHVkZUNoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IGRlcGFydG1lbnRSb290cygpIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcihub2RlID0+IG5vZGUubGV2ZWwgPT09IDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy50cmVlQ29udHJvbCAmJiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5ldmVyeShub2RlID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzSW5kZXRlcm1pbmF0ZUNoZWNrYm94QWxsVHJlZSgpIHtcclxuICAgIHJldHVybiAhdGhpcy5pc0FsbERlcGFydG1lbnRTZWxlY3RlZCAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgb25QYWdpbmdTZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1RyZWVOb2RlW10+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNlbGVjdGlvbk5vZGVDaGFuZ2U8UU1TVHJlZU5vZGU+PigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoZWNrTm9kZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNGbGF0Tm9kZVRyZWU+KCk7XHJcbiAgQE91dHB1dCgpIG9uRXhwYW5kTm9kZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNGbGF0Tm9kZVRyZWU+KCk7XHJcbiAgQE91dHB1dCgpIG9uTG9hZE1vcmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25DaGVja0l0ZW1TZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGF0ZTogYm9vbGVhbiwgaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsIH0+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIHRvZ2dsZUluY2x1ZGVDaGlsZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5hdG9yU2VhcmNoJykgcGFnaW5hdG9yU2VhcmNoOiBRTVNQYWdpbmF0b3JDb21wb25lbnQ7XHJcblxyXG4gIHJlYWRvbmx5IE1PREVfVklFV19FTlVNID0gTW9kZURlcGFydG1lbnRUcmVlZVZpZXdFbnVtO1xyXG4gIElURU1fU0laRSA9IDUwO1xyXG4gIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHJlc3VsdFNlYXJjaFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XHJcbiAgcmVzdWx0U2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuICByZWFkb25seSBnZXREYXRhVHJlZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU1RyZWVOb2RlW10+KFtdKTtcclxuICByZWFkb25seSBzZWFyY2hEZXBhcnRtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4+KG5ldyBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPigpKTtcclxuICByZXN1bHRTZWFyY2g6IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbFtdID0gW107XHJcblxyXG4gIGdldCBjdXJyZW50VHJlZURhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXREYXRhVHJlZSQuZ2V0VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1NlbGVjdEFsbFJlc3VsdFNlYXJjaCgpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGggJiYgdGhpcy5yZXN1bHRTZWFyY2guZXZlcnkoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcclxuICB9XHJcblxyXG4gIGdldCBpbmRldGVybWluYXRlU2VhcmNoUmVzdWx0KCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoICYmICEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoICYmIHRoaXMucmVzdWx0U2VhcmNoLnNvbWUoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGdldEluZGV4VmlldyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgc2Nyb2xsVG9Ob2RlRXZlbnQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHJlYWRvbmx5IGdldEFjdGl2ZU5vZGVFdmVudCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgYWN0aXZlTm9kZTogc3RyaW5nID0gJy0tJztcclxuXHJcbiAgcmVhZG9ubHkgUEFHSU5BVElPTl9TSVpFID0gUGFnaW5hdGlvblNpemU7XHJcbiAgUEFHRV9TSVpFX09QVElPTjogbnVtYmVyW10gPSBbNSwgMTAsIDE1LCAyMCwgMjUsIDEwMF07XHJcbiAgQ1VSUkVOVF9QQUdFU0laRTogbnVtYmVyID0gMTA7XHJcbiAgcmVhZG9ubHkgbmVzdGVkVHJlZU5vZGVNYXAgPSBuZXcgTWFwPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+KCk7XHJcbiAgcmVhZG9ubHkgZmxhdFRyZWVOb2RlTWFwID0gbmV3IE1hcDxRTVNGbGF0Tm9kZVRyZWUsIFFNU1RyZWVOb2RlPigpO1xyXG4gIHJlYWRvbmx5IGNoZWNrTGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxRTVNGbGF0Tm9kZVRyZWU+KHRydWUpO1xyXG4gIHJlYWRvbmx5IGNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWw+KHRydWUpO1xyXG4gIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8UU1TRmxhdE5vZGVUcmVlPjtcclxuICB0cmVlRmxhdHRlbmVyOiBNYXRUcmVlRmxhdHRlbmVyPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xyXG4gIGRhdGFTb3VyY2U6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcclxuXHJcbiAgZGF0YVNvdXJjZVRyZWVTZWFyY2g6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcclxuICBwcml2YXRlIF9zZWxlY3RlZExpc3Q6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkID0gbmV3IFN1YmplY3Q8UU1TRmxhdE5vZGVUcmVlW10+KCk7XHJcblxyXG4gIGZvcm1TZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICByZWFkb25seSBnZXRMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5IGdldExvYWRpbmdNb3JlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgcmVhZG9ubHkgdW50aWxEZXN0cm95TG9hZE1vcmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICByZWFkb25seSBvbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcmVhZG9ubHkgdGV4dFNlYXJjaFN1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcclxuICBpdGVtSWNvblR5cGUgPSBJdGVtSWNvblR5cGU7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdHJhbnNmb3JtZXIgPSAobm9kZTogUU1TVHJlZU5vZGUsIGxldmVsOiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5jb252ZXJ0VG9GbGF0Tm9kZShub2RlKSB8fCBuZXcgUU1TRmxhdE5vZGVUcmVlKCk7XHJcbiAgICBmbGF0Tm9kZS5pZCA9IG5vZGUuaWQ7XHJcbiAgICBmbGF0Tm9kZS5uYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgZmxhdE5vZGUuZXhwYW5kYWJsZSA9IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgKCEhbm9kZS5jaGlsZENvdW50KSB8fCBub2RlLmV4cGFuZGFibGU7XHJcbiAgICBmbGF0Tm9kZS5sZXZlbCA9IGxldmVsO1xyXG4gICAgZmxhdE5vZGUucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xyXG4gICAgZmxhdE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XHJcbiAgICBmbGF0Tm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XHJcbiAgICBmbGF0Tm9kZS5pdGVtSWNvblN2ZyA9IG5vZGUuaXRlbUljb25Tdmc7XHJcbiAgICBmbGF0Tm9kZS5pc0ZpbGUgPSBub2RlLmlzRmlsZTtcclxuICAgIGZsYXROb2RlLmRpc2FibGVkID0gbm9kZS5kaXNhYmxlZDtcclxuICAgIGZsYXROb2RlLmlzR3JvdXAgPSBub2RlLmlzR3JvdXA7XHJcbiAgICBmbGF0Tm9kZS5ncm91cElkID0gbm9kZS5ncm91cElkO1xyXG4gICAgZmxhdE5vZGUuZXh0ZXJuYWxOYW1lID0gbm9kZS5leHRlcm5hbE5hbWU7XHJcbiAgICBmbGF0Tm9kZS5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xyXG4gICAgZmxhdE5vZGUuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XHJcbiAgICBmbGF0Tm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZSA9IG5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmU7XHJcbiAgICBmbGF0Tm9kZS5pc0luY2x1ZGVDaGlsZFdoZW5DaGVja2VkID0gbm9kZS5pc0luY2x1ZGVDaGlsZFdoZW5DaGVja2VkO1xyXG4gICAgZmxhdE5vZGUuZXhwYW5kSWNvbiA9IG5vZGUuZXhwYW5kSWNvbjtcclxuXHJcbiAgICB0aGlzLmZsYXRUcmVlTm9kZU1hcC5zZXQoZmxhdE5vZGUsIG5vZGUpO1xyXG4gICAgdGhpcy5uZXN0ZWRUcmVlTm9kZU1hcC5zZXQobm9kZSwgZmxhdE5vZGUpO1xyXG4gICAgcmV0dXJuIGZsYXROb2RlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBnZXRMZXZlbCA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGU/LmxldmVsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2dldENoaWxkID0gKG5vZGU6IFFNU1RyZWVOb2RlKSA9PiBub2RlLmNoaWxkcmVuO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNFeHBhbmRhYmxlID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsaW5nTGF6eU9iamVjdDogSUhhbmRsaW5nRXZlbnRMYXp5ID0ge1xyXG4gICAgY2hlY2tBbGxTZWFyY2g6IGZhbHNlLFxyXG4gICAgY2hlY2tJdGVtU2VhcmNoOiBmYWxzZSxcclxuICAgIGNoZWNrTm9kZTogZmFsc2UsXHJcbiAgICBleHBhbmQ6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTtcclxuICBzb3VyY2Vfb2JqZWN0ID0ge30gYXMgUU1TVHJlZU5vZGU7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxyXG4gICAgcHJpdmF0ZSBlbGVSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwdWJsaWMgdHJhbnM6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgcHVibGljIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgdHJlZURlcGFydG1lbnRTZXJ2aWNlOiBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUdsb2JhbFNlcnZpY2VcclxuICApIHtcclxuICAgIC8vIEluaXQgdHJlZSBkYXRhXHJcbiAgICB0aGlzLmdldERhdGFUcmVlJFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSlcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gUmVnaXN0ZXIgaWNvblxyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEZXZpYXRpb25JY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclJpc2tJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuXHJcbiAgICB0aGlzLnRyYW5zLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnMuZ2V0T2JqZWN0TGFuZyhyZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2hhbmRsZVNlYXJjaEV2ZW50KCk7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3RpdmVOb2RlRXZlbnQoKTtcclxuICAgIHRoaXMuX2hhbmRsZUl0ZW1TZWxlY3Rpb25DaGFuZ2VkKCk7XHJcblxyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHJlcyA9PiB7XHJcbiAgICAgICAgcmVzID8gdGhpcy5mb3JtU2VhcmNoQ29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1TZWFyY2hDb250cm9sLmVuYWJsZSgpO1xyXG4gICAgICB9KSkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRJbmRleFZpZXckLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLm5nVW5zdWJzY3JpYmUsIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkKSksXHJcbiAgICAgIHRhcChfID0+IHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodGhpcy5jb25maWcubGF6eSkpLFxyXG4gICAgICBkZWxheSg3MDApLFxyXG4gICAgICB0YXAodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMClcclxuICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2VcclxuICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJCksXHJcbiAgICAgICAgICAgICAgICBtYXAoXyA9PiB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSksXHJcbiAgICAgICAgICAgICAgICBwYWlyd2lzZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKChbeDEsIHgyXSkgPT4geDEgPiB4MiAmJiB4MiA8IDE0MCksXHJcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVRpbWUoMjAwKSxcclxuICAgICAgICAgICAgICAgIHRhcChfID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TG9hZGluZ01vcmUkLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlc3Ryb3lMb2FkTW9yZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZE1vcmVFdmVudC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLm9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHRhcChfID0+IHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVMaXN0U2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcclxuICAgICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gPSB0aGlzLmNvbmZpZy5pc0luY2x1ZGVDaGlsZHJlbjtcclxuICAgIHRoaXMuX2luaXRUcmVlRGF0YSgpO1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUxpc3RTZWxlY3RlZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL2FjdGlvbiBmb3IgbGF6eSBjb25maWdcclxuICAgIHRoaXMuX2luaXRMaXN0U2VsZWN0ZWQoKTtcclxuICAgIHRoaXMuX2hhbmRsZUFmdGVyRGF0YU5vZGVDaGFuZ2VFdmVudCgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25EZXN0cm95TG9hZE1vcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5uZXh0KCk7XHJcbiAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFRyZWVEYXRhKCkge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8UU1TRmxhdE5vZGVUcmVlPih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XHJcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcih0aGlzLl90cmFuc2Zvcm1lciwgdGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUsIHRoaXMuX2dldENoaWxkKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0ICYmIHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdC5sZW5ndGggPT09IDEgJiYgIXRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdFswXS5pZCkge1xyXG4gICAgICB0aGlzLmNvbmZpZy50cmVlRGF0YS5wdXNoKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgX3RyZWVEYXRhSW5wdXQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gXy5jbG9uZURlZXAodGhpcy5jb25maWcudHJlZURhdGEpXHJcblxyXG4gICAgaWYgKCFfdHJlZURhdGFJbnB1dC5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGNvbnN0IHRyZWVEYXRhID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoX3RyZWVEYXRhSW5wdXQpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodHJlZURhdGEpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUxpc3RTZWxlY3RlZCgpIHtcclxuICAgIGlmICghdGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0Lmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgdHJlZU5vZGVzID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0Lm1hcCh4ID0+ICh7IC4uLngsIHBhcmVudElkOiB4Lmdyb3VwSWQgfSkpKTtcclxuXHJcbiAgICB0aGlzLmV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXM6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuICAgICAgY29uc3QgcmVNYXBUcmVlTm9kZSA9IChpdGVtOiBRTVNUcmVlTm9kZSwgY2xlYXJHcm91cElkOiBib29sZWFuID0gZmFsc2UpID0+IHtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT0gaXRlbS5pZCk7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgICBub2RlLmdyb3VwSWQgPSBpdGVtLmdyb3VwSWQ7XHJcbiAgICAgICAgbm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4ubmVzdGVkTm9kZSxcclxuICAgICAgICAgIGdyb3VwSWQ6IGNsZWFyR3JvdXBJZCA/IG51bGwgOiBpdGVtLmdyb3VwSWQsXHJcbiAgICAgICAgICBpc0dyb3VwOiBpdGVtLmlzR3JvdXAsXHJcbiAgICAgICAgICBjaGlsZENvdW50OiBuZXN0ZWROb2RlLmNoaWxkQ291bnQgPz8gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkubGVuZ3RoLFxyXG4gICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0cmVlTm9kZXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT0gaXRlbS5pZCk7XHJcbiAgICAgICAgaWYgKCFub2RlKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgc2VsZWN0ZWRJdGVtcy5wdXNoKHsgLi4ucmVNYXBUcmVlTm9kZShpdGVtLCB0cnVlKSwgY2hpbGRyZW46IGl0ZW0uY2hpbGRyZW4ubWFwKHggPT4gcmVNYXBUcmVlTm9kZSh4KSkgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKC4uLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ2FkZGVkJywgdGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRMaXN0U2VsZWN0ZWQoKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YSh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QpO1xyXG4gICAgLy9Db252ZXJ0IGFycmF5IHNlbGVjdGVkTGlzdCBpbnRvIG5lc3RlZCBhcnJheSBhcyAxIGxldmVsIGZvcm1cclxuICAgIGNvbnN0IGluZGV4UmVtb3ZlID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3NlbGVjdGVkTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRMaXN0W2ldO1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5nZXREZXNjZW5kYW50c09mTm9kZShpdGVtKS5maWx0ZXIoeCA9PiB4Lmdyb3VwSWQgPT0gaXRlbS5pZCk7XHJcbiAgICAgIGl0ZW0uY2hpbGRyZW4gPSByZXN1bHQ7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmRJbmRleCh4ID0+IHJlc3VsdC5zb21lKHgxID0+IHgxLmlkID09PSB4LmlkKSlcclxuICAgICAgaWYgKGluZGV4IDwgMClcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgaW5kZXhSZW1vdmUucHVzaChpbmRleCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSB0aGlzLl9zZWxlY3RlZExpc3QuZmlsdGVyKChfLCBpbmRleCkgPT4gIWluZGV4UmVtb3ZlLmluY2x1ZGVzKGluZGV4KSk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKC4uLnRoaXMuX3NlbGVjdGVkTGlzdCk7XHJcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgLy8gaGFuZGxlIHNlbGVjdGVkIGxpc3Qgd2hlbiBkYXRhIG5vZGVzIGNoYW5nZVxyXG4gIHByaXZhdGUgX2hhbmRsZUFmdGVyRGF0YU5vZGVDaGFuZ2VFdmVudCgpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSRcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFwKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdGVkTGlzdC5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZExpc3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWl0ZW0ucGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW0ucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkYXRhW2ldO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGVsZW1lbnQuaWQgfHwgeC5jaGlsZHJlbj8uc29tZSh4MSA9PiB4MS5pZCA9PT0gZWxlbWVudC5pZCkpO1xyXG4gICAgICAgICAgICAgIGlmICghIWl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlKVxyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBpdGVtLmlzR3JvdXA7XHJcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBpdGVtLmdyb3VwSWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubWFya2VkR2V0Q2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLmNoaWxkcmVuLmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVNlbGVjdCA9IGRlc2NlbmRhbnRzLmZpbHRlcih4ID0+IGl0ZW0uY2hpbGRyZW4ubWFwKHgxID0+IHgxLmlkKS5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbVNlbGVjdC5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3QuZm9yRWFjaChfaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX25lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoX2l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIF9uZXN0ZWROb2RlLmdyb3VwSWQgPSBpdGVtLmNoaWxkcmVuWzBdLmdyb3VwSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgX25lc3RlZE5vZGUuaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLml0ZW1TZWxlY3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2QgdXNlIGZvciBsYXp5IG1vZGUsIGRvIHNvbWUgdGhpbmcgYmVmb3JlIGluaXQgbGlzdCBub2RlIHNlbGVjdGVkXHJcbiAgICogQHBhcmFtIGNhbGxiYWNrXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBvbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQoY2FsbGJhY2s/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRydWUpO1xyXG4gICAgaWYgKCEhY2FsbGJhY2spXHJcbiAgICAgIGF3YWl0IGNhbGxiYWNrKCk7XHJcbiAgICB0aGlzLm9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLy9IYW5kbGUgaXRlbSBzZWxlY3Rpb24gY2hhbmdlZFxyXG4gIHByaXZhdGUgX2hhbmRsZUl0ZW1TZWxlY3Rpb25DaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uY2hhbmdlZFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgoeyBhZGRlZCwgcmVtb3ZlZCB9KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSlcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjaGVja0V4aXN0SW5SZXN1bHQgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlIHwgUU1TVHJlZU5vZGUpOiBib29sZWFuID0+IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCkgPiAtMTtcclxuICAgICAgICBpZiAoYWRkZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWROb2RlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBhZGRlZC5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKSk7XHJcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWROb2RlKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBpdGVtLmdyb3VwSWQ7XHJcbiAgICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGl0ZW0uaXNHcm91cDtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG5lc3RlZE5vZGU7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKVxyXG4gICAgICAgICAgICAgICAgLmZpbmQoeCA9PiB4LmlzR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gW107XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KVxyXG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5jaGlsZENvdW50ID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0R3JvdXA6IFFNU1RyZWVOb2RlID0gXy5jbG9uZURlZXAoc2VsZWN0ZWROb2RlKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCEhZXhpc3RHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmxhdEV4aXN0R3JvdXAgPSB0aGlzLmdldE5vZGVCeUlkKGV4aXN0R3JvdXAuaWQpO1xyXG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gZXhpc3RHcm91cC5pZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVzdWx0ID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gZXhpc3RHcm91cC5pZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBSZXN1bHQgJiYgIWdyb3VwUmVzdWx0LmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBuZXN0ZWROb2RlLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICBncm91cFJlc3VsdC5pc0dyb3VwID0gZXhpc3RHcm91cC5pc0dyb3VwO1xyXG4gICAgICAgICAgICAgICAgICBncm91cFJlc3VsdC5jaGlsZHJlbi5wdXNoKG5lc3RlZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3VwZGF0ZWQnLCBbZ3JvdXBSZXN1bHRdKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbHRlcihpdGVtID0+IGl0ZW0uZGlzYWJsZWQgfHwgIXRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKGZsYXRFeGlzdEdyb3VwKS5tYXAoeCA9PiB4LmlkKS5pbmNsdWRlcyhpdGVtLmlkKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChjaGVja0V4aXN0SW5SZXN1bHQobm9kZSkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKG5lc3RlZE5vZGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdhZGRlZCcsIFtuZXN0ZWROb2RlXSk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlbW92ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZW1vdmVkLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXN0ZWROb2RlLmlzR3JvdXApIHtcclxuICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcclxuICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5ncm91cElkID0gbnVsbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBuZXN0ZWROb2RlLmdyb3VwSWQpO1xyXG4gICAgICAgICAgICBpZiAoIWdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcclxuICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmNvbmNhdChub2RlKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpXHJcbiAgICAgICAgICAgICAgaWYgKGdyb3VwLmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBfbm9kZS5pZCkgJiYgIXRoaXMuaXNTZWxlY3RlZE5vZGUoX25vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IGdyb3VwLmNoaWxkcmVuLmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLnNwbGljZShncm91cC5jaGlsZHJlbi5pbmRleE9mKF9pdGVtKSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgndXBkYXRlZCcsIFtncm91cF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmxlbmd0aCAmJiB0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSB7XHJcbiAgICAgICAgICAvLyBhZGQgc2VsZWN0ZWQgbm9kZSB0byBjaGVja2VkIG5vZGUgaW4gc2VhcmNoXHJcbiAgICAgICAgICBjb25zdCBmaW5kQWxsQ2hpbGRyZW4gPSAocGFyZW50SWQ6IHN0cmluZywgbm9kZXM6IGFueSk6IGFueVtdID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm91bmROb2RlID0gZmluZE5vZGVCeUlkKHBhcmVudElkLCBub2Rlcyk7XHJcbiAgICAgICAgICAgIGlmICghZm91bmROb2RlIHx8ICFmb3VuZE5vZGU/LmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmb3VuZE5vZGU/LmNoaWxkcmVuO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmaW5kTm9kZUJ5SWQgPSAoaWQ6IHN0cmluZywgbm9kZXM6IGFueSk6IGFueSB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICAgICAgICAgIGlmIChub2RlLmlkID09PSBpZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZE5vZGUgPSBmaW5kTm9kZUJ5SWQoaWQsIG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmROb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfTtcclxuXHJcblxyXG4gICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xyXG4gICAgICAgICAgbGV0IHNlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XHJcblxyXG4gICAgICAgICAgaWYgKCFzZWxlY3RlZExpc3QubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgICBsZXQgY2hpbGRyZW5PZkNoZWNrZWROb2RlID0gW107XHJcbiAgICAgICAgICBjaGlsZHJlbk9mQ2hlY2tlZE5vZGUgPSBmaW5kQWxsQ2hpbGRyZW4odGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWRbMF0uaWQsIHRoaXMuY3VycmVudFRyZWVEYXRhKTtcclxuXHJcblxyXG4gICAgICAgICAgc2VsZWN0ZWRMaXN0WzBdLnBhcmVudElkID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWRbMF0uaWQ7XHJcbiAgICAgICAgICBjaGlsZHJlbk9mQ2hlY2tlZE5vZGUudW5zaGlmdChzZWxlY3RlZExpc3RbMF0pO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBjaGlsZHJlbk9mQ2hlY2tlZE5vZGUuZmlsdGVyKCh2LCBpLCBhKSA9PiBhLmZpbmRJbmRleCh2MiA9PiBbJ2lkJywgJ3BhcmVudElkJ10uZXZlcnkoayA9PiB2MltrXSA9PT0gdltrXSkpID09PSBpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoc3RhdGU6ICdyZW1vdmVkJyB8ICd1cGRhdGVkJyB8ICdhZGRlZCcsIGRhdGE6IFFNU1RyZWVOb2RlW10pIHtcclxuICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgY2FzZSAncmVtb3ZlZCc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XHJcbiAgICAgICAgICByZW1vdmVkOiBkYXRhLFxyXG4gICAgICAgICAgYWRkZWQ6IFtdLFxyXG4gICAgICAgICAgdXBkYXRlZDogW10sXHJcbiAgICAgICAgICBzb3VyY2U6IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCB0aGlzLnJlc3VsdFNlbGVjdGVkKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd1cGRhdGVkJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcclxuICAgICAgICAgIHJlbW92ZWQ6IFtdLFxyXG4gICAgICAgICAgYWRkZWQ6IFtdLFxyXG4gICAgICAgICAgdXBkYXRlZDogZGF0YSxcclxuICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2FkZGVkJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcclxuICAgICAgICAgIHJlbW92ZWQ6IFtdLFxyXG4gICAgICAgICAgYWRkZWQ6IGRhdGEsXHJcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcclxuICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VhcmNoRXZlbnQoKSB7XHJcbiAgICB0aGlzLnNlYXJjaERlcGFydG1lbnQkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTZWFyY2ggPSBbXTtcclxuICAgICAgICB0aGlzLkNVUlJFTlRfUEFHRVNJWkUgPSByZXN1bHQucGFnZVNpemU7XHJcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLnRleHRTZWFyY2hTdWJqZWN0JC5uZXh0KHRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbjogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYltdID0gW107XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XHJcbiAgICAgICAgICAgICAgbG9jYXRpb24gPSBpdGVtLnBhdGg/Lm1hcCh4ID0+ICh7IG5hbWU6IHggfSBhcyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iKSkgfHwgW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IG5vZGUgPyB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSkgOiBbXTtcclxuICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBhcmVudHMubGVuZ3RoID8gcGFyZW50cy5tYXAoKHgpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAgICB9IGFzIERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpKS5yZXZlcnNlKCkgOiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaC5wdXNoKHtcclxuICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8ICF0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMuY29uZmlnLmNoZWNrU2VhcmNoTWFwcGluZ1RyZWUgJiYgIW5vZGUsXHJcbiAgICAgICAgICAgICAgbG9jYXRpb246IFtcclxuICAgICAgICAgICAgICAgIC4uLmxvY2F0aW9uLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmNsZWFyQ2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoV2hlbkhhbmRsZSlcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guY2xlYXIoKTtcclxuICAgICAgICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XHJcbiAgICAgICAgICB0aGlzLnNldEluZGV4VmlldygxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWN0aXZlTm9kZUV2ZW50KCkge1xyXG4gICAgdGhpcy5zY3JvbGxUb05vZGVFdmVudCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgc3dpdGNoTWFwKCh2YWwpID0+IHtcclxuICAgICAgY29uc3QgZGVsYXlUaW1pbmcgPSB0aGlzLmdldEluZGV4VmlldyQudmFsdWUgPT09IDEgPyA3MDAgOiAwO1xyXG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcclxuICAgICAgcmV0dXJuIG9mKHZhbCkucGlwZShkZWxheShkZWxheVRpbWluZyksIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKTtcclxuICAgIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKHJlcyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2V0QWN0aXZlTm9kZUV2ZW50JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBzd2l0Y2hNYXAodmFsID0+IHtcclxuICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdmFsO1xyXG4gICAgICByZXR1cm4gdGltZXIoMTUwMCk7XHJcbiAgICB9KSlcclxuICAgICAgLnN1YnNjcmliZShfID0+IHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSAnLS0nO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURhdGFUcmVlKGRhdGE6IFFNU1RyZWVOb2RlW10pIHtcclxuICAgIHRoaXMuZ2V0RGF0YVRyZWUkLm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nU3RhdGVOb2RlKGlzTG9hZGluZzogYm9vbGVhbiwgbm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XHJcbiAgICBpZiAoIW5vZGUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIG5vZGUuaXNMb2FkaW5nID0gaXNMb2FkaW5nO1xyXG4gICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGlmICghbm9kZT8uZXhwYW5kYWJsZSkgcmV0dXJuO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbC50b2dnbGUobm9kZSk7XHJcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSAmJiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4pIHtcclxuICAgICAgbm9kZS5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkV4cGFuZE5vZGVFdmVudC5lbWl0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25PcHRpb25TZWFyY2hTZWxlY3RlZCh2YWx1ZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQodmFsdWUuaWQpO1xyXG4gICAgaWYgKCFmbGF0Tm9kZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcclxuICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKGZsYXROb2RlKTtcclxuICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShmbGF0Tm9kZS5pZCk7XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrQWxsUm9vdFRyZWVOb2RlKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lIHx8ICF0aGlzLmNvbmZpZy5hY3RpdmVTZWxlY3RBbGxOb2RlKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0FsbERlcGFydG1lbnRTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgIGlmIChub2RlLmRpc2FibGVkKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi50aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiB4LmRpc2FibGVkKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH07XHJcbiAgICB0aGlzLmRlcGFydG1lbnRSb290cy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICBpZiAobm9kZS5kaXNhYmxlZClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGlmICghdGhpcy5pc0luY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+ICF0aGlzLmlzU2VsZWN0ZWROb2RlKHgpKVxyXG4gICAgICAgICAgLmZvckVhY2goeCA9PiB0aGlzLm9uQ2hlY2tOb2RlKHgpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgaWYgKG5lc3RlZE5vZGUuaXNHcm91cCAmJiB0aGlzLmlzQ2hlY2tBbGwobm9kZSkgfHwgIW5vZGUuZXhwYW5kYWJsZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpXHJcbiAgICAgICAgLmZpbHRlcihpdGVtID0+ICF0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKVxyXG4gICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkgJiYgdGhpcy5vbkNoZWNrTm9kZShpdGVtKSk7XHJcbiAgICAgIGlmICghbmVzdGVkTm9kZS5pc0dyb3VwKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbW92ZVRvTG9jYXRpb24obm9kZTogUU1TRmxhdE5vZGVUcmVlLCB0eXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHRyYXZlcnNlID0gKG8sIGZuKSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgayBpbiBvKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gZm4uYXBwbHkodGhpcywgW28sIGtdKTtcclxuXHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9ba10gIT09IG51bGwgJiYgdHlwZW9mIG9ba10gPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGNvbnN0IHJlcyA9IHRyYXZlcnNlKG9ba10sIGZuKTtcclxuICAgICAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3BsaWNlX3NvdXJjZSA9IChvYmosIHByZWRpY2F0ZSkgPT5cclxuICAgICAgdHJhdmVyc2UoXHJcbiAgICAgICAgb2JqLFxyXG4gICAgICAgIChvLCBrKSA9PiB7XHJcbiAgICAgICAgICBsZXQgbV9pbmRleCA9IC0xO1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1trXSkpIHtcclxuICAgICAgICAgICAgbV9pbmRleCA9IG9ba10uZmluZEluZGV4KChvKSA9PiBwcmVkaWNhdGUobywgaykpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBtX2luZGV4ICE9PSAtMSA/IG9ba10uc3BsaWNlKG1faW5kZXgsIDEpWzBdIDogZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgY29uc3QgZmluZF90YXJnZXRfYXJyYXkgPSAob2JqLCBwcmVkaWNhdGUpID0+XHJcbiAgICAgIHRyYXZlcnNlKFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICAobywgaykgPT4gKHByZWRpY2F0ZShvLCBrKSA/IG8uY2hpbGRyZW4gOiBmYWxzZSlcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBmaW5kUGFyZW50ID0gKG5vZGVJZCwgbm9kZXMpID0+IHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XHJcbiAgICAgICAgaWYgKG5vZGUuaWQgPT09IG5vZGVJZCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5vZGVzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHZhciBwYXJlbnQgPSBmaW5kUGFyZW50KG5vZGVJZCwgbm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XHJcblxyXG4gICAgaWYgKCFzZWxlY3RlZExpc3QubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VfaWQgPSBzZWxlY3RlZExpc3RbMF0uaWQ7XHJcblxyXG4gICAgLy8gc291cmNlIG11c3QgdG8gaGF2ZSBmb3IgbW92ZW1lbnRcclxuICAgIHRoaXMuc291cmNlX29iamVjdCA9IHNwbGljZV9zb3VyY2UodGhpcy5jdXJyZW50VHJlZURhdGEsIChvYmopID0+IG9iaj8uaWQgPT09IHNvdXJjZV9pZCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLnNvdXJjZV9vYmplY3QpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRUcmVlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmN1cnJlbnRUcmVlRGF0YVtpXTtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCA9PT0gc291cmNlX2lkKSB7XHJcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QgPSBlbGVtZW50O1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEuc3BsaWNlKGksIDEpOztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnY2hpbGQnOlxyXG4gICAgICAgIGlmICghcGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpPy5jaGlsZHJlbi51bnNoaWZ0KHRoaXMuc291cmNlX29iamVjdCk7XHJcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QucGFyZW50SWQgPSBub2RlLmlkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXRfYXJyYXkgPSBmaW5kX3RhcmdldF9hcnJheSh0aGlzLmN1cnJlbnRUcmVlRGF0YSwgKG9iaikgPT4gb2JqPy5pZCA9PT0gbm9kZT8uaWQpO1xyXG4gICAgICAgICAgdGhpcy5zb3VyY2Vfb2JqZWN0LnBhcmVudElkID0gbm9kZS5pZDtcclxuICAgICAgICAgIHRhcmdldF9hcnJheS51bnNoaWZ0KHRoaXMuc291cmNlX29iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnc2libGluZyc6XHJcbiAgICAgICAgaWYgKCFwYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLmN1cnJlbnRUcmVlRGF0YS5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKSArIDE7XHJcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEuc3BsaWNlKGlkeCwgMCwgdGhpcy5zb3VyY2Vfb2JqZWN0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgdGFyZ2V0X2FycmF5X3BhcmVudCA9IGZpbmRfdGFyZ2V0X2FycmF5KHRoaXMuY3VycmVudFRyZWVEYXRhLCAob2JqKSA9PiBvYmo/LmlkID09PSBwYXJlbnROb2RlPy5pZCk7XHJcbiAgICAgICAgICBjb25zdCBub2RlX2lkeCA9IHRhcmdldF9hcnJheV9wYXJlbnQuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCk7XHJcbiAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xyXG4gICAgICAgICAgdGFyZ2V0X2FycmF5X3BhcmVudC5zcGxpY2Uobm9kZV9pZHggKyAxLCAwLCB0aGlzLnNvdXJjZV9vYmplY3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XHJcbiAgICBjb25zdCBuZXdMb2NhdGlvbiA9IGZpbmRQYXJlbnQodGhpcy5zb3VyY2Vfb2JqZWN0LmlkLCB0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xyXG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IG5ld0xvY2F0aW9uO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHNldERlc3RpbmF0aW9uTG9jYXRpb24obm9kZSwgdHlwZSkge1xyXG4gICAgY29uc3QgdHJlZU5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gbm9kZS5pZCAmJiBpdGVtLnBhcmVudElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgIHRoaXMubW92ZVRvTG9jYXRpb24odHJlZU5vZGUsIHR5cGUpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uQ2hlY2tOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSwgZmlyZUV2ZW50Q2hlY2tOb2RlOiBib29sZWFuID0gdHJ1ZSkge1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCFub2RlIHx8IG5vZGUuZGlzYWJsZWQpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmIChmaXJlRXZlbnRDaGVja05vZGUpXHJcbiAgICAgIHRoaXMub25DaGVja05vZGVFdmVudC5lbWl0KG5vZGUpO1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdE9uZShub2RlLmlkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxhenkgJiYgbm9kZS5leHBhbmRhYmxlICYmICFub2RlLm1hcmtlZEdldENoaWxkcmVuICYmIGZpcmVFdmVudENoZWNrTm9kZSkge1xyXG4gICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbm9kZS5pc0xvYWRpbmcgPSB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcih4ID0+IHguZXhwYW5kYWJsZSAmJiAheC5tYXJrZWRHZXRDaGlsZHJlbik7XHJcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB4LmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdE9uZShub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9kZVRyZWUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gbm9kZUlkKTtcclxuICAgIGNvbnN0IHJlU2VsZWN0U2VsZWN0aW9uID0gKGlkOiBzdHJpbmcsIC4uLnBhcmFtczogU2VsZWN0aW9uTW9kZWw8YW55PltdKTogdm9pZCA9PiB7XHJcbiAgICAgIHBhcmFtcy5mb3JFYWNoKHNlbGVjdGlvbiA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCAhPSBpZCk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmRlc2VsZWN0KC4uLnNlbGVjdGVkKTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghbm9kZVRyZWUpIHtcclxuICAgICAgdGhpcy5leGVjV2l0aG91dEVtaXROb2RlQ2hhbmdlRXZlbnQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKTtcclxuICAgICAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFt7XHJcbiAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxyXG4gICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgZXh0ZXJuYWxOYW1lOiBpdGVtLmV4dGVybmFsTmFtZSxcclxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgIH0gYXMgUU1TVHJlZU5vZGVdO1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IFsuLi50aGlzLnJlc3VsdFNlbGVjdGVkXTtcclxuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgICAgIHJlU2VsZWN0U2VsZWN0aW9uKG5vZGVJZCwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGVUcmVlKSkge1xyXG4gICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpKTtcclxuICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFt7IC4uLm5lc3RlZE5vZGUsIGNoaWxkcmVuOiBbXSB9XTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xyXG4gICAgICByZVNlbGVjdFNlbGVjdGlvbihuZXN0ZWROb2RlLmlkLCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbiwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2gpO1xyXG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XHJcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kQWxsUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGlmIChwYXJlbnRzPy5sZW5ndGgpIHtcclxuICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQocGFyZW50KSlcclxuICAgICAgICAgIHRoaXMub25FeHBhbmROb2RlKHBhcmVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVOb2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcclxuICAgIGlmICghZmxhdE5vZGUpIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKTtcclxuICAgICAgaWYgKCFpdGVtKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KCdyZW1vdmUnLCBpdGVtLCB0aGlzLl9zZWxlY3RlZExpc3QsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3ROb2RlKC4uLm5vZGVJZHM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IG5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgaWYgKCFub2Rlcy5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5ub2Rlcyk7XHJcbiAgfVxyXG5cclxuICBvbkRlc2VsZWN0Tm9kZSguLi5ub2RlSWRzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiBub2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcclxuICAgIGlmICghbm9kZXMubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5ub2Rlcyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgYSB2YWx1ZSBiZXR3ZWVuIHNlbGVjdGVkIGFuZCBkZXNlbGVjdGVkLlxyXG4gICAqIEBwYXJhbSBub2RlSWQgOmlkIG9mIG5vZGVcclxuICAgKi9cclxuICBvblRvZ2dsZU5vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XHJcbiAgICBpZiAoIW5vZGUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcclxuICB9XHJcblxyXG4gIGlzSW5kZXRlcm1pbmF0ZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGNoaWxkU2VsZWN0ZWQgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoaXRlbSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKTtcclxuICAgIHJldHVybiAoISFjaGlsZFNlbGVjdGVkLmxlbmd0aCAmJiAhdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKSk7XHJcbiAgfVxyXG5cclxuICBpc0NoZWNrQWxsKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgbGlzdENoZWNrID0gWy4uLnRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLCBub2RlXTtcclxuICAgIHJldHVybiBsaXN0Q2hlY2suZXZlcnkoaXRlbSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlIGNoZWNrIG5vZGUgb2YgdHJlZVxyXG4gICAqIEBwYXJhbSBub2RlIG5vZGUgb2YgdHJlZVxyXG4gICAqIEBwYXJhbSBjYWxsYmFjayBkbyBzb21ldGhpbmcgYmVmb3JlIGhhbmRsZSBjaGVjayBub2RlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBvbkJlZm9yZUNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGNhbGxiYWNrPzogKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcclxuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUgPSB0cnVlO1xyXG4gICAgaWYgKCEhY2FsbGJhY2spXHJcbiAgICAgIGF3YWl0IGNhbGxiYWNrKG5vZGUpO1xyXG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKTtcclxuICAgIGNvbnN0IGNoaWxkU2VsZWN0ZWQgPSB0aGlzLmdldENoaWxkcmVuU2VsZWN0ZWQobm9kZSkuZmlsdGVyKHggPT4gIXguZGlzYWJsZWQpO1xyXG4gICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuXHJcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICAvLyBDaGVjayBleGlzdGVkIGdyb3VwXHJcbiAgICAgIGNvbnN0IGFsbFBhcmVuTm9kZUlkcyA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKS5tYXAoeCA9PiB4LmlkKTtcclxuICAgICAgY29uc3QgZXhpc3RlZEdyb3VwID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pc0dyb3VwICYmIGFsbFBhcmVuTm9kZUlkcy5pbmNsdWRlcyh4LmlkKSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBleGlzdGVkR3JvdXA/LmlkXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4gIXguZGlzYWJsZWQpO1xyXG4gICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSAhZXhpc3RlZEdyb3VwICYmICEhY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoeCk7XHJcbiAgICAgICAgX25vZGUuZ3JvdXBJZCA9IGV4aXN0ZWRHcm91cCA/IGV4aXN0ZWRHcm91cC5pZCA6IG5vZGUuaWQ7XHJcbiAgICAgICAgX25vZGUuaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmNoaWxkU2VsZWN0ZWQubWFwKHggPT4gdGhpcy5yZXNldE5vZGUoeCkpKTtcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmNoaWxkcmVuLm1hcCh4ID0+IHRoaXMucmVzZXROb2RlKHgpKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IF9zZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgX3NlbGVjdGVkSW5kZXggPiAtMSAmJiB0aGlzLl9zZWxlY3RlZExpc3Quc3BsaWNlKF9zZWxlY3RlZEluZGV4LCAxKTtcclxuICAgIGNvbnN0IGRlc2VsZWN0Tm9kZXMgPSAodGhpcy5pc0luY2x1ZGVDaGlsZHJlbiB8fCBuZXN0ZWROb2RlLmlzR3JvdXApID8gY2hpbGRTZWxlY3RlZCA6IFtub2RlXTtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2VsZWN0Tm9kZXMpO1xyXG4gICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBub2RlLmlzR3JvdXAgPSBmYWxzZTtcclxuICAgIHJldHVybiBub2RlO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICByZXR1cm4gbm9kZSAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4gdGhpcy5pc1NlbGVjdGVkTm9kZSh4KSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgYSBsaXN0IG9mIHRoZSBkYXRhIG5vZGUncyBzdWJ0cmVlIG9mIGRlc2NlbmRlbnQgZGF0YSBub2Rlcy5cclxuICAgKiBAcGFyYW0gbm9kZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGUuaWQpO1xyXG4gICAgaWYgKCFmbGF0Tm9kZSlcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMoZmxhdE5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWFwVG9OZXN0ZWRMaXN0Tm9kZShmbGF0Tm9kZUxpc3Q6IFFNU0ZsYXROb2RlVHJlZVtdKTogUU1TVHJlZU5vZGVbXSB7XHJcbiAgICByZXR1cm4gZmxhdE5vZGVMaXN0Lm1hcChpdGVtID0+IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShpdGVtKSk7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU1RyZWVOb2RlIHtcclxuICAgIHJldHVybiB0aGlzLmZsYXRUcmVlTm9kZU1hcC5nZXQobm9kZSkgfHwge30gYXMgUU1TVHJlZU5vZGU7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG9GbGF0Tm9kZShub2RlOiBRTVNUcmVlTm9kZSkge1xyXG4gICAgcmV0dXJuIHRoaXMubmVzdGVkVHJlZU5vZGVNYXAuZ2V0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsUGFyZW50Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XHJcbiAgICBjb25zdCBsaXN0UGFyZW50OiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdO1xyXG4gICAgbGV0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcclxuICAgIHdoaWxlIChwYXJlbnQpIHtcclxuICAgICAgbGlzdFBhcmVudC5wdXNoKHBhcmVudCk7XHJcbiAgICAgIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxpc3RQYXJlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQYXJlbnROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xyXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHJldHVybjtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuaW5kZXhPZihub2RlKSAtIDE7XHJcbiAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXNbaV07XHJcbiAgICAgIGlmICh0aGlzLmdldExldmVsKGN1cnJlbnROb2RlKSA8IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbUljb25UeXBlKGl0ZW06IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtTWF0SWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLm5hbWU7XHJcbiAgICBpZiAoISFpdGVtLml0ZW1JY29uU3ZnKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuc3ZnO1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnBhdGg7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2Nyb2xsSW50b05vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xyXG4gICAgaWYgKCFub2RlSWQpIHJldHVybjtcclxuICAgIHRoaXMub25FeHBhbmROb2RlKGZsYXROb2RlKTtcclxuICAgIHRoaXMub25FeHBhbmRBbGxQYXJlbnQoZmxhdE5vZGUpO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBmbGF0Tm9kZS5pZCk7XHJcbiAgICBpZiAoIXRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnc21vb3RoJyk7XHJcbiAgICB0aGlzLmdldEFjdGl2ZU5vZGVFdmVudCQubmV4dChub2RlSWQpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2goKSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWUgfHwgdGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZT8udHJpbSgpID09PSAnJylcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zZXRJbmRleFZpZXcoMSk7XHJcbiAgICB0aGlzLm9uU2VhcmNoRXZlbnQuZW1pdCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcclxuICAgIGlmICghdGhpcy5wYWdpbmF0b3JTZWFyY2gpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMucGFnaW5hdG9yU2VhcmNoLmNoYW5nZVBhZ2UoMCk7XHJcbiAgICB0aGlzLnBhZ2luYXRvclNlYXJjaC5yZW5kZXJEaXNwbGF5TnVtYmVyT2ZwYWdlcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVzdWx0U2VhcmNoKGRhdGE6IFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+KSB7XHJcbiAgICB0aGlzLnNlYXJjaERlcGFydG1lbnQkLm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrUmVzdWx0SXRlbShpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgdGhpcy5zY3JvbGxUb05vZGUobm9kZS5pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikge1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICBpZiAobm9kZSkge1xyXG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcclxuICAgICAgb2Yobm9kZS5pZCkucGlwZShkZWxheSg3MDApLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKHJlcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGVja0l0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XHJcbiAgICBpZiAoaXRlbS5kaXNhYmxlZCB8fCB0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC50b2dnbGUoaXRlbSk7XHJcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoLi4udGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCAhPSBpdGVtLmlkKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hlY2tJdGVtU2VhcmNoRXZlbnQuZW1pdChcclxuICAgICAge1xyXG4gICAgICAgIHN0YXRlOiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pLFxyXG4gICAgICAgIGl0ZW06IGl0ZW1cclxuICAgICAgfSk7XHJcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xyXG4gICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2gpIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XHJcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25CZWZvcmVDaGVja0l0ZW1TZWFyY2goaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsLCBjYWxsYmFjaz86IChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XHJcbiAgICBpdGVtLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoID0gdHJ1ZTtcclxuICAgIC8vIGhvbGQgc3RhdGUgYmVmb3JlIGNhbGwgbWV0aG9kIGNhbGxiYWNrIHRvIHByZXZlbnQgbG9zdCBpdCdzIHN0YXRlIHVuZXhwZWN0ZWRcclxuICAgIGNvbnN0IGlzU2VsZWN0ID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCk7XHJcbiAgICBpZiAoISFjYWxsYmFjaylcclxuICAgICAgYXdhaXQgY2FsbGJhY2soaXRlbSk7XHJcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSwgaXNTZWxlY3QpO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2ggPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQmVmb3JlQ2hlY2tBbGxTZWFyY2goY2FsbGJhY2s/OiAoZGF0YSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcclxuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaCA9IHRydWU7XHJcbiAgICBpZiAoISFjYWxsYmFjaylcclxuICAgICAgYXdhaXQgY2FsbGJhY2sodGhpcy5yZXN1bHRTZWFyY2gpO1xyXG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrQWxsU2VhcmNoID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5yZXN1bHRTZWFyY2hbaV07XHJcbiAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuSGFuZGxlSXRlbVNlYXJjaFJlc3VsdChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLnNvbWUobm9kZSA9PiBub2RlLmlkID09PSBpdGVtLmlkKSB8fCB0aGlzLmNvbmZpZy5sYXp5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWFwVG9SZXN1bHRTZWFyY2goKSB7XHJcbiAgICBpZiAoISF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXHJcbiAgICAgIHRoaXMucmVzdWx0U2VhcmNoLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFeGlzdEluUmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkPy5zb21lKHggPT4geC5pZCA9PT0gaXRlbS5pZCB8fCB4LmNoaWxkcmVuPy5zb21lKHkgPT4geS5pZCA9PT0gaXRlbS5pZCkpO1xyXG4gICAgICAgIGlzRXhpc3RJblJlc3VsdFNlbGVjdGVkID8gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pIDogdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsLCBzdGF0ZTogYm9vbGVhbiA9IHRoaXMuaXNTZWxlY3RJdGVtU2VhcmNoKGl0ZW0uaWQpKSB7XHJcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQudG9TdHJpbmcoKSk7XHJcbiAgICBpZiAoISFjdXJyZW50Tm9kZSkge1xyXG4gICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjdXJyZW50Tm9kZSkpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkpXHJcbiAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoY3VycmVudE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGN1cnJlbnROb2RlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSA/IHRoaXMuX2hhbmRsZVNlbGVjdE9uZShjdXJyZW50Tm9kZS5pZCkgOiB0aGlzLmhhbmRsZUNoZWNrTm9kZShjdXJyZW50Tm9kZSk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcclxuICAgICAgdGhpcy5faGFuZGxlU2VsZWN0T25lKGl0ZW0uaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl91cGRhdGVTZWxlY3RlZExpc3Qoc3RhdGUgPyAnYWRkJyA6ICdyZW1vdmUnLCBpdGVtLCB0aGlzLl9zZWxlY3RlZExpc3QsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgaXNTZWxlY3RJdGVtU2VhcmNoKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5zb21lKHggPT4geC5pZCA9PT0gaWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlU2VsZWN0ZWRMaXN0KHN0YXRlOiAnYWRkJyB8ICdyZW1vdmUnLCBpdGVtOiBRTVNUcmVlTm9kZSwgLi4uc2VsZWN0ZWRMaXN0czogUU1TVHJlZU5vZGVbXVtdKSB7XHJcbiAgICBpZiAoIWl0ZW0pXHJcbiAgICAgIHJldHVybjtcclxuICAgIHNlbGVjdGVkTGlzdHMuZm9yRWFjaChzZWxlY3RlZExpc3QgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtRXhpc3RlZCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlICdhZGQnOlxyXG4gICAgICAgICAgaWYgKGl0ZW0uZ3JvdXBJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5ncm91cElkKTtcclxuICAgICAgICAgICAgaWYgKCFncm91cCAmJiAhaXRlbUV4aXN0ZWQpIHtcclxuICAgICAgICAgICAgICBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAhZ3JvdXAuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQpICYmIGdyb3VwLmNoaWxkcmVuLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICFpdGVtRXhpc3RlZCAmJiBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6XHJcbiAgICAgICAgICBpZiAoIWl0ZW1FeGlzdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmNoaWxkcmVuLnNvbWUoeDEgPT4geDEuaWQgPT09IGl0ZW0uaWQpKTtcclxuICAgICAgICAgICAgaWYgKCFncm91cClcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBncm91cC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZWxlY3RlZExpc3Quc3BsaWNlKHNlbGVjdGVkTGlzdC5pbmRleE9mKGl0ZW1FeGlzdGVkKSwgMSk7XHJcbiAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0aW9uU2VhcmNoID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IGl0ZW1FeGlzdGVkLmlkKTtcclxuICAgICAgICAgIGl0ZW1TZWxlY3Rpb25TZWFyY2ggJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbVNlbGVjdGlvblNlYXJjaCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEFsbFNlYXJjaFJlc3VsdChjaGVja2VkKSB7XHJcbiAgICBjaGVja2VkID0gIWNoZWNrZWQ7XHJcbiAgICBpZiAoIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmhhbmRsZUNoZWNrQWxsSXRlbVNlYXJjaCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VhcmNoW2ldO1xyXG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkKVxyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgY29uc3QgY2FuU2VsZWN0ID0gKCEhdHJlZU5vZGUgfHwgdGhpcy5jb25maWcubGF6eSk7XHJcbiAgICAgICAgICBpZiAoIWNhblNlbGVjdClcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAhdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3QoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgX2l0ZW1TZWxlY3Rpb25zID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICBpZiAoX2l0ZW1TZWxlY3Rpb25zLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoLi4uX2l0ZW1TZWxlY3Rpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5IHx8ICF0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tBbGxTZWFyY2gpXHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtLCBjaGVja2VkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoZWNrQWxsSXRlbVNlYXJjaEV2ZW50LmVtaXQoY2hlY2tlZCk7XHJcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRGlzYWJsZUNoZWNib3hBbGxTZWFyY2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRTZWFyY2ggJiYgdGhpcy5yZXN1bHRTZWFyY2guZXZlcnkoeCA9PiB4LmRpc2FibGVkKTtcclxuICB9XHJcblxyXG4gIG9uUGFnaW5nU2VhcmNoUmVzdWx0KHZhbDogUGFnZUV2ZW50KSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLm9uUGFnaW5nU2VhcmNoRXZlbnQuZW1pdCh2YWwpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNjcm9sbFRvTm9kZUV2ZW50JC5uZXh0KG5vZGVJZCk7XHJcbiAgfVxyXG5cclxuICBzZXRJbmRleFZpZXcoaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKGluZGV4ID09PSAxICYmIHRoaXMuY29uZmlnLnJlc2V0VG9nZ2xlSW5jbHVkZUNoaWxkV2hlbkNoYW5nZVZpZXcpIHtcclxuICAgICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRJbmRleFZpZXckLm5leHQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZlTm9kZUV4dGVybmFsKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgcmV0dXJuICFhbGxQYXJlbnQgfHwgYWxsUGFyZW50LmV2ZXJ5KGl0ZW0gPT4gdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIGdldEhlaWdodFN0eWxlUmVmTm9kZShub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9kZUVsZSA9IHRoaXMuZWxlUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLm1hdC10cmVlLW5vZGUjbWF0LW5vZGUtJHtub2RlSWR9YCkgYXMgRWxlbWVudDtcclxuICAgIHJldHVybiBgJHtub2RlRWxlPy5jbGllbnRIZWlnaHQgfHwgMH1weGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdGVkTm9kZVN0b3JhZ2UoKTogUU1TRmxhdE5vZGVUcmVlIHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzZWxlY3RlZE5vZGUnKSkgYXMgUU1TRmxhdE5vZGVUcmVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZE5vZGVTdG9yYWdlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiAmJiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VsZWN0ZWROb2RlJywgSlNPTi5zdHJpbmdpZnkobm9kZSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFBhZ2luYXRvclNpemUob3B0aW9uczogbnVtYmVyW10pIHtcclxuICAgIHRoaXMuUEFHRV9TSVpFX09QVElPTiA9IG9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgICAgKiBUaGlzIGZ1bmN0aW9uIHVzZSBmb3IgbGF6eSBsb2FkIGNoaWxkcmVuIG9mIG5vZGVcclxuICAgICAgICogQHBhcmFtIG5vZGUgbm9kZSB1cGRhdGUuIGlmIG5vZGUgaXMgbnVsbCBkYXRhIGF1dG8gaW5zZXJ0IGFzIHJvb3RzXHJcbiAgICAgICAqIEBwYXJhbSBkYXRhIGxpc3QgY2hpbGRyZW4gdG8gdXBkYXRlIG5vZGUuXHJcbiAgICAgICAqIEBwYXJhbSBtb2RlIGRlZmF1bHQgaXMgdXBkYXRlIHRoYXQgcmVwbGFjZSBjdXJyZW50IGxpc3QgY2hpbGRyZW4gYnkgbmV3IGxpc3QgY2hpbGRyZW4gLCBpZiBtb2RlID0gJ2luc2VydCcgd2lsbCBpbnNlcnQgbmV3IHZhbHVlcyB0byBsaXN0IGNoaWxkcmVuIGV4aXN0ZWQgYmVmb3JlLlxyXG4gICovXHJcbiAgdXBkYXRlQ2hpbGRPZk5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBkYXRhOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdLCBtb2RlOiAnaW5zZXJ0JyB8ICd1cGRhdGUnID0gJ3VwZGF0ZScpIHtcclxuICAgIG5vZGUuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xyXG4gICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgIGNvbnN0IGRhdGFOb2RlcyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKGRhdGEpLmZpbHRlcih4ID0+IHgucGFyZW50SWQgPT09IG5vZGUuaWQpO1xyXG4gICAgaWYgKCFuZXN0ZWROb2RlKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAnaW5zZXJ0JzpcclxuICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuLnB1c2goLi4uZGF0YU5vZGVzKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndXBkYXRlJzpcclxuICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gZGF0YU5vZGVzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XHJcbiAgICBjb25zdCBfbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZS5pZCk7XHJcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMoX25vZGUpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlbGVjdGVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkW2ldO1xyXG4gICAgICB0aGlzLl9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUoaXRlbS5pZCk7XHJcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuZ2V0RGVzY2VuZGFudHNPZk5vZGUoaXRlbSk7XHJcbiAgICAgIGlmICghZGVzY2VuZGFudHMubGVuZ3RoKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRlc2NlbmRhbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBkZXNjZW5kYW50c1tqXTtcclxuICAgICAgICB0aGlzLl9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUoY2hpbGQuaWQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dChbX25vZGUsIC4uLm5vZGVzXSk7XHJcbiAgfVxyXG5cclxuICAvL3JlLXNlbGVjdCB3aGVuIHVwZGF0ZSBjaGlsZHJlbiBvZiBub2RlXHJcbiAgcHJpdmF0ZSBfcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xyXG4gICAgaWYgKCFub2RlIHx8IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSkpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGNvbnN0IGV4aXN0SW5TZWxlY3Rpb24gPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PSBub2RlLmlkKTtcclxuICAgIGlmIChleGlzdEluU2VsZWN0aW9uKVxyXG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChleGlzdEluU2VsZWN0aW9uKTtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICB9XHJcblxyXG4gIGNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgaWYgKCFhbGxQYXJlbnQubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFBhcmVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSBhbGxQYXJlbnRbaV07XHJcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhwYXJlbnQpO1xyXG4gICAgICBwYXJlbnQuaXNMb2FkaW5nID0gZGVzY2VuZGFudHMuc29tZSh4ID0+IHguaXNMb2FkaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5vZGVCeUlkKGlkOiBzdHJpbmcpOiBRTVNGbGF0Tm9kZVRyZWUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBpZCkgfHwgdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um9vdE9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgaWYgKCFhbGxQYXJlbnQubGVuZ3RoKVxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIGFsbFBhcmVudC5wb3AoKTtcclxuICB9XHJcblxyXG4gIGFkZFJvb3RUcmVlKGRhdGE6IFFNU0ZsYXROb2RlVHJlZVtdID0gW10pIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xyXG4gICAgaWYgKCFkYXRhLmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgdHJlZU5vZGVEYXRhID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoZGF0YSk7XHJcbiAgICAvLyByZS1jaGVjayByb290IHdhcyBleGlzdGVkIGluIHRyZWVcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJlZU5vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0cmVlTm9kZURhdGFbaV07XHJcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xyXG4gICAgICBpZiAoISFub2RlICYmIG5vZGUuZXhwYW5kYWJsZSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xyXG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW47XHJcbiAgICAgICAgbmVzdGVkTm9kZS5tYXJrZWRHZXRDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghbm9kZSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRUcmVlRGF0YS5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkLm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaGVja2VkU3RhdHVzTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHJldHVybiB0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTm9kZUluZm9ybWF0aW9uKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgbGV0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICBpZiAoIW5lc3RlZE5vZGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG5lc3RlZE5vZGUuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcclxuICAgIG5lc3RlZE5vZGUubmFtZSA9IG5vZGUubmFtZTtcclxuICAgIG5lc3RlZE5vZGUuaXRlbUljb24gPSBub2RlLml0ZW1JY29uO1xyXG4gICAgbmVzdGVkTm9kZS5pdGVtSWNvblN2ZyA9IG5vZGUuaXRlbUljb25Tdmc7XHJcbiAgICBuZXN0ZWROb2RlLnNlbGVjdGVkQ2hpbGRDb3VudCA9IG5vZGUuc2VsZWN0ZWRDaGlsZENvdW50O1xyXG4gICAgbmVzdGVkTm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZSA9IG5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmU7XHJcbiAgICBuZXN0ZWROb2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQgPSBub2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3RlZFJlc3VsdERhdGEobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBub2RlUmVzdWx0ID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKCh4KSA9PiB4LmlkID09PSBub2RlLmlkKTtcclxuICAgIGlmIChub2RlUmVzdWx0KSB7XHJcbiAgICAgIG5vZGVSZXN1bHQuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcclxuICAgICAgbm9kZVJlc3VsdC5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGxDaGVja05vZGVPdXRzaWRlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgLy90aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhlY1dpdGhvdXRFbWl0Tm9kZUNoYW5nZUV2ZW50KGFjdGlvbjogKCkgPT4gdm9pZCkge1xyXG4gICAgdGhpcy5sb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTtcclxuICAgIGFjdGlvbigpO1xyXG4gICAgdGhpcy5sb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0Rpc2FibGVkTm9kZSA9IChub2RlSWQ6IHN0cmluZykgPT4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT0gbm9kZUlkKT8uZGlzYWJsZWQ7XHJcbn1cclxuIl19