@mediusinc/mng-commons 5.2.0-rc.0 → 5.2.0-rc.2

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 (67) 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/descriptors/enum.descriptor.mjs +1 -1
  22. package/esm2022/model/helpers/i18n.mjs +2 -2
  23. package/esm2022/table/api/descriptors/column.descriptor.mjs +8 -19
  24. package/esm2022/table/api/descriptors/table.descriptor.mjs +13 -9
  25. package/esm2022/table/api/helpers/table-descriptor-helpers.mjs +3 -2
  26. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +72 -10
  27. package/esm2022/table/helpers/notification.mjs +2 -2
  28. package/esm2022/tableview/action/components/action/action.component.mjs +6 -7
  29. package/esm2022/tableview/action/helpers/i18n.mjs +4 -4
  30. package/esm2022/tableview/action/services/action-executor.service.mjs +6 -3
  31. package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +2 -2
  32. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +5 -4
  33. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +2 -3
  34. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +2 -3
  35. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +14 -7
  36. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +1 -1
  37. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +12 -4
  38. package/fesm2022/mediusinc-mng-commons-core.mjs +82 -42
  39. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  40. package/fesm2022/mediusinc-mng-commons-form.mjs +109 -3
  41. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  42. package/fesm2022/mediusinc-mng-commons-model.mjs +1 -1
  43. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  44. package/fesm2022/mediusinc-mng-commons-table-api.mjs +21 -27
  45. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  46. package/fesm2022/mediusinc-mng-commons-table.mjs +72 -10
  47. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  48. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +20 -13
  49. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  50. package/fesm2022/mediusinc-mng-commons-tableview.mjs +23 -14
  51. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  52. package/form/components/date-range/date-range.component.d.ts +4 -2
  53. package/form/components/number-range/number-range.component.d.ts +30 -0
  54. package/form/index.d.ts +1 -0
  55. package/i18n/en.json +1 -1
  56. package/i18n/sl.json +1 -1
  57. package/model/descriptors/enum.descriptor.d.ts +1 -1
  58. package/package.json +7 -7
  59. package/table/api/descriptors/column.descriptor.d.ts +4 -10
  60. package/table/api/descriptors/table.descriptor.d.ts +2 -1
  61. package/table/components/column-filter-full/column-filter-full.component.d.ts +3 -2
  62. package/tableview/action/components/action/action.component.d.ts +0 -1
  63. package/tableview/action/services/action-executor.service.d.ts +1 -0
  64. package/tableview/api/editor/descriptors/field.descriptor.d.ts +12 -7
  65. package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +5 -5
  66. package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +1 -0
  67. package/version-info.json +6 -6
@@ -53,7 +53,7 @@ export function action(typeOrActionName, actionNameOrCfg, cfg) {
53
53
  }
54
54
  }
55
55
  export function actionWithProvider(typeOrServiceProvider, serviceProviderOrActionName, actionNameOrCfg, cfg) {
56
- const actionName = serviceProviderOrActionName === 'string' ? serviceProviderOrActionName : typeof actionNameOrCfg === 'string' ? actionNameOrCfg : 'default';
56
+ const actionName = typeof serviceProviderOrActionName === 'string' ? serviceProviderOrActionName : typeof actionNameOrCfg === 'string' ? actionNameOrCfg : 'default';
57
57
  if (typeOrServiceProvider instanceof TypeDescriptor) {
58
58
  return new ActionDescriptorInst(actionName, {
59
59
  ...(typeof serviceProviderOrActionName === 'string' ? {} : actionGetProviderCfgObj(serviceProviderOrActionName)),
@@ -116,4 +116,4 @@ export function actionDelete(model, serviceProvider) {
116
116
  ...(serviceProvider ? actionGetProviderCfgObj(serviceProvider) : {})
117
117
  });
118
118
  }
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWRlc2NyaXB0b3IuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9hcGkvc3JjL2FjdGlvbi9kZXNjcmlwdG9ycy9hY3Rpb24tZGVzY3JpcHRvci5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFN0UsT0FBTyxFQUFDLDBCQUEwQixFQUFnRixvQkFBb0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBZW5LLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQWlCLHFCQUEwRCxFQUFFLEVBQUU7SUFDbEgsTUFBTSxHQUFHLEdBQTJELEVBQUUsQ0FBQztJQUN2RSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDeEIsSUFBSyxxQkFBdUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxRCxxRkFBcUY7WUFDckYsR0FBRyxDQUFDLFlBQVksR0FBRyxxQkFBc0QsQ0FBQztRQUM5RSxDQUFDO2FBQU0sQ0FBQztZQUNKLEdBQUcsQ0FBQyxXQUFXLEdBQUcscUJBQWtELENBQUM7UUFDekUsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxvQkFBeUI7SUFDM0Q7UUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQVEsVUFBa0IsRUFBRSxHQUEwQztRQUN0RixPQUFPLE1BQU0sQ0FBUSxVQUFVLEVBQUU7WUFDN0IsR0FBRyxHQUFHO1NBQ1QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDNUIsZUFBbUQsRUFDbkQsVUFBa0IsRUFDbEIsR0FBMEM7UUFFMUMsT0FBTyxrQkFBa0IsQ0FBaUIsZUFBZSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBUSxLQUE2QixFQUFFLFVBQWtCLEVBQUUsR0FBMEM7UUFDeEgsT0FBTyxlQUFlLENBQVEsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sTUFBTSxDQUFDLHFCQUFxQixDQUMvQixLQUE2QixFQUM3QixlQUFtRCxFQUNuRCxVQUFrQixFQUNsQixHQUEwQztRQUUxQyxPQUFPLGVBQWUsQ0FBaUIsS0FBSyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTLENBQVEsSUFBc0IsRUFBRSxVQUFrQixFQUFFLEdBQWdEO1FBQ3ZILE9BQU8sZUFBZSxDQUFRLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FDL0IsSUFBc0IsRUFDdEIsZUFBbUQsRUFDbkQsVUFBa0IsRUFDbEIsR0FBZ0Q7UUFFaEQsT0FBTyxlQUFlLENBQWlCLElBQUksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25GLENBQUM7Q0FDSjtBQUlELE1BQU0sVUFBVSxNQUFNLENBQ2xCLGdCQUFnRCxFQUNoRCxlQUErRCxFQUMvRCxHQUEwQztJQUUxQyxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkMsT0FBTyxJQUFJLG9CQUFvQixDQUMzQixnQkFBZ0IsRUFDaEIsT0FBTyxlQUFlLEtBQUssUUFBUTtZQUMvQixDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQztnQkFDSSxHQUFHLGVBQWU7YUFDckIsQ0FDVixDQUFDO0lBQ04sQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLElBQUksb0JBQW9CLENBQW1CLE9BQU8sZUFBZSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7WUFDakgsR0FBRyxHQUFHO1NBQ1QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztBQUNMLENBQUM7QUFhRCxNQUFNLFVBQVUsa0JBQWtCLENBQzlCLHFCQUFpRixFQUNqRiwyQkFBd0UsRUFDeEUsZUFBK0QsRUFDL0QsR0FBMEM7SUFFMUMsTUFBTSxVQUFVLEdBQUcsMkJBQTJCLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsT0FBTyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5SixJQUFJLHFCQUFxQixZQUFZLGNBQWMsRUFBRSxDQUFDO1FBQ2xELE9BQU8sSUFBSSxvQkFBb0IsQ0FBaUIsVUFBVSxFQUFFO1lBQ3hELEdBQUcsQ0FBQyxPQUFPLDJCQUEyQixLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ2hILEdBQUcsQ0FBQyxPQUFPLGVBQWUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1lBQy9ELEdBQUcsR0FBRztTQUNULENBQUMsQ0FBQztJQUNQLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxJQUFJLG9CQUFvQixDQUFpQixVQUFVLEVBQUU7WUFDeEQsR0FBRyx1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQztZQUNqRCxHQUFHLEdBQUc7U0FDVCxDQUFDLENBQUM7SUFDUCxDQUFDO0FBQ0wsQ0FBQztBQVNELE1BQU0sVUFBVSxlQUFlLENBQzNCLEtBQTZCLEVBQzdCLDJCQUF3RSxFQUN4RSxlQUErRCxFQUMvRCxHQUEwQztJQUUxQyxJQUFJLE9BQU8sMkJBQTJCLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEQsY0FBYztRQUNkLE9BQU8sSUFBSSxvQkFBb0IsQ0FBbUIsMkJBQTJCLEVBQUU7WUFDM0UsS0FBSztZQUNMLEdBQUcsQ0FBQyxPQUFPLGVBQWUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9ELEdBQUcsR0FBRztTQUNULENBQUMsQ0FBQztJQUNQLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxJQUFJLG9CQUFvQixDQUFpQixPQUFPLGVBQWUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFO1lBQy9HLEtBQUs7WUFDTCxHQUFHLHVCQUF1QixDQUFDLDJCQUEyQixDQUFDO1lBQ3ZELEdBQUcsR0FBRztTQUNULENBQUMsQ0FBQztJQUNQLENBQUM7QUFDTCxDQUFDO0FBU0QsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsSUFBc0IsRUFDdEIsMkJBQXdFLEVBQ3hFLGVBQXFFLEVBQ3JFLEdBQWdEO0lBRWhELElBQUksT0FBTywyQkFBMkIsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsRCxjQUFjO1FBQ2QsTUFBTSxRQUFRLEdBQUcsT0FBTyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUM3RSxPQUFPLElBQUksb0JBQW9CLENBQWlCLDJCQUEyQixFQUFFO1lBQ3pFLEtBQUssRUFBRSxJQUFJLGVBQWUsQ0FBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQW9CLEVBQUUsUUFBUSxFQUFFLGFBQXVCLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQztZQUNqSSxHQUFHLENBQUMsT0FBTyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxHQUFHLEdBQUc7U0FDVCxDQUFDLENBQUM7SUFDUCxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sSUFBSSxvQkFBb0IsQ0FBaUIsT0FBTyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUMvRyxLQUFLLEVBQUUsSUFBSSxlQUFlLENBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFvQixFQUFFLEdBQUcsRUFBRSxhQUF1QixFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUM7WUFDbEgsR0FBRyx1QkFBdUIsQ0FBQywyQkFBMkIsQ0FBQztZQUN2RCxHQUFHLEdBQUc7U0FDVCxDQUFDLENBQUM7SUFDUCxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sT0FBTyxzQkFBc0I7SUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBUSxLQUE2QjtRQUNyRCxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sTUFBTSxDQUFDLGtCQUFrQixDQUM1QixLQUE2QixFQUM3QixlQUFtRDtRQUVuRCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUNKO0FBSUQsTUFBTSxVQUFVLFlBQVksQ0FBaUIsS0FBNkIsRUFBRSxlQUFvRDtJQUM1SCxPQUFPLElBQUksMEJBQTBCLENBQWlCLEtBQUssRUFBRTtRQUN6RCxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3ZFLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsYXNzVHlwZSwgSURhdGFQcm92aWRlciwgU2VydmljZUNsYXNzVHlwZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yLCBUeXBlRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7QWN0aW9uRGVsZXRlRGVzY3JpcHRvckluc3QsIEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZSwgQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQcm92aWRlclR5cGUsIEFjdGlvbkRlc2NyaXB0b3JJbnN0fSBmcm9tICcuL2FjdGlvbi5kZXNjcmlwdG9yJztcblxuZXhwb3J0IHR5cGUgQWN0aW9uRGVzY3JpcHRvckNyZWF0ZUZyb21DbGFzc09wdHM8TW9kZWw+ID0gQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNNb2RlbDxNb2RlbD4gJiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c0kxOG5UeXBlICYgQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c0kxOG5UeXBlID0ge1xuICAgIGkxOG5CYXNlS2V5Pzogc3RyaW5nIHwgQ2xhc3NUeXBlPGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c01vZGVsPE1vZGVsPiA9IHtcbiAgICBpZFByb3BlcnR5Pzoga2V5b2YgTW9kZWw7XG4gICAgdGl0bGVQcm9wZXJ0eT86IGtleW9mIE1vZGVsO1xufTtcblxuZXhwb3J0IHR5cGUgQWN0aW9uUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPiA9IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4gfCBJRGF0YVByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlPjtcblxuZXhwb3J0IGNvbnN0IGFjdGlvbkdldFByb3ZpZGVyQ2ZnT2JqID0gPE1vZGVsLCBTZXJ2aWNlPihzZXJ2aWNlT3JEYXRhUHJvdmlkZXI/OiBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+KSA9PiB7XG4gICAgY29uc3QgY2ZnOiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1Byb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4gPSB7fTtcbiAgICBpZiAoc2VydmljZU9yRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgIGlmICgoc2VydmljZU9yRGF0YVByb3ZpZGVyIGFzIElEYXRhUHJvdmlkZXIpLmlzRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAvLyB0eXBlIGNhc3RpbmcgbmVlZGVkLCBjYXVzZSB0aGVyZSB3YXMgbm8gb3RoZXIgd2F5IGZvdW5kIHRvIGRpZmZlcmVudGlhdGUgdGhlIHR5cGVzXG4gICAgICAgICAgICBjZmcuZGF0YVByb3ZpZGVyID0gc2VydmljZU9yRGF0YVByb3ZpZGVyIGFzIElEYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2U+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2ZnLnNlcnZpY2VUeXBlID0gc2VydmljZU9yRGF0YVByb3ZpZGVyIGFzIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT47XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNmZztcbn07XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25EZXNjcmlwdG9yIGV4dGVuZHMgQWN0aW9uRGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignaW50ZXJuYWwnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZTxNb2RlbD4oYWN0aW9uTmFtZTogc3RyaW5nLCBjZmc/OiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGUpOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhY3Rpb248TW9kZWw+KGFjdGlvbk5hbWUsIHtcbiAgICAgICAgICAgIC4uLmNmZ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVdpdGhQcm92aWRlcjxNb2RlbCwgU2VydmljZT4oXG4gICAgICAgIHNlcnZpY2VQcm92aWRlcjogQWN0aW9uUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjZmc/OiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGVcbiAgICApOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4ge1xuICAgICAgICByZXR1cm4gYWN0aW9uV2l0aFByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlPihzZXJ2aWNlUHJvdmlkZXIsIGFjdGlvbk5hbWUsIGNmZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tTW9kZWw8TW9kZWw+KG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZSk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbkZyb21Nb2RlbDxNb2RlbD4obW9kZWwsIGFjdGlvbk5hbWUsIGNmZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tTW9kZWxXaXRoUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2U+KFxuICAgICAgICBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPE1vZGVsPixcbiAgICAgICAgc2VydmljZVByb3ZpZGVyOiBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICBhY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZVxuICAgICk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB7XG4gICAgICAgIHJldHVybiBhY3Rpb25Gcm9tTW9kZWw8TW9kZWwsIFNlcnZpY2U+KG1vZGVsLCBzZXJ2aWNlUHJvdmlkZXIsIGFjdGlvbk5hbWUsIGNmZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3M8TW9kZWw+KHR5cGU6IENsYXNzVHlwZTxNb2RlbD4sIGFjdGlvbk5hbWU6IHN0cmluZywgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZUZyb21DbGFzc09wdHM8TW9kZWw+KTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYWN0aW9uRnJvbUNsYXNzPE1vZGVsPih0eXBlLCBhY3Rpb25OYW1lLCBjZmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzV2l0aFByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPE1vZGVsPixcbiAgICAgICAgc2VydmljZVByb3ZpZGVyOiBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICBhY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVGcm9tQ2xhc3NPcHRzPE1vZGVsPlxuICAgICk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB7XG4gICAgICAgIHJldHVybiBhY3Rpb25Gcm9tQ2xhc3M8TW9kZWwsIFNlcnZpY2U+KHR5cGUsIHNlcnZpY2VQcm92aWRlciwgYWN0aW9uTmFtZSwgY2ZnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb248TW9kZWw+KGFjdGlvbk5hbWU6IHN0cmluZywgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIHVuZGVmaW5lZD47XG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uPE1vZGVsPih0eXBlOiBUeXBlRGVzY3JpcHRvcjxNb2RlbD4sIGFjdGlvbk5hbWU6IHN0cmluZywgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIHVuZGVmaW5lZD47XG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uPE1vZGVsPihcbiAgICB0eXBlT3JBY3Rpb25OYW1lOiBUeXBlRGVzY3JpcHRvcjxNb2RlbD4gfCBzdHJpbmcsXG4gICAgYWN0aW9uTmFtZU9yQ2ZnPzogc3RyaW5nIHwgQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlLFxuICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZVxuKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIHVuZGVmaW5lZD4ge1xuICAgIGlmICh0eXBlb2YgdHlwZU9yQWN0aW9uTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPihcbiAgICAgICAgICAgIHR5cGVPckFjdGlvbk5hbWUsXG4gICAgICAgICAgICB0eXBlb2YgYWN0aW9uTmFtZU9yQ2ZnID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uYWN0aW9uTmFtZU9yQ2ZnXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPih0eXBlb2YgYWN0aW9uTmFtZU9yQ2ZnID09PSAnc3RyaW5nJyA/IGFjdGlvbk5hbWVPckNmZyA6ICdkZWZhdWx0Jywge1xuICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbldpdGhQcm92aWRlcjxNb2RlbCwgU2VydmljZT4oXG4gICAgc2VydmljZVByb3ZpZGVyOiBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+LFxuICAgIGFjdGlvbk5hbWU6IHN0cmluZyxcbiAgICBjZmc/OiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGVcbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPjtcbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25XaXRoUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2U+KFxuICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPE1vZGVsPixcbiAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZVxuKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbldpdGhQcm92aWRlcjxNb2RlbCwgU2VydmljZT4oXG4gICAgdHlwZU9yU2VydmljZVByb3ZpZGVyOiBUeXBlRGVzY3JpcHRvcjxNb2RlbD4gfCBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+LFxuICAgIHNlcnZpY2VQcm92aWRlck9yQWN0aW9uTmFtZTogQWN0aW9uUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPiB8IHN0cmluZyxcbiAgICBhY3Rpb25OYW1lT3JDZmc/OiBzdHJpbmcgfCBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGUsXG4gICAgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlXG4pOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4ge1xuICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBzZXJ2aWNlUHJvdmlkZXJPckFjdGlvbk5hbWUgPT09ICdzdHJpbmcnID8gc2VydmljZVByb3ZpZGVyT3JBY3Rpb25OYW1lIDogdHlwZW9mIGFjdGlvbk5hbWVPckNmZyA9PT0gJ3N0cmluZycgPyBhY3Rpb25OYW1lT3JDZmcgOiAnZGVmYXVsdCc7XG4gICAgaWYgKHR5cGVPclNlcnZpY2VQcm92aWRlciBpbnN0YW5jZW9mIFR5cGVEZXNjcmlwdG9yKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+KGFjdGlvbk5hbWUsIHtcbiAgICAgICAgICAgIC4uLih0eXBlb2Ygc2VydmljZVByb3ZpZGVyT3JBY3Rpb25OYW1lID09PSAnc3RyaW5nJyA/IHt9IDogYWN0aW9uR2V0UHJvdmlkZXJDZmdPYmooc2VydmljZVByb3ZpZGVyT3JBY3Rpb25OYW1lKSksXG4gICAgICAgICAgICAuLi4odHlwZW9mIGFjdGlvbk5hbWVPckNmZyA9PT0gJ3N0cmluZycgPyB7fSA6IGFjdGlvbk5hbWVPckNmZyksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4oYWN0aW9uTmFtZSwge1xuICAgICAgICAgICAgLi4uYWN0aW9uR2V0UHJvdmlkZXJDZmdPYmoodHlwZU9yU2VydmljZVByb3ZpZGVyKSxcbiAgICAgICAgICAgIC4uLmNmZ1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25Gcm9tTW9kZWw8TW9kZWw+KG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZSk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbkZyb21Nb2RlbDxNb2RlbCwgU2VydmljZT4oXG4gICAgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4sXG4gICAgc2VydmljZVByb3ZpZGVyOiBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+LFxuICAgIGFjdGlvbk5hbWU6IHN0cmluZyxcbiAgICBjZmc/OiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGVcbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPjtcbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25Gcm9tTW9kZWw8TW9kZWwsIFNlcnZpY2U+KFxuICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgIGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlcjogc3RyaW5nIHwgQWN0aW9uUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPixcbiAgICBjZmdPckFjdGlvbk5hbWU/OiBzdHJpbmcgfCBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGUsXG4gICAgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlXG4pIHtcbiAgICBpZiAodHlwZW9mIGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gbm8gcHJvdmlkZXJcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPihhY3Rpb25OYW1lT3JTZXJ2aWNlUHJvdmlkZXIsIHtcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgLi4uKHR5cGVvZiBjZmdPckFjdGlvbk5hbWUgPT09ICdvYmplY3QnID8gY2ZnT3JBY3Rpb25OYW1lIDoge30pLFxuICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+KHR5cGVvZiBjZmdPckFjdGlvbk5hbWUgPT09ICdzdHJpbmcnID8gY2ZnT3JBY3Rpb25OYW1lIDogJ2RlZmF1bHQnLCB7XG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgIC4uLmFjdGlvbkdldFByb3ZpZGVyQ2ZnT2JqKGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlciksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uRnJvbUNsYXNzPE1vZGVsPih0eXBlOiBDbGFzc1R5cGU8TW9kZWw+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVGcm9tQ2xhc3NPcHRzPE1vZGVsPik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbkZyb21DbGFzczxNb2RlbCwgU2VydmljZT4oXG4gICAgdHlwZTogQ2xhc3NUeXBlPE1vZGVsPixcbiAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVGcm9tQ2xhc3NPcHRzPE1vZGVsPlxuKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbkZyb21DbGFzczxNb2RlbCwgU2VydmljZT4oXG4gICAgdHlwZTogQ2xhc3NUeXBlPE1vZGVsPixcbiAgICBhY3Rpb25OYW1lT3JTZXJ2aWNlUHJvdmlkZXI6IHN0cmluZyB8IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgY2ZnT3JBY3Rpb25OYW1lPzogc3RyaW5nIHwgQWN0aW9uRGVzY3JpcHRvckNyZWF0ZUZyb21DbGFzc09wdHM8TW9kZWw+LFxuICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVGcm9tQ2xhc3NPcHRzPE1vZGVsPlxuKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+IHtcbiAgICBpZiAodHlwZW9mIGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gbm8gcHJvdmlkZXJcbiAgICAgICAgY29uc3QgZmluYWxDZmcgPSB0eXBlb2YgY2ZnT3JBY3Rpb25OYW1lID09PSAnb2JqZWN0JyA/IGNmZ09yQWN0aW9uTmFtZSA6IGNmZztcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4oYWN0aW9uTmFtZU9yU2VydmljZVByb3ZpZGVyLCB7XG4gICAgICAgICAgICBtb2RlbDogbmV3IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4odHlwZSwgZmluYWxDZmc/LmlkUHJvcGVydHkgYXMgc3RyaW5nLCBmaW5hbENmZz8udGl0bGVQcm9wZXJ0eSBhcyBzdHJpbmcsIGZpbmFsQ2ZnPy5pMThuQmFzZUtleSksXG4gICAgICAgICAgICAuLi4odHlwZW9mIGNmZ09yQWN0aW9uTmFtZSA9PT0gJ29iamVjdCcgPyBjZmdPckFjdGlvbk5hbWUgOiB7fSksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4odHlwZW9mIGNmZ09yQWN0aW9uTmFtZSA9PT0gJ3N0cmluZycgPyBjZmdPckFjdGlvbk5hbWUgOiAnZGVmYXVsdCcsIHtcbiAgICAgICAgICAgIG1vZGVsOiBuZXcgTW9kZWxEZXNjcmlwdG9yPE1vZGVsPih0eXBlLCBjZmc/LmlkUHJvcGVydHkgYXMgc3RyaW5nLCBjZmc/LnRpdGxlUHJvcGVydHkgYXMgc3RyaW5nLCBjZmc/LmkxOG5CYXNlS2V5KSxcbiAgICAgICAgICAgIC4uLmFjdGlvbkdldFByb3ZpZGVyQ2ZnT2JqKGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlciksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRGVsZXRlRGVzY3JpcHRvciB7XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGU8TW9kZWw+KG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+KTogQWN0aW9uRGVsZXRlRGVzY3JpcHRvckluc3Q8TW9kZWwsIHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYWN0aW9uRGVsZXRlKG1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVdpdGhQcm92aWRlcjxNb2RlbCwgU2VydmljZT4oXG4gICAgICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgICAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT5cbiAgICApOiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4ge1xuICAgICAgICByZXR1cm4gYWN0aW9uRGVsZXRlKG1vZGVsLCBzZXJ2aWNlUHJvdmlkZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbkRlbGV0ZTxNb2RlbD4obW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4pOiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPjtcbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25EZWxldGU8TW9kZWwsIFNlcnZpY2U+KG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LCBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4pOiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT47XG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uRGVsZXRlPE1vZGVsLCBTZXJ2aWNlPihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPE1vZGVsPiwgc2VydmljZVByb3ZpZGVyPzogQWN0aW9uUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPik6IEFjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB7XG4gICAgcmV0dXJuIG5ldyBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4obW9kZWwsIHtcbiAgICAgICAgLi4uKHNlcnZpY2VQcm92aWRlciA/IGFjdGlvbkdldFByb3ZpZGVyQ2ZnT2JqKHNlcnZpY2VQcm92aWRlcikgOiB7fSlcbiAgICB9KTtcbn1cbiJdfQ==
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWRlc2NyaXB0b3IuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9hcGkvc3JjL2FjdGlvbi9kZXNjcmlwdG9ycy9hY3Rpb24tZGVzY3JpcHRvci5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUUsY0FBYyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFN0UsT0FBTyxFQUFDLDBCQUEwQixFQUFnRixvQkFBb0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBZW5LLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQWlCLHFCQUEwRCxFQUFFLEVBQUU7SUFDbEgsTUFBTSxHQUFHLEdBQTJELEVBQUUsQ0FBQztJQUN2RSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDeEIsSUFBSyxxQkFBdUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxRCxxRkFBcUY7WUFDckYsR0FBRyxDQUFDLFlBQVksR0FBRyxxQkFBc0QsQ0FBQztRQUM5RSxDQUFDO2FBQU0sQ0FBQztZQUNKLEdBQUcsQ0FBQyxXQUFXLEdBQUcscUJBQWtELENBQUM7UUFDekUsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxvQkFBeUI7SUFDM0Q7UUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQVEsVUFBa0IsRUFBRSxHQUEwQztRQUN0RixPQUFPLE1BQU0sQ0FBUSxVQUFVLEVBQUU7WUFDN0IsR0FBRyxHQUFHO1NBQ1QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDNUIsZUFBbUQsRUFDbkQsVUFBa0IsRUFDbEIsR0FBMEM7UUFFMUMsT0FBTyxrQkFBa0IsQ0FBaUIsZUFBZSxF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Qy9HLEtBQUssRUFBRSxJQUFJLGVBQWUsQ0FBUSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQW9CLEVBQUUsR0FBRyxFQUFFLGFBQXVCLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQztZQUNsSCxHQUFHLHVCQUF1QixDQUFDLDJCQUEyQixDQUFDO1lBQ3ZELEdBQUcsR0FBRztTQUNULENBQUMsQ0FBQztJQUNQLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxPQUFPLHNCQUFzQjtJQUN4QixNQUFNLENBQUMsTUFBTSxDQUFRLEtBQTZCO1FBQ3JELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxNQUFNLENBQUMsa0JBQWtCLENBQzVCLEtBQTZCLEVBQzdCLGVBQW1EO1FBRW5ELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0o7QUFJRCxNQUFNLFVBQVUsWUFBWSxDQUFpQixLQUE2QixFQUFFLGVBQW9EO0lBQzVILE9BQU8sSUFBSSwwQkFBMEIsQ0FBaUIsS0FBSyxFQUFFO1FBQ3pELEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDdkUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NUeXBlLCBJRGF0YVByb3ZpZGVyLCBTZXJ2aWNlQ2xhc3NUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtNb2RlbERlc2NyaXB0b3IsIFR5cGVEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuaW1wb3J0IHtBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdCwgQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlLCBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1Byb3ZpZGVyVHlwZSwgQWN0aW9uRGVzY3JpcHRvckluc3R9IGZyb20gJy4vYWN0aW9uLmRlc2NyaXB0b3InO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlRnJvbUNsYXNzT3B0czxNb2RlbD4gPSBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c01vZGVsPE1vZGVsPiAmIEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzSTE4blR5cGUgJiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGU7XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzSTE4blR5cGUgPSB7XG4gICAgaTE4bkJhc2VLZXk/OiBzdHJpbmcgfCBDbGFzc1R5cGU8YW55Pjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzTW9kZWw8TW9kZWw+ID0ge1xuICAgIGlkUHJvcGVydHk/OiBrZXlvZiBNb2RlbDtcbiAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgTW9kZWw7XG59O1xuXG5leHBvcnQgdHlwZSBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+ID0gU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPiB8IElEYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2U+O1xuXG5leHBvcnQgY29uc3QgYWN0aW9uR2V0UHJvdmlkZXJDZmdPYmogPSA8TW9kZWwsIFNlcnZpY2U+KHNlcnZpY2VPckRhdGFQcm92aWRlcj86IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4pID0+IHtcbiAgICBjb25zdCBjZmc6IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPiA9IHt9O1xuICAgIGlmIChzZXJ2aWNlT3JEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgaWYgKChzZXJ2aWNlT3JEYXRhUHJvdmlkZXIgYXMgSURhdGFQcm92aWRlcikuaXNEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIC8vIHR5cGUgY2FzdGluZyBuZWVkZWQsIGNhdXNlIHRoZXJlIHdhcyBubyBvdGhlciB3YXkgZm91bmQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgdHlwZXNcbiAgICAgICAgICAgIGNmZy5kYXRhUHJvdmlkZXIgPSBzZXJ2aWNlT3JEYXRhUHJvdmlkZXIgYXMgSURhdGFQcm92aWRlcjxNb2RlbCwgU2VydmljZT47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjZmcuc2VydmljZVR5cGUgPSBzZXJ2aWNlT3JEYXRhUHJvdmlkZXIgYXMgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2ZnO1xufTtcblxuZXhwb3J0IGNsYXNzIEFjdGlvbkRlc2NyaXB0b3IgZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdpbnRlcm5hbCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlPE1vZGVsPihhY3Rpb25OYW1lOiBzdHJpbmcsIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZSk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbjxNb2RlbD4oYWN0aW9uTmFtZSwge1xuICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlV2l0aFByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlPihcbiAgICAgICAgc2VydmljZVByb3ZpZGVyOiBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICBhY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZVxuICAgICk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB7XG4gICAgICAgIHJldHVybiBhY3Rpb25XaXRoUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2U+KHNlcnZpY2VQcm92aWRlciwgYWN0aW9uTmFtZSwgY2ZnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Nb2RlbDxNb2RlbD4obW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4sIGFjdGlvbk5hbWU6IHN0cmluZywgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYWN0aW9uRnJvbU1vZGVsPE1vZGVsPihtb2RlbCwgYWN0aW9uTmFtZSwgY2ZnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Nb2RlbFdpdGhQcm92aWRlcjxNb2RlbCwgU2VydmljZT4oXG4gICAgICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgICAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIGFjdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlXG4gICAgKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+IHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbkZyb21Nb2RlbDxNb2RlbCwgU2VydmljZT4obW9kZWwsIHNlcnZpY2VQcm92aWRlciwgYWN0aW9uTmFtZSwgY2ZnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21DbGFzczxNb2RlbD4odHlwZTogQ2xhc3NUeXBlPE1vZGVsPiwgYWN0aW9uTmFtZTogc3RyaW5nLCBjZmc/OiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlRnJvbUNsYXNzT3B0czxNb2RlbD4pOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhY3Rpb25Gcm9tQ2xhc3M8TW9kZWw+KHR5cGUsIGFjdGlvbk5hbWUsIGNmZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3NXaXRoUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2U+KFxuICAgICAgICB0eXBlOiBDbGFzc1R5cGU8TW9kZWw+LFxuICAgICAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIGFjdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZUZyb21DbGFzc09wdHM8TW9kZWw+XG4gICAgKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+IHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbkZyb21DbGFzczxNb2RlbCwgU2VydmljZT4odHlwZSwgc2VydmljZVByb3ZpZGVyLCBhY3Rpb25OYW1lLCBjZmcpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbjxNb2RlbD4oYWN0aW9uTmFtZTogc3RyaW5nLCBjZmc/OiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGUpOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPjtcbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb248TW9kZWw+KHR5cGU6IFR5cGVEZXNjcmlwdG9yPE1vZGVsPiwgYWN0aW9uTmFtZTogc3RyaW5nLCBjZmc/OiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGUpOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPjtcbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb248TW9kZWw+KFxuICAgIHR5cGVPckFjdGlvbk5hbWU6IFR5cGVEZXNjcmlwdG9yPE1vZGVsPiB8IHN0cmluZyxcbiAgICBhY3Rpb25OYW1lT3JDZmc/OiBzdHJpbmcgfCBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGUsXG4gICAgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlXG4pOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHR5cGVvZiB0eXBlT3JBY3Rpb25OYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQ+KFxuICAgICAgICAgICAgdHlwZU9yQWN0aW9uTmFtZSxcbiAgICAgICAgICAgIHR5cGVvZiBhY3Rpb25OYW1lT3JDZmcgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5hY3Rpb25OYW1lT3JDZmdcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQ+KHR5cGVvZiBhY3Rpb25OYW1lT3JDZmcgPT09ICdzdHJpbmcnID8gYWN0aW9uTmFtZU9yQ2ZnIDogJ2RlZmF1bHQnLCB7XG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uV2l0aFByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlPihcbiAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZVxuKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbldpdGhQcm92aWRlcjxNb2RlbCwgU2VydmljZT4oXG4gICAgdHlwZTogVHlwZURlc2NyaXB0b3I8TW9kZWw+LFxuICAgIHNlcnZpY2VQcm92aWRlcjogQWN0aW9uUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPixcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlXG4pOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT47XG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uV2l0aFByb3ZpZGVyPE1vZGVsLCBTZXJ2aWNlPihcbiAgICB0eXBlT3JTZXJ2aWNlUHJvdmlkZXI6IFR5cGVEZXNjcmlwdG9yPE1vZGVsPiB8IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgc2VydmljZVByb3ZpZGVyT3JBY3Rpb25OYW1lOiBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+IHwgc3RyaW5nLFxuICAgIGFjdGlvbk5hbWVPckNmZz86IHN0cmluZyB8IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZSxcbiAgICBjZmc/OiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGVcbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB7XG4gICAgY29uc3QgYWN0aW9uTmFtZSA9IHR5cGVvZiBzZXJ2aWNlUHJvdmlkZXJPckFjdGlvbk5hbWUgPT09ICdzdHJpbmcnID8gc2VydmljZVByb3ZpZGVyT3JBY3Rpb25OYW1lIDogdHlwZW9mIGFjdGlvbk5hbWVPckNmZyA9PT0gJ3N0cmluZycgPyBhY3Rpb25OYW1lT3JDZmcgOiAnZGVmYXVsdCc7XG4gICAgaWYgKHR5cGVPclNlcnZpY2VQcm92aWRlciBpbnN0YW5jZW9mIFR5cGVEZXNjcmlwdG9yKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+KGFjdGlvbk5hbWUsIHtcbiAgICAgICAgICAgIC4uLih0eXBlb2Ygc2VydmljZVByb3ZpZGVyT3JBY3Rpb25OYW1lID09PSAnc3RyaW5nJyA/IHt9IDogYWN0aW9uR2V0UHJvdmlkZXJDZmdPYmooc2VydmljZVByb3ZpZGVyT3JBY3Rpb25OYW1lKSksXG4gICAgICAgICAgICAuLi4odHlwZW9mIGFjdGlvbk5hbWVPckNmZyA9PT0gJ3N0cmluZycgPyB7fSA6IGFjdGlvbk5hbWVPckNmZyksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4oYWN0aW9uTmFtZSwge1xuICAgICAgICAgICAgLi4uYWN0aW9uR2V0UHJvdmlkZXJDZmdPYmoodHlwZU9yU2VydmljZVByb3ZpZGVyKSxcbiAgICAgICAgICAgIC4uLmNmZ1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25Gcm9tTW9kZWw8TW9kZWw+KG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVPcHRzUGFyZW50VHlwZSk6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbkZyb21Nb2RlbDxNb2RlbCwgU2VydmljZT4oXG4gICAgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4sXG4gICAgc2VydmljZVByb3ZpZGVyOiBBY3Rpb25Qcm92aWRlclR5cGU8TW9kZWwsIFNlcnZpY2U+LFxuICAgIGFjdGlvbk5hbWU6IHN0cmluZyxcbiAgICBjZmc/OiBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGVcbik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPjtcbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25Gcm9tTW9kZWw8TW9kZWwsIFNlcnZpY2U+KFxuICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgIGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlcjogc3RyaW5nIHwgQWN0aW9uUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPixcbiAgICBjZmdPckFjdGlvbk5hbWU/OiBzdHJpbmcgfCBBY3Rpb25EZXNjcmlwdG9yQ3JlYXRlT3B0c1BhcmVudFR5cGUsXG4gICAgY2ZnPzogQWN0aW9uRGVzY3JpcHRvckNyZWF0ZU9wdHNQYXJlbnRUeXBlXG4pIHtcbiAgICBpZiAodHlwZW9mIGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gbm8gcHJvdmlkZXJcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPihhY3Rpb25OYW1lT3JTZXJ2aWNlUHJvdmlkZXIsIHtcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgLi4uKHR5cGVvZiBjZmdPckFjdGlvbk5hbWUgPT09ICdvYmplY3QnID8gY2ZnT3JBY3Rpb25OYW1lIDoge30pLFxuICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+KHR5cGVvZiBjZmdPckFjdGlvbk5hbWUgPT09ICdzdHJpbmcnID8gY2ZnT3JBY3Rpb25OYW1lIDogJ2RlZmF1bHQnLCB7XG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgIC4uLmFjdGlvbkdldFByb3ZpZGVyQ2ZnT2JqKGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlciksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uRnJvbUNsYXNzPE1vZGVsPih0eXBlOiBDbGFzc1R5cGU8TW9kZWw+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVGcm9tQ2xhc3NPcHRzPE1vZGVsPik6IEFjdGlvbkRlc2NyaXB0b3JJbnN0PE1vZGVsLCB1bmRlZmluZWQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbkZyb21DbGFzczxNb2RlbCwgU2VydmljZT4oXG4gICAgdHlwZTogQ2xhc3NUeXBlPE1vZGVsPixcbiAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVGcm9tQ2xhc3NPcHRzPE1vZGVsPlxuKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+O1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbkZyb21DbGFzczxNb2RlbCwgU2VydmljZT4oXG4gICAgdHlwZTogQ2xhc3NUeXBlPE1vZGVsPixcbiAgICBhY3Rpb25OYW1lT3JTZXJ2aWNlUHJvdmlkZXI6IHN0cmluZyB8IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4sXG4gICAgY2ZnT3JBY3Rpb25OYW1lPzogc3RyaW5nIHwgQWN0aW9uRGVzY3JpcHRvckNyZWF0ZUZyb21DbGFzc09wdHM8TW9kZWw+LFxuICAgIGNmZz86IEFjdGlvbkRlc2NyaXB0b3JDcmVhdGVGcm9tQ2xhc3NPcHRzPE1vZGVsPlxuKTogQWN0aW9uRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNlcnZpY2U+IHtcbiAgICBpZiAodHlwZW9mIGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gbm8gcHJvdmlkZXJcbiAgICAgICAgY29uc3QgZmluYWxDZmcgPSB0eXBlb2YgY2ZnT3JBY3Rpb25OYW1lID09PSAnb2JqZWN0JyA/IGNmZ09yQWN0aW9uTmFtZSA6IGNmZztcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4oYWN0aW9uTmFtZU9yU2VydmljZVByb3ZpZGVyLCB7XG4gICAgICAgICAgICBtb2RlbDogbmV3IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4odHlwZSwgZmluYWxDZmc/LmlkUHJvcGVydHkgYXMgc3RyaW5nLCBmaW5hbENmZz8udGl0bGVQcm9wZXJ0eSBhcyBzdHJpbmcsIGZpbmFsQ2ZnPy5pMThuQmFzZUtleSksXG4gICAgICAgICAgICAuLi4odHlwZW9mIGNmZ09yQWN0aW9uTmFtZSA9PT0gJ29iamVjdCcgPyBjZmdPckFjdGlvbk5hbWUgOiB7fSksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4odHlwZW9mIGNmZ09yQWN0aW9uTmFtZSA9PT0gJ3N0cmluZycgPyBjZmdPckFjdGlvbk5hbWUgOiAnZGVmYXVsdCcsIHtcbiAgICAgICAgICAgIG1vZGVsOiBuZXcgTW9kZWxEZXNjcmlwdG9yPE1vZGVsPih0eXBlLCBjZmc/LmlkUHJvcGVydHkgYXMgc3RyaW5nLCBjZmc/LnRpdGxlUHJvcGVydHkgYXMgc3RyaW5nLCBjZmc/LmkxOG5CYXNlS2V5KSxcbiAgICAgICAgICAgIC4uLmFjdGlvbkdldFByb3ZpZGVyQ2ZnT2JqKGFjdGlvbk5hbWVPclNlcnZpY2VQcm92aWRlciksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRGVsZXRlRGVzY3JpcHRvciB7XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGU8TW9kZWw+KG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+KTogQWN0aW9uRGVsZXRlRGVzY3JpcHRvckluc3Q8TW9kZWwsIHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYWN0aW9uRGVsZXRlKG1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVdpdGhQcm92aWRlcjxNb2RlbCwgU2VydmljZT4oXG4gICAgICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgICAgICBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT5cbiAgICApOiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4ge1xuICAgICAgICByZXR1cm4gYWN0aW9uRGVsZXRlKG1vZGVsLCBzZXJ2aWNlUHJvdmlkZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFjdGlvbkRlbGV0ZTxNb2RlbD4obW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4pOiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgdW5kZWZpbmVkPjtcbmV4cG9ydCBmdW5jdGlvbiBhY3Rpb25EZWxldGU8TW9kZWwsIFNlcnZpY2U+KG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LCBzZXJ2aWNlUHJvdmlkZXI6IEFjdGlvblByb3ZpZGVyVHlwZTxNb2RlbCwgU2VydmljZT4pOiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT47XG5leHBvcnQgZnVuY3Rpb24gYWN0aW9uRGVsZXRlPE1vZGVsLCBTZXJ2aWNlPihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPE1vZGVsPiwgc2VydmljZVByb3ZpZGVyPzogQWN0aW9uUHJvdmlkZXJUeXBlPE1vZGVsLCBTZXJ2aWNlPik6IEFjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTZXJ2aWNlPiB7XG4gICAgcmV0dXJuIG5ldyBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU2VydmljZT4obW9kZWwsIHtcbiAgICAgICAgLi4uKHNlcnZpY2VQcm92aWRlciA/IGFjdGlvbkdldFByb3ZpZGVyQ2ZnT2JqKHNlcnZpY2VQcm92aWRlcikgOiB7fSlcbiAgICB9KTtcbn1cbiJdfQ==
@@ -140,6 +140,9 @@ export class EditorDescriptorInst {
140
140
  * @param field Field descriptor.
141
141
  */
142
142
  addFieldDescriptor(field) {
143
+ if (this._fields.some(f => f.property === field.property)) {
144
+ throw new CommonsInternalError(`Field '${field.property}' already exists.`);
145
+ }
143
146
  this.createDefaultGroup();
144
147
  this._fields.push(field);
145
148
  this._currentGroup?.addField(field);
@@ -150,9 +153,7 @@ export class EditorDescriptorInst {
150
153
  * @param property Model property name.
151
154
  */
152
155
  addField(property) {
153
- const field = new FieldInputDescriptor(this, property);
154
- this.addFieldDescriptor(field);
155
- return field;
156
+ return this.addFieldUnsafe(property);
156
157
  }
157
158
  /**
158
159
  * Adds field by the model property name (UNSAFE). Property is not checked on editor model.
@@ -501,4 +502,4 @@ export class EditorDescriptorInst {
501
502
  return this._eventsSubject.asObservable();
502
503
  }
503
504
  }
504
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy9lZGl0b3IvZGVzY3JpcHRvcnMvZWRpdG9yLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBRUgsb0JBQW9CLEVBTXBCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDcEIsTUFBTSw2QkFBNkIsQ0FBQztBQU1yQyxPQUFPLEVBQUMseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUkxRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RixPQUFPLEVBQUMscUJBQXFCLEVBQUUseUJBQXlCLEVBQTJCLDRCQUE0QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbEosT0FBTyxFQUFDLHlCQUF5QixFQUFFLCtCQUErQixFQUFFLGdDQUFnQyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFckksT0FBTyxFQUFDLG9CQUFvQixFQUEyQixNQUFNLG9CQUFvQixDQUFDO0FBRWxGLE1BQU0sT0FBTyxvQkFBb0I7YUFHTixxQkFBZ0IsR0FBRyx5QkFBeUIsQUFBNUIsQ0FBNkI7SUFtQnBFOzs7O09BSUc7SUFDSCxZQUFtQixLQUFtQyxFQUFFLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLElBQUk7UUFwQjFHLGNBQWMsQ0FBb0IsVUFBSyxHQUFnRCxFQUFFLENBQUM7UUFDMUYsY0FBYyxDQUFvQixZQUFPLEdBQWdFLEVBQUUsQ0FBQztRQUM1RyxjQUFjLENBQVcsWUFBTyxHQUE4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O0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Zvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIEFycmF5SXRlbVR5cGUsXG4gICAgQ29tbW9uc0ludGVybmFsRXJyb3IsXG4gICAgRW51bUNvbnN0YW50VHlwZSxcbiAgICBJRWRpdG9yRGVzY3JpcHRvcixcbiAgICBJZFR5cGUsXG4gICAgS2V5b2ZBbmRPZlR5cGUsXG4gICAgTnVsbGFibGUsXG4gICAgZ2V0STE4blR5cGVHcm91cEtleSxcbiAgICBnZXRJMThuVHlwZVRhYktleVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvciwgTW9kZWxEZXNjcmlwdG9yLCBUeXBlRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5pbXBvcnQge0lUYWJsZURhdGFQcm92aWRlciwgVGFibGVEZXNjcmlwdG9ySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi90YWJsZXZpZXcvZGVzY3JpcHRvcnMvdGFibGV2aWV3LmRlc2NyaXB0b3InO1xuaW1wb3J0IHtJRmllbGRzTWFuYWdlSW50ZXJmYWNlfSBmcm9tICcuLi9tb2RlbHMvZWRpdG9yLWZpZWxkcy5tb2RlbCc7XG5pbXBvcnQge0VESVRPUl9ERUZBVUxUX0dST1VQX05BTUUsIFRhYmxldmlld0VkaXRvclR5cGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvZWRpdG9yLm1vZGVsJztcbmltcG9ydCB7Rm9ybVZhbGlkYXRpb25NZXNzYWdlLCBGb3JtVmFsaWRhdG9yfSBmcm9tICcuLi9tb2RlbHMvZmllbGQtdmFsaWRhdGlvbi5tb2RlbCc7XG5pbXBvcnQge0Zvcm1FdmVudCwgRm9ybUV2ZW50RGF0YSwgRm9ybUV2ZW50VHlwZUVudW19IGZyb20gJy4uL21vZGVscy9mb3JtLWVkaXRvci5ldmVudCc7XG5pbXBvcnQge0lGb3JtRWRpdG9yQ29tcG9uZW50fSBmcm9tICcuLi9tb2RlbHMvZm9ybS1lZGl0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB7RmllbGRBY3Rpb25EZXNjcmlwdG9yfSBmcm9tICcuL2ZpZWxkLWFjdGlvbi5kZXNjcmlwdG9yJztcbmltcG9ydCB7QUZpZWxkRGVzY3JpcHRvcn0gZnJvbSAnLi9maWVsZC1iYXNlLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZEdyb3VwRGVzY3JpcHRvciwgRmllbGRUYWJHcm91cERlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtZ3JvdXAuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkTG9va3VwRGVzY3JpcHRvciwgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvciwgRmllbGRMb29rdXBQcm92aWRlclR5cGUsIGZpZWxkTG9va3VwR2V0UHJvdmlkZXJDZmdPYmp9IGZyb20gJy4vZmllbGQtbG9va3VwLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLCBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLCBmaWVsZE1hbnlUb01hbnlHZXRQcm92aWRlckNmZ09ian0gZnJvbSAnLi9maWVsZC1tYW55LmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yT3B0c1R5cGV9IGZyb20gJy4vZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yJztcbmltcG9ydCB7RmllbGRJbnB1dERlc2NyaXB0b3IsIEZpZWxkSW5wdXREZXNjcmlwdG9yVHlwZX0gZnJvbSAnLi9maWVsZC5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbCA9IHVuZGVmaW5lZD5cbiAgICBpbXBsZW1lbnRzIElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4sIElGaWVsZHNNYW5hZ2VJbnRlcmZhY2U8RWRpdG9yTW9kZWwsIFBhcmVudEVkaXRvck1vZGVsPlxue1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdEdyb3VwTmFtZSA9IEVESVRPUl9ERUZBVUxUX0dST1VQX05BTUU7XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfdGFibGV2aWV3RWRpdG9yVHlwZTogVGFibGV2aWV3RWRpdG9yVHlwZUVudW07XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF90YWJzOiBBcnJheTxGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4+ID0gW107XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF9ncm91cHM6IEFycmF5PEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4+ID0gW107XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9maWVsZHM6IEFycmF5PEFGaWVsZERlc2NyaXB0b3I8YW55LCBFZGl0b3JNb2RlbD4+ID0gW107XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9jdXJyZW50VGFiR3JvdXA/OiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9jdXJyZW50R3JvdXA/OiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD47XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eT86IHN0cmluZztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2xvY2FsaXphdGlvbk1vZGVsPzogTW9kZWxEZXNjcmlwdG9yPGFueT47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eT86IHN0cmluZztcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfZXZlbnRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PEZvcm1FdmVudDxFZGl0b3JNb2RlbCwgUGFyZW50RWRpdG9yTW9kZWw+PigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgaW5zdGFuY2Ugb2YgZWRpdG9yIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIG1vZGVsIE1vZGVsIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHRhYmxldmlld0VkaXRvclR5cGUgVHlwZSBvZiBlZGl0b3IgaW4gdGFibGV2aWV3IChhZGQsIGVkaXQsIHZpZXcgb3Igbm9uZSkuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+LCB0YWJsZXZpZXdFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZSkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgICB0aGlzLl90YWJsZXZpZXdFZGl0b3JUeXBlID0gdGFibGV2aWV3RWRpdG9yVHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb2RlbCBkZXNjcmlwdG9yIGZvciBlZGl0b3IuXG4gICAgICovXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVkaXRvcidzIHRhYnMuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0YWJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFicztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFZGl0b3IncyBmaWVsZHMuXG4gICAgICovXG4gICAgcHVibGljIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHlwZSBvZiBlZGl0b3IgZm9yIHRhYmxldmlldy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRhYmxldmlld0VkaXRvclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdFZGl0b3JUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGVkaXRvciBpcyBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0xvY2FsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxpemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsaXphdGlvblByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25Nb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbk1vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgbmV3IHRhYiBncm91cC4gTmV4dCBhZGRlZCBmaWVsZHMgYXJlIGFkZGVkIHRvIG5ld2x5IGNyZWF0ZWQgdGFiIGdyb3VwLlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGdyb3VwLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBrZXkgZm9yIHRoZSB0YWIuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZVRhYkdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgICAgICBjb25zdCB0YWJHcm91cCA9IG5ldyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgICAgIHRpdGxlID0gZ2V0STE4blR5cGVUYWJLZXkodGhpcy5tb2RlbC5pMThuQmFzZUtleSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFiR3JvdXAud2l0aFRpdGxlKHRpdGxlKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXApO1xuICAgICAgICByZXR1cm4gdGFiR3JvdXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgZmllbGQgZ3JvdXAuIE5leHQgYWRkZWQgZmllbGRzIGFyZSBhZGRlZCB0byBuZXdseSBjcmVhdGVkIGZpZWxkIGdyb3VwLlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGdyb3VwLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBrZXkgZm9yIHRoZSBncm91cC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmllbGRHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nIHwgbnVsbCk6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXAgPSBuZXcgRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+KHRoaXMsIG5hbWUpO1xuICAgICAgICBpZiAodGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGdldEkxOG5UeXBlR3JvdXBLZXkodGhpcy5tb2RlbC5pMThuQmFzZUtleSwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZEdyb3VwLndpdGhUaXRsZSh0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwRGVzY3JpcHRvcihmaWVsZEdyb3VwKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkR3JvdXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmllbGQocHJvcGVydHk6IGtleW9mIEVkaXRvck1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZSAoVU5TQUZFKS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmllbGRVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBFZGl0b3JNb2RlbCwgUGFyZW50RWRpdG9yTW9kZWw+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMuZmluZChmID0+IGYucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZmllbGQgYnkgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKHByb3BlcnR5OiBrZXlvZiBFZGl0b3JNb2RlbCk6IHZvaWQge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZmllbGQgYnkgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUgKFVOU0FGRSkuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmllbGRJZHggPSB0aGlzLl9maWVsZHMuZmluZEluZGV4KGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpZWxkICR7cHJvcGVydHl9IGRvZXMgbm90IGV4aXN0LmAsIHtuYW1lOiAnRWRpdG9yRGVzY3JpcHRvckVycm9yJ30pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5fZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cEZpZWxkSWR4ID0gZ3JvdXAuZmllbGRzLmZpbmRJbmRleChmID0+IGYgaW5zdGFuY2VvZiBBRmllbGREZXNjcmlwdG9yICYmIGYucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChncm91cEZpZWxkSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICBncm91cC5maWVsZHMuc3BsaWNlKGdyb3VwRmllbGRJZHgsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5zcGxpY2UoZmllbGRJZHgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZmllbGQgYnkgdGhlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGZpZWxkIEZpZWxkIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbD4oZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRHcm91cCgpO1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cD8uYWRkRmllbGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZDxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBGaWVsZE1vZGVsID0gTm9uTnVsbGFibGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XT4ocHJvcGVydHk6IFByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkSW5wdXREZXNjcmlwdG9yPEVkaXRvck1vZGVsLCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4odGhpcywgcHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4oZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZSAoVU5TQUZFKS4gUHJvcGVydHkgaXMgbm90IGNoZWNrZWQgb24gZWRpdG9yIG1vZGVsLlxuICAgICAqIFVzZSB7YWRkRmllbGR9IGZvciBzYWZlIHVzYWdlLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZFVuc2FmZTxGaWVsZE1vZGVsID0gRmllbGRJbnB1dERlc2NyaXB0b3JUeXBlLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbD4ocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZElucHV0RGVzY3JpcHRvcjxFZGl0b3JNb2RlbCwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+KHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4oZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkcyguLi5wcm9wZXJ0aWVzOiAoa2V5b2YgRWRpdG9yTW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRGaWVsZChwKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZEFjdGlvbihhY3Rpb25OYW1lOiBzdHJpbmcpOiBGaWVsZEFjdGlvbkRlc2NyaXB0b3I8RWRpdG9yTW9kZWwsIFBhcmVudEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkQWN0aW9uRGVzY3JpcHRvcjxFZGl0b3JNb2RlbCwgUGFyZW50RWRpdG9yTW9kZWw+KHRoaXMsIGFjdGlvbk5hbWUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGxvb2t1cCBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gUHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBFZGl0b3JNb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cDxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBMb29rdXBNb2RlbCA9IE5vbk51bGxhYmxlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHR5cGU/OiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRMb29rdXBVbnNhZmU8TG9va3VwTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5IGFzIHN0cmluZywgdHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBsb29rdXAgZmllbGQuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsIChkZWZpbmVzIDJuZCBnZW5lcmljKS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZSA9IExvb2t1cE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nLCB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+KHRoaXMsIHByb3BlcnR5LCB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlPy5jbGFzc1R5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAcGFyYW0ge0xvb2t1cFZhbHVlUHJvcGVydHl9IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IC0gVGhlIHZhbHVlIHByb3BlcnR5IHVzZWQgYXMgdmFsdWUgaW4gdGhlIGxvb2t1cCBvcHRpb25zLlxuICAgICAqIEB0eXBlcGFyYW0gUHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBFZGl0b3JNb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBWYWx1ZVByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9mIGxvb2t1cCBtb2RlbCB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoT3B0aW9uc1ZhbHVlUHJvcGVydHk8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIExvb2t1cE1vZGVsLFxuICAgICAgICBMb29rdXBWYWx1ZVByb3BlcnR5IGV4dGVuZHMgS2V5b2ZBbmRPZlR5cGU8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV1cbiAgICA+KHByb3BlcnR5OiBQcm9wZXJ0eSwgdHlwZTogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+LCBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eTogTG9va3VwVmFsdWVQcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cFdpdGhPcHRpb25zVmFsdWVQcm9wZXJ0eVVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCB0eXBlLCBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtVTlNBRkVdIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7TG9va3VwVmFsdWVQcm9wZXJ0eX0gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBhcyB2YWx1ZSBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cFZhbHVlUHJvcGVydHkgLSBUaGUgcHJvcGVydHkgb2YgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqIEB0eXBlcGFyYW0gUGFyZW50RWRpdG9yTW9kZWwgLSBUaGUgdmFsdWUgdHlwZSBvZiBwYXJlbnQgZm9ybS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlID0gTnVsbGFibGU8SWRUeXBlPj4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IHN0cmluZ1xuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPih0aGlzLCBwcm9wZXJ0eSwge1xuICAgICAgICAgICAgdHlwZTogdHlwZT8uY2xhc3NUeXBlLFxuICAgICAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk6IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZT4oZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGEgZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIHRvIHRoZSBlZGl0b3IgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgZmllbGQgbG9va3VwIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZS5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPn0gW3R5cGVdIC0gVGhlIHR5cGUgb2YgbG9va3VwIC0gaWYgZGF0YSBwcm92aWRlciBpcyBwYXNzZWQgYXMgcHJldmlvdXMgcGFyYW1ldGVyLCB0eXBlIGNhbiBiZSBvbWl0dGVkLiBJZiBzZXJ2aWNlIGlzIHByb3ZpZGVyLCB0eXBlIHBhcmFtZXRlciBpcyBwcm9wb3NlZCBpbiBmYXZvdXIgb2YgY29ycmVjdCB0eXBpbmcuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBsb29rdXAgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgZmllbGQgdmFsdWUgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIGVkaXRvcidzIHByb3BlcnR5IHR5cGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IENyZWF0ZWQgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIExvb2t1cE1vZGVsID0gTm9uTnVsbGFibGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgdHlwZT86IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxMb29rdXBNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCBwcm92aWRlciwgdHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGEgZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIHRvIHRoZSBlZGl0b3IgbW9kZWwuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgbG9va3VwIHByb3ZpZGVyIG9yIHNlcnZpY2UgZm9yIHRoZSBmaWVsZCBsb29rdXAuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4/fSB0eXBlIC0gT3B0aW9uYWwgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgZmllbGQgbG9va3VwLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIGxvb2t1cCBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvciBhZGRlZCB0byB0aGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlPExvb2t1cE1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlID0gTG9va3VwTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGNmZyA9IGZpZWxkTG9va3VwR2V0UHJvdmlkZXJDZmdPYmoocHJvdmlkZXIpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4odGhpcywgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGU/LmNsYXNzVHlwZSxcbiAgICAgICAgICAgIC4uLmNmZ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZSBhbmQgb3B0aW9ucyB2YWx1ZSBwcm9wZXJ0eSBmb3IgbG9va3VwIG1vZGVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxGaWVsZE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgbG9va3VwIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7TG9va3VwVmFsdWVQcm9wZXJ0eX0gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBhcyB2YWx1ZSBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBsb29rdXAgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cFZhbHVlUHJvcGVydHkgLSBUaGUgcHJvcGVydHkgb2YgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlckFuZE9wdGlvbnNWYWx1ZVByb3BlcnR5PFxuICAgICAgICBQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICBTZXJ2aWNlLFxuICAgICAgICBMb29rdXBNb2RlbCxcbiAgICAgICAgTG9va3VwVmFsdWVQcm9wZXJ0eSBleHRlbmRzIEtleW9mQW5kT2ZUeXBlPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LFxuICAgICAgICBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldXG4gICAgPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlOiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5OiBMb29rdXBWYWx1ZVByb3BlcnR5XG4gICAgKTogRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlckFuZE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgcHJvdmlkZXIsIHR5cGUsIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZSBhbmQgb3B0aW9ucyB2YWx1ZSBwcm9wZXJ0eSBmb3IgbG9va3VwIG1vZGVsLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIFVOU0FGRSBiZWNhdXNlIHByb3BlcnR5IGlzIG5vdCB0eXBlLWNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxGaWVsZE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgbG9va3VwIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFNlcnZpY2UgLSBUaGUgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyQW5kT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmU8U2VydmljZSwgTG9va3VwTW9kZWwsIEZpZWxkVmFsdWUgPSBMb29rdXBNb2RlbD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHByb3ZpZGVyOiBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IHN0cmluZ1xuICAgICk6IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+IHtcbiAgICAgICAgY29uc3QgY2ZnID0gZmllbGRMb29rdXBHZXRQcm92aWRlckNmZ09iaihwcm92aWRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPih0aGlzLCBwcm9wZXJ0eSwge1xuICAgICAgICAgICAgdHlwZTogdHlwZT8uY2xhc3NUeXBlLFxuICAgICAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk6IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5LFxuICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIEVudW0gZXh0ZW5kcyBOb25OdWxsYWJsZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sXG4gICAgICAgIG9wdGlvbnM/OiBBcnJheTxFbnVtPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cEVudW1VbnNhZmU8RW51bT4ocHJvcGVydHkgYXMgc3RyaW5nLCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBlbnVtIGxvb2t1cCBmaWVsZC5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBlbnVtRGVzYyBUeXBlIG9mIGVudW0gb3IgZW51bSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFByb3ZpZGVzIHN1YnNldCBvZiBlbnVtJ3MgYXZhaWxhYmxlIGNvbnN0YW50cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtVW5zYWZlPEVudW0gPSBFbnVtQ29uc3RhbnRUeXBlPihwcm9wZXJ0eTogc3RyaW5nLCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sIG9wdGlvbnM/OiBBcnJheTxFbnVtPikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVudW0sIEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4odGhpcywgcHJvcGVydHksIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0YWJsZS9kZXRhaWxzL2FkZC9lZGl0IGZpZWxkIGZvciBvbmUtdG8tbWFueSAoMTpuKSByZWxhdGlvbnMuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsJ3MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdGFibGV2aWV3RGVzY3JpcHRvciBUYWJsZXZpZXcgZGVzY3JpcHRvciBmb3IgcmVsYXRlZCBtb2RlbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIEZpZWxkTW9kZWwgPSBBcnJheUl0ZW1UeXBlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWwsIGFueSwgYW55LCBFZGl0b3JNb2RlbD5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRNYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5IGFzIHN0cmluZywgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0YWJsZS9kZXRhaWxzL2FkZC9lZGl0IGZpZWxkIGZvciBvbmUtdG8tbWFueSAoMTpuKSByZWxhdGlvbnMgKFVOU0FGRSkuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsJ3MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdGFibGV2aWV3RGVzY3JpcHRvciBUYWJsZXZpZXcgZGVzY3JpcHRvciBmb3IgcmVsYXRlZCBtb2RlbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsW10+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsLCBhbnksIGFueSwgRWRpdG9yTW9kZWw+XG4gICAgKTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgRmllbGRWYWx1ZT4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEVkaXRvck1vZGVsLCBGaWVsZFZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4odGhpcywgcHJvcGVydHksIHRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cERhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkVmFsdWU+KHByb3BlcnR5IGFzIHN0cmluZywgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yLCBsb29rdXBEYXRhUHJvdmlkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsW10+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cERhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPlxuICAgICk6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGNmZyA9IGZpZWxkTWFueVRvTWFueUdldFByb3ZpZGVyQ2ZnT2JqKGxvb2t1cERhdGFQcm92aWRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZFZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4oXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmNmZ1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICogQHBhcmFtIGRpc2FibGVkXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZChkaXNhYmxlZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBncm91cCB2YWxpZGF0b3IgdG8gZWRpdG9yLlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIHZhbGlkYXRvciBGaWVsZCB2YWxpZGF0b3IgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgRmllbGQgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBvcHRzIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdmFsaWRhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRpb248VmFsdWUgPSBFZGl0b3JNb2RlbD4oXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgdmFsaWRhdG9yPzogRm9ybVZhbGlkYXRvcjxWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+LFxuICAgICAgICBtZXNzYWdlPzogRm9ybVZhbGlkYXRpb25NZXNzYWdlPFZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4sXG4gICAgICAgIG9wdHM/OiBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yT3B0c1R5cGU8a2V5b2YgRWRpdG9yTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhWYWxpZGF0aW9uVW5zYWZlKG5hbWUsIHZhbGlkYXRvciwgbWVzc2FnZSwgb3B0cyBhcyBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yT3B0c1R5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZ3JvdXAgdmFsaWRhdG9yIHRvIGVkaXRvci5cbiAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSB2YWxpZGF0aW9uLlxuICAgICAqIEBwYXJhbSB2YWxpZGF0b3IgRmllbGQgdmFsaWRhdG9yIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIEZpZWxkIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gb3B0cyBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHZhbGlkYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhWYWxpZGF0aW9uVW5zYWZlPFZhbHVlID0gRWRpdG9yTW9kZWw+KFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHZhbGlkYXRvcj86IEZvcm1WYWxpZGF0b3I8VmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPixcbiAgICAgICAgbWVzc2FnZT86IEZvcm1WYWxpZGF0aW9uTWVzc2FnZTxWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+LFxuICAgICAgICBvcHRzPzogRmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvck9wdHNUeXBlXG4gICAgKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cC53aXRoVmFsaWRhdGlvbihuYW1lLCB2YWxpZGF0b3IsIG1lc3NhZ2UsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIGVkaXRvciBkZXNjcmlwdG9yIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29weSgpOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbCwgUGFyZW50RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gbmV3IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4odGhpcy5tb2RlbC5jb3B5KCksIHRoaXMudGFibGV2aWV3RWRpdG9yVHlwZSk7XG5cbiAgICAgICAgZWRpdG9yLl9maWVsZHMgPSB0aGlzLl9maWVsZHMubWFwKGYgPT4gZi5jb3B5KCkpO1xuICAgICAgICBjb25zdCBmaWVsZHNNYXAgPSBlZGl0b3IuZmllbGRzLnJlZHVjZSgobWFwLCBmaWVsZCkgPT4ge1xuICAgICAgICAgICAgbWFwLnNldChmaWVsZC5wcm9wZXJ0eSwgZmllbGQpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfSwgbmV3IE1hcDxzdHJpbmcsIGFueT4oKSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0YWJHcm91cCBvZiB0aGlzLl90YWJzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJHcm91cENvcHkgPSB0YWJHcm91cC5jb3B5KHRydWUpO1xuICAgICAgICAgICAgLy8gc2V0IGZpZWxkc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJHcm91cC5maWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHRhYkdyb3VwLmZpZWxkc1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cENvcHkgPSB0YWJHcm91cENvcHkuZmllbGRzW2ldO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBncm91cC5maWVsZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRDb3B5ID0gZmllbGRzTWFwLmdldChncm91cC5maWVsZHNbal0ucHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkQ29weSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBDb3VsZCBub3QgY29weSBlZGl0b3IgZGVzY3JpcHRvcjogZmllbGQgJyR7Z3JvdXAuZmllbGRzW2pdLnByb3BlcnR5fScgKHRhYiAnJHt0YWJHcm91cC5uYW1lfScsIGdyb3VwICR7Z3JvdXAubmFtZX0nKS5gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBncm91cENvcHkuYWRkRmllbGQoZmllbGRDb3B5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWRpdG9yLl9ncm91cHMucHVzaChncm91cENvcHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWRpdG9yLl90YWJzLnB1c2godGFiR3JvdXBDb3B5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVkaXRvci5fY3VycmVudFRhYkdyb3VwID0gZWRpdG9yLl90YWJzLmxlbmd0aCA+IDAgPyBlZGl0b3IuX3RhYnNbZWRpdG9yLl90YWJzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZWRpdG9yLl9jdXJyZW50VGFiR3JvdXApIHtcbiAgICAgICAgICAgIGVkaXRvci5fY3VycmVudEdyb3VwID0gZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAuZmllbGRzLmxlbmd0aCA+IDAgPyBlZGl0b3IuX2N1cnJlbnRUYWJHcm91cC5maWVsZHNbZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAuZmllbGRzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5fZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVkIGdyb3VwIGZyb20gZmllbGQgZ3JvdXAgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZmllbGRHcm91cCBGaWVsZCBncm91cCBkZXNjcmlwdG9yLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwRGVzY3JpcHRvcihmaWVsZEdyb3VwOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbCwgUGFyZW50RWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cCA9IGZpZWxkR3JvdXA7XG4gICAgICAgIHRoaXMuX2dyb3Vwcy5wdXNoKGZpZWxkR3JvdXApO1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXA/LmFkZEZpZWxkKGZpZWxkR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIHRhYiBncm91cCBmcm9tIHRhYiBncm91cCBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSB0YWJHcm91cCBUYWIgZ3JvdXAgZGVzY3JpcHRvci5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRhYkdyb3VwID0gdGFiR3JvdXA7XG4gICAgICAgIHRoaXMuX3RhYnMucHVzaCh0YWJHcm91cCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZGVmYXVsdCBmaWVsZCBncm91cC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRHcm91cCgpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0VGFiR3JvdXAoKTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUYWJHcm91cD8uZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwKEVkaXRvckRlc2NyaXB0b3JJbnN0LmRlZmF1bHRHcm91cE5hbWUsIG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBkZWZhdWx0IHRhYiBncm91cC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRUYWJHcm91cCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRhYkdyb3VwKEVkaXRvckRlc2NyaXB0b3JJbnN0LmRlZmF1bHRHcm91cE5hbWUsICdnZW5lcmFsLmdlbmVyYWwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHRha2VzIGNhcmUgb2YgZGlzcGxheWluZyBjb3JyZWN0L2xvY2FsaXplZCBkYXRhIGluIHRoZSBlZGl0b3JcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgcHJvcGVydHkgdGhhdCB0ZWxscyB1cyB3aGVyZSBvbiB0aGUgbW9kZWwgYXJlIGxvY2FsaXphdGlvbnMgYWNjZXNzaWJsZVxuICAgICAqIEBwYXJhbSBtb2RlbCBNb2RlbCBmb3IgbG9jYWxpemF0aW9uc1xuICAgICAqIEBwYXJhbSBsb2NhbGVQcm9wZXJ0eSBwcm9wZXJ0eSBieSB3aGljaCB3ZSBmaW5kIHRoZSBsb2NhbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9jYWxpemVkPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIExvY2FsaXphdGlvbk1vZGVsID0gQXJyYXlJdGVtVHlwZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPExvY2FsaXphdGlvbk1vZGVsPixcbiAgICAgICAgbG9jYWxlUHJvcGVydHk6IGtleW9mIExvY2FsaXphdGlvbk1vZGVsXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplZFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIG1vZGVsLCBsb2NhbGVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2NhbGl6ZWRVbnNhZmU8TG9jYWxpemF0aW9uVHlwZT4ocHJvcGVydHk6IHN0cmluZywgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxMb2NhbGl6YXRpb25UeXBlPiwgbG9jYWxlUHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eSA9IHByb3BlcnR5IGFzIHN0cmluZztcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkgPSBsb2NhbGVQcm9wZXJ0eSBhcyBzdHJpbmc7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dEV2ZW50KHR5cGU6IEZvcm1FdmVudFR5cGVFbnVtLCBjb21wb25lbnQ6IElGb3JtRWRpdG9yQ29tcG9uZW50PGFueSwgYW55PiwgZGF0YT86IEZvcm1FdmVudERhdGE8RWRpdG9yTW9kZWw+KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgZm9ybUNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgICAgICAgZm9ybTogY29tcG9uZW50LmZvcm0gYXMgRm9ybUdyb3VwLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGV2ZW50cyQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbn1cbiJdfQ==
505
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy9lZGl0b3IvZGVzY3JpcHRvcnMvZWRpdG9yLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBRUgsb0JBQW9CLEVBTXBCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDcEIsTUFBTSw2QkFBNkIsQ0FBQztBQU1yQyxPQUFPLEVBQUMseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUkxRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RixPQUFPLEVBQUMscUJBQXFCLEVBQUUseUJBQXlCLEVBQTJCLDRCQUE0QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbEosT0FBTyxFQUFDLHlCQUF5QixFQUFFLCtCQUErQixFQUFFLGdDQUFnQyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFckksT0FBTyxFQUFDLG9CQUFvQixFQUEyQixNQUFNLG9CQUFvQixDQUFDO0FBRWxGLE1BQU0sT0FBTyxvQkFBb0I7YUFHTixxQkFBZ0IsR0FBRyx5QkFBeUIsQUFBNUIsQ0FBNkI7SUFtQnBFOzs7O09BSUc7SUFDSCxZQUFtQixLQUFtQyxFQUFFLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLElBQUk7UUFwQjFHLGNBQWMsQ0FBb0IsVUFBSyxHQUFnRCxFQUFFLENBQUM7UUFDMUYsY0FBYyxDQUFvQixZQUFPLEdBQWdFLEVBQUUsQ0FBQztRQUM1RyxjQUFjLENBQVcsWUFBTyxHQUE4QyxFQUFFLENBQUM7UUFJakYsY0FBYyxDQUFXLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFM0MsY0FBYyxDQUFXLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBSzlDLGNBQWMsQ0FBb0IsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBNkMsQ0FBQztRQVF4RyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsSUFBSTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxtQkFBbUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLDBCQUEwQjtRQUNqQyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBVyxnQ0FBZ0M7UUFDdkMsT0FBTyxJQUFJLENBQUMsaUNBQWlDLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLElBQVksRUFBRSxLQUFjO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksdUJBQXVCLENBQWMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNULEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsS0FBcUI7UUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBb0IsQ0FBYyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckUsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNULEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxRQUFRLENBQUMsUUFBMkI7UUFDdkMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNuRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLFFBQTJCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUJBQWlCLENBQUMsUUFBZ0I7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLG9CQUFvQixDQUFDLFNBQVMsUUFBUSxrQkFBa0IsRUFBRSxFQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBQyxDQUFDLENBQUM7UUFDekcsQ0FBQztRQUNELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDNUcsSUFBSSxhQUFhLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEMsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBc0MsS0FBK0U7UUFDMUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLG9CQUFvQixDQUFDLFVBQVUsS0FBSyxDQUFDLFFBQVEsbUJBQW1CLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBMEgsUUFBa0I7UUFDdkosT0FBTyxJQUFJLENBQUMsY0FBYyxDQUF5QixRQUFrQixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxjQUFjLENBQWlFLFFBQWdCO1FBQ2xHLE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQXlELElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsa0JBQWtCLENBQXlCLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxTQUFTLENBQUMsR0FBRyxVQUFpQztRQUNqRCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxjQUFjLENBQUMsVUFBa0I7UUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsQ0FBaUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGNBQWMsQ0FDakIsUUFBa0IsRUFDbEIsSUFBa0M7UUFFbEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQTBCLFFBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxvQkFBb0IsQ0FBd0MsUUFBZ0IsRUFBRSxJQUFrQztRQUNuSCxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFxQixDQUFxRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3hILElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUztTQUN4QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLHNDQUFzQyxDQUszQyxRQUFrQixFQUFFLElBQWlDLEVBQUUsMEJBQStDO1FBQ3BHLE9BQU8sSUFBSSxDQUFDLDRDQUE0QyxDQUEwQixRQUFrQixFQUFFLElBQUksRUFBRSwwQkFBb0MsQ0FBQyxDQUFDO0lBQ3RKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLDRDQUE0QyxDQUMvQyxRQUFnQixFQUNoQixJQUFpQyxFQUNqQywwQkFBa0M7UUFFbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsQ0FBcUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUN4SCxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVM7WUFDckIsb0JBQW9CLEVBQUUsMEJBQTBCO1NBQ25ELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBMEIsS0FBSyxDQUFDLENBQUM7UUFDeEQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLDBCQUEwQixDQUM3QixRQUFrQixFQUNsQixRQUF1RCxFQUN2RCxJQUFrQztRQUVsQyxPQUFPLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBbUMsUUFBa0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLGdDQUFnQyxDQUNuQyxRQUFnQixFQUNoQixRQUF1RCxFQUN2RCxJQUFrQztRQUVsQyxNQUFNLEdBQUcsR0FBRyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFxQixDQUFtRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3RILElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUztZQUNyQixHQUFHLEdBQUc7U0FDVCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsaURBQWlELENBTzdDLFFBQWtCLEVBQ2xCLFFBQXVELEVBQ3ZELElBQWlDLEVBQ2pDLDBCQUErQztRQUUvQyxPQUFPLElBQUksQ0FBQyx1REFBdUQsQ0FBQyxRQUFrQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsMEJBQW9DLENBQUMsQ0FBQztJQUNsSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILHVEQUF1RCxDQUNuRCxRQUFnQixFQUNoQixRQUF1RCxFQUN2RCxJQUFpQyxFQUNqQywwQkFBa0M7UUFFbEMsTUFBTSxHQUFHLEdBQUcsNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsQ0FBbUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUN0SCxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVM7WUFDckIsb0JBQW9CLEVBQUUsMEJBQTBCO1lBQ2hELEdBQUcsR0FBRztTQUNULENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sa0JBQWtCLENBQ3JCLFFBQTJCLEVBQzNCLFFBQThCLEVBQzlCLE9BQXFCO1FBRXJCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFPLFFBQWtCLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHdCQUF3QixDQUEwQixRQUFnQixFQUFFLFFBQThCLEVBQUUsT0FBcUI7UUFDNUgsTUFBTSxLQUFLLEdBQUcsSUFBSSx5QkFBeUIsQ0FBdUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCLENBQ3JCLFFBQWtCLEVBQ2xCLG1CQUErRTtRQUUvRSxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBeUIsUUFBa0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksd0JBQXdCLENBQzNCLFFBQWdCLEVBQ2hCLG1CQUErRTtRQUUvRSxNQUFNLEtBQUssR0FBRyxJQUFJLHlCQUF5QixDQUF5RCxJQUFJLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDekksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTSx3QkFBd0IsQ0FDM0IsUUFBa0IsRUFDbEIsbUJBQW9ELEVBQ3BELHFCQUFzRCxFQUN0RCxrQkFBK0Q7UUFFL0QsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQXNDLFFBQWtCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN4SyxDQUFDO0lBRU0sOEJBQThCLENBQ2pDLFFBQWdCLEVBQ2hCLG1CQUFvRCxFQUNwRCxxQkFBc0QsRUFDdEQsa0JBQStEO1FBRS9ELE1BQU0sR0FBRyxHQUFHLGdDQUFnQyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsSUFBSSwrQkFBK0IsQ0FDN0MsSUFBSSxFQUNKLFFBQVEsRUFDUixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCO1lBQ0ksR0FBRyxHQUFHO1NBQ1QsQ0FDSixDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUk7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGNBQWMsQ0FDakIsSUFBWSxFQUNaLFNBQW1ELEVBQ25ELE9BQXlELEVBQ3pELElBQTJEO1FBRTNELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQXlDLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksb0JBQW9CLENBQ3ZCLElBQVksRUFDWixTQUFtRCxFQUNuRCxPQUF5RCxFQUN6RCxJQUF3QztRQUV4QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksSUFBSTtRQUNQLE1BQU0sTUFBTSxHQUFHLElBQUksb0JBQW9CLENBQWlDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFckgsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2xELEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvQixPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBZSxDQUFDLENBQUM7UUFFM0IsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxhQUFhO1lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUMzQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzFELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzt3QkFDYixNQUFNLElBQUksb0JBQW9CLENBQUMsNENBQTRDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxXQUFXLFFBQVEsQ0FBQyxJQUFJLFlBQVksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7b0JBQzVKLENBQUM7b0JBQ0QsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztnQkFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0RyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDN0osQ0FBQztRQUNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDBCQUEwQixDQUFDLFVBQWdFO1FBQzlGLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyx3QkFBd0IsQ0FBQyxRQUE4QztRQUM3RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUI7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbEYsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FDWixRQUFrQixFQUNsQixLQUF5QyxFQUN6QyxjQUF1QztRQUV2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBa0IsRUFBRSxLQUFLLEVBQUUsY0FBd0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTSxlQUFlLENBQW1CLFFBQWdCLEVBQUUsS0FBd0MsRUFBRSxjQUFzQjtRQUN2SCxJQUFJLENBQUMsaUNBQWlDLEdBQUcsUUFBa0IsQ0FBQztRQUM1RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxjQUF3QixDQUFDO1FBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxTQUFTLENBQUMsSUFBdUIsRUFBRSxTQUF5QyxFQUFFLElBQWlDO1FBQ2xILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3JCLElBQUksRUFBRSxJQUFJO1lBQ1YsYUFBYSxFQUFFLFNBQVM7WUFDeEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFpQjtZQUNqQyxJQUFJLEVBQUUsSUFBSTtTQUNiLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Rm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQXJyYXlJdGVtVHlwZSxcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBFbnVtQ29uc3RhbnRUeXBlLFxuICAgIElFZGl0b3JEZXNjcmlwdG9yLFxuICAgIElkVHlwZSxcbiAgICBLZXlvZkFuZE9mVHlwZSxcbiAgICBOdWxsYWJsZSxcbiAgICBnZXRJMThuVHlwZUdyb3VwS2V5LFxuICAgIGdldEkxOG5UeXBlVGFiS2V5XG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yLCBNb2RlbERlc2NyaXB0b3IsIFR5cGVEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcbmltcG9ydCB7SVRhYmxlRGF0YVByb3ZpZGVyLCBUYWJsZURlc2NyaXB0b3JJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5cbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvckluc3R9IGZyb20gJy4uLy4uL3RhYmxldmlldy9kZXNjcmlwdG9ycy90YWJsZXZpZXcuZGVzY3JpcHRvcic7XG5pbXBvcnQge0lGaWVsZHNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL21vZGVscy9lZGl0b3ItZmllbGRzLm1vZGVsJztcbmltcG9ydCB7RURJVE9SX0RFRkFVTFRfR1JPVVBfTkFNRSwgVGFibGV2aWV3RWRpdG9yVHlwZUVudW19IGZyb20gJy4uL21vZGVscy9lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHtGb3JtVmFsaWRhdGlvbk1lc3NhZ2UsIEZvcm1WYWxpZGF0b3J9IGZyb20gJy4uL21vZGVscy9maWVsZC12YWxpZGF0aW9uLm1vZGVsJztcbmltcG9ydCB7Rm9ybUV2ZW50LCBGb3JtRXZlbnREYXRhLCBGb3JtRXZlbnRUeXBlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tZWRpdG9yLmV2ZW50JztcbmltcG9ydCB7SUZvcm1FZGl0b3JDb21wb25lbnR9IGZyb20gJy4uL21vZGVscy9mb3JtLWVkaXRvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtGaWVsZEFjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtYWN0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtBRmllbGREZXNjcmlwdG9yfSBmcm9tICcuL2ZpZWxkLWJhc2UuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkR3JvdXBEZXNjcmlwdG9yLCBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcn0gZnJvbSAnLi9maWVsZC1ncm91cC5kZXNjcmlwdG9yJztcbmltcG9ydCB7RmllbGRMb29rdXBEZXNjcmlwdG9yLCBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yLCBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZSwgZmllbGRMb29rdXBHZXRQcm92aWRlckNmZ09ian0gZnJvbSAnLi9maWVsZC1sb29rdXAuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IsIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IsIGZpZWxkTWFueVRvTWFueUdldFByb3ZpZGVyQ2ZnT2JqfSBmcm9tICcuL2ZpZWxkLW1hbnkuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3JPcHRzVHlwZX0gZnJvbSAnLi9maWVsZC12YWxpZGF0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZElucHV0RGVzY3JpcHRvciwgRmllbGRJbnB1dERlc2NyaXB0b3JUeXBlfSBmcm9tICcuL2ZpZWxkLmRlc2NyaXB0b3InO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWwsIFBhcmVudEVkaXRvck1vZGVsID0gdW5kZWZpbmVkPlxuICAgIGltcGxlbWVudHMgSUVkaXRvckRlc2NyaXB0b3I8RWRpdG9yTW9kZWwsIFBhcmVudEVkaXRvck1vZGVsPiwgSUZpZWxkc01hbmFnZUludGVyZmFjZTxFZGl0b3JNb2RlbCwgUGFyZW50RWRpdG9yTW9kZWw+XG57XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBkZWZhdWx0R3JvdXBOYW1lID0gRURJVE9SX0RFRkFVTFRfR1JPVVBfTkFNRTtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF90YWJsZXZpZXdFZGl0b3JUeXBlOiBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYnM6IEFycmF5PEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPj4gPSBbXTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgcmVhZG9ubHkgX2dyb3VwczogQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWwsIFBhcmVudEVkaXRvck1vZGVsPj4gPSBbXTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2ZpZWxkczogQXJyYXk8QUZpZWxkRGVzY3JpcHRvcjxhbnksIEVkaXRvck1vZGVsPj4gPSBbXTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2N1cnJlbnRUYWJHcm91cD86IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2N1cnJlbnRHcm91cD86IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPjtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5Pzogc3RyaW5nO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfbG9jYWxpemF0aW9uTW9kZWw/OiBNb2RlbERlc2NyaXB0b3I8YW55PjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2xvY2FsaXphdGlvbkxvY2FsaXphdGlvblByb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF9ldmVudHNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Rm9ybUV2ZW50PEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG5ldyBpbnN0YW5jZSBvZiBlZGl0b3IgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gbW9kZWwgTW9kZWwgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gdGFibGV2aWV3RWRpdG9yVHlwZSBUeXBlIG9mIGVkaXRvciBpbiB0YWJsZXZpZXcgKGFkZCwgZWRpdCwgdmlldyBvciBub25lKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4sIHRhYmxldmlld0VkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX3RhYmxldmlld0VkaXRvclR5cGUgPSB0YWJsZXZpZXdFZGl0b3JUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGVsIGRlc2NyaXB0b3IgZm9yIGVkaXRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpdG9yJ3MgdGFicy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRhYnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVkaXRvcidzIGZpZWxkcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIGVkaXRvciBmb3IgdGFibGV2aWV3LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGFibGV2aWV3RWRpdG9yVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0VkaXRvclR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgZWRpdG9yIGlzIGRpc2FibGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbk1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgdGFiIGdyb3VwLiBOZXh0IGFkZGVkIGZpZWxkcyBhcmUgYWRkZWQgdG8gbmV3bHkgY3JlYXRlZCB0YWIgZ3JvdXAuXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZ3JvdXAuXG4gICAgICogQHBhcmFtIHRpdGxlIFRpdGxlIGtleSBmb3IgdGhlIHRhYi5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlVGFiR3JvdXAobmFtZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHRhYkdyb3VwID0gbmV3IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPih0aGlzLCBuYW1lKTtcbiAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgICAgdGl0bGUgPSBnZXRJMThuVHlwZVRhYktleSh0aGlzLm1vZGVsLmkxOG5CYXNlS2V5LCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0YWJHcm91cC53aXRoVGl0bGUodGl0bGUpO1xuICAgICAgICB0aGlzLmNyZWF0ZVRhYkdyb3VwRGVzY3JpcHRvcih0YWJHcm91cCk7XG4gICAgICAgIHJldHVybiB0YWJHcm91cDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG5ldyBmaWVsZCBncm91cC4gTmV4dCBhZGRlZCBmaWVsZHMgYXJlIGFkZGVkIHRvIG5ld2x5IGNyZWF0ZWQgZmllbGQgZ3JvdXAuXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZ3JvdXAuXG4gICAgICogQHBhcmFtIHRpdGxlIFRpdGxlIGtleSBmb3IgdGhlIGdyb3VwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcgfCBudWxsKTogRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgY29uc3QgZmllbGRHcm91cCA9IG5ldyBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICh0aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgICAgICAgIHRpdGxlID0gZ2V0STE4blR5cGVHcm91cEtleSh0aGlzLm1vZGVsLmkxOG5CYXNlS2V5LCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkR3JvdXAud2l0aFRpdGxlKHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkR3JvdXBEZXNjcmlwdG9yKGZpZWxkR3JvdXApO1xuICAgICAgICByZXR1cm4gZmllbGRHcm91cDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGaWVsZChwcm9wZXJ0eToga2V5b2YgRWRpdG9yTW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lIChVTlNBRkUpLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGaWVsZFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGQocHJvcGVydHk6IGtleW9mIEVkaXRvck1vZGVsKTogdm9pZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZSAoVU5TQUZFKS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGRVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuX2ZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmllbGQgJHtwcm9wZXJ0eX0gZG9lcyBub3QgZXhpc3QuYCwge25hbWU6ICdFZGl0b3JEZXNjcmlwdG9yRXJyb3InfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLl9ncm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGRJZHggPSBncm91cC5maWVsZHMuZmluZEluZGV4KGYgPT4gZiBpbnN0YW5jZW9mIEFGaWVsZERlc2NyaXB0b3IgJiYgZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGdyb3VwRmllbGRJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmZpZWxkcy5zcGxpY2UoZ3JvdXBGaWVsZElkeCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZShmaWVsZElkeCwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBmaWVsZCBieSB0aGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZmllbGQgRmllbGQgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGREZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPihmaWVsZDogQUZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgRmllbGRWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMuc29tZShmID0+IGYucHJvcGVydHkgPT09IGZpZWxkLnByb3BlcnR5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBGaWVsZCAnJHtmaWVsZC5wcm9wZXJ0eX0nIGFscmVhZHkgZXhpc3RzLmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdEdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwPy5hZGRGaWVsZChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZmllbGQgYnkgdGhlIG1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIEZpZWxkTW9kZWwgPSBOb25OdWxsYWJsZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldPihwcm9wZXJ0eTogUHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lIChVTlNBRkUpLiBQcm9wZXJ0eSBpcyBub3QgY2hlY2tlZCBvbiBlZGl0b3IgbW9kZWwuXG4gICAgICogVXNlIHthZGRGaWVsZH0gZm9yIHNhZmUgdXNhZ2UuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkVW5zYWZlPEZpZWxkTW9kZWwgPSBGaWVsZElucHV0RGVzY3JpcHRvclR5cGUsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkSW5wdXREZXNjcmlwdG9yPEVkaXRvck1vZGVsLCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRzKC4uLnByb3BlcnRpZXM6IChrZXlvZiBFZGl0b3JNb2RlbClbXSk6IHRoaXMge1xuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB0aGlzLmFkZEZpZWxkKHApKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkQWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZyk6IEZpZWxkQWN0aW9uRGVzY3JpcHRvcjxFZGl0b3JNb2RlbCwgUGFyZW50RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRBY3Rpb25EZXNjcmlwdG9yPEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4odGhpcywgYWN0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbG9va3VwIGZpZWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIExvb2t1cE1vZGVsID0gTm9uTnVsbGFibGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgdHlwZT86IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cFVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCB0eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbVU5TQUZFXSBBZGRzIGxvb2t1cCBmaWVsZC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwgKGRlZmluZXMgMm5kIGdlbmVyaWMpLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwVW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlID0gTG9va3VwTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcsIHR5cGU/OiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4odGhpcywgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGU/LmNsYXNzVHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIG9wdGlvbnMgdmFsdWUgcHJvcGVydHkgZm9yIGxvb2t1cCBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7TG9va3VwVmFsdWVQcm9wZXJ0eX0gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBhcyB2YWx1ZSBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cFZhbHVlUHJvcGVydHkgLSBUaGUgcHJvcGVydHkgb2YgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFdpdGhPcHRpb25zVmFsdWVQcm9wZXJ0eTxcbiAgICAgICAgUHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgTG9va3VwTW9kZWwsXG4gICAgICAgIExvb2t1cFZhbHVlUHJvcGVydHkgZXh0ZW5kcyBLZXlvZkFuZE9mVHlwZTxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWxbUHJvcGVydHldPixcbiAgICAgICAgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XVxuICAgID4ocHJvcGVydHk6IFByb3BlcnR5LCB0eXBlOiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4sIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5OiBMb29rdXBWYWx1ZVByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTG9va3VwV2l0aE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSBhcyBzdHJpbmcsIHR5cGUsIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIG9wdGlvbnMgdmFsdWUgcHJvcGVydHkgZm9yIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHBhcmFtIHtMb29rdXBWYWx1ZVByb3BlcnR5fSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGFzIHZhbHVlIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwVmFsdWVQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiBsb29rdXAgbW9kZWwgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICogQHR5cGVwYXJhbSBQYXJlbnRFZGl0b3JNb2RlbCAtIFRoZSB2YWx1ZSB0eXBlIG9mIHBhcmVudCBmb3JtLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmU8TG9va3VwTW9kZWwsIEZpZWxkVmFsdWUgPSBOdWxsYWJsZTxJZFR5cGU+PihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgdHlwZTogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+LFxuICAgICAgICBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eTogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+KHRoaXMsIHByb3BlcnR5LCB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlPy5jbGFzc1R5cGUsXG4gICAgICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eTogbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHlcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlPihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggYSBkYXRhIHByb3ZpZGVyIG9yIHNlcnZpY2UgdG8gdGhlIGVkaXRvciBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7RmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBmaWVsZCBsb29rdXAgZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+fSBbdHlwZV0gLSBUaGUgdHlwZSBvZiBsb29rdXAgLSBpZiBkYXRhIHByb3ZpZGVyIGlzIHBhc3NlZCBhcyBwcmV2aW91cyBwYXJhbWV0ZXIsIHR5cGUgY2FuIGJlIG9taXR0ZWQuIElmIHNlcnZpY2UgaXMgcHJvdmlkZXIsIHR5cGUgcGFyYW1ldGVyIGlzIHByb3Bvc2VkIGluIGZhdm91ciBvZiBjb3JyZWN0IHR5cGluZy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIGxvb2t1cCBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSBmaWVsZCB2YWx1ZSB0eXBlLCBkZWZhdWx0cyB0byB0aGUgZWRpdG9yJ3MgcHJvcGVydHkgdHlwZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPn0gQ3JlYXRlZCBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXI8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgU2VydmljZSwgTG9va3VwTW9kZWwgPSBOb25OdWxsYWJsZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlPExvb2t1cE1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSBhcyBzdHJpbmcsIHByb3ZpZGVyLCB0eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbVU5TQUZFXSBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggYSBkYXRhIHByb3ZpZGVyIG9yIHNlcnZpY2UgdG8gdGhlIGVkaXRvciBtb2RlbC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7RmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBsb29rdXAgcHJvdmlkZXIgb3Igc2VydmljZSBmb3IgdGhlIGZpZWxkIGxvb2t1cC5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPj99IHR5cGUgLSBPcHRpb25hbCB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBmaWVsZCBsb29rdXAuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBsb29rdXAgbW9kZWwgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIFNlcnZpY2UgLSBUaGUgbG9va3VwIHNlcnZpY2UgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yIGFkZGVkIHRvIHRoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmU8TG9va3VwTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWUgPSBMb29rdXBNb2RlbD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHByb3ZpZGVyOiBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHR5cGU/OiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD5cbiAgICApIHtcbiAgICAgICAgY29uc3QgY2ZnID0gZmllbGRMb29rdXBHZXRQcm92aWRlckNmZ09iaihwcm92aWRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPih0aGlzLCBwcm9wZXJ0eSwge1xuICAgICAgICAgICAgdHlwZTogdHlwZT8uY2xhc3NUeXBlLFxuICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIGFuZCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPEZpZWxkTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBsb29rdXAgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHBhcmFtIHtMb29rdXBWYWx1ZVByb3BlcnR5fSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGFzIHZhbHVlIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIGxvb2t1cCBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwVmFsdWVQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiBsb29rdXAgbW9kZWwgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyQW5kT3B0aW9uc1ZhbHVlUHJvcGVydHk8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIFNlcnZpY2UsXG4gICAgICAgIExvb2t1cE1vZGVsLFxuICAgICAgICBMb29rdXBWYWx1ZVByb3BlcnR5IGV4dGVuZHMgS2V5b2ZBbmRPZlR5cGU8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV1cbiAgICA+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHByb3ZpZGVyOiBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IExvb2t1cFZhbHVlUHJvcGVydHlcbiAgICApOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyQW5kT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBwcm92aWRlciwgdHlwZSwgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbVU5TQUZFXSBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlIGFuZCBvcHRpb25zIHZhbHVlIHByb3BlcnR5IGZvciBsb29rdXAgbW9kZWwuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPEZpZWxkTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBsb29rdXAgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IC0gVGhlIHZhbHVlIHByb3BlcnR5IHVzZWQgaW4gdGhlIGxvb2t1cCBvcHRpb25zLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJBbmRPcHRpb25zVmFsdWVQcm9wZXJ0eVVuc2FmZTxTZXJ2aWNlLCBMb29rdXBNb2RlbCwgRmllbGRWYWx1ZSA9IExvb2t1cE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgdHlwZTogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+LFxuICAgICAgICBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eTogc3RyaW5nXG4gICAgKTogRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4ge1xuICAgICAgICBjb25zdCBjZmcgPSBmaWVsZExvb2t1cEdldFByb3ZpZGVyQ2ZnT2JqKHByb3ZpZGVyKTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+KHRoaXMsIHByb3BlcnR5LCB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlPy5jbGFzc1R5cGUsXG4gICAgICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eTogbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cEVudW08UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgRW51bSBleHRlbmRzIE5vbk51bGxhYmxlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eToga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPixcbiAgICAgICAgb3B0aW9ucz86IEFycmF5PEVudW0+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTG9va3VwRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSBhcyBzdHJpbmcsIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGVudW0gbG9va3VwIGZpZWxkLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCdzIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIGVudW1EZXNjIFR5cGUgb2YgZW51bSBvciBlbnVtIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUHJvdmlkZXMgc3Vic2V0IG9mIGVudW0ncyBhdmFpbGFibGUgY29uc3RhbnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cEVudW1VbnNhZmU8RW51bSA9IEVudW1Db25zdGFudFR5cGU+KHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RW51bSwgRWRpdG9yTW9kZWwsIFBhcmVudEVkaXRvck1vZGVsPih0aGlzLCBwcm9wZXJ0eSwgZW51bURlc2MsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRhYmxlL2RldGFpbHMvYWRkL2VkaXQgZmllbGQgZm9yIG9uZS10by1tYW55ICgxOm4pIHJlbGF0aW9ucy5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB0YWJsZXZpZXdEZXNjcmlwdG9yIFRhYmxldmlldyBkZXNjcmlwdG9yIGZvciByZWxhdGVkIG1vZGVsLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlFZGl0b3I8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgRmllbGRNb2RlbCA9IEFycmF5SXRlbVR5cGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgdGFibGV2aWV3RGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbCwgYW55LCBhbnksIEVkaXRvck1vZGVsPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZE1hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCB0YWJsZXZpZXdEZXNjcmlwdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRhYmxlL2RldGFpbHMvYWRkL2VkaXQgZmllbGQgZm9yIG9uZS10by1tYW55ICgxOm4pIHJlbGF0aW9ucyAoVU5TQUZFKS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB0YWJsZXZpZXdEZXNjcmlwdG9yIFRhYmxldmlldyBkZXNjcmlwdG9yIGZvciByZWxhdGVkIG1vZGVsLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWxbXT4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWwsIGFueSwgYW55LCBFZGl0b3JNb2RlbD5cbiAgICApOiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEVkaXRvck1vZGVsLCBGaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPih0aGlzLCBwcm9wZXJ0eSwgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3I8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkTW9kZWwgPSBBcnJheUl0ZW1UeXBlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyOiBJVGFibGVEYXRhUHJvdmlkZXI8RmllbGRNb2RlbCwgU2VydmljZVR5cGU+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTWFueVRvTWFueUVkaXRvclVuc2FmZTxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCBtYWluVGFibGVEZXNjcmlwdG9yLCBsb29rdXBUYWJsZURlc2NyaXB0b3IsIGxvb2t1cERhdGFQcm92aWRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvclVuc2FmZTxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWxbXT4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyOiBJVGFibGVEYXRhUHJvdmlkZXI8RmllbGRNb2RlbCwgU2VydmljZVR5cGU+XG4gICAgKTogRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkVmFsdWU+IHtcbiAgICAgICAgY29uc3QgY2ZnID0gZmllbGRNYW55VG9NYW55R2V0UHJvdmlkZXJDZmdPYmoobG9va3VwRGF0YVByb3ZpZGVyKTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPihcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKiBAcGFyYW0gZGlzYWJsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERpc2FibGVkKGRpc2FibGVkID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGdyb3VwIHZhbGlkYXRvciB0byBlZGl0b3IuXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdmFsaWRhdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsaWRhdG9yIEZpZWxkIHZhbGlkYXRvciBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBGaWVsZCB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIG9wdHMgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB2YWxpZGF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoVmFsaWRhdGlvbjxWYWx1ZSA9IEVkaXRvck1vZGVsPihcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICB2YWxpZGF0b3I/OiBGb3JtVmFsaWRhdG9yPFZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4sXG4gICAgICAgIG1lc3NhZ2U/OiBGb3JtVmFsaWRhdGlvbk1lc3NhZ2U8VmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPixcbiAgICAgICAgb3B0cz86IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3JPcHRzVHlwZTxrZXlvZiBFZGl0b3JNb2RlbD5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFZhbGlkYXRpb25VbnNhZmUobmFtZSwgdmFsaWRhdG9yLCBtZXNzYWdlLCBvcHRzIGFzIEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3JPcHRzVHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBncm91cCB2YWxpZGF0b3IgdG8gZWRpdG9yLlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIHZhbGlkYXRvciBGaWVsZCB2YWxpZGF0b3IgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgRmllbGQgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBvcHRzIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdmFsaWRhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRpb25VbnNhZmU8VmFsdWUgPSBFZGl0b3JNb2RlbD4oXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgdmFsaWRhdG9yPzogRm9ybVZhbGlkYXRvcjxWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+LFxuICAgICAgICBtZXNzYWdlPzogRm9ybVZhbGlkYXRpb25NZXNzYWdlPFZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4sXG4gICAgICAgIG9wdHM/OiBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yT3B0c1R5cGVcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwLndpdGhWYWxpZGF0aW9uKG5hbWUsIHZhbGlkYXRvciwgbWVzc2FnZSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgZWRpdG9yIGRlc2NyaXB0b3Igb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb3B5KCk6IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4ge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSBuZXcgRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWwsIFBhcmVudEVkaXRvck1vZGVsPih0aGlzLm1vZGVsLmNvcHkoKSwgdGhpcy50YWJsZXZpZXdFZGl0b3JUeXBlKTtcblxuICAgICAgICBlZGl0b3IuX2ZpZWxkcyA9IHRoaXMuX2ZpZWxkcy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIGNvbnN0IGZpZWxkc01hcCA9IGVkaXRvci5maWVsZHMucmVkdWNlKChtYXAsIGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBtYXAuc2V0KGZpZWxkLnByb3BlcnR5LCBmaWVsZCk7XG4gICAgICAgICAgICByZXR1cm4gbWFwO1xuICAgICAgICB9LCBuZXcgTWFwPHN0cmluZywgYW55PigpKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHRhYkdyb3VwIG9mIHRoaXMuX3RhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYkdyb3VwQ29weSA9IHRhYkdyb3VwLmNvcHkodHJ1ZSk7XG4gICAgICAgICAgICAvLyBzZXQgZmllbGRzXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYkdyb3VwLmZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGFiR3JvdXAuZmllbGRzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwQ29weSA9IHRhYkdyb3VwQ29weS5maWVsZHNbaV07XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwLmZpZWxkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZENvcHkgPSBmaWVsZHNNYXAuZ2V0KGdyb3VwLmZpZWxkc1tqXS5wcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmllbGRDb3B5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYENvdWxkIG5vdCBjb3B5IGVkaXRvciBkZXNjcmlwdG9yOiBmaWVsZCAnJHtncm91cC5maWVsZHNbal0ucHJvcGVydHl9JyAodGFiICcke3RhYkdyb3VwLm5hbWV9JywgZ3JvdXAgJHtncm91cC5uYW1lfScpLmApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwQ29weS5hZGRGaWVsZChmaWVsZENvcHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlZGl0b3IuX2dyb3Vwcy5wdXNoKGdyb3VwQ29weSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3IuX3RhYnMucHVzaCh0YWJHcm91cENvcHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAgPSBlZGl0b3IuX3RhYnMubGVuZ3RoID4gMCA/IGVkaXRvci5fdGFic1tlZGl0b3IuX3RhYnMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChlZGl0b3IuX2N1cnJlbnRUYWJHcm91cCkge1xuICAgICAgICAgICAgZWRpdG9yLl9jdXJyZW50R3JvdXAgPSBlZGl0b3IuX2N1cnJlbnRUYWJHcm91cC5maWVsZHMubGVuZ3RoID4gMCA/IGVkaXRvci5fY3VycmVudFRhYkdyb3VwLmZpZWxkc1tlZGl0b3IuX2N1cnJlbnRUYWJHcm91cC5maWVsZHMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZWQgZ3JvdXAgZnJvbSBmaWVsZCBncm91cCBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBmaWVsZEdyb3VwIEZpZWxkIGdyb3VwIGRlc2NyaXB0b3IuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUZpZWxkR3JvdXBEZXNjcmlwdG9yKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0VGFiR3JvdXAoKTtcbiAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwID0gZmllbGRHcm91cDtcbiAgICAgICAgdGhpcy5fZ3JvdXBzLnB1c2goZmllbGRHcm91cCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUYWJHcm91cD8uYWRkRmllbGQoZmllbGRHcm91cCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGFiIGdyb3VwIGZyb20gdGFiIGdyb3VwIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHRhYkdyb3VwIFRhYiBncm91cCBkZXNjcmlwdG9yLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXA6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXAgPSB0YWJHcm91cDtcbiAgICAgICAgdGhpcy5fdGFicy5wdXNoKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBkZWZhdWx0IGZpZWxkIGdyb3VwLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdEdyb3VwKCkge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRUYWJHcm91cCgpO1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRhYkdyb3VwPy5maWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkR3JvdXAoRWRpdG9yRGVzY3JpcHRvckluc3QuZGVmYXVsdEdyb3VwTmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGRlZmF1bHQgdGFiIGdyb3VwLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCkge1xuICAgICAgICBpZiAodGhpcy5fdGFicy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGFiR3JvdXAoRWRpdG9yRGVzY3JpcHRvckluc3QuZGVmYXVsdEdyb3VwTmFtZSwgJ2dlbmVyYWwuZ2VuZXJhbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgdGFrZXMgY2FyZSBvZiBkaXNwbGF5aW5nIGNvcnJlY3QvbG9jYWxpemVkIGRhdGEgaW4gdGhlIGVkaXRvclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBwcm9wZXJ0eSB0aGF0IHRlbGxzIHVzIHdoZXJlIG9uIHRoZSBtb2RlbCBhcmUgbG9jYWxpemF0aW9ucyBhY2Nlc3NpYmxlXG4gICAgICogQHBhcmFtIG1vZGVsIE1vZGVsIGZvciBsb2NhbGl6YXRpb25zXG4gICAgICogQHBhcmFtIGxvY2FsZVByb3BlcnR5IHByb3BlcnR5IGJ5IHdoaWNoIHdlIGZpbmQgdGhlIGxvY2FsZVxuICAgICAqL1xuICAgIHB1YmxpYyBsb2NhbGl6ZWQ8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgTG9jYWxpemF0aW9uTW9kZWwgPSBBcnJheUl0ZW1UeXBlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TG9jYWxpemF0aW9uTW9kZWw+LFxuICAgICAgICBsb2NhbGVQcm9wZXJ0eToga2V5b2YgTG9jYWxpemF0aW9uTW9kZWxcbiAgICApOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgbW9kZWwsIGxvY2FsZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvY2FsaXplZFVuc2FmZTxMb2NhbGl6YXRpb25UeXBlPihwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPExvY2FsaXphdGlvblR5cGU+LCBsb2NhbGVQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsaXphdGlvblByb3BlcnR5ID0gcHJvcGVydHkgYXMgc3RyaW5nO1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Nb2RlbCA9IG1vZGVsO1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IGxvY2FsZVByb3BlcnR5IGFzIHN0cmluZztcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0RXZlbnQodHlwZTogRm9ybUV2ZW50VHlwZUVudW0sIGNvbXBvbmVudDogSUZvcm1FZGl0b3JDb21wb25lbnQ8YW55LCBhbnk+LCBkYXRhPzogRm9ybUV2ZW50RGF0YTxFZGl0b3JNb2RlbD4pIHtcbiAgICAgICAgdGhpcy5fZXZlbnRzU3ViamVjdC5uZXh0KHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICBmb3JtQ29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICAgICAgICBmb3JtOiBjb21wb25lbnQuZm9ybSBhcyBGb3JtR3JvdXAsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { Subject } from 'rxjs';
2
- import { CommonsInternalError, getI18nTypePropertyKey } from '@mediusinc/mng-commons/core';
2
+ import { CommonsInternalError } from '@mediusinc/mng-commons/core';
3
3
  import { FieldSizeEnum } from '../models/field.model';
4
4
  import { FieldValidationDescriptor } from './field-validation.descriptor';
5
5
  export class AGenericFieldDescriptor {
@@ -47,7 +47,6 @@ export class AFieldDescriptor extends AGenericFieldDescriptor {
47
47
  /** @ignore */ this._isLocalized = false;
48
48
  /** @ignore */ this._eventsSubject = new Subject();
49
49
  this._property = property;
50
- this._label = getI18nTypePropertyKey(this._editor.model.i18nBaseKey, property);
51
50
  }
52
51
  get property() {
53
52
  return this._property;
@@ -293,4 +292,4 @@ export class AFieldDescriptor extends AGenericFieldDescriptor {
293
292
  obj._asyncValidations = this._asyncValidations.map(value => value.copy());
294
293
  }
295
294
  }
296
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtYmFzZS5kZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvZWRpdG9yL2Rlc2NyaXB0b3JzL2ZpZWxkLWJhc2UuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxvQkFBb0IsRUFBK0Isc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUd0SCxPQUFPLEVBQWMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHakUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFeEUsTUFBTSxPQUFnQix1QkFBdUI7SUFJekMsWUFBc0IsTUFBc0M7UUFGbEQsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFHaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxVQUFVLENBQUMsTUFBbUI7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLE1BQU07UUFDWixNQUFNLE9BQU8sR0FBRztZQUNaLEdBQUcsSUFBSTtZQUNQLE9BQU8sRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBZ0IsZ0JBQWtHLFNBQVEsdUJBQW9DO0lB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bCwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7RmllbGRUeXBlLCBGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yLCBHZXR0ZXJGbiwgSUVkaXRvckRlc2NyaXB0b3IsIGdldEkxOG5UeXBlUHJvcGVydHlLZXl9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmltcG9ydCB7RmllbGRBc3luY0Jhc2VWYWxpZGF0b3IsIEZpZWxkQXN5bmNWYWxpZGF0b3IsIEZpZWxkQmFzZVZhbGlkYXRvciwgRmllbGRWYWxpZGF0aW9uTWVzc2FnZSwgRmllbGRWYWxpZGF0b3J9IGZyb20gJy4uL21vZGVscy9maWVsZC12YWxpZGF0aW9uLm1vZGVsJztcbmltcG9ydCB7RmllbGRDb25maWcsIEZpZWxkU2l6ZUVudW19IGZyb20gJy4uL21vZGVscy9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0Zvcm1GaWVsZEV2ZW50LCBGb3JtRmllbGRFdmVudERhdGEsIEZvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uL21vZGVscy9mb3JtLWVkaXRvci5ldmVudCc7XG5pbXBvcnQge0NvbW1vbnNGb3JtbHlGaWVsZENvbmZpZywgQ29tbW9uc0Zvcm1seUhvb2tGbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm1seS1maWVsZC5tb2RlbCc7XG5pbXBvcnQge0ZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9lZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPjtcbiAgICBwcm90ZWN0ZWQgX2NvbmZpZzogRmllbGRDb25maWcgPSB7fTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPikge1xuICAgICAgICB0aGlzLl9lZGl0b3IgPSBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb25maWcoY29uZmlnOiBGaWVsZENvbmZpZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRvSlNPTiBpbXBsZW1lbnRhdGlvbiB0byBwcmV2ZW50IG92ZXJmbG93IHdpdGggY2lyY3VsYXIgZGVwZW5kZW5jeS5cbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRvSlNPTigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBqc29uT2JqID0ge1xuICAgICAgICAgICAgLi4udGhpcyxcbiAgICAgICAgICAgIF9lZGl0b3I6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBqc29uT2JqU3RyID0gSlNPTi5zdHJpbmdpZnkoanNvbk9iaik7XG4gICAgICAgIHJldHVybiBqc29uT2JqU3RyO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbCA9IHVuZGVmaW5lZD4gZXh0ZW5kcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2xhYmVsPzogc3RyaW5nIHwgbnVsbDtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9oZWxwVGV4dD86IHN0cmluZztcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfcmVxdWlyZWQgPSBmYWxzZTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3JlcXVpcmVkSGlkZUxhYmVsTWFya2VyID0gZmFsc2U7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZGVmYXVsdFZhbHVlPzogRmllbGRWYWx1ZTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2dldHRlcj86IEdldHRlckZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3NldHRlcj86IChpdGVtOiBFZGl0b3JNb2RlbCwgdmFsdWU6IEZpZWxkVmFsdWUpID0+IHZvaWQ7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF92YWxpZGF0aW9uczogQXJyYXk8RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcjxhbnksIGFueT4+ID0gW107XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9hc3luY1ZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPGFueSwgYW55Pj4gPSBbXTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3JlcXVpcmVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZGlzYWJsZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9oaWRkZW5FeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9oaWRkZW5SZXNldE9uSGlkZT86IGJvb2xlYW47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF91cGRhdGVPbjogJ2NoYW5nZScgfCAnYmx1cicgfCAnc3VibWl0JyA9ICdjaGFuZ2UnO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9vbkluaXQ/OiBDb21tb25zRm9ybWx5SG9va0ZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX29uQ2hhbmdlcz86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfYWZ0ZXJDb250ZW50SW5pdD86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfYWZ0ZXJWaWV3SW5pdD86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfb25EZXN0cm95PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD47XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX29uVmFsdWVDaGFuZ2U/OiAoZmllbGQ6IENvbW1vbnNGb3JtbHlGaWVsZENvbmZpZzxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4sIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2NsYXNzTmFtZSA9ICcnO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZmllbGRDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sYWJlbENsYXNzTmFtZSA9ICcnO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfaW5wdXRDbGFzc05hbWUgPSAnJztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3NpemU6IEZpZWxkU2l6ZUVudW0gPSBGaWVsZFNpemVFbnVtLk5vcm1hbDtcblxuICAgIC8vIGxvY2FsaXphdGlvblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfZXZlbnRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PEZvcm1GaWVsZEV2ZW50PEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4+KCk7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZWRpdG9yOiBJRWRpdG9yRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSBnZXRJMThuVHlwZVByb3BlcnR5S2V5KHRoaXMuX2VkaXRvci5tb2RlbC5pMThuQmFzZUtleSwgcHJvcGVydHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVscFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWxwVGV4dDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZEhpZGVMYWJlbE1hcmtlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkSGlkZUxhYmVsTWFya2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZhbGlkYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhc3luY1ZhbGlkYXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXN5bmNWYWxpZGF0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkRXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkRXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGRlbkV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRkZW5FeHByZXNzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGlkZGVuUmVzZXRPbkhpZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRkZW5SZXNldE9uSGlkZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVwZGF0ZU9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlT247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvbkluaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vbkluaXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvbkNoYW5nZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJDb250ZW50SW5pdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZnRlclZpZXdJbml0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb25EZXN0cm95KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25EZXN0cm95O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb25WYWx1ZUNoYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGFiZWxDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbENsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlucHV0Q2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZVNtYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gRmllbGRTaXplRW51bS5TbWFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZUxhcmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gRmllbGRTaXplRW51bS5MYXJnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFic3RyYWN0IGNvcHkoKTogQUZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgRmllbGRWYWx1ZT47XG5cbiAgICBwdWJsaWMgd2l0aExhYmVsKGxhYmVsOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gbGFiZWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhlbHBUZXh0KGhlbHBUZXh0OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGVscFRleHQgPSBoZWxwVGV4dDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSZXF1aXJlZChyZXF1aXJlZCA9IHRydWUsIHJlcXVpcmVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+LCBoaWRlTGFiZWxNYXJrZXIgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICBpZiAocmVxdWlyZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb24gPSByZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXIgPSBoaWRlTGFiZWxNYXJrZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWQoZGlzYWJsZWQgPSB0cnVlLCBkaXNhYmxlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICBpZiAoZGlzYWJsZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb24gPSBkaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRkZW4oaGlkZGVuRXhwcmVzc2lvbjogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj4sIHJlc2V0T25IaWRlPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9oaWRkZW5FeHByZXNzaW9uID0gaGlkZGVuRXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5faGlkZGVuUmVzZXRPbkhpZGUgPSByZXNldE9uSGlkZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhVcGRhdGVPbih1cGRhdGVPbjogJ2NoYW5nZScgfCAnYmx1cicgfCAnc3VibWl0Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl91cGRhdGVPbiA9IHVwZGF0ZU9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9uSW5pdChvbkluaXQ/OiBDb21tb25zRm9ybWx5SG9va0ZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9vbkluaXQgPSBvbkluaXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT25DaGFuZ2VzKG9uQ2hhbmdlcz86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlcyA9IG9uQ2hhbmdlcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBZnRlckNvbnRlbnRJbml0KGFmdGVyQ29udGVudEluaXQ/OiBDb21tb25zRm9ybWx5SG9va0ZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9hZnRlckNvbnRlbnRJbml0ID0gYWZ0ZXJDb250ZW50SW5pdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBZnRlclZpZXdJbml0KGFmdGVyVmlld0luaXQ/OiBDb21tb25zRm9ybWx5SG9va0ZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9hZnRlclZpZXdJbml0ID0gYWZ0ZXJWaWV3SW5pdDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPbkRlc3Ryb3kob25EZXN0cm95PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95ID0gb25EZXN0cm95O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9uVmFsdWVDaGFuZ2Uob25WYWx1ZUNoYW5nZT86IChmaWVsZDogQ29tbW9uc0Zvcm1seUZpZWxkQ29uZmlnPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPiwgdmFsdWU6IEZpZWxkVmFsdWUpID0+IHZvaWQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb25WYWx1ZUNoYW5nZSA9IG9uVmFsdWVDaGFuZ2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZTogRmllbGRWYWx1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoR2V0dGVyKGZuPzogR2V0dGVyRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2dldHRlciA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNldHRlcihmbj86IChpdGVtOiBFZGl0b3JNb2RlbCwgdmFsdWU6IEZpZWxkVmFsdWUpID0+IHZvaWQpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2V0dGVyID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmFsaWRhdGlvbjxWYWx1ZSA9IEZpZWxkVmFsdWUsIEVkaXRvclZhbHVlID0gRWRpdG9yTW9kZWw+KFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHZhbGlkYXRvcj86IEZpZWxkVmFsaWRhdG9yPFZhbHVlLCBFZGl0b3JWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+LFxuICAgICAgICBtZXNzYWdlPzogRmllbGRWYWxpZGF0aW9uTWVzc2FnZTxWYWx1ZSwgRWRpdG9yVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPlxuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLl92YWxpZGF0aW9ucy5wdXNoKG5ldyBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yKG5hbWUsIHZhbGlkYXRvciBhcyBGaWVsZEJhc2VWYWxpZGF0b3I8VmFsdWUsIEVkaXRvclZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD4sIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVZhbGlkYXRpb24obmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRpb25zID0gdGhpcy5fdmFsaWRhdGlvbnMuZmlsdGVyKHYgPT4gdi5uYW1lICE9PSBuYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBc3luY1ZhbGlkYXRpb248VmFsdWUgPSBGaWVsZFZhbHVlLCBFZGl0b3JWYWx1ZSA9IEVkaXRvck1vZGVsPihcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcj86IEZpZWxkQXN5bmNWYWxpZGF0b3I8VmFsdWUsIEVkaXRvclZhbHVlPixcbiAgICAgICAgbWVzc2FnZT86IEZpZWxkVmFsaWRhdGlvbk1lc3NhZ2U8VmFsdWUsIEVkaXRvclZhbHVlPlxuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRpb25zLnB1c2gobmV3IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3IobmFtZSwgYXN5bmNWYWxpZGF0b3IgYXMgRmllbGRBc3luY0Jhc2VWYWxpZGF0b3I8VmFsdWUsIEVkaXRvclZhbHVlPiwgbWVzc2FnZSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQXN5bmNWYWxpZGF0aW9uKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRpb25zID0gdGhpcy5fYXN5bmNWYWxpZGF0aW9ucy5maWx0ZXIodiA9PiB2Lm5hbWUgIT09IG5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZywgbGFiZWxDbGFzc05hbWUgPSAnJywgaW5wdXRDbGFzc05hbWUgPSAnJywgZmllbGRDbGFzc05hbWU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICB0aGlzLl9sYWJlbENsYXNzTmFtZSA9IGxhYmVsQ2xhc3NOYW1lO1xuICAgICAgICB0aGlzLl9pbnB1dENsYXNzTmFtZSA9IGlucHV0Q2xhc3NOYW1lO1xuICAgICAgICB0aGlzLl9maWVsZENsYXNzTmFtZSA9IGZpZWxkQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNpemUoc2l6ZTogRmllbGRTaXplRW51bSA9IEZpZWxkU2l6ZUVudW0uTm9ybWFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NpemUgPSBzaXplO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGFuIGljb24gd2l0aCB0ZXh0IFNob3cgYWxsIHRyYW5zbGF0aW9ucyBhYm92ZSB0aGUgZmllbGQgYW5kIGFmdGVyIGNsaWNraW5nIG9uIGl0LCBpdCBkaXNwbGF5cyBhIG5ldyBkaWFsb2cgd2l0aCB0YWJsZXZpZXcuXG4gICAgICogVGhpcyBuZXcgdGFibGUgdmlldyBzaG93cyBhbGwgYXZhaWxhYmxlIHRyYW5zbGF0aW9ucyBmb3Igc3BlY2lmaWMgcHJvcGVydHkgYW5kIGFsbG93cyBlZGl0aW5nIGl0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsb2NhbGl6ZWQoKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5lZGl0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgTG9jYWxpemF0aW9uIGNhbm5vdCBiZSBzZXQgZm9yIGZpZWxkICR7dGhpcy5wcm9wZXJ0eX0sIGxvY2FsaXphdGlvbiBtdXN0IGJlIGVuYWJsZWQgb24gZWRpdG9yIGZpcnN0LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG5leHRFdmVudChcbiAgICAgICAgdHlwZTogRm9ybUZpZWxkRXZlbnRUeXBlRW51bSxcbiAgICAgICAgY29tcG9uZW50OiBGaWVsZFR5cGU8Q29tbW9uc0Zvcm1seUZpZWxkQ29uZmlnPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsLCBhbnk+PixcbiAgICAgICAgZGF0YT86IEZvcm1GaWVsZEV2ZW50RGF0YTxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD5cbiAgICApIHtcbiAgICAgICAgdGhpcy5fZXZlbnRzU3ViamVjdC5uZXh0KHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICBmaWVsZENvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgICAgICAgZm9ybUNvbXBvbmVudDogY29tcG9uZW50LnByb3BzLmZvcm1FZGl0b3JDb21wb25lbnQsXG4gICAgICAgICAgICBmb3JtOiBjb21wb25lbnQ/LmZvcm0gYXMgRm9ybUdyb3VwLFxuICAgICAgICAgICAgZmllbGRGb3JtQ29udHJvbDogY29tcG9uZW50LmZvcm1Db250cm9sIGFzIEZvcm1Db250cm9sLFxuICAgICAgICAgICAgZmllbGRGb3JtbHlDb25maWc6IGNvbXBvbmVudC5maWVsZCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBldmVudHMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogQUZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgRmllbGRWYWx1ZT4pIHtcbiAgICAgICAgb2JqLl9sYWJlbCA9IHRoaXMuX2xhYmVsO1xuICAgICAgICBvYmouX3BsYWNlaG9sZGVyID0gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgICAgIG9iai5faGVscFRleHQgPSB0aGlzLl9oZWxwVGV4dDtcbiAgICAgICAgb2JqLl9yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xuICAgICAgICBvYmouX2Rpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XG4gICAgICAgIG9iai5fZGVmYXVsdFZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgICAgICBvYmouX3JlcXVpcmVkRXhwcmVzc2lvbiA9IHRoaXMuX3JlcXVpcmVkRXhwcmVzc2lvbjtcbiAgICAgICAgb2JqLl9oaWRkZW5FeHByZXNzaW9uID0gdGhpcy5faGlkZGVuRXhwcmVzc2lvbjtcbiAgICAgICAgb2JqLl9oaWRkZW5SZXNldE9uSGlkZSA9IHRoaXMuX2hpZGRlblJlc2V0T25IaWRlO1xuICAgICAgICBvYmouX3VwZGF0ZU9uID0gdGhpcy5fdXBkYXRlT247XG4gICAgICAgIG9iai5fb25Jbml0ID0gdGhpcy5fb25Jbml0O1xuICAgICAgICBvYmouX29uQ2hhbmdlcyA9IHRoaXMuX29uQ2hhbmdlcztcbiAgICAgICAgb2JqLl9vbkRlc3Ryb3kgPSB0aGlzLl9vbkRlc3Ryb3k7XG4gICAgICAgIG9iai5fYWZ0ZXJDb250ZW50SW5pdCA9IHRoaXMuX2FmdGVyQ29udGVudEluaXQ7XG4gICAgICAgIG9iai5fYWZ0ZXJWaWV3SW5pdCA9IHRoaXMuX2FmdGVyVmlld0luaXQ7XG4gICAgICAgIG9iai5fb25WYWx1ZUNoYW5nZSA9IHRoaXMuX29uVmFsdWVDaGFuZ2U7XG4gICAgICAgIG9iai5fZGlzYWJsZWRFeHByZXNzaW9uID0gdGhpcy5fZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9zaXplID0gdGhpcy5zaXplO1xuICAgICAgICBvYmouX2dldHRlciA9IHRoaXMuX2dldHRlcjtcbiAgICAgICAgb2JqLl9zZXR0ZXIgPSB0aGlzLl9zZXR0ZXI7XG4gICAgICAgIG9iai5faXNMb2NhbGl6ZWQgPSB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICAgICAgb2JqLl92YWxpZGF0aW9ucyA9IHRoaXMuX3ZhbGlkYXRpb25zLm1hcCh2YWx1ZSA9PiB2YWx1ZS5jb3B5KCkpO1xuICAgICAgICBvYmouX2FzeW5jVmFsaWRhdGlvbnMgPSB0aGlzLl9hc3luY1ZhbGlkYXRpb25zLm1hcCh2YWx1ZSA9PiB2YWx1ZS5jb3B5KCkpO1xuICAgIH1cbn1cbiJdfQ==
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtYmFzZS5kZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvZWRpdG9yL2Rlc2NyaXB0b3JzL2ZpZWxkLWJhc2UuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxvQkFBb0IsRUFBOEIsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RixPQUFPLEVBQWMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHakUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFeEUsTUFBTSxPQUFnQix1QkFBdUI7SUFJekMsWUFBc0IsTUFBc0M7UUFGbEQsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFHaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxVQUFVLENBQUMsTUFBbUI7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLE1BQU07UUFDWixNQUFNLE9BQU8sR0FBRztZQUNaLEdBQUcsSUFBSTtZQUNQLE9BQU8sRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBZ0IsZ0JBQWtHLFNBQVEsdUJBQW9DO0lBd0NoSyxZQUFzQixN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LE9BQU8sQ0FBQztRQUMzQixHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDakMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDL0MsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN6QyxHQUFHLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ25ELEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdEIsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDckMsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGb3JtQ29udHJvbCwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7RmllbGRUeXBlLCBGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yLCBHZXR0ZXJGbiwgSUVkaXRvckRlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmltcG9ydCB7RmllbGRBc3luY0Jhc2VWYWxpZGF0b3IsIEZpZWxkQXN5bmNWYWxpZGF0b3IsIEZpZWxkQmFzZVZhbGlkYXRvciwgRmllbGRWYWxpZGF0aW9uTWVzc2FnZSwgRmllbGRWYWxpZGF0b3J9IGZyb20gJy4uL21vZGVscy9maWVsZC12YWxpZGF0aW9uLm1vZGVsJztcbmltcG9ydCB7RmllbGRDb25maWcsIEZpZWxkU2l6ZUVudW19IGZyb20gJy4uL21vZGVscy9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0Zvcm1GaWVsZEV2ZW50LCBGb3JtRmllbGRFdmVudERhdGEsIEZvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uL21vZGVscy9mb3JtLWVkaXRvci5ldmVudCc7XG5pbXBvcnQge0NvbW1vbnNGb3JtbHlGaWVsZENvbmZpZywgQ29tbW9uc0Zvcm1seUhvb2tGbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm1seS1maWVsZC5tb2RlbCc7XG5pbXBvcnQge0ZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9lZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPjtcbiAgICBwcm90ZWN0ZWQgX2NvbmZpZzogRmllbGRDb25maWcgPSB7fTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPikge1xuICAgICAgICB0aGlzLl9lZGl0b3IgPSBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb25maWcoY29uZmlnOiBGaWVsZENvbmZpZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRvSlNPTiBpbXBsZW1lbnRhdGlvbiB0byBwcmV2ZW50IG92ZXJmbG93IHdpdGggY2lyY3VsYXIgZGVwZW5kZW5jeS5cbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRvSlNPTigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBqc29uT2JqID0ge1xuICAgICAgICAgICAgLi4udGhpcyxcbiAgICAgICAgICAgIF9lZGl0b3I6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBqc29uT2JqU3RyID0gSlNPTi5zdHJpbmdpZnkoanNvbk9iaik7XG4gICAgICAgIHJldHVybiBqc29uT2JqU3RyO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbCA9IHVuZGVmaW5lZD4gZXh0ZW5kcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfcHJvcGVydHk6IHN0cmluZztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2xhYmVsPzogc3RyaW5nIHwgbnVsbDtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9oZWxwVGV4dD86IHN0cmluZztcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfcmVxdWlyZWQgPSBmYWxzZTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3JlcXVpcmVkSGlkZUxhYmVsTWFya2VyID0gZmFsc2U7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZGVmYXVsdFZhbHVlPzogRmllbGRWYWx1ZTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2dldHRlcj86IEdldHRlckZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3NldHRlcj86IChpdGVtOiBFZGl0b3JNb2RlbCwgdmFsdWU6IEZpZWxkVmFsdWUpID0+IHZvaWQ7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF92YWxpZGF0aW9uczogQXJyYXk8RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcjxhbnksIGFueT4+ID0gW107XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9hc3luY1ZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPGFueSwgYW55Pj4gPSBbXTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3JlcXVpcmVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZGlzYWJsZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9oaWRkZW5FeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9oaWRkZW5SZXNldE9uSGlkZT86IGJvb2xlYW47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF91cGRhdGVPbjogJ2NoYW5nZScgfCAnYmx1cicgfCAnc3VibWl0JyA9ICdjaGFuZ2UnO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9vbkluaXQ/OiBDb21tb25zRm9ybWx5SG9va0ZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX29uQ2hhbmdlcz86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfYWZ0ZXJDb250ZW50SW5pdD86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfYWZ0ZXJWaWV3SW5pdD86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfb25EZXN0cm95PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD47XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX29uVmFsdWVDaGFuZ2U/OiAoZmllbGQ6IENvbW1vbnNGb3JtbHlGaWVsZENvbmZpZzxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4sIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2NsYXNzTmFtZSA9ICcnO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZmllbGRDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sYWJlbENsYXNzTmFtZSA9ICcnO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfaW5wdXRDbGFzc05hbWUgPSAnJztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3NpemU6IEZpZWxkU2l6ZUVudW0gPSBGaWVsZFNpemVFbnVtLk5vcm1hbDtcblxuICAgIC8vIGxvY2FsaXphdGlvblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfZXZlbnRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PEZvcm1GaWVsZEV2ZW50PEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbD4+KCk7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZWRpdG9yOiBJRWRpdG9yRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4sIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fcHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhlbHBUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVscFRleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZEhpZGVMYWJlbE1hcmtlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBnZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXN5bmNWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jVmFsaWRhdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRkZW5FeHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGRlblJlc2V0T25IaWRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuUmVzZXRPbkhpZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1cGRhdGVPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb25Jbml0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25Jbml0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb25DaGFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25DaGFuZ2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyQ29udGVudEluaXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhZnRlclZpZXdJbml0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJWaWV3SW5pdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9uRGVzdHJveSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uRGVzdHJveTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9uVmFsdWVDaGFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vblZhbHVlQ2hhbmdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZENsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhYmVsQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbnB1dENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0Q2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NpemVTbWFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEZpZWxkU2l6ZUVudW0uU21hbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NpemVMYXJnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEZpZWxkU2l6ZUVudW0uTGFyZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0xvY2FsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxpemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBjb3B5KCk6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWU+O1xuXG4gICAgcHVibGljIHdpdGhMYWJlbChsYWJlbDogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sYWJlbCA9IGxhYmVsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIZWxwVGV4dChoZWxwVGV4dDogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hlbHBUZXh0ID0gaGVscFRleHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVxdWlyZWQocmVxdWlyZWQgPSB0cnVlLCByZXF1aXJlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPiwgaGlkZUxhYmVsTWFya2VyID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSByZXF1aXJlZDtcbiAgICAgICAgaWYgKHJlcXVpcmVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWlyZWRFeHByZXNzaW9uID0gcmVxdWlyZWRFeHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkSGlkZUxhYmVsTWFya2VyID0gaGlkZUxhYmVsTWFya2VyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERpc2FibGVkKGRpc2FibGVkID0gdHJ1ZSwgZGlzYWJsZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgaWYgKGRpc2FibGVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWRFeHByZXNzaW9uID0gZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSGlkZGVuKGhpZGRlbkV4cHJlc3Npb246IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+LCByZXNldE9uSGlkZT86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGlkZGVuRXhwcmVzc2lvbiA9IGhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuX2hpZGRlblJlc2V0T25IaWRlID0gcmVzZXRPbkhpZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVXBkYXRlT24odXBkYXRlT246ICdjaGFuZ2UnIHwgJ2JsdXInIHwgJ3N1Ym1pdCcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlT24gPSB1cGRhdGVPbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPbkluaXQob25Jbml0PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb25Jbml0ID0gb25Jbml0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9uQ2hhbmdlcyhvbkNoYW5nZXM/OiBDb21tb25zRm9ybWx5SG9va0ZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZXMgPSBvbkNoYW5nZXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWZ0ZXJDb250ZW50SW5pdChhZnRlckNvbnRlbnRJbml0PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJDb250ZW50SW5pdCA9IGFmdGVyQ29udGVudEluaXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWZ0ZXJWaWV3SW5pdChhZnRlclZpZXdJbml0PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCA9IGFmdGVyVmlld0luaXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT25EZXN0cm95KG9uRGVzdHJveT86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSA9IG9uRGVzdHJveTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPblZhbHVlQ2hhbmdlKG9uVmFsdWVDaGFuZ2U/OiAoZmllbGQ6IENvbW1vbnNGb3JtbHlGaWVsZENvbmZpZzxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4sIHZhbHVlOiBGaWVsZFZhbHVlKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2UgPSBvblZhbHVlQ2hhbmdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWU6IEZpZWxkVmFsdWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihmbj86IEdldHRlckZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9nZXR0ZXIgPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXR0ZXIoZm4/OiAoaXRlbTogRWRpdG9yTW9kZWwsIHZhbHVlOiBGaWVsZFZhbHVlKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NldHRlciA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRpb248VmFsdWUgPSBGaWVsZFZhbHVlLCBFZGl0b3JWYWx1ZSA9IEVkaXRvck1vZGVsPihcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICB2YWxpZGF0b3I/OiBGaWVsZFZhbGlkYXRvcjxWYWx1ZSwgRWRpdG9yVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPixcbiAgICAgICAgbWVzc2FnZT86IEZpZWxkVmFsaWRhdGlvbk1lc3NhZ2U8VmFsdWUsIEVkaXRvclZhbHVlLCBQYXJlbnRFZGl0b3JNb2RlbD5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGlvbnMucHVzaChuZXcgRmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcihuYW1lLCB2YWxpZGF0b3IgYXMgRmllbGRCYXNlVmFsaWRhdG9yPFZhbHVlLCBFZGl0b3JWYWx1ZSwgUGFyZW50RWRpdG9yTW9kZWw+LCBtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVWYWxpZGF0aW9uKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl92YWxpZGF0aW9ucyA9IHRoaXMuX3ZhbGlkYXRpb25zLmZpbHRlcih2ID0+IHYubmFtZSAhPT0gbmFtZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQXN5bmNWYWxpZGF0aW9uPFZhbHVlID0gRmllbGRWYWx1ZSwgRWRpdG9yVmFsdWUgPSBFZGl0b3JNb2RlbD4oXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgYXN5bmNWYWxpZGF0b3I/OiBGaWVsZEFzeW5jVmFsaWRhdG9yPFZhbHVlLCBFZGl0b3JWYWx1ZT4sXG4gICAgICAgIG1lc3NhZ2U/OiBGaWVsZFZhbGlkYXRpb25NZXNzYWdlPFZhbHVlLCBFZGl0b3JWYWx1ZT5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0aW9ucy5wdXNoKG5ldyBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yKG5hbWUsIGFzeW5jVmFsaWRhdG9yIGFzIEZpZWxkQXN5bmNCYXNlVmFsaWRhdG9yPFZhbHVlLCBFZGl0b3JWYWx1ZT4sIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUFzeW5jVmFsaWRhdGlvbihuYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0aW9ucyA9IHRoaXMuX2FzeW5jVmFsaWRhdGlvbnMuZmlsdGVyKHYgPT4gdi5uYW1lICE9PSBuYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcsIGxhYmVsQ2xhc3NOYW1lID0gJycsIGlucHV0Q2xhc3NOYW1lID0gJycsIGZpZWxkQ2xhc3NOYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fbGFiZWxDbGFzc05hbWUgPSBsYWJlbENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5faW5wdXRDbGFzc05hbWUgPSBpbnB1dENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fZmllbGRDbGFzc05hbWUgPSBmaWVsZENsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IEZpZWxkU2l6ZUVudW0gPSBGaWVsZFNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYWRkcyBhbiBpY29uIHdpdGggdGV4dCBTaG93IGFsbCB0cmFuc2xhdGlvbnMgYWJvdmUgdGhlIGZpZWxkIGFuZCBhZnRlciBjbGlja2luZyBvbiBpdCwgaXQgZGlzcGxheXMgYSBuZXcgZGlhbG9nIHdpdGggdGFibGV2aWV3LlxuICAgICAqIFRoaXMgbmV3IHRhYmxlIHZpZXcgc2hvd3MgYWxsIGF2YWlsYWJsZSB0cmFuc2xhdGlvbnMgZm9yIHNwZWNpZmljIHByb3BlcnR5IGFuZCBhbGxvd3MgZWRpdGluZyBpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9jYWxpemVkKCk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuZWRpdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYExvY2FsaXphdGlvbiBjYW5ub3QgYmUgc2V0IGZvciBmaWVsZCAke3RoaXMucHJvcGVydHl9LCBsb2NhbGl6YXRpb24gbXVzdCBiZSBlbmFibGVkIG9uIGVkaXRvciBmaXJzdC5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0xvY2FsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0RXZlbnQoXG4gICAgICAgIHR5cGU6IEZvcm1GaWVsZEV2ZW50VHlwZUVudW0sXG4gICAgICAgIGNvbXBvbmVudDogRmllbGRUeXBlPENvbW1vbnNGb3JtbHlGaWVsZENvbmZpZzxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbCwgYW55Pj4sXG4gICAgICAgIGRhdGE/OiBGb3JtRmllbGRFdmVudERhdGE8RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgZmllbGRDb21wb25lbnQ6IGNvbXBvbmVudCxcbiAgICAgICAgICAgIGZvcm1Db21wb25lbnQ6IGNvbXBvbmVudC5wcm9wcy5mb3JtRWRpdG9yQ29tcG9uZW50LFxuICAgICAgICAgICAgZm9ybTogY29tcG9uZW50Py5mb3JtIGFzIEZvcm1Hcm91cCxcbiAgICAgICAgICAgIGZpZWxkRm9ybUNvbnRyb2w6IGNvbXBvbmVudC5mb3JtQ29udHJvbCBhcyBGb3JtQ29udHJvbCxcbiAgICAgICAgICAgIGZpZWxkRm9ybWx5Q29uZmlnOiBjb21wb25lbnQuZmllbGQsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhvYmo6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWU+KSB7XG4gICAgICAgIG9iai5fbGFiZWwgPSB0aGlzLl9sYWJlbDtcbiAgICAgICAgb2JqLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBvYmouX2hlbHBUZXh0ID0gdGhpcy5faGVscFRleHQ7XG4gICAgICAgIG9iai5fcmVxdWlyZWQgPSB0aGlzLl9yZXF1aXJlZDtcbiAgICAgICAgb2JqLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICBvYmouX2RlZmF1bHRWYWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgb2JqLl9yZXF1aXJlZEV4cHJlc3Npb24gPSB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIG9iai5faGlkZGVuRXhwcmVzc2lvbiA9IHRoaXMuX2hpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIG9iai5faGlkZGVuUmVzZXRPbkhpZGUgPSB0aGlzLl9oaWRkZW5SZXNldE9uSGlkZTtcbiAgICAgICAgb2JqLl91cGRhdGVPbiA9IHRoaXMuX3VwZGF0ZU9uO1xuICAgICAgICBvYmouX29uSW5pdCA9IHRoaXMuX29uSW5pdDtcbiAgICAgICAgb2JqLl9vbkNoYW5nZXMgPSB0aGlzLl9vbkNoYW5nZXM7XG4gICAgICAgIG9iai5fb25EZXN0cm95ID0gdGhpcy5fb25EZXN0cm95O1xuICAgICAgICBvYmouX2FmdGVyQ29udGVudEluaXQgPSB0aGlzLl9hZnRlckNvbnRlbnRJbml0O1xuICAgICAgICBvYmouX2FmdGVyVmlld0luaXQgPSB0aGlzLl9hZnRlclZpZXdJbml0O1xuICAgICAgICBvYmouX29uVmFsdWVDaGFuZ2UgPSB0aGlzLl9vblZhbHVlQ2hhbmdlO1xuICAgICAgICBvYmouX2Rpc2FibGVkRXhwcmVzc2lvbiA9IHRoaXMuX2Rpc2FibGVkRXhwcmVzc2lvbjtcbiAgICAgICAgb2JqLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIG9iai5fc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgb2JqLl9nZXR0ZXIgPSB0aGlzLl9nZXR0ZXI7XG4gICAgICAgIG9iai5fc2V0dGVyID0gdGhpcy5fc2V0dGVyO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fdmFsaWRhdGlvbnMgPSB0aGlzLl92YWxpZGF0aW9ucy5tYXAodmFsdWUgPT4gdmFsdWUuY29weSgpKTtcbiAgICAgICAgb2JqLl9hc3luY1ZhbGlkYXRpb25zID0gdGhpcy5fYXN5bmNWYWxpZGF0aW9ucy5tYXAodmFsdWUgPT4gdmFsdWUuY29weSgpKTtcbiAgICB9XG59XG4iXX0=