@mediusinc/mng-commons 3.0.0-rc.1 → 3.0.0-rc.10

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 (136) hide show
  1. package/README.md +8 -7
  2. package/assets/i18n/en.json +5 -1
  3. package/assets/i18n/sl.json +5 -1
  4. package/dev-scripts/version-info.js +13 -6
  5. package/esm2022/index.mjs +3 -1
  6. package/esm2022/lib/api/utils/object-serializer.util.mjs +11 -4
  7. package/esm2022/lib/components/action/action.component.mjs +18 -6
  8. package/esm2022/lib/components/action/editor/action-editor.component.mjs +83 -18
  9. package/esm2022/lib/components/action/models/action-execution.model.mjs +14 -37
  10. package/esm2022/lib/components/action/route/action-route.component.mjs +9 -2
  11. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +18 -5
  12. package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +21 -8
  13. package/esm2022/lib/components/form/editor/form-editor.component.mjs +9 -8
  14. package/esm2022/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +22 -4
  15. package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +43 -15
  16. package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +11 -4
  17. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +8 -6
  18. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +16 -7
  19. package/esm2022/lib/components/form/models/field-action-context.model.mjs +1 -1
  20. package/esm2022/lib/components/form/models/index.mjs +2 -1
  21. package/esm2022/lib/components/tableview/table/table.component.mjs +57 -55
  22. package/esm2022/lib/descriptors/action/action-button.descriptor.mjs +10 -2
  23. package/esm2022/lib/descriptors/action/action.descriptor.mjs +19 -8
  24. package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +3 -3
  25. package/esm2022/lib/descriptors/editor/field.descriptor.mjs +13 -4
  26. package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +7 -6
  27. package/esm2022/lib/descriptors/table/column.descriptor.mjs +3 -3
  28. package/esm2022/lib/descriptors/table/table.descriptor.mjs +35 -4
  29. package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +3 -3
  30. package/esm2022/lib/error/error.handler.mjs +20 -0
  31. package/esm2022/lib/error/index.mjs +2 -0
  32. package/esm2022/lib/guards/index.mjs +2 -0
  33. package/esm2022/lib/guards/unsaved-changes.guard.mjs +4 -0
  34. package/esm2022/lib/models/action-editor.model.mjs +2 -0
  35. package/esm2022/lib/models/can-component-deactivate.model.mjs +2 -0
  36. package/esm2022/lib/models/config.model.mjs +1 -1
  37. package/esm2022/lib/models/error.model.mjs +44 -2
  38. package/esm2022/lib/models/index.mjs +4 -2
  39. package/esm2022/lib/models/log.model.mjs +10 -0
  40. package/esm2022/lib/models/version.model.mjs +1 -1
  41. package/esm2022/lib/pipes/json-path.pipe.mjs +8 -4
  42. package/esm2022/lib/provide-commons.mjs +22 -16
  43. package/esm2022/lib/router/route-builder.mjs +4 -4
  44. package/esm2022/lib/router/routes-builder.mjs +3 -3
  45. package/esm2022/lib/router/tableview-route-builder.mjs +4 -1
  46. package/esm2022/lib/security/authorization.service.mjs +5 -4
  47. package/esm2022/lib/security/authorization.util.mjs +3 -3
  48. package/esm2022/lib/services/action-error-mapper.service.mjs +20 -0
  49. package/esm2022/lib/services/action-executor.service.mjs +97 -57
  50. package/esm2022/lib/services/commons.service.mjs +16 -25
  51. package/esm2022/lib/services/configuration.service.mjs +56 -32
  52. package/esm2022/lib/services/index.mjs +4 -2
  53. package/esm2022/lib/services/internal/commons-init.service.mjs +49 -23
  54. package/esm2022/lib/services/log-publisher-console.service.mjs +40 -0
  55. package/esm2022/lib/services/logger.service.mjs +130 -0
  56. package/esm2022/lib/services/providers/index.mjs +1 -2
  57. package/esm2022/lib/services/router.service.mjs +106 -25
  58. package/esm2022/lib/services/tokens/index.mjs +2 -1
  59. package/esm2022/lib/services/tokens/log-publisher.token.mjs +3 -0
  60. package/esm2022/lib/services/version.service.mjs +7 -2
  61. package/esm2022/lib/utils/action-data-provider.util.mjs +7 -7
  62. package/esm2022/lib/utils/editor-formly.util.mjs +2 -1
  63. package/esm2022/lib/utils/error.util.mjs +247 -0
  64. package/esm2022/lib/utils/i18n.util.mjs +7 -9
  65. package/esm2022/lib/utils/index.mjs +2 -1
  66. package/esm2022/lib/utils/notification.util.mjs +3 -2
  67. package/esm2022/lib/utils/object.util.mjs +32 -5
  68. package/esm2022/lib/utils/route.util.mjs +3 -3
  69. package/esm2022/lib/utils/string.util.mjs +33 -2
  70. package/esm2022/lib/utils/tableview.util.mjs +3 -3
  71. package/esm2022/lib/utils/type.util.mjs +5 -5
  72. package/fesm2022/mediusinc-mng-commons.mjs +4352 -3484
  73. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  74. package/index.d.ts +1 -0
  75. package/lib/api/utils/object-serializer.util.d.ts +1 -0
  76. package/lib/components/action/action.component.d.ts +1 -0
  77. package/lib/components/action/editor/action-editor.component.d.ts +17 -6
  78. package/lib/components/action/models/action-execution.model.d.ts +6 -4
  79. package/lib/components/action/route/action-route.component.d.ts +4 -1
  80. package/lib/components/form/autocomplete/autocomplete.component.d.ts +1 -0
  81. package/lib/components/form/dropdown/dropdown.component.d.ts +1 -0
  82. package/lib/components/form/editor/form-editor.component.d.ts +1 -0
  83. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +3 -0
  84. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +2 -0
  85. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +1 -0
  86. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +1 -0
  87. package/lib/components/form/models/field-action-context.model.d.ts +7 -0
  88. package/lib/components/form/models/index.d.ts +1 -0
  89. package/lib/components/tableview/table/table.component.d.ts +2 -0
  90. package/lib/descriptors/action/action-button.descriptor.d.ts +4 -1
  91. package/lib/descriptors/action/action.descriptor.d.ts +3 -0
  92. package/lib/descriptors/editor/field.descriptor.d.ts +10 -8
  93. package/lib/descriptors/table/column.descriptor.d.ts +1 -1
  94. package/lib/descriptors/table/table.descriptor.d.ts +26 -3
  95. package/lib/error/error.handler.d.ts +6 -0
  96. package/lib/error/index.d.ts +1 -0
  97. package/lib/guards/index.d.ts +1 -0
  98. package/lib/guards/unsaved-changes.guard.d.ts +3 -0
  99. package/lib/models/action-editor.model.d.ts +4 -0
  100. package/lib/models/can-component-deactivate.model.d.ts +4 -0
  101. package/lib/models/config.model.d.ts +2 -1
  102. package/lib/models/error.model.d.ts +44 -8
  103. package/lib/models/index.d.ts +3 -1
  104. package/lib/models/log.model.d.ts +40 -0
  105. package/lib/models/version.model.d.ts +1 -1
  106. package/lib/pipes/json-path.pipe.d.ts +1 -0
  107. package/lib/security/authorization.service.d.ts +1 -0
  108. package/lib/services/action-error-mapper.service.d.ts +18 -0
  109. package/lib/services/action-executor.service.d.ts +12 -6
  110. package/lib/services/commons.service.d.ts +9 -14
  111. package/lib/services/configuration.service.d.ts +13 -5
  112. package/lib/services/index.d.ts +3 -1
  113. package/lib/services/internal/commons-init.service.d.ts +8 -8
  114. package/lib/services/log-publisher-console.service.d.ts +4 -0
  115. package/lib/services/logger.service.d.ts +33 -0
  116. package/lib/services/providers/index.d.ts +0 -1
  117. package/lib/services/router.service.d.ts +17 -2
  118. package/lib/services/tokens/index.d.ts +1 -0
  119. package/lib/services/tokens/log-publisher.token.d.ts +3 -0
  120. package/lib/services/version.service.d.ts +1 -0
  121. package/lib/utils/error.util.d.ts +116 -0
  122. package/lib/utils/i18n.util.d.ts +3 -3
  123. package/lib/utils/index.d.ts +1 -0
  124. package/lib/utils/notification.util.d.ts +2 -2
  125. package/lib/utils/object.util.d.ts +6 -4
  126. package/lib/utils/string.util.d.ts +5 -0
  127. package/package.json +4 -1
  128. package/scss/common/theme/designer/_components.scss +1 -1
  129. package/scss/mng-overrides/_theme_dialog.scss +7 -0
  130. package/scss/mng-overrides/_theme_tableview.scss +15 -0
  131. package/esm2022/lib/models/error-internal.model.mjs +0 -27
  132. package/esm2022/lib/services/error-mapper.service.mjs +0 -14
  133. package/esm2022/lib/services/providers/config-service.provider.mjs +0 -31
  134. package/lib/models/error-internal.model.d.ts +0 -29
  135. package/lib/services/error-mapper.service.d.ts +0 -7
  136. package/lib/services/providers/config-service.provider.d.ts +0 -6
@@ -0,0 +1,247 @@
1
+ import { HttpErrorResponse } from '@angular/common/http';
2
+ import { AMngErrorBase, LogLevelEnum, MngActionError, MngHttpError, MngInternalError } from '../models';
3
+ import { StringUtil } from './string.util';
4
+ export class ErrorUtil {
5
+ /**
6
+ * Converts RxJS subscription error to MngError.
7
+ * @param error Error.
8
+ * @param name Optional name to write in mngError.
9
+ * @param details Optional details of error.
10
+ */
11
+ static fromSubscribeError(error, name, details) {
12
+ const opts = {
13
+ name,
14
+ details,
15
+ location: window?.location?.href
16
+ };
17
+ if (error instanceof HttpErrorResponse) {
18
+ return new MngHttpError(error.message ?? 'Http Error occurred', error, opts);
19
+ }
20
+ else {
21
+ opts.cause = error;
22
+ return new MngInternalError(error.message ?? 'Internal Error occurred', opts);
23
+ }
24
+ }
25
+ /**
26
+ * Checks if error is Http error (Angular or Mng).
27
+ * @param error
28
+ */
29
+ static isHttpErrorResponse(error) {
30
+ return error instanceof HttpErrorResponse || error instanceof MngHttpError || (error instanceof MngActionError && error.httpError);
31
+ }
32
+ /**
33
+ * Gets HttpErrorResponse from error (Angular or Mng).
34
+ * @param error Error.
35
+ */
36
+ static getHttpErrorResponse(error) {
37
+ if (error instanceof HttpErrorResponse) {
38
+ return error;
39
+ }
40
+ else if (error instanceof MngHttpError) {
41
+ return error.httpError;
42
+ }
43
+ else if (error instanceof MngActionError) {
44
+ return error.httpError ?? null;
45
+ }
46
+ else {
47
+ return null;
48
+ }
49
+ }
50
+ /**
51
+ * Gets HttpErrorResponse status from error (Angular or Mng).
52
+ * @param error Error.
53
+ */
54
+ static getHttpErrorResponseStatus(error) {
55
+ return ErrorUtil.getHttpErrorResponse(error)?.status ?? null;
56
+ }
57
+ /**
58
+ * Get error log level. All is error, except if error is http error with status >=400 and <500.
59
+ * @param error Error.
60
+ */
61
+ static getErrorLogLevel(error) {
62
+ if (ErrorUtil.isHttpErrorResponse(error)) {
63
+ const status = ErrorUtil.getHttpErrorResponseStatus(error);
64
+ if (status && status >= 400 && status < 500) {
65
+ return LogLevelEnum.Warning;
66
+ }
67
+ }
68
+ return LogLevelEnum.Error;
69
+ }
70
+ /**
71
+ * Get error name (prototype name or type from mng error if name is not provided).
72
+ * @param error Error.
73
+ */
74
+ static getErrorName(error) {
75
+ if (error instanceof AMngErrorBase) {
76
+ return error.name ?? error.type;
77
+ }
78
+ else {
79
+ return error.name;
80
+ }
81
+ }
82
+ /**
83
+ * Writes http error to string with all headers and body.
84
+ * @param error Http response error.
85
+ * @param opts Options for hiding parts of error:
86
+ * - hideMessage Hides message of error (message include url, status and status text!).
87
+ * - hideHeaders Hides headers.
88
+ * - hideBody Hides JSON representation of body.
89
+ */
90
+ static httpErrorResponseToString(error, opts) {
91
+ let str = opts?.hideMessage ? '' : `${error.message}\n`; // message should already include url, status, etc.
92
+ if (!opts?.hideHeaders) {
93
+ str += `Http Response Headers: ${error.headers.keys().reduce((acc, key) => `${acc}[${key}: ${error.headers.get(key)}]`, '')}`;
94
+ }
95
+ if (!opts?.hideBody) {
96
+ str += `\nHttp Response Body: ${StringUtil.stringify(error.error)}`;
97
+ }
98
+ return str;
99
+ }
100
+ /**
101
+ * Error to string.
102
+ * @param error Error.
103
+ * @param opts Options for hiding parts of error:
104
+ * - hideMessage Hides message of error.
105
+ * - hideName Hides error name.
106
+ * - hideCause Hides cause of an error (if present, see @link(errorCauseToString) for other options).
107
+ * - hideStack Hides stack of an error (if present).
108
+ * - hideDetails Hides JSON detail's representation of error (if present).
109
+ * - hideLocation Hides location (URL) where error was thrown.
110
+ * - hideHttp Hides http error portion of error if http error response (see @link(httpErrorResponseToString) for other options).
111
+ */
112
+ static errorToString(error, opts) {
113
+ if (error instanceof AMngErrorBase) {
114
+ return ErrorUtil.mngErrorToString(error, opts);
115
+ }
116
+ else if (error instanceof HttpErrorResponse) {
117
+ return ErrorUtil.httpErrorResponseToString(error, opts);
118
+ }
119
+ const strBlocks = [];
120
+ if (!opts?.hideMessage) {
121
+ strBlocks.push(error.message);
122
+ }
123
+ if (error.name) {
124
+ strBlocks.push(`Error name: ${error.name}`);
125
+ }
126
+ if (!opts?.hideCause) {
127
+ strBlocks.push(ErrorUtil.errorCauseToString(error, opts));
128
+ }
129
+ if (!opts?.hideStack && error.stack) {
130
+ strBlocks.push(`Stack trace:\n${error.stack}`);
131
+ }
132
+ return strBlocks.filter(s => s.trim().length > 0).join('\n');
133
+ }
134
+ /**
135
+ * Mng error to string.
136
+ * @param error Mng error.
137
+ * @param opts Options for hiding parts of error:
138
+ * - hideMessage Hides message of error.
139
+ * - hideName Hides error name.
140
+ * - hideCause Hides cause of an error (if present, see @link(errorCauseToString) for other options).
141
+ * - hideStack Hides stack of an error (if present).
142
+ * - hideDetails Hides JSON detail's representation of error (if present).
143
+ * - hideLocation Hides location (URL) where error was thrown.
144
+ * - hideHttp Hides http error portion of error if http error response (see @link(httpErrorResponseToString) for other options).
145
+ * - hideItems Hides all item information (http body, action context data).
146
+ * - hideActionData See @link(mngActionErrorContextToString) for additional info.
147
+ * - hideQueryParams See @link(mngActionErrorContextToString) for additional info.
148
+ */
149
+ static mngErrorToString(error, opts) {
150
+ const strBlocks = [];
151
+ if (!opts?.hideMessage) {
152
+ strBlocks.push(`${error.message}${error.messageCode ? ` (code: ${error.messageCode})` : ''}`);
153
+ }
154
+ if (!opts?.hideName) {
155
+ strBlocks.push(`Error name: ${error.name ?? error.type} ${error.name ? `(${error.type})` : ''}`);
156
+ }
157
+ if (!opts?.hideLocation && error.location) {
158
+ strBlocks.push(`Location: ${error.location}`);
159
+ }
160
+ let isHttp = false;
161
+ if (!opts?.hideHttp && error instanceof MngHttpError) {
162
+ strBlocks.push(ErrorUtil.httpErrorResponseToString(error.httpError, {
163
+ hideBody: opts?.hideItems || opts?.hideBody,
164
+ hideHeaders: opts?.hideHeaders,
165
+ hideMessage: error.message.indexOf(error.httpError.message) >= 0
166
+ }));
167
+ isHttp = true;
168
+ }
169
+ if (error instanceof MngActionError) {
170
+ if (error.actionContext) {
171
+ strBlocks.push(ErrorUtil.mngActionErrorContextToString(error, opts));
172
+ }
173
+ if (!opts?.hideHttp && error.httpError) {
174
+ strBlocks.push(ErrorUtil.httpErrorResponseToString(error.httpError, {
175
+ hideBody: opts?.hideItems || opts?.hideBody,
176
+ hideHeaders: opts?.hideHeaders,
177
+ hideMessage: error.message.indexOf(error.httpError.message) >= 0
178
+ }));
179
+ isHttp = true;
180
+ }
181
+ }
182
+ if (!opts?.hideDetails && error.details) {
183
+ strBlocks.push(`Details: ${StringUtil.stringify(error.details)}`);
184
+ }
185
+ if (!opts?.hideCause && (!isHttp || !(error.cause instanceof HttpErrorResponse))) {
186
+ strBlocks.push(ErrorUtil.errorCauseToString(error, opts));
187
+ }
188
+ if (!opts?.hideStack && error.stack) {
189
+ strBlocks.push(`Stack trace:\n${error.stack}`);
190
+ }
191
+ return strBlocks.filter(s => s.trim().length > 0).join('\n');
192
+ }
193
+ /**
194
+ * Writes Mng action error info from context as string.
195
+ * @param error Mng action error.
196
+ * @param opts Options for hiding parts of error:
197
+ * - hideItems Hides all item related information (item, form item, submit item, ...).
198
+ * - hideActionData Hides action data.
199
+ * - hideQueryParams Hides query params.
200
+ */
201
+ static mngActionErrorContextToString(error, opts) {
202
+ let paramsMessage = '';
203
+ if (error.actionContext?.parameters) {
204
+ if (error.actionContext?.parameters.itemId) {
205
+ paramsMessage += `[itemId: ${error.actionContext.parameters.itemId}]`;
206
+ }
207
+ if (!opts?.hideItems && error.actionContext?.parameters.item) {
208
+ paramsMessage += `[item: ${StringUtil.stringify(error.actionContext.parameters.item)}]`;
209
+ }
210
+ if (!opts?.hideActionData && error.actionContext?.parameters.actionData) {
211
+ paramsMessage += Object.entries(error.actionContext?.parameters.actionData).reduce((acc, [key, value]) => `${acc}[actionData ${key}: ${StringUtil.stringify(value)}]`, '');
212
+ }
213
+ if (!opts?.hideQueryParams && error.actionContext?.parameters.queryParam) {
214
+ paramsMessage += `[queryParam: ${StringUtil.stringify(error.actionContext.parameters.queryParam)}]`;
215
+ }
216
+ if (!opts?.hideItems && error.actionContext?.parameters.formItem) {
217
+ paramsMessage += `[formItem: ${StringUtil.stringify(error.actionContext.parameters.formItem)}]`;
218
+ }
219
+ if (!opts?.hideItems && error.actionContext?.parameters.submitResult) {
220
+ paramsMessage += `[formItem: ${StringUtil.stringify(error.actionContext.parameters.submitResult)}]`;
221
+ }
222
+ if (error.actionContext?.parameters.locale) {
223
+ paramsMessage += `[locale: ${StringUtil.stringify(error.actionContext.parameters.locale)}]`;
224
+ }
225
+ }
226
+ return paramsMessage;
227
+ }
228
+ /**
229
+ * Writes cause of an error as string.
230
+ * @param error Error.
231
+ * @param opts Options for hiding parts of error:
232
+ * - causeOnErrorOnly Prints only if cause is instance of error.
233
+ * - causeAsJson Print error cause as a JSON (by default, if error only message and name will be printed).
234
+ */
235
+ static errorCauseToString(error, opts) {
236
+ // if already logged as http error, check that cause is not also http error (cause it is usually duplicated)
237
+ if (error.cause && (!opts?.causeOnErrorOnly || error.cause instanceof Error)) {
238
+ const stringify = opts?.causeAsJson || !(error.cause instanceof Error);
239
+ if (!opts?.causeOnErrorOnly || error.cause instanceof Error) {
240
+ return ('Caused by: ' +
241
+ (stringify ? StringUtil.stringify(error.cause) : `${error.cause.message}${error.cause.name ? ` (${error.cause.name})` : ''}`));
242
+ }
243
+ }
244
+ return '';
245
+ }
246
+ }
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvZXJyb3IudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQXVCLFlBQVksRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMzSCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE1BQU0sT0FBTyxTQUFTO0lBQ2xCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQVUsRUFBRSxJQUFhLEVBQUUsT0FBYTtRQUNyRSxNQUFNLElBQUksR0FBd0I7WUFDOUIsSUFBSTtZQUNKLE9BQU87WUFDUCxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJO1NBQ25DLENBQUM7UUFFRixJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRTtZQUNwQyxPQUFPLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUkscUJBQXFCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hGO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixPQUFPLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqRjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBVTtRQUN4QyxPQUFPLEtBQUssWUFBWSxpQkFBaUIsSUFBSSxLQUFLLFlBQVksWUFBWSxJQUFJLENBQUMsS0FBSyxZQUFZLGNBQWMsSUFBSyxLQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNKLENBQUM7SUFFRDs7O09B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QUFDLENBQUMsQ0FBQyxLQUFNLEtBQUssQ0FBQyxLQUFlLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ2pLLENBQUM7YUFDTDtTQUNKO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7QU1uZ0Vycm9yQmFzZSwgTG9nTGV2ZWxFbnVtLCBNbmdBY3Rpb25FcnJvciwgTW5nRXJyb3JCYXNlT3B0aW9ucywgTW5nSHR0cEVycm9yLCBNbmdJbnRlcm5hbEVycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtTdHJpbmdVdGlsfSBmcm9tICcuL3N0cmluZy51dGlsJztcblxuZXhwb3J0IGNsYXNzIEVycm9yVXRpbCB7XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgUnhKUyBzdWJzY3JpcHRpb24gZXJyb3IgdG8gTW5nRXJyb3IuXG4gICAgICogQHBhcmFtIGVycm9yIEVycm9yLlxuICAgICAqIEBwYXJhbSBuYW1lIE9wdGlvbmFsIG5hbWUgdG8gd3JpdGUgaW4gbW5nRXJyb3IuXG4gICAgICogQHBhcmFtIGRldGFpbHMgT3B0aW9uYWwgZGV0YWlscyBvZiBlcnJvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21TdWJzY3JpYmVFcnJvcihlcnJvcjogYW55LCBuYW1lPzogc3RyaW5nLCBkZXRhaWxzPzogYW55KTogQU1uZ0Vycm9yQmFzZSB7XG4gICAgICAgIGNvbnN0IG9wdHM6IE1uZ0Vycm9yQmFzZU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZGV0YWlscyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW5nSHR0cEVycm9yKGVycm9yLm1lc3NhZ2UgPz8gJ0h0dHAgRXJyb3Igb2NjdXJyZWQnLCBlcnJvciwgb3B0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRzLmNhdXNlID0gZXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1uZ0ludGVybmFsRXJyb3IoZXJyb3IubWVzc2FnZSA/PyAnSW50ZXJuYWwgRXJyb3Igb2NjdXJyZWQnLCBvcHRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBlcnJvciBpcyBIdHRwIGVycm9yIChBbmd1bGFyIG9yIE1uZykuXG4gICAgICogQHBhcmFtIGVycm9yXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpc0h0dHBFcnJvclJlc3BvbnNlKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgfHwgZXJyb3IgaW5zdGFuY2VvZiBNbmdIdHRwRXJyb3IgfHwgKGVycm9yIGluc3RhbmNlb2YgTW5nQWN0aW9uRXJyb3IgJiYgKGVycm9yIGFzIE1uZ0FjdGlvbkVycm9yKS5odHRwRXJyb3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgSHR0cEVycm9yUmVzcG9uc2UgZnJvbSBlcnJvciAoQW5ndWxhciBvciBNbmcpLlxuICAgICAqIEBwYXJhbSBlcnJvciBFcnJvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldEh0dHBFcnJvclJlc3BvbnNlKGVycm9yOiBhbnkpOiBIdHRwRXJyb3JSZXNwb25zZSB8IG51bGwge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9IGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgTW5nSHR0cEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3IuaHR0cEVycm9yO1xuICAgICAgICB9IGVsc2UgaWYgKGVycm9yIGluc3RhbmNlb2YgTW5nQWN0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci5odHRwRXJyb3IgPz8gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBIdHRwRXJyb3JSZXNwb25zZSBzdGF0dXMgZnJvbSBlcnJvciAoQW5ndWxhciBvciBNbmcpLlxuICAgICAqIEBwYXJhbSBlcnJvciBFcnJvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldEh0dHBFcnJvclJlc3BvbnNlU3RhdHVzKGVycm9yOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIEVycm9yVXRpbC5nZXRIdHRwRXJyb3JSZXNwb25zZShlcnJvcik/LnN0YXR1cyA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBlcnJvciBsb2cgbGV2ZWwuIEFsbCBpcyBlcnJvciwgZXhjZXB0IGlmIGVycm9yIGlzIGh0dHAgZXJyb3Igd2l0aCBzdGF0dXMgPj00MDAgYW5kIDw1MDAuXG4gICAgICogQHBhcmFtIGVycm9yIEVycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RXJyb3JMb2dMZXZlbChlcnJvcjogYW55KTogTG9nTGV2ZWxFbnVtIHtcbiAgICAgICAgaWYgKEVycm9yVXRpbC5pc0h0dHBFcnJvclJlc3BvbnNlKGVycm9yKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gRXJyb3JVdGlsLmdldEh0dHBFcnJvclJlc3BvbnNlU3RhdHVzKGVycm9yKTtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzID49IDQwMCAmJiBzdGF0dXMgPCA1MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTG9nTGV2ZWxFbnVtLldhcm5pbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIExvZ0xldmVsRW51bS5FcnJvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZXJyb3IgbmFtZSAocHJvdG90eXBlIG5hbWUgb3IgdHlwZSBmcm9tIG1uZyBlcnJvciBpZiBuYW1lIGlzIG5vdCBwcm92aWRlZCkuXG4gICAgICogQHBhcmFtIGVycm9yIEVycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RXJyb3JOYW1lKGVycm9yOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBTW5nRXJyb3JCYXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3IubmFtZSA/PyBlcnJvci50eXBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yLm5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgaHR0cCBlcnJvciB0byBzdHJpbmcgd2l0aCBhbGwgaGVhZGVycyBhbmQgYm9keS5cbiAgICAgKiBAcGFyYW0gZXJyb3IgSHR0cCByZXNwb25zZSBlcnJvci5cbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25zIGZvciBoaWRpbmcgcGFydHMgb2YgZXJyb3I6XG4gICAgICogIC0gaGlkZU1lc3NhZ2UgSGlkZXMgbWVzc2FnZSBvZiBlcnJvciAobWVzc2FnZSBpbmNsdWRlIHVybCwgc3RhdHVzIGFuZCBzdGF0dXMgdGV4dCEpLlxuICAgICAqICAtIGhpZGVIZWFkZXJzIEhpZGVzIGhlYWRlcnMuXG4gICAgICogIC0gaGlkZUJvZHkgSGlkZXMgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBib2R5LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZyhlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsIG9wdHM/OiBIdHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzdHIgPSBvcHRzPy5oaWRlTWVzc2FnZSA/ICcnIDogYCR7ZXJyb3IubWVzc2FnZX1cXG5gOyAvLyBtZXNzYWdlIHNob3VsZCBhbHJlYWR5IGluY2x1ZGUgdXJsLCBzdGF0dXMsIGV0Yy5cbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlSGVhZGVycykge1xuICAgICAgICAgICAgc3RyICs9IGBIdHRwIFJlc3BvbnNlIEhlYWRlcnM6ICR7ZXJyb3IuaGVhZGVycy5rZXlzKCkucmVkdWNlKChhY2MsIGtleSkgPT4gYCR7YWNjfVske2tleX06ICR7ZXJyb3IuaGVhZGVycy5nZXQoa2V5KX1dYCwgJycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlQm9keSkge1xuICAgICAgICAgICAgc3RyICs9IGBcXG5IdHRwIFJlc3BvbnNlIEJvZHk6ICR7U3RyaW5nVXRpbC5zdHJpbmdpZnkoZXJyb3IuZXJyb3IpfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFcnJvciB0byBzdHJpbmcuXG4gICAgICogQHBhcmFtIGVycm9yIEVycm9yLlxuICAgICAqIEBwYXJhbSBvcHRzIE9wdGlvbnMgZm9yIGhpZGluZyBwYXJ0cyBvZiBlcnJvcjpcbiAgICAgKiAtIGhpZGVNZXNzYWdlIEhpZGVzIG1lc3NhZ2Ugb2YgZXJyb3IuXG4gICAgICogLSBoaWRlTmFtZSBIaWRlcyBlcnJvciBuYW1lLlxuICAgICAqIC0gaGlkZUNhdXNlIEhpZGVzIGNhdXNlIG9mIGFuIGVycm9yIChpZiBwcmVzZW50LCBzZWUgQGxpbmsoZXJyb3JDYXVzZVRvU3RyaW5nKSBmb3Igb3RoZXIgb3B0aW9ucykuXG4gICAgICogLSBoaWRlU3RhY2sgSGlkZXMgc3RhY2sgb2YgYW4gZXJyb3IgKGlmIHByZXNlbnQpLlxuICAgICAqIC0gaGlkZURldGFpbHMgSGlkZXMgSlNPTiBkZXRhaWwncyByZXByZXNlbnRhdGlvbiBvZiBlcnJvciAoaWYgcHJlc2VudCkuXG4gICAgICogLSBoaWRlTG9jYXRpb24gSGlkZXMgbG9jYXRpb24gKFVSTCkgd2hlcmUgZXJyb3Igd2FzIHRocm93bi5cbiAgICAgKiAtIGhpZGVIdHRwIEhpZGVzIGh0dHAgZXJyb3IgcG9ydGlvbiBvZiBlcnJvciBpZiBodHRwIGVycm9yIHJlc3BvbnNlIChzZWUgQGxpbmsoaHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZykgZm9yIG90aGVyIG9wdGlvbnMpLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZXJyb3JUb1N0cmluZyhlcnJvcjogRXJyb3IsIG9wdHM/OiBFcnJvclRvU3RyaW5nT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFNbmdFcnJvckJhc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBFcnJvclV0aWwubW5nRXJyb3JUb1N0cmluZyhlcnJvciwgb3B0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIEVycm9yVXRpbC5odHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nKGVycm9yLCBvcHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0ckJsb2Nrczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlTWVzc2FnZSkge1xuICAgICAgICAgICAgc3RyQmxvY2tzLnB1c2goZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLm5hbWUpIHtcbiAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKGBFcnJvciBuYW1lOiAke2Vycm9yLm5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlQ2F1c2UpIHtcbiAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKEVycm9yVXRpbC5lcnJvckNhdXNlVG9TdHJpbmcoZXJyb3IsIG9wdHMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVTdGFjayAmJiBlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgc3RyQmxvY2tzLnB1c2goYFN0YWNrIHRyYWNlOlxcbiR7ZXJyb3Iuc3RhY2t9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RyQmxvY2tzLmZpbHRlcihzID0+IHMudHJpbSgpLmxlbmd0aCA+IDApLmpvaW4oJ1xcbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1uZyBlcnJvciB0byBzdHJpbmcuXG4gICAgICogQHBhcmFtIGVycm9yIE1uZyBlcnJvci5cbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25zIGZvciBoaWRpbmcgcGFydHMgb2YgZXJyb3I6XG4gICAgICogLSBoaWRlTWVzc2FnZSBIaWRlcyBtZXNzYWdlIG9mIGVycm9yLlxuICAgICAqIC0gaGlkZU5hbWUgSGlkZXMgZXJyb3IgbmFtZS5cbiAgICAgKiAtIGhpZGVDYXVzZSBIaWRlcyBjYXVzZSBvZiBhbiBlcnJvciAoaWYgcHJlc2VudCwgc2VlIEBsaW5rKGVycm9yQ2F1c2VUb1N0cmluZykgZm9yIG90aGVyIG9wdGlvbnMpLlxuICAgICAqIC0gaGlkZVN0YWNrIEhpZGVzIHN0YWNrIG9mIGFuIGVycm9yIChpZiBwcmVzZW50KS5cbiAgICAgKiAtIGhpZGVEZXRhaWxzIEhpZGVzIEpTT04gZGV0YWlsJ3MgcmVwcmVzZW50YXRpb24gb2YgZXJyb3IgKGlmIHByZXNlbnQpLlxuICAgICAqIC0gaGlkZUxvY2F0aW9uIEhpZGVzIGxvY2F0aW9uIChVUkwpIHdoZXJlIGVycm9yIHdhcyB0aHJvd24uXG4gICAgICogLSBoaWRlSHR0cCBIaWRlcyBodHRwIGVycm9yIHBvcnRpb24gb2YgZXJyb3IgaWYgaHR0cCBlcnJvciByZXNwb25zZSAoc2VlIEBsaW5rKGh0dHBFcnJvclJlc3BvbnNlVG9TdHJpbmcpIGZvciBvdGhlciBvcHRpb25zKS5cbiAgICAgKiAtIGhpZGVJdGVtcyBIaWRlcyBhbGwgaXRlbSBpbmZvcm1hdGlvbiAoaHR0cCBib2R5LCBhY3Rpb24gY29udGV4dCBkYXRhKS5cbiAgICAgKiAtIGhpZGVBY3Rpb25EYXRhIFNlZSBAbGluayhtbmdBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZykgZm9yIGFkZGl0aW9uYWwgaW5mby5cbiAgICAgKiAtIGhpZGVRdWVyeVBhcmFtcyBTZWUgQGxpbmsobW5nQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcpIGZvciBhZGRpdGlvbmFsIGluZm8uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBtbmdFcnJvclRvU3RyaW5nKGVycm9yOiBBTW5nRXJyb3JCYXNlLCBvcHRzPzogTW5nRXJyb3JUb1N0cmluZ09wdGlvbnMpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzdHJCbG9ja3M6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICghb3B0cz8uaGlkZU1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKGAke2Vycm9yLm1lc3NhZ2V9JHtlcnJvci5tZXNzYWdlQ29kZSA/IGAgKGNvZGU6ICR7ZXJyb3IubWVzc2FnZUNvZGV9KWAgOiAnJ31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVOYW1lKSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChgRXJyb3IgbmFtZTogJHtlcnJvci5uYW1lID8/IGVycm9yLnR5cGV9ICR7ZXJyb3IubmFtZSA/IGAoJHtlcnJvci50eXBlfSlgIDogJyd9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlTG9jYXRpb24gJiYgZXJyb3IubG9jYXRpb24pIHtcbiAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKGBMb2NhdGlvbjogJHtlcnJvci5sb2NhdGlvbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc0h0dHAgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlSHR0cCAmJiBlcnJvciBpbnN0YW5jZW9mIE1uZ0h0dHBFcnJvcikge1xuICAgICAgICAgICAgc3RyQmxvY2tzLnB1c2goXG4gICAgICAgICAgICAgICAgRXJyb3JVdGlsLmh0dHBFcnJvclJlc3BvbnNlVG9TdHJpbmcoZXJyb3IuaHR0cEVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgIGhpZGVCb2R5OiBvcHRzPy5oaWRlSXRlbXMgfHwgb3B0cz8uaGlkZUJvZHksXG4gICAgICAgICAgICAgICAgICAgIGhpZGVIZWFkZXJzOiBvcHRzPy5oaWRlSGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgaGlkZU1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UuaW5kZXhPZihlcnJvci5odHRwRXJyb3IubWVzc2FnZSkgPj0gMFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaXNIdHRwID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNbmdBY3Rpb25FcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yLmFjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBzdHJCbG9ja3MucHVzaChFcnJvclV0aWwubW5nQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcoZXJyb3IsIG9wdHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb3B0cz8uaGlkZUh0dHAgJiYgZXJyb3IuaHR0cEVycm9yKSB7XG4gICAgICAgICAgICAgICAgc3RyQmxvY2tzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIEVycm9yVXRpbC5odHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nKGVycm9yLmh0dHBFcnJvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUJvZHk6IG9wdHM/LmhpZGVJdGVtcyB8fCBvcHRzPy5oaWRlQm9keSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVIZWFkZXJzOiBvcHRzPy5oaWRlSGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVNZXNzYWdlOiBlcnJvci5tZXNzYWdlLmluZGV4T2YoZXJyb3IuaHR0cEVycm9yLm1lc3NhZ2UpID49IDBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlzSHR0cCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVEZXRhaWxzICYmIGVycm9yLmRldGFpbHMpIHtcbiAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKGBEZXRhaWxzOiAke1N0cmluZ1V0aWwuc3RyaW5naWZ5KGVycm9yLmRldGFpbHMpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0cz8uaGlkZUNhdXNlICYmICghaXNIdHRwIHx8ICEoZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkpKSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChFcnJvclV0aWwuZXJyb3JDYXVzZVRvU3RyaW5nKGVycm9yLCBvcHRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlU3RhY2sgJiYgZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKGBTdGFjayB0cmFjZTpcXG4ke2Vycm9yLnN0YWNrfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0ckJsb2Nrcy5maWx0ZXIocyA9PiBzLnRyaW0oKS5sZW5ndGggPiAwKS5qb2luKCdcXG4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgTW5nIGFjdGlvbiBlcnJvciBpbmZvIGZyb20gY29udGV4dCBhcyBzdHJpbmcuXG4gICAgICogQHBhcmFtIGVycm9yIE1uZyBhY3Rpb24gZXJyb3IuXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICAgICAqIC0gaGlkZUl0ZW1zIEhpZGVzIGFsbCBpdGVtIHJlbGF0ZWQgaW5mb3JtYXRpb24gKGl0ZW0sIGZvcm0gaXRlbSwgc3VibWl0IGl0ZW0sIC4uLikuXG4gICAgICogLSBoaWRlQWN0aW9uRGF0YSBIaWRlcyBhY3Rpb24gZGF0YS5cbiAgICAgKiAtIGhpZGVRdWVyeVBhcmFtcyBIaWRlcyBxdWVyeSBwYXJhbXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBtbmdBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZyhlcnJvcjogTW5nQWN0aW9uRXJyb3IsIG9wdHM/OiBNbmdBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZ09wdGlvbnMpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcGFyYW1zTWVzc2FnZSA9ICcnO1xuICAgICAgICBpZiAoZXJyb3IuYWN0aW9uQ29udGV4dD8ucGFyYW1ldGVycykge1xuICAgICAgICAgICAgaWYgKGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMuaXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBgW2l0ZW1JZDogJHtlcnJvci5hY3Rpb25Db250ZXh0LnBhcmFtZXRlcnMuaXRlbUlkfV1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRzPy5oaWRlSXRlbXMgJiYgZXJyb3IuYWN0aW9uQ29udGV4dD8ucGFyYW1ldGVycy5pdGVtKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBgW2l0ZW06ICR7U3RyaW5nVXRpbC5zdHJpbmdpZnkoZXJyb3IuYWN0aW9uQ29udGV4dC5wYXJhbWV0ZXJzLml0ZW0pfV1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRzPy5oaWRlQWN0aW9uRGF0YSAmJiBlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNNZXNzYWdlICs9IE9iamVjdC5lbnRyaWVzKGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IGAke2FjY31bYWN0aW9uRGF0YSAke2tleX06ICR7U3RyaW5nVXRpbC5zdHJpbmdpZnkodmFsdWUpfV1gLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9wdHM/LmhpZGVRdWVyeVBhcmFtcyAmJiBlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLnF1ZXJ5UGFyYW0pIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNNZXNzYWdlICs9IGBbcXVlcnlQYXJhbTogJHtTdHJpbmdVdGlsLnN0cmluZ2lmeShlcnJvci5hY3Rpb25Db250ZXh0LnBhcmFtZXRlcnMucXVlcnlQYXJhbSl9XWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9wdHM/LmhpZGVJdGVtcyAmJiBlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLmZvcm1JdGVtKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBgW2Zvcm1JdGVtOiAke1N0cmluZ1V0aWwuc3RyaW5naWZ5KGVycm9yLmFjdGlvbkNvbnRleHQucGFyYW1ldGVycy5mb3JtSXRlbSl9XWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9wdHM/LmhpZGVJdGVtcyAmJiBlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLnN1Ym1pdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtmb3JtSXRlbTogJHtTdHJpbmdVdGlsLnN0cmluZ2lmeShlcnJvci5hY3Rpb25Db250ZXh0LnBhcmFtZXRlcnMuc3VibWl0UmVzdWx0KX1dYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLmxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtsb2NhbGU6ICR7U3RyaW5nVXRpbC5zdHJpbmdpZnkoZXJyb3IuYWN0aW9uQ29udGV4dC5wYXJhbWV0ZXJzLmxvY2FsZSl9XWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1zTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXcml0ZXMgY2F1c2Ugb2YgYW4gZXJyb3IgYXMgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBlcnJvciBFcnJvci5cbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25zIGZvciBoaWRpbmcgcGFydHMgb2YgZXJyb3I6XG4gICAgICogLSBjYXVzZU9uRXJyb3JPbmx5IFByaW50cyBvbmx5IGlmIGNhdXNlIGlzIGluc3RhbmNlIG9mIGVycm9yLlxuICAgICAqIC0gY2F1c2VBc0pzb24gUHJpbnQgZXJyb3IgY2F1c2UgYXMgYSBKU09OIChieSBkZWZhdWx0LCBpZiBlcnJvciBvbmx5IG1lc3NhZ2UgYW5kIG5hbWUgd2lsbCBiZSBwcmludGVkKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGVycm9yQ2F1c2VUb1N0cmluZyhlcnJvcjogRXJyb3IsIG9wdHM/OiBFcnJvckNhdXNlVG9TdHJpbmdPcHRpb25zKTogc3RyaW5nIHtcbiAgICAgICAgLy8gaWYgYWxyZWFkeSBsb2dnZWQgYXMgaHR0cCBlcnJvciwgY2hlY2sgdGhhdCBjYXVzZSBpcyBub3QgYWxzbyBodHRwIGVycm9yIChjYXVzZSBpdCBpcyB1c3VhbGx5IGR1cGxpY2F0ZWQpXG4gICAgICAgIGlmIChlcnJvci5jYXVzZSAmJiAoIW9wdHM/LmNhdXNlT25FcnJvck9ubHkgfHwgZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ2lmeSA9IG9wdHM/LmNhdXNlQXNKc29uIHx8ICEoZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcik7XG4gICAgICAgICAgICBpZiAoIW9wdHM/LmNhdXNlT25FcnJvck9ubHkgfHwgZXJyb3IuY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdDYXVzZWQgYnk6ICcgK1xuICAgICAgICAgICAgICAgICAgICAoc3RyaW5naWZ5ID8gU3RyaW5nVXRpbC5zdHJpbmdpZnkoZXJyb3IuY2F1c2UpIDogYCR7KGVycm9yLmNhdXNlIGFzIEVycm9yKS5tZXNzYWdlfSR7KGVycm9yLmNhdXNlIGFzIEVycm9yKS5uYW1lID8gYCAoJHsoZXJyb3IuY2F1c2UgYXMgRXJyb3IpLm5hbWV9KWAgOiAnJ31gKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JUb1N0cmluZ09wdGlvbnMgPSBNbmdFcnJvclRvU3RyaW5nT3B0aW9ucztcblxuZXhwb3J0IHR5cGUgTW5nRXJyb3JUb1N0cmluZ09wdGlvbnMgPSBFcnJvclRvU3RyaW5nT3B0aW9uc0Jhc2UgJlxuICAgIEh0dHBFcnJvclJlc3BvbnNlVG9TdHJpbmdPcHRpb25zICZcbiAgICBNbmdBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZ09wdGlvbnMgJlxuICAgIEVycm9yQ2F1c2VUb1N0cmluZ09wdGlvbnMgJiB7XG4gICAgICAgIGhpZGVEZXRhaWxzPzogYm9vbGVhbjtcbiAgICAgICAgaGlkZUxvY2F0aW9uPzogYm9vbGVhbjtcbiAgICB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yVG9TdHJpbmdPcHRpb25zQmFzZSB7XG4gICAgaGlkZU5hbWU/OiBib29sZWFuO1xuICAgIGhpZGVTdGFjaz86IGJvb2xlYW47XG4gICAgaGlkZUNhdXNlPzogYm9vbGVhbjtcbiAgICBoaWRlSHR0cD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZ09wdGlvbnMge1xuICAgIGhpZGVNZXNzYWdlPzogYm9vbGVhbjtcbiAgICBoaWRlSGVhZGVycz86IGJvb2xlYW47XG4gICAgaGlkZUJvZHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1uZ0FjdGlvbkVycm9yQ29udGV4dFRvU3RyaW5nT3B0aW9ucyB7XG4gICAgaGlkZUl0ZW1zPzogYm9vbGVhbjtcbiAgICBoaWRlQWN0aW9uRGF0YT86IGJvb2xlYW47XG4gICAgaGlkZVF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvckNhdXNlVG9TdHJpbmdPcHRpb25zIHtcbiAgICBjYXVzZU9uRXJyb3JPbmx5PzogYm9vbGVhbjtcbiAgICBjYXVzZUFzSnNvbj86IGJvb2xlYW47XG59XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { of } from 'rxjs';
2
2
  import { map, mergeMap } from 'rxjs/operators';
3
+ import { ErrorUtil } from './error.util';
3
4
  import { TypeUtil } from './type.util';
4
5
  export var I18nUtils;
5
6
  (function (I18nUtils) {
@@ -258,14 +259,11 @@ export var I18nUtils;
258
259
  const paramsRes = { ...params };
259
260
  paramsRes.errorStatus = '';
260
261
  paramsRes.errorMessage = '';
261
- if (error.status) {
262
- paramsRes.errorStatus = error.status;
263
- }
264
- if (error.message) {
265
- paramsRes.errorMessage = error.message;
266
- }
267
- if (error.statusDescription) {
268
- paramsRes.errorStatusDescription = error.statusDescription;
262
+ if (ErrorUtil.isHttpErrorResponse(error)) {
263
+ const httpError = ErrorUtil.getHttpErrorResponse(error);
264
+ paramsRes.errorStatus = httpError?.status;
265
+ paramsRes.errorMessage = httpError?.message;
266
+ paramsRes.errorStatusDescription = httpError?.statusText;
269
267
  }
270
268
  paramsRes.error = error;
271
269
  return paramsRes;
@@ -273,4 +271,4 @@ export var I18nUtils;
273
271
  }
274
272
  I18nUtils.Error = Error;
275
273
  })(I18nUtils || (I18nUtils = {}));
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9pMThuLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBTzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFckMsTUFBTSxLQUFXLFNBQVMsQ0FxVnpCO0FBclZELFdBQWlCLFNBQVM7SUFDdEIsTUFBYSxNQUFNO1FBQ1IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUEyQixFQUFFLE1BQVksRUFBRSxHQUFHLElBQW1CO1lBQ3BGLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckcsQ0FBQztRQUVNLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBMkIsRUFBRSxNQUFZLEVBQUUsR0FBRyxJQUFtQjtZQUMvRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFVLEVBQUUsU0FBYyxFQUFFO1lBQ3JELE1BQU0sU0FBUyxHQUFHLEVBQUMsR0FBRyxNQUFNLEVBQUMsQ0FBQztZQUM5QixJQUFJLElBQUksRUFBRTtnQkFDTixTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzth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RCxNQUFNLFNBQVMsR0FBRyxFQUFDLEdBQUcsTUFBTSxFQUFDLENBQUM7WUFDOUIsU0FBUyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDM0IsU0FBUyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFFNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNkLFNBQVMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzthQUN4QztZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDZixTQUFTLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDMUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDekIsU0FBUyxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQzthQUM5RDtZQUNELFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7S0FDSjtJQTlCWSxlQUFLLFFBOEJqQixDQUFBO0FBQ0wsQ0FBQyxFQXJWZ0IsU0FBUyxLQUFULFNBQVMsUUFxVnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge01uZ0Vycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtDbGFzc1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7STE4blR5cGV9IGZyb20gJy4uL3R5cGVzL2kxOG4udHlwZSc7XG5pbXBvcnQge1R5cGVVdGlsfSBmcm9tICcuL3R5cGUudXRpbCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgSTE4blV0aWxzIHtcbiAgICBleHBvcnQgY2xhc3MgQ29tbW9uIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHBhcmFtcz86IGFueSwgLi4ua2V5czogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZS5zdHJlYW0oa2V5cywgcGFyYW1zKS5waXBlKG1hcChpMThuID0+IEkxOG5VdGlscy5Db21tb24uc2VsZWN0STE4bihrZXlzLCBpMThuKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwYXJhbXM/OiBhbnksIC4uLmtleXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG4gPSB0cmFuc2xhdGUuaW5zdGFudChrZXlzLCBwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uc2VsZWN0STE4bihrZXlzLCBpMThuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcG9wdWxhdGVQYXJhbXMoaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHBhcmFtc1Jlcy5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJhbXNSZXM7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIHNlbGVjdEkxOG4oa2V5czogc3RyaW5nW10sIGkxOG46IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IGkxOG5ba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTE4bltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIFR5cGUge1xuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzTmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldE5hbWVBc3luYyh0cmFuc2xhdGUsIHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzTmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGNsYXNzVHlwZTogQ2xhc3NUeXBlPGFueT4sIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUoY2xhc3NUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXROYW1lKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdHlwZU5hbWU6IHN0cmluZywgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZUtleXModHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQ29tbW9uLmdldEFzeW5jKHRyYW5zbGF0ZSwgdW5kZWZpbmVkLCAuLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEkxOG5VdGlscy5UeXBlLmdldE5hbWVLZXlzKHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkNvbW1vbi5nZXQodHJhbnNsYXRlLCB1bmRlZmluZWQsIC4uLmtleXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRDbGFzc1RhYktleShjbGFzc1R5cGU6IENsYXNzVHlwZTxhbnk+LCB0YWI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFRhYktleSh0eXBlTmFtZSwgdGFiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0VGFiS2V5KHR5cGVOYW1lOiBzdHJpbmcsIHRhYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXRQYXRoKHR5cGVOYW1lLCAndGFicycsIHRhYik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzR3JvdXBLZXkoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgZ3JvdXA6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldEdyb3VwS2V5KHR5cGVOYW1lLCBncm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEdyb3VwS2V5KHR5cGVOYW1lOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsICdncm91cHMnLCBncm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzUHJvcGVydHlLZXkoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgcHJvcGVydHk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFByb3BlcnR5S2V5KHR5cGVOYW1lLCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFByb3BlcnR5S2V5KHR5cGVOYW1lOiBzdHJpbmcsIHByb3BlcnR5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsICdwcm9wZXJ0aWVzJywgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRDbGFzc1BhdGgoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgLi4ucGF0aDogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsIC4uLnBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXRoKHR5cGVOYW1lOiBzdHJpbmcsIC4uLnBhdGg6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIGAke3R5cGVOYW1lfS4ke3BhdGguam9pbignLicpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzUGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgaXRlbTogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gVHlwZVV0aWwuZmluZFR5cGVOYW1lKGNsYXNzVHlwZSk7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5UeXBlTmFtZSA9IHR5cGVOYW1lID8gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZSh0cmFuc2xhdGUsIHR5cGVOYW1lLCB0cnVlKSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUucG9wdWxhdGVQYXJhbXMoaTE4blR5cGVOYW1lID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q2xhc3NQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGNsYXNzVHlwZTogQ2xhc3NUeXBlPGFueT4sIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUoY2xhc3NUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXRQYXJhbXNBc3luYyh0cmFuc2xhdGUsIHR5cGVOYW1lLCBpdGVtLCBwYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgICAgIHJldHVybiAodHlwZU5hbWUgPyBJMThuVXRpbHMuVHlwZS5nZXROYW1lQXN5bmModHJhbnNsYXRlLCB0eXBlTmFtZSwgdHJ1ZSkgOiBvZihudWxsKSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blR5cGVOYW1lID0+IEkxOG5VdGlscy5UeXBlLnBvcHVsYXRlUGFyYW1zKGkxOG5UeXBlTmFtZSA/PyB1bmRlZmluZWQsIGl0ZW0sIHBhcmFtcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBwb3B1bGF0ZVBhcmFtcyhpMThuVHlwZU5hbWU/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBpZiAoaTE4blR5cGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLnR5cGVOYW1lID0gaTE4blR5cGVOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24ucG9wdWxhdGVQYXJhbXMoaXRlbSwgcGFyYW1zUmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgc3RhdGljIGdldE5hbWVLZXlzKHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzaW5ndWxhciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goc2luZ3VsYXIgPyBgJHt0eXBlTmFtZX0ubmFtZVNpbmd1bGFyYCA6IGAke3R5cGVOYW1lfS5uYW1lUGx1cmFsYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXlzLnB1c2goYCR7dHlwZU5hbWV9Lm5hbWVgKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIE1vZGVsIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQoXG4gICAgICAgICAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBrZXlQYXRoOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXN0b21LZXk/OiBzdHJpbmcsXG4gICAgICAgICAgICBpdGVtPzogYW55LFxuICAgICAgICAgICAgZmFsbGJhY2tLZXk/OiBzdHJpbmcsXG4gICAgICAgICAgICBwYXJhbXM/OiBhbnlcbiAgICAgICAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLk1vZGVsLmdldEtleXNCeVByaW9yaXR5KG1vZGVsLCBrZXlQYXRoLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgbW9kZWwsIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkNvbW1vbi5nZXQodHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZSh0cmFuc2xhdGUsIG1vZGVsLmkxOG5CYXNlS2V5LCBzaW5ndWxhcik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldE5hbWVBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZUFzeW5jKHRyYW5zbGF0ZSwgbW9kZWwuaTE4bkJhc2VLZXksIHNpbmd1bGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0UGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbW9kZWw/OiBNb2RlbERlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBpMThuUGFyYW1zID0gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgbW9kZWw/LmkxOG5CYXNlS2V5LCBpdGVtLCBwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Nb2RlbC5wb3B1bGF0ZVBhcmFtcyhtb2RlbD8uaWRQcm9wZXJ0eU5hbWUsIG1vZGVsPy50aXRsZVByb3BlcnR5TmFtZSwgaXRlbSwgaTE4blBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtc0FzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbW9kZWw/OiBNb2RlbERlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zQXN5bmModHJhbnNsYXRlLCBtb2RlbD8uaTE4bkJhc2VLZXksIGl0ZW0sIHBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blBhcmFtcyA9PiBJMThuVXRpbHMuTW9kZWwucG9wdWxhdGVQYXJhbXMobW9kZWw/LmlkUHJvcGVydHlOYW1lLCBtb2RlbD8udGl0bGVQcm9wZXJ0eU5hbWUsIGl0ZW0sIGkxOG5QYXJhbXMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcG9wdWxhdGVQYXJhbXMoaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZywgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXNSZXMgPSB7Li4ucGFyYW1zLCBpdGVtSWQ6ICcnLCBpdGVtVGl0bGU6ICcnfTtcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkUHJvcGVydHkgJiYgaXRlbVtpZFByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNSZXMuaXRlbUlkID0gaXRlbVtpZFByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlUHJvcGVydHkgJiYgaXRlbVt0aXRsZVByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNSZXMuaXRlbVRpdGxlID0gaXRlbVt0aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zUmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZ2V0S2V5c0J5UHJpb3JpdHkobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxhbnk+LCBrZXlQYXRoOiBzdHJpbmcsIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChjdXN0b21LZXkpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsQWN0aW9uS2V5ID0gSTE4blV0aWxzLlR5cGUuZ2V0UGF0aChtb2RlbC5pMThuQmFzZUtleSwgLi4ua2V5UGF0aCk7XG4gICAgICAgICAgICBrZXlzLnB1c2gobW9kZWxBY3Rpb25LZXkpO1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrS2V5KSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRyYW5zbGF0aW9uIGZvciBhY3Rpb24gd2l0aCBnaXZlbiBrZXlzIGFuZCBwYXJhbXNcbiAgICAgICAgICogQHBhcmFtIHRyYW5zbGF0ZSBUcmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgICAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uIGRlc2NyaXB0b3JcbiAgICAgICAgICogQHBhcmFtIGFjdGlvblBhdGhLZXlzIGFjdGlvbiBwYXRoIGtleXNcbiAgICAgICAgICogQHBhcmFtIGN1c3RvbUtleSBjdXN0b20ga2V5XG4gICAgICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICAgICAqIEBwYXJhbSBmYWxsYmFja0tleSBmYWxsYmFjayBrZXlcbiAgICAgICAgICogQHBhcmFtIHBhcmFtcyBhZGRpdGlvbmFsIHBhcmFtcyBmb3IgdHJhbnNsYXRpb25cbiAgICAgICAgICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAgICAgICAgICovXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0KFxuICAgICAgICAgICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICAgICAgICAgIGl0ZW0/OiBhbnksXG4gICAgICAgICAgICBmYWxsYmFja0tleT86IHN0cmluZyxcbiAgICAgICAgICAgIHBhcmFtcz86IGFueSxcbiAgICAgICAgICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuVHlwZSA9ICdyZXR1cm5GaXJzdEtleSdcbiAgICAgICAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLkFjdGlvbi5nZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGFjdGlvblBhdGhLZXlzLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuQWN0aW9uLmdldFBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbiwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5WYWx1ZSA9IEkxOG5VdGlscy5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbkRlcGVuZGluZ09uU3RyYXRlZ3kobWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksIHtpMThuVmFsdWUsIGZpcnN0S2V5OiBrZXlzWzBdLCBmYWxsYmFja0tleX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYXN5bmMgdHJhbnNsYXRpb24gZm9yIGdpdmVuIGtleXMgd2l0aCBnaXZlbiBwYXJhbXMuXG4gICAgICAgICAqIEBwYXJhbSB0cmFuc2xhdGUgVHJhbnNsYXRlU2VydmljZVxuICAgICAgICAgKiBAcGFyYW0gYWN0aW9uIGFjdGlvbiBkZXNjcmlwdG9yXG4gICAgICAgICAqIEBwYXJhbSBhY3Rpb25QYXRoS2V5cyBhY3Rpb24gcGF0aCBrZXlzXG4gICAgICAgICAqIEBwYXJhbSBjdXN0b21LZXkgY3VzdG9tIGtleVxuICAgICAgICAgKiBAcGFyYW0gaXRlbSBpdGVtXG4gICAgICAgICAqIEBwYXJhbSBmYWxsYmFja0tleSBmYWxsYmFjayBrZXksIHVzZWQgYXMgZmFsbGJhY2sga2V5XG4gICAgICAgICAqIEBwYXJhbSBwYXJhbXMgYWRkaXRpb25hbCBwYXJhbXMgZm9yIHRyYW5zbGF0aW9uXG4gICAgICAgICAqIEBwYXJhbSBtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSBzdHJhdGVneSB3aGVuIG5vIHRyYW5zbGF0aW9uIGlzIGZvdW5kXG4gICAgICAgICAqL1xuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEFzeW5jKFxuICAgICAgICAgICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICAgICAgICAgIGl0ZW0/OiBhbnksXG4gICAgICAgICAgICBmYWxsYmFja0tleT86IHN0cmluZyxcbiAgICAgICAgICAgIHBhcmFtcz86IGFueSxcbiAgICAgICAgICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuVHlwZSA9ICdyZXR1cm5GaXJzdEtleSdcbiAgICAgICAgKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkFjdGlvbi5nZXRQYXJhbXNBc3luYyh0cmFuc2xhdGUsIGFjdGlvbiwgaXRlbSwgcGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKGkxOG5QYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLkFjdGlvbi5nZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGFjdGlvblBhdGhLZXlzLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uZ2V0QXN5bmModHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGkxOG5WYWx1ZSA9PiB0aGlzLmdldFRyYW5zbGF0aW9uRGVwZW5kaW5nT25TdHJhdGVneShtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSwge2kxOG5WYWx1ZSwgZmlyc3RLZXk6IGtleXNbMF0sIGZhbGxiYWNrS2V5fSkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0cmFuc2xhdGlvbiBkZXBlbmRpbmcgb24gbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3lcbiAgICAgICAgICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAgICAgICAgICogQHBhcmFtIHZhbHVlcyBvYmplY3Qgd2l0aCB2YWx1ZXMsIGkxOG5WYWx1ZSBpcyB0cmFuc2xhdGlvbiwgZmlyc3RLZXkgaXMgZmlyc3Qga2V5IGluIGFycmF5IG9mIGtleXMsIGZhbGxiYWNrS2V5IGlzIGZhbGxiYWNrIGtleVxuICAgICAgICAgKi9cbiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VHJhbnNsYXRpb25EZXBlbmRpbmdPblN0cmF0ZWd5KFxuICAgICAgICAgICAgbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3k6IEkxOG5UeXBlLFxuICAgICAgICAgICAge2kxOG5WYWx1ZSwgZmlyc3RLZXksIGZhbGxiYWNrS2V5fToge2kxOG5WYWx1ZTogc3RyaW5nIHwgbnVsbDsgZmlyc3RLZXk/OiBzdHJpbmc7IGZhbGxiYWNrS2V5Pzogc3RyaW5nfVxuICAgICAgICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGlmIChpMThuVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTE4blZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JldHVybk51bGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JldHVybkZhbGxiYWNrS2V5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFja0tleSA/PyBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXR1cm5GaXJzdEtleSc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RLZXkgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModHJhbnNsYXRlLCBhY3Rpb24sICd0aXRsZScsIHVuZGVmaW5lZCwgaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEVkaXRvclRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModHJhbnNsYXRlLCBhY3Rpb24sIFsnZWRpdG9yLnRpdGxlJywgJ3RpdGxlJ10sIGFjdGlvbi5lZGl0b3JUaXRsZSA/PyB1bmRlZmluZWQsIGl0ZW0sIHVuZGVmaW5lZCwgYWN0aW9uLmVkaXRvclRpdGxlUGFyYW1zID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgYWN0aW9uLm1vZGVsID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQWN0aW9uLnBvcHVsYXRlUGFyYW1zKGkxOG5QYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zQXN5bmModHJhbnNsYXRlLCBhY3Rpb24ubW9kZWwgPz8gdW5kZWZpbmVkLCBpdGVtLCBwYXJhbXMpLnBpcGUobWFwKGkxOG5QYXJhbXMgPT4gSTE4blV0aWxzLkFjdGlvbi5wb3B1bGF0ZVBhcmFtcyhpMThuUGFyYW1zKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBwb3B1bGF0ZVBhcmFtcyhwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHsuLi5wYXJhbXN9O1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgc3RhdGljIGdldEtleXNCeVByaW9yaXR5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LCBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiwgY3VzdG9tS2V5Pzogc3RyaW5nLCBmYWxsYmFja0tleT86IHN0cmluZykge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgaWYgKGN1c3RvbUtleSkge1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChjdXN0b21LZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFjdGlvblBhdGhLZXlzKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhdGhLZXlzID0gW2FjdGlvblBhdGhLZXlzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvblBhdGhLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxBY3Rpb25LZXkgPSBgJHthY3Rpb24uaTE4bk1vZGVsQWN0aW9uQmFzZUtleX0uJHtrfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uS2V5ID0gYCR7YWN0aW9uLmFjdGlvbk5hbWV9LiR7a31gO1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChtb2RlbEFjdGlvbktleSwgYWN0aW9uS2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrS2V5KSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIEVycm9yIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBlcnJvcjogTW5nRXJyb3IsIHBhcmFtczogYW55ID0ge30pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuRXJyb3IuZ2V0UGFyYW1zKGVycm9yLCBwYXJhbXMpO1xuICAgICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2VDb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtgZXJyb3JzLiR7ZXJyb3IubWVzc2FnZUNvZGV9YCwgYG1lc3NhZ2VzLiR7ZXJyb3IubWVzc2FnZUNvZGV9YF07XG4gICAgICAgICAgICAgICAgY29uc3QgaTE4biA9IEkxOG5VdGlscy5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgICAgICAgICAgICAgaWYgKGkxOG4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkxOG47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyhlcnJvcjogTW5nRXJyb3IsIHBhcmFtczogYW55ID0ge30pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtc1JlcyA9IHsuLi5wYXJhbXN9O1xuICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yU3RhdHVzID0gJyc7XG4gICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3JNZXNzYWdlID0gJyc7XG5cbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3JTdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIHBhcmFtc1Jlcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1c0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yU3RhdHVzRGVzY3JpcHRpb24gPSBlcnJvci5zdGF0dXNEZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtc1Jlcy5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtc1JlcztcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9pMThuLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFhLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBTzdDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVyQyxNQUFNLEtBQVcsU0FBUyxDQW1WekI7QUFuVkQsV0FBaUIsU0FBUztJQUN0QixNQUFhLE1BQU07UUFDUixNQUFNLENBQUMsUUFBUSxDQUFDLFNBQTJCLEVBQUUsTUFBWSxFQUFFLEdBQUcsSUFBbUI7WUFDcEYsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBRU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUEyQixFQUFFLE1BQVksRUFBRSxHQUFHLElBQW1CO1lBQy9FLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFTSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQVUsRUFBRSxTQUFjLEVBQUU7WUFDckQsTUFBTSxTQUFTLEdBQUcsRUFBQyxHQUFHLE1BQU0sRUFBQyxDQUFDO1lBQzlCLElBQUksSUFBSSxF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QU0sQ0FBQyxTQUFTLENBQUMsS0FBZ0IsRUFBRSxTQUFjLEVBQUU7WUFDdEQsTUFBTSxTQUFTLEdBQUcsRUFBQyxHQUFHLE1BQU0sRUFBQyxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBRTVCLElBQUksU0FBUyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hELFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxFQUFFLE1BQU0sQ0FBQztnQkFDMUMsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLEVBQUUsT0FBTyxDQUFDO2dCQUM1QyxTQUFTLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxFQUFFLFVBQVUsQ0FBQzthQUM1RDtZQUVELFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7S0FDSjtJQTVCWSxlQUFLLFFBNEJqQixDQUFBO0FBQ0wsQ0FBQyxFQW5WZ0IsU0FBUyxLQUFULFNBQVMsUUFtVnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge0lNbmdFcnJvcn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7Q2xhc3NUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0kxOG5UeXBlfSBmcm9tICcuLi90eXBlcy9pMThuLnR5cGUnO1xuaW1wb3J0IHtFcnJvclV0aWx9IGZyb20gJy4vZXJyb3IudXRpbCc7XG5pbXBvcnQge1R5cGVVdGlsfSBmcm9tICcuL3R5cGUudXRpbCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgSTE4blV0aWxzIHtcbiAgICBleHBvcnQgY2xhc3MgQ29tbW9uIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHBhcmFtcz86IGFueSwgLi4ua2V5czogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZS5zdHJlYW0oa2V5cywgcGFyYW1zKS5waXBlKG1hcChpMThuID0+IEkxOG5VdGlscy5Db21tb24uc2VsZWN0STE4bihrZXlzLCBpMThuKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwYXJhbXM/OiBhbnksIC4uLmtleXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG4gPSB0cmFuc2xhdGUuaW5zdGFudChrZXlzLCBwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uc2VsZWN0STE4bihrZXlzLCBpMThuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcG9wdWxhdGVQYXJhbXMoaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHBhcmFtc1Jlcy5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJhbXNSZXM7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIHNlbGVjdEkxOG4oa2V5czogc3RyaW5nW10sIGkxOG46IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09IGkxOG5ba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTE4bltrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIFR5cGUge1xuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzTmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldE5hbWVBc3luYyh0cmFuc2xhdGUsIHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzTmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGNsYXNzVHlwZTogQ2xhc3NUeXBlPGFueT4sIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUoY2xhc3NUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXROYW1lKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZUFzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdHlwZU5hbWU6IHN0cmluZywgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZUtleXModHlwZU5hbWUsIHNpbmd1bGFyKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQ29tbW9uLmdldEFzeW5jKHRyYW5zbGF0ZSwgdW5kZWZpbmVkLCAuLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IEkxOG5VdGlscy5UeXBlLmdldE5hbWVLZXlzKHR5cGVOYW1lLCBzaW5ndWxhcik7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkNvbW1vbi5nZXQodHJhbnNsYXRlLCB1bmRlZmluZWQsIC4uLmtleXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRDbGFzc1RhYktleShjbGFzc1R5cGU6IENsYXNzVHlwZTxhbnk+LCB0YWI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFRhYktleSh0eXBlTmFtZSwgdGFiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0VGFiS2V5KHR5cGVOYW1lOiBzdHJpbmcsIHRhYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXRQYXRoKHR5cGVOYW1lLCAndGFicycsIHRhYik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzR3JvdXBLZXkoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgZ3JvdXA6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldEdyb3VwS2V5KHR5cGVOYW1lLCBncm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEdyb3VwS2V5KHR5cGVOYW1lOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsICdncm91cHMnLCBncm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzUHJvcGVydHlLZXkoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgcHJvcGVydHk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFByb3BlcnR5S2V5KHR5cGVOYW1lLCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFByb3BlcnR5S2V5KHR5cGVOYW1lOiBzdHJpbmcsIHByb3BlcnR5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsICdwcm9wZXJ0aWVzJywgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRDbGFzc1BhdGgoY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgLi4ucGF0aDogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZSA9IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShjbGFzc1R5cGUpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5UeXBlLmdldFBhdGgodHlwZU5hbWUsIC4uLnBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXRoKHR5cGVOYW1lOiBzdHJpbmcsIC4uLnBhdGg6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIGAke3R5cGVOYW1lfS4ke3BhdGguam9pbignLicpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldENsYXNzUGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgY2xhc3NUeXBlOiBDbGFzc1R5cGU8YW55PiwgaXRlbTogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVOYW1lID0gVHlwZVV0aWwuZmluZFR5cGVOYW1lKGNsYXNzVHlwZSk7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgdHlwZU5hbWUsIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5UeXBlTmFtZSA9IHR5cGVOYW1lID8gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZSh0cmFuc2xhdGUsIHR5cGVOYW1lLCB0cnVlKSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUucG9wdWxhdGVQYXJhbXMoaTE4blR5cGVOYW1lID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0Q2xhc3NQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGNsYXNzVHlwZTogQ2xhc3NUeXBlPGFueT4sIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICAgICAgY29uc3QgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUoY2xhc3NUeXBlKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuVHlwZS5nZXRQYXJhbXNBc3luYyh0cmFuc2xhdGUsIHR5cGVOYW1lLCBpdGVtLCBwYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHR5cGVOYW1lPzogc3RyaW5nLCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgICAgIHJldHVybiAodHlwZU5hbWUgPyBJMThuVXRpbHMuVHlwZS5nZXROYW1lQXN5bmModHJhbnNsYXRlLCB0eXBlTmFtZSwgdHJ1ZSkgOiBvZihudWxsKSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blR5cGVOYW1lID0+IEkxOG5VdGlscy5UeXBlLnBvcHVsYXRlUGFyYW1zKGkxOG5UeXBlTmFtZSA/PyB1bmRlZmluZWQsIGl0ZW0sIHBhcmFtcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBwb3B1bGF0ZVBhcmFtcyhpMThuVHlwZU5hbWU/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIHBhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBpZiAoaTE4blR5cGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLnR5cGVOYW1lID0gaTE4blR5cGVOYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24ucG9wdWxhdGVQYXJhbXMoaXRlbSwgcGFyYW1zUmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgc3RhdGljIGdldE5hbWVLZXlzKHR5cGVOYW1lOiBzdHJpbmcsIHNpbmd1bGFyPzogYm9vbGVhbik6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzaW5ndWxhciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goc2luZ3VsYXIgPyBgJHt0eXBlTmFtZX0ubmFtZVNpbmd1bGFyYCA6IGAke3R5cGVOYW1lfS5uYW1lUGx1cmFsYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXlzLnB1c2goYCR7dHlwZU5hbWV9Lm5hbWVgKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIE1vZGVsIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQoXG4gICAgICAgICAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBrZXlQYXRoOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXN0b21LZXk/OiBzdHJpbmcsXG4gICAgICAgICAgICBpdGVtPzogYW55LFxuICAgICAgICAgICAgZmFsbGJhY2tLZXk/OiBzdHJpbmcsXG4gICAgICAgICAgICBwYXJhbXM/OiBhbnlcbiAgICAgICAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLk1vZGVsLmdldEtleXNCeVByaW9yaXR5KG1vZGVsLCBrZXlQYXRoLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgbW9kZWwsIGl0ZW0sIHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkNvbW1vbi5nZXQodHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0TmFtZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZSh0cmFuc2xhdGUsIG1vZGVsLmkxOG5CYXNlS2V5LCBzaW5ndWxhcik7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldE5hbWVBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Piwgc2luZ3VsYXI/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0TmFtZUFzeW5jKHRyYW5zbGF0ZSwgbW9kZWwuaTE4bkJhc2VLZXksIHNpbmd1bGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0UGFyYW1zKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbW9kZWw/OiBNb2RlbERlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBpMThuUGFyYW1zID0gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgbW9kZWw/LmkxOG5CYXNlS2V5LCBpdGVtLCBwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Nb2RlbC5wb3B1bGF0ZVBhcmFtcyhtb2RlbD8uaWRQcm9wZXJ0eU5hbWUsIG1vZGVsPy50aXRsZVByb3BlcnR5TmFtZSwgaXRlbSwgaTE4blBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtc0FzeW5jKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbW9kZWw/OiBNb2RlbERlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLlR5cGUuZ2V0UGFyYW1zQXN5bmModHJhbnNsYXRlLCBtb2RlbD8uaTE4bkJhc2VLZXksIGl0ZW0sIHBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaTE4blBhcmFtcyA9PiBJMThuVXRpbHMuTW9kZWwucG9wdWxhdGVQYXJhbXMobW9kZWw/LmlkUHJvcGVydHlOYW1lLCBtb2RlbD8udGl0bGVQcm9wZXJ0eU5hbWUsIGl0ZW0sIGkxOG5QYXJhbXMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgcG9wdWxhdGVQYXJhbXMoaWRQcm9wZXJ0eT86IHN0cmluZywgdGl0bGVQcm9wZXJ0eT86IHN0cmluZywgaXRlbT86IGFueSwgcGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXNSZXMgPSB7Li4ucGFyYW1zLCBpdGVtSWQ6ICcnLCBpdGVtVGl0bGU6ICcnfTtcbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkUHJvcGVydHkgJiYgaXRlbVtpZFByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNSZXMuaXRlbUlkID0gaXRlbVtpZFByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpdGxlUHJvcGVydHkgJiYgaXRlbVt0aXRsZVByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXNSZXMuaXRlbVRpdGxlID0gaXRlbVt0aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zUmVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZ2V0S2V5c0J5UHJpb3JpdHkobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxhbnk+LCBrZXlQYXRoOiBzdHJpbmcsIGN1c3RvbUtleT86IHN0cmluZywgZmFsbGJhY2tLZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChjdXN0b21LZXkpIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goY3VzdG9tS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsQWN0aW9uS2V5ID0gSTE4blV0aWxzLlR5cGUuZ2V0UGF0aChtb2RlbC5pMThuQmFzZUtleSwgLi4ua2V5UGF0aCk7XG4gICAgICAgICAgICBrZXlzLnB1c2gobW9kZWxBY3Rpb25LZXkpO1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrS2V5KSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIHRyYW5zbGF0aW9uIGZvciBhY3Rpb24gd2l0aCBnaXZlbiBrZXlzIGFuZCBwYXJhbXNcbiAgICAgICAgICogQHBhcmFtIHRyYW5zbGF0ZSBUcmFuc2xhdGVTZXJ2aWNlXG4gICAgICAgICAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uIGRlc2NyaXB0b3JcbiAgICAgICAgICogQHBhcmFtIGFjdGlvblBhdGhLZXlzIGFjdGlvbiBwYXRoIGtleXNcbiAgICAgICAgICogQHBhcmFtIGN1c3RvbUtleSBjdXN0b20ga2V5XG4gICAgICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICAgICAqIEBwYXJhbSBmYWxsYmFja0tleSBmYWxsYmFjayBrZXlcbiAgICAgICAgICogQHBhcmFtIHBhcmFtcyBhZGRpdGlvbmFsIHBhcmFtcyBmb3IgdHJhbnNsYXRpb25cbiAgICAgICAgICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAgICAgICAgICovXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgZ2V0KFxuICAgICAgICAgICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICAgICAgICAgIGl0ZW0/OiBhbnksXG4gICAgICAgICAgICBmYWxsYmFja0tleT86IHN0cmluZyxcbiAgICAgICAgICAgIHBhcmFtcz86IGFueSxcbiAgICAgICAgICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuVHlwZSA9ICdyZXR1cm5GaXJzdEtleSdcbiAgICAgICAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLkFjdGlvbi5nZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGFjdGlvblBhdGhLZXlzLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuQWN0aW9uLmdldFBhcmFtcyh0cmFuc2xhdGUsIGFjdGlvbiwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5WYWx1ZSA9IEkxOG5VdGlscy5Db21tb24uZ2V0KHRyYW5zbGF0ZSwgaTE4blBhcmFtcywgLi4ua2V5cyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbkRlcGVuZGluZ09uU3RyYXRlZ3kobWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3ksIHtpMThuVmFsdWUsIGZpcnN0S2V5OiBrZXlzWzBdLCBmYWxsYmFja0tleX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYXN5bmMgdHJhbnNsYXRpb24gZm9yIGdpdmVuIGtleXMgd2l0aCBnaXZlbiBwYXJhbXMuXG4gICAgICAgICAqIEBwYXJhbSB0cmFuc2xhdGUgVHJhbnNsYXRlU2VydmljZVxuICAgICAgICAgKiBAcGFyYW0gYWN0aW9uIGFjdGlvbiBkZXNjcmlwdG9yXG4gICAgICAgICAqIEBwYXJhbSBhY3Rpb25QYXRoS2V5cyBhY3Rpb24gcGF0aCBrZXlzXG4gICAgICAgICAqIEBwYXJhbSBjdXN0b21LZXkgY3VzdG9tIGtleVxuICAgICAgICAgKiBAcGFyYW0gaXRlbSBpdGVtXG4gICAgICAgICAqIEBwYXJhbSBmYWxsYmFja0tleSBmYWxsYmFjayBrZXksIHVzZWQgYXMgZmFsbGJhY2sga2V5XG4gICAgICAgICAqIEBwYXJhbSBwYXJhbXMgYWRkaXRpb25hbCBwYXJhbXMgZm9yIHRyYW5zbGF0aW9uXG4gICAgICAgICAqIEBwYXJhbSBtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSBzdHJhdGVneSB3aGVuIG5vIHRyYW5zbGF0aW9uIGlzIGZvdW5kXG4gICAgICAgICAqL1xuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEFzeW5jKFxuICAgICAgICAgICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgICAgICBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGN1c3RvbUtleT86IHN0cmluZyxcbiAgICAgICAgICAgIGl0ZW0/OiBhbnksXG4gICAgICAgICAgICBmYWxsYmFja0tleT86IHN0cmluZyxcbiAgICAgICAgICAgIHBhcmFtcz86IGFueSxcbiAgICAgICAgICAgIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5OiBJMThuVHlwZSA9ICdyZXR1cm5GaXJzdEtleSdcbiAgICAgICAgKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgICAgICAgICByZXR1cm4gSTE4blV0aWxzLkFjdGlvbi5nZXRQYXJhbXNBc3luYyh0cmFuc2xhdGUsIGFjdGlvbiwgaXRlbSwgcGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKGkxOG5QYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gSTE4blV0aWxzLkFjdGlvbi5nZXRLZXlzQnlQcmlvcml0eShhY3Rpb24sIGFjdGlvblBhdGhLZXlzLCBjdXN0b21LZXksIGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5Db21tb24uZ2V0QXN5bmModHJhbnNsYXRlLCBpMThuUGFyYW1zLCAuLi5rZXlzKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGkxOG5WYWx1ZSA9PiB0aGlzLmdldFRyYW5zbGF0aW9uRGVwZW5kaW5nT25TdHJhdGVneShtaXNzaW5nVHJhbnNsYXRpb25TdHJhdGVneSwge2kxOG5WYWx1ZSwgZmlyc3RLZXk6IGtleXNbMF0sIGZhbGxiYWNrS2V5fSkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyB0cmFuc2xhdGlvbiBkZXBlbmRpbmcgb24gbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3lcbiAgICAgICAgICogQHBhcmFtIG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5IHN0cmF0ZWd5IHdoZW4gbm8gdHJhbnNsYXRpb24gaXMgZm91bmRcbiAgICAgICAgICogQHBhcmFtIHZhbHVlcyBvYmplY3Qgd2l0aCB2YWx1ZXMsIGkxOG5WYWx1ZSBpcyB0cmFuc2xhdGlvbiwgZmlyc3RLZXkgaXMgZmlyc3Qga2V5IGluIGFycmF5IG9mIGtleXMsIGZhbGxiYWNrS2V5IGlzIGZhbGxiYWNrIGtleVxuICAgICAgICAgKi9cbiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZ2V0VHJhbnNsYXRpb25EZXBlbmRpbmdPblN0cmF0ZWd5KFxuICAgICAgICAgICAgbWlzc2luZ1RyYW5zbGF0aW9uU3RyYXRlZ3k6IEkxOG5UeXBlLFxuICAgICAgICAgICAge2kxOG5WYWx1ZSwgZmlyc3RLZXksIGZhbGxiYWNrS2V5fToge2kxOG5WYWx1ZTogc3RyaW5nIHwgbnVsbDsgZmlyc3RLZXk/OiBzdHJpbmc7IGZhbGxiYWNrS2V5Pzogc3RyaW5nfVxuICAgICAgICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgICAgIGlmIChpMThuVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTE4blZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JldHVybk51bGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JldHVybkZhbGxiYWNrS2V5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFja0tleSA/PyBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXR1cm5GaXJzdEtleSc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RLZXkgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModHJhbnNsYXRlLCBhY3Rpb24sICd0aXRsZScsIHVuZGVmaW5lZCwgaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldEVkaXRvclRpdGxlQXN5bmModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8YW55PiwgaXRlbT86IGFueSk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICAgICAgcmV0dXJuIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModHJhbnNsYXRlLCBhY3Rpb24sIFsnZWRpdG9yLnRpdGxlJywgJ3RpdGxlJ10sIGFjdGlvbi5lZGl0b3JUaXRsZSA/PyB1bmRlZmluZWQsIGl0ZW0sIHVuZGVmaW5lZCwgYWN0aW9uLmVkaXRvclRpdGxlUGFyYW1zID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgc3RhdGljIGdldFBhcmFtcyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IGkxOG5QYXJhbXMgPSBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zKHRyYW5zbGF0ZSwgYWN0aW9uLm1vZGVsID8/IHVuZGVmaW5lZCwgaXRlbSwgcGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQWN0aW9uLnBvcHVsYXRlUGFyYW1zKGkxOG5QYXJhbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXNBc3luYyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LCBpdGVtPzogYW55LCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuTW9kZWwuZ2V0UGFyYW1zQXN5bmModHJhbnNsYXRlLCBhY3Rpb24ubW9kZWwgPz8gdW5kZWZpbmVkLCBpdGVtLCBwYXJhbXMpLnBpcGUobWFwKGkxOG5QYXJhbXMgPT4gSTE4blV0aWxzLkFjdGlvbi5wb3B1bGF0ZVBhcmFtcyhpMThuUGFyYW1zKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBwb3B1bGF0ZVBhcmFtcyhwYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHsuLi5wYXJhbXN9O1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgc3RhdGljIGdldEtleXNCeVByaW9yaXR5KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LCBhY3Rpb25QYXRoS2V5czogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiwgY3VzdG9tS2V5Pzogc3RyaW5nLCBmYWxsYmFja0tleT86IHN0cmluZykge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgaWYgKGN1c3RvbUtleSkge1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChjdXN0b21LZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFjdGlvblBhdGhLZXlzKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblBhdGhLZXlzID0gW2FjdGlvblBhdGhLZXlzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvblBhdGhLZXlzLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxBY3Rpb25LZXkgPSBgJHthY3Rpb24uaTE4bk1vZGVsQWN0aW9uQmFzZUtleX0uJHtrfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uS2V5ID0gYCR7YWN0aW9uLmFjdGlvbk5hbWV9LiR7a31gO1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChtb2RlbEFjdGlvbktleSwgYWN0aW9uS2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrS2V5KSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGZhbGxiYWNrS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0IGNsYXNzIEVycm9yIHtcbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXQodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBlcnJvcjogSU1uZ0Vycm9yLCBwYXJhbXM6IGFueSA9IHt9KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgICAgICBjb25zdCBpMThuUGFyYW1zID0gSTE4blV0aWxzLkVycm9yLmdldFBhcmFtcyhlcnJvciwgcGFyYW1zKTtcbiAgICAgICAgICAgIGlmIChlcnJvci5tZXNzYWdlQ29kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbYGVycm9ycy4ke2Vycm9yLm1lc3NhZ2VDb2RlfWAsIGBtZXNzYWdlcy4ke2Vycm9yLm1lc3NhZ2VDb2RlfWBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkxOG4gPSBJMThuVXRpbHMuQ29tbW9uLmdldCh0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIC4uLmtleXMpO1xuICAgICAgICAgICAgICAgIGlmIChpMThuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpMThuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBJMThuVXRpbHMuQ29tbW9uLmdldCh0cmFuc2xhdGUsIGkxOG5QYXJhbXMsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHN0YXRpYyBnZXRQYXJhbXMoZXJyb3I6IElNbmdFcnJvciwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zUmVzID0gey4uLnBhcmFtc307XG4gICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3JTdGF0dXMgPSAnJztcbiAgICAgICAgICAgIHBhcmFtc1Jlcy5lcnJvck1lc3NhZ2UgPSAnJztcblxuICAgICAgICAgICAgaWYgKEVycm9yVXRpbC5pc0h0dHBFcnJvclJlc3BvbnNlKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0dHBFcnJvciA9IEVycm9yVXRpbC5nZXRIdHRwRXJyb3JSZXNwb25zZShlcnJvcik7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yU3RhdHVzID0gaHR0cEVycm9yPy5zdGF0dXM7XG4gICAgICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yTWVzc2FnZSA9IGh0dHBFcnJvcj8ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICBwYXJhbXNSZXMuZXJyb3JTdGF0dXNEZXNjcmlwdGlvbiA9IGh0dHBFcnJvcj8uc3RhdHVzVGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGFyYW1zUmVzLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zUmVzO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -10,4 +10,5 @@ export * from './string.util';
10
10
  export * from './type.util';
11
11
  export * from './export.util';
12
12
  export * from './file.util';
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hY3Rpb24tZGF0YS1wcm92aWRlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZWRpdG9yLWZvcm1seS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vaTE4bi51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmcudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS51dGlsJztcbiJdfQ==
13
+ export * from './error.util';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hY3Rpb24tZGF0YS1wcm92aWRlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZWRpdG9yLWZvcm1seS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vaTE4bi51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbi51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0LnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmcudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydC51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3IudXRpbCc7XG4iXX0=
@@ -1,3 +1,4 @@
1
+ import { MngLoggerService } from '../services';
1
2
  import { I18nUtils } from './i18n.util';
2
3
  export class NotificationUtil {
3
4
  static notification(viewContainer, title, message, severity = 'success', icon) {
@@ -7,7 +8,7 @@ export class NotificationUtil {
7
8
  messageService.add(notification);
8
9
  }
9
10
  else {
10
- console.warn(`No message service was provided through view container, message will not be displayed.`);
11
+ MngLoggerService.get().warn(`No message service was provided through view container, message will not be displayed.`);
11
12
  }
12
13
  return notification;
13
14
  }
@@ -48,4 +49,4 @@ export class NotificationUtil {
48
49
  return { severity: 'warn', summary: actionErrorTitle, detail: actionErrorMessage };
49
50
  }
50
51
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL25vdGlmaWNhdGlvbi51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixNQUFNLENBQUMsWUFBWSxDQUN0QixhQUF3QyxFQUN4QyxLQUFjLEVBQ2QsT0FBZ0IsRUFDaEIsV0FBeUMsU0FBUyxFQUNsRCxJQUFhO1FBRWIsTUFBTSxjQUFjLEdBQUcsYUFBYSxFQUFFLGlCQUFpQixFQUFFLENBQUM7UUFDMUQsTUFBTSxZQUFZLEdBQVksRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO1FBRTNJLElBQUksY0FBYyxFQUFFO1lBQ2hCLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDcEM7YUFBTTtZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztTQUMxRztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsU0FBMkIsRUFBRSxLQUEyQixFQUFFLEtBQVUsRUFBRSxhQUF3QztRQUMvSSxNQUFNLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFDdkIsSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQ2hCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDOUM7YUFBTTtZQUNILE1BQU0sQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1NB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RUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTSxNQUFNLENBQUMsMkJBQTJCLENBQUMsU0FBMkIsRUFBRSxLQUFhLEVBQUUsT0FBZTtRQUNqRyxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQy9ELE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDbkUsT0FBTyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuaW1wb3J0IHtUYWJsZURlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxlJztcbmltcG9ydCB7SVZpZXdDb250YWluZXIsIE1uZ0Vycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtJMThuVXRpbHN9IGZyb20gJy4vaTE4bi51dGlsJztcblxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvblV0aWwge1xuICAgIHB1YmxpYyBzdGF0aWMgbm90aWZpY2F0aW9uKFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8YW55LCBhbnk+LFxuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyB8ICd3YXJuJyB8ICdlcnJvcicgPSAnc3VjY2VzcycsXG4gICAgICAgIGljb24/OiBzdHJpbmdcbiAgICApOiBNZXNzYWdlIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZVNlcnZpY2UgPSB2aWV3Q29udGFpbmVyPy5nZXRNZXNzYWdlU2VydmljZSgpO1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb246IE1lc3NhZ2UgPSB7c2V2ZXJpdHk6IHNldmVyaXR5LCBzdW1tYXJ5OiB0aXRsZSwgZGV0YWlsOiBtZXNzYWdlLCBsaWZlOiBzZXZlcml0eSA9PT0gJ2Vycm9yJyA/IDEwMDAwIDogNTAwMCwgaWNvbjogaWNvbn07XG5cbiAgICAgICAgaWYgKG1lc3NhZ2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICBtZXNzYWdlU2VydmljZS5hZGQobm90aWZpY2F0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gbWVzc2FnZSBzZXJ2aWNlIHdhcyBwcm92aWRlZCB0aHJvdWdoIHZpZXcgY29udGFpbmVyLCBtZXNzYWdlIHdpbGwgbm90IGJlIGRpc3BsYXllZC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgdGFibGVOb3RpZmljYXRpb25FcnJvcih0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHRhYmxlOiBUYWJsZURlc2NyaXB0b3I8YW55PiwgZXJyb3I6IGFueSwgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPGFueSwgYW55Pik6IE1lc3NhZ2Uge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHt9O1xuICAgICAgICBpZiAoZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHBhcmFtcy5lcnJvck1lc3NhZ2UgPSBgOiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmFtcy5lcnJvck1lc3NhZ2UgPSAnLic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFibGVFcnJvclRpdGxlID0gSTE4blV0aWxzLk1vZGVsLmdldCh0cmFuc2xhdGUsIHRhYmxlLm1vZGVsLCAndGFibGUuZXJyb3IudGl0bGUnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2dlbmVyYWwuZXJyb3InLCBwYXJhbXMpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdGFibGVFcnJvck1lc3NhZ2UgPSBJMThuVXRpbHMuTW9kZWwuZ2V0KHRyYW5zbGF0ZSwgdGFibGUubW9kZWwsICd0YWJsZS5lcnJvci5tZXNzYWdlJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdnZW5lcmFsLmVycm9yTWVzc2FnZScsIHBhcmFtcykgPz8gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uVXRpbC5ub3RpZmljYXRpb24odmlld0NvbnRhaW5lciwgdGFibGVFcnJvclRpdGxlLCB0YWJsZUVycm9yTWVzc2FnZSwgJ2Vycm9yJywgJ3BpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY3VzdG9tVGl0bGVLZXk/OiBzdHJpbmcsXG4gICAgICAgIGN1c3RvbU1lc3NhZ2VLZXk/OiBzdHJpbmcsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxhbnksIGFueT4sXG4gICAgICAgIGl0ZW0/OiBhbnlcbiAgICApOiBNZXNzYWdlIHtcbiAgICAgICAgY29uc3QgYWN0aW9uU3VjY2Vzc1RpdGxlID0gSTE4blV0aWxzLkFjdGlvbi5nZXQodHJhbnNsYXRlLCBhY3Rpb24sICdzdWNjZXNzLnRpdGxlJywgY3VzdG9tVGl0bGVLZXksIGl0ZW0sICdnZW5lcmFsLnN1Y2Nlc3MnLCBmdW5jdGlvbk5hbWUpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYWN0aW9uU3VjY2Vzc01lc3NhZ2UgPSBJMThuVXRpbHMuQWN0aW9uLmdldCh0cmFuc2xhdGUsIGFjdGlvbiwgJ3N1Y2Nlc3MubWVzc2FnZScsIGN1c3RvbU1lc3NhZ2VLZXksIGl0ZW0sICdnZW5lcmFsLnN1Y2Nlc3NNZXNzYWdlJywgZnVuY3Rpb25OYW1lKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBOb3RpZmljYXRpb25VdGlsLm5vdGlmaWNhdGlvbih2aWV3Q29udGFpbmVyLCBhY3Rpb25TdWNjZXNzVGl0bGUsIGFjdGlvblN1Y2Nlc3NNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKFxuICAgICAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxhbnk+LFxuICAgICAgICBlcnJvcjogTW5nRXJyb3IsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8YW55LCBhbnk+LFxuICAgICAgICBpdGVtPzogYW55LFxuICAgICAgICBzZXZlcml0eTogJ3dhcm4nIHwgJ2Vycm9yJyA9ICdlcnJvcidcbiAgICApOiBNZXNzYWdlIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiBJMThuVXRpbHMuRXJyb3IuZ2V0KHRyYW5zbGF0ZSwgZXJyb3IpID8/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3JUaXRsZSA9XG4gICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0cmFuc2xhdGUsIGFjdGlvbiwgW2BlcnJvci4ke2Z1bmN0aW9uTmFtZX0udGl0bGVgLCAnZXJyb3IudGl0bGUnXSwgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGUsIGl0ZW0sICdnZW5lcmFsLmVycm9yJywgcGFyYW1zKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0cmFuc2xhdGUsIGFjdGlvbiwgW2BlcnJvci4ke2Z1bmN0aW9uTmFtZX0ubWVzc2FnZWAsICdlcnJvci5tZXNzYWdlJ10sIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2UsIGl0ZW0sICdnZW5lcmFsLmVycm9yTWVzc2FnZScsIHBhcmFtcykgPz9cbiAgICAgICAgICAgIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvblV0aWwubm90aWZpY2F0aW9uKHZpZXdDb250YWluZXIsIGFjdGlvbkVycm9yVGl0bGUsIGFjdGlvbkVycm9yTWVzc2FnZSwgc2V2ZXJpdHksICdwaS1leGNsYW1hdGlvbi10cmlhbmdsZScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Rm9ybUVkaXRvckluZm9NZXNzYWdlKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBwYXJhbXM/OiBhbnkpOiBNZXNzYWdlIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3JUaXRsZSA9IHRyYW5zbGF0ZS5pbnN0YW50KHRpdGxlKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yTWVzc2FnZSA9IHRyYW5zbGF0ZS5pbnN0YW50KG1lc3NhZ2UsIHBhcmFtcykgPz8gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4ge3NldmVyaXR5OiAnaW5mbycsIHN1bW1hcnk6IGFjdGlvbkVycm9yVGl0bGUsIGRldGFpbDogYWN0aW9uRXJyb3JNZXNzYWdlfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEZvcm1FZGl0b3JXYXJuaW5nTWVzc2FnZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IE1lc3NhZ2Uge1xuICAgICAgICBjb25zdCBhY3Rpb25FcnJvclRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQodGl0bGUpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3JNZXNzYWdlID0gdHJhbnNsYXRlLmluc3RhbnQobWVzc2FnZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4ge3NldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6IGFjdGlvbkVycm9yVGl0bGUsIGRldGFpbDogYWN0aW9uRXJyb3JNZXNzYWdlfTtcbiAgICB9XG59XG4iXX0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL25vdGlmaWNhdGlvbi51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsTUFBTSxDQUFDLFlBQVksQ0FDdEIsYUFBd0MsRUFDeEMsS0FBYyxFQUNkLE9BQWdCLEVBQ2hCLFdBQXlDLFNBQVMsRUFDbEQsSUFBYTtRQUViLE1BQU0sY0FBYyxHQUFHLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBQzFELE1BQU0sWUFBWSxHQUFZLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztRQUUzSSxJQUFJLGNBQWMsRUFBRTtZQUNoQixjQUFjLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3BDO2FBQU07WUFDSCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztTQUN6SDtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxNQUFNLENBQUMsc0JBQXNCLENBQUMsU0FBMkIsRUFBRSxLQUEyQixFQUFFLEtBQVUsRUFBRSxhQUF3QztRQUMvSSxNQUFNLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFDdkIsSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQ2hCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxLQUFLLENBQUMsT0FB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LENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUMzRSxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFDLENBQUM7SUFDckYsQ0FBQztJQUVNLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxTQUEyQixFQUFFLEtBQWEsRUFBRSxPQUFlO1FBQ2pHLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDL0QsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNuRSxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFDLENBQUM7SUFDckYsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TWVzc2FnZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvdGFibGUnO1xuaW1wb3J0IHtJTW5nRXJyb3IsIElWaWV3Q29udGFpbmVyfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0kxOG5VdGlsc30gZnJvbSAnLi9pMThuLnV0aWwnO1xuXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uVXRpbCB7XG4gICAgcHVibGljIHN0YXRpYyBub3RpZmljYXRpb24oXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxhbnksIGFueT4sXG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgICAgICBzZXZlcml0eTogJ3N1Y2Nlc3MnIHwgJ3dhcm4nIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJyxcbiAgICAgICAgaWNvbj86IHN0cmluZ1xuICAgICk6IE1lc3NhZ2Uge1xuICAgICAgICBjb25zdCBtZXNzYWdlU2VydmljZSA9IHZpZXdDb250YWluZXI/LmdldE1lc3NhZ2VTZXJ2aWNlKCk7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTWVzc2FnZSA9IHtzZXZlcml0eTogc2V2ZXJpdHksIHN1bW1hcnk6IHRpdGxlLCBkZXRhaWw6IG1lc3NhZ2UsIGxpZmU6IHNldmVyaXR5ID09PSAnZXJyb3InID8gMTAwMDAgOiA1MDAwLCBpY29uOiBpY29ufTtcblxuICAgICAgICBpZiAobWVzc2FnZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VTZXJ2aWNlLmFkZChub3RpZmljYXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5nZXQoKS53YXJuKGBObyBtZXNzYWdlIHNlcnZpY2Ugd2FzIHByb3ZpZGVkIHRocm91Z2ggdmlldyBjb250YWluZXIsIG1lc3NhZ2Ugd2lsbCBub3QgYmUgZGlzcGxheWVkLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub3RpZmljYXRpb247XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB0YWJsZU5vdGlmaWNhdGlvbkVycm9yKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdGFibGU6IFRhYmxlRGVzY3JpcHRvcjxhbnk+LCBlcnJvcjogYW55LCB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8YW55LCBhbnk+KTogTWVzc2FnZSB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogYW55ID0ge307XG4gICAgICAgIGlmIChlcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgcGFyYW1zLmVycm9yTWVzc2FnZSA9IGA6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1zLmVycm9yTWVzc2FnZSA9ICcuJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJsZUVycm9yVGl0bGUgPSBJMThuVXRpbHMuTW9kZWwuZ2V0KHRyYW5zbGF0ZSwgdGFibGUubW9kZWwsICd0YWJsZS5lcnJvci50aXRsZScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZ2VuZXJhbC5lcnJvcicsIHBhcmFtcykgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB0YWJsZUVycm9yTWVzc2FnZSA9IEkxOG5VdGlscy5Nb2RlbC5nZXQodHJhbnNsYXRlLCB0YWJsZS5tb2RlbCwgJ3RhYmxlLmVycm9yLm1lc3NhZ2UnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2dlbmVyYWwuZXJyb3JNZXNzYWdlJywgcGFyYW1zKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBOb3RpZmljYXRpb25VdGlsLm5vdGlmaWNhdGlvbih2aWV3Q29udGFpbmVyLCB0YWJsZUVycm9yVGl0bGUsIHRhYmxlRXJyb3JNZXNzYWdlLCAnZXJyb3InLCAncGktZXhjbGFtYXRpb24tdHJpYW5nbGUnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjdXN0b21UaXRsZUtleT86IHN0cmluZyxcbiAgICAgICAgY3VzdG9tTWVzc2FnZUtleT86IHN0cmluZyxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPGFueSwgYW55PixcbiAgICAgICAgaXRlbT86IGFueVxuICAgICk6IE1lc3NhZ2Uge1xuICAgICAgICBjb25zdCBhY3Rpb25TdWNjZXNzVGl0bGUgPSBJMThuVXRpbHMuQWN0aW9uLmdldCh0cmFuc2xhdGUsIGFjdGlvbiwgJ3N1Y2Nlc3MudGl0bGUnLCBjdXN0b21UaXRsZUtleSwgaXRlbSwgJ2dlbmVyYWwuc3VjY2VzcycsIGZ1bmN0aW9uTmFtZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBhY3Rpb25TdWNjZXNzTWVzc2FnZSA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRyYW5zbGF0ZSwgYWN0aW9uLCAnc3VjY2Vzcy5tZXNzYWdlJywgY3VzdG9tTWVzc2FnZUtleSwgaXRlbSwgJ2dlbmVyYWwuc3VjY2Vzc01lc3NhZ2UnLCBmdW5jdGlvbk5hbWUpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvblV0aWwubm90aWZpY2F0aW9uKHZpZXdDb250YWluZXIsIGFjdGlvblN1Y2Nlc3NUaXRsZSwgYWN0aW9uU3VjY2Vzc01lc3NhZ2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IoXG4gICAgICAgIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4sXG4gICAgICAgIGVycm9yOiBJTW5nRXJyb3IsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8YW55LCBhbnk+LFxuICAgICAgICBpdGVtPzogYW55LFxuICAgICAgICBzZXZlcml0eTogJ3dhcm4nIHwgJ2Vycm9yJyA9ICdlcnJvcidcbiAgICApOiBNZXNzYWdlIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiBJMThuVXRpbHMuRXJyb3IuZ2V0KHRyYW5zbGF0ZSwgZXJyb3IpID8/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3JUaXRsZSA9XG4gICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0cmFuc2xhdGUsIGFjdGlvbiwgW2BlcnJvci4ke2Z1bmN0aW9uTmFtZX0udGl0bGVgLCAnZXJyb3IudGl0bGUnXSwgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGUsIGl0ZW0sICdnZW5lcmFsLmVycm9yJywgcGFyYW1zKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0cmFuc2xhdGUsIGFjdGlvbiwgW2BlcnJvci4ke2Z1bmN0aW9uTmFtZX0ubWVzc2FnZWAsICdlcnJvci5tZXNzYWdlJ10sIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2UsIGl0ZW0sICdnZW5lcmFsLmVycm9yTWVzc2FnZScsIHBhcmFtcykgPz9cbiAgICAgICAgICAgIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvblV0aWwubm90aWZpY2F0aW9uKHZpZXdDb250YWluZXIsIGFjdGlvbkVycm9yVGl0bGUsIGFjdGlvbkVycm9yTWVzc2FnZSwgc2V2ZXJpdHksICdwaS1leGNsYW1hdGlvbi10cmlhbmdsZScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Rm9ybUVkaXRvckluZm9NZXNzYWdlKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgdGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBwYXJhbXM/OiBhbnkpOiBNZXNzYWdlIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3JUaXRsZSA9IHRyYW5zbGF0ZS5pbnN0YW50KHRpdGxlKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yTWVzc2FnZSA9IHRyYW5zbGF0ZS5pbnN0YW50KG1lc3NhZ2UsIHBhcmFtcykgPz8gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4ge3NldmVyaXR5OiAnaW5mbycsIHN1bW1hcnk6IGFjdGlvbkVycm9yVGl0bGUsIGRldGFpbDogYWN0aW9uRXJyb3JNZXNzYWdlfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEZvcm1FZGl0b3JXYXJuaW5nTWVzc2FnZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IE1lc3NhZ2Uge1xuICAgICAgICBjb25zdCBhY3Rpb25FcnJvclRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQodGl0bGUpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3JNZXNzYWdlID0gdHJhbnNsYXRlLmluc3RhbnQobWVzc2FnZSkgPz8gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4ge3NldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6IGFjdGlvbkVycm9yVGl0bGUsIGRldGFpbDogYWN0aW9uRXJyb3JNZXNzYWdlfTtcbiAgICB9XG59XG4iXX0=