@posiwise/admin-module 0.0.85 → 0.0.87

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 (84) hide show
  1. package/esm2022/index.mjs +2 -1
  2. package/esm2022/lib/admin-module.routing.mjs +43 -25
  3. package/esm2022/lib/admin.module.mjs +9 -3
  4. package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +3 -3
  5. package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +5 -4
  6. package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +3 -3
  7. package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +3 -3
  8. package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +3 -3
  9. package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +3 -4
  10. package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +2 -2
  11. package/esm2022/lib/components/faqs/add-edit-faq/add-edit-faq.component.mjs +245 -0
  12. package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +53 -84
  13. package/esm2022/lib/components/generic/generic-misc/generic-misc.component.mjs +22 -5
  14. package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +5 -3
  15. package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +6 -4
  16. package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +3 -3
  17. package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +2 -2
  18. package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +5 -4
  19. package/esm2022/lib/components/permissions/permissions-details/permissions-details.component.mjs +6 -7
  20. package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +3 -2
  21. package/esm2022/lib/components/permissions/role-details/role-details.component.mjs +6 -7
  22. package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +3 -2
  23. package/esm2022/lib/components/products/product-details/product-details.component.mjs +5 -4
  24. package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +5 -3
  25. package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +3 -3
  26. package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +5 -3
  27. package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +6 -4
  28. package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +234 -0
  29. package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +16 -54
  30. package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +3 -2
  31. package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +5 -4
  32. package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +3 -3
  33. package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +4 -3
  34. package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +4 -3
  35. package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +4 -3
  36. package/esm2022/lib/components/tracking/events/events.component.mjs +4 -3
  37. package/esm2022/lib/components/tracking/versions/versions.component.mjs +4 -3
  38. package/esm2022/lib/shared/routers/routers.mjs +5 -2
  39. package/fesm2022/posiwise-admin-module.mjs +759 -332
  40. package/fesm2022/posiwise-admin-module.mjs.map +1 -1
  41. package/index.d.ts +1 -0
  42. package/lib/admin.module.d.ts +73 -71
  43. package/lib/components/TOS/terms-of-service/terms-of-service.component.d.ts +3 -0
  44. package/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.d.ts +12 -0
  45. package/lib/components/config/global-config-list/global-config-list.component.d.ts +3 -0
  46. package/lib/components/credentials/credentials/credentials.component.d.ts +3 -0
  47. package/lib/components/credentials/subscription-credentials/subscription-credentials.component.d.ts +3 -0
  48. package/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.d.ts +3 -0
  49. package/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.d.ts +3 -0
  50. package/lib/components/domain-config/domain-config-details/domain-config-details.component.d.ts +3 -0
  51. package/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.d.ts +3 -0
  52. package/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.d.ts +3 -0
  53. package/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.d.ts +3 -0
  54. package/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.d.ts +3 -0
  55. package/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.d.ts +3 -0
  56. package/lib/components/domain-config/domain-config-list/domain-config-list.component.d.ts +3 -0
  57. package/lib/components/faqs/add-edit-faq/add-edit-faq.component.d.ts +104 -0
  58. package/lib/components/faqs/faqs-list/faqs-list.component.d.ts +34 -4
  59. package/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.d.ts +3 -0
  60. package/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.d.ts +3 -0
  61. package/lib/components/generic/generic-misc/generic-misc.component.d.ts +8 -2
  62. package/lib/components/incidents/add-edit-incident/add-edit-incident.component.d.ts +15 -0
  63. package/lib/components/incidents/incidents-list/incidents-list.component.d.ts +3 -0
  64. package/lib/components/login-notifications/login-notification-details/login-notification-details.component.d.ts +3 -0
  65. package/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.d.ts +3 -0
  66. package/lib/components/newsletters/newsletter-details/newsletter-details.component.d.ts +3 -0
  67. package/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.d.ts +15 -0
  68. package/lib/components/newsletters/newsletters-items/newsletters-items.component.d.ts +3 -0
  69. package/lib/components/newsletters/newsletters-list/newsletters-list.component.d.ts +3 -0
  70. package/lib/components/permissions/permissions-details/permissions-details.component.d.ts +3 -0
  71. package/lib/components/permissions/permissions-list/permissions-list.component.d.ts +3 -0
  72. package/lib/components/permissions/roles-list/roles-list.component.d.ts +3 -0
  73. package/lib/components/products/product-details/product-details.component.d.ts +12 -0
  74. package/lib/components/products/products-list/products-list.component.d.ts +3 -0
  75. package/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.d.ts +1 -0
  76. package/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.d.ts +3 -0
  77. package/lib/components/subscriptions/subscription-products/subscription-products.component.d.ts +4 -0
  78. package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +4 -0
  79. package/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.d.ts +96 -0
  80. package/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.d.ts +3 -1
  81. package/lib/components/tips/tips-list/tips-list.component.d.ts +3 -0
  82. package/lib/components/users/users-list/users-list.component.d.ts +3 -0
  83. package/lib/shared/routers/routers.d.ts +3 -0
  84. package/package.json +1 -1
@@ -27,6 +27,7 @@ export class SubscriptionProductsComponent extends AppBaseComponent {
27
27
  this.searchText = '';
28
28
  this.routers = ROUTERS;
29
29
  this.currency = [];
30
+ this.totalRecordsUnFiltered = 0;
30
31
  this.objectKeys = Object.keys;
31
32
  }
32
33
  ngOnInit() {
@@ -48,6 +49,7 @@ export class SubscriptionProductsComponent extends AppBaseComponent {
48
49
  .subscribe(response => {
49
50
  this.subscriptionProducts = response?.products || [];
50
51
  this.totalRecords = response?.products?.length;
52
+ this.totalRecordsUnFiltered = response.unfiltered_count;
51
53
  })
52
54
  .add(() => {
53
55
  this.isLoaded = true;
@@ -55,10 +57,10 @@ export class SubscriptionProductsComponent extends AppBaseComponent {
55
57
  });
56
58
  }
57
59
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionProductsComponent, deps: [{ token: i1.SubscriptionService }, { token: i0.Injector }, { token: i1.ProductService }], target: i0.ɵɵFactoryTarget.Component }); }
58
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SubscriptionProductsComponent, selector: "pw-subscription-products", usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecords === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100).toFixed(2) }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100).toFixed(2) }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: id }\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecords === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n", dependencies: [{ kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i9.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i10.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i11.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i11.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i12.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i6.JsonPipe, name: "json" }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }] }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SubscriptionProductsComponent, selector: "pw-subscription-products", usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100).toFixed(2) }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100).toFixed(2) }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: id }\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecordsUnFiltered === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n", dependencies: [{ kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i9.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i10.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i11.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i11.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i12.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i6.JsonPipe, name: "json" }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }] }); }
59
61
  }
60
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionProductsComponent, decorators: [{
61
63
  type: Component,
62
- args: [{ selector: 'pw-subscription-products', template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecords === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100).toFixed(2) }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100).toFixed(2) }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: id }\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecords === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n" }]
64
+ args: [{ selector: 'pw-subscription-products', template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100).toFixed(2) }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100).toFixed(2) }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: id }\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecordsUnFiltered === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n" }]
63
65
  }], ctorParameters: () => [{ type: i1.SubscriptionService }, { type: i0.Injector }, { type: i1.ProductService }] });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9zdWJzY3JpcHRpb25zL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3RzL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFNaEYsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGdCQUFnQjtJQW1CL0QsWUFDWSxtQkFBd0MsRUFDaEQsUUFBa0IsRUFDVixjQUE4QjtRQUV0QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKUix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBRXhDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQW5CMUMseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBSTFCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUVmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUVsQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFRekIsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsT0FBTyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsbUJBQW1CO2FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQ2hCLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztRQUNuRCxDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOytHQXJEUSw2QkFBNkI7bUdBQTdCLDZCQUE2Qix1RkNWMUMsK2dKQXNHQTs7NEZENUZhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDSSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UsIFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zdWJzY3JpcHRpb24tcHJvZHVjdHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblByb2R1Y3RzQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgaWQ6IG51bWJlcjtcblxuICAgIHN1YnNjcmlwdGlvblByb2R1Y3RzID0gW107XG5cbiAgICB0b3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcblxuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgY3VycmVuY3kgPSBbXTtcblxuICAgIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldFN1cHBvcnRlZEN1cnJlbmN5KCk7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBOdW1iZXIoZGF0YVsnaWQnXSk7XG4gICAgICAgICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbkRldGFpbHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdXBwb3J0ZWRDdXJyZW5jeSgpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5nZXRTdXBwb3J0ZWRDdXJyZW5jeSgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeSA9IHJlcz8ucmVnaW9ucztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb25EZXRhaWxzKCkge1xuICAgICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZVxuICAgICAgICAgICAgLmdldEJ5SWQodGhpcy5pZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uUHJvZHVjdHMgPSByZXNwb25zZT8ucHJvZHVjdHMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXNwb25zZT8ucHJvZHVjdHM/Lmxlbmd0aDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNMb2FkZWRcIj5cbiAgICA8cC1wcm9ncmVzc1NwaW5uZXI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgdGFibGUtcmVzcG9uc2l2ZSBtdC0wXCJcbiAgW2NsYXNzLmhpZGVUYWJsZV09XCJ0b3RhbFJlY29yZHMgPT09IDBcIj5cbiAgPHAtdGFibGUgI2R0XG4gICAgW3ZhbHVlXT1cInN1YnNjcmlwdGlvblByb2R1Y3RzXCJcbiAgICBbcGFnaW5hdG9yXT1cInRvdGFsUmVjb3JkcyAhPT0gMFwiXG4gICAgW3Jvd3NdPVwiUEFHRV9TSVpFXCJcbiAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgW2ZpbHRlckRlbGF5XT1cIjEwMDBcIlxuICAgIFtjdXN0b21Tb3J0XT1cInRydWVcIj5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG10LTIgbWUtMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICBzaXplPVwiNTBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHN1YnNjcmlwdGlvbiBwcm9kdWN0cy4uLlwiXG4gICAgICAgICAgKGlucHV0KT1cImR0LmZpbHRlckdsb2JhbCgkZXZlbnQudGFyZ2V0LnZhbHVlLCAnY29udGFpbnMnKVwiXG4gICAgICAgICAgY2xhc3M9XCJtdy05MFwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdMYWJlbC5OYW1lJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5QcmljZVBlclVuaXQnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLkN1cnJlbmN5JyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5CaWxsaW5nRnJlcXVlbmN5JyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5NaW5Vbml0cycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuTWF4VW5pdHMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLlB1cmNoYXNlZFVuaXRzJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5DYWxjdWxhdGVkUHJpY2UnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLklzRGVsZXRlZCcgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJhY3Rpb25zLWxpc3QtdHdvXCJcbiAgICAgICAgICBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuQWN0aW9ucycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgIGxldC1pdGVtPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTmFtZVwiPnt7IGl0ZW0ubmFtZSB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJQcmljZSBQZXIgVW5pdFwiPlxuICAgICAgICAgIDxzcGFuPnt7IChpdGVtLnByaWNlX3Blcl91bml0IC8gMTAwKS50b0ZpeGVkKDIpIH19XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8uZGlzY291bnQgJiYgb2JqZWN0S2V5cyhpdGVtPy5kaXNjb3VudCk/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJpdGVtPy5kaXNjb3VudCB8IGpzb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJDdXJyZW5jeVwiPlxuICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBjdXJyZW5jeSwgaXRlbTogaXRlbS5jdXJyZW5jeSB9XCJcbiAgICAgICAgICAgIGNvbG9yPVwiYmx1ZS1ncmV5XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBpdGVtLmN1cnJlbmN5IH19PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQmlsbGluZyBGcmVxdWVuY3lcIj5cbiAgICAgICAgICB7eyBpdGVtLmJpbGxpbmdfZnJlcXVlbmN5IH19XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5wYXVzZV9jb2xsZWN0aW9uICYmIG9iamVjdEtleXMoaXRlbT8ucGF1c2VfY29sbGVjdGlvbik/Lmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cIm1zLTJcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIml0ZW0/LnBhdXNlX2NvbGxlY3Rpb24gfCBqc29uXCJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUgdGV4dC13YXJuaW5nXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIk1pbiBVbml0c1wiPnt7IGl0ZW0ubWluX3VuaXRzIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIk1heCBVbml0c1wiPnt7IGl0ZW0ubWF4X3VuaXRzIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlB1cmNoYXNlZCBVbml0c1wiPnt7IGl0ZW0ucHVyY2hhc2VkX3VuaXRzIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkNhbGN1bGF0ZWQgUHJpY2VcIj57eyAoaXRlbS5jYWxjdWxhdGVkX3ByaWNlIC8gMTAwKS50b0ZpeGVkKDIpIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkRlbGV0ZWRcIj5cbiAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogW3RydWUsIGZhbHNlXSwgaXRlbTogaXRlbT8uaXNfZGVsZXRlZCB9XCJcbiAgICAgICAgICAgIGNvbG9yPVwic3VjY2Vzcy1kYW5nZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZVwiPnt7IGl0ZW0/LmlzX2RlbGV0ZWQgPyAnWWVzJyA6ICdObycgfX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJBY3Rpb25cIj5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIGxpc3QtaW5saW5lXCI+XG4gICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkVkaXRcIlxuICAgICAgICAgICAgICAqcmJhY0FsbG93PVwiJ1N1YnNjcmlwdGlvblN1cGVyQWRtaW4nXCJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJzLnN1YnNjcmlwdGlvblByb2R1Y3REZXRhaWxzICsgaXRlbS5zdWJzY3JpcHRpb25fcHJvZHVjdF9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwieyBzdWJzY3JpcHRpb25faWQ6IGlkIH1cIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0IGVkaXQtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuICA8c3BhbiBjbGFzcz1cInRvdGFsLXJlY29yZHMtY291bnRcIiAqbmdJZj1cInRvdGFsUmVjb3JkcyAhPT0gMFwiPnt7ICdMYWJlbC5Ub3RhbCcgfCB0cmFuc2xvY28gfX06IHt7IHRvdGFsUmVjb3JkcyB9fTwvc3Bhbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cInRvdGFsUmVjb3JkcyA9PT0gMCAmJiBpc0xvYWRlZFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ob1N1YnNjcmlwdGlvblByb2R1Y3RzTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgPC9wdy1uby1kYXRhPlxuPC9kaXY+XG4iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9zdWJzY3JpcHRpb25zL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3RzL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFNaEYsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGdCQUFnQjtJQXFCL0QsWUFDWSxtQkFBd0MsRUFDaEQsUUFBa0IsRUFDVixjQUE4QjtRQUV0QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKUix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBRXhDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXJCMUMseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBSTFCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUVmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUVsQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsMkJBQXNCLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLGVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBUXpCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLE9BQU8sQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQjthQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzthQUNoQixTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDL0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUM1RCxDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOytHQXhEUSw2QkFBNkI7bUdBQTdCLDZCQUE2Qix1RkNWMUMsbWlKQXNHQTs7NEZENUZhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDSSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UsIFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zdWJzY3JpcHRpb24tcHJvZHVjdHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblByb2R1Y3RzQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgaWQ6IG51bWJlcjtcblxuICAgIHN1YnNjcmlwdGlvblByb2R1Y3RzID0gW107XG5cbiAgICB0b3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcblxuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgY3VycmVuY3kgPSBbXTtcblxuICAgIHRvdGFsUmVjb3Jkc1VuRmlsdGVyZWQgPSAwO1xuXG4gICAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uU2VydmljZTogU3Vic2NyaXB0aW9uU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHByb2R1Y3RTZXJ2aWNlOiBQcm9kdWN0U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0U3VwcG9ydGVkQ3VycmVuY3koKTtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IE51bWJlcihkYXRhWydpZCddKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uRGV0YWlscygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1cHBvcnRlZEN1cnJlbmN5KCkge1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldFN1cHBvcnRlZEN1cnJlbmN5KCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbmN5ID0gcmVzPy5yZWdpb25zO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1YnNjcmlwdGlvbkRldGFpbHMoKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QnlJZCh0aGlzLmlkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25Qcm9kdWN0cyA9IHJlc3BvbnNlPy5wcm9kdWN0cyB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHJlc3BvbnNlPy5wcm9kdWN0cz8ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzVW5GaWx0ZXJlZCA9IHJlc3BvbnNlLnVuZmlsdGVyZWRfY291bnQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiPlxuICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWlzTG9hZGVkXCI+XG4gICAgPHAtcHJvZ3Jlc3NTcGlubmVyPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicHJpbWVuZy1kYXRhdGFibGUtY29udGFpbmVyIHRhYmxlLXJlc3BvbnNpdmUgbXQtMFwiXG4gIFtjbGFzcy5oaWRlVGFibGVdPVwidG90YWxSZWNvcmRzVW5GaWx0ZXJlZCA9PT0gMFwiPlxuICA8cC10YWJsZSAjZHRcbiAgICBbdmFsdWVdPVwic3Vic2NyaXB0aW9uUHJvZHVjdHNcIlxuICAgIFtwYWdpbmF0b3JdPVwidG90YWxSZWNvcmRzICE9PSAwXCJcbiAgICBbcm93c109XCJQQUdFX1NJWkVcIlxuICAgIFtsYXp5XT1cInRydWVcIlxuICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICBbZmlsdGVyRGVsYXldPVwiMTAwMFwiXG4gICAgW2N1c3RvbVNvcnRdPVwidHJ1ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmRcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggbXQtMiBtZS0yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgIHNpemU9XCI1MFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3Vic2NyaXB0aW9uIHByb2R1Y3RzLi4uXCJcbiAgICAgICAgICAoaW5wdXQpPVwiZHQuZmlsdGVyR2xvYmFsKCRldmVudC50YXJnZXQudmFsdWUsICdjb250YWlucycpXCJcbiAgICAgICAgICBjbGFzcz1cIm13LTkwXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0xhYmVsLk5hbWUnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLlByaWNlUGVyVW5pdCcgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuQ3VycmVuY3knIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLkJpbGxpbmdGcmVxdWVuY3knIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLk1pblVuaXRzJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5NYXhVbml0cycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuUHVyY2hhc2VkVW5pdHMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLkNhbGN1bGF0ZWRQcmljZScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuSXNEZWxldGVkJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImFjdGlvbnMtbGlzdC10d29cIlxuICAgICAgICAgIHNjb3BlPVwidHJ1ZVwiPnt7ICdMYWJlbC5BY3Rpb25zJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LWl0ZW0+XG4gICAgICA8dHI+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJOYW1lXCI+e3sgaXRlbS5uYW1lIH19PC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlByaWNlIFBlciBVbml0XCI+XG4gICAgICAgICAgPHNwYW4+e3sgKGl0ZW0ucHJpY2VfcGVyX3VuaXQgLyAxMDApLnRvRml4ZWQoMikgfX1cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtPy5kaXNjb3VudCAmJiBvYmplY3RLZXlzKGl0ZW0/LmRpc2NvdW50KT8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIml0ZW0/LmRpc2NvdW50IHwganNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkN1cnJlbmN5XCI+XG4gICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IGN1cnJlbmN5LCBpdGVtOiBpdGVtLmN1cnJlbmN5IH1cIlxuICAgICAgICAgICAgY29sb3I9XCJibHVlLWdyZXlcIlxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZVwiPnt7IGl0ZW0uY3VycmVuY3kgfX08L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJCaWxsaW5nIEZyZXF1ZW5jeVwiPlxuICAgICAgICAgIHt7IGl0ZW0uYmlsbGluZ19mcmVxdWVuY3kgfX1cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LnBhdXNlX2NvbGxlY3Rpb24gJiYgb2JqZWN0S2V5cyhpdGVtPy5wYXVzZV9jb2xsZWN0aW9uKT8ubGVuZ3RoXCJcbiAgICAgICAgICAgIGNsYXNzPVwibXMtMlwiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiaXRlbT8ucGF1c2VfY29sbGVjdGlvbiB8IGpzb25cIlxuICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZSB0ZXh0LXdhcm5pbmdcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTWluIFVuaXRzXCI+e3sgaXRlbS5taW5fdW5pdHMgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiTWF4IFVuaXRzXCI+e3sgaXRlbS5tYXhfdW5pdHMgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUHVyY2hhc2VkIFVuaXRzXCI+e3sgaXRlbS5wdXJjaGFzZWRfdW5pdHMgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQ2FsY3VsYXRlZCBQcmljZVwiPnt7IChpdGVtLmNhbGN1bGF0ZWRfcHJpY2UgLyAxMDApLnRvRml4ZWQoMikgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiRGVsZXRlZFwiPlxuICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBbdHJ1ZSwgZmFsc2VdLCBpdGVtOiBpdGVtPy5pc19kZWxldGVkIH1cIlxuICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgaXRlbT8uaXNfZGVsZXRlZCA/ICdZZXMnIDogJ05vJyB9fTwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkFjdGlvblwiPlxuICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbGlzdC1pbmxpbmVcIj5cbiAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRWRpdFwiXG4gICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uU3VwZXJBZG1pbidcIlxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcnMuc3Vic2NyaXB0aW9uUHJvZHVjdERldGFpbHMgKyBpdGVtLnN1YnNjcmlwdGlvbl9wcm9kdWN0X2lkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJ7IHN1YnNjcmlwdGlvbl9pZDogaWQgfVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtdGFibGU+XG4gIDxzcGFuIGNsYXNzPVwidG90YWwtcmVjb3Jkcy1jb3VudFwiICpuZ0lmPVwidG90YWxSZWNvcmRzICE9PSAwXCI+e3sgJ0xhYmVsLlRvdGFsJyB8IHRyYW5zbG9jbyB9fToge3sgdG90YWxSZWNvcmRzIH19PC9zcGFuPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwidG90YWxSZWNvcmRzVW5GaWx0ZXJlZCA9PT0gMCAmJiBpc0xvYWRlZFwiPlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ob1N1YnNjcmlwdGlvblByb2R1Y3RzTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgPC9wdy1uby1kYXRhPlxuPC9kaXY+XG4iXX0=
@@ -38,6 +38,7 @@ export class SubscriptionUsersComponent extends AppBaseComponent {
38
38
  this.searchText = '';
39
39
  this.page = 1;
40
40
  this.routers = ROUTERS;
41
+ this.totalUnfilteredCount = 0;
41
42
  }
42
43
  ngOnInit() {
43
44
  this.subscriptionId = PermissionService.selectedSubscription?.id;
@@ -111,7 +112,8 @@ export class SubscriptionUsersComponent extends AppBaseComponent {
111
112
  .getEnrolledSubscription(this.id, paging)
112
113
  .subscribe(response => {
113
114
  this.subscriptionMembers = response?.members || [];
114
- this.totalRecords = response?.length;
115
+ this.totalRecords = response?.members.length;
116
+ this.totalUnfilteredCount = response.unfiltered_count;
115
117
  })
116
118
  .add(() => {
117
119
  this.isLoaded = true;
@@ -119,11 +121,11 @@ export class SubscriptionUsersComponent extends AppBaseComponent {
119
121
  });
120
122
  }
121
123
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionUsersComponent, deps: [{ token: i1.SubscriptionService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1.AuthService }, { token: i1.WindowService }, { token: i2.AdminService }, { token: i1.CustomToastService }], target: i0.ɵɵFactoryTarget.Component }); }
122
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SubscriptionUsersComponent, selector: "pw-subscription-users", viewQueries: [{ propertyName: "passwordValidationModalForImpersonate", first: true, predicate: ["passwordValidationModalForImpersonate"], descendants: true }, { propertyName: "passwordValidationModalForUserDelete", first: true, predicate: ["passwordValidationModalForUserDelete"], descendants: true }, { propertyName: "passwordValidationModalForRemove2fa", first: true, predicate: ["passwordValidationModalForRemove2fa"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n\t<ng-template [ngIf]=\"!isLoaded\">\n\t\t<p-progressSpinner></p-progressSpinner>\n\t</ng-template>\n</div>\n<div [class.hideTable]=\"totalRecords === 0\"\n\tclass=\"primeng-datatable-container table-responsive mt-0\">\n\t<p-table #dt\n\t\t[value]=\"subscriptionMembers\"\n\t\t[paginator]=\"totalRecords !== 0\"\n\t\t[rows]=\"PAGE_SIZE\"\n\t\t[lazy]=\"true\"\n\t\t[totalRecords]=\"totalRecords\"\n\t\t[loading]=\"loading\"\n\t\t[filterDelay]=\"1000\"\n\t\t[customSort]=\"true\"\n\t\t(onLazyLoad)=\"onLazyLoad($event)\">\n\t\t<ng-template pTemplate=\"caption\">\n\t\t\t<div class=\"text-end\">\n\t\t\t\t<i class=\"fa fa-search mt-2 me-2\"\n\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t<input [(ngModel)]=\"searchText\"\n\t\t\t\t\t(input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tpInputText\n\t\t\t\t\tsize=\"50\"\n\t\t\t\t\tplaceholder=\"Search subscription users...\"\n\t\t\t\t\tclass=\"mw-90\">\n\t\t\t</div>\n\t\t</ng-template>\n\t\t<ng-template pTemplate=\"header\">\n\t\t\t<tr>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"id\">\n\t\t\t\t\t{{ 'Admin.Users.Id' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"id\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"first_name\">\n\t\t\t\t\t{{ 'Label.FirstName' | transloco }}\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"last_name\">\n\t\t\t\t\t{{ 'Label.LastName' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"last_name\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"email\">\n\t\t\t\t\t{{ 'Label.Email' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"email\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"slug\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.NickName' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"slug\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"has_password\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.EmailConfirmed' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"has_password\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"last_sign_in_at\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.LastLogin' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\">\n\t\t\t\t\t{{ 'Label.Actions' | transloco }}\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</ng-template>\n\t\t<ng-template pTemplate=\"body\"\n\t\t\tlet-user>\n\t\t\t<tr>\n\t\t\t\t<td data-head=\"Id\">{{ user.id }}</td>\n\t\t\t\t<td data-head=\"First Name\">\n\t\t\t\t\t{{ user.first_name }}\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Last Name\">\n\t\t\t\t\t{{ user.last_name }}\n\t\t\t\t\t<span *ngIf=\"user?.alpha\"\n\t\t\t\t\t\t[pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span *ngIf=\"user?.beta\"\n\t\t\t\t\t\t[pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n\t\t\t\t\t\tclass=\"ms-2\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-regular fa-square-b alpha-beta text-primary\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Email\">{{ user.email }}</td>\n\t\t\t\t<td data-head=\"Nick Name\">\n\t\t\t\t\t<a [routerLink]=\"['/members', user.slug]\">{{ user.slug }}</a>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Email Confirm\">\n\t\t\t\t\t<span [appDynamicBadge]=\"{ itemsArray: [true, false], item: user?.has_password }\"\n\t\t\t\t\t\tcolor=\"success-danger\"\n\t\t\t\t\t\tclass=\"badge\">\n\t\t\t\t\t\t{{ user?.has_password ? 'Yes' : 'No' }}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span *ngIf=\"user?.blocked\"\n\t\t\t\t\t\t[pTooltip]=\"'This user has been blocked'\"\n\t\t\t\t\t\tclass=\"ms-2\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-solid fa-hexagon-exclamation text-danger hexa-warning\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Last Login\">\n\t\t\t\t\t<span *ngIf=\"user?.current_sign_in_at; else lastSignin\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{{ user.current_sign_in_at | dateFormat }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span *ngIf=\"user.current_sign_in_at\">\n\t\t\t\t\t\t\t&nbsp;({{ user.current_sign_in_at | sinceAgo }})\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<ng-template #lastSignin>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{{ user.last_sign_in_at | dateFormat }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span *ngIf=\"user.last_sign_in_at\">\n\t\t\t\t\t\t\t\t&nbsp;({{ user.last_sign_in_at | sinceAgo }})\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Action\">\n\t\t\t\t\t<ul class=\"list-unstyled list-inline\">\n\t\t\t\t\t\t<ng-template [ngIf]=\"!user?.enable_two_factor_authenticator\">\n\t\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Alpha'\"\n\t\t\t\t\t\t\t\t(click)=\"disable2fa(user?.id)\"\n\t\t\t\t\t\t\t\tngbTooltip=\"Disable 2fa\"\n\t\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t\t<i class=\"fa fa-lock\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Alpha'\"\n\t\t\t\t\t\t\tngbTooltip=\"Log in as\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i (click)=\"onImpersonate(user)\"\n\t\t\t\t\t\t\t\tclass=\"fas fa-people-arrows\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li [routerLink]=\"[routers.usersDetails + user.id]\"\n\t\t\t\t\t\t\tngbTooltip=\"Edit\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i class=\"fa fa-edit edit-icon\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n\t\t\t\t\t\t\tngbTooltip=\"Delete\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i (click)=\"onDelete(user)\"\n\t\t\t\t\t\t\t\tclass=\"fa fa-trash delete-icon\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</ng-template>\n\t</p-table>\n\t<span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">\n\t\t{{ 'Label.Total' | transloco }}: {{ totalRecords }}\n\t</span>\n</div>\n<div *ngIf=\"totalRecords === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionUsersMessage' | transloco\">\n </pw-no-data>\n</div>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n\t(successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n\t(successEvent)=\"deleteUser($event)\">\n\t<div class=\"row\">\n\t\t<div class=\"col-12\">\n\t\t\t<p>\n\t\t\t\t{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t{{ 'User.Account.Message.ConfirmPassword' | transloco }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n\t(successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [".hexa-warning{font-size:18px;vertical-align:middle}.alpha-beta{font-size:14px}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i3.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.PasswordValidationComponent, selector: "pw-password-validation", outputs: ["successEvent"] }, { kind: "directive", type: i10.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i11.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i9.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i12.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i12.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i13.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i14.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i15.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i15.SinceAgoPipe, name: "sinceAgo" }] }); }
124
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SubscriptionUsersComponent, selector: "pw-subscription-users", viewQueries: [{ propertyName: "passwordValidationModalForImpersonate", first: true, predicate: ["passwordValidationModalForImpersonate"], descendants: true }, { propertyName: "passwordValidationModalForUserDelete", first: true, predicate: ["passwordValidationModalForUserDelete"], descendants: true }, { propertyName: "passwordValidationModalForRemove2fa", first: true, predicate: ["passwordValidationModalForRemove2fa"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n\t<ng-template [ngIf]=\"!isLoaded\">\n\t\t<p-progressSpinner></p-progressSpinner>\n\t</ng-template>\n</div>\n<div [class.hideTable]=\"totalUnfilteredCount === 0\"\n\tclass=\"primeng-datatable-container table-responsive mt-0\">\n\t<p-table #dt\n\t\t[value]=\"subscriptionMembers\"\n\t\t[paginator]=\"totalRecords !== 0\"\n\t\t[rows]=\"PAGE_SIZE\"\n\t\t[lazy]=\"true\"\n\t\t[totalRecords]=\"totalRecords\"\n\t\t[loading]=\"loading\"\n\t\t[filterDelay]=\"1000\"\n\t\t[customSort]=\"true\"\n\t\t(onLazyLoad)=\"onLazyLoad($event)\">\n\t\t<ng-template pTemplate=\"caption\">\n\t\t\t<div class=\"text-end\">\n\t\t\t\t<i class=\"fa fa-search mt-2 me-2\"\n\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t<input [(ngModel)]=\"searchText\"\n\t\t\t\t\t(input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tpInputText\n\t\t\t\t\tsize=\"50\"\n\t\t\t\t\tplaceholder=\"Search subscription users...\"\n\t\t\t\t\tclass=\"mw-90\">\n\t\t\t</div>\n\t\t</ng-template>\n\t\t<ng-template pTemplate=\"header\">\n\t\t\t<tr>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"id\">\n\t\t\t\t\t{{ 'Admin.Users.Id' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"id\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"first_name\">\n\t\t\t\t\t{{ 'Label.FirstName' | transloco }}\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"last_name\">\n\t\t\t\t\t{{ 'Label.LastName' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"last_name\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"email\">\n\t\t\t\t\t{{ 'Label.Email' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"email\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"slug\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.NickName' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"slug\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"has_password\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.EmailConfirmed' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"has_password\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"last_sign_in_at\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.LastLogin' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\">\n\t\t\t\t\t{{ 'Label.Actions' | transloco }}\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</ng-template>\n\t\t<ng-template pTemplate=\"body\"\n\t\t\tlet-user>\n\t\t\t<tr>\n\t\t\t\t<td data-head=\"Id\">{{ user.id }}</td>\n\t\t\t\t<td data-head=\"First Name\">\n\t\t\t\t\t{{ user.first_name }}\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Last Name\">\n\t\t\t\t\t{{ user.last_name }}\n\t\t\t\t\t<span *ngIf=\"user?.alpha\"\n\t\t\t\t\t\t[pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span *ngIf=\"user?.beta\"\n\t\t\t\t\t\t[pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n\t\t\t\t\t\tclass=\"ms-2\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-regular fa-square-b alpha-beta text-primary\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Email\">{{ user.email }}</td>\n\t\t\t\t<td data-head=\"Nick Name\">\n\t\t\t\t\t<a [routerLink]=\"['/members', user.slug]\">{{ user.slug }}</a>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Email Confirm\">\n\t\t\t\t\t<span [appDynamicBadge]=\"{ itemsArray: [true, false], item: user?.has_password }\"\n\t\t\t\t\t\tcolor=\"success-danger\"\n\t\t\t\t\t\tclass=\"badge\">\n\t\t\t\t\t\t{{ user?.has_password ? 'Yes' : 'No' }}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span *ngIf=\"user?.blocked\"\n\t\t\t\t\t\t[pTooltip]=\"'This user has been blocked'\"\n\t\t\t\t\t\tclass=\"ms-2\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-solid fa-hexagon-exclamation text-danger hexa-warning\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Last Login\">\n\t\t\t\t\t<span *ngIf=\"user?.current_sign_in_at; else lastSignin\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{{ user.current_sign_in_at | dateFormat }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span *ngIf=\"user.current_sign_in_at\">\n\t\t\t\t\t\t\t&nbsp;({{ user.current_sign_in_at | sinceAgo }})\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<ng-template #lastSignin>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{{ user.last_sign_in_at | dateFormat }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span *ngIf=\"user.last_sign_in_at\">\n\t\t\t\t\t\t\t\t&nbsp;({{ user.last_sign_in_at | sinceAgo }})\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Action\">\n\t\t\t\t\t<ul class=\"list-unstyled list-inline\">\n\t\t\t\t\t\t<ng-template [ngIf]=\"user?.enable_two_factor_authenticator\">\n\t\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Alpha'\"\n\t\t\t\t\t\t\t\t(click)=\"disable2fa(user?.id)\"\n\t\t\t\t\t\t\t\tngbTooltip=\"Disable 2fa\"\n\t\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t\t<i class=\"fa fa-lock\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Alpha'\"\n\t\t\t\t\t\t\tngbTooltip=\"Log in as\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i (click)=\"onImpersonate(user)\"\n\t\t\t\t\t\t\t\tclass=\"fas fa-people-arrows\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li [routerLink]=\"[routers.usersDetails + user.id]\"\n\t\t\t\t\t\t\tngbTooltip=\"Edit\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i class=\"fa fa-edit edit-icon\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n\t\t\t\t\t\t\tngbTooltip=\"Delete\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i (click)=\"onDelete(user)\"\n\t\t\t\t\t\t\t\tclass=\"fa fa-trash delete-icon\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</ng-template>\n\t</p-table>\n\t<div *ngIf=\"totalRecords === 0 && totalUnfilteredCount !== 0\">\n\t\t<pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n\t\t</pw-no-data>\n\t</div>\n\t<span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">\n\t\t{{ 'Label.Total' | transloco }}: {{ totalRecords }}\n\t</span>\n</div>\n<div *ngIf=\"totalUnfilteredCount === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionUsersMessage' | transloco\">\n </pw-no-data>\n</div>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n\t(successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n\t(successEvent)=\"deleteUser($event)\">\n\t<div class=\"row\">\n\t\t<div class=\"col-12\">\n\t\t\t<p>\n\t\t\t\t{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t{{ 'User.Account.Message.ConfirmPassword' | transloco }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n\t(successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [".hexa-warning{font-size:18px;vertical-align:middle}.alpha-beta{font-size:14px}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i3.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.PasswordValidationComponent, selector: "pw-password-validation", outputs: ["successEvent"] }, { kind: "directive", type: i10.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i11.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i9.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i12.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i12.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i13.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i14.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i15.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i15.SinceAgoPipe, name: "sinceAgo" }] }); }
123
125
  }
124
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionUsersComponent, decorators: [{
125
127
  type: Component,
126
- args: [{ selector: 'pw-subscription-users', template: "<div class=\"w-100 text-center mt-3\">\n\t<ng-template [ngIf]=\"!isLoaded\">\n\t\t<p-progressSpinner></p-progressSpinner>\n\t</ng-template>\n</div>\n<div [class.hideTable]=\"totalRecords === 0\"\n\tclass=\"primeng-datatable-container table-responsive mt-0\">\n\t<p-table #dt\n\t\t[value]=\"subscriptionMembers\"\n\t\t[paginator]=\"totalRecords !== 0\"\n\t\t[rows]=\"PAGE_SIZE\"\n\t\t[lazy]=\"true\"\n\t\t[totalRecords]=\"totalRecords\"\n\t\t[loading]=\"loading\"\n\t\t[filterDelay]=\"1000\"\n\t\t[customSort]=\"true\"\n\t\t(onLazyLoad)=\"onLazyLoad($event)\">\n\t\t<ng-template pTemplate=\"caption\">\n\t\t\t<div class=\"text-end\">\n\t\t\t\t<i class=\"fa fa-search mt-2 me-2\"\n\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t<input [(ngModel)]=\"searchText\"\n\t\t\t\t\t(input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tpInputText\n\t\t\t\t\tsize=\"50\"\n\t\t\t\t\tplaceholder=\"Search subscription users...\"\n\t\t\t\t\tclass=\"mw-90\">\n\t\t\t</div>\n\t\t</ng-template>\n\t\t<ng-template pTemplate=\"header\">\n\t\t\t<tr>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"id\">\n\t\t\t\t\t{{ 'Admin.Users.Id' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"id\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"first_name\">\n\t\t\t\t\t{{ 'Label.FirstName' | transloco }}\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"last_name\">\n\t\t\t\t\t{{ 'Label.LastName' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"last_name\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"email\">\n\t\t\t\t\t{{ 'Label.Email' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"email\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"slug\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.NickName' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"slug\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"has_password\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.EmailConfirmed' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"has_password\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"last_sign_in_at\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.LastLogin' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\">\n\t\t\t\t\t{{ 'Label.Actions' | transloco }}\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</ng-template>\n\t\t<ng-template pTemplate=\"body\"\n\t\t\tlet-user>\n\t\t\t<tr>\n\t\t\t\t<td data-head=\"Id\">{{ user.id }}</td>\n\t\t\t\t<td data-head=\"First Name\">\n\t\t\t\t\t{{ user.first_name }}\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Last Name\">\n\t\t\t\t\t{{ user.last_name }}\n\t\t\t\t\t<span *ngIf=\"user?.alpha\"\n\t\t\t\t\t\t[pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span *ngIf=\"user?.beta\"\n\t\t\t\t\t\t[pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n\t\t\t\t\t\tclass=\"ms-2\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-regular fa-square-b alpha-beta text-primary\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Email\">{{ user.email }}</td>\n\t\t\t\t<td data-head=\"Nick Name\">\n\t\t\t\t\t<a [routerLink]=\"['/members', user.slug]\">{{ user.slug }}</a>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Email Confirm\">\n\t\t\t\t\t<span [appDynamicBadge]=\"{ itemsArray: [true, false], item: user?.has_password }\"\n\t\t\t\t\t\tcolor=\"success-danger\"\n\t\t\t\t\t\tclass=\"badge\">\n\t\t\t\t\t\t{{ user?.has_password ? 'Yes' : 'No' }}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span *ngIf=\"user?.blocked\"\n\t\t\t\t\t\t[pTooltip]=\"'This user has been blocked'\"\n\t\t\t\t\t\tclass=\"ms-2\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-solid fa-hexagon-exclamation text-danger hexa-warning\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Last Login\">\n\t\t\t\t\t<span *ngIf=\"user?.current_sign_in_at; else lastSignin\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{{ user.current_sign_in_at | dateFormat }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span *ngIf=\"user.current_sign_in_at\">\n\t\t\t\t\t\t\t&nbsp;({{ user.current_sign_in_at | sinceAgo }})\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<ng-template #lastSignin>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{{ user.last_sign_in_at | dateFormat }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span *ngIf=\"user.last_sign_in_at\">\n\t\t\t\t\t\t\t\t&nbsp;({{ user.last_sign_in_at | sinceAgo }})\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Action\">\n\t\t\t\t\t<ul class=\"list-unstyled list-inline\">\n\t\t\t\t\t\t<ng-template [ngIf]=\"!user?.enable_two_factor_authenticator\">\n\t\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Alpha'\"\n\t\t\t\t\t\t\t\t(click)=\"disable2fa(user?.id)\"\n\t\t\t\t\t\t\t\tngbTooltip=\"Disable 2fa\"\n\t\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t\t<i class=\"fa fa-lock\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Alpha'\"\n\t\t\t\t\t\t\tngbTooltip=\"Log in as\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i (click)=\"onImpersonate(user)\"\n\t\t\t\t\t\t\t\tclass=\"fas fa-people-arrows\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li [routerLink]=\"[routers.usersDetails + user.id]\"\n\t\t\t\t\t\t\tngbTooltip=\"Edit\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i class=\"fa fa-edit edit-icon\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n\t\t\t\t\t\t\tngbTooltip=\"Delete\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i (click)=\"onDelete(user)\"\n\t\t\t\t\t\t\t\tclass=\"fa fa-trash delete-icon\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</ng-template>\n\t</p-table>\n\t<span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">\n\t\t{{ 'Label.Total' | transloco }}: {{ totalRecords }}\n\t</span>\n</div>\n<div *ngIf=\"totalRecords === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionUsersMessage' | transloco\">\n </pw-no-data>\n</div>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n\t(successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n\t(successEvent)=\"deleteUser($event)\">\n\t<div class=\"row\">\n\t\t<div class=\"col-12\">\n\t\t\t<p>\n\t\t\t\t{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t{{ 'User.Account.Message.ConfirmPassword' | transloco }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n\t(successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [".hexa-warning{font-size:18px;vertical-align:middle}.alpha-beta{font-size:14px}\n"] }]
128
+ args: [{ selector: 'pw-subscription-users', template: "<div class=\"w-100 text-center mt-3\">\n\t<ng-template [ngIf]=\"!isLoaded\">\n\t\t<p-progressSpinner></p-progressSpinner>\n\t</ng-template>\n</div>\n<div [class.hideTable]=\"totalUnfilteredCount === 0\"\n\tclass=\"primeng-datatable-container table-responsive mt-0\">\n\t<p-table #dt\n\t\t[value]=\"subscriptionMembers\"\n\t\t[paginator]=\"totalRecords !== 0\"\n\t\t[rows]=\"PAGE_SIZE\"\n\t\t[lazy]=\"true\"\n\t\t[totalRecords]=\"totalRecords\"\n\t\t[loading]=\"loading\"\n\t\t[filterDelay]=\"1000\"\n\t\t[customSort]=\"true\"\n\t\t(onLazyLoad)=\"onLazyLoad($event)\">\n\t\t<ng-template pTemplate=\"caption\">\n\t\t\t<div class=\"text-end\">\n\t\t\t\t<i class=\"fa fa-search mt-2 me-2\"\n\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t<input [(ngModel)]=\"searchText\"\n\t\t\t\t\t(input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tpInputText\n\t\t\t\t\tsize=\"50\"\n\t\t\t\t\tplaceholder=\"Search subscription users...\"\n\t\t\t\t\tclass=\"mw-90\">\n\t\t\t</div>\n\t\t</ng-template>\n\t\t<ng-template pTemplate=\"header\">\n\t\t\t<tr>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"id\">\n\t\t\t\t\t{{ 'Admin.Users.Id' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"id\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"first_name\">\n\t\t\t\t\t{{ 'Label.FirstName' | transloco }}\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"last_name\">\n\t\t\t\t\t{{ 'Label.LastName' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"last_name\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"email\">\n\t\t\t\t\t{{ 'Label.Email' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"email\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"slug\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.NickName' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"slug\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"has_password\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.EmailConfirmed' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"has_password\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\"\n\t\t\t\t\tpSortableColumn=\"last_sign_in_at\">\n\t\t\t\t\t{{ 'Admin.Subscriptions.LastLogin' | transloco }}\n\t\t\t\t\t<p-sortIcon field=\"last_sign_in_at\"></p-sortIcon>\n\t\t\t\t</th>\n\t\t\t\t<th scope=\"true\">\n\t\t\t\t\t{{ 'Label.Actions' | transloco }}\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</ng-template>\n\t\t<ng-template pTemplate=\"body\"\n\t\t\tlet-user>\n\t\t\t<tr>\n\t\t\t\t<td data-head=\"Id\">{{ user.id }}</td>\n\t\t\t\t<td data-head=\"First Name\">\n\t\t\t\t\t{{ user.first_name }}\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Last Name\">\n\t\t\t\t\t{{ user.last_name }}\n\t\t\t\t\t<span *ngIf=\"user?.alpha\"\n\t\t\t\t\t\t[pTooltip]=\"'Admin.Users.Tooltip.AlphaIcon'|transloco\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-regular fa-square-a alpha-beta text-warning\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span *ngIf=\"user?.beta\"\n\t\t\t\t\t\t[pTooltip]=\"'Admin.Users.Tooltip.BetaIcon'|transloco\"\n\t\t\t\t\t\tclass=\"ms-2\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-regular fa-square-b alpha-beta text-primary\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Email\">{{ user.email }}</td>\n\t\t\t\t<td data-head=\"Nick Name\">\n\t\t\t\t\t<a [routerLink]=\"['/members', user.slug]\">{{ user.slug }}</a>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Email Confirm\">\n\t\t\t\t\t<span [appDynamicBadge]=\"{ itemsArray: [true, false], item: user?.has_password }\"\n\t\t\t\t\t\tcolor=\"success-danger\"\n\t\t\t\t\t\tclass=\"badge\">\n\t\t\t\t\t\t{{ user?.has_password ? 'Yes' : 'No' }}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span *ngIf=\"user?.blocked\"\n\t\t\t\t\t\t[pTooltip]=\"'This user has been blocked'\"\n\t\t\t\t\t\tclass=\"ms-2\"\n\t\t\t\t\t\ttooltipPosition=\"top\">\n\t\t\t\t\t\t<i class=\"fa-solid fa-hexagon-exclamation text-danger hexa-warning\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Last Login\">\n\t\t\t\t\t<span *ngIf=\"user?.current_sign_in_at; else lastSignin\">\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{{ user.current_sign_in_at | dateFormat }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span *ngIf=\"user.current_sign_in_at\">\n\t\t\t\t\t\t\t&nbsp;({{ user.current_sign_in_at | sinceAgo }})\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<ng-template #lastSignin>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{{ user.last_sign_in_at | dateFormat }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span *ngIf=\"user.last_sign_in_at\">\n\t\t\t\t\t\t\t\t&nbsp;({{ user.last_sign_in_at | sinceAgo }})\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</td>\n\t\t\t\t<td data-head=\"Action\">\n\t\t\t\t\t<ul class=\"list-unstyled list-inline\">\n\t\t\t\t\t\t<ng-template [ngIf]=\"user?.enable_two_factor_authenticator\">\n\t\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Alpha'\"\n\t\t\t\t\t\t\t\t(click)=\"disable2fa(user?.id)\"\n\t\t\t\t\t\t\t\tngbTooltip=\"Disable 2fa\"\n\t\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t\t<i class=\"fa fa-lock\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Alpha'\"\n\t\t\t\t\t\t\tngbTooltip=\"Log in as\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i (click)=\"onImpersonate(user)\"\n\t\t\t\t\t\t\t\tclass=\"fas fa-people-arrows\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li [routerLink]=\"[routers.usersDetails + user.id]\"\n\t\t\t\t\t\t\tngbTooltip=\"Edit\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i class=\"fa fa-edit edit-icon\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<li *rbacAllow=\"'Pages.Admin.Users.Delete'\"\n\t\t\t\t\t\t\tngbTooltip=\"Delete\"\n\t\t\t\t\t\t\tclass=\"me-2 me-sm-3\">\n\t\t\t\t\t\t\t<i (click)=\"onDelete(user)\"\n\t\t\t\t\t\t\t\tclass=\"fa fa-trash delete-icon\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"></i>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</ng-template>\n\t</p-table>\n\t<div *ngIf=\"totalRecords === 0 && totalUnfilteredCount !== 0\">\n\t\t<pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n\t\t</pw-no-data>\n\t</div>\n\t<span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">\n\t\t{{ 'Label.Total' | transloco }}: {{ totalRecords }}\n\t</span>\n</div>\n<div *ngIf=\"totalUnfilteredCount === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionUsersMessage' | transloco\">\n </pw-no-data>\n</div>\n<!-- password validation modal for impersonate -->\n<pw-password-validation #passwordValidationModalForImpersonate\n\t(successEvent)=\"onUserImpersonation($event)\">\n</pw-password-validation>\n<!-- password validation modal for delete user -->\n<pw-password-validation #passwordValidationModalForUserDelete\n\t(successEvent)=\"deleteUser($event)\">\n\t<div class=\"row\">\n\t\t<div class=\"col-12\">\n\t\t\t<p>\n\t\t\t\t{{ 'User.Account.Message.ActionCanNotUndone' | transloco }}\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t{{ 'User.Account.Message.ConfirmPassword' | transloco }}\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</pw-password-validation>\n<!-- password validation modal for remove2fa -->\n<pw-password-validation #passwordValidationModalForRemove2fa\n\t(successEvent)=\"remove2fa($event)\">\n</pw-password-validation>\n", styles: [".hexa-warning{font-size:18px;vertical-align:middle}.alpha-beta{font-size:14px}\n"] }]
127
129
  }], ctorParameters: () => [{ type: i1.SubscriptionService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1.AuthService }, { type: i1.WindowService }, { type: i2.AdminService }, { type: i1.CustomToastService }], propDecorators: { passwordValidationModalForImpersonate: [{
128
130
  type: ViewChild,
129
131
  args: ['passwordValidationModalForImpersonate', { static: false }]
@@ -134,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
134
136
  type: ViewChild,
135
137
  args: ['passwordValidationModalForRemove2fa', { static: false }]
136
138
  }] } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXVzZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9zdWJzY3JpcHRpb25zL3N1YnNjcmlwdGlvbi11c2Vycy9zdWJzY3JpcHRpb24tdXNlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXVzZXJzL3N1YnNjcmlwdGlvbi11c2Vycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBRVIsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU81RCxNQUFNLE9BQU8sMEJBQ1QsU0FBUSxnQkFBZ0I7SUFvQ3hCLFlBQ1ksbUJBQXdDLEVBQ2hELFFBQWtC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LENBQUM7UUFDekMsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzsrR0F6SVEsMEJBQTBCO21HQUExQiwwQkFBMEIsZ2hCQzFCdkMsOG5PQW1NQTs7NEZEekthLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDSSx1QkFBdUI7aVFBU2pDLHFDQUFxQztzQkFEcEMsU0FBUzt1QkFBQyx1Q0FBdUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXJFLG9DQUFvQztzQkFEbkMsU0FBUzt1QkFBQyxzQ0FBc0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXBFLG1DQUFtQztzQkFEbEMsU0FBUzt1QkFBQyxxQ0FBcUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdG9yLFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXp5TG9hZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBQQUdFX1NJWkUgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZFZhbGlkYXRpb25Db21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2Uvc2hhcmVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgUGFnaW5nIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UsIEF1dGhTZXJ2aWNlLCBDdXN0b21Ub2FzdFNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvblNlcnZpY2UsIFdpbmRvd1NlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IEFkbWluU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXN1YnNjcmlwdGlvbi11c2VycycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N1YnNjcmlwdGlvbi11c2Vycy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3Vic2NyaXB0aW9uLXVzZXJzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uVXNlcnNDb21wb25lbnRcbiAgICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZFxue1xuICAgIEBWaWV3Q2hpbGQoJ3Bhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9ySW1wZXJzb25hdGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlOiBQYXNzd29yZFZhbGlkYXRpb25Db21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclVzZXJEZWxldGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclVzZXJEZWxldGU6IFBhc3N3b3JkVmFsaWRhdGlvbkNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ3Bhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yUmVtb3ZlMmZhJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JSZW1vdmUyZmE6IFBhc3N3b3JkVmFsaWRhdGlvbkNvbXBvbmVudDtcblxuICAgIGlkOiBudW1iZXI7XG5cbiAgICBzdWJzY3JpcHRpb25NZW1iZXJzID0gW107XG5cbiAgICBwcml2YXRlIHVzZXJUb0RlbGV0ZTogVXNlcjtcblxuICAgIHRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIGxvYWRpbmcgPSB0cnVlO1xuXG4gICAgc2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgcGFnZSA9IDE7XG5cbiAgICB1c2VyVG9JbXBlcnNvbmF0ZTogVXNlcjtcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIHJlbW92ZTJmYVVzZXJJZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uU2VydmljZTogU3Vic2NyaXB0aW9uU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdG9hc3RlcjogQ3VzdG9tVG9hc3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uPy5pZDtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IE51bWJlcihkYXRhWydpZCddKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgb25MYXp5TG9hZChldmVudDogTGF6eUxvYWRFdmVudCkge1xuICAgICAgICBjb25zdCBwYWdlRGV0YWlscyA9IEhlbHBlclNlcnZpY2Uub25UYWJsZUxhenlMb2FkKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZURldGFpbHMucGFnZTtcbiAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb25EZXRhaWxzKHtcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgb3JkZXJfYnk6IHBhZ2VEZXRhaWxzLnNvcnRGaWVsZCxcbiAgICAgICAgICAgIG9yZGVyX2RpcmVjdGlvbjogcGFnZURldGFpbHMuc29ydE9yZGVyLFxuICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRleHRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25JbXBlcnNvbmF0ZSh1c2VyOiBVc2VyKSB7XG4gICAgICAgIHRoaXMudXNlclRvSW1wZXJzb25hdGUgPSB1c2VyO1xuICAgICAgICB0aGlzLnBhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9ySW1wZXJzb25hdGUub3BlbigpO1xuICAgIH1cblxuICAgIG9uVXNlckltcGVyc29uYXRpb24oX2V2ZW50KSB7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UucGxhdGZvcm0kLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGxhdGZvcm0gPSByZXM7XG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmltcGVyc29uYXRlVXNlcih7XG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiB0aGlzLnVzZXJUb0ltcGVyc29uYXRlLmVtYWlsLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBwaG9uZWdhcDogcGxhdGZvcm0gIT09ICdicm93c2VyJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKGBZb3UncmUgbm93IGJlaW5nIGxvZ2dlZCBpbiBhcyBhbm90aGVyIHVzZXIuLi5gKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVwbGFjZVVybCgnL2hvbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRpc2FibGUyZmEoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnJlbW92ZTJmYVVzZXJJZCA9IGlkO1xuICAgICAgICB0aGlzLnBhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yUmVtb3ZlMmZhLm9wZW4oKTtcbiAgICB9XG5cbiAgICByZW1vdmUyZmEoX2V2ZW50KSB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLnJlbW92ZTJmYSh0aGlzLnJlbW92ZTJmYVVzZXJJZCwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgb25EZWxldGUodXNlcjogVXNlcikge1xuICAgICAgICB0aGlzLnVzZXJUb0RlbGV0ZSA9IHVzZXI7XG4gICAgICAgIHRoaXMucGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JVc2VyRGVsZXRlLm9wZW4oKTtcbiAgICB9XG5cbiAgICBkZWxldGVVc2VyKF9ldmVudCkge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmRlbGV0ZVVzZXIodGhpcy51c2VyVG9EZWxldGUuaWQsIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uVXNlcnMuRGVsZXRlZE1lc3NhZ2UnKSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbkRldGFpbHMoe1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyVG9EZWxldGUgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdWJzY3JpcHRpb25EZXRhaWxzKHBhZ2luZzogUGFnaW5nKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0RW5yb2xsZWRTdWJzY3JpcHRpb24odGhpcy5pZCwgcGFnaW5nKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25NZW1iZXJzID0gcmVzcG9uc2U/Lm1lbWJlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSByZXNwb25zZT8ubGVuZ3RoO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIj5cblx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc0xvYWRlZFwiPlxuXHRcdDxwLXByb2dyZXNzU3Bpbm5lcj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxuXHQ8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2IFtjbGFzcy5oaWRlVGFibGVdPVwidG90YWxSZWNvcmRzID09PSAwXCJcblx0Y2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgdGFibGUtcmVzcG9uc2l2ZSBtdC0wXCI+XG5cdDxwLXRhYmxlICNkdFxuXHRcdFt2YWx1ZV09XCJzdWJzY3JpcHRpb25NZW1iZXJzXCJcblx0XHRbcGFnaW5hdG9yXT1cInRvdGFsUmVjb3JkcyAhPT0gMFwiXG5cdFx0W3Jvd3NdPVwiUEFHRV9TSVpFXCJcblx0XHRbbGF6eV09XCJ0cnVlXCJcblx0XHRbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG5cdFx0W2xvYWRpbmddPVwibG9hZGluZ1wiXG5cdFx0W2ZpbHRlckRlbGF5XT1cIjEwMDBcIlxuXHRcdFtjdXN0b21Tb3J0XT1cInRydWVcIlxuXHRcdChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWQoJGV2ZW50KVwiPlxuXHRcdDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwidGV4dC1lbmRcIj5cblx0XHRcdFx0PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggbXQtMiBtZS0yXCJcblx0XHRcdFx0XHRhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdDxpbnB1dCBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuXHRcdFx0XHRcdChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxuXHRcdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcblx0XHRcdFx0XHRwSW5wdXRUZXh0XG5cdFx0XHRcdFx0c2l6ZT1cIjUwXCJcblx0XHRcdFx0XHRwbGFjZWhvbGRlcj1cIlNlYXJjaCBzdWJzY3JpcHRpb24gdXNlcnMuLi5cIlxuXHRcdFx0XHRcdGNsYXNzPVwibXctOTBcIj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuXHRcdFx0PHRyPlxuXHRcdFx0XHQ8dGggc2NvcGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRwU29ydGFibGVDb2x1bW49XCJpZFwiPlxuXHRcdFx0XHRcdHt7ICdBZG1pbi5Vc2Vycy5JZCcgfCB0cmFuc2xvY28gfX1cblx0XHRcdFx0XHQ8cC1zb3J0SWNvbiBmaWVsZD1cImlkXCI+PC9wLXNvcnRJY29uPlxuXHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHQ8dGggc2NvcGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRwU29ydGFibGVDb2x1bW49XCJmaXJzdF9uYW1lXCI+XG5cdFx0XHRcdFx0e3sgJ0xhYmVsLkZpcnN0TmFtZScgfCB0cmFuc2xvY28gfX1cblx0XHRcdFx0PC90aD5cblx0XHRcdFx0PHRoIHNjb3BlPVwidHJ1ZVwiXG5cdFx0XHRcdFx0cFNvcnRhYmxlQ29sdW1uPVwibGFzdF9uYW1lXCI+XG5cdFx0XHRcdFx0e3sgJ0xhYmVsLkxhc3ROYW1lJyB8IHRyYW5zbG9jbyB9fVxuXHRcdFx0XHRcdDxwLXNvcnRJY29uIGZpZWxkPVwibGFzdF9uYW1lXCI+PC9wLXNvcnRJY29uPlxuXHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHQ8dGggc2NvcGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRwU29ydGFibGVDb2x1bW49XCJlbWFpbFwiPlxuXHRcdFx0XHRcdHt7ICdMYWJlbC5FbWFpbCcgfCB0cmFuc2xvY28gfX1cblx0XHRcdFx0XHQ8cC1zb3J0SWNvbiBmaWVsZD1cImVtYWlsXCI+PC9wLXNvcnRJY29uPlxuXHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHQ8dGggc2NvcGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRwU29ydGFibGVDb2x1bW49XCJzbHVnXCI+XG5cdFx0XHRcdFx0e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuTmlja05hbWUnIHwgdHJhbnNsb2NvIH19XG5cdFx0XHRcdFx0PHAtc29ydEljb24gZmllbGQ9XCJzbHVnXCI+PC9wLXNvcnRJY29uPlxuXHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHQ8dGggc2NvcGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRwU29ydGFibGVDb2x1bW49XCJoYXNfcGFzc3dvcmRcIj5cblx0XHRcdFx0XHR7eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5FbWFpbENvbmZpcm1lZCcgfCB0cmFuc2xvY28gfX1cblx0XHRcdFx0XHQ8cC1zb3J0SWNvbiBmaWVsZD1cImhhc19wYXNzd29yZFwiPjwvcC1zb3J0SWNvbj5cblx0XHRcdFx0PC90aD5cblx0XHRcdFx0PHRoIHNjb3BlPVwidHJ1ZVwiXG5cdFx0XHRcdFx0cFNvcnRhYmxlQ29sdW1uPVwibGFzdF9zaWduX2luX2F0XCI+XG5cdFx0XHRcdFx0e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuTGFzdExvZ2luJyB8IHRyYW5zbG9jbyB9fVxuXHRcdFx0XHRcdDxwLXNvcnRJY29uIGZpZWxkPVwibGFzdF9zaWduX2luX2F0XCI+PC9wLXNvcnRJY29uPlxuXHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHQ8dGggc2NvcGU9XCJ0cnVlXCI+XG5cdFx0XHRcdFx0e3sgJ0xhYmVsLkFjdGlvbnMnIHwgdHJhbnNsb2NvIH19XG5cdFx0XHRcdDwvdGg+XG5cdFx0XHQ8L3RyPlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIlxuXHRcdFx0bGV0LXVzZXI+XG5cdFx0XHQ8dHI+XG5cdFx0XHRcdDx0ZCBkYXRhLWhlYWQ9XCJJZFwiPnt7IHVzZXIuaWQgfX08L3RkPlxuXHRcdFx0XHQ8dGQgZGF0YS1oZWFkPVwiRmlyc3QgTmFtZVwiPlxuXHRcdFx0XHRcdHt7IHVzZXIuZmlyc3RfbmFtZSB9fVxuXHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHQ8dGQgZGF0YS1oZWFkPVwiTGFzdCBOYW1lXCI+XG5cdFx0XHRcdFx0e3sgdXNlci5sYXN0X25hbWUgfX1cblx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cInVzZXI/LmFscGhhXCJcblx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCInQWRtaW4uVXNlcnMuVG9vbHRpcC5BbHBoYUljb24nfHRyYW5zbG9jb1wiXG5cdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS1zcXVhcmUtYSBhbHBoYS1iZXRhIHRleHQtd2FybmluZ1wiPjwvaT5cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJ1c2VyPy5iZXRhXCJcblx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCInQWRtaW4uVXNlcnMuVG9vbHRpcC5CZXRhSWNvbid8dHJhbnNsb2NvXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwibXMtMlwiXG5cdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS1zcXVhcmUtYiBhbHBoYS1iZXRhIHRleHQtcHJpbWFyeVwiPjwvaT5cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdDx0ZCBkYXRhLWhlYWQ9XCJFbWFpbFwiPnt7IHVzZXIuZW1haWwgfX08L3RkPlxuXHRcdFx0XHQ8dGQgZGF0YS1oZWFkPVwiTmljayBOYW1lXCI+XG5cdFx0XHRcdFx0PGEgW3JvdXRlckxpbmtdPVwiWycvbWVtYmVycycsIHVzZXIuc2x1Z11cIj57eyB1c2VyLnNsdWcgfX08L2E+XG5cdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdDx0ZCBkYXRhLWhlYWQ9XCJFbWFpbCBDb25maXJtXCI+XG5cdFx0XHRcdFx0PHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IFt0cnVlLCBmYWxzZV0sIGl0ZW06IHVzZXI/Lmhhc19wYXNzd29yZCB9XCJcblx0XHRcdFx0XHRcdGNvbG9yPVwic3VjY2Vzcy1kYW5nZXJcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJiYWRnZVwiPlxuXHRcdFx0XHRcdFx0e3sgdXNlcj8uaGFzX3Bhc3N3b3JkID8gJ1llcycgOiAnTm8nIH19XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwidXNlcj8uYmxvY2tlZFwiXG5cdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiJ1RoaXMgdXNlciBoYXMgYmVlbiBibG9ja2VkJ1wiXG5cdFx0XHRcdFx0XHRjbGFzcz1cIm1zLTJcIlxuXHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG5cdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWhleGFnb24tZXhjbGFtYXRpb24gdGV4dC1kYW5nZXIgaGV4YS13YXJuaW5nXCI+PC9pPlxuXHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0PC90ZD5cblx0XHRcdFx0PHRkIGRhdGEtaGVhZD1cIkxhc3QgTG9naW5cIj5cblx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cInVzZXI/LmN1cnJlbnRfc2lnbl9pbl9hdDsgZWxzZSBsYXN0U2lnbmluXCI+XG5cdFx0XHRcdFx0XHQ8c3Bhbj5cblx0XHRcdFx0XHRcdFx0e3sgdXNlci5jdXJyZW50X3NpZ25faW5fYXQgfCBkYXRlRm9ybWF0IH19XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cInVzZXIuY3VycmVudF9zaWduX2luX2F0XCI+XG5cdFx0XHRcdFx0XHRcdCZuYnNwOyh7eyB1c2VyLmN1cnJlbnRfc2lnbl9pbl9hdCB8IHNpbmNlQWdvIH19KVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgI2xhc3RTaWduaW4+XG5cdFx0XHRcdFx0XHQ8c3Bhbj5cblx0XHRcdFx0XHRcdFx0PHNwYW4+XG5cdFx0XHRcdFx0XHRcdFx0e3sgdXNlci5sYXN0X3NpZ25faW5fYXQgfCBkYXRlRm9ybWF0IH19XG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJ1c2VyLmxhc3Rfc2lnbl9pbl9hdFwiPlxuXHRcdFx0XHRcdFx0XHRcdCZuYnNwOyh7eyB1c2VyLmxhc3Rfc2lnbl9pbl9hdCB8IHNpbmNlQWdvIH19KVxuXHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC90ZD5cblx0XHRcdFx0PHRkIGRhdGEtaGVhZD1cIkFjdGlvblwiPlxuXHRcdFx0XHRcdDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbGlzdC1pbmxpbmVcIj5cblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhdXNlcj8uZW5hYmxlX3R3b19mYWN0b3JfYXV0aGVudGljYXRvclwiPlxuXHRcdFx0XHRcdFx0XHQ8bGkgKnJiYWNBbGxvdz1cIidQYWdlcy5BbHBoYSdcIlxuXHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJkaXNhYmxlMmZhKHVzZXI/LmlkKVwiXG5cdFx0XHRcdFx0XHRcdFx0bmdiVG9vbHRpcD1cIkRpc2FibGUgMmZhXCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm1lLTIgbWUtc20tM1wiPlxuXHRcdFx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHRcdDwvbGk+XG5cdFx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdFx0PGxpICpyYmFjQWxsb3c9XCInUGFnZXMuQWxwaGEnXCJcblx0XHRcdFx0XHRcdFx0bmdiVG9vbHRpcD1cIkxvZyBpbiBhc1wiXG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwibWUtMiBtZS1zbS0zXCI+XG5cdFx0XHRcdFx0XHRcdDxpIChjbGljayk9XCJvbkltcGVyc29uYXRlKHVzZXIpXCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImZhcyBmYS1wZW9wbGUtYXJyb3dzXCJcblx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHQ8L2xpPlxuXHRcdFx0XHRcdFx0PGxpIFtyb3V0ZXJMaW5rXT1cIltyb3V0ZXJzLnVzZXJzRGV0YWlscyArIHVzZXIuaWRdXCJcblx0XHRcdFx0XHRcdFx0bmdiVG9vbHRpcD1cIkVkaXRcIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cIm1lLTIgbWUtc20tM1wiPlxuXHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCJcblx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHQ8L2xpPlxuXHRcdFx0XHRcdFx0PGxpICpyYmFjQWxsb3c9XCInUGFnZXMuQWRtaW4uVXNlcnMuRGVsZXRlJ1wiXG5cdFx0XHRcdFx0XHRcdG5nYlRvb2x0aXA9XCJEZWxldGVcIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cIm1lLTIgbWUtc20tM1wiPlxuXHRcdFx0XHRcdFx0XHQ8aSAoY2xpY2spPVwib25EZWxldGUodXNlcilcIlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIlxuXHRcdFx0XHRcdFx0XHRcdGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cblx0XHRcdFx0XHRcdDwvbGk+XG5cdFx0XHRcdFx0PC91bD5cblx0XHRcdFx0PC90ZD5cblx0XHRcdDwvdHI+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0PC9wLXRhYmxlPlxuXHQ8c3BhbiBjbGFzcz1cInRvdGFsLXJlY29yZHMtY291bnRcIiAqbmdJZj1cInRvdGFsUmVjb3JkcyAhPT0gMFwiPlxuXHRcdHt7ICdMYWJlbC5Ub3RhbCcgfCB0cmFuc2xvY28gfX06IHt7IHRvdGFsUmVjb3JkcyB9fVxuXHQ8L3NwYW4+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJ0b3RhbFJlY29yZHMgPT09IDAgJiYgaXNMb2FkZWRcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuTm9TdWJzY3JpcHRpb25Vc2Vyc01lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gIDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuPCEtLSBwYXNzd29yZCB2YWxpZGF0aW9uIG1vZGFsIGZvciBpbXBlcnNvbmF0ZSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlXG5cdChzdWNjZXNzRXZlbnQpPVwib25Vc2VySW1wZXJzb25hdGlvbigkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG48IS0tIHBhc3N3b3JkIHZhbGlkYXRpb24gbW9kYWwgZm9yIGRlbGV0ZSB1c2VyIC0tPlxuPHB3LXBhc3N3b3JkLXZhbGlkYXRpb24gI3Bhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yVXNlckRlbGV0ZVxuXHQoc3VjY2Vzc0V2ZW50KT1cImRlbGV0ZVVzZXIoJGV2ZW50KVwiPlxuXHQ8ZGl2IGNsYXNzPVwicm93XCI+XG5cdFx0PGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuXHRcdFx0PHA+XG5cdFx0XHRcdHt7ICdVc2VyLkFjY291bnQuTWVzc2FnZS5BY3Rpb25DYW5Ob3RVbmRvbmUnIHwgdHJhbnNsb2NvIH19XG5cdFx0XHQ8L3A+XG5cdFx0XHQ8cD5cblx0XHRcdFx0e3sgJ1VzZXIuQWNjb3VudC5NZXNzYWdlLkNvbmZpcm1QYXNzd29yZCcgfCB0cmFuc2xvY28gfX1cblx0XHRcdDwvcD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG48IS0tIHBhc3N3b3JkIHZhbGlkYXRpb24gbW9kYWwgZm9yIHJlbW92ZTJmYSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYVxuXHQoc3VjY2Vzc0V2ZW50KT1cInJlbW92ZTJmYSgkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG4iXX0=
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXVzZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9zdWJzY3JpcHRpb25zL3N1YnNjcmlwdGlvbi11c2Vycy9zdWJzY3JpcHRpb24tdXNlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXVzZXJzL3N1YnNjcmlwdGlvbi11c2Vycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBRVIsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUcxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU81RCxNQUFNLE9BQU8sMEJBQ1QsU0FBUSxnQkFBZ0I7SUFzQ3hCLFlBQ1ksbUJBQXdDLEVBQ2hELFFBQWtC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QUFDLFlBQVksR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUM3QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQzFELENBQUMsQ0FBQzthQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7K0dBNUlRLDBCQUEwQjttR0FBMUIsMEJBQTBCLGdoQkMxQnZDLGc0T0F1TUE7OzRGRDdLYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0ksdUJBQXVCO2lRQVNqQyxxQ0FBcUM7c0JBRHBDLFNBQVM7dUJBQUMsdUNBQXVDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUlyRSxvQ0FBb0M7c0JBRG5DLFNBQVM7dUJBQUMsc0NBQXNDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUlwRSxtQ0FBbUM7c0JBRGxDLFNBQVM7dUJBQUMscUNBQXFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHsgUEFHRV9TSVpFIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFzc3dvcmRWYWxpZGF0aW9uQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL3NoYXJlZC1jb21wb25lbnRzJztcbmltcG9ydCB7IFBhZ2luZyB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlLCBBdXRoU2VydmljZSwgQ3VzdG9tVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25TZXJ2aWNlLCBXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5pbXBvcnQgeyBBZG1pblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zdWJzY3JpcHRpb24tdXNlcnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdWJzY3JpcHRpb24tdXNlcnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N1YnNjcmlwdGlvbi11c2Vycy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblVzZXJzQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgICBAVmlld0NoaWxkKCdwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JJbXBlcnNvbmF0ZTogUGFzc3dvcmRWYWxpZGF0aW9uQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgncGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JVc2VyRGVsZXRlJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcGFzc3dvcmRWYWxpZGF0aW9uTW9kYWxGb3JVc2VyRGVsZXRlOiBQYXNzd29yZFZhbGlkYXRpb25Db21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYScsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHBhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yUmVtb3ZlMmZhOiBQYXNzd29yZFZhbGlkYXRpb25Db21wb25lbnQ7XG5cbiAgICBpZDogbnVtYmVyO1xuXG4gICAgc3Vic2NyaXB0aW9uTWVtYmVycyA9IFtdO1xuXG4gICAgcHJpdmF0ZSB1c2VyVG9EZWxldGU6IFVzZXI7XG5cbiAgICB0b3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcblxuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIHBhZ2UgPSAxO1xuXG4gICAgdXNlclRvSW1wZXJzb25hdGU6IFVzZXI7XG5cbiAgICByb3V0ZXJzID0gUk9VVEVSUztcblxuICAgIHRvdGFsVW5maWx0ZXJlZENvdW50ID0gMDtcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICByZW1vdmUyZmFVc2VySWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB3aW5kb3dTZXJ2aWNlOiBXaW5kb3dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRvYXN0ZXI6IEN1c3RvbVRvYXN0U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBOdW1iZXIoZGF0YVsnaWQnXSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uTGF6eUxvYWQoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcGFnZURldGFpbHMgPSBIZWxwZXJTZXJ2aWNlLm9uVGFibGVMYXp5TG9hZChldmVudCk7XG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2VEZXRhaWxzLnBhZ2U7XG4gICAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uRGV0YWlscyh7XG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRSxcbiAgICAgICAgICAgIG9yZGVyX2J5OiBwYWdlRGV0YWlscy5zb3J0RmllbGQsXG4gICAgICAgICAgICBvcmRlcl9kaXJlY3Rpb246IHBhZ2VEZXRhaWxzLnNvcnRPcmRlcixcbiAgICAgICAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hUZXh0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uSW1wZXJzb25hdGUodXNlcjogVXNlcikge1xuICAgICAgICB0aGlzLnVzZXJUb0ltcGVyc29uYXRlID0gdXNlcjtcbiAgICAgICAgdGhpcy5wYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlLm9wZW4oKTtcbiAgICB9XG5cbiAgICBvblVzZXJJbXBlcnNvbmF0aW9uKF9ldmVudCkge1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnBsYXRmb3JtJC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBsYXRmb3JtID0gcmVzO1xuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmljZVxuICAgICAgICAgICAgICAgIC5pbXBlcnNvbmF0ZVVzZXIoe1xuICAgICAgICAgICAgICAgICAgICBlbWFpbDogdGhpcy51c2VyVG9JbXBlcnNvbmF0ZS5lbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkOiBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGhvbmVnYXA6IHBsYXRmb3JtICE9PSAnYnJvd3NlcidcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhgWW91J3JlIG5vdyBiZWluZyBsb2dnZWQgaW4gYXMgYW5vdGhlciB1c2VyLi4uYCk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLnJlcGxhY2VVcmwoJy9ob21lJyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkaXNhYmxlMmZhKGlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUyZmFVc2VySWQgPSBpZDtcbiAgICAgICAgdGhpcy5wYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYS5vcGVuKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlMmZhKF9ldmVudCkge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZS5yZW1vdmUyZmEodGhpcy5yZW1vdmUyZmFVc2VySWQsIHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG9uRGVsZXRlKHVzZXI6IFVzZXIpIHtcbiAgICAgICAgdGhpcy51c2VyVG9EZWxldGUgPSB1c2VyO1xuICAgICAgICB0aGlzLnBhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yVXNlckRlbGV0ZS5vcGVuKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlVXNlcihfZXZlbnQpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC5kZWxldGVVc2VyKHRoaXMudXNlclRvRGVsZXRlLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLlVzZXJzLkRlbGV0ZWRNZXNzYWdlJykpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb25EZXRhaWxzKHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgICAgICAgICBwYWdlX3NpemU6IFBBR0VfU0laRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclRvRGVsZXRlID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uRGV0YWlscyhwYWdpbmc6IFBhZ2luZykge1xuICAgICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZVxuICAgICAgICAgICAgLmdldEVucm9sbGVkU3Vic2NyaXB0aW9uKHRoaXMuaWQsIHBhZ2luZylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uTWVtYmVycyA9IHJlc3BvbnNlPy5tZW1iZXJzIHx8IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2U/Lm1lbWJlcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxVbmZpbHRlcmVkQ291bnQgPSByZXNwb25zZS51bmZpbHRlcmVkX2NvdW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIj5cblx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc0xvYWRlZFwiPlxuXHRcdDxwLXByb2dyZXNzU3Bpbm5lcj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxuXHQ8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2IFtjbGFzcy5oaWRlVGFibGVdPVwidG90YWxVbmZpbHRlcmVkQ291bnQgPT09IDBcIlxuXHRjbGFzcz1cInByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciB0YWJsZS1yZXNwb25zaXZlIG10LTBcIj5cblx0PHAtdGFibGUgI2R0XG5cdFx0W3ZhbHVlXT1cInN1YnNjcmlwdGlvbk1lbWJlcnNcIlxuXHRcdFtwYWdpbmF0b3JdPVwidG90YWxSZWNvcmRzICE9PSAwXCJcblx0XHRbcm93c109XCJQQUdFX1NJWkVcIlxuXHRcdFtsYXp5XT1cInRydWVcIlxuXHRcdFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcblx0XHRbbG9hZGluZ109XCJsb2FkaW5nXCJcblx0XHRbZmlsdGVyRGVsYXldPVwiMTAwMFwiXG5cdFx0W2N1c3RvbVNvcnRdPVwidHJ1ZVwiXG5cdFx0KG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZCgkZXZlbnQpXCI+XG5cdFx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIlxuXHRcdFx0XHRcdGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cblx0XHRcdFx0PGlucHV0IFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG5cdFx0XHRcdFx0KGlucHV0KT1cImR0LmZpbHRlckdsb2JhbCgkZXZlbnQudGFyZ2V0LnZhbHVlLCAnY29udGFpbnMnKVwiXG5cdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdHBJbnB1dFRleHRcblx0XHRcdFx0XHRzaXplPVwiNTBcIlxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiU2VhcmNoIHN1YnNjcmlwdGlvbiB1c2Vycy4uLlwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJtdy05MFwiPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG5cdFx0XHQ8dHI+XG5cdFx0XHRcdDx0aCBzY29wZT1cInRydWVcIlxuXHRcdFx0XHRcdHBTb3J0YWJsZUNvbHVtbj1cImlkXCI+XG5cdFx0XHRcdFx0e3sgJ0FkbWluLlVzZXJzLklkJyB8IHRyYW5zbG9jbyB9fVxuXHRcdFx0XHRcdDxwLXNvcnRJY29uIGZpZWxkPVwiaWRcIj48L3Atc29ydEljb24+XG5cdFx0XHRcdDwvdGg+XG5cdFx0XHRcdDx0aCBzY29wZT1cInRydWVcIlxuXHRcdFx0XHRcdHBTb3J0YWJsZUNvbHVtbj1cImZpcnN0X25hbWVcIj5cblx0XHRcdFx0XHR7eyAnTGFiZWwuRmlyc3ROYW1lJyB8IHRyYW5zbG9jbyB9fVxuXHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHQ8dGggc2NvcGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRwU29ydGFibGVDb2x1bW49XCJsYXN0X25hbWVcIj5cblx0XHRcdFx0XHR7eyAnTGFiZWwuTGFzdE5hbWUnIHwgdHJhbnNsb2NvIH19XG5cdFx0XHRcdFx0PHAtc29ydEljb24gZmllbGQ9XCJsYXN0X25hbWVcIj48L3Atc29ydEljb24+XG5cdFx0XHRcdDwvdGg+XG5cdFx0XHRcdDx0aCBzY29wZT1cInRydWVcIlxuXHRcdFx0XHRcdHBTb3J0YWJsZUNvbHVtbj1cImVtYWlsXCI+XG5cdFx0XHRcdFx0e3sgJ0xhYmVsLkVtYWlsJyB8IHRyYW5zbG9jbyB9fVxuXHRcdFx0XHRcdDxwLXNvcnRJY29uIGZpZWxkPVwiZW1haWxcIj48L3Atc29ydEljb24+XG5cdFx0XHRcdDwvdGg+XG5cdFx0XHRcdDx0aCBzY29wZT1cInRydWVcIlxuXHRcdFx0XHRcdHBTb3J0YWJsZUNvbHVtbj1cInNsdWdcIj5cblx0XHRcdFx0XHR7eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5OaWNrTmFtZScgfCB0cmFuc2xvY28gfX1cblx0XHRcdFx0XHQ8cC1zb3J0SWNvbiBmaWVsZD1cInNsdWdcIj48L3Atc29ydEljb24+XG5cdFx0XHRcdDwvdGg+XG5cdFx0XHRcdDx0aCBzY29wZT1cInRydWVcIlxuXHRcdFx0XHRcdHBTb3J0YWJsZUNvbHVtbj1cImhhc19wYXNzd29yZFwiPlxuXHRcdFx0XHRcdHt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLkVtYWlsQ29uZmlybWVkJyB8IHRyYW5zbG9jbyB9fVxuXHRcdFx0XHRcdDxwLXNvcnRJY29uIGZpZWxkPVwiaGFzX3Bhc3N3b3JkXCI+PC9wLXNvcnRJY29uPlxuXHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHQ8dGggc2NvcGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRwU29ydGFibGVDb2x1bW49XCJsYXN0X3NpZ25faW5fYXRcIj5cblx0XHRcdFx0XHR7eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5MYXN0TG9naW4nIHwgdHJhbnNsb2NvIH19XG5cdFx0XHRcdFx0PHAtc29ydEljb24gZmllbGQ9XCJsYXN0X3NpZ25faW5fYXRcIj48L3Atc29ydEljb24+XG5cdFx0XHRcdDwvdGg+XG5cdFx0XHRcdDx0aCBzY29wZT1cInRydWVcIj5cblx0XHRcdFx0XHR7eyAnTGFiZWwuQWN0aW9ucycgfCB0cmFuc2xvY28gfX1cblx0XHRcdFx0PC90aD5cblx0XHRcdDwvdHI+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiXG5cdFx0XHRsZXQtdXNlcj5cblx0XHRcdDx0cj5cblx0XHRcdFx0PHRkIGRhdGEtaGVhZD1cIklkXCI+e3sgdXNlci5pZCB9fTwvdGQ+XG5cdFx0XHRcdDx0ZCBkYXRhLWhlYWQ9XCJGaXJzdCBOYW1lXCI+XG5cdFx0XHRcdFx0e3sgdXNlci5maXJzdF9uYW1lIH19XG5cdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdDx0ZCBkYXRhLWhlYWQ9XCJMYXN0IE5hbWVcIj5cblx0XHRcdFx0XHR7eyB1c2VyLmxhc3RfbmFtZSB9fVxuXHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwidXNlcj8uYWxwaGFcIlxuXHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cIidBZG1pbi5Vc2Vycy5Ub29sdGlwLkFscGhhSWNvbid8dHJhbnNsb2NvXCJcblx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLXNxdWFyZS1hIGFscGhhLWJldGEgdGV4dC13YXJuaW5nXCI+PC9pPlxuXHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cInVzZXI/LmJldGFcIlxuXHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cIidBZG1pbi5Vc2Vycy5Ub29sdGlwLkJldGFJY29uJ3x0cmFuc2xvY29cIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJtcy0yXCJcblx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLXNxdWFyZS1iIGFscGhhLWJldGEgdGV4dC1wcmltYXJ5XCI+PC9pPlxuXHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0PC90ZD5cblx0XHRcdFx0PHRkIGRhdGEtaGVhZD1cIkVtYWlsXCI+e3sgdXNlci5lbWFpbCB9fTwvdGQ+XG5cdFx0XHRcdDx0ZCBkYXRhLWhlYWQ9XCJOaWNrIE5hbWVcIj5cblx0XHRcdFx0XHQ8YSBbcm91dGVyTGlua109XCJbJy9tZW1iZXJzJywgdXNlci5zbHVnXVwiPnt7IHVzZXIuc2x1ZyB9fTwvYT5cblx0XHRcdFx0PC90ZD5cblx0XHRcdFx0PHRkIGRhdGEtaGVhZD1cIkVtYWlsIENvbmZpcm1cIj5cblx0XHRcdFx0XHQ8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogW3RydWUsIGZhbHNlXSwgaXRlbTogdXNlcj8uaGFzX3Bhc3N3b3JkIH1cIlxuXHRcdFx0XHRcdFx0Y29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImJhZGdlXCI+XG5cdFx0XHRcdFx0XHR7eyB1c2VyPy5oYXNfcGFzc3dvcmQgPyAnWWVzJyA6ICdObycgfX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJ1c2VyPy5ibG9ja2VkXCJcblx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCInVGhpcyB1c2VyIGhhcyBiZWVuIGJsb2NrZWQnXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwibXMtMlwiXG5cdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdDxpIGNsYXNzPVwiZmEtc29saWQgZmEtaGV4YWdvbi1leGNsYW1hdGlvbiB0ZXh0LWRhbmdlciBoZXhhLXdhcm5pbmdcIj48L2k+XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHQ8dGQgZGF0YS1oZWFkPVwiTGFzdCBMb2dpblwiPlxuXHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwidXNlcj8uY3VycmVudF9zaWduX2luX2F0OyBlbHNlIGxhc3RTaWduaW5cIj5cblx0XHRcdFx0XHRcdDxzcGFuPlxuXHRcdFx0XHRcdFx0XHR7eyB1c2VyLmN1cnJlbnRfc2lnbl9pbl9hdCB8IGRhdGVGb3JtYXQgfX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwidXNlci5jdXJyZW50X3NpZ25faW5fYXRcIj5cblx0XHRcdFx0XHRcdFx0Jm5ic3A7KHt7IHVzZXIuY3VycmVudF9zaWduX2luX2F0IHwgc2luY2VBZ28gfX0pXG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjbGFzdFNpZ25pbj5cblx0XHRcdFx0XHRcdDxzcGFuPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7eyB1c2VyLmxhc3Rfc2lnbl9pbl9hdCB8IGRhdGVGb3JtYXQgfX1cblx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHQ8c3BhbiAqbmdJZj1cInVzZXIubGFzdF9zaWduX2luX2F0XCI+XG5cdFx0XHRcdFx0XHRcdFx0Jm5ic3A7KHt7IHVzZXIubGFzdF9zaWduX2luX2F0IHwgc2luY2VBZ28gfX0pXG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHQ8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG5cdFx0XHRcdFx0PHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZVwiPlxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cInVzZXI/LmVuYWJsZV90d29fZmFjdG9yX2F1dGhlbnRpY2F0b3JcIj5cblx0XHRcdFx0XHRcdFx0PGxpICpyYmFjQWxsb3c9XCInUGFnZXMuQWxwaGEnXCJcblx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiZGlzYWJsZTJmYSh1c2VyPy5pZClcIlxuXHRcdFx0XHRcdFx0XHRcdG5nYlRvb2x0aXA9XCJEaXNhYmxlIDJmYVwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJtZS0yIG1lLXNtLTNcIj5cblx0XHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWxvY2tcIlxuXHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuXHRcdFx0XHRcdFx0XHQ8L2xpPlxuXHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHRcdDxsaSAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFscGhhJ1wiXG5cdFx0XHRcdFx0XHRcdG5nYlRvb2x0aXA9XCJMb2cgaW4gYXNcIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cIm1lLTIgbWUtc20tM1wiPlxuXHRcdFx0XHRcdFx0XHQ8aSAoY2xpY2spPVwib25JbXBlcnNvbmF0ZSh1c2VyKVwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmYXMgZmEtcGVvcGxlLWFycm93c1wiXG5cdFx0XHRcdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuXHRcdFx0XHRcdFx0PC9saT5cblx0XHRcdFx0XHRcdDxsaSBbcm91dGVyTGlua109XCJbcm91dGVycy51c2Vyc0RldGFpbHMgKyB1c2VyLmlkXVwiXG5cdFx0XHRcdFx0XHRcdG5nYlRvb2x0aXA9XCJFZGl0XCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJtZS0yIG1lLXNtLTNcIj5cblx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJmYSBmYS1lZGl0IGVkaXQtaWNvblwiXG5cdFx0XHRcdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuXHRcdFx0XHRcdFx0PC9saT5cblx0XHRcdFx0XHRcdDxsaSAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLlVzZXJzLkRlbGV0ZSdcIlxuXHRcdFx0XHRcdFx0XHRuZ2JUb29sdGlwPVwiRGVsZXRlXCJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJtZS0yIG1lLXNtLTNcIj5cblx0XHRcdFx0XHRcdFx0PGkgKGNsaWNrKT1cIm9uRGVsZXRlKHVzZXIpXCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCJcblx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHQ8L2xpPlxuXHRcdFx0XHRcdDwvdWw+XG5cdFx0XHRcdDwvdGQ+XG5cdFx0XHQ8L3RyPlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdDwvcC10YWJsZT5cblx0PGRpdiAqbmdJZj1cInRvdGFsUmVjb3JkcyA9PT0gMCAmJiB0b3RhbFVuZmlsdGVyZWRDb3VudCAhPT0gMFwiPlxuXHRcdDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidTZWFyY2guTm9EYXRhTWVzc2FnZScgfCB0cmFuc2xvY29cIiBbZGVzY3JpcHRpb25dPVwiJ1NlYXJjaC5Ob0RhdGFEZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIiA+XG5cdFx0PC9wdy1uby1kYXRhPlxuXHQ8L2Rpdj5cblx0PHNwYW4gY2xhc3M9XCJ0b3RhbC1yZWNvcmRzLWNvdW50XCIgKm5nSWY9XCJ0b3RhbFJlY29yZHMgIT09IDBcIj5cblx0XHR7eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyB0b3RhbFJlY29yZHMgfX1cblx0PC9zcGFuPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwidG90YWxVbmZpbHRlcmVkQ291bnQgPT09IDAgJiYgaXNMb2FkZWRcIj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuTm9TdWJzY3JpcHRpb25Vc2Vyc01lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gIDwvcHctbm8tZGF0YT5cbjwvZGl2PlxuPCEtLSBwYXNzd29yZCB2YWxpZGF0aW9uIG1vZGFsIGZvciBpbXBlcnNvbmF0ZSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvckltcGVyc29uYXRlXG5cdChzdWNjZXNzRXZlbnQpPVwib25Vc2VySW1wZXJzb25hdGlvbigkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG48IS0tIHBhc3N3b3JkIHZhbGlkYXRpb24gbW9kYWwgZm9yIGRlbGV0ZSB1c2VyIC0tPlxuPHB3LXBhc3N3b3JkLXZhbGlkYXRpb24gI3Bhc3N3b3JkVmFsaWRhdGlvbk1vZGFsRm9yVXNlckRlbGV0ZVxuXHQoc3VjY2Vzc0V2ZW50KT1cImRlbGV0ZVVzZXIoJGV2ZW50KVwiPlxuXHQ8ZGl2IGNsYXNzPVwicm93XCI+XG5cdFx0PGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuXHRcdFx0PHA+XG5cdFx0XHRcdHt7ICdVc2VyLkFjY291bnQuTWVzc2FnZS5BY3Rpb25DYW5Ob3RVbmRvbmUnIHwgdHJhbnNsb2NvIH19XG5cdFx0XHQ8L3A+XG5cdFx0XHQ8cD5cblx0XHRcdFx0e3sgJ1VzZXIuQWNjb3VudC5NZXNzYWdlLkNvbmZpcm1QYXNzd29yZCcgfCB0cmFuc2xvY28gfX1cblx0XHRcdDwvcD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG48IS0tIHBhc3N3b3JkIHZhbGlkYXRpb24gbW9kYWwgZm9yIHJlbW92ZTJmYSAtLT5cbjxwdy1wYXNzd29yZC12YWxpZGF0aW9uICNwYXNzd29yZFZhbGlkYXRpb25Nb2RhbEZvclJlbW92ZTJmYVxuXHQoc3VjY2Vzc0V2ZW50KT1cInJlbW92ZTJmYSgkZXZlbnQpXCI+XG48L3B3LXBhc3N3b3JkLXZhbGlkYXRpb24+XG4iXX0=