@mediusinc/mng-commons 5.1.0 → 5.2.0-rc.1

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 (104) hide show
  1. package/core/components/notification/notification-wrapper.component.d.ts +3 -1
  2. package/core/error/error-helpers.d.ts +5 -0
  3. package/core/error/error.model.d.ts +6 -0
  4. package/core/helpers/route.d.ts +1 -1
  5. package/core/models/menu.model.d.ts +2 -1
  6. package/core/router/route-builder.d.ts +0 -1
  7. package/core/security/permission.service.d.ts +13 -5
  8. package/core/security/permissions.model.d.ts +27 -2
  9. package/esm2022/core/components/notification/notification-wrapper.component.mjs +6 -5
  10. package/esm2022/core/error/error-helpers.mjs +8 -1
  11. package/esm2022/core/error/error.model.mjs +2 -1
  12. package/esm2022/core/models/menu.model.mjs +1 -1
  13. package/esm2022/core/router/route-builder.mjs +1 -24
  14. package/esm2022/core/rxjs/map-data-list-result-operator.mjs +4 -1
  15. package/esm2022/core/security/permission.guard.mjs +2 -2
  16. package/esm2022/core/security/permission.service.mjs +65 -15
  17. package/esm2022/core/security/permissions.model.mjs +1 -1
  18. package/esm2022/form/components/date-range/date-range.component.mjs +9 -3
  19. package/esm2022/form/components/number-range/number-range.component.mjs +106 -0
  20. package/esm2022/form/index.mjs +2 -1
  21. package/esm2022/model/helpers/i18n.mjs +2 -2
  22. package/esm2022/table/api/descriptors/table.descriptor.mjs +11 -1
  23. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +72 -10
  24. package/esm2022/table/components/table/table.component.mjs +15 -12
  25. package/esm2022/table/helpers/notification.mjs +2 -2
  26. package/esm2022/table/services/data-list.service.mjs +9 -3
  27. package/esm2022/tableview/action/components/action/action.component.mjs +6 -7
  28. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +7 -3
  29. package/esm2022/tableview/action/components/table/action-table.component.mjs +8 -3
  30. package/esm2022/tableview/action/helpers/i18n.mjs +4 -4
  31. package/esm2022/tableview/action/models/execution/action-context.model.mjs +9 -1
  32. package/esm2022/tableview/action/services/action-executor.service.mjs +74 -14
  33. package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +2 -2
  34. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +2 -1
  35. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +1 -1
  36. package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +1 -1
  37. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +2 -3
  38. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +2 -1
  39. package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +1 -1
  40. package/esm2022/tableview/api/editor/models/formly-options.model.mjs +1 -1
  41. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +16 -10
  42. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +2 -6
  43. package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +2 -3
  44. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +2 -6
  45. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +2 -3
  46. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +3 -4
  47. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +21 -9
  48. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +17 -6
  49. package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +18 -3
  50. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +12 -4
  51. package/esm2022/tableview/editor/services/form-editor.service.mjs +3 -3
  52. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +2 -2
  53. package/fesm2022/mediusinc-mng-commons-core.mjs +82 -42
  54. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  55. package/fesm2022/mediusinc-mng-commons-form.mjs +109 -3
  56. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  57. package/fesm2022/mediusinc-mng-commons-model.mjs +1 -1
  58. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  59. package/fesm2022/mediusinc-mng-commons-table-api.mjs +10 -0
  60. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  61. package/fesm2022/mediusinc-mng-commons-table.mjs +94 -23
  62. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  63. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +4 -3
  64. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  65. package/fesm2022/mediusinc-mng-commons-tableview.mjs +172 -62
  66. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  67. package/form/components/date-range/date-range.component.d.ts +4 -2
  68. package/form/components/number-range/number-range.component.d.ts +30 -0
  69. package/form/index.d.ts +1 -0
  70. package/i18n/en.json +1 -1
  71. package/i18n/sl.json +1 -1
  72. package/package.json +7 -7
  73. package/table/api/descriptors/table.descriptor.d.ts +3 -0
  74. package/table/components/column-filter-full/column-filter-full.component.d.ts +3 -2
  75. package/table/components/table/table.component.d.ts +7 -2
  76. package/table/services/data-list.service.d.ts +5 -2
  77. package/tableview/action/components/action/action.component.d.ts +1 -2
  78. package/tableview/action/components/editor/action-editor.component.d.ts +1 -1
  79. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +7 -5
  80. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +1 -1
  81. package/tableview/action/components/table/action-table.component.d.ts +8 -4
  82. package/tableview/action/models/execution/action-context.model.d.ts +7 -0
  83. package/tableview/action/services/action-executor.service.d.ts +1 -1
  84. package/tableview/action/services/view-container.service.d.ts +1 -1
  85. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +2 -2
  86. package/tableview/api/action/descriptors/action.descriptor.d.ts +38 -38
  87. package/tableview/api/action/models/action-descriptor.types.d.ts +2 -2
  88. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +1 -1
  89. package/tableview/api/editor/models/form-editor.event.d.ts +4 -0
  90. package/tableview/api/editor/models/form-editor.interface.d.ts +4 -1
  91. package/tableview/api/editor/models/formly-options.model.d.ts +4 -4
  92. package/tableview/editor/components/editor/form-editor.component.d.ts +6 -2
  93. package/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +0 -1
  94. package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +0 -1
  95. package/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +0 -1
  96. package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +0 -1
  97. package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +0 -1
  98. package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +3 -1
  99. package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +3 -1
  100. package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +5 -1
  101. package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +1 -0
  102. package/tableview/editor/services/form-editor.service.d.ts +2 -2
  103. package/tableview/tableview/components/tableview/tableview.component.d.ts +4 -4
  104. package/version-info.json +6 -6
@@ -3,7 +3,7 @@ import { getI18nForModel } from '@mediusinc/mng-commons/model';
3
3
  export function tableNotificationError(translate, table, error, messageService) {
4
4
  const params = {};
5
5
  if (error?.message) {
6
- params.errorMessage = `: ${error.message}`;
6
+ params.errorMessage = error.message;
7
7
  }
8
8
  else {
9
9
  params.errorMessage = '.';
@@ -12,4 +12,4 @@ export function tableNotificationError(translate, table, error, messageService)
12
12
  const tableErrorMessage = getI18nForModel(translate, table.model, 'table.error.message', undefined, undefined, 'general.errorMessage', params) ?? undefined;
13
13
  return toastMessage(messageService, tableErrorTitle, tableErrorMessage, 'error', 'pi-exclamation-triangle');
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL2hlbHBlcnMvbm90aWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFHN0QsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFNBQTJCLEVBQUUsS0FBK0IsRUFBRSxLQUFVLEVBQUUsY0FBOEI7SUFDM0ksTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO0lBQ3ZCLElBQUksS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0MsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztJQUM5QixDQUFDO0lBQ0QsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNqSixNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUM1SixPQUFPLFlBQVksQ0FBQyxjQUFjLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0FBQ2hILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNZXNzYWdlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge3RvYXN0TWVzc2FnZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7Z2V0STE4bkZvck1vZGVsfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcbmltcG9ydCB7VGFibGVEZXNjcmlwdG9ySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5leHBvcnQgZnVuY3Rpb24gdGFibGVOb3RpZmljYXRpb25FcnJvcih0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHRhYmxlOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4sIGVycm9yOiBhbnksIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSk6IE1lc3NhZ2Uge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge307XG4gICAgaWYgKGVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgIHBhcmFtcy5lcnJvck1lc3NhZ2UgPSBgOiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMuZXJyb3JNZXNzYWdlID0gJy4nO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZUVycm9yVGl0bGUgPSBnZXRJMThuRm9yTW9kZWwodHJhbnNsYXRlLCB0YWJsZS5tb2RlbCwgJ3RhYmxlLmVycm9yLnRpdGxlJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdnZW5lcmFsLmVycm9yJywgcGFyYW1zKSA/PyB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGFibGVFcnJvck1lc3NhZ2UgPSBnZXRJMThuRm9yTW9kZWwodHJhbnNsYXRlLCB0YWJsZS5tb2RlbCwgJ3RhYmxlLmVycm9yLm1lc3NhZ2UnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2dlbmVyYWwuZXJyb3JNZXNzYWdlJywgcGFyYW1zKSA/PyB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRvYXN0TWVzc2FnZShtZXNzYWdlU2VydmljZSwgdGFibGVFcnJvclRpdGxlLCB0YWJsZUVycm9yTWVzc2FnZSwgJ2Vycm9yJywgJ3BpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyk7XG59XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL2hlbHBlcnMvbm90aWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFHN0QsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFNBQTJCLEVBQUUsS0FBK0IsRUFBRSxLQUFVLEVBQUUsY0FBOEI7SUFDM0ksTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO0lBQ3ZCLElBQUksS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUN4QyxDQUFDO1NBQU0sQ0FBQztRQUNKLE1BQU0sQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0lBQzlCLENBQUM7SUFDRCxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2pKLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQzVKLE9BQU8sWUFBWSxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDaEgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lc3NhZ2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbmltcG9ydCB7dG9hc3RNZXNzYWdlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtnZXRJMThuRm9yTW9kZWx9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtUYWJsZURlc2NyaXB0b3JJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZU5vdGlmaWNhdGlvbkVycm9yKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdGFibGU6IFRhYmxlRGVzY3JpcHRvckluc3Q8YW55PiwgZXJyb3I6IGFueSwgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlKTogTWVzc2FnZSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fTtcbiAgICBpZiAoZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgcGFyYW1zLmVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLmVycm9yTWVzc2FnZSA9ICcuJztcbiAgICB9XG4gICAgY29uc3QgdGFibGVFcnJvclRpdGxlID0gZ2V0STE4bkZvck1vZGVsKHRyYW5zbGF0ZSwgdGFibGUubW9kZWwsICd0YWJsZS5lcnJvci50aXRsZScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZ2VuZXJhbC5lcnJvcicsIHBhcmFtcykgPz8gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRhYmxlRXJyb3JNZXNzYWdlID0gZ2V0STE4bkZvck1vZGVsKHRyYW5zbGF0ZSwgdGFibGUubW9kZWwsICd0YWJsZS5lcnJvci5tZXNzYWdlJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdnZW5lcmFsLmVycm9yTWVzc2FnZScsIHBhcmFtcykgPz8gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0b2FzdE1lc3NhZ2UobWVzc2FnZVNlcnZpY2UsIHRhYmxlRXJyb3JUaXRsZSwgdGFibGVFcnJvck1lc3NhZ2UsICdlcnJvcicsICdwaS1leGNsYW1hdGlvbi10cmlhbmdsZScpO1xufVxuIl19
@@ -10,14 +10,20 @@ export class DataListService {
10
10
  this.offset = signal(0);
11
11
  this.globalFilterFields = signal([]);
12
12
  // data
13
- this.data = signal([]);
14
- this.count = signal(0);
13
+ this._data = signal([]);
14
+ this._count = signal(0);
15
+ this.data = this._data.asReadonly();
16
+ this.count = this._count.asReadonly();
15
17
  this.loading = signal(true);
16
18
  }
19
+ setData(data, count) {
20
+ this._data.set([...data]);
21
+ this._count.set(count ?? data.length);
22
+ }
17
23
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
18
24
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataListService }); }
19
25
  }
20
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: DataListService, decorators: [{
21
27
  type: Injectable
22
28
  }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvc2VydmljZXMvZGF0YS1saXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBS2pELE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBRUksYUFBYTtRQUNOLGFBQVEsR0FBRyxNQUFNLENBQW9CLElBQUksQ0FBQyxDQUFDO1FBQzNDLGVBQVUsR0FBRyxNQUFNLENBQWlDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQyxTQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQix1QkFBa0IsR0FBRyxNQUFNLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFakQsT0FBTztRQUNBLFNBQUksR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDMUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixZQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2pDOzhHQWJZLGVBQWU7a0hBQWYsZUFBZTs7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtGaWx0ZXJNZXRhZGF0YSwgU29ydE1ldGF9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGFMaXN0U2VydmljZTxJdGVtPiB7XG4gICAgLy8gcGFnaW5hdGlvblxuICAgIHB1YmxpYyBzb3J0TWV0YSA9IHNpZ25hbDxTb3J0TWV0YVtdIHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIGZpbHRlck1ldGEgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgRmlsdGVyTWV0YWRhdGE+Pih7fSk7XG4gICAgcHVibGljIHJvd3NQZXJQYWdlT3B0aW9ucyA9IHNpZ25hbChbMjUsIDUwLCAxMDBdKTtcbiAgICBwdWJsaWMgcm93cyA9IHNpZ25hbCh0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucygpWzBdKTtcbiAgICBwdWJsaWMgb2Zmc2V0ID0gc2lnbmFsKDApO1xuICAgIHB1YmxpYyBnbG9iYWxGaWx0ZXJGaWVsZHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8vIGRhdGFcbiAgICBwdWJsaWMgZGF0YSA9IHNpZ25hbDxJdGVtW10+KFtdKTtcbiAgICBwdWJsaWMgY291bnQgPSBzaWduYWwoMCk7XG4gICAgcHVibGljIGxvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG59XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvc2VydmljZXMvZGF0YS1saXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBS2pELE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBRUksYUFBYTtRQUNOLGFBQVEsR0FBRyxNQUFNLENBQW9CLElBQUksQ0FBQyxDQUFDO1FBQzNDLGVBQVUsR0FBRyxNQUFNLENBQWlDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQyxTQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQix1QkFBa0IsR0FBRyxNQUFNLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFakQsT0FBTztRQUNDLFVBQUssR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDM0IsV0FBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixTQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixVQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxZQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBTWpDO0lBSlUsT0FBTyxDQUFDLElBQVksRUFBRSxLQUFjO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs4R0FuQlEsZUFBZTtrSEFBZixlQUFlOzsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0ZpbHRlck1ldGFkYXRhLCBTb3J0TWV0YX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGF0YUxpc3RTZXJ2aWNlPEl0ZW0+IHtcbiAgICAvLyBwYWdpbmF0aW9uXG4gICAgcHVibGljIHNvcnRNZXRhID0gc2lnbmFsPFNvcnRNZXRhW10gfCBudWxsPihudWxsKTtcbiAgICBwdWJsaWMgZmlsdGVyTWV0YSA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJNZXRhZGF0YT4+KHt9KTtcbiAgICBwdWJsaWMgcm93c1BlclBhZ2VPcHRpb25zID0gc2lnbmFsKFsyNSwgNTAsIDEwMF0pO1xuICAgIHB1YmxpYyByb3dzID0gc2lnbmFsKHRoaXMucm93c1BlclBhZ2VPcHRpb25zKClbMF0pO1xuICAgIHB1YmxpYyBvZmZzZXQgPSBzaWduYWwoMCk7XG4gICAgcHVibGljIGdsb2JhbEZpbHRlckZpZWxkcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gICAgLy8gZGF0YVxuICAgIHByaXZhdGUgX2RhdGEgPSBzaWduYWw8SXRlbVtdPihbXSk7XG4gICAgcHJpdmF0ZSBfY291bnQgPSBzaWduYWwoMCk7XG4gICAgcHVibGljIGRhdGEgPSB0aGlzLl9kYXRhLmFzUmVhZG9ubHkoKTtcbiAgICBwdWJsaWMgY291bnQgPSB0aGlzLl9jb3VudC5hc1JlYWRvbmx5KCk7XG4gICAgcHVibGljIGxvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG5cbiAgICBwdWJsaWMgc2V0RGF0YShkYXRhOiBJdGVtW10sIGNvdW50PzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2RhdGEuc2V0KFsuLi5kYXRhXSk7XG4gICAgICAgIHRoaXMuX2NvdW50LnNldChjb3VudCA/PyBkYXRhLmxlbmd0aCk7XG4gICAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { AsyncPipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, DestroyRef, Optional, booleanAttribute, computed, effect, inject, input, output, signal, viewChild } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, Optional, booleanAttribute, computed, effect, input, output, signal, viewChild } from '@angular/core';
3
3
  import { toSignal } from '@angular/core/rxjs-interop';
4
4
  import { ActivatedRoute } from '@angular/router';
5
5
  import { TranslateService } from '@ngx-translate/core';
@@ -33,7 +33,6 @@ export class ActionComponent {
33
33
  this.authorization = authorization;
34
34
  this.actionExecutor = actionExecutor;
35
35
  this.viewContainer = viewContainer;
36
- this.destroyRef = inject(DestroyRef);
37
36
  // metadata and editor mode input
38
37
  this.action = input.required();
39
38
  this.item = input();
@@ -191,7 +190,7 @@ export class ActionComponent {
191
190
  if (typeof action.permissions !== 'undefined' || typeof routePermissions !== 'undefined') {
192
191
  this.isPermittedSubscription?.unsubscribe();
193
192
  const permissions = action.permissions && routePermissions ? Permissions.All.of(routePermissions, action.permissions) : routePermissions ?? action.permissions;
194
- this.isVisibleSubscription = this.authorization.isPermitted(permissions, this.route().snapshot, context).subscribe({
193
+ this.isVisibleSubscription = this.authorization.isActionVisible(permissions, context, this.route().snapshot).subscribe({
195
194
  next: res => this.isPermitted.set(res)
196
195
  });
197
196
  }
@@ -209,7 +208,7 @@ export class ActionComponent {
209
208
  }
210
209
  this.tooltipSubscription?.unsubscribe();
211
210
  if (action.button.tooltip) {
212
- this.tooltipSubscription = getI18nForActionAsync(this.translate, action, 'tooltip', action.button.tooltip, this.item(), undefined, undefined).subscribe({
211
+ this.tooltipSubscription = getI18nForActionAsync(this.translate, action, 'tooltip', action.button.tooltip, this.item()).subscribe({
213
212
  next: i18n => this.tooltip.set(i18n ?? '')
214
213
  });
215
214
  }
@@ -248,12 +247,12 @@ export class ActionComponent {
248
247
  visibilityObservables.push(toObservable(subaction.isVisibleFunction(context)));
249
248
  }
250
249
  if (typeof subaction.permissions !== 'undefined') {
251
- visibilityObservables.push(this.authorization.isPermitted(subaction.permissions, this.route().snapshot, context));
250
+ visibilityObservables.push(this.authorization.isActionVisible(subaction.permissions, context, this.route().snapshot));
252
251
  }
253
252
  const routeData = this.route().snapshot.data;
254
253
  if (subaction.tableviewCategory && routeData.tableviewPermissions && routeData.tableviewPermissions[subaction.tableviewCategory]) {
255
254
  const routePermissions = routeData.tableviewPermissions[subaction.tableviewCategory];
256
- visibilityObservables.push(this.authorization.isPermitted(routePermissions, this.route().snapshot, context));
255
+ visibilityObservables.push(this.authorization.isActionVisible(routePermissions, context, this.route().snapshot));
257
256
  }
258
257
  this.subactionSubscriptions.push(combineLatest(visibilityObservables).subscribe(visibilities => {
259
258
  menuItem.visible = visibilities.every(value => value);
@@ -272,4 +271,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImpor
272
271
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.TranslateService }, { type: i3.PermissionService }, { type: i4.ActionExecutorService }, { type: i5.ViewContainer, decorators: [{
273
272
  type: Optional
274
273
  }] }] });
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvYWN0aW9uL2FjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2FjdGlvbi9jb21wb25lbnRzL2FjdGlvbi9hY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFFVixRQUFRLEVBRVIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBMkIsYUFBYSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sRUFJSCxrQkFBa0IsRUFJbEIsZUFBZSxFQUNmLGlCQUFpQixFQUNq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SSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDNUIsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMxRCxRQUFRLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FDTCxDQUFDO1lBRUYsUUFBUSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXZELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7OEdBMVNRLGVBQWU7a0dBQWYsZUFBZSx5bkRBSmIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLDBFQXNCRixJQUFJLGdFQ2hGMUMsb2xIQThFQSxzRkRyQnlCLFlBQVksNE9BQUUsWUFBWSw2RkFBRSxhQUFhLGlYQUFFLGVBQWUsdURBQUUsa0JBQWtCLGdMQUFFLGlCQUFpQiwyeUJBQUUsVUFBVTs7MkZBS3pILGVBQWU7a0JBWDNCLFNBQVM7aUNBQ00sSUFBSSxZQUNOLFlBQVksbUJBR0wsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLGFBQ3hILENBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUU5QixFQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFDOzswQkEyRTVELFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FzeW5jUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dFJlZlN1YnNjcmlwdGlvbixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIHNpZ25hbCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNZW51SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7TWVudSwgTWVudU1vZHVsZX0gZnJvbSAncHJpbWVuZy9tZW51JztcbmltcG9ydCB7UmlwcGxlTW9kdWxlfSBmcm9tICdwcmltZW5nL3JpcHBsZSc7XG5pbXBvcnQge1NwbGl0QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL3NwbGl0YnV0dG9uJztcbmltcG9ydCB7VG9vbHRpcE1vZHVsZX0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBBUGVybWlzc2lvbnMsXG4gICAgQWN0aW9uRGF0YSxcbiAgICBBY3Rpb25QYXJhbWV0ZXJzLFxuICAgIENvbXBvbmVudERpcmVjdGl2ZSxcbiAgICBEYXRhTGlzdFBhcmFtcyxcbiAgICBJRGF0YVByb3ZpZGVyLFxuICAgIElkVHlwZSxcbiAgICBQYXJhbWV0cml6ZVBpcGUsXG4gICAgUGVybWlzc2lvblNlcnZpY2UsXG4gICAgUGVybWlzc2lvbnMsXG4gICAgdG9PYnNlcnZhYmxlXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHRWYWxpZGF0aW9uLCBBY3Rpb25EZXNjcmlwdG9ySW5zdCwgQWN0aW9uTGlua0Rlc2NyaXB0b3JJbnN0LCBBY3Rpb25UeXBlRW51bSwgSUFjdGlvbkNvbXBvbmVudCwgVGFibGV2aWV3Um91dGVEYXRhfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge2dldEkxOG5Gb3JBY3Rpb25Bc3luY30gZnJvbSAnLi4vLi4vaGVscGVycy9pMThuJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2VTdGF0ZUVudW19IGZyb20gJy4uLy4uL21vZGVscy9leGVjdXRpb24vYWN0aW9uLWluc3RhbmNlLXN0YXRlLm1vZGVsJztcbmltcG9ydCB7QWN0aW9uSW5zdGFuY2V9IGZyb20gJy4uLy4uL21vZGVscy9leGVjdXRpb24vYWN0aW9uLWluc3RhbmNlLm1vZGVsJztcbmltcG9ydCB7QWN0aW9uRXhlY3V0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZSc7XG5pbXBvcnQge3Byb3ZpZGVBY3Rpb25FeGVjdXRvcn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvdmlkZXJzL3Byb3ZpZGUtYWN0aW9uLWV4ZWN1dG9yJztcbmltcG9ydCB7Vmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlldy1jb250YWluZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYWN0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBCdXR0b25Nb2R1bGUsIFJpcHBsZU1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgUGFyYW1ldHJpemVQaXBlLCBDb21wb25lbnREaXJlY3RpdmUsIFNwbGl0QnV0dG9uTW9kdWxlLCBNZW51TW9kdWxlXSxcbiAgICBwcm92aWRlcnM6IFtwcm92aWRlQWN0aW9uRXhlY3V0b3IoKV0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5XG4gICAgaG9zdDogeydbY2xhc3NdJzogJ2hvc3RDbGFzcygpJywgJ1tjbGFzcy5tLTBdJzogJ2lzSG9zdEhpZGRlbigpJ31cbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uQ29tcG9uZW50PEl0ZW0gPSBhbnksIFNlcnZpY2UgPSB1bmRlZmluZWQ+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvLyBtZXRhZGF0YSBhbmQgZWRpdG9yIG1vZGUgaW5wdXRcbiAgICBwdWJsaWMgYWN0aW9uID0gaW5wdXQucmVxdWlyZWQ8QWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbSwgU2VydmljZT4+KCk7XG4gICAgcHVibGljIGl0ZW0gPSBpbnB1dDxJdGVtPigpO1xuICAgIHB1YmxpYyBpdGVtSWQgPSBpbnB1dDxJZFR5cGU+KCk7XG4gICAgcHVibGljIGFjdGlvbkRhdGEgPSBpbnB1dDxBY3Rpb25EYXRhPigpO1xuICAgIHB1YmxpYyBkYXRhTGlzdFBhcmFtcyA9IGlucHV0PERhdGFMaXN0UGFyYW1zPigpO1xuICAgIHB1YmxpYyBkYXRhUHJvdmlkZXIgPSBpbnB1dDxJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+PigpO1xuICAgIHB1YmxpYyBob3N0Q29tcG9uZW50ID0gaW5wdXQ8YW55PigpO1xuICAgIHB1YmxpYyByb3V0ZUluaXQgPSBpbnB1dDxBY3RpdmF0ZWRSb3V0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7YWxpYXM6ICdyb3V0ZSd9KTtcbiAgICBwdWJsaWMgaW5wdXREaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4sIHVua25vd24+KGZhbHNlLCB7YWxpYXM6ICdkaXNhYmxlZCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBpbnB1dExvYWRpbmcgPSBpbnB1dDxib29sZWFuLCB1bmtub3duPihmYWxzZSwge2FsaWFzOiAnbG9hZGluZycsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zID0gaW5wdXQ8QXJyYXk8SXRlbT4+KFtdKTtcblxuICAgIHB1YmxpYyBmaW5pc2ggPSBvdXRwdXQ8QWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4+KCk7XG5cbiAgICBwdWJsaWMgc3ViYWN0aW9uc01lbnUgPSB2aWV3Q2hpbGQoTWVudSk7XG5cbiAgICBwdWJsaWMgaG9zdENsYXNzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hY3Rpb24oKS5jbGFzc05hbWUgPz8gJ21uZy1hY3Rpb24tYnV0dG9uJyk7XG4gICAgcHVibGljIGlzSG9zdEhpZGRlbiA9IGNvbXB1dGVkKCgpID0+ICF0aGlzLmlzVmlzaWJsZSgpIHx8ICF0aGlzLmlzUGVybWl0dGVkKCkpO1xuXG4gICAgcHVibGljIGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgcHJpdmF0ZSBpc1Zpc2libGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGlzVmlzaWJsZSA9IHNpZ25hbCh0cnVlKTtcbiAgICBwcml2YXRlIGlzUGVybWl0dGVkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBpc1Blcm1pdHRlZCA9IHNpZ25hbCh0cnVlKTtcbiAgICBwcml2YXRlIGlzRW5hYmxlZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgaXNFbmFibGVkID0gc2lnbmFsKHRydWUpO1xuICAgIHByaXZhdGUgbGFiZWxTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGxhYmVsID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICAgIHByaXZhdGUgdG9vbHRpcFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgdG9vbHRpcCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcblxuICAgIHB1YmxpYyBhY3Rpb25MaW5rID0gY29tcHV0ZWQ8QWN0aW9uTGlua0Rlc2NyaXB0b3JJbnN0PEl0ZW0+IHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWN0aW9uKCk7XG4gICAgICAgIHJldHVybiBhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25MaW5rRGVzY3JpcHRvckluc3QgPyBhY3Rpb24gOiB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgaGFzTm9UaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aW9uKCkuYnV0dG9uLmxhYmVsID09PSBudWxsKTtcblxuICAgIHByaXZhdGUgcmVzdWx0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgZXJyb3JTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBzdGF0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGNtcEluc3RTdWJzY3JpcHRpb24/OiBPdXRwdXRSZWZTdWJzY3JpcHRpb247XG5cbiAgICBwdWJsaWMgcm91dGUgPSBjb21wdXRlZDxBY3RpdmF0ZWRSb3V0ZT4oKCkgPT4gdGhpcy5yb3V0ZUluaXQoKSA/PyB0aGlzLnJvdXRlU2VydmljZSk7XG4gICAgcHVibGljIHJvdXRlRGF0YSA9IHRvU2lnbmFsKHRoaXMucm91dGUoKS5kYXRhKTtcbiAgICBwcml2YXRlIHJvdXRlUGVybWlzc2lvbnMgPSBjb21wdXRlZDxBUGVybWlzc2lvbnMgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gdGhpcy5yb3V0ZURhdGEoKTtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb24oKTtcbiAgICAgICAgaWYgKGFjdGlvbi50YWJsZXZpZXdDYXRlZ29yeSAmJiByb3V0ZURhdGEgJiYgcm91dGVEYXRhWyd0YWJsZXZpZXdQZXJtaXNzaW9ucyddKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZXZpZXdQZXJtaXNzaW9ucyA9IHJvdXRlRGF0YVsndGFibGV2aWV3UGVybWlzc2lvbnMnXTtcbiAgICAgICAgICAgIGlmICh0YWJsZXZpZXdQZXJtaXNzaW9uc1thY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxldmlld1Blcm1pc3Npb25zW2FjdGlvbi50YWJsZXZpZXdDYXRlZ29yeV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBidXR0b25DbGFzcyA9IGNvbXB1dGVkPHN0cmluZz4oKCkgPT4gdGhpcy5hY3Rpb24oKS5idXR0b24uc3R5bGVDbGFzcy5idWlsZCh0aGlzLmhhc05vVGl0bGUoKSkpO1xuICAgIHB1YmxpYyBzdWJhY3Rpb25zID0gc2lnbmFsPE1lbnVJdGVtW10+KFtdKTtcbiAgICBwcml2YXRlIHN1YmFjdGlvblN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhdXRob3JpemF0aW9uOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhY3Rpb25FeGVjdXRvcjogQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXI8SXRlbSwgU2VydmljZT4gfCBudWxsXG4gICAgKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB0aGlzLnByb2Nlc3NTdWJzY3JpcHRpb25zKCksIHthbGxvd1NpZ25hbFdyaXRlczogdHJ1ZX0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLm9uQWN0aW9uRGVzdHJveSh0aGlzLmluc3RhbmNlKTtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNFbmFibGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucmVzdWx0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmVycm9yU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmNtcEluc3RTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlckFjdGlvbihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0sIFNlcnZpY2U+LCBwYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxJdGVtPiwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoYWN0aW9uLnN1YmFjdGlvbnNBc01lbnUpIHtcbiAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uc01lbnUoKT8udG9nZ2xlKGV2ZW50ID8/IG5ldyBFdmVudCgndHJpZ2dlcicpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvbkRhdGEgPSB0aGlzLmFjdGlvbkRhdGEoKSA/IHRoaXMuYWN0aW9uRGF0YSgpIDoge307XG5cbiAgICAgICAgcGFyYW1ldGVycyA/Pz0ge1xuICAgICAgICAgICAgaXRlbUlkOiB0aGlzLml0ZW1JZCgpLFxuICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtKCksXG4gICAgICAgICAgICBhY3Rpb25EYXRhOiBhY3Rpb25EYXRhLFxuICAgICAgICAgICAgZGF0YUxpc3RQYXJhbXM6IHRoaXMuZGF0YUxpc3RQYXJhbXMoKSxcbiAgICAgICAgICAgIHJvdXRlOiB0aGlzLnJvdXRlKCksXG4gICAgICAgICAgICBzb3VyY2VDb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICBob3N0Q29tcG9uZW50OiB0aGlzLmhvc3RDb21wb25lbnQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuc2VsZWN0ZWRJdGVtcygpXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnRyaWdnZXJBY3Rpb248SXRlbSwgU2VydmljZT4oYWN0aW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgICAvLyBubyBjb250ZXh0IGlzIHByb3ZpZGVkIGlmIHJvdXRpbmcgaXMgdHJpZ2dlcmVkIG9yIGVkaXRvciBpcyBvcGVuZWQgdmlhIGRpYWxvZ1xuICAgICAgICAgICAgLy8gaXQgaXMgaW4gYW5vdGhlciBjb21wb25lbnQganVyaXNkaWN0aW9uIHRvIGhhbmRsZSBjb250ZXh0c1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXN1bHRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucmVzdWx0U3Vic2NyaXB0aW9uID0gaW5zdGFuY2UucmVzdWx0JC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoLmVtaXQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyPy5yZWxvYWRUYWJsZSh7ZGF0YToge2V2ZW50OiBldmVudH19KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXJyb3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJzY3JpcHRpb24gPSBpbnN0YW5jZS5lcnJvciQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaC5lbWl0KGluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuaW5zdGFuY2Uuc3RhdGUkLnN1YnNjcmliZShzID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAocykge1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuU3RhcnQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRW5kOlxuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/Lm5leHRBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25FbmQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlPy5uZXh0QWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LmVycm9yQWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvbkVuZDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/LmVycm9yQWN0aW9uSW5zdGFuY2U/LmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5EaXJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLnJ1bihjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DdXN0b21BY3Rpb25DbXBJbnN0KGluc3RhbmNlOiBJQWN0aW9uQ29tcG9uZW50PEl0ZW0+KSB7XG4gICAgICAgIHRoaXMuY21wSW5zdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5jbXBJbnN0U3Vic2NyaXB0aW9uID0gaW5zdGFuY2UudHJpZ2dlci5zdWJzY3JpYmUocGFyYW1zID0+IHRoaXMudHJpZ2dlckFjdGlvbih0aGlzLmFjdGlvbigpLCBwYXJhbXMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+ID0ge1xuICAgICAgICAgICAgaXRlbUlkOiB0aGlzLml0ZW1JZCgpLFxuICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtKCksXG4gICAgICAgICAgICBhY3Rpb25EYXRhOiB0aGlzLmFjdGlvbkRhdGEoKSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudDogdGhpc1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbigpO1xuICAgICAgICBpZiAoYWN0aW9uLmhhc0l0ZW1zU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbihhY3Rpb24sIHBhcmFtZXRlcnMsIHRoaXMuZGF0YVByb3ZpZGVyKCkpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uID0gdG9PYnNlcnZhYmxlKGFjdGlvbi5pc1Zpc2libGVGdW5jdGlvbihjb250ZXh0KSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gdGhpcy5pc1Zpc2libGUuc2V0KHJlcylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm91dGVQZXJtaXNzaW9ucyA9IHRoaXMucm91dGVQZXJtaXNzaW9ucygpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLnBlcm1pc3Npb25zICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygcm91dGVQZXJtaXNzaW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGFjdGlvbi5wZXJtaXNzaW9ucyAmJiByb3V0ZVBlcm1pc3Npb25zID8gUGVybWlzc2lvbnMuQWxsLm9mKHJvdXRlUGVybWlzc2lvbnMsIGFjdGlvbi5wZXJtaXNzaW9ucykgOiByb3V0ZVBlcm1pc3Npb25zID8/IGFjdGlvbi5wZXJtaXNzaW9ucyE7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMuYXV0aG9yaXphdGlvbi5pc1Blcm1pdHRlZChwZXJtaXNzaW9ucywgdGhpcy5yb3V0ZSgpLnNuYXBzaG90LCBjb250ZXh0IGFzIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPHVua25vd24sIHVua25vd24+KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB0aGlzLmlzUGVybWl0dGVkLnNldChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZShhY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24oY29udGV4dCkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHRoaXMuaXNFbmFibGVkLnNldChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5oYXNOb1RpdGxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uID0gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICd0aXRsZScsIGFjdGlvbi5idXR0b24ubGFiZWwgPz8gdW5kZWZpbmVkLCB0aGlzLml0ZW0oKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBpMThuID0+IHRoaXMubGFiZWwuc2V0KGkxOG4gPz8gJycpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKGFjdGlvbi5idXR0b24udG9vbHRpcCkge1xuICAgICAgICAgICAgdGhpcy50b29sdGlwU3Vic2NyaXB0aW9uID0gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICd0b29sdGlwJywgYWN0aW9uLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0oKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogaTE4biA9PiB0aGlzLnRvb2x0aXAuc2V0KGkxOG4gPz8gJycpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3ViYWN0aW9ucy5zZXQodGhpcy5wcm9jZXNzU3ViYWN0aW9ucygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NTdWJhY3Rpb25zKCk6IE1lbnVJdGVtW10ge1xuICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHN1YmFjdGlvbiBvZiB0aGlzLmFjdGlvbigpLnN1YmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbnVJdGVtID0ge30gYXMgTWVudUl0ZW07XG5cbiAgICAgICAgICAgIG1lbnVJdGVtLmljb24gPSBzdWJhY3Rpb24uYnV0dG9uLmljb24gPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRoaXMudHJhbnNsYXRlLCBzdWJhY3Rpb24sICd0aXRsZScsIHN1YmFjdGlvbi5idXR0b24ubGFiZWwgPz8gdW5kZWZpbmVkLCB0aGlzLml0ZW0oKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IChtZW51SXRlbS5sYWJlbCA9IHJlcyEpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uQXN5bmModGhpcy50cmFuc2xhdGUsIHN1YmFjdGlvbiwgJ3Rvb2x0aXAnLCB0aGlzLmFjdGlvbigpLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0oKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IChtZW51SXRlbS50b29sdGlwID0gcmVzISlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPiA9IHtcbiAgICAgICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICAgICAgaXRlbTogdGhpcy5pdGVtKCksXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogdGhpcy5hY3Rpb25EYXRhKCksXG4gICAgICAgICAgICAgICAgc291cmNlQ29tcG9uZW50OiB0aGlzXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoc3ViYWN0aW9uLmhhc0l0ZW1zU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbihzdWJhY3Rpb24sIHBhcmFtZXRlcnMsIHRoaXMuZGF0YVByb3ZpZGVyKCkpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1YmFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0b09ic2VydmFibGUoc3ViYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uKGNvbnRleHQpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IChtZW51SXRlbS5kaXNhYmxlZCA9ICFyZXMpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmlzaWJpbGl0eU9ic2VydmFibGVzOiBPYnNlcnZhYmxlPGJvb2xlYW4+W10gPSBbXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eU9ic2VydmFibGVzLnB1c2godG9PYnNlcnZhYmxlKHN1YmFjdGlvbi5pc1Zpc2libGVGdW5jdGlvbihjb250ZXh0KSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJhY3Rpb24ucGVybWlzc2lvbnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eU9ic2VydmFibGVzLnB1c2godGhpcy5hdXRob3JpemF0aW9uLmlzUGVybWl0dGVkKHN1YmFjdGlvbi5wZXJtaXNzaW9ucywgdGhpcy5yb3V0ZSgpLnNuYXBzaG90LCBjb250ZXh0IGFzIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPHVua25vd24sIHVua25vd24+KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IHRoaXMucm91dGUoKS5zbmFwc2hvdC5kYXRhIGFzIFRhYmxldmlld1JvdXRlRGF0YTtcbiAgICAgICAgICAgIGlmIChzdWJhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkgJiYgcm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zICYmIHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9uc1tzdWJhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGVQZXJtaXNzaW9ucyA9IHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9uc1tzdWJhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldO1xuICAgICAgICAgICAgICAgIHZpc2liaWxpdHlPYnNlcnZhYmxlcy5wdXNoKHRoaXMuYXV0aG9yaXphdGlvbi5pc1Blcm1pdHRlZChyb3V0ZVBlcm1pc3Npb25zLCB0aGlzLnJvdXRlKCkuc25hcHNob3QsIGNvbnRleHQgYXMgQWN0aW9uQ29udGV4dFZhbGlkYXRpb248dW5rbm93biwgdW5rbm93bj4pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdCh2aXNpYmlsaXR5T2JzZXJ2YWJsZXMpLnN1YnNjcmliZSh2aXNpYmlsaXRpZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBtZW51SXRlbS52aXNpYmxlID0gdmlzaWJpbGl0aWVzLmV2ZXJ5KHZhbHVlID0+IHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbWVudUl0ZW0uY29tbWFuZCA9ICgpID0+IHRoaXMudHJpZ2dlckFjdGlvbihzdWJhY3Rpb24pO1xuXG4gICAgICAgICAgICBtZW51SXRlbXMucHVzaChtZW51SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgICB9XG59XG4iLCJAaWYgKGlzVmlzaWJsZSgpICYmIGlzUGVybWl0dGVkKCkpIHtcbiAgICBAaWYgKGFjdGlvbkxpbmsoKTsgYXMgYWN0aW9uTGluaykge1xuICAgICAgICBAaWYgKGFjdGlvbkxpbmsudXJsICE9PSAnJykge1xuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCIkYW55KGFjdGlvbigpLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICAgICAgW2ljb25Qb3NdPVwiYWN0aW9uKCkuYnV0dG9uLmljb25Qb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgW2hyZWZdPVwiIWlzRW5hYmxlZCgpIHx8IGlucHV0RGlzYWJsZWQoKSA/IG51bGwgOiAoYWN0aW9uTGluay51cmwgfCBtbmdQYXJhbWV0cml6ZTogaXRlbUlkKCkgOiBpdGVtKCkgOiBhY3Rpb25EYXRhKCkpXCJcbiAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImFjdGlvbkxpbmsudGFyZ2V0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIWlzRW5hYmxlZCgpIHx8IGlucHV0RGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInRvb2x0aXAoKVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJhY3Rpb24oKS5idXR0b24udG9vbHRpcFBvc2l0aW9uID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzKClcIj48L2E+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uKCkuYnV0dG9uLmljb24pXCJcbiAgICAgICAgICAgICAgICBbaWNvblBvc109XCJhY3Rpb24oKS5idXR0b24uaWNvblBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWwoKVwiXG4gICAgICAgICAgICAgICAgW3RhcmdldF09XCJhY3Rpb25MaW5rLnRhcmdldFwiXG4gICAgICAgICAgICAgICAgW3JlcGxhY2VVcmxdPVwiYWN0aW9uTGluay5yZXBsYWNlVXJsXCJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCIhaXNFbmFibGVkKCkgfHwgaW5wdXREaXNhYmxlZCgpID8gbnVsbCA6IChhY3Rpb25MaW5rLnBhdGhTZWdtZW50cyB8IG1uZ1BhcmFtZXRyaXplOiBpdGVtSWQoKSA6IGl0ZW0oKSA6IGFjdGlvbkRhdGEoKSlcIlxuICAgICAgICAgICAgICAgIFtyZWxhdGl2ZVRvXT1cInJvdXRlKClcIlxuICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJhY3Rpb25MaW5rLnF1ZXJ5UGFyYW1zIHwgbW5nUGFyYW1ldHJpemU6IGl0ZW1JZCgpIDogaXRlbSgpIDogYWN0aW9uRGF0YSgpXCJcbiAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJhY3Rpb25MaW5rLnF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhaXNFbmFibGVkKCkgfHwgaW5wdXREaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwidG9vbHRpcCgpXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cImFjdGlvbigpLmJ1dHRvbi50b29sdGlwUG9zaXRpb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3MoKVwiPjwvYT5cbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKGFjdGlvbigpLmNvbXBvbmVudCB8fCBhY3Rpb24oKS5jb21wb25lbnRGcm9tRGkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW21uZ0NvbXBvbmVudF09XCJhY3Rpb24oKS5jb21wb25lbnRcIlxuICAgICAgICAgICAgW2luamVjdGlvblRva2VuXT1cImFjdGlvbigpLmNvbXBvbmVudEZyb21EaVwiXG4gICAgICAgICAgICBbaW5wdXRzXT1cIntcbiAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvbigpLFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0oKSxcbiAgICAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW1JZCgpLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGE6IGFjdGlvbkRhdGEoKSxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBpc0VuYWJsZWQoKSxcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBsb2FkaW5nKClcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKGluc3RhbmNlQ3JlYXRlZCk9XCJvbkN1c3RvbUFjdGlvbkNtcEluc3QoJGV2ZW50KVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIH0gQGVsc2UgaWYgKGFjdGlvbigpLnN1YmFjdGlvbnMubGVuZ3RoID4gMCAmJiAhYWN0aW9uKCkuc3ViYWN0aW9uc0FzTWVudSkge1xuICAgICAgICA8cC1zcGxpdEJ1dHRvblxuICAgICAgICAgICAgW2ljb25dPVwiYWN0aW9uKCkuYnV0dG9uLmljb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtpY29uUG9zXT1cImFjdGlvbigpLmJ1dHRvbi5pY29uUG9zaXRpb25cIlxuICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsKClcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cInRvb2x0aXAoKVwiXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cImFjdGlvbigpLmJ1dHRvbi50b29sdGlwUG9zaXRpb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNFbmFibGVkKCkgfHwgaW5wdXREaXNhYmxlZCgpXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cInRyaWdnZXJBY3Rpb24oYWN0aW9uKCkpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzcygpXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJzdWJhY3Rpb25zKClcIj5cbiAgICAgICAgPC9wLXNwbGl0QnV0dG9uPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uKCkuYnV0dG9uLmljb24pXCJcbiAgICAgICAgICAgIFtpY29uUG9zXT1cImFjdGlvbigpLmJ1dHRvbi5pY29uUG9zaXRpb25cIlxuICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsKClcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cInRvb2x0aXAoKVwiXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cImFjdGlvbigpLmJ1dHRvbi50b29sdGlwUG9zaXRpb24gPz8gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmcoKSB8fCBpbnB1dExvYWRpbmcoKVwiXG4gICAgICAgICAgICBsb2FkaW5nSWNvbj1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzRW5hYmxlZCgpIHx8IGlucHV0RGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidHJpZ2dlckFjdGlvbihhY3Rpb24oKSwgdW5kZWZpbmVkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzcygpXCI+PC9idXR0b24+XG4gICAgICAgIDxwLW1lbnUgI3N1YmFjdGlvbnNNZW51IFttb2RlbF09XCJzdWJhY3Rpb25zKClcIiBbcG9wdXBdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiIHN0eWxlQ2xhc3M9XCJtbmctYWN0aW9uLW1lbnVcIj48L3AtbWVudT5cbiAgICB9XG59XG4iXX0=
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvYWN0aW9uL2NvbXBvbmVudHMvYWN0aW9uL2FjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2FjdGlvbi9jb21wb25lbnRzL2FjdGlvbi9hY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQWEsUUFBUSxFQUF5QixnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuTCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBMkIsYUFBYSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sRUFJSCxrQkFBa0IsRUFJbEIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsWUFBWSxFQUNm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Z0JBQzFELFFBQVEsQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFELENBQUMsQ0FBQyxDQUNMLENBQUM7WUFFRixRQUFRLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFdkQsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzs4R0F4U1EsZUFBZTtrR0FBZixlQUFlLHluREFKYixDQUFDLHFCQUFxQixFQUFFLENBQUMsMEVBb0JGLElBQUksZ0VDL0QxQyxvbEhBOEVBLHNGRHBDeUIsWUFBWSw0T0FBRSxZQUFZLDZGQUFFLGFBQWEsaVhBQUUsZUFBZSx1REFBRSxrQkFBa0IsZ0xBQUUsaUJBQWlCLDJ5QkFBRSxVQUFVOzsyRkFLekgsZUFBZTtrQkFYM0IsU0FBUztpQ0FDTSxJQUFJLFlBQ04sWUFBWSxtQkFHTCx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsYUFDeEgsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLFFBRTlCLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUM7OzBCQXlFNUQsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBPdXRwdXRSZWZTdWJzY3JpcHRpb24sIGJvb2xlYW5BdHRyaWJ1dGUsIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lbnVJdGVtfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHtNZW51LCBNZW51TW9kdWxlfSBmcm9tICdwcmltZW5nL21lbnUnO1xuaW1wb3J0IHtSaXBwbGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7U3BsaXRCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvc3BsaXRidXR0b24nO1xuaW1wb3J0IHtUb29sdGlwTW9kdWxlfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIEFQZXJtaXNzaW9ucyxcbiAgICBBY3Rpb25EYXRhLFxuICAgIEFjdGlvblBhcmFtZXRlcnMsXG4gICAgQ29tcG9uZW50RGlyZWN0aXZlLFxuICAgIERhdGFMaXN0UGFyYW1zLFxuICAgIElEYXRhUHJvdmlkZXIsXG4gICAgSWRUeXBlLFxuICAgIFBhcmFtZXRyaXplUGlwZSxcbiAgICBQZXJtaXNzaW9uU2VydmljZSxcbiAgICBQZXJtaXNzaW9ucyxcbiAgICB0b09ic2VydmFibGVcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7QWN0aW9uQ29udGV4dFZhbGlkYXRpb24sIEFjdGlvbkRlc2NyaXB0b3JJbnN0LCBBY3Rpb25MaW5rRGVzY3JpcHRvckluc3QsIEFjdGlvblR5cGVFbnVtLCBJQWN0aW9uQ29tcG9uZW50LCBUYWJsZXZpZXdSb3V0ZURhdGF9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7Z2V0STE4bkZvckFjdGlvbkFzeW5jfSBmcm9tICcuLi8uLi9oZWxwZXJzL2kxOG4nO1xuaW1wb3J0IHtBY3Rpb25JbnN0YW5jZVN0YXRlRW51bX0gZnJvbSAnLi4vLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2Utc3RhdGUubW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25JbnN0YW5jZX0gZnJvbSAnLi4vLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2UubW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25FeGVjdXRvclNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlJztcbmltcG9ydCB7cHJvdmlkZUFjdGlvbkV4ZWN1dG9yfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm92aWRlcnMvcHJvdmlkZS1hY3Rpb24tZXhlY3V0b3InO1xuaW1wb3J0IHtWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3LWNvbnRhaW5lci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1hY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FjdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGltcG9ydHM6IFtBc3luY1BpcGUsIEJ1dHRvbk1vZHVsZSwgUmlwcGxlTW9kdWxlLCBUb29sdGlwTW9kdWxlLCBQYXJhbWV0cml6ZVBpcGUsIENvbXBvbmVudERpcmVjdGl2ZSwgU3BsaXRCdXR0b25Nb2R1bGUsIE1lbnVNb2R1bGVdLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVBY3Rpb25FeGVjdXRvcigpXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgICBob3N0OiB7J1tjbGFzc10nOiAnaG9zdENsYXNzKCknLCAnW2NsYXNzLm0tMF0nOiAnaXNIb3N0SGlkZGVuKCknfVxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25Db21wb25lbnQ8SXRlbSA9IGFueSwgU2VydmljZSA9IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8vIG1ldGFkYXRhIGFuZCBlZGl0b3IgbW9kZSBpbnB1dFxuICAgIHB1YmxpYyBhY3Rpb24gPSBpbnB1dC5yZXF1aXJlZDxBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtLCBTZXJ2aWNlPj4oKTtcbiAgICBwdWJsaWMgaXRlbSA9IGlucHV0PEl0ZW0+KCk7XG4gICAgcHVibGljIGl0ZW1JZCA9IGlucHV0PElkVHlwZT4oKTtcbiAgICBwdWJsaWMgYWN0aW9uRGF0YSA9IGlucHV0PEFjdGlvbkRhdGE+KCk7XG4gICAgcHVibGljIGRhdGFMaXN0UGFyYW1zID0gaW5wdXQ8RGF0YUxpc3RQYXJhbXM+KCk7XG4gICAgcHVibGljIGRhdGFQcm92aWRlciA9IGlucHV0PElEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZT4+KCk7XG4gICAgcHVibGljIGhvc3RDb21wb25lbnQgPSBpbnB1dDxhbnk+KCk7XG4gICAgcHVibGljIHJvdXRlSW5pdCA9IGlucHV0PEFjdGl2YXRlZFJvdXRlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHthbGlhczogJ3JvdXRlJ30pO1xuICAgIHB1YmxpYyBpbnB1dERpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgdW5rbm93bj4oZmFsc2UsIHthbGlhczogJ2Rpc2FibGVkJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIGlucHV0TG9hZGluZyA9IGlucHV0PGJvb2xlYW4sIHVua25vd24+KGZhbHNlLCB7YWxpYXM6ICdsb2FkaW5nJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIHNlbGVjdGVkSXRlbXMgPSBpbnB1dDxBcnJheTxJdGVtPj4oW10pO1xuXG4gICAgcHVibGljIGZpbmlzaCA9IG91dHB1dDxBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPj4oKTtcblxuICAgIHB1YmxpYyBzdWJhY3Rpb25zTWVudSA9IHZpZXdDaGlsZChNZW51KTtcblxuICAgIHB1YmxpYyBob3N0Q2xhc3MgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFjdGlvbigpLmNsYXNzTmFtZSA/PyAnbW5nLWFjdGlvbi1idXR0b24nKTtcbiAgICBwdWJsaWMgaXNIb3N0SGlkZGVuID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMuaXNWaXNpYmxlKCkgfHwgIXRoaXMuaXNQZXJtaXR0ZWQoKSk7XG5cbiAgICBwdWJsaWMgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICBwcml2YXRlIGlzVmlzaWJsZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgaXNWaXNpYmxlID0gc2lnbmFsKHRydWUpO1xuICAgIHByaXZhdGUgaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGlzUGVybWl0dGVkID0gc2lnbmFsKHRydWUpO1xuICAgIHByaXZhdGUgaXNFbmFibGVkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBpc0VuYWJsZWQgPSBzaWduYWwodHJ1ZSk7XG4gICAgcHJpdmF0ZSBsYWJlbFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgbGFiZWwgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gICAgcHJpdmF0ZSB0b29sdGlwU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyB0b29sdGlwID0gc2lnbmFsPHN0cmluZz4oJycpO1xuXG4gICAgcHVibGljIGFjdGlvbkxpbmsgPSBjb21wdXRlZDxBY3Rpb25MaW5rRGVzY3JpcHRvckluc3Q8SXRlbT4gfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb24oKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkxpbmtEZXNjcmlwdG9ySW5zdCA/IGFjdGlvbiA6IHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBoYXNOb1RpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hY3Rpb24oKS5idXR0b24ubGFiZWwgPT09IG51bGwpO1xuXG4gICAgcHJpdmF0ZSByZXN1bHRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBlcnJvclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgY21wSW5zdFN1YnNjcmlwdGlvbj86IE91dHB1dFJlZlN1YnNjcmlwdGlvbjtcblxuICAgIHB1YmxpYyByb3V0ZSA9IGNvbXB1dGVkPEFjdGl2YXRlZFJvdXRlPigoKSA9PiB0aGlzLnJvdXRlSW5pdCgpID8/IHRoaXMucm91dGVTZXJ2aWNlKTtcbiAgICBwdWJsaWMgcm91dGVEYXRhID0gdG9TaWduYWwodGhpcy5yb3V0ZSgpLmRhdGEpO1xuICAgIHByaXZhdGUgcm91dGVQZXJtaXNzaW9ucyA9IGNvbXB1dGVkPEFQZXJtaXNzaW9ucyB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSB0aGlzLnJvdXRlRGF0YSgpO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbigpO1xuICAgICAgICBpZiAoYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5ICYmIHJvdXRlRGF0YSAmJiByb3V0ZURhdGFbJ3RhYmxldmlld1Blcm1pc3Npb25zJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxldmlld1Blcm1pc3Npb25zID0gcm91dGVEYXRhWyd0YWJsZXZpZXdQZXJtaXNzaW9ucyddO1xuICAgICAgICAgICAgaWYgKHRhYmxldmlld1Blcm1pc3Npb25zW2FjdGlvbi50YWJsZXZpZXdDYXRlZ29yeV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFibGV2aWV3UGVybWlzc2lvbnNbYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuXG4gICAgcHVibGljIGJ1dHRvbkNsYXNzID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLmFjdGlvbigpLmJ1dHRvbi5zdHlsZUNsYXNzLmJ1aWxkKHRoaXMuaGFzTm9UaXRsZSgpKSk7XG4gICAgcHVibGljIHN1YmFjdGlvbnMgPSBzaWduYWw8TWVudUl0ZW1bXT4oW10pO1xuICAgIHByaXZhdGUgc3ViYWN0aW9uU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIHByaXZhdGUgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlU2VydmljZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGF1dGhvcml6YXRpb246IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjdGlvbkV4ZWN1dG9yOiBBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lcjxJdGVtLCBTZXJ2aWNlPiB8IG51bGxcbiAgICApIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHRoaXMucHJvY2Vzc1N1YnNjcmlwdGlvbnMoKSwge2FsbG93U2lnbmFsV3JpdGVzOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3Iub25BY3Rpb25EZXN0cm95KHRoaXMuaW5zdGFuY2UpO1xuICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc1Blcm1pdHRlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubGFiZWxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yZXN1bHRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuY21wSW5zdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbSwgU2VydmljZT4sIHBhcmFtZXRlcnM/OiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChhY3Rpb24uc3ViYWN0aW9uc0FzTWVudSkge1xuICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25zTWVudSgpPy50b2dnbGUoZXZlbnQgPz8gbmV3IEV2ZW50KCd0cmlnZ2VyJykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aW9uRGF0YSA9IHRoaXMuYWN0aW9uRGF0YSgpID8gdGhpcy5hY3Rpb25EYXRhKCkgOiB7fTtcblxuICAgICAgICBwYXJhbWV0ZXJzID8/PSB7XG4gICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICBpdGVtOiB0aGlzLml0ZW0oKSxcbiAgICAgICAgICAgIGFjdGlvbkRhdGE6IGFjdGlvbkRhdGEsXG4gICAgICAgICAgICBkYXRhTGlzdFBhcmFtczogdGhpcy5kYXRhTGlzdFBhcmFtcygpLFxuICAgICAgICAgICAgcm91dGU6IHRoaXMucm91dGUoKSxcbiAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgIGhvc3RDb21wb25lbnQ6IHRoaXMuaG9zdENvbXBvbmVudCgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogdGhpcy5zZWxlY3RlZEl0ZW1zKClcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuYWN0aW9uRXhlY3V0b3IudHJpZ2dlckFjdGlvbjxJdGVtLCBTZXJ2aWNlPihhY3Rpb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgaWYgcm91dGluZyBpcyB0cmlnZ2VyZWQgb3IgZWRpdG9yIGlzIG9wZW5lZCB2aWEgZGlhbG9nXG4gICAgICAgICAgICAvLyBpdCBpcyBpbiBhbm90aGVyIGNvbXBvbmVudCBqdXJpc2RpY3Rpb24gdG8gaGFuZGxlIGNvbnRleHRzXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc3VsdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yZXN1bHRTdWJzY3JpcHRpb24gPSBpbnN0YW5jZS5yZXN1bHQkLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2guZW1pdChpbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXI/LnJlbG9hZFRhYmxlKHtkYXRhOiB7ZXZlbnQ6IGV2ZW50fX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5lcnJvclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5lcnJvclN1YnNjcmlwdGlvbiA9IGluc3RhbmNlLmVycm9yJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoLmVtaXQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy5pbnN0YW5jZS5zdGF0ZSQuc3Vic2NyaWJlKHMgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQ6XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FcnJvcjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvblN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8ubmV4dEFjdGlvbkluc3RhbmNlPy5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvbkVuZDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2U/Lm5leHRBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvblN0YXJ0OlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8uZXJyb3JBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uRW5kOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZT8uZXJyb3JBY3Rpb25JbnN0YW5jZT8uYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkRpcmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IucnVuKGNvbnRleHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkN1c3RvbUFjdGlvbkNtcEluc3QoaW5zdGFuY2U6IElBY3Rpb25Db21wb25lbnQ8SXRlbT4pIHtcbiAgICAgICAgdGhpcy5jbXBJbnN0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmNtcEluc3RTdWJzY3JpcHRpb24gPSBpbnN0YW5jZS50cmlnZ2VyLnN1YnNjcmliZShwYXJhbXMgPT4gdGhpcy50cmlnZ2VyQWN0aW9uKHRoaXMuYWN0aW9uKCksIHBhcmFtcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1N1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4gPSB7XG4gICAgICAgICAgICBpdGVtSWQ6IHRoaXMuaXRlbUlkKCksXG4gICAgICAgICAgICBpdGVtOiB0aGlzLml0ZW0oKSxcbiAgICAgICAgICAgIGFjdGlvbkRhdGE6IHRoaXMuYWN0aW9uRGF0YSgpLFxuICAgICAgICAgICAgc291cmNlQ29tcG9uZW50OiB0aGlzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWN0aW9uKCk7XG4gICAgICAgIGlmIChhY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uKGFjdGlvbiwgcGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIoKSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24gPSB0b09ic2VydmFibGUoYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uKGNvbnRleHQpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB0aGlzLmlzVmlzaWJsZS5zZXQocmVzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZVBlcm1pc3Npb25zID0gdGhpcy5yb3V0ZVBlcm1pc3Npb25zKCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24ucGVybWlzc2lvbnMgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiByb3V0ZVBlcm1pc3Npb25zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5pc1Blcm1pdHRlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYWN0aW9uLnBlcm1pc3Npb25zICYmIHJvdXRlUGVybWlzc2lvbnMgPyBQZXJtaXNzaW9ucy5BbGwub2Yocm91dGVQZXJtaXNzaW9ucywgYWN0aW9uLnBlcm1pc3Npb25zKSA6IHJvdXRlUGVybWlzc2lvbnMgPz8gYWN0aW9uLnBlcm1pc3Npb25zITtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uID0gdGhpcy5hdXRob3JpemF0aW9uLmlzQWN0aW9uVmlzaWJsZShwZXJtaXNzaW9ucywgY29udGV4dCBhcyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duLCB1bmtub3duPiwgdGhpcy5yb3V0ZSgpLnNuYXBzaG90KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB0aGlzLmlzUGVybWl0dGVkLnNldChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZShhY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24oY29udGV4dCkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHRoaXMuaXNFbmFibGVkLnNldChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5oYXNOb1RpdGxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uID0gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICd0aXRsZScsIGFjdGlvbi5idXR0b24ubGFiZWwgPz8gdW5kZWZpbmVkLCB0aGlzLml0ZW0oKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBpMThuID0+IHRoaXMubGFiZWwuc2V0KGkxOG4gPz8gJycpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKGFjdGlvbi5idXR0b24udG9vbHRpcCkge1xuICAgICAgICAgICAgdGhpcy50b29sdGlwU3Vic2NyaXB0aW9uID0gZ2V0STE4bkZvckFjdGlvbkFzeW5jKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICd0b29sdGlwJywgYWN0aW9uLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0oKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBpMThuID0+IHRoaXMudG9vbHRpcC5zZXQoaTE4biA/PyAnJylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdWJhY3Rpb25zLnNldCh0aGlzLnByb2Nlc3NTdWJhY3Rpb25zKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1N1YmFjdGlvbnMoKTogTWVudUl0ZW1bXSB7XG4gICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zID0gW107XG5cbiAgICAgICAgY29uc3QgbWVudUl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgc3ViYWN0aW9uIG9mIHRoaXMuYWN0aW9uKCkuc3ViYWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB7fSBhcyBNZW51SXRlbTtcblxuICAgICAgICAgICAgbWVudUl0ZW0uaWNvbiA9IHN1YmFjdGlvbi5idXR0b24uaWNvbiA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uQXN5bmModGhpcy50cmFuc2xhdGUsIHN1YmFjdGlvbiwgJ3RpdGxlJywgc3ViYWN0aW9uLmJ1dHRvbi5sYWJlbCA/PyB1bmRlZmluZWQsIHRoaXMuaXRlbSgpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLmxhYmVsID0gcmVzISlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIGdldEkxOG5Gb3JBY3Rpb25Bc3luYyh0aGlzLnRyYW5zbGF0ZSwgc3ViYWN0aW9uLCAndG9vbHRpcCcsIHRoaXMuYWN0aW9uKCkuYnV0dG9uLnRvb2x0aXAsIHRoaXMuaXRlbSgpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLnRvb2x0aXAgPSByZXMhKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+ID0ge1xuICAgICAgICAgICAgICAgIGl0ZW1JZDogdGhpcy5pdGVtSWQoKSxcbiAgICAgICAgICAgICAgICBpdGVtOiB0aGlzLml0ZW0oKSxcbiAgICAgICAgICAgICAgICBhY3Rpb25EYXRhOiB0aGlzLmFjdGlvbkRhdGEoKSxcbiAgICAgICAgICAgICAgICBzb3VyY2VDb21wb25lbnQ6IHRoaXNcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChzdWJhY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uKHN1YmFjdGlvbiwgcGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIoKSk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRvT2JzZXJ2YWJsZShzdWJhY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24oY29udGV4dCkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLmRpc2FibGVkID0gIXJlcylcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2aXNpYmlsaXR5T2JzZXJ2YWJsZXM6IE9ic2VydmFibGU8Ym9vbGVhbj5bXSA9IFtdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJhY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5T2JzZXJ2YWJsZXMucHVzaCh0b09ic2VydmFibGUoc3ViYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uKGNvbnRleHQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1YmFjdGlvbi5wZXJtaXNzaW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5T2JzZXJ2YWJsZXMucHVzaCh0aGlzLmF1dGhvcml6YXRpb24uaXNBY3Rpb25WaXNpYmxlKHN1YmFjdGlvbi5wZXJtaXNzaW9ucywgY29udGV4dCBhcyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duLCB1bmtub3duPiwgdGhpcy5yb3V0ZSgpLnNuYXBzaG90KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlRGF0YSA9IHRoaXMucm91dGUoKS5zbmFwc2hvdC5kYXRhIGFzIFRhYmxldmlld1JvdXRlRGF0YTtcbiAgICAgICAgICAgIGlmIChzdWJhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnkgJiYgcm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zICYmIHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9uc1tzdWJhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91dGVQZXJtaXNzaW9ucyA9IHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9uc1tzdWJhY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldO1xuICAgICAgICAgICAgICAgIHZpc2liaWxpdHlPYnNlcnZhYmxlcy5wdXNoKHRoaXMuYXV0aG9yaXphdGlvbi5pc0FjdGlvblZpc2libGUocm91dGVQZXJtaXNzaW9ucywgY29udGV4dCBhcyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duLCB1bmtub3duPiwgdGhpcy5yb3V0ZSgpLnNuYXBzaG90KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QodmlzaWJpbGl0eU9ic2VydmFibGVzKS5zdWJzY3JpYmUodmlzaWJpbGl0aWVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW0udmlzaWJsZSA9IHZpc2liaWxpdGllcy5ldmVyeSh2YWx1ZSA9PiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIG1lbnVJdGVtLmNvbW1hbmQgPSAoKSA9PiB0aGlzLnRyaWdnZXJBY3Rpb24oc3ViYWN0aW9uKTtcblxuICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZW51SXRlbXM7XG4gICAgfVxufVxuIiwiQGlmIChpc1Zpc2libGUoKSAmJiBpc1Blcm1pdHRlZCgpKSB7XG4gICAgQGlmIChhY3Rpb25MaW5rKCk7IGFzIGFjdGlvbkxpbmspIHtcbiAgICAgICAgQGlmIChhY3Rpb25MaW5rLnVybCAhPT0gJycpIHtcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWwoKVwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24oKS5idXR0b24uaWNvbilcIlxuICAgICAgICAgICAgICAgIFtpY29uUG9zXT1cImFjdGlvbigpLmJ1dHRvbi5pY29uUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgIFtocmVmXT1cIiFpc0VuYWJsZWQoKSB8fCBpbnB1dERpc2FibGVkKCkgPyBudWxsIDogKGFjdGlvbkxpbmsudXJsIHwgbW5nUGFyYW1ldHJpemU6IGl0ZW1JZCgpIDogaXRlbSgpIDogYWN0aW9uRGF0YSgpKVwiXG4gICAgICAgICAgICAgICAgW3RhcmdldF09XCJhY3Rpb25MaW5rLnRhcmdldFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFpc0VuYWJsZWQoKSB8fCBpbnB1dERpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ0b29sdGlwKClcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uKCkuYnV0dG9uLnRvb2x0aXBQb3NpdGlvbiA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzcygpXCI+PC9hPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICBbaWNvbl09XCIkYW55KGFjdGlvbigpLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICAgICAgW2ljb25Qb3NdPVwiYWN0aW9uKCkuYnV0dG9uLmljb25Qb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsKClcIlxuICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiYWN0aW9uTGluay50YXJnZXRcIlxuICAgICAgICAgICAgICAgIFtyZXBsYWNlVXJsXT1cImFjdGlvbkxpbmsucmVwbGFjZVVybFwiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiIWlzRW5hYmxlZCgpIHx8IGlucHV0RGlzYWJsZWQoKSA/IG51bGwgOiAoYWN0aW9uTGluay5wYXRoU2VnbWVudHMgfCBtbmdQYXJhbWV0cml6ZTogaXRlbUlkKCkgOiBpdGVtKCkgOiBhY3Rpb25EYXRhKCkpXCJcbiAgICAgICAgICAgICAgICBbcmVsYXRpdmVUb109XCJyb3V0ZSgpXCJcbiAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiYWN0aW9uTGluay5xdWVyeVBhcmFtcyB8IG1uZ1BhcmFtZXRyaXplOiBpdGVtSWQoKSA6IGl0ZW0oKSA6IGFjdGlvbkRhdGEoKVwiXG4gICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwiYWN0aW9uTGluay5xdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIWlzRW5hYmxlZCgpIHx8IGlucHV0RGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInRvb2x0aXAoKVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJhY3Rpb24oKS5idXR0b24udG9vbHRpcFBvc2l0aW9uID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzKClcIj48L2E+XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIGlmIChhY3Rpb24oKS5jb21wb25lbnQgfHwgYWN0aW9uKCkuY29tcG9uZW50RnJvbURpKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFttbmdDb21wb25lbnRdPVwiYWN0aW9uKCkuY29tcG9uZW50XCJcbiAgICAgICAgICAgIFtpbmplY3Rpb25Ub2tlbl09XCJhY3Rpb24oKS5jb21wb25lbnRGcm9tRGlcIlxuICAgICAgICAgICAgW2lucHV0c109XCJ7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24oKSxcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtKCksXG4gICAgICAgICAgICAgICAgaXRlbUlkOiBpdGVtSWQoKSxcbiAgICAgICAgICAgICAgICBhY3Rpb25EYXRhOiBhY3Rpb25EYXRhKCksXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogaXNFbmFibGVkKCksXG4gICAgICAgICAgICAgICAgbG9hZGluZzogbG9hZGluZygpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChpbnN0YW5jZUNyZWF0ZWQpPVwib25DdXN0b21BY3Rpb25DbXBJbnN0KCRldmVudClcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICB9IEBlbHNlIGlmIChhY3Rpb24oKS5zdWJhY3Rpb25zLmxlbmd0aCA+IDAgJiYgIWFjdGlvbigpLnN1YmFjdGlvbnNBc01lbnUpIHtcbiAgICAgICAgPHAtc3BsaXRCdXR0b25cbiAgICAgICAgICAgIFtpY29uXT1cImFjdGlvbigpLmJ1dHRvbi5pY29uID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbaWNvblBvc109XCJhY3Rpb24oKS5idXR0b24uaWNvblBvc2l0aW9uXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ0b29sdGlwKClcIlxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJhY3Rpb24oKS5idXR0b24udG9vbHRpcFBvc2l0aW9uID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzRW5hYmxlZCgpIHx8IGlucHV0RGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJ0cmlnZ2VyQWN0aW9uKGFjdGlvbigpKVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3MoKVwiXG4gICAgICAgICAgICBbbW9kZWxdPVwic3ViYWN0aW9ucygpXCI+XG4gICAgICAgIDwvcC1zcGxpdEJ1dHRvbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbaWNvbl09XCIkYW55KGFjdGlvbigpLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICBbaWNvblBvc109XCJhY3Rpb24oKS5idXR0b24uaWNvblBvc2l0aW9uXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ0b29sdGlwKClcIlxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJhY3Rpb24oKS5idXR0b24udG9vbHRpcFBvc2l0aW9uID8/IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nKCkgfHwgaW5wdXRMb2FkaW5nKClcIlxuICAgICAgICAgICAgbG9hZGluZ0ljb249XCJwaSBwaS1zcGluIHBpLXNwaW5uZXJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0VuYWJsZWQoKSB8fCBpbnB1dERpc2FibGVkKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRyaWdnZXJBY3Rpb24oYWN0aW9uKCksIHVuZGVmaW5lZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8cC1tZW51ICNzdWJhY3Rpb25zTWVudSBbbW9kZWxdPVwic3ViYWN0aW9ucygpXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIiBzdHlsZUNsYXNzPVwibW5nLWFjdGlvbi1tZW51XCI+PC9wLW1lbnU+XG4gICAgfVxufVxuIl19