@o3r/analytics 10.0.0-next.8 → 11.0.0-next.0

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 (31) hide show
  1. package/README.md +1 -1
  2. package/directives/track-events/base-track-events.d.ts +1 -3
  3. package/directives/track-events/base-track-events.d.ts.map +1 -1
  4. package/directives/track-events/track-click/track-click.directive.d.ts +3 -2
  5. package/directives/track-events/track-click/track-click.directive.d.ts.map +1 -1
  6. package/directives/track-events/track-events.directive.d.ts +3 -2
  7. package/directives/track-events/track-events.directive.d.ts.map +1 -1
  8. package/directives/track-events/track-focus/track-focus.directive.d.ts +3 -2
  9. package/directives/track-events/track-focus/track-focus.directive.d.ts.map +1 -1
  10. package/esm2022/directives/track-events/base-track-events.mjs +5 -7
  11. package/esm2022/directives/track-events/track-click/track-click.directive.mjs +8 -7
  12. package/esm2022/directives/track-events/track-events.directive.mjs +8 -7
  13. package/esm2022/directives/track-events/track-events.module.mjs +4 -4
  14. package/esm2022/directives/track-events/track-focus/track-focus.directive.mjs +8 -7
  15. package/esm2022/services/event-track/event-track.service.mjs +7 -20
  16. package/esm2022/stores/event-track/event-track.module.mjs +4 -4
  17. package/esm2022/stores/event-track/event-track.reducer.mjs +1 -5
  18. package/fesm2022/o3r-analytics.mjs +41 -57
  19. package/fesm2022/o3r-analytics.mjs.map +1 -1
  20. package/package.json +15 -15
  21. package/plugins/webpack/build-metrics/build-stats.plugin.d.ts +1 -1
  22. package/plugins/webpack/build-metrics/build-stats.plugin.d.ts.map +1 -1
  23. package/plugins/webpack/build-metrics/build-stats.plugin.js.map +1 -1
  24. package/schematics/analytics-to-component/index.js +2 -2
  25. package/schematics/analytics-to-component/index.js.map +1 -1
  26. package/schematics/analytics-to-component/schema.json +1 -1
  27. package/schematics/ng-add/schema.json +2 -2
  28. package/services/event-track/event-track.service.d.ts +8 -21
  29. package/services/event-track/event-track.service.d.ts.map +1 -1
  30. package/stores/event-track/event-track.reducer.d.ts.map +1 -1
  31. package/schematics/package.json +0 -3
@@ -89,7 +89,6 @@ export class EventTrackService {
89
89
  }
90
90
  /**
91
91
  * Populate performance payload with FP object
92
- *
93
92
  * @param FP
94
93
  */
95
94
  addFPToPerfPayload(FP) {
@@ -120,7 +119,6 @@ export class EventTrackService {
120
119
  /**
121
120
  * Mark the first paint value
122
121
  * Store the first paint timing value to be emitted at Navigation End
123
- *
124
122
  * @param emit If true, sets the FP to the current page. Otherwise, wait for next NavigationEnd event to happen
125
123
  */
126
124
  async markFP(emit = false) {
@@ -132,7 +130,6 @@ export class EventTrackService {
132
130
  }
133
131
  /**
134
132
  * Mark the first meaningful paint value.
135
- *
136
133
  * @param markOnlyFirstLoad If false, marks the FMP for subsequent loads else only for the first load of the application
137
134
  */
138
135
  async markFMP(markOnlyFirstLoad = true) {
@@ -165,7 +162,6 @@ export class EventTrackService {
165
162
  }
166
163
  /**
167
164
  * Add a custom event and its measurements
168
- *
169
165
  * @param label The event name
170
166
  */
171
167
  async addCustomMark(label) {
@@ -176,7 +172,6 @@ export class EventTrackService {
176
172
  }
177
173
  /**
178
174
  * Add a server call object in the list of server calls metrics
179
- *
180
175
  * @param serverCall The object to add in the server calls metrics
181
176
  */
182
177
  addServerCallMark(serverCall) {
@@ -186,7 +181,6 @@ export class EventTrackService {
186
181
  /**
187
182
  * Add a DxAPI SDK server call object, created by the SDK Probe plugin, in the list of server calls metrics.
188
183
  * In order to have requestId for the DxAPI calls, your server has to expose 'ama-request-id' via Access-Control-Expose-Headers
189
- *
190
184
  * @param serverMark The mark object
191
185
  */
192
186
  async addSDKServerCallMark(serverMark) {
@@ -210,7 +204,6 @@ export class EventTrackService {
210
204
  }
211
205
  /**
212
206
  * Add a custom event and mark the start time, and returns the element index
213
- *
214
207
  * @param label Event name
215
208
  * @returns the element index if tracking is active. Otherwise, -1
216
209
  */
@@ -227,7 +220,6 @@ export class EventTrackService {
227
220
  /**
228
221
  * End the event mark given in parameter;
229
222
  * Returns false if the custom event is not found in the list of custom marks; true otherwise
230
- *
231
223
  * @param eventIndex Index of the custom event to be marked as ended
232
224
  */
233
225
  endCustomMark(eventIndex) {
@@ -254,8 +246,7 @@ export class EventTrackService {
254
246
  * and the end of the composite rendering (upper bound measurement - a time mark that occurs after the real composite)
255
247
  * For the first load of the application, the start time is considered as the start of navigation to ensure a cumulative measure.
256
248
  * It is using the 'NgZone' service to runOutsideAngular to prevent any change detection to occur, nor angular error handling, speeding up the measurement.
257
- *
258
- * @example markFMP() is called in ngAfterViewInit(), the end time will be computed once the render pipeline stage completed the changes triggered by the javascript
249
+ * Example {@link markFMP} is called in {@link ngAfterViewInit}, the end time will be computed once the render pipeline stage completed the changes triggered by the javascript
259
250
  */
260
251
  getTiming() {
261
252
  const startTime = this.isFirstLoad ? 0 : Math.round(window.performance.now());
@@ -270,7 +261,6 @@ export class EventTrackService {
270
261
  }
271
262
  /**
272
263
  * Add an event to the stream of captured UI events
273
- *
274
264
  * @param uiEvent emitted event object
275
265
  */
276
266
  addUiEvent(uiEvent) {
@@ -278,7 +268,6 @@ export class EventTrackService {
278
268
  }
279
269
  /**
280
270
  * Add an event to the stream of captured custom events
281
- *
282
271
  * @param customEvent emitted event object
283
272
  */
284
273
  addCustomEvent(customEvent) {
@@ -286,7 +275,6 @@ export class EventTrackService {
286
275
  }
287
276
  /**
288
277
  * Activate/deactivate the tracking mode for UI events
289
- *
290
278
  * @param activate activation/deactivation boolean
291
279
  */
292
280
  toggleUiTracking(activate) {
@@ -294,22 +282,21 @@ export class EventTrackService {
294
282
  }
295
283
  /**
296
284
  * Activate/deactivate the tracking mode for performance measurements
297
- *
298
285
  * @param activate activation/deactivation boolean
299
286
  */
300
287
  togglePerfTracking(activate) {
301
288
  this.perfTrackingActivated.next(activate);
302
289
  }
303
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: EventTrackService, deps: [{ token: i1.Router }, { token: i0.NgZone }, { token: EVENT_TRACK_SERVICE_CONFIGURATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
304
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: EventTrackService, providedIn: 'root' }); }
290
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EventTrackService, deps: [{ token: i1.Router }, { token: i0.NgZone }, { token: EVENT_TRACK_SERVICE_CONFIGURATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
291
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EventTrackService, providedIn: 'root' }); }
305
292
  }
306
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: EventTrackService, decorators: [{
293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EventTrackService, decorators: [{
307
294
  type: Injectable,
308
295
  args: [{ providedIn: 'root' }]
309
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.NgZone }, { type: undefined, decorators: [{
296
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i0.NgZone }, { type: undefined, decorators: [{
310
297
  type: Optional
311
298
  }, {
312
299
  type: Inject,
313
300
  args: [EVENT_TRACK_SERVICE_CONFIGURATION]
314
- }] }]; } });
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtdHJhY2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9ldmVudC10cmFjay9ldmVudC10cmFjay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsaUNBQWlDLEVBQTJCLE1BQU0sNkJBQTZCLENBQUM7OztBQUV6SSx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQXFCO0lBQzVELElBQUksRUFBRSxFQUFFO0lBQ1IsU0FBUyxFQUFFLEVBQUU7SUFDYixXQUFXLEVBQUUsRUFBRTtJQUNmLFdBQVcsRUFBRSxFQUFFO0NBQ2hCLENBQUM7QUFFRjs7R0FFRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFvQzVCLGlDQUFpQztJQUNqQyxJQUFZLGtCQUFrQjtRQUM1QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsaUNBQWlDO0lBQ2pDLElBQVksa0JBQWtCLENBQUMsS0FBdUI7UUFDcEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUks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QyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDckQsT0FBTyxDQUFDLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7Z0JBQ2hDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVUsQ0FBQyxPQUF1QjtRQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWMsQ0FBQyxXQUErQjtRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCLENBQUMsUUFBaUI7UUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLFFBQWlCO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQztpSUE1VlUsaUJBQWlCLDhEQWdEa0QsaUNBQWlDO3FJQWhEcEcsaUJBQWlCLGNBRmYsTUFBTTs7MkZBRVIsaUJBQWlCO2tCQUg3QixVQUFVO21CQUNULEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7MEJBa0R1QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHR5cGUgeyBNYXJrIH0gZnJvbSAnQGFtYS1zZGsvY29yZSc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgc2tpcCwgc2tpcFdoaWxlLCB0YWtlLCB0YWtlV2hpbGUsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3VzdG9tRXZlbnRNYXJrcywgQ3VzdG9tRXZlbnRQYXlsb2FkLCBFdmVudFRpbWluZywgRmlyc3RMb2FkRGF0YVBheWxvYWQsIFBlcmZFdmVudFBheWxvYWQsIFNlcnZlckNhbGxNZXRyaWMsIFVpRXZlbnRQYXlsb2FkIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzJztcbmltcG9ydCB7IGRlZmF1bHRFdmVudFRyYWNrQ29uZmlndXJhdGlvbiwgRVZFTlRfVFJBQ0tfU0VSVklDRV9DT05GSUdVUkFUSU9OLCBFdmVudFRyYWNrQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vZXZlbnQtdHJhY2suY29uZmlndXJhdGlvbic7XG5cbi8qKiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzICovXG5leHBvcnQgY29uc3QgcGVyZm9ybWFuY2VNYXJrc0luaXRpYWxTdGF0ZTogUGVyZkV2ZW50UGF5bG9hZCA9IHtcbiAgcGFnZTogJycsXG4gIHBlcmNlaXZlZDoge30sXG4gIHNlcnZlckNhbGxzOiBbXSxcbiAgY3VzdG9tTWFya3M6IFtdXG59O1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gZXhwb3NlIHRoZSB0cmFja2VkIGV2ZW50cyBhcyBzdHJlYW1zLiBBbHNvIHByb3ZpZGUgYSB3YXkgdG8gYWN0aXZhdGUvZGVhY3RpdmF0ZSB0aGUgdHJhY2tpbmdcbiAqL1xuQEluamVjdGFibGUoXG4gIHtwcm92aWRlZEluOiAncm9vdCd9XG4pXG5leHBvcnQgY2xhc3MgRXZlbnRUcmFja1NlcnZpY2Uge1xuXG4gIHByaXZhdGUgdWlFdmVudFRyYWNrOiBSZXBsYXlTdWJqZWN0PFVpRXZlbnRQYXlsb2FkPjtcblxuICBwcml2YXRlIGN1c3RvbUV2ZW50VHJhY2s6IFJlcGxheVN1YmplY3Q8Q3VzdG9tRXZlbnRQYXlsb2FkPjtcblxuICBwcml2YXRlIHBlcmZFdmVudFRyYWNrOiBSZXBsYXlTdWJqZWN0PFBlcmZFdmVudFBheWxvYWQ+O1xuXG4gIHByaXZhdGUgdWlUcmFja2luZ0FjdGl2YXRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIHByaXZhdGUgcGVyZlRyYWNraW5nQWN0aXZhdGVkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgcHJpdmF0ZSBmaXJzdFBhaW50PzogUHJvbWlzZTxFdmVudFRpbWluZz47XG5cbiAgLyoqIFVJIGNhcHR1cmVkIGV2ZW50cyBhcyBzdHJlYW0gKi9cbiAgcHVibGljIHVpRXZlbnRUcmFjayQ6IE9ic2VydmFibGU8VWlFdmVudFBheWxvYWQ+O1xuXG4gIC8qKiBDdXN0b20gY2FwdHVyZWQgZXZlbnRzIGFzIHN0cmVhbSAqL1xuICBwdWJsaWMgY3VzdG9tRXZlbnRUcmFjayQ6IE9ic2VydmFibGU8Q3VzdG9tRXZlbnRQYXlsb2FkPjtcblxuICAvKiogUGVyZm9ybWFuY2UgY2FwdHVyZWQgZXZlbnRzIGFzIHN0cmVhbSAqL1xuICBwdWJsaWMgcGVyZkV2ZW50VHJhY2skOiBPYnNlcnZhYmxlPFBlcmZFdmVudFBheWxvYWQ+O1xuXG4gIC8qKiBTdHJlYW0gb2YgYm9vbGVhbnMgZm9yIHRoZSB1aSB0cmFja2luZyBtb2RlIGFjdGl2ZS9pbmFjdGl2ZSAqL1xuICBwdWJsaWMgdWlUcmFja2luZ0FjdGl2ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgLyoqIFN0cmVhbSBvZiBib29sZWFucyBmb3IgdGhlIHBlcmZvcm1hbmNlIHRyYWNraW5nIG1vZGUgYWN0aXZlL2luYWN0aXZlICovXG4gIHB1YmxpYyBwZXJmVHJhY2tpbmdBY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIC8qKiBUcnVlIGlmIHRoZSBwZXJmIHRyYWNraW5nIGlzIGFjdGl2YXRlZDsgZmFsc2Ugb3RoZXJ3aXNlICovXG4gIHByaXZhdGUgaXNQZXJmVHJhY2tpbmdBY3RpdmUhOiBib29sZWFuO1xuXG4gIC8qKiBCb29sZWFuIHRvIGluZGljYXRlIHRoZSBmaXJzdCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvbiAqL1xuICBwcml2YXRlIGlzRmlyc3RMb2FkID0gdHJ1ZTtcblxuICBwcml2YXRlIF9wZXJmb3JtYW5jZVBheWxvYWQ6IFBlcmZFdmVudFBheWxvYWQgPSBwZXJmb3JtYW5jZU1hcmtzSW5pdGlhbFN0YXRlO1xuICAvKiogUGVyZm9ybWFuY2UgcGF5bG9hZCBvYmplY3QgKi9cbiAgcHJpdmF0ZSBnZXQgcGVyZm9ybWFuY2VQYXlsb2FkKCkge1xuICAgIHJldHVybiB0aGlzLl9wZXJmb3JtYW5jZVBheWxvYWQ7XG4gIH1cbiAgLyoqIFBlcmZvcm1hbmNlIHBheWxvYWQgb2JqZWN0ICovXG4gIHByaXZhdGUgc2V0IHBlcmZvcm1hbmNlUGF5bG9hZCh2YWx1ZTogUGVyZkV2ZW50UGF5bG9hZCkge1xuICAgIGlmICh0aGlzLmlzUGVyZlRyYWNraW5nQWN0aXZlKSB7XG4gICAgICB0aGlzLl9wZXJmb3JtYW5jZVBheWxvYWQgPSB7Li4udmFsdWUsIHBhZ2U6IHRoaXMucm91dGVyLnVybH07IC8vIFNhdmVzIHRoZSBjdXJyZW50IHBhZ2UgdXJsXG4gICAgICB0aGlzLnBlcmZFdmVudFRyYWNrLm5leHQodGhpcy5fcGVyZm9ybWFuY2VQYXlsb2FkKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHpvbmU6IE5nWm9uZSwgQE9wdGlvbmFsKCkgQEluamVjdChFVkVOVF9UUkFDS19TRVJWSUNFX0NPTkZJR1VSQVRJT04pIGNvbmZpZz86IEV2ZW50VHJhY2tDb25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgZXZlbnRDb25maWd1cmF0aW9uID0gey4uLmRlZmF1bHRFdmVudFRyYWNrQ29uZmlndXJhdGlvbiwgLi4uY29uZmlnfTtcbiAgICB0aGlzLnVpVHJhY2tpbmdBY3RpdmF0ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGV2ZW50Q29uZmlndXJhdGlvbi5hY3RpdmF0ZS51aVRyYWNraW5nKTtcbiAgICB0aGlzLnVpVHJhY2tpbmdBY3RpdmUkID0gdGhpcy51aVRyYWNraW5nQWN0aXZhdGVkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudWlFdmVudFRyYWNrID0gbmV3IFJlcGxheVN1YmplY3Q8VWlFdmVudFBheWxvYWQ+KGV2ZW50Q29uZmlndXJhdGlvbi51aUV2ZW50c0J1ZmZlclNpemUpO1xuICAgIHRoaXMudWlFdmVudFRyYWNrJCA9IHRoaXMudWlFdmVudFRyYWNrLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgLy8gQ3VzdG9tIGV2ZW50c1xuICAgIHRoaXMuY3VzdG9tRXZlbnRUcmFjayA9IG5ldyBSZXBsYXlTdWJqZWN0PEN1c3RvbUV2ZW50UGF5bG9hZD4oKTtcbiAgICB0aGlzLmN1c3RvbUV2ZW50VHJhY2skID0gdGhpcy5jdXN0b21FdmVudFRyYWNrLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgdGhpcy5wZXJmVHJhY2tpbmdBY3RpdmF0ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGV2ZW50Q29uZmlndXJhdGlvbi5hY3RpdmF0ZS5wZXJmVHJhY2tpbmcpO1xuICAgIHRoaXMucGVyZlRyYWNraW5nQWN0aXZlJCA9IHRoaXMucGVyZlRyYWNraW5nQWN0aXZhdGVkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMucGVyZkV2ZW50VHJhY2sgPSBuZXcgUmVwbGF5U3ViamVjdDxQZXJmRXZlbnRQYXlsb2FkPihldmVudENvbmZpZ3VyYXRpb24ucGVyZkJ1ZmZlclNpemUpO1xuICAgIHRoaXMucGVyZkV2ZW50VHJhY2skID0gdGhpcy5wZXJmRXZlbnRUcmFjay5hc09ic2VydmFibGUoKTtcblxuICAgIHRoaXMucGVyZlRyYWNraW5nQWN0aXZlJC5zdWJzY3JpYmUoKGFjdGl2YXRlZCkgPT4gdGhpcy5pc1BlcmZUcmFja2luZ0FjdGl2ZSA9IGFjdGl2YXRlZCk7XG5cbiAgICBjb25zdCByb3V0ZXJOYXZpZ2F0aW9uRW5kJCA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpO1xuICAgIGNvbnN0IHRyYWNraW5nTmF2aWdhdGlvbkVuZCQgPSByb3V0ZXJOYXZpZ2F0aW9uRW5kJC5waXBlKHdpdGhMYXRlc3RGcm9tKHRoaXMucGVyZlRyYWNraW5nQWN0aXZlJCkpO1xuXG4gICAgLy8gSGFuZGxlcyBmaXJzdCBsb2FkIG5hdmlnYXRpb25cbiAgICBjb21iaW5lTGF0ZXN0KFxuICAgICAgdHJhY2tpbmdOYXZpZ2F0aW9uRW5kJC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdHlwZW9mIHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcgIT09ICd1bmRlZmluZWQnKSxcbiAgICAgICAgdGFrZVdoaWxlKChbX2V2ZW50LCBhY3RpdmVdKSA9PiBhY3RpdmUpXG4gICAgICApLFxuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ2xvYWQnKS5waXBlKGRlbGF5KDApKVxuICAgICkuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChldmVudENvbmZpZ3VyYXRpb24udXNlQnJvd3NlckFwaUZvckZpcnN0RlApIHtcbiAgICAgICAgY29uc3QgYnJvd3NlckVudHJpZXMgPSB3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSAmJiB3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSgncGFpbnQnKTtcbiAgICAgICAgY29uc3QgYnJvd3NlckZQID0gYnJvd3NlckVudHJpZXMgJiYgYnJvd3NlckVudHJpZXMuZmluZCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09ICdmaXJzdC1wYWludCcpO1xuICAgICAgICBpZiAoYnJvd3NlckZQKSB7XG4gICAgICAgICAgY29uc3QgZW5kVGltZSA9IE1hdGgucm91bmQoYnJvd3NlckZQLnN0YXJ0VGltZSk7XG4gICAgICAgICAgdGhpcy5hZGRGUFRvUGVyZlBheWxvYWQoe3N0YXJ0VGltZTogMCwgZW5kVGltZX0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZmlyc3RQYWludCkgeyAvLyBJZiB0aGVyZSBpcyBhIHJlZ2lzdGVyZWQgZmlyc3RQYWludCB2YWx1ZSBlbWl0IGl0XG4gICAgICAgIHRoaXMuYWRkRlBUb1BlcmZQYXlsb2FkKGF3YWl0IHRoaXMuZmlyc3RQYWludCk7XG4gICAgICAgIHRoaXMuZmlyc3RQYWludCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHRoaXMubWFya0ZpcnN0TG9hZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlcyBsYXRlciBuYXZpZ2F0aW9uXG4gICAgdHJhY2tpbmdOYXZpZ2F0aW9uRW5kJC5waXBlKFxuICAgICAgc2tpcCgxKSxcbiAgICAgIHNraXBXaGlsZSgoW19ldmVudCwgYWN0aXZlXSkgPT4gIWFjdGl2ZSlcbiAgICApLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLmlzRmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc2V0UGVyZk1hcmtzKCk7XG4gICAgICBpZiAodGhpcy5maXJzdFBhaW50KSB7IC8vIElmIHRoZXJlIGlzIGEgcmVnaXN0ZXJlZCBmaXJzdFBhaW50IHZhbHVlIGVtaXQgaXRcbiAgICAgICAgdGhpcy5hZGRGUFRvUGVyZlBheWxvYWQoYXdhaXQgdGhpcy5maXJzdFBhaW50KTtcbiAgICAgICAgdGhpcy5maXJzdFBhaW50ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG1ldHJpY3Mgb2JqZWN0IGZvciB0aGUgZmlyc3QgbG9hZCBvZiB0aGUgYXBwbGljYXRpb25cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRmlyc3RMb2FkRGF0YSgpOiBGaXJzdExvYWREYXRhUGF5bG9hZCB7XG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbm5lY3Rpb246IE1hdGgucm91bmQobmF2aWdhdGlvbi5jb25uZWN0RW5kIC0gbmF2aWdhdGlvbi5uYXZpZ2F0aW9uU3RhcnQpLFxuICAgICAgcmVxdWVzdDogTWF0aC5yb3VuZChuYXZpZ2F0aW9uLnJlc3BvbnNlU3RhcnQgLSBuYXZpZ2F0aW9uLmNvbm5lY3RFbmQpLFxuICAgICAgcmVzcG9uc2U6IE1hdGgucm91bmQobmF2aWdhdGlvbi5yZXNwb25zZUVuZCAtIG5hdmlnYXRpb24ucmVzcG9uc2VTdGFydCksXG4gICAgICBET006IE1hdGgucm91bmQobmF2aWdhdGlvbi5sb2FkRXZlbnRFbmQgLSBuYXZpZ2F0aW9uLnJlc3BvbnNlRW5kKSxcbiAgICAgIHRvdGFsOiBNYXRoLnJvdW5kKG5hdmlnYXRpb24ubG9hZEV2ZW50RW5kIC0gbmF2aWdhdGlvbi5uYXZpZ2F0aW9uU3RhcnQpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1bGF0ZSBwZXJmb3JtYW5jZSBwYXlsb2FkIHdpdGggRlAgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSBGUFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRGUFRvUGVyZlBheWxvYWQoRlA6IEV2ZW50VGltaW5nKSB7XG4gICAgY29uc3QgcGVyZkZpcnN0UGFpbnQgPSB7XG4gICAgICAuLi50aGlzLnBlcmZvcm1hbmNlUGF5bG9hZCxcbiAgICAgIHBlcmNlaXZlZDoge1xuICAgICAgICAuLi50aGlzLnBlcmZvcm1hbmNlUGF5bG9hZC5wZXJjZWl2ZWQsXG4gICAgICAgIEZQXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnBlcmZvcm1hbmNlUGF5bG9hZCA9IHBlcmZGaXJzdFBhaW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGFsbCBtZXRyaWNzIHRvIGluaXRpYWwgc3RhdGU7IEFkZCB0aGUgcGFnZU5hbWUgb24gdG9wIG9mIGl0XG4gICAqL1xuICBwdWJsaWMgcmVzZXRQZXJmTWFya3MoKSB7XG4gICAgdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQgPSB7IC4uLnBlcmZvcm1hbmNlTWFya3NJbml0aWFsU3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBmaXJzdCBsb2FkIG1ldHJpY3MgdXNpbmcgdGhlIG5hdmlnYXRpb24gQVBJLlxuICAgKiBUaGlzIGhhcyB0byBiZSBjYWxsZWQgb25seSBvbmNlIGluIGEgc2luZ2xlIHBhZ2UgYXBwbGljYXRpb24sIGJlaW5nIG1lYW5pbmdmdWwgb25seSBmb3IgdGhlIGZpcnN0IGxvYWRcbiAgICogVGhpcyBtYXJrIGlzIHBvcHVsYXRlZCBieSBkZWZhdWx0IGluIHRoaXMgc2VydmljZSB3aGVuIHRoZSBOYXZpZ2F0aW9uRW5kIGV2ZW50IG9mIHRoZSByb3V0ZXIgZW1pdHMgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqL1xuICBwdWJsaWMgbWFya0ZpcnN0TG9hZCgpIHtcbiAgICBjb25zdCBmaXJzdExvYWQgPSB0aGlzLmNyZWF0ZUZpcnN0TG9hZERhdGEoKTtcbiAgICB0aGlzLnBlcmZvcm1hbmNlUGF5bG9hZCA9IHsgLi4udGhpcy5wZXJmb3JtYW5jZVBheWxvYWQsIGZpcnN0TG9hZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIGZpcnN0IHBhaW50IHZhbHVlXG4gICAqIFN0b3JlIHRoZSBmaXJzdCBwYWludCB0aW1pbmcgdmFsdWUgdG8gYmUgZW1pdHRlZCBhdCBOYXZpZ2F0aW9uIEVuZFxuICAgKlxuICAgKiBAcGFyYW0gZW1pdCBJZiB0cnVlLCBzZXRzIHRoZSBGUCB0byB0aGUgY3VycmVudCBwYWdlLiBPdGhlcndpc2UsIHdhaXQgZm9yIG5leHQgTmF2aWdhdGlvbkVuZCBldmVudCB0byBoYXBwZW5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtYXJrRlAoZW1pdCA9IGZhbHNlKSB7XG4gICAgdGhpcy5maXJzdFBhaW50ID0gdGhpcy5nZXRUaW1pbmcoKTtcbiAgICBpZiAoZW1pdCkge1xuICAgICAgdGhpcy5hZGRGUFRvUGVyZlBheWxvYWQoYXdhaXQgdGhpcy5maXJzdFBhaW50KTtcbiAgICAgIHRoaXMuZmlyc3RQYWludCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFyayB0aGUgZmlyc3QgbWVhbmluZ2Z1bCBwYWludCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIG1hcmtPbmx5Rmlyc3RMb2FkIElmIGZhbHNlLCBtYXJrcyB0aGUgRk1QIGZvciBzdWJzZXF1ZW50IGxvYWRzIGVsc2Ugb25seSBmb3IgdGhlIGZpcnN0IGxvYWQgb2YgdGhlIGFwcGxpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWFya0ZNUChtYXJrT25seUZpcnN0TG9hZCA9IHRydWUpIHtcbiAgICBpZiAoIW1hcmtPbmx5Rmlyc3RMb2FkIHx8IChtYXJrT25seUZpcnN0TG9hZCAmJiB0aGlzLmlzRmlyc3RMb2FkKSkge1xuICAgICAgY29uc3QgdGltaW5nID0gYXdhaXQgdGhpcy5nZXRUaW1pbmcoKTtcbiAgICAgIGNvbnN0IHBlcmZGaXJzdE1lYW5pbmdmdWxQYWludCA9IHtcbiAgICAgICAgLi4udGhpcy5wZXJmb3JtYW5jZVBheWxvYWQsXG4gICAgICAgIHBlcmNlaXZlZDoge1xuICAgICAgICAgIC4uLnRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLnBlcmNlaXZlZCxcbiAgICAgICAgICBGTVA6IHRpbWluZ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQgPSBwZXJmRmlyc3RNZWFuaW5nZnVsUGFpbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBkYXRhIHJlYWR5IHBlcmNlaXZlZCBldmVudFxuICAgKiBUaGlzIHByb2JlIG1hcmtzIHRoZSB0aW1lIHdoZW4gdGhlIHBhZ2UgY29uc2lkZXJzIGl0IGhhcyBhbGwgdGhlIGRhdGEgdG8gYmVjb21lIGludGVyYWN0aXZlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWFya0RhdGFSZWFkeSgpIHtcbiAgICBjb25zdCB0aW1pbmcgPSBhd2FpdCB0aGlzLmdldFRpbWluZygpO1xuICAgIGNvbnN0IHBlcmZEYXRhUmVhZHkgPSB7XG4gICAgICAuLi50aGlzLnBlcmZvcm1hbmNlUGF5bG9hZCxcbiAgICAgIHBlcmNlaXZlZDoge1xuICAgICAgICAuLi50aGlzLnBlcmZvcm1hbmNlUGF5bG9hZC5wZXJjZWl2ZWQsXG4gICAgICAgIGRhdGFSZWFkeTogdGltaW5nXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnBlcmZvcm1hbmNlUGF5bG9hZCA9IHBlcmZEYXRhUmVhZHk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIGV2ZW50IGFuZCBpdHMgbWVhc3VyZW1lbnRzXG4gICAqXG4gICAqIEBwYXJhbSBsYWJlbCBUaGUgZXZlbnQgbmFtZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFkZEN1c3RvbU1hcmsobGFiZWw6IHN0cmluZykge1xuICAgIGNvbnN0IHRpbWluZyA9IGF3YWl0IHRoaXMuZ2V0VGltaW5nKCk7XG4gICAgY29uc3QgY3VzdG9tTWFyazogQ3VzdG9tRXZlbnRNYXJrcyA9IHtsYWJlbCwgdGltaW5nfTtcbiAgICBjb25zdCBwZXJmID0geyAuLi50aGlzLnBlcmZvcm1hbmNlUGF5bG9hZCwgY3VzdG9tTWFya3M6IHRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLmN1c3RvbU1hcmtzLmNvbmNhdChjdXN0b21NYXJrKSB9O1xuICAgIHRoaXMucGVyZm9ybWFuY2VQYXlsb2FkID0gcGVyZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzZXJ2ZXIgY2FsbCBvYmplY3QgaW4gdGhlIGxpc3Qgb2Ygc2VydmVyIGNhbGxzIG1ldHJpY3NcbiAgICpcbiAgICogQHBhcmFtIHNlcnZlckNhbGwgVGhlIG9iamVjdCB0byBhZGQgaW4gdGhlIHNlcnZlciBjYWxscyBtZXRyaWNzXG4gICAqL1xuICBwdWJsaWMgYWRkU2VydmVyQ2FsbE1hcmsoc2VydmVyQ2FsbDogU2VydmVyQ2FsbE1ldHJpYykge1xuICAgIGNvbnN0IHBlcmYgPSB7IC4uLnRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLCBzZXJ2ZXJDYWxsczogdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQuc2VydmVyQ2FsbHMuY29uY2F0KHNlcnZlckNhbGwpIH07XG4gICAgdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQgPSBwZXJmO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIER4QVBJIFNESyBzZXJ2ZXIgY2FsbCBvYmplY3QsIGNyZWF0ZWQgYnkgdGhlIFNESyBQcm9iZSBwbHVnaW4sIGluIHRoZSBsaXN0IG9mIHNlcnZlciBjYWxscyBtZXRyaWNzLlxuICAgKiBJbiBvcmRlciB0byBoYXZlIHJlcXVlc3RJZCBmb3IgdGhlIER4QVBJIGNhbGxzLCB5b3VyIHNlcnZlciBoYXMgdG8gZXhwb3NlICdhbWEtcmVxdWVzdC1pZCcgdmlhIEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzXG4gICAqXG4gICAqIEBwYXJhbSBzZXJ2ZXJNYXJrIFRoZSBtYXJrIG9iamVjdFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFkZFNES1NlcnZlckNhbGxNYXJrKHNlcnZlck1hcms6IE1hcmspIHtcbiAgICBsZXQgc2VydmVyQ2FsbE1ldHJpYzogU2VydmVyQ2FsbE1ldHJpYyA9IHtcbiAgICAgIHVybDogc2VydmVyTWFyay51cmwsXG4gICAgICBodHRwTWV0aG9kOiBzZXJ2ZXJNYXJrLnJlcXVlc3RPcHRpb25zLm1ldGhvZCxcbiAgICAgIGh0dHBTdGF0dXM6IHNlcnZlck1hcmsucmVzcG9uc2UgJiYgc2VydmVyTWFyay5yZXNwb25zZS5zdGF0dXMsXG4gICAgICB0aW1pbmc6IHtzdGFydFRpbWU6IHNlcnZlck1hcmsuc3RhcnRUaW1lLCBlbmRUaW1lOiBzZXJ2ZXJNYXJrLmVuZFRpbWV9LFxuICAgICAgZXJyb3I6IHNlcnZlck1hcmsuZXJyb3JcbiAgICB9O1xuICAgIGlmIChzZXJ2ZXJNYXJrLnJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IHNlcnZlck1hcmsucmVzcG9uc2UuY2xvbmUoKTtcbiAgICAgIGNvbnN0IGFtYVJlcXVlc3RJZCA9IGNsb25lZFJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdhbWEtcmVxdWVzdC1pZCcpO1xuICAgICAgc2VydmVyQ2FsbE1ldHJpYyA9IHtcbiAgICAgICAgLi4uc2VydmVyQ2FsbE1ldHJpYyxcbiAgICAgICAgcmVzcG9uc2VTaXplOiAoYXdhaXQgY2xvbmVkUmVzcG9uc2UuYmxvYigpKS5zaXplLFxuICAgICAgICByZXF1ZXN0SWQ6IGFtYVJlcXVlc3RJZCB8fCB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuYWRkU2VydmVyQ2FsbE1hcmsoc2VydmVyQ2FsbE1ldHJpYyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIGV2ZW50IGFuZCBtYXJrIHRoZSBzdGFydCB0aW1lLCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCBpbmRleFxuICAgKlxuICAgKiBAcGFyYW0gbGFiZWwgRXZlbnQgbmFtZVxuICAgKiBAcmV0dXJucyB0aGUgZWxlbWVudCBpbmRleCBpZiB0cmFja2luZyBpcyBhY3RpdmUuIE90aGVyd2lzZSwgLTFcbiAgICovXG4gIHB1YmxpYyBzdGFydEN1c3RvbU1hcmsobGFiZWw6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5pc1BlcmZUcmFja2luZ0FjdGl2ZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjb25zdCBzdGFydFRpbWUgPSBNYXRoLnJvdW5kKHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSk7XG4gICAgY29uc3QgY3VzdG9tTWFyazogQ3VzdG9tRXZlbnRNYXJrcyA9IHtsYWJlbCwgdGltaW5nOiB7c3RhcnRUaW1lfX07XG4gICAgY29uc3QgcGVyZiA9IHsgLi4udGhpcy5wZXJmb3JtYW5jZVBheWxvYWQsIGN1c3RvbU1hcmtzOiB0aGlzLnBlcmZvcm1hbmNlUGF5bG9hZC5jdXN0b21NYXJrcy5jb25jYXQoY3VzdG9tTWFyaykgfTtcbiAgICB0aGlzLnBlcmZvcm1hbmNlUGF5bG9hZCA9IHBlcmY7XG4gICAgcmV0dXJuIHRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLmN1c3RvbU1hcmtzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogRW5kIHRoZSBldmVudCBtYXJrIGdpdmVuIGluIHBhcmFtZXRlcjtcbiAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgY3VzdG9tIGV2ZW50IGlzIG5vdCBmb3VuZCBpbiB0aGUgbGlzdCBvZiBjdXN0b20gbWFya3M7IHRydWUgb3RoZXJ3aXNlXG4gICAqXG4gICAqIEBwYXJhbSBldmVudEluZGV4IEluZGV4IG9mIHRoZSBjdXN0b20gZXZlbnQgdG8gYmUgbWFya2VkIGFzIGVuZGVkXG4gICAqL1xuICBwdWJsaWMgZW5kQ3VzdG9tTWFyayhldmVudEluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNQZXJmVHJhY2tpbmdBY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHVwZGF0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBwZXJmID0ge1xuICAgICAgLi4udGhpcy5wZXJmb3JtYW5jZVBheWxvYWQsXG4gICAgICBjdXN0b21NYXJrczogdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQuY3VzdG9tTWFya3MubWFwKChldmVudE9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICE9PSBldmVudEluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50T2JqO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBlbmRUaW1lID0gTWF0aC5yb3VuZCh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkpO1xuICAgICAgICByZXR1cm4ge2xhYmVsOiBldmVudE9iai5sYWJlbCwgdGltaW5nOiB7Li4uZXZlbnRPYmoudGltaW5nLCBlbmRUaW1lfX07XG4gICAgICB9KVxuICAgIH07XG4gICAgdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQgPSBwZXJmO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBnb2FsIG9mIHRoaXMgbWV0aG9kIGlzIHRvIGNvbXB1dGUgYSB0aW1lIHJhbmdlIGR1cmF0aW9uIGJldHdlZW4gdGhlIG1vbWVudCB5b3UgY2FsbCB0aGUgZnVuY3Rpb24gKGxvd2VyIGJvdW5kIHRpbWVzdGFtcClcbiAgICogYW5kIHRoZSBlbmQgb2YgdGhlIGNvbXBvc2l0ZSByZW5kZXJpbmcgKHVwcGVyIGJvdW5kIG1lYXN1cmVtZW50IC0gYSB0aW1lIG1hcmsgdGhhdCBvY2N1cnMgYWZ0ZXIgdGhlIHJlYWwgY29tcG9zaXRlKVxuICAgKiBGb3IgdGhlIGZpcnN0IGxvYWQgb2YgdGhlIGFwcGxpY2F0aW9uLCB0aGUgc3RhcnQgdGltZSBpcyBjb25zaWRlcmVkIGFzIHRoZSBzdGFydCBvZiBuYXZpZ2F0aW9uIHRvIGVuc3VyZSBhIGN1bXVsYXRpdmUgbWVhc3VyZS5cbiAgICogSXQgaXMgdXNpbmcgdGhlICdOZ1pvbmUnIHNlcnZpY2UgdG8gcnVuT3V0c2lkZUFuZ3VsYXIgdG8gcHJldmVudCBhbnkgY2hhbmdlIGRldGVjdGlvbiB0byBvY2N1ciwgbm9yIGFuZ3VsYXIgZXJyb3IgaGFuZGxpbmcsIHNwZWVkaW5nIHVwIHRoZSBtZWFzdXJlbWVudC5cbiAgICpcbiAgICogQGV4YW1wbGUgbWFya0ZNUCgpIGlzIGNhbGxlZCBpbiBuZ0FmdGVyVmlld0luaXQoKSwgdGhlIGVuZCB0aW1lIHdpbGwgYmUgY29tcHV0ZWQgb25jZSB0aGUgcmVuZGVyIHBpcGVsaW5lIHN0YWdlIGNvbXBsZXRlZCB0aGUgY2hhbmdlcyB0cmlnZ2VyZWQgYnkgdGhlIGphdmFzY3JpcHRcbiAgICovXG4gIHB1YmxpYyBnZXRUaW1pbmcoKTogUHJvbWlzZTxFdmVudFRpbWluZz4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuaXNGaXJzdExvYWQgPyAwIDogTWF0aC5yb3VuZCh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW5kVGltZSA9IE1hdGgucm91bmQod2luZG93LnBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgICByZXNvbHZlKHtzdGFydFRpbWUsIGVuZFRpbWV9KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIHN0cmVhbSBvZiBjYXB0dXJlZCBVSSBldmVudHNcbiAgICpcbiAgICogQHBhcmFtIHVpRXZlbnQgZW1pdHRlZCBldmVudCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBhZGRVaUV2ZW50KHVpRXZlbnQ6IFVpRXZlbnRQYXlsb2FkKSB7XG4gICAgdGhpcy51aUV2ZW50VHJhY2submV4dCh1aUV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIHN0cmVhbSBvZiBjYXB0dXJlZCBjdXN0b20gZXZlbnRzXG4gICAqXG4gICAqIEBwYXJhbSBjdXN0b21FdmVudCBlbWl0dGVkIGV2ZW50IG9iamVjdFxuICAgKi9cbiAgcHVibGljIGFkZEN1c3RvbUV2ZW50KGN1c3RvbUV2ZW50OiBDdXN0b21FdmVudFBheWxvYWQpIHtcbiAgICB0aGlzLmN1c3RvbUV2ZW50VHJhY2submV4dChjdXN0b21FdmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGUvZGVhY3RpdmF0ZSB0aGUgdHJhY2tpbmcgbW9kZSBmb3IgVUkgZXZlbnRzXG4gICAqXG4gICAqIEBwYXJhbSBhY3RpdmF0ZSBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBib29sZWFuXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlVWlUcmFja2luZyhhY3RpdmF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMudWlUcmFja2luZ0FjdGl2YXRlZC5uZXh0KGFjdGl2YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZS9kZWFjdGl2YXRlIHRoZSB0cmFja2luZyBtb2RlIGZvciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHNcbiAgICpcbiAgICogQHBhcmFtIGFjdGl2YXRlIGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGJvb2xlYW5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVQZXJmVHJhY2tpbmcoYWN0aXZhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnBlcmZUcmFja2luZ0FjdGl2YXRlZC5uZXh0KGFjdGl2YXRlKTtcbiAgfVxufVxuIl19
301
+ }] }] });
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtdHJhY2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9ldmVudC10cmFjay9ldmVudC10cmFjay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsaUNBQWlDLEVBQTJCLE1BQU0sNkJBQTZCLENBQUM7OztBQUV6SSx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQXFCO0lBQzVELElBQUksRUFBRSxFQUFFO0lBQ1IsU0FBUyxFQUFFLEVBQUU7SUFDYixXQUFXLEVBQUUsRUFBRTtJQUNmLFdBQVcsRUFBRSxFQUFFO0NBQ2hCLENBQUM7QUFFRjs7R0FFRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFvQzVCLGlDQUFpQztJQUNqQyxJQUFZLGtCQUFrQjtRQUM1QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsaUNBQWlDO0lBQ2pDLElBQVksa0JBQWtCLENBQUMsS0FBdUI7UUFDcEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUks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Q0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNyRCxPQUFPLENBQUMsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztnQkFDaEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVLENBQUMsT0FBdUI7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWMsQ0FBQyxXQUErQjtRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxRQUFpQjtRQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxRQUFpQjtRQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7aUlBL1VVLGlCQUFpQiw4REFnRG9FLGlDQUFpQztxSUFoRHRILGlCQUFpQixjQUZmLE1BQU07OzJGQUVSLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFDVCxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQWtEeUQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHsgTWFyayB9IGZyb20gJ0BhbWEtc2RrL2NvcmUnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIHNraXAsIHNraXBXaGlsZSwgdGFrZSwgdGFrZVdoaWxlLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEN1c3RvbUV2ZW50TWFya3MsIEN1c3RvbUV2ZW50UGF5bG9hZCwgRXZlbnRUaW1pbmcsIEZpcnN0TG9hZERhdGFQYXlsb2FkLCBQZXJmRXZlbnRQYXlsb2FkLCBTZXJ2ZXJDYWxsTWV0cmljLCBVaUV2ZW50UGF5bG9hZCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cyc7XG5pbXBvcnQgeyBkZWZhdWx0RXZlbnRUcmFja0NvbmZpZ3VyYXRpb24sIEVWRU5UX1RSQUNLX1NFUlZJQ0VfQ09ORklHVVJBVElPTiwgRXZlbnRUcmFja0NvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2V2ZW50LXRyYWNrLmNvbmZpZ3VyYXRpb24nO1xuXG4vKiogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cyAqL1xuZXhwb3J0IGNvbnN0IHBlcmZvcm1hbmNlTWFya3NJbml0aWFsU3RhdGU6IFBlcmZFdmVudFBheWxvYWQgPSB7XG4gIHBhZ2U6ICcnLFxuICBwZXJjZWl2ZWQ6IHt9LFxuICBzZXJ2ZXJDYWxsczogW10sXG4gIGN1c3RvbU1hcmtzOiBbXVxufTtcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIGV4cG9zZSB0aGUgdHJhY2tlZCBldmVudHMgYXMgc3RyZWFtcy4gQWxzbyBwcm92aWRlIGEgd2F5IHRvIGFjdGl2YXRlL2RlYWN0aXZhdGUgdGhlIHRyYWNraW5nXG4gKi9cbkBJbmplY3RhYmxlKFxuICB7cHJvdmlkZWRJbjogJ3Jvb3QnfVxuKVxuZXhwb3J0IGNsYXNzIEV2ZW50VHJhY2tTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVpRXZlbnRUcmFjazogUmVwbGF5U3ViamVjdDxVaUV2ZW50UGF5bG9hZD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21FdmVudFRyYWNrOiBSZXBsYXlTdWJqZWN0PEN1c3RvbUV2ZW50UGF5bG9hZD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwZXJmRXZlbnRUcmFjazogUmVwbGF5U3ViamVjdDxQZXJmRXZlbnRQYXlsb2FkPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVpVHJhY2tpbmdBY3RpdmF0ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBlcmZUcmFja2luZ0FjdGl2YXRlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIHByaXZhdGUgZmlyc3RQYWludD86IFByb21pc2U8RXZlbnRUaW1pbmc+O1xuXG4gIC8qKiBVSSBjYXB0dXJlZCBldmVudHMgYXMgc3RyZWFtICovXG4gIHB1YmxpYyB1aUV2ZW50VHJhY2skOiBPYnNlcnZhYmxlPFVpRXZlbnRQYXlsb2FkPjtcblxuICAvKiogQ3VzdG9tIGNhcHR1cmVkIGV2ZW50cyBhcyBzdHJlYW0gKi9cbiAgcHVibGljIGN1c3RvbUV2ZW50VHJhY2skOiBPYnNlcnZhYmxlPEN1c3RvbUV2ZW50UGF5bG9hZD47XG5cbiAgLyoqIFBlcmZvcm1hbmNlIGNhcHR1cmVkIGV2ZW50cyBhcyBzdHJlYW0gKi9cbiAgcHVibGljIHBlcmZFdmVudFRyYWNrJDogT2JzZXJ2YWJsZTxQZXJmRXZlbnRQYXlsb2FkPjtcblxuICAvKiogU3RyZWFtIG9mIGJvb2xlYW5zIGZvciB0aGUgdWkgdHJhY2tpbmcgbW9kZSBhY3RpdmUvaW5hY3RpdmUgKi9cbiAgcHVibGljIHVpVHJhY2tpbmdBY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIC8qKiBTdHJlYW0gb2YgYm9vbGVhbnMgZm9yIHRoZSBwZXJmb3JtYW5jZSB0cmFja2luZyBtb2RlIGFjdGl2ZS9pbmFjdGl2ZSAqL1xuICBwdWJsaWMgcGVyZlRyYWNraW5nQWN0aXZlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAvKiogVHJ1ZSBpZiB0aGUgcGVyZiB0cmFja2luZyBpcyBhY3RpdmF0ZWQ7IGZhbHNlIG90aGVyd2lzZSAqL1xuICBwcml2YXRlIGlzUGVyZlRyYWNraW5nQWN0aXZlITogYm9vbGVhbjtcblxuICAvKiogQm9vbGVhbiB0byBpbmRpY2F0ZSB0aGUgZmlyc3QgbG9hZCBvZiB0aGUgYXBwbGljYXRpb24gKi9cbiAgcHJpdmF0ZSBpc0ZpcnN0TG9hZCA9IHRydWU7XG5cbiAgcHJpdmF0ZSBfcGVyZm9ybWFuY2VQYXlsb2FkOiBQZXJmRXZlbnRQYXlsb2FkID0gcGVyZm9ybWFuY2VNYXJrc0luaXRpYWxTdGF0ZTtcbiAgLyoqIFBlcmZvcm1hbmNlIHBheWxvYWQgb2JqZWN0ICovXG4gIHByaXZhdGUgZ2V0IHBlcmZvcm1hbmNlUGF5bG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGVyZm9ybWFuY2VQYXlsb2FkO1xuICB9XG4gIC8qKiBQZXJmb3JtYW5jZSBwYXlsb2FkIG9iamVjdCAqL1xuICBwcml2YXRlIHNldCBwZXJmb3JtYW5jZVBheWxvYWQodmFsdWU6IFBlcmZFdmVudFBheWxvYWQpIHtcbiAgICBpZiAodGhpcy5pc1BlcmZUcmFja2luZ0FjdGl2ZSkge1xuICAgICAgdGhpcy5fcGVyZm9ybWFuY2VQYXlsb2FkID0gey4uLnZhbHVlLCBwYWdlOiB0aGlzLnJvdXRlci51cmx9OyAvLyBTYXZlcyB0aGUgY3VycmVudCBwYWdlIHVybFxuICAgICAgdGhpcy5wZXJmRXZlbnRUcmFjay5uZXh0KHRoaXMuX3BlcmZvcm1hbmNlUGF5bG9hZCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmUsIEBPcHRpb25hbCgpIEBJbmplY3QoRVZFTlRfVFJBQ0tfU0VSVklDRV9DT05GSUdVUkFUSU9OKSBjb25maWc/OiBFdmVudFRyYWNrQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IGV2ZW50Q29uZmlndXJhdGlvbiA9IHsuLi5kZWZhdWx0RXZlbnRUcmFja0NvbmZpZ3VyYXRpb24sIC4uLmNvbmZpZ307XG4gICAgdGhpcy51aVRyYWNraW5nQWN0aXZhdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihldmVudENvbmZpZ3VyYXRpb24uYWN0aXZhdGUudWlUcmFja2luZyk7XG4gICAgdGhpcy51aVRyYWNraW5nQWN0aXZlJCA9IHRoaXMudWlUcmFja2luZ0FjdGl2YXRlZC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnVpRXZlbnRUcmFjayA9IG5ldyBSZXBsYXlTdWJqZWN0PFVpRXZlbnRQYXlsb2FkPihldmVudENvbmZpZ3VyYXRpb24udWlFdmVudHNCdWZmZXJTaXplKTtcbiAgICB0aGlzLnVpRXZlbnRUcmFjayQgPSB0aGlzLnVpRXZlbnRUcmFjay5hc09ic2VydmFibGUoKTtcblxuICAgIC8vIEN1c3RvbSBldmVudHNcbiAgICB0aGlzLmN1c3RvbUV2ZW50VHJhY2sgPSBuZXcgUmVwbGF5U3ViamVjdDxDdXN0b21FdmVudFBheWxvYWQ+KCk7XG4gICAgdGhpcy5jdXN0b21FdmVudFRyYWNrJCA9IHRoaXMuY3VzdG9tRXZlbnRUcmFjay5hc09ic2VydmFibGUoKTtcblxuICAgIHRoaXMucGVyZlRyYWNraW5nQWN0aXZhdGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihldmVudENvbmZpZ3VyYXRpb24uYWN0aXZhdGUucGVyZlRyYWNraW5nKTtcbiAgICB0aGlzLnBlcmZUcmFja2luZ0FjdGl2ZSQgPSB0aGlzLnBlcmZUcmFja2luZ0FjdGl2YXRlZC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnBlcmZFdmVudFRyYWNrID0gbmV3IFJlcGxheVN1YmplY3Q8UGVyZkV2ZW50UGF5bG9hZD4oZXZlbnRDb25maWd1cmF0aW9uLnBlcmZCdWZmZXJTaXplKTtcbiAgICB0aGlzLnBlcmZFdmVudFRyYWNrJCA9IHRoaXMucGVyZkV2ZW50VHJhY2suYXNPYnNlcnZhYmxlKCk7XG5cbiAgICB0aGlzLnBlcmZUcmFja2luZ0FjdGl2ZSQuc3Vic2NyaWJlKChhY3RpdmF0ZWQpID0+IHRoaXMuaXNQZXJmVHJhY2tpbmdBY3RpdmUgPSBhY3RpdmF0ZWQpO1xuXG4gICAgY29uc3Qgcm91dGVyTmF2aWdhdGlvbkVuZCQgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgTmF2aWdhdGlvbkVuZCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKTtcbiAgICBjb25zdCB0cmFja2luZ05hdmlnYXRpb25FbmQkID0gcm91dGVyTmF2aWdhdGlvbkVuZCQucGlwZSh3aXRoTGF0ZXN0RnJvbSh0aGlzLnBlcmZUcmFja2luZ0FjdGl2ZSQpKTtcblxuICAgIC8vIEhhbmRsZXMgZmlyc3QgbG9hZCBuYXZpZ2F0aW9uXG4gICAgY29tYmluZUxhdGVzdChcbiAgICAgIHRyYWNraW5nTmF2aWdhdGlvbkVuZCQucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nICE9PSAndW5kZWZpbmVkJyksXG4gICAgICAgIHRha2VXaGlsZSgoW19ldmVudCwgYWN0aXZlXSkgPT4gYWN0aXZlKVxuICAgICAgKSxcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdsb2FkJykucGlwZShkZWxheSgwKSlcbiAgICApLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoZXZlbnRDb25maWd1cmF0aW9uLnVzZUJyb3dzZXJBcGlGb3JGaXJzdEZQKSB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJFbnRyaWVzID0gd2luZG93LnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUgJiYgd2luZG93LnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoJ3BhaW50Jyk7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJGUCA9IGJyb3dzZXJFbnRyaWVzICYmIGJyb3dzZXJFbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSAnZmlyc3QtcGFpbnQnKTtcbiAgICAgICAgaWYgKGJyb3dzZXJGUCkge1xuICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBNYXRoLnJvdW5kKGJyb3dzZXJGUC5zdGFydFRpbWUpO1xuICAgICAgICAgIHRoaXMuYWRkRlBUb1BlcmZQYXlsb2FkKHtzdGFydFRpbWU6IDAsIGVuZFRpbWV9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpcnN0UGFpbnQpIHsgLy8gSWYgdGhlcmUgaXMgYSByZWdpc3RlcmVkIGZpcnN0UGFpbnQgdmFsdWUgZW1pdCBpdFxuICAgICAgICB0aGlzLmFkZEZQVG9QZXJmUGF5bG9hZChhd2FpdCB0aGlzLmZpcnN0UGFpbnQpO1xuICAgICAgICB0aGlzLmZpcnN0UGFpbnQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtGaXJzdExvYWQoKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZXMgbGF0ZXIgbmF2aWdhdGlvblxuICAgIHRyYWNraW5nTmF2aWdhdGlvbkVuZCQucGlwZShcbiAgICAgIHNraXAoMSksXG4gICAgICBza2lwV2hpbGUoKFtfZXZlbnQsIGFjdGl2ZV0pID0+ICFhY3RpdmUpXG4gICAgKS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgdGhpcy5pc0ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNldFBlcmZNYXJrcygpO1xuICAgICAgaWYgKHRoaXMuZmlyc3RQYWludCkgeyAvLyBJZiB0aGVyZSBpcyBhIHJlZ2lzdGVyZWQgZmlyc3RQYWludCB2YWx1ZSBlbWl0IGl0XG4gICAgICAgIHRoaXMuYWRkRlBUb1BlcmZQYXlsb2FkKGF3YWl0IHRoaXMuZmlyc3RQYWludCk7XG4gICAgICAgIHRoaXMuZmlyc3RQYWludCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBtZXRyaWNzIG9iamVjdCBmb3IgdGhlIGZpcnN0IGxvYWQgb2YgdGhlIGFwcGxpY2F0aW9uXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUZpcnN0TG9hZERhdGEoKTogRmlyc3RMb2FkRGF0YVBheWxvYWQge1xuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nO1xuICAgIHJldHVybiB7XG4gICAgICBjb25uZWN0aW9uOiBNYXRoLnJvdW5kKG5hdmlnYXRpb24uY29ubmVjdEVuZCAtIG5hdmlnYXRpb24ubmF2aWdhdGlvblN0YXJ0KSxcbiAgICAgIHJlcXVlc3Q6IE1hdGgucm91bmQobmF2aWdhdGlvbi5yZXNwb25zZVN0YXJ0IC0gbmF2aWdhdGlvbi5jb25uZWN0RW5kKSxcbiAgICAgIHJlc3BvbnNlOiBNYXRoLnJvdW5kKG5hdmlnYXRpb24ucmVzcG9uc2VFbmQgLSBuYXZpZ2F0aW9uLnJlc3BvbnNlU3RhcnQpLFxuICAgICAgRE9NOiBNYXRoLnJvdW5kKG5hdmlnYXRpb24ubG9hZEV2ZW50RW5kIC0gbmF2aWdhdGlvbi5yZXNwb25zZUVuZCksXG4gICAgICB0b3RhbDogTWF0aC5yb3VuZChuYXZpZ2F0aW9uLmxvYWRFdmVudEVuZCAtIG5hdmlnYXRpb24ubmF2aWdhdGlvblN0YXJ0KVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGUgcGVyZm9ybWFuY2UgcGF5bG9hZCB3aXRoIEZQIG9iamVjdFxuICAgKiBAcGFyYW0gRlBcbiAgICovXG4gIHByaXZhdGUgYWRkRlBUb1BlcmZQYXlsb2FkKEZQOiBFdmVudFRpbWluZykge1xuICAgIGNvbnN0IHBlcmZGaXJzdFBhaW50ID0ge1xuICAgICAgLi4udGhpcy5wZXJmb3JtYW5jZVBheWxvYWQsXG4gICAgICBwZXJjZWl2ZWQ6IHtcbiAgICAgICAgLi4udGhpcy5wZXJmb3JtYW5jZVBheWxvYWQucGVyY2VpdmVkLFxuICAgICAgICBGUFxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQgPSBwZXJmRmlyc3RQYWludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBhbGwgbWV0cmljcyB0byBpbml0aWFsIHN0YXRlOyBBZGQgdGhlIHBhZ2VOYW1lIG9uIHRvcCBvZiBpdFxuICAgKi9cbiAgcHVibGljIHJlc2V0UGVyZk1hcmtzKCkge1xuICAgIHRoaXMucGVyZm9ybWFuY2VQYXlsb2FkID0geyAuLi5wZXJmb3JtYW5jZU1hcmtzSW5pdGlhbFN0YXRlIH07XG4gIH1cblxuICAvKipcbiAgICogTWFyayB0aGUgZmlyc3QgbG9hZCBtZXRyaWNzIHVzaW5nIHRoZSBuYXZpZ2F0aW9uIEFQSS5cbiAgICogVGhpcyBoYXMgdG8gYmUgY2FsbGVkIG9ubHkgb25jZSBpbiBhIHNpbmdsZSBwYWdlIGFwcGxpY2F0aW9uLCBiZWluZyBtZWFuaW5nZnVsIG9ubHkgZm9yIHRoZSBmaXJzdCBsb2FkXG4gICAqIFRoaXMgbWFyayBpcyBwb3B1bGF0ZWQgYnkgZGVmYXVsdCBpbiB0aGlzIHNlcnZpY2Ugd2hlbiB0aGUgTmF2aWdhdGlvbkVuZCBldmVudCBvZiB0aGUgcm91dGVyIGVtaXRzIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKi9cbiAgcHVibGljIG1hcmtGaXJzdExvYWQoKSB7XG4gICAgY29uc3QgZmlyc3RMb2FkID0gdGhpcy5jcmVhdGVGaXJzdExvYWREYXRhKCk7XG4gICAgdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQgPSB7IC4uLnRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLCBmaXJzdExvYWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBmaXJzdCBwYWludCB2YWx1ZVxuICAgKiBTdG9yZSB0aGUgZmlyc3QgcGFpbnQgdGltaW5nIHZhbHVlIHRvIGJlIGVtaXR0ZWQgYXQgTmF2aWdhdGlvbiBFbmRcbiAgICogQHBhcmFtIGVtaXQgSWYgdHJ1ZSwgc2V0cyB0aGUgRlAgdG8gdGhlIGN1cnJlbnQgcGFnZS4gT3RoZXJ3aXNlLCB3YWl0IGZvciBuZXh0IE5hdmlnYXRpb25FbmQgZXZlbnQgdG8gaGFwcGVuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWFya0ZQKGVtaXQgPSBmYWxzZSkge1xuICAgIHRoaXMuZmlyc3RQYWludCA9IHRoaXMuZ2V0VGltaW5nKCk7XG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIHRoaXMuYWRkRlBUb1BlcmZQYXlsb2FkKGF3YWl0IHRoaXMuZmlyc3RQYWludCk7XG4gICAgICB0aGlzLmZpcnN0UGFpbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIGZpcnN0IG1lYW5pbmdmdWwgcGFpbnQgdmFsdWUuXG4gICAqIEBwYXJhbSBtYXJrT25seUZpcnN0TG9hZCBJZiBmYWxzZSwgbWFya3MgdGhlIEZNUCBmb3Igc3Vic2VxdWVudCBsb2FkcyBlbHNlIG9ubHkgZm9yIHRoZSBmaXJzdCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1hcmtGTVAobWFya09ubHlGaXJzdExvYWQgPSB0cnVlKSB7XG4gICAgaWYgKCFtYXJrT25seUZpcnN0TG9hZCB8fCAobWFya09ubHlGaXJzdExvYWQgJiYgdGhpcy5pc0ZpcnN0TG9hZCkpIHtcbiAgICAgIGNvbnN0IHRpbWluZyA9IGF3YWl0IHRoaXMuZ2V0VGltaW5nKCk7XG4gICAgICBjb25zdCBwZXJmRmlyc3RNZWFuaW5nZnVsUGFpbnQgPSB7XG4gICAgICAgIC4uLnRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLFxuICAgICAgICBwZXJjZWl2ZWQ6IHtcbiAgICAgICAgICAuLi50aGlzLnBlcmZvcm1hbmNlUGF5bG9hZC5wZXJjZWl2ZWQsXG4gICAgICAgICAgRk1QOiB0aW1pbmdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMucGVyZm9ybWFuY2VQYXlsb2FkID0gcGVyZkZpcnN0TWVhbmluZ2Z1bFBhaW50O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZGF0YSByZWFkeSBwZXJjZWl2ZWQgZXZlbnRcbiAgICogVGhpcyBwcm9iZSBtYXJrcyB0aGUgdGltZSB3aGVuIHRoZSBwYWdlIGNvbnNpZGVycyBpdCBoYXMgYWxsIHRoZSBkYXRhIHRvIGJlY29tZSBpbnRlcmFjdGl2ZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1hcmtEYXRhUmVhZHkoKSB7XG4gICAgY29uc3QgdGltaW5nID0gYXdhaXQgdGhpcy5nZXRUaW1pbmcoKTtcbiAgICBjb25zdCBwZXJmRGF0YVJlYWR5ID0ge1xuICAgICAgLi4udGhpcy5wZXJmb3JtYW5jZVBheWxvYWQsXG4gICAgICBwZXJjZWl2ZWQ6IHtcbiAgICAgICAgLi4udGhpcy5wZXJmb3JtYW5jZVBheWxvYWQucGVyY2VpdmVkLFxuICAgICAgICBkYXRhUmVhZHk6IHRpbWluZ1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQgPSBwZXJmRGF0YVJlYWR5O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSBldmVudCBhbmQgaXRzIG1lYXN1cmVtZW50c1xuICAgKiBAcGFyYW0gbGFiZWwgVGhlIGV2ZW50IG5hbWVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhZGRDdXN0b21NYXJrKGxhYmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aW1pbmcgPSBhd2FpdCB0aGlzLmdldFRpbWluZygpO1xuICAgIGNvbnN0IGN1c3RvbU1hcms6IEN1c3RvbUV2ZW50TWFya3MgPSB7bGFiZWwsIHRpbWluZ307XG4gICAgY29uc3QgcGVyZiA9IHsgLi4udGhpcy5wZXJmb3JtYW5jZVBheWxvYWQsIGN1c3RvbU1hcmtzOiB0aGlzLnBlcmZvcm1hbmNlUGF5bG9hZC5jdXN0b21NYXJrcy5jb25jYXQoY3VzdG9tTWFyaykgfTtcbiAgICB0aGlzLnBlcmZvcm1hbmNlUGF5bG9hZCA9IHBlcmY7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2VydmVyIGNhbGwgb2JqZWN0IGluIHRoZSBsaXN0IG9mIHNlcnZlciBjYWxscyBtZXRyaWNzXG4gICAqIEBwYXJhbSBzZXJ2ZXJDYWxsIFRoZSBvYmplY3QgdG8gYWRkIGluIHRoZSBzZXJ2ZXIgY2FsbHMgbWV0cmljc1xuICAgKi9cbiAgcHVibGljIGFkZFNlcnZlckNhbGxNYXJrKHNlcnZlckNhbGw6IFNlcnZlckNhbGxNZXRyaWMpIHtcbiAgICBjb25zdCBwZXJmID0geyAuLi50aGlzLnBlcmZvcm1hbmNlUGF5bG9hZCwgc2VydmVyQ2FsbHM6IHRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLnNlcnZlckNhbGxzLmNvbmNhdChzZXJ2ZXJDYWxsKSB9O1xuICAgIHRoaXMucGVyZm9ybWFuY2VQYXlsb2FkID0gcGVyZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBEeEFQSSBTREsgc2VydmVyIGNhbGwgb2JqZWN0LCBjcmVhdGVkIGJ5IHRoZSBTREsgUHJvYmUgcGx1Z2luLCBpbiB0aGUgbGlzdCBvZiBzZXJ2ZXIgY2FsbHMgbWV0cmljcy5cbiAgICogSW4gb3JkZXIgdG8gaGF2ZSByZXF1ZXN0SWQgZm9yIHRoZSBEeEFQSSBjYWxscywgeW91ciBzZXJ2ZXIgaGFzIHRvIGV4cG9zZSAnYW1hLXJlcXVlc3QtaWQnIHZpYSBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVyc1xuICAgKiBAcGFyYW0gc2VydmVyTWFyayBUaGUgbWFyayBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhZGRTREtTZXJ2ZXJDYWxsTWFyayhzZXJ2ZXJNYXJrOiBNYXJrKSB7XG4gICAgbGV0IHNlcnZlckNhbGxNZXRyaWM6IFNlcnZlckNhbGxNZXRyaWMgPSB7XG4gICAgICB1cmw6IHNlcnZlck1hcmsudXJsLFxuICAgICAgaHR0cE1ldGhvZDogc2VydmVyTWFyay5yZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgICBodHRwU3RhdHVzOiBzZXJ2ZXJNYXJrLnJlc3BvbnNlICYmIHNlcnZlck1hcmsucmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgdGltaW5nOiB7c3RhcnRUaW1lOiBzZXJ2ZXJNYXJrLnN0YXJ0VGltZSwgZW5kVGltZTogc2VydmVyTWFyay5lbmRUaW1lfSxcbiAgICAgIGVycm9yOiBzZXJ2ZXJNYXJrLmVycm9yXG4gICAgfTtcbiAgICBpZiAoc2VydmVyTWFyay5yZXNwb25zZSkge1xuICAgICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBzZXJ2ZXJNYXJrLnJlc3BvbnNlLmNsb25lKCk7XG4gICAgICBjb25zdCBhbWFSZXF1ZXN0SWQgPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzLmdldCgnYW1hLXJlcXVlc3QtaWQnKTtcbiAgICAgIHNlcnZlckNhbGxNZXRyaWMgPSB7XG4gICAgICAgIC4uLnNlcnZlckNhbGxNZXRyaWMsXG4gICAgICAgIHJlc3BvbnNlU2l6ZTogKGF3YWl0IGNsb25lZFJlc3BvbnNlLmJsb2IoKSkuc2l6ZSxcbiAgICAgICAgcmVxdWVzdElkOiBhbWFSZXF1ZXN0SWQgfHwgdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLmFkZFNlcnZlckNhbGxNYXJrKHNlcnZlckNhbGxNZXRyaWMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSBldmVudCBhbmQgbWFyayB0aGUgc3RhcnQgdGltZSwgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgaW5kZXhcbiAgICogQHBhcmFtIGxhYmVsIEV2ZW50IG5hbWVcbiAgICogQHJldHVybnMgdGhlIGVsZW1lbnQgaW5kZXggaWYgdHJhY2tpbmcgaXMgYWN0aXZlLiBPdGhlcndpc2UsIC0xXG4gICAqL1xuICBwdWJsaWMgc3RhcnRDdXN0b21NYXJrKGxhYmVsOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuaXNQZXJmVHJhY2tpbmdBY3RpdmUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gTWF0aC5yb3VuZCh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkpO1xuICAgIGNvbnN0IGN1c3RvbU1hcms6IEN1c3RvbUV2ZW50TWFya3MgPSB7bGFiZWwsIHRpbWluZzoge3N0YXJ0VGltZX19O1xuICAgIGNvbnN0IHBlcmYgPSB7IC4uLnRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLCBjdXN0b21NYXJrczogdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQuY3VzdG9tTWFya3MuY29uY2F0KGN1c3RvbU1hcmspIH07XG4gICAgdGhpcy5wZXJmb3JtYW5jZVBheWxvYWQgPSBwZXJmO1xuICAgIHJldHVybiB0aGlzLnBlcmZvcm1hbmNlUGF5bG9hZC5jdXN0b21NYXJrcy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuZCB0aGUgZXZlbnQgbWFyayBnaXZlbiBpbiBwYXJhbWV0ZXI7XG4gICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIGN1c3RvbSBldmVudCBpcyBub3QgZm91bmQgaW4gdGhlIGxpc3Qgb2YgY3VzdG9tIG1hcmtzOyB0cnVlIG90aGVyd2lzZVxuICAgKiBAcGFyYW0gZXZlbnRJbmRleCBJbmRleCBvZiB0aGUgY3VzdG9tIGV2ZW50IHRvIGJlIG1hcmtlZCBhcyBlbmRlZFxuICAgKi9cbiAgcHVibGljIGVuZEN1c3RvbU1hcmsoZXZlbnRJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzUGVyZlRyYWNraW5nQWN0aXZlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCB1cGRhdGVkID0gZmFsc2U7XG4gICAgY29uc3QgcGVyZiA9IHtcbiAgICAgIC4uLnRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLFxuICAgICAgY3VzdG9tTWFya3M6IHRoaXMucGVyZm9ybWFuY2VQYXlsb2FkLmN1c3RvbU1hcmtzLm1hcCgoZXZlbnRPYmosIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCAhPT0gZXZlbnRJbmRleCkge1xuICAgICAgICAgIHJldHVybiBldmVudE9iajtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IE1hdGgucm91bmQod2luZG93LnBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgcmV0dXJuIHtsYWJlbDogZXZlbnRPYmoubGFiZWwsIHRpbWluZzogey4uLmV2ZW50T2JqLnRpbWluZywgZW5kVGltZX19O1xuICAgICAgfSlcbiAgICB9O1xuICAgIHRoaXMucGVyZm9ybWFuY2VQYXlsb2FkID0gcGVyZjtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZ29hbCBvZiB0aGlzIG1ldGhvZCBpcyB0byBjb21wdXRlIGEgdGltZSByYW5nZSBkdXJhdGlvbiBiZXR3ZWVuIHRoZSBtb21lbnQgeW91IGNhbGwgdGhlIGZ1bmN0aW9uIChsb3dlciBib3VuZCB0aW1lc3RhbXApXG4gICAqIGFuZCB0aGUgZW5kIG9mIHRoZSBjb21wb3NpdGUgcmVuZGVyaW5nICh1cHBlciBib3VuZCBtZWFzdXJlbWVudCAtIGEgdGltZSBtYXJrIHRoYXQgb2NjdXJzIGFmdGVyIHRoZSByZWFsIGNvbXBvc2l0ZSlcbiAgICogRm9yIHRoZSBmaXJzdCBsb2FkIG9mIHRoZSBhcHBsaWNhdGlvbiwgdGhlIHN0YXJ0IHRpbWUgaXMgY29uc2lkZXJlZCBhcyB0aGUgc3RhcnQgb2YgbmF2aWdhdGlvbiB0byBlbnN1cmUgYSBjdW11bGF0aXZlIG1lYXN1cmUuXG4gICAqIEl0IGlzIHVzaW5nIHRoZSAnTmdab25lJyBzZXJ2aWNlIHRvIHJ1bk91dHNpZGVBbmd1bGFyIHRvIHByZXZlbnQgYW55IGNoYW5nZSBkZXRlY3Rpb24gdG8gb2NjdXIsIG5vciBhbmd1bGFyIGVycm9yIGhhbmRsaW5nLCBzcGVlZGluZyB1cCB0aGUgbWVhc3VyZW1lbnQuXG4gICAqIEV4YW1wbGUge0BsaW5rIG1hcmtGTVB9IGlzIGNhbGxlZCBpbiB7QGxpbmsgbmdBZnRlclZpZXdJbml0fSwgdGhlIGVuZCB0aW1lIHdpbGwgYmUgY29tcHV0ZWQgb25jZSB0aGUgcmVuZGVyIHBpcGVsaW5lIHN0YWdlIGNvbXBsZXRlZCB0aGUgY2hhbmdlcyB0cmlnZ2VyZWQgYnkgdGhlIGphdmFzY3JpcHRcbiAgICovXG4gIHB1YmxpYyBnZXRUaW1pbmcoKTogUHJvbWlzZTxFdmVudFRpbWluZz4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuaXNGaXJzdExvYWQgPyAwIDogTWF0aC5yb3VuZCh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCkpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW5kVGltZSA9IE1hdGgucm91bmQod2luZG93LnBlcmZvcm1hbmNlLm5vdygpKTtcbiAgICAgICAgICByZXNvbHZlKHtzdGFydFRpbWUsIGVuZFRpbWV9KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIHN0cmVhbSBvZiBjYXB0dXJlZCBVSSBldmVudHNcbiAgICogQHBhcmFtIHVpRXZlbnQgZW1pdHRlZCBldmVudCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBhZGRVaUV2ZW50KHVpRXZlbnQ6IFVpRXZlbnRQYXlsb2FkKSB7XG4gICAgdGhpcy51aUV2ZW50VHJhY2submV4dCh1aUV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIHN0cmVhbSBvZiBjYXB0dXJlZCBjdXN0b20gZXZlbnRzXG4gICAqIEBwYXJhbSBjdXN0b21FdmVudCBlbWl0dGVkIGV2ZW50IG9iamVjdFxuICAgKi9cbiAgcHVibGljIGFkZEN1c3RvbUV2ZW50KGN1c3RvbUV2ZW50OiBDdXN0b21FdmVudFBheWxvYWQpIHtcbiAgICB0aGlzLmN1c3RvbUV2ZW50VHJhY2submV4dChjdXN0b21FdmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGUvZGVhY3RpdmF0ZSB0aGUgdHJhY2tpbmcgbW9kZSBmb3IgVUkgZXZlbnRzXG4gICAqIEBwYXJhbSBhY3RpdmF0ZSBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBib29sZWFuXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlVWlUcmFja2luZyhhY3RpdmF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMudWlUcmFja2luZ0FjdGl2YXRlZC5uZXh0KGFjdGl2YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZS9kZWFjdGl2YXRlIHRoZSB0cmFja2luZyBtb2RlIGZvciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHNcbiAgICogQHBhcmFtIGFjdGl2YXRlIGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uIGJvb2xlYW5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVQZXJmVHJhY2tpbmcoYWN0aXZhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnBlcmZUcmFja2luZ0FjdGl2YXRlZC5uZXh0KGFjdGl2YXRlKTtcbiAgfVxufVxuIl19
@@ -19,13 +19,13 @@ export class EventTrackStoreModule {
19
19
  ]
20
20
  };
21
21
  }
22
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: EventTrackStoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: EventTrackStoreModule, imports: [i1.StoreFeatureModule] }); }
24
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: EventTrackStoreModule, providers: [
22
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EventTrackStoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: EventTrackStoreModule, imports: [i1.StoreFeatureModule] }); }
24
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EventTrackStoreModule, providers: [
25
25
  { provide: EVENT_TRACK_REDUCER_TOKEN, useFactory: getDefaultEventTrackReducer }
26
26
  ], imports: [StoreModule.forFeature(EVENT_TRACK_STORE_NAME, EVENT_TRACK_REDUCER_TOKEN)] }); }
27
27
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: EventTrackStoreModule, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: EventTrackStoreModule, decorators: [{
29
29
  type: NgModule,
30
30
  args: [{
31
31
  imports: [
@@ -13,7 +13,6 @@ export const eventTrackInitialState = {
13
13
  /**
14
14
  * Return all the involved API endpoints present in the component including its child & subchild
15
15
  * Iterate recursively till the component with no children
16
- *
17
16
  * @param component
18
17
  * @returns string[]
19
18
  */
@@ -27,7 +26,6 @@ function getComponentInvolvedEndPoints(component) {
27
26
  * Get all the involved API endpoints of the heroComponent with maximum TTI value
28
27
  * If the parent contains max TTI, then all its child & subchild end points are used
29
28
  * otherwise only component with max TTI end points are used
30
- *
31
29
  * @param component
32
30
  * @param maxTTI
33
31
  * @returns string[]
@@ -45,7 +43,6 @@ function getInvolvedAPIEndpoints(component, maxTTI) {
45
43
  * Recursively iterate the page hierarchy
46
44
  * and set the TTI for the specified component
47
45
  * and compute the TTI for the corresponding parent
48
- *
49
46
  * @param component the parent component/page
50
47
  * @param id the identifier of the component/page
51
48
  * @param value the TTI value
@@ -72,7 +69,6 @@ function computeTTI(component, id, value, endpoints = []) {
72
69
  }
73
70
  /**
74
71
  * Check if the TTI for the page is computed
75
- *
76
72
  * @param component the parent component/page
77
73
  * @returns boolean
78
74
  */
@@ -108,4 +104,4 @@ export const eventTrackReducerFeatures = [
108
104
  * EventTrack Store default reducer
109
105
  */
110
106
  export const eventTrackReducer = createReducer(eventTrackInitialState, ...eventTrackReducerFeatures);
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtdHJhY2sucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdG9yZXMvZXZlbnQtdHJhY2svZXZlbnQtdHJhY2sucmVkdWNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsT0FBTyxFQUFnQixhQUFhLEVBQUUsRUFBRSxFQUFlLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sS0FBSyxPQUFPLE1BQU0sdUJBQXVCLENBQUM7QUFHakQsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFrQixFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUMsQ0FBQztBQUVuRzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFvQjtJQUNyRCxhQUFhLEVBQUUseUJBQXlCO0lBQ3hDLGFBQWEsRUFBRSxLQUFLO0NBQ3JCLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxTQUFTLDZCQUE2QixDQUFDLFNBQXdCO0lBQzdELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FDZixDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2pELDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFTLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQ3BELENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLFNBQXdCLEVBQUUsTUFBYztJQUN2RSxJ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QUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB7QWN0aW9uQ3JlYXRvciwgY3JlYXRlUmVkdWNlciwgb24sIFJlZHVjZXJUeXBlc30gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tICcuL2V2ZW50LXRyYWNrLmFjdGlvbnMnO1xuaW1wb3J0IHtFdmVudFRyYWNrU3RhdGUsIEhlcm9Db21wb25lbnR9IGZyb20gJy4vZXZlbnQtdHJhY2suc3RhdGUnO1xuXG4vKiogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIEhlcm8gY29tcG9uZW50ICovXG5leHBvcnQgY29uc3QgaGVyb0NvbXBvbmVudEluaXRpYWxTdGF0ZTogSGVyb0NvbXBvbmVudCA9IHtpZDogJycsIFRUSTogMCwgaW52b2x2ZWRBcGlFbmRwb2ludHM6IFtdfTtcblxuLyoqXG4gKiBldmVudFRyYWNrIGluaXRpYWwgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGV2ZW50VHJhY2tJbml0aWFsU3RhdGU6IEV2ZW50VHJhY2tTdGF0ZSA9IHtcbiAgaGVyb0NvbXBvbmVudDogaGVyb0NvbXBvbmVudEluaXRpYWxTdGF0ZSxcbiAgaXNUVElDb21wdXRlZDogZmFsc2Vcbn07XG5cbi8qKlxuICogUmV0dXJuIGFsbCB0aGUgaW52b2x2ZWQgQVBJIGVuZHBvaW50cyBwcmVzZW50IGluIHRoZSBjb21wb25lbnQgaW5jbHVkaW5nIGl0cyBjaGlsZCAmIHN1YmNoaWxkXG4gKiBJdGVyYXRlIHJlY3Vyc2l2ZWx5IHRpbGwgdGhlIGNvbXBvbmVudCB3aXRoIG5vIGNoaWxkcmVuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudFxuICogQHJldHVybnMgc3RyaW5nW11cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50SW52b2x2ZWRFbmRQb2ludHMoY29tcG9uZW50OiBIZXJvQ29tcG9uZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAoY29tcG9uZW50LmNoaWxkcmVuIHx8IFtdKS5yZWR1Y2UoKGFjY3VtLCB2YWx1ZSkgPT4ge1xuICAgICAgZ2V0Q29tcG9uZW50SW52b2x2ZWRFbmRQb2ludHModmFsdWUpLmZvckVhY2goKGl0ZW0pID0+IGFjY3VtLmFkZChpdGVtKSk7XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgbmV3IFNldDxzdHJpbmc+KGNvbXBvbmVudC5pbnZvbHZlZEFwaUVuZHBvaW50cykpXG4gICk7XG59XG5cbi8qKlxuICogR2V0IGFsbCB0aGUgaW52b2x2ZWQgQVBJIGVuZHBvaW50cyBvZiB0aGUgaGVyb0NvbXBvbmVudCB3aXRoIG1heGltdW0gVFRJIHZhbHVlXG4gKiBJZiB0aGUgcGFyZW50IGNvbnRhaW5zIG1heCBUVEksIHRoZW4gYWxsIGl0cyBjaGlsZCAmIHN1YmNoaWxkIGVuZCBwb2ludHMgYXJlIHVzZWRcbiAqIG90aGVyd2lzZSBvbmx5IGNvbXBvbmVudCB3aXRoIG1heCBUVEkgZW5kIHBvaW50cyBhcmUgdXNlZFxuICpcbiAqIEBwYXJhbSBjb21wb25lbnRcbiAqIEBwYXJhbSBtYXhUVElcbiAqIEByZXR1cm5zIHN0cmluZ1tdXG4gKi9cbmZ1bmN0aW9uIGdldEludm9sdmVkQVBJRW5kcG9pbnRzKGNvbXBvbmVudDogSGVyb0NvbXBvbmVudCwgbWF4VFRJOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gIGlmIChjb21wb25lbnQuY29tcG9uZW50VFRJID09PSBtYXhUVEkpIHtcbiAgICByZXR1cm4gZ2V0Q29tcG9uZW50SW52b2x2ZWRFbmRQb2ludHMoY29tcG9uZW50KTtcbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAoY29tcG9uZW50LmNoaWxkcmVuIHx8IFtdKS5yZWR1Y2UoKGFjY3VtLCB2YWx1ZSkgPT4ge1xuICAgICAgZ2V0SW52b2x2ZWRBUElFbmRwb2ludHModmFsdWUsIG1heFRUSSkuZm9yRWFjaCgoZW5kcG9pbnQpID0+IGFjY3VtLmFkZChlbmRwb2ludCkpO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIG5ldyBTZXQ8c3RyaW5nPigpKVxuICApO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGl0ZXJhdGUgdGhlIHBhZ2UgaGllcmFyY2h5XG4gKiBhbmQgc2V0IHRoZSBUVEkgZm9yIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50XG4gKiBhbmQgY29tcHV0ZSB0aGUgVFRJIGZvciB0aGUgY29ycmVzcG9uZGluZyBwYXJlbnRcbiAqXG4gKiBAcGFyYW0gY29tcG9uZW50IHRoZSBwYXJlbnQgY29tcG9uZW50L3BhZ2VcbiAqIEBwYXJhbSBpZCB0aGUgaWRlbnRpZmllciBvZiB0aGUgY29tcG9uZW50L3BhZ2VcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgVFRJIHZhbHVlXG4gKiBAcGFyYW0gZW5kcG9pbnRzIEFQSSBVUkxzIG9mIHRoZSBjb21wb25lbnRcbiAqIEByZXR1cm5zIEhlcm9Db21wb25lbnRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZVRUSShjb21wb25lbnQ6IEhlcm9Db21wb25lbnQsIGlkOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGVuZHBvaW50czogc3RyaW5nW10gPSBbXSk6IEhlcm9Db21wb25lbnQge1xuICBjb25zdCBjb21wdXRlZENvbXBvbmVudCA9IHsuLi5jb21wb25lbnR9O1xuICBpZiAoY29tcHV0ZWRDb21wb25lbnQuaWQgPT09IGlkKSB7XG4gICAgY29tcHV0ZWRDb21wb25lbnQuVFRJID0gdmFsdWU7XG4gICAgY29tcHV0ZWRDb21wb25lbnQuaGFzQmVlbkxvZ2dlZCA9IHRydWU7XG4gICAgY29tcHV0ZWRDb21wb25lbnQuaW52b2x2ZWRBcGlFbmRwb2ludHMgPSBlbmRwb2ludHM7XG4gICAgY29tcHV0ZWRDb21wb25lbnQuY29tcG9uZW50VFRJID0gdmFsdWU7XG4gIH0gZWxzZSBpZiAoY29tcHV0ZWRDb21wb25lbnQuY2hpbGRyZW4pIHtcbiAgICBjb21wdXRlZENvbXBvbmVudC5jaGlsZHJlbiA9IGNvbXB1dGVkQ29tcG9uZW50LmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IGNvbXB1dGVUVEkoY2hpbGQsIGlkLCB2YWx1ZSwgZW5kcG9pbnRzKSk7XG4gIH1cbiAgLy8gQ29tcHV0ZSB0aGUgVFRJIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCBjb21wYXJpbmcgdGhlIGNoaWxkIFRUSSBtZWFzdXJlc1xuICBpZiAoY29tcHV0ZWRDb21wb25lbnQuY2hpbGRyZW4gJiYgY29tcHV0ZWRDb21wb25lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG1heENoaWxkVFRJID0gTWF0aC5tYXgoLi4uY29tcHV0ZWRDb21wb25lbnQuY2hpbGRyZW4ubWFwKChjaGlsZDogSGVyb0NvbXBvbmVudCkgPT4gY2hpbGQuVFRJKSk7XG4gICAgY29tcHV0ZWRDb21wb25lbnQuVFRJID0gTWF0aC5tYXgobWF4Q2hpbGRUVEksIGNvbXB1dGVkQ29tcG9uZW50LlRUSSk7XG4gIH1cbiAgcmV0dXJuIGNvbXB1dGVkQ29tcG9uZW50O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBUVEkgZm9yIHRoZSBwYWdlIGlzIGNvbXB1dGVkXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudCB0aGUgcGFyZW50IGNvbXBvbmVudC9wYWdlXG4gKiBAcmV0dXJucyBib29sZWFuXG4gKi9cbmZ1bmN0aW9uIGlzVFRJQ29tcHV0ZWQoY29tcG9uZW50OiBIZXJvQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gIGlmIChjb21wb25lbnQubWVhc3VyZVNlbGYgJiYgIWNvbXBvbmVudC5oYXNCZWVuTG9nZ2VkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChjb21wb25lbnQuY2hpbGRyZW4gJiYgY29tcG9uZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gY29tcG9uZW50LmNoaWxkcmVuLmV2ZXJ5KChjaGlsZCkgPT4gaXNUVElDb21wdXRlZChjaGlsZCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb21wb25lbnQuVFRJID4gMDtcbiAgfVxufVxuXG4vKipcbiAqIExpc3Qgb2YgYmFzaWMgYWN0aW9ucyBmb3IgRXZlbnRUcmFja1xuICovXG5leHBvcnQgY29uc3QgZXZlbnRUcmFja1JlZHVjZXJGZWF0dXJlczogUmVkdWNlclR5cGVzPEV2ZW50VHJhY2tTdGF0ZSwgQWN0aW9uQ3JlYXRvcltdPltdID0gW1xuICBvbihhY3Rpb25zLnNldEV2ZW50VHJhY2ssIChfc3RhdGUsIHBheWxvYWQpID0+ICh7Li4ucGF5bG9hZC5tb2RlbH0pKSxcblxuICBvbihhY3Rpb25zLnVwZGF0ZUV2ZW50VHJhY2ssIChzdGF0ZSwgcGF5bG9hZCkgPT4gKHsuLi5zdGF0ZSwgLi4ucGF5bG9hZC5tb2RlbH0pKSxcblxuICBvbihhY3Rpb25zLnJlc2V0RXZlbnRUcmFjaywgKCkgPT4gZXZlbnRUcmFja0luaXRpYWxTdGF0ZSksXG5cbiAgb24oYWN0aW9ucy5yZWdpc3Rlckhlcm9Db21wb25lbnQsIChzdGF0ZSwgcGF5bG9hZCkgPT4gKHsuLi5zdGF0ZSwgaGVyb0NvbXBvbmVudDogey4uLnBheWxvYWQubW9kZWwsIFRUSTogMH19KSksXG5cbiAgb24oYWN0aW9ucy5zZXRIZXJvQ29tcG9uZW50VFRJLCAoc3RhdGUsIHBheWxvYWQpID0+IHtcbiAgICBjb25zdCB1cGRhdGVkSGVyb0NvbXBvbmVudCA9IGNvbXB1dGVUVEkoc3RhdGUuaGVyb0NvbXBvbmVudCwgcGF5bG9hZC5tb2RlbC5pZCwgcGF5bG9hZC5tb2RlbC5UVEksIHBheWxvYWQubW9kZWwuaW52b2x2ZWRBcGlFbmRwb2ludHMpO1xuICAgIGNvbnN0IGlzQ29tcHV0ZWQgPSBpc1RUSUNvbXB1dGVkKHVwZGF0ZWRIZXJvQ29tcG9uZW50KTtcbiAgICBpZiAoaXNDb21wdXRlZCkge1xuICAgICAgdXBkYXRlZEhlcm9Db21wb25lbnQuaW52b2x2ZWRBcGlFbmRwb2ludHMgPSBnZXRJbnZvbHZlZEFQSUVuZHBvaW50cyh1cGRhdGVkSGVyb0NvbXBvbmVudCwgdXBkYXRlZEhlcm9Db21wb25lbnQuVFRJKSB8fCBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgaGVyb0NvbXBvbmVudDogdXBkYXRlZEhlcm9Db21wb25lbnQsIGlzVFRJQ29tcHV0ZWQ6IGlzQ29tcHV0ZWR9O1xuICB9KVxuXTtcblxuLyoqXG4gKiBFdmVudFRyYWNrIFN0b3JlIGRlZmF1bHQgcmVkdWNlclxuICovXG5leHBvcnQgY29uc3QgZXZlbnRUcmFja1JlZHVjZXIgPSBjcmVhdGVSZWR1Y2VyKFxuICBldmVudFRyYWNrSW5pdGlhbFN0YXRlLFxuICAuLi5ldmVudFRyYWNrUmVkdWNlckZlYXR1cmVzXG4pO1xuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtdHJhY2sucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdG9yZXMvZXZlbnQtdHJhY2svZXZlbnQtdHJhY2sucmVkdWNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsT0FBTyxFQUFnQixhQUFhLEVBQUUsRUFBRSxFQUFlLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sS0FBSyxPQUFPLE1BQU0sdUJBQXVCLENBQUM7QUFHakQsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFrQixFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUMsQ0FBQztBQUVuRzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFvQjtJQUNyRCxhQUFhLEVBQUUseUJBQXlCO0lBQ3hDLGFBQWEsRUFBRSxLQUFLO0NBQ3JCLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILFNBQVMsNkJBQTZCLENBQUMsU0FBd0I7SUFDN0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUNmLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDakQsNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLEVBQUUsSUFBSSxHQUFHLENBQVMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FDcEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxTQUF3QixFQUFFLE1BQWM7SUFDdkUsSUFB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InNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHtBY3Rpb25DcmVhdG9yLCBjcmVhdGVSZWR1Y2VyLCBvbiwgUmVkdWNlclR5cGVzfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgKiBhcyBhY3Rpb25zIGZyb20gJy4vZXZlbnQtdHJhY2suYWN0aW9ucyc7XG5pbXBvcnQge0V2ZW50VHJhY2tTdGF0ZSwgSGVyb0NvbXBvbmVudH0gZnJvbSAnLi9ldmVudC10cmFjay5zdGF0ZSc7XG5cbi8qKiBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgSGVybyBjb21wb25lbnQgKi9cbmV4cG9ydCBjb25zdCBoZXJvQ29tcG9uZW50SW5pdGlhbFN0YXRlOiBIZXJvQ29tcG9uZW50ID0ge2lkOiAnJywgVFRJOiAwLCBpbnZvbHZlZEFwaUVuZHBvaW50czogW119O1xuXG4vKipcbiAqIGV2ZW50VHJhY2sgaW5pdGlhbCBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgZXZlbnRUcmFja0luaXRpYWxTdGF0ZTogRXZlbnRUcmFja1N0YXRlID0ge1xuICBoZXJvQ29tcG9uZW50OiBoZXJvQ29tcG9uZW50SW5pdGlhbFN0YXRlLFxuICBpc1RUSUNvbXB1dGVkOiBmYWxzZVxufTtcblxuLyoqXG4gKiBSZXR1cm4gYWxsIHRoZSBpbnZvbHZlZCBBUEkgZW5kcG9pbnRzIHByZXNlbnQgaW4gdGhlIGNvbXBvbmVudCBpbmNsdWRpbmcgaXRzIGNoaWxkICYgc3ViY2hpbGRcbiAqIEl0ZXJhdGUgcmVjdXJzaXZlbHkgdGlsbCB0aGUgY29tcG9uZW50IHdpdGggbm8gY2hpbGRyZW5cbiAqIEBwYXJhbSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHN0cmluZ1tdXG4gKi9cbmZ1bmN0aW9uIGdldENvbXBvbmVudEludm9sdmVkRW5kUG9pbnRzKGNvbXBvbmVudDogSGVyb0NvbXBvbmVudCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgKGNvbXBvbmVudC5jaGlsZHJlbiB8fCBbXSkucmVkdWNlKChhY2N1bSwgdmFsdWUpID0+IHtcbiAgICAgIGdldENvbXBvbmVudEludm9sdmVkRW5kUG9pbnRzKHZhbHVlKS5mb3JFYWNoKChpdGVtKSA9PiBhY2N1bS5hZGQoaXRlbSkpO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIG5ldyBTZXQ8c3RyaW5nPihjb21wb25lbnQuaW52b2x2ZWRBcGlFbmRwb2ludHMpKVxuICApO1xufVxuXG4vKipcbiAqIEdldCBhbGwgdGhlIGludm9sdmVkIEFQSSBlbmRwb2ludHMgb2YgdGhlIGhlcm9Db21wb25lbnQgd2l0aCBtYXhpbXVtIFRUSSB2YWx1ZVxuICogSWYgdGhlIHBhcmVudCBjb250YWlucyBtYXggVFRJLCB0aGVuIGFsbCBpdHMgY2hpbGQgJiBzdWJjaGlsZCBlbmQgcG9pbnRzIGFyZSB1c2VkXG4gKiBvdGhlcndpc2Ugb25seSBjb21wb25lbnQgd2l0aCBtYXggVFRJIGVuZCBwb2ludHMgYXJlIHVzZWRcbiAqIEBwYXJhbSBjb21wb25lbnRcbiAqIEBwYXJhbSBtYXhUVElcbiAqIEByZXR1cm5zIHN0cmluZ1tdXG4gKi9cbmZ1bmN0aW9uIGdldEludm9sdmVkQVBJRW5kcG9pbnRzKGNvbXBvbmVudDogSGVyb0NvbXBvbmVudCwgbWF4VFRJOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gIGlmIChjb21wb25lbnQuY29tcG9uZW50VFRJID09PSBtYXhUVEkpIHtcbiAgICByZXR1cm4gZ2V0Q29tcG9uZW50SW52b2x2ZWRFbmRQb2ludHMoY29tcG9uZW50KTtcbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAoY29tcG9uZW50LmNoaWxkcmVuIHx8IFtdKS5yZWR1Y2UoKGFjY3VtLCB2YWx1ZSkgPT4ge1xuICAgICAgZ2V0SW52b2x2ZWRBUElFbmRwb2ludHModmFsdWUsIG1heFRUSSkuZm9yRWFjaCgoZW5kcG9pbnQpID0+IGFjY3VtLmFkZChlbmRwb2ludCkpO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIG5ldyBTZXQ8c3RyaW5nPigpKVxuICApO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGl0ZXJhdGUgdGhlIHBhZ2UgaGllcmFyY2h5XG4gKiBhbmQgc2V0IHRoZSBUVEkgZm9yIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50XG4gKiBhbmQgY29tcHV0ZSB0aGUgVFRJIGZvciB0aGUgY29ycmVzcG9uZGluZyBwYXJlbnRcbiAqIEBwYXJhbSBjb21wb25lbnQgdGhlIHBhcmVudCBjb21wb25lbnQvcGFnZVxuICogQHBhcmFtIGlkIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQvcGFnZVxuICogQHBhcmFtIHZhbHVlIHRoZSBUVEkgdmFsdWVcbiAqIEBwYXJhbSBlbmRwb2ludHMgQVBJIFVSTHMgb2YgdGhlIGNvbXBvbmVudFxuICogQHJldHVybnMgSGVyb0NvbXBvbmVudFxuICovXG5mdW5jdGlvbiBjb21wdXRlVFRJKGNvbXBvbmVudDogSGVyb0NvbXBvbmVudCwgaWQ6IHN0cmluZywgdmFsdWU6IG51bWJlciwgZW5kcG9pbnRzOiBzdHJpbmdbXSA9IFtdKTogSGVyb0NvbXBvbmVudCB7XG4gIGNvbnN0IGNvbXB1dGVkQ29tcG9uZW50ID0gey4uLmNvbXBvbmVudH07XG4gIGlmIChjb21wdXRlZENvbXBvbmVudC5pZCA9PT0gaWQpIHtcbiAgICBjb21wdXRlZENvbXBvbmVudC5UVEkgPSB2YWx1ZTtcbiAgICBjb21wdXRlZENvbXBvbmVudC5oYXNCZWVuTG9nZ2VkID0gdHJ1ZTtcbiAgICBjb21wdXRlZENvbXBvbmVudC5pbnZvbHZlZEFwaUVuZHBvaW50cyA9IGVuZHBvaW50cztcbiAgICBjb21wdXRlZENvbXBvbmVudC5jb21wb25lbnRUVEkgPSB2YWx1ZTtcbiAgfSBlbHNlIGlmIChjb21wdXRlZENvbXBvbmVudC5jaGlsZHJlbikge1xuICAgIGNvbXB1dGVkQ29tcG9uZW50LmNoaWxkcmVuID0gY29tcHV0ZWRDb21wb25lbnQuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gY29tcHV0ZVRUSShjaGlsZCwgaWQsIHZhbHVlLCBlbmRwb2ludHMpKTtcbiAgfVxuICAvLyBDb21wdXRlIHRoZSBUVEkgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50IGNvbXBhcmluZyB0aGUgY2hpbGQgVFRJIG1lYXN1cmVzXG4gIGlmIChjb21wdXRlZENvbXBvbmVudC5jaGlsZHJlbiAmJiBjb21wdXRlZENvbXBvbmVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbWF4Q2hpbGRUVEkgPSBNYXRoLm1heCguLi5jb21wdXRlZENvbXBvbmVudC5jaGlsZHJlbi5tYXAoKGNoaWxkOiBIZXJvQ29tcG9uZW50KSA9PiBjaGlsZC5UVEkpKTtcbiAgICBjb21wdXRlZENvbXBvbmVudC5UVEkgPSBNYXRoLm1heChtYXhDaGlsZFRUSSwgY29tcHV0ZWRDb21wb25lbnQuVFRJKTtcbiAgfVxuICByZXR1cm4gY29tcHV0ZWRDb21wb25lbnQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIFRUSSBmb3IgdGhlIHBhZ2UgaXMgY29tcHV0ZWRcbiAqIEBwYXJhbSBjb21wb25lbnQgdGhlIHBhcmVudCBjb21wb25lbnQvcGFnZVxuICogQHJldHVybnMgYm9vbGVhblxuICovXG5mdW5jdGlvbiBpc1RUSUNvbXB1dGVkKGNvbXBvbmVudDogSGVyb0NvbXBvbmVudCk6IGJvb2xlYW4ge1xuICBpZiAoY29tcG9uZW50Lm1lYXN1cmVTZWxmICYmICFjb21wb25lbnQuaGFzQmVlbkxvZ2dlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoY29tcG9uZW50LmNoaWxkcmVuICYmIGNvbXBvbmVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudC5jaGlsZHJlbi5ldmVyeSgoY2hpbGQpID0+IGlzVFRJQ29tcHV0ZWQoY2hpbGQpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50LlRUSSA+IDA7XG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IG9mIGJhc2ljIGFjdGlvbnMgZm9yIEV2ZW50VHJhY2tcbiAqL1xuZXhwb3J0IGNvbnN0IGV2ZW50VHJhY2tSZWR1Y2VyRmVhdHVyZXM6IFJlZHVjZXJUeXBlczxFdmVudFRyYWNrU3RhdGUsIEFjdGlvbkNyZWF0b3JbXT5bXSA9IFtcbiAgb24oYWN0aW9ucy5zZXRFdmVudFRyYWNrLCAoX3N0YXRlLCBwYXlsb2FkKSA9PiAoey4uLnBheWxvYWQubW9kZWx9KSksXG5cbiAgb24oYWN0aW9ucy51cGRhdGVFdmVudFRyYWNrLCAoc3RhdGUsIHBheWxvYWQpID0+ICh7Li4uc3RhdGUsIC4uLnBheWxvYWQubW9kZWx9KSksXG5cbiAgb24oYWN0aW9ucy5yZXNldEV2ZW50VHJhY2ssICgpID0+IGV2ZW50VHJhY2tJbml0aWFsU3RhdGUpLFxuXG4gIG9uKGFjdGlvbnMucmVnaXN0ZXJIZXJvQ29tcG9uZW50LCAoc3RhdGUsIHBheWxvYWQpID0+ICh7Li4uc3RhdGUsIGhlcm9Db21wb25lbnQ6IHsuLi5wYXlsb2FkLm1vZGVsLCBUVEk6IDB9fSkpLFxuXG4gIG9uKGFjdGlvbnMuc2V0SGVyb0NvbXBvbmVudFRUSSwgKHN0YXRlLCBwYXlsb2FkKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlZEhlcm9Db21wb25lbnQgPSBjb21wdXRlVFRJKHN0YXRlLmhlcm9Db21wb25lbnQsIHBheWxvYWQubW9kZWwuaWQsIHBheWxvYWQubW9kZWwuVFRJLCBwYXlsb2FkLm1vZGVsLmludm9sdmVkQXBpRW5kcG9pbnRzKTtcbiAgICBjb25zdCBpc0NvbXB1dGVkID0gaXNUVElDb21wdXRlZCh1cGRhdGVkSGVyb0NvbXBvbmVudCk7XG4gICAgaWYgKGlzQ29tcHV0ZWQpIHtcbiAgICAgIHVwZGF0ZWRIZXJvQ29tcG9uZW50Lmludm9sdmVkQXBpRW5kcG9pbnRzID0gZ2V0SW52b2x2ZWRBUElFbmRwb2ludHModXBkYXRlZEhlcm9Db21wb25lbnQsIHVwZGF0ZWRIZXJvQ29tcG9uZW50LlRUSSkgfHwgW107XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGhlcm9Db21wb25lbnQ6IHVwZGF0ZWRIZXJvQ29tcG9uZW50LCBpc1RUSUNvbXB1dGVkOiBpc0NvbXB1dGVkfTtcbiAgfSlcbl07XG5cbi8qKlxuICogRXZlbnRUcmFjayBTdG9yZSBkZWZhdWx0IHJlZHVjZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGV2ZW50VHJhY2tSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihcbiAgZXZlbnRUcmFja0luaXRpYWxTdGF0ZSxcbiAgLi4uZXZlbnRUcmFja1JlZHVjZXJGZWF0dXJlc1xuKTtcbiJdfQ==