@techextensor/tab-core-utility 2.2.190 → 2.2.191

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 (73) hide show
  1. package/esm2022/index.mjs +1 -5
  2. package/esm2022/lib/tab-core-utility/app/constants/api-constants.mjs +15 -31
  3. package/esm2022/lib/tab-core-utility/app/constants/common.mjs +50 -14
  4. package/esm2022/lib/tab-core-utility/app/constants/storage-constants.mjs +2 -2
  5. package/esm2022/lib/tab-core-utility/app/crud/tab-crud.service.mjs +54 -41
  6. package/esm2022/lib/tab-core-utility/app/crud/tab-delete.service.mjs +30 -84
  7. package/esm2022/lib/tab-core-utility/app/crud/tab-formio.service.mjs +12 -141
  8. package/esm2022/lib/tab-core-utility/app/crud/tab-get.service.mjs +35 -136
  9. package/esm2022/lib/tab-core-utility/app/crud/tab-insert.service.mjs +38 -89
  10. package/esm2022/lib/tab-core-utility/app/crud/tab-update.service.mjs +129 -159
  11. package/esm2022/lib/tab-core-utility/app/enums/query.enum.mjs +7 -7
  12. package/esm2022/lib/tab-core-utility/app/helpers/common/app.helpers.mjs +19 -26
  13. package/esm2022/lib/tab-core-utility/app/helpers/common/dsq.helpers.mjs +11 -9
  14. package/esm2022/lib/tab-core-utility/app/helpers/common/meta-data.helpers.mjs +13 -13
  15. package/esm2022/lib/tab-core-utility/app/helpers/common/req-res.helpers.mjs +45 -7
  16. package/esm2022/lib/tab-core-utility/app/helpers/common/where-clause.helpers.mjs +76 -79
  17. package/esm2022/lib/tab-core-utility/app/helpers/screen/grid.helpers.mjs +4 -8
  18. package/esm2022/lib/tab-core-utility/app/helpers/screen/screen.helpers.mjs +33 -8
  19. package/esm2022/lib/tab-core-utility/app/interfaces/common.interface.mjs +1 -1
  20. package/esm2022/lib/tab-core-utility/app/models/api-query.class.mjs +1 -39
  21. package/esm2022/lib/tab-core-utility/app/models/app-field.model.mjs +7 -36
  22. package/esm2022/lib/tab-core-utility/app/models/app-object.model.mjs +47 -84
  23. package/esm2022/lib/tab-core-utility/app/models/app-screen.model.mjs +13 -24
  24. package/esm2022/lib/tab-core-utility/app/models/data-source-query.model.mjs +23 -57
  25. package/esm2022/lib/tab-core-utility/app/models/filter.model.mjs +10 -21
  26. package/esm2022/lib/tab-core-utility/app/models/parameter.model.mjs +6 -12
  27. package/esm2022/lib/tab-core-utility/app/models/sort.model.mjs +4 -11
  28. package/esm2022/lib/tab-core-utility/app/utils/json.util.mjs +16 -17
  29. package/esm2022/lib/tab-core-utility/app/utils/req-res.util.mjs +55 -1
  30. package/esm2022/lib/tab-core-utility/app/utils/tab-app.util.mjs +164 -1
  31. package/esm2022/lib/tab-core-utility/core/http-client/api.service.mjs +1 -78
  32. package/index.d.ts +0 -4
  33. package/lib/tab-core-utility/app/constants/api-constants.d.ts +12 -19
  34. package/lib/tab-core-utility/app/constants/common.d.ts +0 -9
  35. package/lib/tab-core-utility/app/constants/storage-constants.d.ts +1 -1
  36. package/lib/tab-core-utility/app/crud/tab-crud.service.d.ts +1 -8
  37. package/lib/tab-core-utility/app/crud/tab-delete.service.d.ts +10 -20
  38. package/lib/tab-core-utility/app/crud/tab-formio.service.d.ts +6 -33
  39. package/lib/tab-core-utility/app/crud/tab-get.service.d.ts +3 -45
  40. package/lib/tab-core-utility/app/crud/tab-insert.service.d.ts +21 -16
  41. package/lib/tab-core-utility/app/crud/tab-update.service.d.ts +19 -34
  42. package/lib/tab-core-utility/app/enums/query.enum.d.ts +6 -3
  43. package/lib/tab-core-utility/app/helpers/common/app.helpers.d.ts +8 -5
  44. package/lib/tab-core-utility/app/helpers/common/dsq.helpers.d.ts +0 -3
  45. package/lib/tab-core-utility/app/helpers/common/meta-data.helpers.d.ts +3 -3
  46. package/lib/tab-core-utility/app/helpers/common/req-res.helpers.d.ts +51 -7
  47. package/lib/tab-core-utility/app/helpers/common/where-clause.helpers.d.ts +0 -1
  48. package/lib/tab-core-utility/app/helpers/screen/grid.helpers.d.ts +1 -2
  49. package/lib/tab-core-utility/app/helpers/screen/screen.helpers.d.ts +0 -1
  50. package/lib/tab-core-utility/app/interfaces/common.interface.d.ts +2 -51
  51. package/lib/tab-core-utility/app/models/api-query.class.d.ts +9 -54
  52. package/lib/tab-core-utility/app/models/app-field.model.d.ts +2 -4
  53. package/lib/tab-core-utility/app/models/app-object.model.d.ts +3 -5
  54. package/lib/tab-core-utility/app/models/app-screen.model.d.ts +2 -2
  55. package/lib/tab-core-utility/app/models/data-source-query.model.d.ts +2 -7
  56. package/lib/tab-core-utility/app/models/filter.model.d.ts +2 -2
  57. package/lib/tab-core-utility/app/models/parameter.model.d.ts +2 -2
  58. package/lib/tab-core-utility/app/models/sort.model.d.ts +1 -1
  59. package/lib/tab-core-utility/app/utils/json.util.d.ts +2 -3
  60. package/lib/tab-core-utility/app/utils/req-res.util.d.ts +9 -1
  61. package/lib/tab-core-utility/app/utils/tab-app.util.d.ts +61 -0
  62. package/lib/tab-core-utility/core/http-client/api.service.d.ts +0 -46
  63. package/package.json +2 -3
  64. package/esm2022/lib/tab-core-utility/app/helpers/response.adapter.mjs +0 -38
  65. package/esm2022/lib/tab-core-utility/app/interfaces/signalr.interface.mjs +0 -42
  66. package/esm2022/lib/tab-core-utility/core/service/signalr/operation-tracker.service.mjs +0 -90
  67. package/esm2022/lib/tab-core-utility/core/service/signalr/signalr-infrastructure.service.mjs +0 -268
  68. package/esm2022/lib/tab-core-utility/core/service/signalr/signalr.service.mjs +0 -207
  69. package/lib/tab-core-utility/app/helpers/response.adapter.d.ts +0 -22
  70. package/lib/tab-core-utility/app/interfaces/signalr.interface.d.ts +0 -84
  71. package/lib/tab-core-utility/core/service/signalr/operation-tracker.service.d.ts +0 -40
  72. package/lib/tab-core-utility/core/service/signalr/signalr-infrastructure.service.d.ts +0 -73
  73. package/lib/tab-core-utility/core/service/signalr/signalr.service.d.ts +0 -122
@@ -4,26 +4,29 @@ import { ApiService } from '../../../core/http-client/api.service';
4
4
  import { QueryType } from '../../enums/query.enum';
5
5
  import { API } from '../../constants/api-constants';
6
6
  import { getHeaders } from '../../utils/req-res.util';
7
- import { MetadataHelper } from './meta-data.helpers';
7
+ import { getAppObjectFromDataSourceQueryID } from '../../utils/tab-app.util';
8
8
  import { AccessPermission } from '../../enums/permission.enum';
9
9
  import * as i0 from "@angular/core";
10
10
  export class DSQHelper {
11
11
  constructor() {
12
12
  this.apiService = inject(ApiService);
13
- this.metadataHelper = inject(MetadataHelper);
14
13
  }
15
14
  /**
16
15
  * Executes a query based on the query type
17
- * NOTE: INSERT, UPDATE, and DELETE now use new /records/* endpoints
18
- * This helper now only handles legacy endpoints: BulkInsert and Select
19
16
  * @param data The data to be executed
20
17
  * @param queryType The type of query to be executed
21
18
  * @returns The result of the query execution
22
19
  */
23
20
  executeQuery(data, queryType, headers) {
24
21
  switch (queryType) {
22
+ case QueryType.Insert:
23
+ return this.execution(data, API.insert, headers);
25
24
  case QueryType.BulkInsert:
26
25
  return this.execution(data, API.bulkInsert, headers);
26
+ case QueryType.Update:
27
+ return this.execution(data, API.update, headers);
28
+ case QueryType.Delete:
29
+ return this.execution(data, API.delete, headers);
27
30
  case QueryType.Select:
28
31
  return this.execution(data, API.select, headers);
29
32
  default:
@@ -48,11 +51,10 @@ export class DSQHelper {
48
51
  * @returns True if the user has access, false otherwise
49
52
  */
50
53
  doesHaveObjectAccess(dsqId, accessType, roles) {
51
- const dsq = this.metadataHelper.getDataSourceQueryByIdOrName(dsqId);
52
- const appObject = dsq?.parentAppObject;
54
+ const appObject = getAppObjectFromDataSourceQueryID(dsqId);
53
55
  if (appObject) {
54
- const accessList = appObject.AccessList?.filter((access) => roles.some((role) => access.RoleID.toLowerCase() === role.ID.toLowerCase() &&
55
- access.IsEnabled)) || [];
56
+ const accessList = appObject.AccessList.filter((access) => roles.some((role) => access.RoleID.toLowerCase() === role.ID.toLowerCase() &&
57
+ access.IsEnabled));
56
58
  return accessList.some((access) => access[accessType] === AccessPermission.All);
57
59
  }
58
60
  return false;
@@ -64,4 +66,4 @@ export class DSQHelper {
64
66
  type: Injectable,
65
67
  args: [{ providedIn: 'root' }]
66
68
  }], null, null); })();
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNxLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL3NyYy9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9jb21tb24vZHNxLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE1BQU0sNkJBQTZCLENBQUM7O0FBRzNFLE1BQU0sT0FBTyxTQUFTO0lBRHRCO1FBRW1CLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7S0ErRDFEO0lBN0RDOzs7Ozs7O09BT0c7SUFDSCxZQUFZLENBQUMsSUFBUyxFQUFFLFNBQW9CLEVBQUUsT0FBYTtRQUN6RCxRQUFRLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssU0FBUyxDQUFDLFVBQVU7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN2RCxLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkQ7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFNBQVMsQ0FBQyxJQUFTLEVBQUUsWUFBb0IsRUFBRSxPQUFhO1FBQzlELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG9CQUFvQixDQUNsQixLQUFhLEVBQ2IsVUFBc0IsRUFDdEIsS0FBdUI7UUFFdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUUsZUFBZSxDQUFDO1FBRXZDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxNQUFNLFVBQVUsR0FBVSxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQ3JFLEtBQUssQ0FBQyxJQUFJLENBQ1IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JELE1BQU0sQ0FBQyxTQUFTLENBQ25CLENBQ0YsSUFBSSxFQUFFLENBQUM7WUFFUixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQ3BCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssZ0JBQWdCLENBQUMsR0FBRyxDQUN4RCxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzswRUFoRVUsU0FBUzt1RUFBVCxTQUFTLFdBQVQsU0FBUyxtQkFESSxNQUFNOztpRkFDbkIsU0FBUztjQURyQixVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2h0dHAtY2xpZW50L2FwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUXVlcnlUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvcXVlcnkuZW51bSc7XHJcbmltcG9ydCB7IEFQSSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9hcGktY29uc3RhbnRzJztcclxuaW1wb3J0IHsgZ2V0SGVhZGVycyB9IGZyb20gJy4uLy4uL3V0aWxzL3JlcS1yZXMudXRpbCc7XHJcbmltcG9ydCB7IE1ldGFkYXRhSGVscGVyIH0gZnJvbSAnLi9tZXRhLWRhdGEuaGVscGVycyc7XHJcbmltcG9ydCB7IEFjY2Vzc1Blcm1pc3Npb24sIEFjY2Vzc1R5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9wZXJtaXNzaW9uLmVudW0nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIERTUUhlbHBlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlTZXJ2aWNlID0gaW5qZWN0KEFwaVNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0YWRhdGFIZWxwZXIgPSBpbmplY3QoTWV0YWRhdGFIZWxwZXIpO1xyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyBhIHF1ZXJ5IGJhc2VkIG9uIHRoZSBxdWVyeSB0eXBlXHJcbiAgICogTk9URTogSU5TRVJULCBVUERBVEUsIGFuZCBERUxFVEUgbm93IHVzZSBuZXcgL3JlY29yZHMvKiBlbmRwb2ludHNcclxuICAgKiBUaGlzIGhlbHBlciBub3cgb25seSBoYW5kbGVzIGxlZ2FjeSBlbmRwb2ludHM6IEJ1bGtJbnNlcnQgYW5kIFNlbGVjdFxyXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGJlIGV4ZWN1dGVkXHJcbiAgICogQHBhcmFtIHF1ZXJ5VHlwZSBUaGUgdHlwZSBvZiBxdWVyeSB0byBiZSBleGVjdXRlZFxyXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIHF1ZXJ5IGV4ZWN1dGlvblxyXG4gICAqL1xyXG4gIGV4ZWN1dGVRdWVyeShkYXRhOiBhbnksIHF1ZXJ5VHlwZTogUXVlcnlUeXBlLCBoZWFkZXJzPzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHF1ZXJ5VHlwZSkge1xyXG4gICAgICBjYXNlIFF1ZXJ5VHlwZS5CdWxrSW5zZXJ0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbihkYXRhLCBBUEkuYnVsa0luc2VydCwgaGVhZGVycyk7XHJcbiAgICAgIGNhc2UgUXVlcnlUeXBlLlNlbGVjdDpcclxuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb24oZGF0YSwgQVBJLnNlbGVjdCwgaGVhZGVycyk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyBhbiBIVFRQIFBPU1QgcmVxdWVzdCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhIGFuZCBVUkxcclxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBiZSBzZW50IGluIHRoZSBQT1NUIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gZW5kUG9pbnROYW1lIFRoZSBVUkwgdG8gc2VuZCB0aGUgUE9TVCByZXF1ZXN0IHRvXHJcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgUE9TVCByZXF1ZXN0IGlmIGhlYWRlcnMgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIG51bGxcclxuICAgKi9cclxuICBwcml2YXRlIGV4ZWN1dGlvbihkYXRhOiBhbnksIGVuZFBvaW50TmFtZTogc3RyaW5nLCBoZWFkZXJzPzogYW55KSB7XHJcbiAgICBjb25zdCBoZWFkZXIgPSBnZXRIZWFkZXJzKGhlYWRlcnMpO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KGVuZFBvaW50TmFtZSwgZGF0YSwgaGVhZGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGJhc2VkIG9uIHJvbGVzIGFuZCBhY2Nlc3MgdHlwZVxyXG4gICAqIEBwYXJhbSBkc3FJZCBUaGUgRGF0YVNvdXJjZVF1ZXJ5IElEIHRvIGNoZWNrIGFjY2VzcyBmb3JcclxuICAgKiBAcGFyYW0gYWNjZXNzVHlwZSBUaGUgdHlwZSBvZiBhY2Nlc3MgdG8gY2hlY2sgKGUuZy4sIHJlYWQsIHdyaXRlKVxyXG4gICAqIEBwYXJhbSByb2xlcyBUaGUgcm9sZXMgb2YgdGhlIHVzZXIgd2l0aCBJRHNcclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB1c2VyIGhhcyBhY2Nlc3MsIGZhbHNlIG90aGVyd2lzZVxyXG4gICAqL1xyXG4gIGRvZXNIYXZlT2JqZWN0QWNjZXNzKFxyXG4gICAgZHNxSWQ6IHN0cmluZyxcclxuICAgIGFjY2Vzc1R5cGU6IEFjY2Vzc1R5cGUsXHJcbiAgICByb2xlczogW3sgSUQ6IHN0cmluZyB9XVxyXG4gICkge1xyXG4gICAgY29uc3QgZHNxID0gdGhpcy5tZXRhZGF0YUhlbHBlci5nZXREYXRhU291cmNlUXVlcnlCeUlkT3JOYW1lKGRzcUlkKTtcclxuICAgIGNvbnN0IGFwcE9iamVjdCA9IGRzcT8ucGFyZW50QXBwT2JqZWN0O1xyXG5cclxuICAgIGlmIChhcHBPYmplY3QpIHtcclxuICAgICAgY29uc3QgYWNjZXNzTGlzdDogYW55W10gPSBhcHBPYmplY3QuQWNjZXNzTGlzdD8uZmlsdGVyKChhY2Nlc3M6IGFueSkgPT5cclxuICAgICAgICByb2xlcy5zb21lKFxyXG4gICAgICAgICAgKHJvbGUpID0+XHJcbiAgICAgICAgICAgIGFjY2Vzcy5Sb2xlSUQudG9Mb3dlckNhc2UoKSA9PT0gcm9sZS5JRC50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICAgIGFjY2Vzcy5Jc0VuYWJsZWRcclxuICAgICAgICApXHJcbiAgICAgICkgfHwgW107XHJcblxyXG4gICAgICByZXR1cm4gYWNjZXNzTGlzdC5zb21lKFxyXG4gICAgICAgIChhY2Nlc3MpID0+IGFjY2Vzc1thY2Nlc3NUeXBlXSA9PT0gQWNjZXNzUGVybWlzc2lvbi5BbGxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNxLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL3NyYy9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9jb21tb24vZHNxLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSw2QkFBNkIsQ0FBQzs7QUFHM0UsTUFBTSxPQUFPLFNBQVM7SUFEdEI7UUFFbUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQWtFbEQ7SUFoRUM7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsSUFBUyxFQUFFLFNBQW9CLEVBQUUsT0FBYTtRQUN6RCxRQUFRLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssU0FBUyxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRCxLQUFLLFNBQVMsQ0FBQyxVQUFVO2dCQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkQsS0FBSyxTQUFTLENBQUMsTUFBTTtnQkFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELEtBQUssU0FBUyxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRCxLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkQ7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFNBQVMsQ0FBQyxJQUFTLEVBQUUsWUFBb0IsRUFBRSxPQUFhO1FBQzlELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILG9CQUFvQixDQUNsQixLQUFhLEVBQ2IsVUFBc0IsRUFDdEIsS0FBdUI7UUFFdkIsTUFBTSxTQUFTLEdBQUcsaUNBQWlDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sVUFBVSxHQUFVLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FDcEUsS0FBSyxDQUFDLElBQUksQ0FDUixDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDckQsTUFBTSxDQUFDLFNBQVMsQ0FDbkIsQ0FDRixDQUFDO1lBRUYsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUNwQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLEdBQUcsQ0FDeEQsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7MEVBbEVVLFNBQVM7dUVBQVQsU0FBUyxXQUFULFNBQVMsbUJBREksTUFBTTs7aUZBQ25CLFNBQVM7Y0FEckIsVUFBVTtlQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9odHRwLWNsaWVudC9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFF1ZXJ5VHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL3F1ZXJ5LmVudW0nO1xyXG5pbXBvcnQgeyBBUEkgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXBpLWNvbnN0YW50cyc7XHJcbmltcG9ydCB7IGdldEhlYWRlcnMgfSBmcm9tICcuLi8uLi91dGlscy9yZXEtcmVzLnV0aWwnO1xyXG5pbXBvcnQgeyBnZXRBcHBPYmplY3RGcm9tRGF0YVNvdXJjZVF1ZXJ5SUQgfSBmcm9tICcuLi8uLi91dGlscy90YWItYXBwLnV0aWwnO1xyXG5pbXBvcnQgeyBBY2Nlc3NQZXJtaXNzaW9uLCBBY2Nlc3NUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvcGVybWlzc2lvbi5lbnVtJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBEU1FIZWxwZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpU2VydmljZSA9IGluamVjdChBcGlTZXJ2aWNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZXMgYSBxdWVyeSBiYXNlZCBvbiB0aGUgcXVlcnkgdHlwZVxyXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIGJlIGV4ZWN1dGVkXHJcbiAgICogQHBhcmFtIHF1ZXJ5VHlwZSBUaGUgdHlwZSBvZiBxdWVyeSB0byBiZSBleGVjdXRlZFxyXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIHF1ZXJ5IGV4ZWN1dGlvblxyXG4gICAqL1xyXG4gIGV4ZWN1dGVRdWVyeShkYXRhOiBhbnksIHF1ZXJ5VHlwZTogUXVlcnlUeXBlLCBoZWFkZXJzPzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHF1ZXJ5VHlwZSkge1xyXG4gICAgICBjYXNlIFF1ZXJ5VHlwZS5JbnNlcnQ6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uKGRhdGEsIEFQSS5pbnNlcnQsIGhlYWRlcnMpO1xyXG4gICAgICBjYXNlIFF1ZXJ5VHlwZS5CdWxrSW5zZXJ0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbihkYXRhLCBBUEkuYnVsa0luc2VydCwgaGVhZGVycyk7XHJcbiAgICAgIGNhc2UgUXVlcnlUeXBlLlVwZGF0ZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb24oZGF0YSwgQVBJLnVwZGF0ZSwgaGVhZGVycyk7XHJcbiAgICAgIGNhc2UgUXVlcnlUeXBlLkRlbGV0ZTpcclxuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb24oZGF0YSwgQVBJLmRlbGV0ZSwgaGVhZGVycyk7XHJcbiAgICAgIGNhc2UgUXVlcnlUeXBlLlNlbGVjdDpcclxuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb24oZGF0YSwgQVBJLnNlbGVjdCwgaGVhZGVycyk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlcyBhbiBIVFRQIFBPU1QgcmVxdWVzdCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhIGFuZCBVUkxcclxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBiZSBzZW50IGluIHRoZSBQT1NUIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gZW5kUG9pbnROYW1lIFRoZSBVUkwgdG8gc2VuZCB0aGUgUE9TVCByZXF1ZXN0IHRvXHJcbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgUE9TVCByZXF1ZXN0IGlmIGhlYWRlcnMgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIG51bGxcclxuICAgKi9cclxuICBwcml2YXRlIGV4ZWN1dGlvbihkYXRhOiBhbnksIGVuZFBvaW50TmFtZTogc3RyaW5nLCBoZWFkZXJzPzogYW55KSB7XHJcbiAgICBjb25zdCBoZWFkZXIgPSBnZXRIZWFkZXJzKGhlYWRlcnMpO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KGVuZFBvaW50TmFtZSwgZGF0YSwgaGVhZGVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiB0aGUgdXNlciBoYXMgYWNjZXNzIHRvIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGJhc2VkIG9uIHJvbGVzIGFuZCBhY2Nlc3MgdHlwZVxyXG4gICAqIEBwYXJhbSBkc3FJZCBUaGUgRGF0YVNvdXJjZVF1ZXJ5IElEIHRvIGNoZWNrIGFjY2VzcyBmb3JcclxuICAgKiBAcGFyYW0gYWNjZXNzVHlwZSBUaGUgdHlwZSBvZiBhY2Nlc3MgdG8gY2hlY2sgKGUuZy4sIHJlYWQsIHdyaXRlKVxyXG4gICAqIEBwYXJhbSByb2xlcyBUaGUgcm9sZXMgb2YgdGhlIHVzZXIgd2l0aCBJRHNcclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB1c2VyIGhhcyBhY2Nlc3MsIGZhbHNlIG90aGVyd2lzZVxyXG4gICAqL1xyXG4gIGRvZXNIYXZlT2JqZWN0QWNjZXNzKFxyXG4gICAgZHNxSWQ6IHN0cmluZyxcclxuICAgIGFjY2Vzc1R5cGU6IEFjY2Vzc1R5cGUsXHJcbiAgICByb2xlczogW3sgSUQ6IHN0cmluZyB9XVxyXG4gICkge1xyXG4gICAgY29uc3QgYXBwT2JqZWN0ID0gZ2V0QXBwT2JqZWN0RnJvbURhdGFTb3VyY2VRdWVyeUlEKGRzcUlkKTtcclxuXHJcbiAgICBpZiAoYXBwT2JqZWN0KSB7XHJcbiAgICAgIGNvbnN0IGFjY2Vzc0xpc3Q6IGFueVtdID0gYXBwT2JqZWN0LkFjY2Vzc0xpc3QuZmlsdGVyKChhY2Nlc3M6IGFueSkgPT5cclxuICAgICAgICByb2xlcy5zb21lKFxyXG4gICAgICAgICAgKHJvbGUpID0+XHJcbiAgICAgICAgICAgIGFjY2Vzcy5Sb2xlSUQudG9Mb3dlckNhc2UoKSA9PT0gcm9sZS5JRC50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICAgIGFjY2Vzcy5Jc0VuYWJsZWRcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gYWNjZXNzTGlzdC5zb21lKFxyXG4gICAgICAgIChhY2Nlc3MpID0+IGFjY2Vzc1thY2Nlc3NUeXBlXSA9PT0gQWNjZXNzUGVybWlzc2lvbi5BbGxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -41,9 +41,9 @@ export class MetadataHelper {
41
41
  * the given condition, it creates a new model using the given model factory and adds it to the map.
42
42
  * @param map The map to search in.
43
43
  * @param key The key to search for.
44
- * @param sourceList The list of raw items to search in.
45
- * @param matchFn The condition to match against raw items.
46
- * @param modelFactory The factory to create a new model from raw item.
44
+ * @param sourceList The list of items to search in.
45
+ * @param matchFn The condition to match.
46
+ * @param modelFactory The factory to create a new model if the key does not exist.
47
47
  * @returns The value associated with the given key, or null if no match is found.
48
48
  */
49
49
  getFromMapOrCreate(map, key, sourceList, matchFn, modelFactory) {
@@ -51,7 +51,7 @@ export class MetadataHelper {
51
51
  return null;
52
52
  if (map.has(key))
53
53
  return map.get(key) || null;
54
- const item = sourceList?.find(matchFn);
54
+ const item = sourceList.find(matchFn);
55
55
  const model = item ? modelFactory(item) : null;
56
56
  map.set(key, model);
57
57
  return model;
@@ -90,7 +90,7 @@ export class MetadataHelper {
90
90
  * @returns The app object if found, or null if not found.
91
91
  */
92
92
  getAppObjectByIdOrName(nameOrId) {
93
- return this.getFromMapOrCreate(this.appObjectMap, nameOrId, Common.tabJson.appObjects, (obj) => obj.appObjectName === nameOrId || obj.appObjectId?.toLowerCase() === nameOrId?.toLowerCase(), (obj) => new AppObjectModel(obj, this));
93
+ return this.getFromMapOrCreate(this.appObjectMap, nameOrId, Common.tabJson.AppObjects, obj => obj.ObjectName === nameOrId || obj.ID?.toLowerCase() === nameOrId?.toLowerCase(), obj => new AppObjectModel(obj, this));
94
94
  }
95
95
  /**
96
96
  * Returns a list of app objects in the metadata.
@@ -100,7 +100,7 @@ export class MetadataHelper {
100
100
  */
101
101
  getAllAppObjects(filterFn, includeSystemData = false) {
102
102
  // Initialize the list of app objects lazily.
103
- const list = this.lazyInitList(this.allAppObjects, val => (this.allAppObjects = val), Common.tabJson.appObjects, this.appObjectMap, (obj) => [obj.appObjectId?.toLowerCase(), obj.appObjectName], obj => new AppObjectModel(obj, this));
103
+ const list = this.lazyInitList(this.allAppObjects, val => (this.allAppObjects = val), Common.tabJson.AppObjects, this.appObjectMap, (obj) => [obj.ID?.toLowerCase(), obj.ObjectName], obj => new AppObjectModel(obj, this));
104
104
  let filteredList = list;
105
105
  if (!includeSystemData) {
106
106
  const currentAppId = this.getCurrentAppId()?.toLowerCase();
@@ -165,7 +165,7 @@ export class MetadataHelper {
165
165
  * @returns {AppScreenModel | null} - The app screen model if found, otherwise null.
166
166
  */
167
167
  getAppScreenByIdOrName(nameOrId) {
168
- return this.getFromMapOrCreate(this.appScreenMap, nameOrId, Common.tabJson.screens, (screen) => screen?.screenId?.toLowerCase() === nameOrId?.toLowerCase() || screen?.screenName === nameOrId, (screen) => new AppScreenModel(screen));
168
+ return this.getFromMapOrCreate(this.appScreenMap, nameOrId, Common.tabJson.AppScreens, screen => screen?.ID?.toLowerCase() === nameOrId?.toLowerCase() || screen?.Name === nameOrId, screen => new AppScreenModel(screen));
169
169
  }
170
170
  /**
171
171
  * Retrieves a list of all app screens.
@@ -176,7 +176,7 @@ export class MetadataHelper {
176
176
  */
177
177
  getAllAppScreens(filterFn) {
178
178
  // Initialize the list of app screens lazily.
179
- const list = this.lazyInitList(this.allAppScreens, val => (this.allAppScreens = val), Common.tabJson.screens, this.appScreenMap, (s) => [s?.screenId?.toLowerCase(), s?.screenName], s => new AppScreenModel(s));
179
+ const list = this.lazyInitList(this.allAppScreens, val => (this.allAppScreens = val), Common.tabJson.AppScreens, this.appScreenMap, (s) => [s?.ID?.toLowerCase(), s?.Name], s => new AppScreenModel(s));
180
180
  // If a filter function is given, apply it to the list of app screens.
181
181
  return filterFn ? list.filter(filterFn) : list;
182
182
  }
@@ -190,9 +190,9 @@ export class MetadataHelper {
190
190
  getOrgInfoByIdOrTenantCode(nameOrTenantCode) {
191
191
  return this.getFromMapOrCreate(this.orgInfoMap, nameOrTenantCode, Common.tabJson.OrgInfos,
192
192
  // Search for the organization info by ID or TenantCode
193
- (org) => org.ID?.toLowerCase() === nameOrTenantCode?.toLowerCase() || org.TenantCode === nameOrTenantCode,
193
+ org => org.ID?.toLowerCase() === nameOrTenantCode?.toLowerCase() || org.TenantCode === nameOrTenantCode,
194
194
  // Create a new OrgInfoModel if the organization info is found
195
- (org) => new OrgInfoModel(org));
195
+ org => new OrgInfoModel(org));
196
196
  }
197
197
  /**
198
198
  * Retrieves a list of all organization info.
@@ -253,9 +253,9 @@ export class MetadataHelper {
253
253
  getAppMenuByIdOrName(nameOrId) {
254
254
  return this.getFromMapOrCreate(this.appMenuMap, nameOrId, Common.tabJson.Menus,
255
255
  // Search for the app menu by ID or name
256
- (menu) => menu?.Id?.toLowerCase() === nameOrId?.toLowerCase() || menu?.MenuName === nameOrId,
256
+ menu => menu?.Id?.toLowerCase() === nameOrId?.toLowerCase() || menu?.MenuName === nameOrId,
257
257
  // Create a new AppMenuModel if the app menu is found
258
- (menu) => new AppMenuModel(menu));
258
+ menu => new AppMenuModel(menu));
259
259
  }
260
260
  /**
261
261
  * Retrieves a list of all app menus.
@@ -298,4 +298,4 @@ export class MetadataHelper {
298
298
  type: Injectable,
299
299
  args: [{ providedIn: 'root' }]
300
300
  }], null, null); })();
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YS1kYXRhLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL3NyYy9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9jb21tb24vbWV0YS1kYXRhLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUcvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFHckUsTUFBTSxPQUFPLGNBQWM7SUFEM0I7UUFFVSxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO1FBQ3hELGtCQUFhLEdBQTRCLElBQUksQ0FBQztRQUU5QyxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO1FBQ3hELGtCQUFhLEdBQTRCLElBQUksQ0FBQztRQUU5QyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFDcEQsZ0JBQVcsR0FBMEIsSUFBSSxDQUFDO1FBRTFDLGVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUNwRCxnQkFBVyxHQUEwQixJQUFJLENBQUM7UUFFakMs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RSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FDekIsQ0FBQztRQUVGLHNFQUFzRTtRQUN0RSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsSUFBSSxDQUFDO1lBQ0gsYUFBYTtZQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFeEIsY0FBYztZQUNkLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRTFCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQzsrRUEvWFUsY0FBYzt1RUFBZCxjQUFjLFdBQWQsY0FBYyxtQkFERCxNQUFNOztpRkFDbkIsY0FBYztjQUQxQixVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy9jb21tb25cIjtcclxuaW1wb3J0IHsgQXBwT2JqZWN0TW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2FwcC1vYmplY3QubW9kZWxcIjtcclxuaW1wb3J0IHsgQXBwRmllbGRNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvYXBwLWZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VRdWVyeU1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9kYXRhLXNvdXJjZS1xdWVyeS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNZXRhZGF0YUVudGl0eVR5cGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9zY2hlbWEuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEFwcFNjcmVlbk1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hcHAtc2NyZWVuLm1vZGVsXCI7XHJcbmltcG9ydCB7IE9yZ0luZm9Nb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvb3JnSW5mby5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBcHBNZW51TW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2FwcC1tZW51Lm1vZGVsXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9hdXRoL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0b3JhZ2VDb25zdGFudHMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL3N0b3JhZ2UtY29uc3RhbnRzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFIZWxwZXIge1xyXG4gIHByaXZhdGUgYXBwT2JqZWN0TWFwID0gbmV3IE1hcDxzdHJpbmcsIEFwcE9iamVjdE1vZGVsIHwgbnVsbD4oKTtcclxuICBwcml2YXRlIGFsbEFwcE9iamVjdHM6IEFwcE9iamVjdE1vZGVsW10gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBhcHBTY3JlZW5NYXAgPSBuZXcgTWFwPHN0cmluZywgQXBwU2NyZWVuTW9kZWwgfCBudWxsPigpO1xyXG4gIHByaXZhdGUgYWxsQXBwU2NyZWVuczogQXBwU2NyZWVuTW9kZWxbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIG9yZ0luZm9NYXAgPSBuZXcgTWFwPHN0cmluZywgT3JnSW5mb01vZGVsIHwgbnVsbD4oKTtcclxuICBwcml2YXRlIGFsbE9yZ0luZm9zOiBPcmdJbmZvTW9kZWxbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGFwcE1lbnVNYXAgPSBuZXcgTWFwPHN0cmluZywgQXBwTWVudU1vZGVsIHwgbnVsbD4oKTtcclxuICBwcml2YXRlIGFsbEFwcE1lbnVzOiBBcHBNZW51TW9kZWxbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KFNlc3Npb25TdG9yYWdlU2VydmljZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhlbHBlciBtZXRob2QgdG8gZ2V0IGN1cnJlbnQgYXBwIElEIGZyb20gc2Vzc2lvblxyXG4gICAqIEByZXR1cm5zIEN1cnJlbnQgYXBwIElEIG9yIG51bGwgaWYgbm90IGF2YWlsYWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0Q3VycmVudEFwcElkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgYXBwSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25TdG9yYWdlKFN0b3JhZ2VDb25zdGFudHMuYXBwSW5mbyk7XHJcbiAgICAgIGNvbnN0IHBhcnNlZEFwcEluZm8gPSBhcHBJbmZvID8gSlNPTi5wYXJzZShhcHBJbmZvKSA6IG51bGw7XHJcbiAgICAgIHJldHVybiBwYXJzZWRBcHBJbmZvPy5JZCB8fCBudWxsO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgYXBwIElEIGZyb20gc2Vzc2lvbjonLCBlcnJvcik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkgZnJvbSB0aGUgZ2l2ZW4gbWFwLlxyXG4gICAqIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCwgYW5kIHRoZSBzb3VyY2UgbGlzdCBjb250YWlucyBhbiBpdGVtIHRoYXQgbWF0Y2hlc1xyXG4gICAqIHRoZSBnaXZlbiBjb25kaXRpb24sIGl0IGNyZWF0ZXMgYSBuZXcgbW9kZWwgdXNpbmcgdGhlIGdpdmVuIG1vZGVsIGZhY3RvcnkgYW5kIGFkZHMgaXQgdG8gdGhlIG1hcC5cclxuICAgKiBAcGFyYW0gbWFwIFRoZSBtYXAgdG8gc2VhcmNoIGluLlxyXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAqIEBwYXJhbSBzb3VyY2VMaXN0IFRoZSBsaXN0IG9mIHJhdyBpdGVtcyB0byBzZWFyY2ggaW4uXHJcbiAgICogQHBhcmFtIG1hdGNoRm4gVGhlIGNvbmRpdGlvbiB0byBtYXRjaCBhZ2FpbnN0IHJhdyBpdGVtcy5cclxuICAgKiBAcGFyYW0gbW9kZWxGYWN0b3J5IFRoZSBmYWN0b3J5IHRvIGNyZWF0ZSBhIG5ldyBtb2RlbCBmcm9tIHJhdyBpdGVtLlxyXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleSwgb3IgbnVsbCBpZiBubyBtYXRjaCBpcyBmb3VuZC5cclxuICAgKi9cclxuICBwcml2YXRlIGdldEZyb21NYXBPckNyZWF0ZTxUUmF3LCBUTW9kZWw+KFxyXG4gICAgbWFwOiBNYXA8c3RyaW5nLCBUTW9kZWwgfCBudWxsPixcclxuICAgIGtleTogc3RyaW5nLFxyXG4gICAgc291cmNlTGlzdDogVFJhd1tdLFxyXG4gICAgbWF0Y2hGbjogKGl0ZW06IFRSYXcpID0+IGJvb2xlYW4sXHJcbiAgICBtb2RlbEZhY3Rvcnk6IChpdGVtOiBUUmF3KSA9PiBUTW9kZWxcclxuICApOiBUTW9kZWwgfCBudWxsIHtcclxuICAgIGlmICgha2V5KSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChtYXAuaGFzKGtleSkpIHJldHVybiBtYXAuZ2V0KGtleSkgfHwgbnVsbDtcclxuXHJcbiAgICBjb25zdCBpdGVtID0gc291cmNlTGlzdD8uZmluZChtYXRjaEZuKTtcclxuICAgIGNvbnN0IG1vZGVsID0gaXRlbSA/IG1vZGVsRmFjdG9yeShpdGVtKSA6IG51bGw7XHJcbiAgICBtYXAuc2V0KGtleSwgbW9kZWwpO1xyXG4gICAgcmV0dXJuIG1vZGVsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGF6aWx5IGluaXRpYWxpemVzIGEgbGlzdCBvZiBtb2RlbHMgZnJvbSBhIHNvdXJjZSBsaXN0LlxyXG4gICAqIEl0IGNyZWF0ZXMgYSBuZXcgbW9kZWwgZm9yIGVhY2ggaXRlbSBpbiB0aGUgc291cmNlIGxpc3QgYW5kIGFkZHMgaXQgdG8gdGhlIGdpdmVuIG1hcC5cclxuICAgKiBJdCBhbHNvIHNldHMgdGhlIGxpc3Qgb2YgbW9kZWxzIHRvIHRoZSBnaXZlbiBzZXR0ZXIuXHJcbiAgICogQHBhcmFtIGxpc3RSZWYgVGhlIHJlZmVyZW5jZSB0byB0aGUgbGlzdCBvZiBtb2RlbHMuXHJcbiAgICogQHBhcmFtIHNldHRlciBUaGUgc2V0dGVyIHRvIHNldCB0aGUgbGlzdCBvZiBtb2RlbHMuXHJcbiAgICogQHBhcmFtIHNvdXJjZUxpc3QgVGhlIHNvdXJjZSBsaXN0IG9mIGl0ZW1zLlxyXG4gICAqIEBwYXJhbSBtYXAgVGhlIG1hcCB0byBzdG9yZSB0aGUgbW9kZWxzLlxyXG4gICAqIEBwYXJhbSBnZXRLZXlzIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgZm9yIHRoZSBnaXZlbiBpdGVtLlxyXG4gICAqIEBwYXJhbSBtb2RlbEZhY3RvcnkgVGhlIGZhY3RvcnkgdG8gY3JlYXRlIGEgbmV3IG1vZGVsIGZvciB0aGUgZ2l2ZW4gaXRlbS5cclxuICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBtb2RlbHMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsYXp5SW5pdExpc3Q8VCwgTT4oXHJcbiAgICBsaXN0UmVmOiBNW10gfCBudWxsLFxyXG4gICAgc2V0dGVyOiAobGlzdDogTVtdKSA9PiB2b2lkLFxyXG4gICAgc291cmNlTGlzdDogVFtdLFxyXG4gICAgbWFwOiBNYXA8c3RyaW5nLCBNIHwgbnVsbD4sXHJcbiAgICBnZXRLZXlzOiAoaXRlbTogVCkgPT4gc3RyaW5nW10sXHJcbiAgICBtb2RlbEZhY3Rvcnk6IChpdGVtOiBUKSA9PiBNXHJcbiAgKTogTVtdIHtcclxuICAgIC8vIElmIHRoZSBsaXN0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIHJldHVybiBpdC5cclxuICAgIGlmIChsaXN0UmVmKSByZXR1cm4gbGlzdFJlZjtcclxuXHJcbiAgICAvLyBDcmVhdGUgYSBuZXcgbW9kZWwgZm9yIGVhY2ggaXRlbSBpbiB0aGUgc291cmNlIGxpc3QgYW5kIGFkZCBpdCB0byB0aGUgbWFwLlxyXG4gICAgY29uc3QgbW9kZWxzID0gc291cmNlTGlzdC5tYXAoKGl0ZW06IFQpID0+IHtcclxuICAgICAgY29uc3QgbW9kZWwgPSBtb2RlbEZhY3RvcnkoaXRlbSk7XHJcbiAgICAgIGdldEtleXMoaXRlbSkuZm9yRWFjaChrZXkgPT4gbWFwLnNldChrZXksIG1vZGVsKSk7XHJcbiAgICAgIHJldHVybiBtb2RlbDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFNldCB0aGUgbGlzdCBvZiBtb2RlbHMgdG8gdGhlIGdpdmVuIHNldHRlci5cclxuICAgIHNldHRlcihtb2RlbHMpO1xyXG5cclxuICAgIC8vIFJldHVybiB0aGUgbGlzdCBvZiBtb2RlbHMuXHJcbiAgICByZXR1cm4gbW9kZWxzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZHMgYW4gYXBwIG9iamVjdCBpbiB0aGUgbWFwIGJ5IGl0cyBuYW1lIG9yIGlkLlxyXG4gICAqIElmIHRoZSBhcHAgb2JqZWN0IGlzIG5vdCBmb3VuZCwgaXQgY3JlYXRlcyBhIG5ldyBvbmUgYW5kIGFkZHMgaXQgdG8gdGhlIG1hcC5cclxuICAgKiBAcGFyYW0gbmFtZU9ySWQgVGhlIG5hbWUgb3IgaWQgb2YgdGhlIGFwcCBvYmplY3QgdG8gZmluZC5cclxuICAgKiBAcmV0dXJucyBUaGUgYXBwIG9iamVjdCBpZiBmb3VuZCwgb3IgbnVsbCBpZiBub3QgZm91bmQuXHJcbiAgICovXHJcbiAgZ2V0QXBwT2JqZWN0QnlJZE9yTmFtZShuYW1lT3JJZDogc3RyaW5nKTogQXBwT2JqZWN0TW9kZWwgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmdldEZyb21NYXBPckNyZWF0ZShcclxuICAgICAgdGhpcy5hcHBPYmplY3RNYXAsXHJcbiAgICAgIG5hbWVPcklkLFxyXG4gICAgICBDb21tb24udGFiSnNvbi5hcHBPYmplY3RzLFxyXG4gICAgICAob2JqOiBhbnkpID0+IG9iai5hcHBPYmplY3ROYW1lID09PSBuYW1lT3JJZCB8fCBvYmouYXBwT2JqZWN0SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5hbWVPcklkPy50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAob2JqOiBhbnkpID0+IG5ldyBBcHBPYmplY3RNb2RlbChvYmosIHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYXBwIG9iamVjdHMgaW4gdGhlIG1ldGFkYXRhLlxyXG4gICAqIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBpdCBpcyBhcHBsaWVkIHRvIGVhY2ggYXBwIG9iamVjdC5cclxuICAgKiBAcGFyYW0gZmlsdGVyRm4gVGhlIGZpbHRlciBmdW5jdGlvbiB0byBhcHBseSB0byB0aGUgYXBwIG9iamVjdHMuXHJcbiAgICogQHJldHVybnMgVGhlIGxpc3Qgb2YgYXBwIG9iamVjdHMuXHJcbiAgICovXHJcbiAgZ2V0QWxsQXBwT2JqZWN0cyhmaWx0ZXJGbj86IChvYmo6IEFwcE9iamVjdE1vZGVsKSA9PiBib29sZWFuLCBpbmNsdWRlU3lzdGVtRGF0YSA9IGZhbHNlKTogQXBwT2JqZWN0TW9kZWxbXSB7XHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBsaXN0IG9mIGFwcCBvYmplY3RzIGxhemlseS5cclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmxhenlJbml0TGlzdChcclxuICAgICAgdGhpcy5hbGxBcHBPYmplY3RzLFxyXG4gICAgICB2YWwgPT4gKHRoaXMuYWxsQXBwT2JqZWN0cyA9IHZhbCksXHJcbiAgICAgIENvbW1vbi50YWJKc29uLmFwcE9iamVjdHMsXHJcbiAgICAgIHRoaXMuYXBwT2JqZWN0TWFwLFxyXG4gICAgICAob2JqOiBhbnkpID0+IFtvYmouYXBwT2JqZWN0SWQ/LnRvTG93ZXJDYXNlKCksIG9iai5hcHBPYmplY3ROYW1lXSxcclxuICAgICAgb2JqID0+IG5ldyBBcHBPYmplY3RNb2RlbChvYmosIHRoaXMpXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmaWx0ZXJlZExpc3Q6IEFwcE9iamVjdE1vZGVsW10gPSBsaXN0O1xyXG4gICAgaWYgKCFpbmNsdWRlU3lzdGVtRGF0YSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50QXBwSWQgPSB0aGlzLmdldEN1cnJlbnRBcHBJZCgpPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBmaWx0ZXJlZExpc3QgPSBsaXN0LmZpbHRlcihvYmogPT5cclxuICAgICAgICAhb2JqLkFwcElkIHx8ICAgICAgICAgICAgICAgICAgICAvLyBHbG9iYWwgZGF0YSAoYXBwID0gbnVsbClcclxuICAgICAgICBvYmouQXBwSWQgPT09IGN1cnJlbnRBcHBJZCAgICAgICAvLyBDdXJyZW50IGFwcCBkYXRhXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgYSBmaWx0ZXIgZnVuY3Rpb24gaXMgZ2l2ZW4sIGFwcGx5IGl0IHRvIHRoZSBsaXN0IG9mIGFwcCBvYmplY3RzLlxyXG4gICAgcmV0dXJuIGZpbHRlckZuID8gZmlsdGVyZWRMaXN0LmZpbHRlcihmaWx0ZXJGbikgOiBmaWx0ZXJlZExpc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBmaWVsZHMgaW4gdGhlIG1ldGFkYXRhLlxyXG4gICAqIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBpdCBpcyBhcHBsaWVkIHRvIGVhY2ggZmllbGQuXHJcbiAgICogQHBhcmFtIGZpbHRlckZuIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gYXBwbHkgdG8gdGhlIGZpZWxkcy5cclxuICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBmaWVsZHMuXHJcbiAgICovXHJcbiAgZ2V0QWxsRmllbGRzKGZpbHRlckZuPzogKGZpZWxkOiBBcHBGaWVsZE1vZGVsKSA9PiBib29sZWFuLCBpbmNsdWRlU3lzdGVtRGF0YSA9IGZhbHNlKTogQXBwRmllbGRNb2RlbFtdIHtcclxuICAgIC8vIEdldCBhIGxpc3Qgb2YgYWxsIGZpZWxkcyBmcm9tIGFsbCBhcHAgb2JqZWN0cy5cclxuICAgIGNvbnN0IGFsbEZpZWxkcyA9IHRoaXMuZ2V0QWxsQXBwT2JqZWN0cyh1bmRlZmluZWQsIGluY2x1ZGVTeXN0ZW1EYXRhKS5mbGF0TWFwKG9iaiA9PiBvYmouZmllbGRzKCkpO1xyXG5cclxuICAgIC8vIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBhcHBseSBpdCB0byB0aGUgbGlzdCBvZiBmaWVsZHMuXHJcbiAgICByZXR1cm4gZmlsdGVyRm4gPyBhbGxGaWVsZHMuZmlsdGVyKGZpbHRlckZuKSA6IGFsbEZpZWxkcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmRzIGEgZmllbGQgYnkgaXRzIElEIGFjcm9zcyBhbGwgYXBwIG9iamVjdHNcclxuICAgKiBAcGFyYW0gZmllbGRJZCBUaGUgSUQgb2YgdGhlIGZpZWxkIHRvIGZpbmRcclxuICAgKiBAcmV0dXJucyBUaGUgZmllbGQgaWYgZm91bmQsIG9yIG51bGwgaWYgbm90IGZvdW5kXHJcbiAgICovXHJcbiAgZ2V0RmllbGRCeUlkT3JOYW1lKG5hbWVPcklkOiBzdHJpbmcpOiBBcHBGaWVsZE1vZGVsIHwgbnVsbCB7XHJcbiAgICBpZiAoIW5hbWVPcklkKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLmdldEFsbEZpZWxkcyhmaWVsZCA9PlxyXG4gICAgICBmaWVsZC5JRD8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZU9ySWQ/LnRvTG93ZXJDYXNlKCkgfHxcclxuICAgICAgZmllbGQuRmllbGROYW1lID09PSBuYW1lT3JJZCxcclxuICAgICAgdHJ1ZVxyXG4gICAgKVswXSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgZGF0YSBzb3VyY2UgcXVlcmllcyBpbiB0aGUgbWV0YWRhdGEuXHJcbiAgICogSWYgYSBmaWx0ZXIgZnVuY3Rpb24gaXMgZ2l2ZW4sIGl0IGlzIGFwcGxpZWQgdG8gZWFjaCBkYXRhIHNvdXJjZSBxdWVyeS5cclxuICAgKiBAcGFyYW0gZmlsdGVyRm4gVGhlIGZpbHRlciBmdW5jdGlvbiB0byBhcHBseSB0byB0aGUgZGF0YSBzb3VyY2UgcXVlcmllcy5cclxuICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBkYXRhIHNvdXJjZSBxdWVyaWVzLlxyXG4gICAqL1xyXG4gIGdldEFsbERhdGFTb3VyY2VRdWVyaWVzKGZpbHRlckZuPzogKGRzcTogRGF0YVNvdXJjZVF1ZXJ5TW9kZWwpID0+IGJvb2xlYW4sIGluY2x1ZGVTeXN0ZW1EYXRhID0gZmFsc2UpOiBEYXRhU291cmNlUXVlcnlNb2RlbFtdIHtcclxuICAgIC8vIEdldCBhIGxpc3Qgb2YgYWxsIGRhdGEgc291cmNlIHF1ZXJpZXMgZnJvbSBhbGwgYXBwIG9iamVjdHMuXHJcbiAgICBjb25zdCBhbGxEU1FzID0gdGhpcy5nZXRBbGxBcHBPYmplY3RzKHVuZGVmaW5lZCwgaW5jbHVkZVN5c3RlbURhdGEpLmZsYXRNYXAob2JqID0+IG9iai5kYXRhU291cmNlUXVlcmllcygpKTtcclxuXHJcbiAgICAvLyBJZiBhIGZpbHRlciBmdW5jdGlvbiBpcyBnaXZlbiwgYXBwbHkgaXQgdG8gdGhlIGxpc3Qgb2YgZGF0YSBzb3VyY2UgcXVlcmllcy5cclxuICAgIHJldHVybiBmaWx0ZXJGbiA/IGFsbERTUXMuZmlsdGVyKGZpbHRlckZuKSA6IGFsbERTUXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBkYXRhIHNvdXJjZSBxdWVyeSBieSBpdHMgSUQsIFF1ZXJ5TmFtZSwgb3IgRGlzcGxheU5hbWUuXHJcbiAgICogU2VhcmNoZXMgdGhyb3VnaCBhbGwgZGF0YSBzb3VyY2UgcXVlcmllcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgbWF0Y2guXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVPcklkIC0gVGhlIElELCBRdWVyeU5hbWUsIG9yIERpc3BsYXlOYW1lIG9mIHRoZSBkYXRhIHNvdXJjZSBxdWVyeSB0byByZXRyaWV2ZS5cclxuICAgKiBAcmV0dXJucyB7RGF0YVNvdXJjZVF1ZXJ5TW9kZWwgfCBudWxsfSAtIFRoZSBkYXRhIHNvdXJjZSBxdWVyeSBtb2RlbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXHJcbiAgICovXHJcbiAgZ2V0RGF0YVNvdXJjZVF1ZXJ5QnlJZE9yTmFtZShuYW1lT3JJZDogc3RyaW5nKTogRGF0YVNvdXJjZVF1ZXJ5TW9kZWwgfCBudWxsIHtcclxuICAgIC8vIFNlYXJjaCBmb3IgdGhlIGRhdGEgc291cmNlIHF1ZXJ5IGJ5IElELCBRdWVyeU5hbWUsIG9yIERpc3BsYXlOYW1lXHJcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxEYXRhU291cmNlUXVlcmllcyh1bmRlZmluZWQsIHRydWUpLmZpbmQoXHJcbiAgICAgIGRzcSA9PiBkc3E/LklEPy50b0xvd2VyQ2FzZSgpID09PSBuYW1lT3JJZD8udG9Mb3dlckNhc2UoKSB8fCBkc3E/LlF1ZXJ5TmFtZSA9PT0gbmFtZU9ySWQgfHwgZHNxPy5EaXNwbGF5TmFtZSA9PT0gbmFtZU9ySWRcclxuICAgICkgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhbiBhcHAgc2NyZWVuIGJ5IGl0cyBJRCwgTmFtZSwgb3IgRGlzcGxheU5hbWUuXHJcbiAgICogU2VhcmNoZXMgdGhyb3VnaCBhbGwgYXBwIHNjcmVlbnMgYW5kIHJldHVybnMgdGhlIGZpcnN0IG1hdGNoLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVPcklkIC0gVGhlIElELCBOYW1lLCBvciBEaXNwbGF5TmFtZSBvZiB0aGUgYXBwIHNjcmVlbiB0byByZXRyaWV2ZS5cclxuICAgKiBAcmV0dXJucyB7QXBwU2NyZWVuTW9kZWwgfCBudWxsfSAtIFRoZSBhcHAgc2NyZWVuIG1vZGVsIGlmIGZvdW5kLCBvdGhlcndpc2UgbnVsbC5cclxuICAgKi9cclxuICBnZXRBcHBTY3JlZW5CeUlkT3JOYW1lKG5hbWVPcklkOiBzdHJpbmcpOiBBcHBTY3JlZW5Nb2RlbCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RnJvbU1hcE9yQ3JlYXRlKFxyXG4gICAgICB0aGlzLmFwcFNjcmVlbk1hcCxcclxuICAgICAgbmFtZU9ySWQsXHJcbiAgICAgIENvbW1vbi50YWJKc29uLnNjcmVlbnMsXHJcbiAgICAgIChzY3JlZW46IGFueSkgPT4gc2NyZWVuPy5zY3JlZW5JZD8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZU9ySWQ/LnRvTG93ZXJDYXNlKCkgfHwgc2NyZWVuPy5zY3JlZW5OYW1lID09PSBuYW1lT3JJZCxcclxuICAgICAgKHNjcmVlbjogYW55KSA9PiBuZXcgQXBwU2NyZWVuTW9kZWwoc2NyZWVuKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxsIGFwcCBzY3JlZW5zLlxyXG4gICAqIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBpdCBpcyBhcHBsaWVkIHRvIHRoZSBsaXN0IG9mIGFwcCBzY3JlZW5zLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZmlsdGVyRm4gLSBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIHRoZSBhcHAgc2NyZWVucy5cclxuICAgKiBAcmV0dXJucyB7QXBwU2NyZWVuTW9kZWxbXX0gLSBUaGUgbGlzdCBvZiBhcHAgc2NyZWVucy5cclxuICAgKi9cclxuICBnZXRBbGxBcHBTY3JlZW5zKGZpbHRlckZuPzogKHNjcmVlbjogQXBwU2NyZWVuTW9kZWwpID0+IGJvb2xlYW4pOiBBcHBTY3JlZW5Nb2RlbFtdIHtcclxuICAgIC8vIEluaXRpYWxpemUgdGhlIGxpc3Qgb2YgYXBwIHNjcmVlbnMgbGF6aWx5LlxyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMubGF6eUluaXRMaXN0KFxyXG4gICAgICB0aGlzLmFsbEFwcFNjcmVlbnMsXHJcbiAgICAgIHZhbCA9PiAodGhpcy5hbGxBcHBTY3JlZW5zID0gdmFsKSxcclxuICAgICAgQ29tbW9uLnRhYkpzb24uc2NyZWVucyxcclxuICAgICAgdGhpcy5hcHBTY3JlZW5NYXAsXHJcbiAgICAgIChzOiBhbnkpID0+IFtzPy5zY3JlZW5JZD8udG9Mb3dlckNhc2UoKSwgcz8uc2NyZWVuTmFtZV0sXHJcbiAgICAgIHMgPT4gbmV3IEFwcFNjcmVlbk1vZGVsKHMpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBhcHBseSBpdCB0byB0aGUgbGlzdCBvZiBhcHAgc2NyZWVucy5cclxuICAgIHJldHVybiBmaWx0ZXJGbiA/IGxpc3QuZmlsdGVyKGZpbHRlckZuKSA6IGxpc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW4gb3JnYW5pemF0aW9uIGluZm8gYnkgaXRzIElEIG9yIFRlbmFudENvZGUuXHJcbiAgICogU2VhcmNoZXMgdGhyb3VnaCBhbGwgb3JnYW5pemF0aW9uIGluZm8gYW5kIHJldHVybnMgdGhlIGZpcnN0IG1hdGNoLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lT3JUZW5hbnRDb2RlIC0gVGhlIElEIG9yIFRlbmFudENvZGUgb2YgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIHRvIHJldHJpZXZlLlxyXG4gICAqIEByZXR1cm5zIHtPcmdJbmZvTW9kZWwgfCBudWxsfSAtIFRoZSBvcmdhbml6YXRpb24gaW5mbyBtb2RlbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXHJcbiAgICovXHJcbiAgZ2V0T3JnSW5mb0J5SWRPclRlbmFudENvZGUobmFtZU9yVGVuYW50Q29kZTogc3RyaW5nKTogT3JnSW5mb01vZGVsIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRGcm9tTWFwT3JDcmVhdGUoXHJcbiAgICAgIHRoaXMub3JnSW5mb01hcCxcclxuICAgICAgbmFtZU9yVGVuYW50Q29kZSxcclxuICAgICAgQ29tbW9uLnRhYkpzb24uT3JnSW5mb3MsXHJcbiAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIGJ5IElEIG9yIFRlbmFudENvZGVcclxuICAgICAgKG9yZzogYW55KSA9PiBvcmcuSUQ/LnRvTG93ZXJDYXNlKCkgPT09IG5hbWVPclRlbmFudENvZGU/LnRvTG93ZXJDYXNlKCkgfHwgb3JnLlRlbmFudENvZGUgPT09IG5hbWVPclRlbmFudENvZGUsXHJcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBPcmdJbmZvTW9kZWwgaWYgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIGlzIGZvdW5kXHJcbiAgICAgIChvcmc6IGFueSkgPT4gbmV3IE9yZ0luZm9Nb2RlbChvcmcpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhbGwgb3JnYW5pemF0aW9uIGluZm8uXHJcbiAgICogSWYgYSBmaWx0ZXIgZnVuY3Rpb24gaXMgZ2l2ZW4sIGl0IGlzIGFwcGxpZWQgdG8gdGhlIGxpc3Qgb2Ygb3JnYW5pemF0aW9uIGluZm8uXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZmlsdGVyRm4gLSBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIHRoZSBvcmdhbml6YXRpb24gaW5mby5cclxuICAgKiBAcmV0dXJucyB7T3JnSW5mb01vZGVsW119IC0gVGhlIGxpc3Qgb2Ygb3JnYW5pemF0aW9uIGluZm8uXHJcbiAgICovXHJcbiAgZ2V0QWxsT3JnSW5mb3MoZmlsdGVyRm4/OiAob3JnOiBPcmdJbmZvTW9kZWwpID0+IGJvb2xlYW4pOiBPcmdJbmZvTW9kZWxbXSB7XHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBsaXN0IG9mIG9yZ2FuaXphdGlvbiBpbmZvIGxhemlseS5cclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmxhenlJbml0TGlzdChcclxuICAgICAgdGhpcy5hbGxPcmdJbmZvcyxcclxuICAgICAgdmFsID0+ICh0aGlzLmFsbE9yZ0luZm9zID0gdmFsKSxcclxuICAgICAgQ29tbW9uLnRhYkpzb24uT3JnSW5mb3MsXHJcbiAgICAgIHRoaXMub3JnSW5mb01hcCxcclxuICAgICAgKG9yZzogYW55KSA9PiBbb3JnPy5JRD8udG9Mb3dlckNhc2UoKSwgb3JnPy5UZW5hbnRDb2RlXSxcclxuICAgICAgb3JnID0+IG5ldyBPcmdJbmZvTW9kZWwob3JnKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBJZiBhIGZpbHRlciBmdW5jdGlvbiBpcyBnaXZlbiwgYXBwbHkgaXQgdG8gdGhlIGxpc3Qgb2Ygb3JnYW5pemF0aW9uIGluZm8uXHJcbiAgICByZXR1cm4gZmlsdGVyRm4gPyBsaXN0LmZpbHRlcihmaWx0ZXJGbikgOiBsaXN0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybXMgYSBnbG9iYWwgc2VhcmNoIGFjcm9zcyBhbGwgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VhcmNoIHRlcm0uXHJcbiAgICogWW91IGNhbiBuYXJyb3cgdGhlIHNlYXJjaCBieSBwcm92aWRpbmcgYSBsaXN0IG9mIGVudGl0eSB0eXBlcyB0byBzZWFyY2ggd2l0aGluLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXJtIC0gVGhlIHNlYXJjaCB0ZXJtIHRvIHNlYXJjaCBmb3IuXHJcbiAgICogQHBhcmFtIHtNZXRhZGF0YUVudGl0eVR5cGVbXX0gZW50aXR5VHlwZXMgLSBUaGUgbGlzdCBvZiBlbnRpdHkgdHlwZXMgdG8gc2VhcmNoIHdpdGhpbi4gSWYgb21pdHRlZCwgYWxsIGVudGl0eSB0eXBlcyBhcmUgc2VhcmNoZWQuXHJcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueVtdPn0gLSBBIGRpY3Rpb25hcnkgd2l0aCByZXN1bHRzIGdyb3VwZWQgYnkgZW50aXR5IHR5cGUuXHJcbiAgICovXHJcbiAgc2VhcmNoTWV0YWRhdGEodGVybTogc3RyaW5nLCBlbnRpdHlUeXBlcz86IE1ldGFkYXRhRW50aXR5VHlwZVtdKTogUmVjb3JkPHN0cmluZywgYW55W10+IHtcclxuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0ZXJtLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGdpdmVuIGVudGl0eSB0eXBlIHNob3VsZCBiZSBzZWFyY2hlZC5cclxuICAgICAqIEBwYXJhbSB7TWV0YWRhdGFFbnRpdHlUeXBlfSB0eXBlIC0gVGhlIGVudGl0eSB0eXBlIHRvIGNoZWNrLlxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgZW50aXR5IHR5cGUgc2hvdWxkIGJlIHNlYXJjaGVkLlxyXG4gICAgICovXHJcbiAgICBjb25zdCBzaG91bGRTZWFyY2ggPSAodHlwZTogTWV0YWRhdGFFbnRpdHlUeXBlKSA9PiAhZW50aXR5VHlwZXMgfHwgZW50aXR5VHlwZXMuaW5jbHVkZXModHlwZSk7XHJcblxyXG4gICAgaWYgKHNob3VsZFNlYXJjaChNZXRhZGF0YUVudGl0eVR5cGUuQVBQX09CSkVDVFMpKSB7XHJcbiAgICAgIC8vIFNlYXJjaCBmb3IgYXBwIG9iamVjdHMgYnkgSUQsIE9iamVjdE5hbWUsIERpc3BsYXlOYW1lLCBvciBTeXN0ZW1EQlRhYmxlTmFtZVxyXG4gICAgICByZXN1bHRbTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9PQkpFQ1RTXSA9IHRoaXMuZ2V0QWxsQXBwT2JqZWN0cyhvYmogPT5cclxuICAgICAgICBbb2JqPy5JRCwgb2JqPy5PYmplY3ROYW1lLCBvYmo/LkRpc3BsYXlOYW1lLCBvYmo/LlN5c3RlbURCVGFibGVOYW1lXVxyXG4gICAgICAgICAgLnNvbWUodmFsID0+IHZhbCA9PT0gc2VhcmNoVGVybSB8fCB2YWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNob3VsZFNlYXJjaChNZXRhZGF0YUVudGl0eVR5cGUuQVBQX0ZJRUxEUykpIHtcclxuICAgICAgLy8gU2VhcmNoIGZvciBhcHAgZmllbGRzIGJ5IHVzaW5nIHRoZSBzZWFyY2ggbWV0aG9kXHJcbiAgICAgIHJlc3VsdFtNZXRhZGF0YUVudGl0eVR5cGUuQVBQX0ZJRUxEU10gPSB0aGlzLmdldEFsbEZpZWxkcyhmaWVsZCA9PiBmaWVsZC5zZWFyY2goc2VhcmNoVGVybSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzaG91bGRTZWFyY2goTWV0YWRhdGFFbnRpdHlUeXBlLkRBVEFfU09VUkNFX1FVRVJJRVMpKSB7XHJcbiAgICAgIC8vIFNlYXJjaCBmb3IgZGF0YSBzb3VyY2UgcXVlcmllcyBieSB1c2luZyB0aGUgc2VhcmNoIG1ldGhvZFxyXG4gICAgICByZXN1bHRbTWV0YWRhdGFFbnRpdHlUeXBlLkRBVEFfU09VUkNFX1FVRVJJRVNdID0gdGhpcy5nZXRBbGxEYXRhU291cmNlUXVlcmllcyhkc3EgPT4gZHNxLnNlYXJjaChzZWFyY2hUZXJtKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNob3VsZFNlYXJjaChNZXRhZGF0YUVudGl0eVR5cGUuQVBQX1NDUkVFTlMpKSB7XHJcbiAgICAgIC8vIFNlYXJjaCBmb3IgYXBwIHNjcmVlbnMgYnkgdXNpbmcgdGhlIHNlYXJjaCBtZXRob2RcclxuICAgICAgcmVzdWx0W01ldGFkYXRhRW50aXR5VHlwZS5BUFBfU0NSRUVOU10gPSB0aGlzLmdldEFsbEFwcFNjcmVlbnMoc2NyZWVuID0+IHNjcmVlbi5zZWFyY2goc2VhcmNoVGVybSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW4gYXBwIG1lbnUgYnkgaXRzIElEIG9yIG5hbWUuXHJcbiAgICogU2VhcmNoZXMgdGhyb3VnaCBhbGwgYXBwIG1lbnVzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBtYXRjaC5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZU9ySWQgLSBUaGUgSUQgb3IgbmFtZSBvZiB0aGUgYXBwIG1lbnUgdG8gcmV0cmlldmUuXHJcbiAgICogQHJldHVybnMge0FwcE1lbnVNb2RlbCB8IG51bGx9IC0gVGhlIGFwcCBtZW51IG1vZGVsIGlmIGZvdW5kLCBvdGhlcndpc2UgbnVsbC5cclxuICAgKi9cclxuICBnZXRBcHBNZW51QnlJZE9yTmFtZShuYW1lT3JJZDogc3RyaW5nKTogQXBwTWVudU1vZGVsIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRGcm9tTWFwT3JDcmVhdGUoXHJcbiAgICAgIHRoaXMuYXBwTWVudU1hcCxcclxuICAgICAgbmFtZU9ySWQsXHJcbiAgICAgIENvbW1vbi50YWJKc29uLk1lbnVzLFxyXG4gICAgICAvLyBTZWFyY2ggZm9yIHRoZSBhcHAgbWVudSBieSBJRCBvciBuYW1lXHJcbiAgICAgIChtZW51OiBhbnkpID0+IG1lbnU/LklkPy50b0xvd2VyQ2FzZSgpID09PSBuYW1lT3JJZD8udG9Mb3dlckNhc2UoKSB8fCBtZW51Py5NZW51TmFtZSA9PT0gbmFtZU9ySWQsXHJcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBBcHBNZW51TW9kZWwgaWYgdGhlIGFwcCBtZW51IGlzIGZvdW5kXHJcbiAgICAgIChtZW51OiBhbnkpID0+IG5ldyBBcHBNZW51TW9kZWwobWVudSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGFsbCBhcHAgbWVudXMuXHJcbiAgICogSWYgYSBmaWx0ZXIgZnVuY3Rpb24gaXMgZ2l2ZW4sIGl0IGlzIGFwcGxpZWQgdG8gdGhlIGxpc3Qgb2YgYXBwIG1lbnVzLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZpbHRlckZuIC0gVGhlIGZpbHRlciBmdW5jdGlvbiB0byBhcHBseSB0byB0aGUgYXBwIG1lbnVzLlxyXG4gICAqIEByZXR1cm5zIHtBcHBNZW51TW9kZWxbXX0gLSBUaGUgbGlzdCBvZiBhcHAgbWVudXMuXHJcbiAgICovXHJcbiAgZ2V0QWxsQXBwTWVudXMoZmlsdGVyRm4/OiAobWVudTogQXBwTWVudU1vZGVsKSA9PiBib29sZWFuKTogQXBwTWVudU1vZGVsW10ge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBhcHAgc2NyZWVucyBsYXppbHkuXHJcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5sYXp5SW5pdExpc3QoXHJcbiAgICAgIHRoaXMuYWxsQXBwTWVudXMsXHJcbiAgICAgIHZhbCA9PiAodGhpcy5hbGxBcHBNZW51cyA9IHZhbCksXHJcbiAgICAgIENvbW1vbi50YWJKc29uLk1lbnVzLFxyXG4gICAgICB0aGlzLmFwcE1lbnVNYXAsXHJcbiAgICAgIChtOiBhbnkpID0+IFttPy5JZD8udG9Mb3dlckNhc2UoKSwgbT8uTmFtZV0sXHJcbiAgICAgIHMgPT4gbmV3IEFwcE1lbnVNb2RlbChzKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBJZiBhIGZpbHRlciBmdW5jdGlvbiBpcyBnaXZlbiwgYXBwbHkgaXQgdG8gdGhlIGxpc3Qgb2YgYXBwIHNjcmVlbnMuXHJcbiAgICByZXR1cm4gZmlsdGVyRm4gPyBsaXN0LmZpbHRlcihmaWx0ZXJGbikgOiBsaXN0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXJzIGFsbCBjYWNoZWQgbWV0YWRhdGEgc2FmZWx5LlxyXG4gICAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbiBjb250ZXh0IGNoYW5nZXMgKGUuZy4sIHdoZW4gYXBwLCBvcmcsIG9yIHNlc3Npb24gY2hhbmdlcykuXHJcbiAgICovXHJcbiAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIENsZWFyIG1hcHNcclxuICAgICAgdGhpcy5hcHBPYmplY3RNYXAuY2xlYXIoKTtcclxuICAgICAgdGhpcy5hcHBTY3JlZW5NYXAuY2xlYXIoKTtcclxuICAgICAgdGhpcy5vcmdJbmZvTWFwLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMuYXBwTWVudU1hcC5jbGVhcigpO1xyXG5cclxuICAgICAgLy8gUmVzZXQgbGlzdHNcclxuICAgICAgdGhpcy5hbGxBcHBPYmplY3RzID0gbnVsbDtcclxuICAgICAgdGhpcy5hbGxBcHBTY3JlZW5zID0gbnVsbDtcclxuICAgICAgdGhpcy5hbGxPcmdJbmZvcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuYWxsQXBwTWVudXMgPSBudWxsO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTWV0YWRhdGFIZWxwZXIgRmFpbGVkIHRvIGNsZWFyIGNhY2hlOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59Il19
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YS1kYXRhLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL3NyYy9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9jb21tb24vbWV0YS1kYXRhLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUcvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFHckUsTUFBTSxPQUFPLGNBQWM7SUFEM0I7UUFFVSxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO1FBQ3hELGtCQUFhLEdBQTRCLElBQUksQ0FBQztRQUU5QyxpQkFBWSxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO1FBQ3hELGtCQUFhLEdBQTRCLElBQUksQ0FBQztRQUU5QyxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFDcEQsZ0JBQVcsR0FBMEIsSUFBSSxDQUFDO1FBRTFDLGVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUNwRCxnQkFBVyxHQUEwQixJQUFJLENBQUM7UUFFakMs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LEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FDekIsQ0FBQztRQUVGLHNFQUFzRTtRQUN0RSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVO1FBQ1IsSUFBSSxDQUFDO1lBQ0gsYUFBYTtZQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFeEIsY0FBYztZQUNkLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRTFCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQzsrRUEvWFUsY0FBYzt1RUFBZCxjQUFjLFdBQWQsY0FBYyxtQkFERCxNQUFNOztpRkFDbkIsY0FBYztjQUQxQixVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy9jb21tb25cIjtcclxuaW1wb3J0IHsgQXBwT2JqZWN0TW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2FwcC1vYmplY3QubW9kZWxcIjtcclxuaW1wb3J0IHsgQXBwRmllbGRNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvYXBwLWZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VRdWVyeU1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9kYXRhLXNvdXJjZS1xdWVyeS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBNZXRhZGF0YUVudGl0eVR5cGUgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9zY2hlbWEuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEFwcFNjcmVlbk1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hcHAtc2NyZWVuLm1vZGVsXCI7XHJcbmltcG9ydCB7IE9yZ0luZm9Nb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvb3JnSW5mby5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBcHBNZW51TW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2FwcC1tZW51Lm1vZGVsXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9hdXRoL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0b3JhZ2VDb25zdGFudHMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL3N0b3JhZ2UtY29uc3RhbnRzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFIZWxwZXIge1xyXG4gIHByaXZhdGUgYXBwT2JqZWN0TWFwID0gbmV3IE1hcDxzdHJpbmcsIEFwcE9iamVjdE1vZGVsIHwgbnVsbD4oKTtcclxuICBwcml2YXRlIGFsbEFwcE9iamVjdHM6IEFwcE9iamVjdE1vZGVsW10gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBhcHBTY3JlZW5NYXAgPSBuZXcgTWFwPHN0cmluZywgQXBwU2NyZWVuTW9kZWwgfCBudWxsPigpO1xyXG4gIHByaXZhdGUgYWxsQXBwU2NyZWVuczogQXBwU2NyZWVuTW9kZWxbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIG9yZ0luZm9NYXAgPSBuZXcgTWFwPHN0cmluZywgT3JnSW5mb01vZGVsIHwgbnVsbD4oKTtcclxuICBwcml2YXRlIGFsbE9yZ0luZm9zOiBPcmdJbmZvTW9kZWxbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGFwcE1lbnVNYXAgPSBuZXcgTWFwPHN0cmluZywgQXBwTWVudU1vZGVsIHwgbnVsbD4oKTtcclxuICBwcml2YXRlIGFsbEFwcE1lbnVzOiBBcHBNZW51TW9kZWxbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KFNlc3Npb25TdG9yYWdlU2VydmljZSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhlbHBlciBtZXRob2QgdG8gZ2V0IGN1cnJlbnQgYXBwIElEIGZyb20gc2Vzc2lvblxyXG4gICAqIEByZXR1cm5zIEN1cnJlbnQgYXBwIElEIG9yIG51bGwgaWYgbm90IGF2YWlsYWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0Q3VycmVudEFwcElkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgYXBwSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25TdG9yYWdlKFN0b3JhZ2VDb25zdGFudHMuYXBwSW5mbyk7XHJcbiAgICAgIGNvbnN0IHBhcnNlZEFwcEluZm8gPSBhcHBJbmZvID8gSlNPTi5wYXJzZShhcHBJbmZvKSA6IG51bGw7XHJcbiAgICAgIHJldHVybiBwYXJzZWRBcHBJbmZvPy5JZCB8fCBudWxsO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgYXBwIElEIGZyb20gc2Vzc2lvbjonLCBlcnJvcik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkgZnJvbSB0aGUgZ2l2ZW4gbWFwLlxyXG4gICAqIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCwgYW5kIHRoZSBzb3VyY2UgbGlzdCBjb250YWlucyBhbiBpdGVtIHRoYXQgbWF0Y2hlc1xyXG4gICAqIHRoZSBnaXZlbiBjb25kaXRpb24sIGl0IGNyZWF0ZXMgYSBuZXcgbW9kZWwgdXNpbmcgdGhlIGdpdmVuIG1vZGVsIGZhY3RvcnkgYW5kIGFkZHMgaXQgdG8gdGhlIG1hcC5cclxuICAgKiBAcGFyYW0gbWFwIFRoZSBtYXAgdG8gc2VhcmNoIGluLlxyXG4gICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxyXG4gICAqIEBwYXJhbSBzb3VyY2VMaXN0IFRoZSBsaXN0IG9mIGl0ZW1zIHRvIHNlYXJjaCBpbi5cclxuICAgKiBAcGFyYW0gbWF0Y2hGbiBUaGUgY29uZGl0aW9uIHRvIG1hdGNoLlxyXG4gICAqIEBwYXJhbSBtb2RlbEZhY3RvcnkgVGhlIGZhY3RvcnkgdG8gY3JlYXRlIGEgbmV3IG1vZGVsIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuXHJcbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LCBvciBudWxsIGlmIG5vIG1hdGNoIGlzIGZvdW5kLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0RnJvbU1hcE9yQ3JlYXRlPFQ+KFxyXG4gICAgbWFwOiBNYXA8c3RyaW5nLCBUIHwgbnVsbD4sXHJcbiAgICBrZXk6IHN0cmluZyxcclxuICAgIHNvdXJjZUxpc3Q6IFRbXSxcclxuICAgIG1hdGNoRm46IChpdGVtOiBUKSA9PiBib29sZWFuLFxyXG4gICAgbW9kZWxGYWN0b3J5OiAoaXRlbTogVCkgPT4gVFxyXG4gICk6IFQgfCBudWxsIHtcclxuICAgIGlmICgha2V5KSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChtYXAuaGFzKGtleSkpIHJldHVybiBtYXAuZ2V0KGtleSkgfHwgbnVsbDtcclxuXHJcbiAgICBjb25zdCBpdGVtID0gc291cmNlTGlzdC5maW5kKG1hdGNoRm4pO1xyXG4gICAgY29uc3QgbW9kZWwgPSBpdGVtID8gbW9kZWxGYWN0b3J5KGl0ZW0pIDogbnVsbDtcclxuICAgIG1hcC5zZXQoa2V5LCBtb2RlbCk7XHJcbiAgICByZXR1cm4gbW9kZWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMYXppbHkgaW5pdGlhbGl6ZXMgYSBsaXN0IG9mIG1vZGVscyBmcm9tIGEgc291cmNlIGxpc3QuXHJcbiAgICogSXQgY3JlYXRlcyBhIG5ldyBtb2RlbCBmb3IgZWFjaCBpdGVtIGluIHRoZSBzb3VyY2UgbGlzdCBhbmQgYWRkcyBpdCB0byB0aGUgZ2l2ZW4gbWFwLlxyXG4gICAqIEl0IGFsc28gc2V0cyB0aGUgbGlzdCBvZiBtb2RlbHMgdG8gdGhlIGdpdmVuIHNldHRlci5cclxuICAgKiBAcGFyYW0gbGlzdFJlZiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBsaXN0IG9mIG1vZGVscy5cclxuICAgKiBAcGFyYW0gc2V0dGVyIFRoZSBzZXR0ZXIgdG8gc2V0IHRoZSBsaXN0IG9mIG1vZGVscy5cclxuICAgKiBAcGFyYW0gc291cmNlTGlzdCBUaGUgc291cmNlIGxpc3Qgb2YgaXRlbXMuXHJcbiAgICogQHBhcmFtIG1hcCBUaGUgbWFwIHRvIHN0b3JlIHRoZSBtb2RlbHMuXHJcbiAgICogQHBhcmFtIGdldEtleXMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBmb3IgdGhlIGdpdmVuIGl0ZW0uXHJcbiAgICogQHBhcmFtIG1vZGVsRmFjdG9yeSBUaGUgZmFjdG9yeSB0byBjcmVhdGUgYSBuZXcgbW9kZWwgZm9yIHRoZSBnaXZlbiBpdGVtLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIG1vZGVscy5cclxuICAgKi9cclxuICBwcml2YXRlIGxhenlJbml0TGlzdDxULCBNPihcclxuICAgIGxpc3RSZWY6IE1bXSB8IG51bGwsXHJcbiAgICBzZXR0ZXI6IChsaXN0OiBNW10pID0+IHZvaWQsXHJcbiAgICBzb3VyY2VMaXN0OiBUW10sXHJcbiAgICBtYXA6IE1hcDxzdHJpbmcsIE0gfCBudWxsPixcclxuICAgIGdldEtleXM6IChpdGVtOiBUKSA9PiBzdHJpbmdbXSxcclxuICAgIG1vZGVsRmFjdG9yeTogKGl0ZW06IFQpID0+IE1cclxuICApOiBNW10ge1xyXG4gICAgLy8gSWYgdGhlIGxpc3QgaXMgYWxyZWFkeSBpbml0aWFsaXplZCwgcmV0dXJuIGl0LlxyXG4gICAgaWYgKGxpc3RSZWYpIHJldHVybiBsaXN0UmVmO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyBtb2RlbCBmb3IgZWFjaCBpdGVtIGluIHRoZSBzb3VyY2UgbGlzdCBhbmQgYWRkIGl0IHRvIHRoZSBtYXAuXHJcbiAgICBjb25zdCBtb2RlbHMgPSBzb3VyY2VMaXN0Lm1hcCgoaXRlbTogVCkgPT4ge1xyXG4gICAgICBjb25zdCBtb2RlbCA9IG1vZGVsRmFjdG9yeShpdGVtKTtcclxuICAgICAgZ2V0S2V5cyhpdGVtKS5mb3JFYWNoKGtleSA9PiBtYXAuc2V0KGtleSwgbW9kZWwpKTtcclxuICAgICAgcmV0dXJuIG1vZGVsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gU2V0IHRoZSBsaXN0IG9mIG1vZGVscyB0byB0aGUgZ2l2ZW4gc2V0dGVyLlxyXG4gICAgc2V0dGVyKG1vZGVscyk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBsaXN0IG9mIG1vZGVscy5cclxuICAgIHJldHVybiBtb2RlbHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5kcyBhbiBhcHAgb2JqZWN0IGluIHRoZSBtYXAgYnkgaXRzIG5hbWUgb3IgaWQuXHJcbiAgICogSWYgdGhlIGFwcCBvYmplY3QgaXMgbm90IGZvdW5kLCBpdCBjcmVhdGVzIGEgbmV3IG9uZSBhbmQgYWRkcyBpdCB0byB0aGUgbWFwLlxyXG4gICAqIEBwYXJhbSBuYW1lT3JJZCBUaGUgbmFtZSBvciBpZCBvZiB0aGUgYXBwIG9iamVjdCB0byBmaW5kLlxyXG4gICAqIEByZXR1cm5zIFRoZSBhcHAgb2JqZWN0IGlmIGZvdW5kLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cclxuICAgKi9cclxuICBnZXRBcHBPYmplY3RCeUlkT3JOYW1lKG5hbWVPcklkOiBzdHJpbmcpOiBBcHBPYmplY3RNb2RlbCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RnJvbU1hcE9yQ3JlYXRlKFxyXG4gICAgICB0aGlzLmFwcE9iamVjdE1hcCxcclxuICAgICAgbmFtZU9ySWQsXHJcbiAgICAgIENvbW1vbi50YWJKc29uLkFwcE9iamVjdHMsXHJcbiAgICAgIG9iaiA9PiBvYmouT2JqZWN0TmFtZSA9PT0gbmFtZU9ySWQgfHwgb2JqLklEPy50b0xvd2VyQ2FzZSgpID09PSBuYW1lT3JJZD8udG9Mb3dlckNhc2UoKSxcclxuICAgICAgb2JqID0+IG5ldyBBcHBPYmplY3RNb2RlbChvYmosIHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYXBwIG9iamVjdHMgaW4gdGhlIG1ldGFkYXRhLlxyXG4gICAqIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBpdCBpcyBhcHBsaWVkIHRvIGVhY2ggYXBwIG9iamVjdC5cclxuICAgKiBAcGFyYW0gZmlsdGVyRm4gVGhlIGZpbHRlciBmdW5jdGlvbiB0byBhcHBseSB0byB0aGUgYXBwIG9iamVjdHMuXHJcbiAgICogQHJldHVybnMgVGhlIGxpc3Qgb2YgYXBwIG9iamVjdHMuXHJcbiAgICovXHJcbiAgZ2V0QWxsQXBwT2JqZWN0cyhmaWx0ZXJGbj86IChvYmo6IEFwcE9iamVjdE1vZGVsKSA9PiBib29sZWFuLCBpbmNsdWRlU3lzdGVtRGF0YSA9IGZhbHNlKTogQXBwT2JqZWN0TW9kZWxbXSB7XHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBsaXN0IG9mIGFwcCBvYmplY3RzIGxhemlseS5cclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmxhenlJbml0TGlzdChcclxuICAgICAgdGhpcy5hbGxBcHBPYmplY3RzLFxyXG4gICAgICB2YWwgPT4gKHRoaXMuYWxsQXBwT2JqZWN0cyA9IHZhbCksXHJcbiAgICAgIENvbW1vbi50YWJKc29uLkFwcE9iamVjdHMsXHJcbiAgICAgIHRoaXMuYXBwT2JqZWN0TWFwLFxyXG4gICAgICAob2JqOiBhbnkpID0+IFtvYmouSUQ/LnRvTG93ZXJDYXNlKCksIG9iai5PYmplY3ROYW1lXSxcclxuICAgICAgb2JqID0+IG5ldyBBcHBPYmplY3RNb2RlbChvYmosIHRoaXMpXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmaWx0ZXJlZExpc3Q6IEFwcE9iamVjdE1vZGVsW10gPSBsaXN0O1xyXG4gICAgaWYgKCFpbmNsdWRlU3lzdGVtRGF0YSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50QXBwSWQgPSB0aGlzLmdldEN1cnJlbnRBcHBJZCgpPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBmaWx0ZXJlZExpc3QgPSBsaXN0LmZpbHRlcihvYmogPT5cclxuICAgICAgICAhb2JqLkFwcElkIHx8ICAgICAgICAgICAgICAgICAgICAvLyBHbG9iYWwgZGF0YSAoYXBwID0gbnVsbClcclxuICAgICAgICBvYmouQXBwSWQgPT09IGN1cnJlbnRBcHBJZCAgICAgICAvLyBDdXJyZW50IGFwcCBkYXRhXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgYSBmaWx0ZXIgZnVuY3Rpb24gaXMgZ2l2ZW4sIGFwcGx5IGl0IHRvIHRoZSBsaXN0IG9mIGFwcCBvYmplY3RzLlxyXG4gICAgcmV0dXJuIGZpbHRlckZuID8gZmlsdGVyZWRMaXN0LmZpbHRlcihmaWx0ZXJGbikgOiBmaWx0ZXJlZExpc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBmaWVsZHMgaW4gdGhlIG1ldGFkYXRhLlxyXG4gICAqIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBpdCBpcyBhcHBsaWVkIHRvIGVhY2ggZmllbGQuXHJcbiAgICogQHBhcmFtIGZpbHRlckZuIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gYXBwbHkgdG8gdGhlIGZpZWxkcy5cclxuICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBmaWVsZHMuXHJcbiAgICovXHJcbiAgZ2V0QWxsRmllbGRzKGZpbHRlckZuPzogKGZpZWxkOiBBcHBGaWVsZE1vZGVsKSA9PiBib29sZWFuLCBpbmNsdWRlU3lzdGVtRGF0YSA9IGZhbHNlKTogQXBwRmllbGRNb2RlbFtdIHtcclxuICAgIC8vIEdldCBhIGxpc3Qgb2YgYWxsIGZpZWxkcyBmcm9tIGFsbCBhcHAgb2JqZWN0cy5cclxuICAgIGNvbnN0IGFsbEZpZWxkcyA9IHRoaXMuZ2V0QWxsQXBwT2JqZWN0cyh1bmRlZmluZWQsIGluY2x1ZGVTeXN0ZW1EYXRhKS5mbGF0TWFwKG9iaiA9PiBvYmouZmllbGRzKCkpO1xyXG5cclxuICAgIC8vIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBhcHBseSBpdCB0byB0aGUgbGlzdCBvZiBmaWVsZHMuXHJcbiAgICByZXR1cm4gZmlsdGVyRm4gPyBhbGxGaWVsZHMuZmlsdGVyKGZpbHRlckZuKSA6IGFsbEZpZWxkcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmRzIGEgZmllbGQgYnkgaXRzIElEIGFjcm9zcyBhbGwgYXBwIG9iamVjdHNcclxuICAgKiBAcGFyYW0gZmllbGRJZCBUaGUgSUQgb2YgdGhlIGZpZWxkIHRvIGZpbmRcclxuICAgKiBAcmV0dXJucyBUaGUgZmllbGQgaWYgZm91bmQsIG9yIG51bGwgaWYgbm90IGZvdW5kXHJcbiAgICovXHJcbiAgZ2V0RmllbGRCeUlkT3JOYW1lKG5hbWVPcklkOiBzdHJpbmcpOiBBcHBGaWVsZE1vZGVsIHwgbnVsbCB7XHJcbiAgICBpZiAoIW5hbWVPcklkKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLmdldEFsbEZpZWxkcyhmaWVsZCA9PlxyXG4gICAgICBmaWVsZC5JRD8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZU9ySWQ/LnRvTG93ZXJDYXNlKCkgfHxcclxuICAgICAgZmllbGQuRmllbGROYW1lID09PSBuYW1lT3JJZCxcclxuICAgICAgdHJ1ZVxyXG4gICAgKVswXSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgZGF0YSBzb3VyY2UgcXVlcmllcyBpbiB0aGUgbWV0YWRhdGEuXHJcbiAgICogSWYgYSBmaWx0ZXIgZnVuY3Rpb24gaXMgZ2l2ZW4sIGl0IGlzIGFwcGxpZWQgdG8gZWFjaCBkYXRhIHNvdXJjZSBxdWVyeS5cclxuICAgKiBAcGFyYW0gZmlsdGVyRm4gVGhlIGZpbHRlciBmdW5jdGlvbiB0byBhcHBseSB0byB0aGUgZGF0YSBzb3VyY2UgcXVlcmllcy5cclxuICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBkYXRhIHNvdXJjZSBxdWVyaWVzLlxyXG4gICAqL1xyXG4gIGdldEFsbERhdGFTb3VyY2VRdWVyaWVzKGZpbHRlckZuPzogKGRzcTogRGF0YVNvdXJjZVF1ZXJ5TW9kZWwpID0+IGJvb2xlYW4sIGluY2x1ZGVTeXN0ZW1EYXRhID0gZmFsc2UpOiBEYXRhU291cmNlUXVlcnlNb2RlbFtdIHtcclxuICAgIC8vIEdldCBhIGxpc3Qgb2YgYWxsIGRhdGEgc291cmNlIHF1ZXJpZXMgZnJvbSBhbGwgYXBwIG9iamVjdHMuXHJcbiAgICBjb25zdCBhbGxEU1FzID0gdGhpcy5nZXRBbGxBcHBPYmplY3RzKHVuZGVmaW5lZCwgaW5jbHVkZVN5c3RlbURhdGEpLmZsYXRNYXAob2JqID0+IG9iai5kYXRhU291cmNlUXVlcmllcygpKTtcclxuXHJcbiAgICAvLyBJZiBhIGZpbHRlciBmdW5jdGlvbiBpcyBnaXZlbiwgYXBwbHkgaXQgdG8gdGhlIGxpc3Qgb2YgZGF0YSBzb3VyY2UgcXVlcmllcy5cclxuICAgIHJldHVybiBmaWx0ZXJGbiA/IGFsbERTUXMuZmlsdGVyKGZpbHRlckZuKSA6IGFsbERTUXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBkYXRhIHNvdXJjZSBxdWVyeSBieSBpdHMgSUQsIFF1ZXJ5TmFtZSwgb3IgRGlzcGxheU5hbWUuXHJcbiAgICogU2VhcmNoZXMgdGhyb3VnaCBhbGwgZGF0YSBzb3VyY2UgcXVlcmllcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgbWF0Y2guXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVPcklkIC0gVGhlIElELCBRdWVyeU5hbWUsIG9yIERpc3BsYXlOYW1lIG9mIHRoZSBkYXRhIHNvdXJjZSBxdWVyeSB0byByZXRyaWV2ZS5cclxuICAgKiBAcmV0dXJucyB7RGF0YVNvdXJjZVF1ZXJ5TW9kZWwgfCBudWxsfSAtIFRoZSBkYXRhIHNvdXJjZSBxdWVyeSBtb2RlbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXHJcbiAgICovXHJcbiAgZ2V0RGF0YVNvdXJjZVF1ZXJ5QnlJZE9yTmFtZShuYW1lT3JJZDogc3RyaW5nKTogRGF0YVNvdXJjZVF1ZXJ5TW9kZWwgfCBudWxsIHtcclxuICAgIC8vIFNlYXJjaCBmb3IgdGhlIGRhdGEgc291cmNlIHF1ZXJ5IGJ5IElELCBRdWVyeU5hbWUsIG9yIERpc3BsYXlOYW1lXHJcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxEYXRhU291cmNlUXVlcmllcyh1bmRlZmluZWQsIHRydWUpLmZpbmQoXHJcbiAgICAgIGRzcSA9PiBkc3E/LklEPy50b0xvd2VyQ2FzZSgpID09PSBuYW1lT3JJZD8udG9Mb3dlckNhc2UoKSB8fCBkc3E/LlF1ZXJ5TmFtZSA9PT0gbmFtZU9ySWQgfHwgZHNxPy5EaXNwbGF5TmFtZSA9PT0gbmFtZU9ySWRcclxuICAgICkgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhbiBhcHAgc2NyZWVuIGJ5IGl0cyBJRCwgTmFtZSwgb3IgRGlzcGxheU5hbWUuXHJcbiAgICogU2VhcmNoZXMgdGhyb3VnaCBhbGwgYXBwIHNjcmVlbnMgYW5kIHJldHVybnMgdGhlIGZpcnN0IG1hdGNoLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lT3JJZCAtIFRoZSBJRCwgTmFtZSwgb3IgRGlzcGxheU5hbWUgb2YgdGhlIGFwcCBzY3JlZW4gdG8gcmV0cmlldmUuXHJcbiAgICogQHJldHVybnMge0FwcFNjcmVlbk1vZGVsIHwgbnVsbH0gLSBUaGUgYXBwIHNjcmVlbiBtb2RlbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXHJcbiAgICovXHJcbiAgZ2V0QXBwU2NyZWVuQnlJZE9yTmFtZShuYW1lT3JJZDogc3RyaW5nKTogQXBwU2NyZWVuTW9kZWwgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmdldEZyb21NYXBPckNyZWF0ZShcclxuICAgICAgdGhpcy5hcHBTY3JlZW5NYXAsXHJcbiAgICAgIG5hbWVPcklkLFxyXG4gICAgICBDb21tb24udGFiSnNvbi5BcHBTY3JlZW5zLFxyXG4gICAgICBzY3JlZW4gPT4gc2NyZWVuPy5JRD8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZU9ySWQ/LnRvTG93ZXJDYXNlKCkgfHwgc2NyZWVuPy5OYW1lID09PSBuYW1lT3JJZCxcclxuICAgICAgc2NyZWVuID0+IG5ldyBBcHBTY3JlZW5Nb2RlbChzY3JlZW4pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhbGwgYXBwIHNjcmVlbnMuXHJcbiAgICogSWYgYSBmaWx0ZXIgZnVuY3Rpb24gaXMgZ2l2ZW4sIGl0IGlzIGFwcGxpZWQgdG8gdGhlIGxpc3Qgb2YgYXBwIHNjcmVlbnMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZmlsdGVyRm4gLSBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIHRoZSBhcHAgc2NyZWVucy5cclxuICAgKiBAcmV0dXJucyB7QXBwU2NyZWVuTW9kZWxbXX0gLSBUaGUgbGlzdCBvZiBhcHAgc2NyZWVucy5cclxuICAgKi9cclxuICBnZXRBbGxBcHBTY3JlZW5zKGZpbHRlckZuPzogKHNjcmVlbjogQXBwU2NyZWVuTW9kZWwpID0+IGJvb2xlYW4pOiBBcHBTY3JlZW5Nb2RlbFtdIHtcclxuICAgIC8vIEluaXRpYWxpemUgdGhlIGxpc3Qgb2YgYXBwIHNjcmVlbnMgbGF6aWx5LlxyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMubGF6eUluaXRMaXN0KFxyXG4gICAgICB0aGlzLmFsbEFwcFNjcmVlbnMsXHJcbiAgICAgIHZhbCA9PiAodGhpcy5hbGxBcHBTY3JlZW5zID0gdmFsKSxcclxuICAgICAgQ29tbW9uLnRhYkpzb24uQXBwU2NyZWVucyxcclxuICAgICAgdGhpcy5hcHBTY3JlZW5NYXAsXHJcbiAgICAgIChzOiBhbnkpID0+IFtzPy5JRD8udG9Mb3dlckNhc2UoKSwgcz8uTmFtZV0sXHJcbiAgICAgIHMgPT4gbmV3IEFwcFNjcmVlbk1vZGVsKHMpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBhcHBseSBpdCB0byB0aGUgbGlzdCBvZiBhcHAgc2NyZWVucy5cclxuICAgIHJldHVybiBmaWx0ZXJGbiA/IGxpc3QuZmlsdGVyKGZpbHRlckZuKSA6IGxpc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW4gb3JnYW5pemF0aW9uIGluZm8gYnkgaXRzIElEIG9yIFRlbmFudENvZGUuXHJcbiAgICogU2VhcmNoZXMgdGhyb3VnaCBhbGwgb3JnYW5pemF0aW9uIGluZm8gYW5kIHJldHVybnMgdGhlIGZpcnN0IG1hdGNoLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lT3JUZW5hbnRDb2RlIC0gVGhlIElEIG9yIFRlbmFudENvZGUgb2YgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIHRvIHJldHJpZXZlLlxyXG4gICAqIEByZXR1cm5zIHtPcmdJbmZvTW9kZWwgfCBudWxsfSAtIFRoZSBvcmdhbml6YXRpb24gaW5mbyBtb2RlbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXHJcbiAgICovXHJcbiAgZ2V0T3JnSW5mb0J5SWRPclRlbmFudENvZGUobmFtZU9yVGVuYW50Q29kZTogc3RyaW5nKTogT3JnSW5mb01vZGVsIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRGcm9tTWFwT3JDcmVhdGUoXHJcbiAgICAgIHRoaXMub3JnSW5mb01hcCxcclxuICAgICAgbmFtZU9yVGVuYW50Q29kZSxcclxuICAgICAgQ29tbW9uLnRhYkpzb24uT3JnSW5mb3MsXHJcbiAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIGJ5IElEIG9yIFRlbmFudENvZGVcclxuICAgICAgb3JnID0+IG9yZy5JRD8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZU9yVGVuYW50Q29kZT8udG9Mb3dlckNhc2UoKSB8fCBvcmcuVGVuYW50Q29kZSA9PT0gbmFtZU9yVGVuYW50Q29kZSxcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IE9yZ0luZm9Nb2RlbCBpZiB0aGUgb3JnYW5pemF0aW9uIGluZm8gaXMgZm91bmRcclxuICAgICAgb3JnID0+IG5ldyBPcmdJbmZvTW9kZWwob3JnKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxsIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAqIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBpdCBpcyBhcHBsaWVkIHRvIHRoZSBsaXN0IG9mIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZpbHRlckZuIC0gVGhlIGZpbHRlciBmdW5jdGlvbiB0byBhcHBseSB0byB0aGUgb3JnYW5pemF0aW9uIGluZm8uXHJcbiAgICogQHJldHVybnMge09yZ0luZm9Nb2RlbFtdfSAtIFRoZSBsaXN0IG9mIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAqL1xyXG4gIGdldEFsbE9yZ0luZm9zKGZpbHRlckZuPzogKG9yZzogT3JnSW5mb01vZGVsKSA9PiBib29sZWFuKTogT3JnSW5mb01vZGVsW10ge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBvcmdhbml6YXRpb24gaW5mbyBsYXppbHkuXHJcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5sYXp5SW5pdExpc3QoXHJcbiAgICAgIHRoaXMuYWxsT3JnSW5mb3MsXHJcbiAgICAgIHZhbCA9PiAodGhpcy5hbGxPcmdJbmZvcyA9IHZhbCksXHJcbiAgICAgIENvbW1vbi50YWJKc29uLk9yZ0luZm9zLFxyXG4gICAgICB0aGlzLm9yZ0luZm9NYXAsXHJcbiAgICAgIChvcmc6IGFueSkgPT4gW29yZz8uSUQ/LnRvTG93ZXJDYXNlKCksIG9yZz8uVGVuYW50Q29kZV0sXHJcbiAgICAgIG9yZyA9PiBuZXcgT3JnSW5mb01vZGVsKG9yZylcclxuICAgICk7XHJcblxyXG4gICAgLy8gSWYgYSBmaWx0ZXIgZnVuY3Rpb24gaXMgZ2l2ZW4sIGFwcGx5IGl0IHRvIHRoZSBsaXN0IG9mIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAgcmV0dXJuIGZpbHRlckZuID8gbGlzdC5maWx0ZXIoZmlsdGVyRm4pIDogbGlzdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm1zIGEgZ2xvYmFsIHNlYXJjaCBhY3Jvc3MgYWxsIG1ldGFkYXRhIGZvciBhIGdpdmVuIHNlYXJjaCB0ZXJtLlxyXG4gICAqIFlvdSBjYW4gbmFycm93IHRoZSBzZWFyY2ggYnkgcHJvdmlkaW5nIGEgbGlzdCBvZiBlbnRpdHkgdHlwZXMgdG8gc2VhcmNoIHdpdGhpbi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVybSAtIFRoZSBzZWFyY2ggdGVybSB0byBzZWFyY2ggZm9yLlxyXG4gICAqIEBwYXJhbSB7TWV0YWRhdGFFbnRpdHlUeXBlW119IGVudGl0eVR5cGVzIC0gVGhlIGxpc3Qgb2YgZW50aXR5IHR5cGVzIHRvIHNlYXJjaCB3aXRoaW4uIElmIG9taXR0ZWQsIGFsbCBlbnRpdHkgdHlwZXMgYXJlIHNlYXJjaGVkLlxyXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnlbXT59IC0gQSBkaWN0aW9uYXJ5IHdpdGggcmVzdWx0cyBncm91cGVkIGJ5IGVudGl0eSB0eXBlLlxyXG4gICAqL1xyXG4gIHNlYXJjaE1ldGFkYXRhKHRlcm06IHN0cmluZywgZW50aXR5VHlwZXM/OiBNZXRhZGF0YUVudGl0eVR5cGVbXSk6IFJlY29yZDxzdHJpbmcsIGFueVtdPiB7XHJcbiAgICBjb25zdCBzZWFyY2hUZXJtID0gdGVybS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSBnaXZlbiBlbnRpdHkgdHlwZSBzaG91bGQgYmUgc2VhcmNoZWQuXHJcbiAgICAgKiBAcGFyYW0ge01ldGFkYXRhRW50aXR5VHlwZX0gdHlwZSAtIFRoZSBlbnRpdHkgdHlwZSB0byBjaGVjay5cclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGVudGl0eSB0eXBlIHNob3VsZCBiZSBzZWFyY2hlZC5cclxuICAgICAqL1xyXG4gICAgY29uc3Qgc2hvdWxkU2VhcmNoID0gKHR5cGU6IE1ldGFkYXRhRW50aXR5VHlwZSkgPT4gIWVudGl0eVR5cGVzIHx8IGVudGl0eVR5cGVzLmluY2x1ZGVzKHR5cGUpO1xyXG5cclxuICAgIGlmIChzaG91bGRTZWFyY2goTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9PQkpFQ1RTKSkge1xyXG4gICAgICAvLyBTZWFyY2ggZm9yIGFwcCBvYmplY3RzIGJ5IElELCBPYmplY3ROYW1lLCBEaXNwbGF5TmFtZSwgb3IgU3lzdGVtREJUYWJsZU5hbWVcclxuICAgICAgcmVzdWx0W01ldGFkYXRhRW50aXR5VHlwZS5BUFBfT0JKRUNUU10gPSB0aGlzLmdldEFsbEFwcE9iamVjdHMob2JqID0+XHJcbiAgICAgICAgW29iaj8uSUQsIG9iaj8uT2JqZWN0TmFtZSwgb2JqPy5EaXNwbGF5TmFtZSwgb2JqPy5TeXN0ZW1EQlRhYmxlTmFtZV1cclxuICAgICAgICAgIC5zb21lKHZhbCA9PiB2YWwgPT09IHNlYXJjaFRlcm0gfHwgdmFsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzaG91bGRTZWFyY2goTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9GSUVMRFMpKSB7XHJcbiAgICAgIC8vIFNlYXJjaCBmb3IgYXBwIGZpZWxkcyBieSB1c2luZyB0aGUgc2VhcmNoIG1ldGhvZFxyXG4gICAgICByZXN1bHRbTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9GSUVMRFNdID0gdGhpcy5nZXRBbGxGaWVsZHMoZmllbGQgPT4gZmllbGQuc2VhcmNoKHNlYXJjaFRlcm0pKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2hvdWxkU2VhcmNoKE1ldGFkYXRhRW50aXR5VHlwZS5EQVRBX1NPVVJDRV9RVUVSSUVTKSkge1xyXG4gICAgICAvLyBTZWFyY2ggZm9yIGRhdGEgc291cmNlIHF1ZXJpZXMgYnkgdXNpbmcgdGhlIHNlYXJjaCBtZXRob2RcclxuICAgICAgcmVzdWx0W01ldGFkYXRhRW50aXR5VHlwZS5EQVRBX1NPVVJDRV9RVUVSSUVTXSA9IHRoaXMuZ2V0QWxsRGF0YVNvdXJjZVF1ZXJpZXMoZHNxID0+IGRzcS5zZWFyY2goc2VhcmNoVGVybSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzaG91bGRTZWFyY2goTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9TQ1JFRU5TKSkge1xyXG4gICAgICAvLyBTZWFyY2ggZm9yIGFwcCBzY3JlZW5zIGJ5IHVzaW5nIHRoZSBzZWFyY2ggbWV0aG9kXHJcbiAgICAgIHJlc3VsdFtNZXRhZGF0YUVudGl0eVR5cGUuQVBQX1NDUkVFTlNdID0gdGhpcy5nZXRBbGxBcHBTY3JlZW5zKHNjcmVlbiA9PiBzY3JlZW4uc2VhcmNoKHNlYXJjaFRlcm0pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGFuIGFwcCBtZW51IGJ5IGl0cyBJRCBvciBuYW1lLlxyXG4gICAqIFNlYXJjaGVzIHRocm91Z2ggYWxsIGFwcCBtZW51cyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgbWF0Y2guXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVPcklkIC0gVGhlIElEIG9yIG5hbWUgb2YgdGhlIGFwcCBtZW51IHRvIHJldHJpZXZlLlxyXG4gICAqIEByZXR1cm5zIHtBcHBNZW51TW9kZWwgfCBudWxsfSAtIFRoZSBhcHAgbWVudSBtb2RlbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIG51bGwuXHJcbiAgICovXHJcbiAgZ2V0QXBwTWVudUJ5SWRPck5hbWUobmFtZU9ySWQ6IHN0cmluZyk6IEFwcE1lbnVNb2RlbCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RnJvbU1hcE9yQ3JlYXRlKFxyXG4gICAgICB0aGlzLmFwcE1lbnVNYXAsXHJcbiAgICAgIG5hbWVPcklkLFxyXG4gICAgICBDb21tb24udGFiSnNvbi5NZW51cyxcclxuICAgICAgLy8gU2VhcmNoIGZvciB0aGUgYXBwIG1lbnUgYnkgSUQgb3IgbmFtZVxyXG4gICAgICBtZW51ID0+IG1lbnU/LklkPy50b0xvd2VyQ2FzZSgpID09PSBuYW1lT3JJZD8udG9Mb3dlckNhc2UoKSB8fCBtZW51Py5NZW51TmFtZSA9PT0gbmFtZU9ySWQsXHJcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBBcHBNZW51TW9kZWwgaWYgdGhlIGFwcCBtZW51IGlzIGZvdW5kXHJcbiAgICAgIG1lbnUgPT4gbmV3IEFwcE1lbnVNb2RlbChtZW51KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxsIGFwcCBtZW51cy5cclxuICAgKiBJZiBhIGZpbHRlciBmdW5jdGlvbiBpcyBnaXZlbiwgaXQgaXMgYXBwbGllZCB0byB0aGUgbGlzdCBvZiBhcHAgbWVudXMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZmlsdGVyRm4gLSBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIHRoZSBhcHAgbWVudXMuXHJcbiAgICogQHJldHVybnMge0FwcE1lbnVNb2RlbFtdfSAtIFRoZSBsaXN0IG9mIGFwcCBtZW51cy5cclxuICAgKi9cclxuICBnZXRBbGxBcHBNZW51cyhmaWx0ZXJGbj86IChtZW51OiBBcHBNZW51TW9kZWwpID0+IGJvb2xlYW4pOiBBcHBNZW51TW9kZWxbXSB7XHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBsaXN0IG9mIGFwcCBzY3JlZW5zIGxhemlseS5cclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmxhenlJbml0TGlzdChcclxuICAgICAgdGhpcy5hbGxBcHBNZW51cyxcclxuICAgICAgdmFsID0+ICh0aGlzLmFsbEFwcE1lbnVzID0gdmFsKSxcclxuICAgICAgQ29tbW9uLnRhYkpzb24uTWVudXMsXHJcbiAgICAgIHRoaXMuYXBwTWVudU1hcCxcclxuICAgICAgKG06IGFueSkgPT4gW20/LklkPy50b0xvd2VyQ2FzZSgpLCBtPy5OYW1lXSxcclxuICAgICAgcyA9PiBuZXcgQXBwTWVudU1vZGVsKHMpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIElmIGEgZmlsdGVyIGZ1bmN0aW9uIGlzIGdpdmVuLCBhcHBseSBpdCB0byB0aGUgbGlzdCBvZiBhcHAgc2NyZWVucy5cclxuICAgIHJldHVybiBmaWx0ZXJGbiA/IGxpc3QuZmlsdGVyKGZpbHRlckZuKSA6IGxpc3Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhcnMgYWxsIGNhY2hlZCBtZXRhZGF0YSBzYWZlbHkuXHJcbiAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9uIGNvbnRleHQgY2hhbmdlcyAoZS5nLiwgd2hlbiBhcHAsIG9yZywgb3Igc2Vzc2lvbiBjaGFuZ2VzKS5cclxuICAgKi9cclxuICBjbGVhckNhY2hlKCk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ2xlYXIgbWFwc1xyXG4gICAgICB0aGlzLmFwcE9iamVjdE1hcC5jbGVhcigpO1xyXG4gICAgICB0aGlzLmFwcFNjcmVlbk1hcC5jbGVhcigpO1xyXG4gICAgICB0aGlzLm9yZ0luZm9NYXAuY2xlYXIoKTtcclxuICAgICAgdGhpcy5hcHBNZW51TWFwLmNsZWFyKCk7XHJcblxyXG4gICAgICAvLyBSZXNldCBsaXN0c1xyXG4gICAgICB0aGlzLmFsbEFwcE9iamVjdHMgPSBudWxsO1xyXG4gICAgICB0aGlzLmFsbEFwcFNjcmVlbnMgPSBudWxsO1xyXG4gICAgICB0aGlzLmFsbE9yZ0luZm9zID0gbnVsbDtcclxuICAgICAgdGhpcy5hbGxBcHBNZW51cyA9IG51bGw7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdNZXRhZGF0YUhlbHBlciBGYWlsZWQgdG8gY2xlYXIgY2FjaGU6JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn0iXX0=
@@ -3,6 +3,16 @@ import { Injectable } from '@angular/core';
3
3
  import { QueryType } from '../../enums/query.enum';
4
4
  import * as i0 from "@angular/core";
5
5
  export class RequestResponseHelper {
6
+ /**
7
+ * Generates the payload for inserting data into a table
8
+ * @param table The table name to insert data into
9
+ * @param whereClause The filter criteria for the insert operation
10
+ * @param value The value sets to be inserted
11
+ * @returns The payload for the insert operation
12
+ */
13
+ insertPayload(table, whereClause, value) {
14
+ return this.createPayload(table, whereClause, value, QueryType.Insert);
15
+ }
6
16
  /**
7
17
  * Generates the payload for inserting data into a table in bulk
8
18
  * @param table The table name to insert data into
@@ -16,15 +26,43 @@ export class RequestResponseHelper {
16
26
  }
17
27
  /**
18
28
  * Generates the payload for deleting data from a table
19
- * NEW: Returns new format for /records/delete endpoint
20
- * @param tableName The table name (entityName) to delete data from
21
- * @param whereClause The filter criteria for the delete operation (NEW format with lowercase)
22
- * @returns The payload for the delete operation in NEW format
29
+ * @param tableName The table name to delete data from
30
+ * @param whereClause The filter criteria for the delete operation
31
+ * @returns The payload for the delete operation
23
32
  */
24
33
  deletePayload(tableName, whereClause) {
25
34
  return {
26
- entityName: tableName,
27
- whereClause: whereClause,
35
+ QueryObjectID: tableName,
36
+ QueryType: QueryType.Delete,
37
+ Joins: [],
38
+ WhereClause: whereClause,
39
+ };
40
+ }
41
+ /**
42
+ * Generates the payload for updating data in a table
43
+ * @param tableName The table name to update data in
44
+ * @param whereClause The filter criteria for the update operation
45
+ * @param value The value sets to be updated
46
+ * @returns The payload for the update operation
47
+ */
48
+ updateRequestPayload(tableName, whereClause, value) {
49
+ return this.createPayload(tableName, whereClause, value, QueryType.Update);
50
+ }
51
+ /**
52
+ * Creates a payload object based on the input parameters
53
+ * @param table The table name for the payload
54
+ * @param whereClause The filter criteria for the payload
55
+ * @param value The value sets for the payload
56
+ * @param queryType The type of query for the payload
57
+ * @returns The payload object with QueryObjectID, QueryType, Joins, WhereClause, and Values
58
+ */
59
+ createPayload(table, whereClause, value, queryType) {
60
+ return {
61
+ QueryObjectID: table,
62
+ QueryType: queryType,
63
+ Joins: [],
64
+ WhereClause: whereClause,
65
+ Values: value,
28
66
  };
29
67
  }
30
68
  /**
@@ -53,4 +91,4 @@ export class RequestResponseHelper {
53
91
  type: Injectable,
54
92
  args: [{ providedIn: 'root' }]
55
93
  }], null, null); })();
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxLXJlcy5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWFjY2Vzcy9zcmMvbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2hlbHBlcnMvY29tbW9uL3JlcS1yZXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRW5ELE1BQU0sT0FBTyxxQkFBcUI7SUFDaEM7Ozs7Ozs7T0FPRztJQUNILGlCQUFpQixDQUNmLEtBQWEsRUFDYixXQUE4QixFQUM5QixLQUFxQyxFQUNyQyxNQUFpQjtRQUVqQixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQUMsU0FBaUIsRUFBRSxXQUE4QjtRQUM3RCxPQUFPO1lBQ0wsVUFBVSxFQUFFLFNBQVM7WUFDckIsV0FBVyxFQUFFLFdBQVc7U0FDekIsQ0FBQztJQUNKLENBQUM7SUFDRDs7Ozs7Ozs7T0FRRztJQUNILHVCQUF1QixDQUNyQixLQUFhLEVBQ2IsV0FBOEIsRUFDOUIsS0FBcUMsRUFDckMsU0FBb0IsRUFDcEIsTUFBaUI7UUFFakIsT0FBTztZQUNMLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLEtBQUssRUFBRSxFQUFFO1lBQ1QsV0FBVyxFQUFFLFdBQVc7WUFDeEIsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUM7SUFDSixDQUFDO3NGQXREVSxxQkFBcUI7dUVBQXJCLHFCQUFxQixXQUFyQixxQkFBcUIsbUJBRFIsTUFBTTs7aUZBQ25CLHFCQUFxQjtjQURqQyxVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBUElCdWxrSW5zZXJ0RmllbGRzVmFsdWVTZXRzLCBBUElGaWx0ZXJDcml0ZXJpYSB9IGZyb20gJy4uLy4uL21vZGVscy9hcGktcXVlcnkuY2xhc3MnO1xyXG5pbXBvcnQgeyBRdWVyeVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9xdWVyeS5lbnVtJztcclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RSZXNwb25zZUhlbHBlciB7XHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBwYXlsb2FkIGZvciBpbnNlcnRpbmcgZGF0YSBpbnRvIGEgdGFibGUgaW4gYnVsa1xyXG4gICAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgbmFtZSB0byBpbnNlcnQgZGF0YSBpbnRvXHJcbiAgICogQHBhcmFtIHdoZXJlQ2xhdXNlIFRoZSBmaWx0ZXIgY3JpdGVyaWEgZm9yIHRoZSBpbnNlcnQgb3BlcmF0aW9uXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBzZXRzIHRvIGJlIGluc2VydGVkXHJcbiAgICogQHBhcmFtIGZpZWxkcyBPcHRpb25hbCBsaXN0IG9mIGZpZWxkcyB0byBpbmNsdWRlIGluIHRoZSBpbnNlcnQgb3BlcmF0aW9uXHJcbiAgICogQHJldHVybnMgVGhlIHBheWxvYWQgZm9yIHRoZSBidWxrIGluc2VydCBvcGVyYXRpb25cclxuICAgKi9cclxuICBidWxrSW5zZXJ0UGF5bG9hZChcclxuICAgIHRhYmxlOiBzdHJpbmcsXHJcbiAgICB3aGVyZUNsYXVzZTogQVBJRmlsdGVyQ3JpdGVyaWEsXHJcbiAgICB2YWx1ZTogQVBJQnVsa0luc2VydEZpZWxkc1ZhbHVlU2V0c1tdLFxyXG4gICAgZmllbGRzPzogc3RyaW5nW11cclxuICApIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUJ1bGtJbnNlcnRQYXlsb2FkKHRhYmxlLCB3aGVyZUNsYXVzZSwgdmFsdWUsIFF1ZXJ5VHlwZS5CdWxrSW5zZXJ0LGZpZWxkcyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgcGF5bG9hZCBmb3IgZGVsZXRpbmcgZGF0YSBmcm9tIGEgdGFibGVcclxuICAgKiBORVc6IFJldHVybnMgbmV3IGZvcm1hdCBmb3IgL3JlY29yZHMvZGVsZXRlIGVuZHBvaW50XHJcbiAgICogQHBhcmFtIHRhYmxlTmFtZSBUaGUgdGFibGUgbmFtZSAoZW50aXR5TmFtZSkgdG8gZGVsZXRlIGRhdGEgZnJvbVxyXG4gICAqIEBwYXJhbSB3aGVyZUNsYXVzZSBUaGUgZmlsdGVyIGNyaXRlcmlhIGZvciB0aGUgZGVsZXRlIG9wZXJhdGlvbiAoTkVXIGZvcm1hdCB3aXRoIGxvd2VyY2FzZSlcclxuICAgKiBAcmV0dXJucyBUaGUgcGF5bG9hZCBmb3IgdGhlIGRlbGV0ZSBvcGVyYXRpb24gaW4gTkVXIGZvcm1hdFxyXG4gICAqL1xyXG4gIGRlbGV0ZVBheWxvYWQodGFibGVOYW1lOiBzdHJpbmcsIHdoZXJlQ2xhdXNlOiBBUElGaWx0ZXJDcml0ZXJpYSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZW50aXR5TmFtZTogdGFibGVOYW1lLFxyXG4gICAgICB3aGVyZUNsYXVzZTogd2hlcmVDbGF1c2UsXHJcbiAgICB9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgcGF5bG9hZCBvYmplY3QgZm9yIGJ1bGsgaW5zZXJ0IG9wZXJhdGlvbnNcclxuICAgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlIG5hbWUgZm9yIHRoZSBwYXlsb2FkXHJcbiAgICogQHBhcmFtIHdoZXJlQ2xhdXNlIFRoZSBmaWx0ZXIgY3JpdGVyaWEgZm9yIHRoZSBwYXlsb2FkXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBzZXRzIGZvciB0aGUgcGF5bG9hZFxyXG4gICAqIEBwYXJhbSBxdWVyeVR5cGUgVGhlIHR5cGUgb2YgcXVlcnkgZm9yIHRoZSBwYXlsb2FkIChCdWxrSW5zZXJ0KVxyXG4gICAqIEBwYXJhbSBmaWVsZHMgT3B0aW9uYWwgbGlzdCBvZiBmaWVsZHMgdG8gaW5jbHVkZSBpbiB0aGUgaW5zZXJ0IG9wZXJhdGlvblxyXG4gICAqIEByZXR1cm5zIFRoZSBwYXlsb2FkIG9iamVjdCB3aXRoIFF1ZXJ5T2JqZWN0SUQsIFF1ZXJ5VHlwZSwgSm9pbnMsIFdoZXJlQ2xhdXNlLCBWYWx1ZXMsIGFuZCBGaWVsZHNcclxuICAgKi9cclxuICBjcmVhdGVCdWxrSW5zZXJ0UGF5bG9hZChcclxuICAgIHRhYmxlOiBzdHJpbmcsXHJcbiAgICB3aGVyZUNsYXVzZTogQVBJRmlsdGVyQ3JpdGVyaWEsXHJcbiAgICB2YWx1ZTogQVBJQnVsa0luc2VydEZpZWxkc1ZhbHVlU2V0c1tdLFxyXG4gICAgcXVlcnlUeXBlOiBRdWVyeVR5cGUsXHJcbiAgICBmaWVsZHM/OiBzdHJpbmdbXVxyXG4gICkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgUXVlcnlPYmplY3RJRDogdGFibGUsXHJcbiAgICAgIFF1ZXJ5VHlwZTogcXVlcnlUeXBlLFxyXG4gICAgICBKb2luczogW10sXHJcbiAgICAgIFdoZXJlQ2xhdXNlOiB3aGVyZUNsYXVzZSxcclxuICAgICAgVmFsdWVzOiB2YWx1ZSxcclxuICAgICAgRmllbGRzOiBmaWVsZHMsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxLXJlcy5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWFjY2Vzcy9zcmMvbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2hlbHBlcnMvY29tbW9uL3JlcS1yZXMuaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBRW5ELE1BQU0sT0FBTyxxQkFBcUI7SUFDaEM7Ozs7OztPQU1HO0lBQ0gsYUFBYSxDQUNYLEtBQWEsRUFDYixXQUE4QixFQUM5QixLQUFxQjtRQUVyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0gsaUJBQWlCLENBQ2YsS0FBYSxFQUNiLFdBQThCLEVBQzlCLEtBQXFDLEVBQ3JDLE1BQWlCO1FBRWpCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFDLFNBQWlCLEVBQUUsV0FBOEI7UUFDN0QsT0FBTztZQUNMLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTTtZQUMzQixLQUFLLEVBQUUsRUFBRTtZQUNULFdBQVcsRUFBRSxXQUFXO1NBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsb0JBQW9CLENBQ2xCLFNBQWlCLEVBQ2pCLFdBQThCLEVBQzlCLEtBQXFCO1FBRXJCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxhQUFhLENBQ1gsS0FBYSxFQUNiLFdBQThCLEVBQzlCLEtBQXFCLEVBQ3JCLFNBQW9CO1FBRXBCLE9BQU87WUFDTCxhQUFhLEVBQUUsS0FBSztZQUNwQixTQUFTLEVBQUUsU0FBUztZQUNwQixLQUFLLEVBQUUsRUFBRTtZQUNULFdBQVcsRUFBRSxXQUFXO1lBQ3hCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFDRDs7Ozs7Ozs7T0FRRztJQUNILHVCQUF1QixDQUNyQixLQUFhLEVBQ2IsV0FBOEIsRUFDOUIsS0FBcUMsRUFDckMsU0FBb0IsRUFDcEIsTUFBaUI7UUFFakIsT0FBTztZQUNMLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLEtBQUssRUFBRSxFQUFFO1lBQ1QsV0FBVyxFQUFFLFdBQVc7WUFDeEIsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUM7SUFDSixDQUFDO3NGQTNHVSxxQkFBcUI7dUVBQXJCLHFCQUFxQixXQUFyQixxQkFBcUIsbUJBRFIsTUFBTTs7aUZBQ25CLHFCQUFxQjtjQURqQyxVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBUElCdWxrSW5zZXJ0RmllbGRzVmFsdWVTZXRzLCBBUElGaWx0ZXJDcml0ZXJpYSwgQVBJVmFsdWVTZXRzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwaS1xdWVyeS5jbGFzcyc7XHJcbmltcG9ydCB7IFF1ZXJ5VHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL3F1ZXJ5LmVudW0nO1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdFJlc3BvbnNlSGVscGVyIHtcclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIHBheWxvYWQgZm9yIGluc2VydGluZyBkYXRhIGludG8gYSB0YWJsZVxyXG4gICAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgbmFtZSB0byBpbnNlcnQgZGF0YSBpbnRvXHJcbiAgICogQHBhcmFtIHdoZXJlQ2xhdXNlIFRoZSBmaWx0ZXIgY3JpdGVyaWEgZm9yIHRoZSBpbnNlcnQgb3BlcmF0aW9uXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBzZXRzIHRvIGJlIGluc2VydGVkXHJcbiAgICogQHJldHVybnMgVGhlIHBheWxvYWQgZm9yIHRoZSBpbnNlcnQgb3BlcmF0aW9uXHJcbiAgICovXHJcbiAgaW5zZXJ0UGF5bG9hZChcclxuICAgIHRhYmxlOiBzdHJpbmcsXHJcbiAgICB3aGVyZUNsYXVzZTogQVBJRmlsdGVyQ3JpdGVyaWEsXHJcbiAgICB2YWx1ZTogQVBJVmFsdWVTZXRzW11cclxuICApIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVBheWxvYWQodGFibGUsIHdoZXJlQ2xhdXNlLCB2YWx1ZSwgUXVlcnlUeXBlLkluc2VydCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgcGF5bG9hZCBmb3IgaW5zZXJ0aW5nIGRhdGEgaW50byBhIHRhYmxlIGluIGJ1bGtcclxuICAgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlIG5hbWUgdG8gaW5zZXJ0IGRhdGEgaW50b1xyXG4gICAqIEBwYXJhbSB3aGVyZUNsYXVzZSBUaGUgZmlsdGVyIGNyaXRlcmlhIGZvciB0aGUgaW5zZXJ0IG9wZXJhdGlvblxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgc2V0cyB0byBiZSBpbnNlcnRlZFxyXG4gICAqIEBwYXJhbSBmaWVsZHMgT3B0aW9uYWwgbGlzdCBvZiBmaWVsZHMgdG8gaW5jbHVkZSBpbiB0aGUgaW5zZXJ0IG9wZXJhdGlvblxyXG4gICAqIEByZXR1cm5zIFRoZSBwYXlsb2FkIGZvciB0aGUgYnVsayBpbnNlcnQgb3BlcmF0aW9uXHJcbiAgICovXHJcbiAgYnVsa0luc2VydFBheWxvYWQoXHJcbiAgICB0YWJsZTogc3RyaW5nLFxyXG4gICAgd2hlcmVDbGF1c2U6IEFQSUZpbHRlckNyaXRlcmlhLFxyXG4gICAgdmFsdWU6IEFQSUJ1bGtJbnNlcnRGaWVsZHNWYWx1ZVNldHNbXSxcclxuICAgIGZpZWxkcz86IHN0cmluZ1tdXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCdWxrSW5zZXJ0UGF5bG9hZCh0YWJsZSwgd2hlcmVDbGF1c2UsIHZhbHVlLCBRdWVyeVR5cGUuQnVsa0luc2VydCxmaWVsZHMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIHBheWxvYWQgZm9yIGRlbGV0aW5nIGRhdGEgZnJvbSBhIHRhYmxlXHJcbiAgICogQHBhcmFtIHRhYmxlTmFtZSBUaGUgdGFibGUgbmFtZSB0byBkZWxldGUgZGF0YSBmcm9tXHJcbiAgICogQHBhcmFtIHdoZXJlQ2xhdXNlIFRoZSBmaWx0ZXIgY3JpdGVyaWEgZm9yIHRoZSBkZWxldGUgb3BlcmF0aW9uXHJcbiAgICogQHJldHVybnMgVGhlIHBheWxvYWQgZm9yIHRoZSBkZWxldGUgb3BlcmF0aW9uXHJcbiAgICovXHJcbiAgZGVsZXRlUGF5bG9hZCh0YWJsZU5hbWU6IHN0cmluZywgd2hlcmVDbGF1c2U6IEFQSUZpbHRlckNyaXRlcmlhKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBRdWVyeU9iamVjdElEOiB0YWJsZU5hbWUsXHJcbiAgICAgIFF1ZXJ5VHlwZTogUXVlcnlUeXBlLkRlbGV0ZSxcclxuICAgICAgSm9pbnM6IFtdLFxyXG4gICAgICBXaGVyZUNsYXVzZTogd2hlcmVDbGF1c2UsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBwYXlsb2FkIGZvciB1cGRhdGluZyBkYXRhIGluIGEgdGFibGVcclxuICAgKiBAcGFyYW0gdGFibGVOYW1lIFRoZSB0YWJsZSBuYW1lIHRvIHVwZGF0ZSBkYXRhIGluXHJcbiAgICogQHBhcmFtIHdoZXJlQ2xhdXNlIFRoZSBmaWx0ZXIgY3JpdGVyaWEgZm9yIHRoZSB1cGRhdGUgb3BlcmF0aW9uXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBzZXRzIHRvIGJlIHVwZGF0ZWRcclxuICAgKiBAcmV0dXJucyBUaGUgcGF5bG9hZCBmb3IgdGhlIHVwZGF0ZSBvcGVyYXRpb25cclxuICAgKi9cclxuICB1cGRhdGVSZXF1ZXN0UGF5bG9hZChcclxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxyXG4gICAgd2hlcmVDbGF1c2U6IEFQSUZpbHRlckNyaXRlcmlhLFxyXG4gICAgdmFsdWU6IEFQSVZhbHVlU2V0c1tdXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVQYXlsb2FkKHRhYmxlTmFtZSwgd2hlcmVDbGF1c2UsIHZhbHVlLCBRdWVyeVR5cGUuVXBkYXRlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBwYXlsb2FkIG9iamVjdCBiYXNlZCBvbiB0aGUgaW5wdXQgcGFyYW1ldGVyc1xyXG4gICAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGUgbmFtZSBmb3IgdGhlIHBheWxvYWRcclxuICAgKiBAcGFyYW0gd2hlcmVDbGF1c2UgVGhlIGZpbHRlciBjcml0ZXJpYSBmb3IgdGhlIHBheWxvYWRcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHNldHMgZm9yIHRoZSBwYXlsb2FkXHJcbiAgICogQHBhcmFtIHF1ZXJ5VHlwZSBUaGUgdHlwZSBvZiBxdWVyeSBmb3IgdGhlIHBheWxvYWRcclxuICAgKiBAcmV0dXJucyBUaGUgcGF5bG9hZCBvYmplY3Qgd2l0aCBRdWVyeU9iamVjdElELCBRdWVyeVR5cGUsIEpvaW5zLCBXaGVyZUNsYXVzZSwgYW5kIFZhbHVlc1xyXG4gICAqL1xyXG4gIGNyZWF0ZVBheWxvYWQoXHJcbiAgICB0YWJsZTogc3RyaW5nLFxyXG4gICAgd2hlcmVDbGF1c2U6IEFQSUZpbHRlckNyaXRlcmlhLFxyXG4gICAgdmFsdWU6IEFQSVZhbHVlU2V0c1tdLFxyXG4gICAgcXVlcnlUeXBlOiBRdWVyeVR5cGVcclxuICApIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFF1ZXJ5T2JqZWN0SUQ6IHRhYmxlLFxyXG4gICAgICBRdWVyeVR5cGU6IHF1ZXJ5VHlwZSxcclxuICAgICAgSm9pbnM6IFtdLFxyXG4gICAgICBXaGVyZUNsYXVzZTogd2hlcmVDbGF1c2UsXHJcbiAgICAgIFZhbHVlczogdmFsdWUsXHJcbiAgICB9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgcGF5bG9hZCBvYmplY3QgZm9yIGJ1bGsgaW5zZXJ0IG9wZXJhdGlvbnNcclxuICAgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlIG5hbWUgZm9yIHRoZSBwYXlsb2FkXHJcbiAgICogQHBhcmFtIHdoZXJlQ2xhdXNlIFRoZSBmaWx0ZXIgY3JpdGVyaWEgZm9yIHRoZSBwYXlsb2FkXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBzZXRzIGZvciB0aGUgcGF5bG9hZFxyXG4gICAqIEBwYXJhbSBxdWVyeVR5cGUgVGhlIHR5cGUgb2YgcXVlcnkgZm9yIHRoZSBwYXlsb2FkIChCdWxrSW5zZXJ0KVxyXG4gICAqIEBwYXJhbSBmaWVsZHMgT3B0aW9uYWwgbGlzdCBvZiBmaWVsZHMgdG8gaW5jbHVkZSBpbiB0aGUgaW5zZXJ0IG9wZXJhdGlvblxyXG4gICAqIEByZXR1cm5zIFRoZSBwYXlsb2FkIG9iamVjdCB3aXRoIFF1ZXJ5T2JqZWN0SUQsIFF1ZXJ5VHlwZSwgSm9pbnMsIFdoZXJlQ2xhdXNlLCBWYWx1ZXMsIGFuZCBGaWVsZHNcclxuICAgKi9cclxuICBjcmVhdGVCdWxrSW5zZXJ0UGF5bG9hZChcclxuICAgIHRhYmxlOiBzdHJpbmcsXHJcbiAgICB3aGVyZUNsYXVzZTogQVBJRmlsdGVyQ3JpdGVyaWEsXHJcbiAgICB2YWx1ZTogQVBJQnVsa0luc2VydEZpZWxkc1ZhbHVlU2V0c1tdLFxyXG4gICAgcXVlcnlUeXBlOiBRdWVyeVR5cGUsXHJcbiAgICBmaWVsZHM/OiBzdHJpbmdbXVxyXG4gICkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgUXVlcnlPYmplY3RJRDogdGFibGUsXHJcbiAgICAgIFF1ZXJ5VHlwZTogcXVlcnlUeXBlLFxyXG4gICAgICBKb2luczogW10sXHJcbiAgICAgIFdoZXJlQ2xhdXNlOiB3aGVyZUNsYXVzZSxcclxuICAgICAgVmFsdWVzOiB2YWx1ZSxcclxuICAgICAgRmllbGRzOiBmaWVsZHMsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=