@eo-sdk/client 10.6.7 → 10.6.9

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 (62) hide show
  1. package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts +3 -2
  2. package/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.d.ts.map +1 -1
  3. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts +3 -2
  4. package/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.d.ts.map +1 -1
  5. package/app/eo-client/process-state/process-state.component.d.ts +1 -0
  6. package/app/eo-client/process-state/process-state.component.d.ts.map +1 -1
  7. package/app/eo-framework/app-shell/app-bar/app-bar.component.d.ts +1 -2
  8. package/app/eo-framework/app-shell/app-bar/app-bar.component.d.ts.map +1 -1
  9. package/app/eo-framework/app-shell/app-bar/user-avatar-overlay/user-avatar-overlay.component.d.ts +18 -0
  10. package/app/eo-framework/app-shell/app-bar/user-avatar-overlay/user-avatar-overlay.component.d.ts.map +1 -0
  11. package/app/eo-framework/app-shell/app-shell.module.d.ts +17 -16
  12. package/app/eo-framework/app-shell/app-shell.module.d.ts.map +1 -1
  13. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts +1 -0
  14. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts.map +1 -1
  15. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
  16. package/app/eo-framework/prepare-details/prepare-details.component.d.ts.map +1 -1
  17. package/app/eo-framework/process/details/process-details.component.d.ts.map +1 -1
  18. package/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.d.ts.map +1 -1
  19. package/app/eo-framework/ui/overlay/overlay.component.d.ts +11 -7
  20. package/app/eo-framework/ui/overlay/overlay.component.d.ts.map +1 -1
  21. package/assets/_default/i18n/de.json +1 -0
  22. package/assets/_default/i18n/en.json +1 -0
  23. package/esm2020/app/eo-client/about-state/about-state.component.mjs +3 -3
  24. package/esm2020/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +16 -10
  25. package/esm2020/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +2 -2
  26. package/esm2020/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +17 -10
  27. package/esm2020/app/eo-client/favorite-state/favorite-state.component.mjs +1 -1
  28. package/esm2020/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +2 -2
  29. package/esm2020/app/eo-client/notifications-state/notifications-state.component.mjs +1 -1
  30. package/esm2020/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +1 -1
  31. package/esm2020/app/eo-client/process-state/process-state.component.mjs +22 -14
  32. package/esm2020/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +1 -1
  33. package/esm2020/app/eo-client/settings/settings.component.mjs +2 -2
  34. package/esm2020/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +1 -1
  35. package/esm2020/app/eo-client/version-state/version-state.component.mjs +1 -1
  36. package/esm2020/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +3 -3
  37. package/esm2020/app/eo-framework/app-shell/app-bar/app-bar.component.mjs +10 -19
  38. package/esm2020/app/eo-framework/app-shell/app-bar/user-avatar-overlay/user-avatar-overlay.component.mjs +42 -0
  39. package/esm2020/app/eo-framework/app-shell/app-shell.module.mjs +5 -2
  40. package/esm2020/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +19 -15
  41. package/esm2020/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +4 -1
  42. package/esm2020/app/eo-framework/grid/extensions/custom-sort/custom-sort.component.mjs +2 -2
  43. package/esm2020/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +2 -2
  44. package/esm2020/app/eo-framework/inbox-details/inbox-details.component.mjs +3 -3
  45. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +2 -2
  46. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +2 -2
  47. package/esm2020/app/eo-framework/prepare-details/prepare-details.component.mjs +16 -5
  48. package/esm2020/app/eo-framework/process/details/process-details.component.mjs +1 -2
  49. package/esm2020/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.mjs +10 -1
  50. package/esm2020/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +2 -2
  51. package/esm2020/app/eo-framework/ui/overlay/overlay.component.mjs +38 -18
  52. package/esm2020/projects/eo-sdk/core/lib/service/search/search.service.mjs +8 -2
  53. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs +7 -1
  54. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  55. package/fesm2015/eo-sdk-client.mjs +329 -244
  56. package/fesm2015/eo-sdk-client.mjs.map +1 -1
  57. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs +7 -1
  58. package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs.map +1 -1
  59. package/fesm2020/eo-sdk-client.mjs +329 -244
  60. package/fesm2020/eo-sdk-client.mjs.map +1 -1
  61. package/package.json +3 -3
  62. package/projects/eo-sdk/core/lib/service/search/search.service.d.ts.map +1 -1
@@ -142,6 +142,7 @@ export class SearchService {
142
142
  const aggregations = res.aggregations[baseParam]
143
143
  ? res.aggregations[baseParam].buckets
144
144
  : [];
145
+ let aggs = {};
145
146
  aggregations.forEach(aggregation => {
146
147
  let { key, doc_count, contextfoldertype } = aggregation;
147
148
  if (baseParam === 'filesize') {
@@ -154,10 +155,15 @@ export class SearchService {
154
155
  if (baseParam === SearchQuery.BASE_PARAMS.TYPE &&
155
156
  contextfoldertype) {
156
157
  contextfoldertype.buckets.forEach(ctxAgg => {
157
- state.addAggregations('contexttype', ctxAgg.key, ctxAgg.doc_count, ctxAgg);
158
+ aggs[ctxAgg.key] = aggs[ctxAgg.key] ? aggs[ctxAgg.key] + ctxAgg.doc_count : ctxAgg.doc_count;
158
159
  });
159
160
  }
160
161
  });
162
+ if (baseParam === SearchQuery.BASE_PARAMS.TYPE) {
163
+ Object.keys(aggs).forEach((key) => {
164
+ state.addAggregations('contexttype', key, aggs[key]);
165
+ });
166
+ }
161
167
  });
162
168
  return state;
163
169
  }));
@@ -475,4 +481,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
475
481
  providedIn: 'root'
476
482
  }]
477
483
  }], ctorParameters: function () { return [{ type: i1.SystemService }, { type: i2.BackendService }, { type: i3.Config }]; } });
478
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lby1zZGsvY29yZS9zcmMvbGliL3NlcnZpY2Uvc2VhcmNoL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFeEMsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUt2QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLHNCQUFzQixDQUFDOzs7OztBQUU5Qjs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUNVLE1BQXFCLEVBQ3JCLE9BQXVCLEVBQ3ZCLE1BQWM7UUFGZCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDckIsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFVO1FBQ25DLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFO2dCQUMvQixPQUFPLEtBQUssQ0FBQzthQUNkO2lCQUFNLElBQ0wsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQ2xDO2dC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YUFDSDtpQkFBTTtnQkFDTCxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQzthQUMzQjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDBCQUEwQixDQUFDLE9BQXVCLEVBQUUsYUFBYTtRQUMvRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDL0QsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNoRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDOzswR0FqbUJVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge09iamVjdFR5cGV9IGZyb20gJy4uLy4uL21vZGVsL29iamVjdC10eXBlLm1vZGVsJztcbmltcG9ydCB7UmFuZ2VWYWx1ZX0gZnJvbSAnLi4vLi4vbW9kZWwvcmFuZ2UtdmFsdWUubW9kZWwnO1xuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vdXRpbC91dGlscyc7XG5pbXBvcnQge0JhY2tlbmRTZXJ2aWNlfSBmcm9tICcuLi9iYWNrZW5kL2JhY2tlbmQuc2VydmljZSc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7U3lzdGVtU2VydmljZX0gZnJvbSAnLi4vc3lzdGVtL3N5c3RlbS5zZXJ2aWNlJztcbmltcG9ydCB7U2VhcmNoRmlsdGVyVHlwZX0gZnJvbSAnLi9zZWFyY2gtZmlsdGVyLXR5cGUuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEZpZWxkRGVmaW5pdGlvbixcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hRdWVyeSxcbiAgU2VhcmNoUmVzdWx0LFxuICBTZWFyY2hTdGF0ZVxufSBmcm9tICcuL3NlYXJjaC1xdWVyeS5tb2RlbCc7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBTZWFyY2ggU2VydmljZXNcbiAqIFNlZSB7QGxpbmsgU2VhcmNoUXVlcnl9IGZvciBRdWVyeSBEZWZpbml0aW9uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN5c3RlbTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgUmFuZ2VWYWx1ZSBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiB2YWx1ZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgb2JqZWN0IHRvIGJlXG4gICAqIEByZXR1cm5zIFJhbmdlVmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdG9SYW5nZVZhbHVlKHZhbHVlOiBhbnkpOiBSYW5nZVZhbHVlIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdmFsdWUuaGFzT3duUHJvcGVydHkoJ29wZXJhdG9yJykgJiZcbiAgICAgICAgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2ZpcnN0VmFsdWUnKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2VWYWx1ZShcbiAgICAgICAgICB2YWx1ZS5vcGVyYXRvcixcbiAgICAgICAgICB2YWx1ZS5maXJzdFZhbHVlLFxuICAgICAgICAgIHZhbHVlLnNlY29uZFZhbHVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZnJvbWF0ZWQgc2VhcmNoIFF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcmV0dXJucyBTZWFyY2hRdWVyeVxuICAgKi9cbiAgcHVibGljIGJ1aWxkUXVlcnkocXVlcnk6IGFueSk6IFNlYXJjaFF1ZXJ5IHtcbiAgICBsZXQgcTogU2VhcmNoUXVlcnk7XG4gICAgaWYgKHF1ZXJ5IGluc3RhbmNlb2YgU2VhcmNoUXVlcnkpIHtcbiAgICAgIHEgPSBxdWVyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHFPYmo7XG4gICAgICAvKipcbiAgICAgICAqIGlmIHdlIGdvdCBhIHN0cmluZywgd2UnbGwgYXNzdW1lIHRoYXQgaXQncyBhIEpTT05cbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcU9iaiA9IEpTT04ucGFyc2UocXVlcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcU9iaiA9IHF1ZXJ5O1xuICAgICAgfVxuXG4gICAgICBxID0gbmV3IFNlYXJjaFF1ZXJ5KCk7XG4gICAgICBxLnRlcm0gPSBxT2JqLnRlcm07XG4gICAgICBpZiAocU9iai5maWx0ZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHFPYmouZmlsdGVycykuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICBxLmZpbHRlcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgICAgIGssXG4gICAgICAgICAgICAgIHFPYmouZmlsdGVyc1trXS5vLFxuICAgICAgICAgICAgICBxT2JqLmZpbHRlcnNba10udjEsXG4gICAgICAgICAgICAgIHFPYmouZmlsdGVyc1trXS52MlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHFPYmoudHlwZXMpIHtcbiAgICAgICAgcU9iai50eXBlcy5mb3JFYWNoKHQgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnN5c3RlbS5nZXRPYmplY3RUeXBlKHQpKSB7XG4gICAgICAgICAgICBxLnR5cGVzLnB1c2godGhpcy5zeXN0ZW0uZ2V0T2JqZWN0VHlwZSh0KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHEudHlwZXMucHVzaCh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHFPYmouY29udGV4dGZvbGRlcnR5cGVzKSB7XG4gICAgICAgIHFPYmouY29udGV4dGZvbGRlcnR5cGVzLmZvckVhY2godCA9PiB7XG4gICAgICAgICAgaWYgKHQgPT09ICdzeXNyb290Jykge1xuICAgICAgICAgICAgLy8gJ3N5c3Jvb3QnIGlzIG5vdCBhIHJlYWwgb2JqZWN0IHR5cGUsIHNvIHdlIGhhdmUgdG8gY3JlYXRlIGEgZmFrZSB0eXBlLlxuICAgICAgICAgICAgY29uc3Qgc3lzcm9vdEZha2VPYmplY3RUeXBlID0gbmV3IE9iamVjdFR5cGUoe1xuICAgICAgICAgICAgICBpZDogJ2EnLFxuICAgICAgICAgICAgICBmb2xkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG5hbWU6ICdzeXNyb290JyxcbiAgICAgICAgICAgICAgcW5hbWU6ICdzeXNyb290JyxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzeXNyb290JyxcbiAgICAgICAgICAgICAgaXNjb250ZXh0Zm9sZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBhYnN0cmFjdDogZmFsc2UsXG4gICAgICAgICAgICAgIGVsZW1lbnRzOiBbXSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgICBzaGFyZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBtaW5maWxlczogMCxcbiAgICAgICAgICAgICAgbWF4ZmlsZXM6IDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcS5jb250ZXh0Rm9sZGVyVHlwZXMucHVzaChzeXNyb290RmFrZU9iamVjdFR5cGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxLmNvbnRleHRGb2xkZXJUeXBlcy5wdXNoKHRoaXMuc3lzdGVtLmdldE9iamVjdFR5cGUodCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBxLmZpZWxkcyA9IHFPYmouZmllbGRzO1xuICAgICAgaWYgKHFPYmoub3B0aW9ucykge1xuICAgICAgICBxLnN1Z2dlc3QgPSBxT2JqLm9wdGlvbnMuc3VnZ2VzdCB8fCBmYWxzZTtcbiAgICAgICAgcS5leHBlcnRNb2RlID0gcU9iai5vcHRpb25zLmV4cGVydG1vZGUgfHwgZmFsc2U7XG4gICAgICAgIHEuc2NvcGUgPSBxT2JqLm9wdGlvbnMuc2NvcGU7XG4gICAgICAgIC8vIFwifHxcIiBkb2VzIG5vdCB3b3JrIGZvciByZWNvZ25pemluZyBcImZhbHNlXCIgd2l0aCBwcmlvcml0eSBvdmVyIFwiZGVmYXVsdCB0cnVlXCJcbiAgICAgICAgcS5yZXNvbHZlUmVmZXJlbmNlID0gKHFPYmoub3B0aW9ucy5yZXNvbHZlcmVmZXJlbmNlICE9PSBudWxsKSA/IHFPYmoub3B0aW9ucy5yZXNvbHZlcmVmZXJlbmNlIDpcbiAgICAgICAgICAoIHFPYmoub3B0aW9ucy5yZXNvbHZlUmVmZXJlbmNlICE9PSBudWxsID8gcU9iai5vcHRpb25zLnJlc29sdmVSZWZlcmVuY2UgOiB0cnVlKTtcbiAgICAgICAgLy8gd2l0aENvbnRleHQgd2FzIG9sZCBhbmQgXCJ3cm9uZ1wiIG5hbWUgb2YgcGFyYW1ldGVyXG4gICAgICAgIHEud2l0aENvbnRleHQgPSBxT2JqLm9wdGlvbnMud2l0aGNvbnRleHQgfHwgcU9iai5vcHRpb25zLndpdGhDb250ZXh0IHx8IGZhbHNlO1xuICAgICAgICBxLnNlYXJjaE1vZGUgPVxuICAgICAgICAgIHFPYmoub3B0aW9ucy5zZWFyY2htb2RlIHx8IFNlYXJjaFF1ZXJ5LkRFRkFVTFRfU0VBUkNIX01PREU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBiZSBleGVjdXRlZFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdD5cbiAgICovXG4gIHB1YmxpYyBzZWFyY2gocXVlcnk6IFNlYXJjaFF1ZXJ5KTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUXVlcnkocXVlcnkuZ2V0UXVlcnlKc29uKCkpLnBpcGUoXG4gICAgICBtYXAocmVzID0+IHRoaXMuY3JlYXRlUmVzdWx0RnJvbVJlc3BvbnNlKHJlcykpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBTZWFyY2ggcmVzdWx0c1xuICAgKi9cbiAgcHVibGljIGdldFNlYXJjaFN0YXRlKHF1ZXJ5OiBhbnkpOiBPYnNlcnZhYmxlPFNlYXJjaFN0YXRlPiB7XG5cbiAgICBpZiAocXVlcnkgaW5zdGFuY2VvZiBTZWFyY2hRdWVyeSkge1xuICAgICAgcXVlcnkgPSBxdWVyeS5nZXRRdWVyeUpzb24oKTtcbiAgICB9XG4gICAgZGVsZXRlIHF1ZXJ5Lm5hbWU7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5LCB0cnVlKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IG5ldyBTZWFyY2hTdGF0ZSgpO1xuICAgICAgICBzdGF0ZS5jb3VudCA9IHJlcy5oaXRzLnRvdGFsO1xuICAgICAgICBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlUGFyYW0gPSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXTtcbiAgICAgICAgICBjb25zdCBhZ2dyZWdhdGlvbnMgPSByZXMuYWdncmVnYXRpb25zW2Jhc2VQYXJhbV1cbiAgICAgICAgICAgID8gcmVzLmFnZ3JlZ2F0aW9uc1tiYXNlUGFyYW1dLmJ1Y2tldHNcbiAgICAgICAgICAgIDogW107XG4gICAgICAgICAgYWdncmVnYXRpb25zLmZvckVhY2goYWdncmVnYXRpb24gPT4ge1xuICAgICAgICAgICAgbGV0IHtrZXksIGRvY19jb3VudCwgY29udGV4dGZvbGRlcnR5cGV9ID0gYWdncmVnYXRpb247XG4gICAgICAgICAgICBpZiAoYmFzZVBhcmFtID09PSAnZmlsZXNpemUnKSB7XG4gICAgICAgICAgICAgIGRvY19jb3VudCA9IGFnZ3JlZ2F0aW9uWydmaWx0ZXIjZG9jdW1lbnRzJ10uZG9jX2NvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUuYWRkQWdncmVnYXRpb25zKGJhc2VQYXJhbSwga2V5LCBkb2NfY291bnQsIGFnZ3JlZ2F0aW9uKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogdHlwZSBhZ2dyZWdhdGlvbnMgbWF5IGFsc28gY29udGFpbiBidWNrZXRzIGZvciB0aGVpciBjb250ZXh0IHR5cGVzXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgYmFzZVBhcmFtID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFICYmXG4gICAgICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGV4dGZvbGRlcnR5cGUuYnVja2V0cy5mb3JFYWNoKGN0eEFnZyA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUuYWRkQWdncmVnYXRpb25zKFxuICAgICAgICAgICAgICAgICAgJ2NvbnRleHR0eXBlJyxcbiAgICAgICAgICAgICAgICAgIGN0eEFnZy5rZXksXG4gICAgICAgICAgICAgICAgICBjdHhBZ2cuZG9jX2NvdW50LFxuICAgICAgICAgICAgICAgICAgY3R4QWdnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGEgcGFydCBvZiBhIHF1ZXJpZXMgcmVzdWx0LiBUaGlzIGNhbiBiZSB1c2VkIGZvciBwYWdpbmcgb2YgcmVzdWx0c1xuICAgKiBvciBsYXp5IGxvYWRpbmcgbGFyZ2UgcmVzdWx0cy5cbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBiZSBleGVjdXRlZFxuICAgKiBAcGFyYW0gZnJvbUluZGV4IFRoZSBpbmRleCBmcm9tIHdoZXJlIHRvIGZldGNoIHJlc3VsdHNcbiAgICogQHBhcmFtIGNodW5rU2l6ZSBTaXplIG9mIHRoZSBjaHVuayB0byBiZSBmZXRjaGVkXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8U2VhcmNoUmVzdWx0PlxuICAgKi9cbiAgcHVibGljIGdldENodW5rZWRSZXN1bHQoXG4gICAgcXVlcnk6IFNlYXJjaFF1ZXJ5LFxuICAgIGZyb21JbmRleDogbnVtYmVyLFxuICAgIGNodW5rU2l6ZTogbnVtYmVyXG4gICk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0PiB7XG4gICAgY29uc3QgcSA9IHF1ZXJ5LmdldFF1ZXJ5SnNvbigpO1xuXG4gICAgcS5mcm9tID0gZnJvbUluZGV4O1xuICAgIGNvbnN0IHF1ZXJ5VXJpID0gYHNlYXJjaCFjaHVuazoke2NodW5rU2l6ZX0hJHtKU09OLnN0cmluZ2lmeShxKX1gO1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZ2V0VmlhVGVtcENhY2hlKHF1ZXJ5VXJpLCAoKSA9PlxuICAgICAgdGhpcy5leGVjdXRlUXVlcnkocSwgZmFsc2UsIGNodW5rU2l6ZSkucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiB0aGlzLmNyZWF0ZVJlc3VsdEZyb21SZXNwb25zZShyZXMpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBxdWVyeVxuICAgKlxuICAgKiBAcGFyYW0gcXVlcnlKc29uIFRoZSBxdWVyeSBKU09OIHRvIGJlIGV4ZWN1dGVkXG4gICAqIEBwYXJhbSBhZ2dyZWdhdGVTZWFyY2ggRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIGV4ZWN1dGUgYW4gYWdncmVnYXRpb24gc2VhcmNoIChubyBhY3R1YWwgcmVzdWx0cylcbiAgICogQHBhcmFtIGN1c3RvbVNpemUgQ3VzdG9tIG51bWJlciBvZiByZXN1bHRzIHRvIGJlIGZldGNoZWQsIGlmIG5vdCBzZXQgdGhlIGRlZmF1bHQgc2l6ZSB3aWxsIGJlIGFwcGxpZWRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBwdWJsaWMgZXhlY3V0ZVF1ZXJ5KFxuICAgIHF1ZXJ5SnNvbjogYW55LFxuICAgIGFnZ3JlZ2F0ZVNlYXJjaD86IGJvb2xlYW4sXG4gICAgY3VzdG9tU2l6ZT86IG51bWJlclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCB1cmk6IHN0cmluZztcbiAgICBsZXQgcXVlcnkgPSBxdWVyeUpzb247XG4gICAgaWYgKGFnZ3JlZ2F0ZVNlYXJjaCkge1xuICAgICAgdXJpID0gYC9hZ2dyZWdhdGVgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaXplID0gY3VzdG9tU2l6ZSB8fCB0aGlzLmNvbmZpZy5nZXRSYXcoJ3NlYXJjaC5saW1pdCcpO1xuICAgICAgdXJpID0gYC8/c2l6ZT0ke3NpemV9YDtcbiAgICB9XG4gICAgcXVlcnkub3B0aW9ucyA9IHsuLi5xdWVyeS5vcHRpb25zLCB0cmFja3RvdGFsaGl0czogdGhpcy5jb25maWcuZ2V0UmF3KCdzZWFyY2gudHJhY2tUb3RhbEhpdHMnKSB8fCBmYWxzZSwgdGltZXpvbmU6IFV0aWxzLmdldFRpbWV6b25lT2Zmc2V0KCl9O1xuXG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5nZXRWaWFUZW1wQ2FjaGUodXJpICsgSlNPTi5zdHJpbmdpZnkocXVlcnkpLCAoKSA9PiB0aGlzLmJhY2tlbmQucG9zdCh1cmksIHF1ZXJ5LCB0aGlzLmJhY2tlbmQuZ2V0U2VhcmNoQmFzZSgpKSk7XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWRzIGEgY3N2LWZpbGUgb2YgdGhlIHJlc3VsdHMgb2YgYSBnaXZlbiBzZWFyY2gtcXVlcnlcbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5SnNvbiBUaGUgcXVlcnkgSlNPTiB0byBiZSBleGVjdXRlZFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIHB1YmxpYyBkb3dubG9hZENzdkZyb21RdWVyeShxdWVyeUpzb246IG9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxuICAgICAgLnBvc3QoJy9leHBvcnQnLCBxdWVyeUpzb24sIHRoaXMuYmFja2VuZC5nZXRTZWFyY2hCYXNlKCksIHtcbiAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyZXMuYm9keV0sIHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04J1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgdGhpcy5nZXRGaWxlTmFtZUZyb21IdHRwUmVzcG9uc2UocmVzKSwge2F1dG9Cb206IHRydWV9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVOYW1lRnJvbUh0dHBSZXNwb25zZShyZXM6IEh0dHBSZXNwb25zZTxhbnk+KSB7XG4gICAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uSGVhZGVyID1cbiAgICAgIHJlcy5oZWFkZXJzLmdldCgnQ29udGVudC1EaXNwb3NpdGlvbicpIHx8ICcnO1xuICAgIHJldHVybiBjb250ZW50RGlzcG9zaXRpb25IZWFkZXIuc3BsaXQoJ2ZpbGVuYW1lPScpWzFdO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgc2VhcmNoIGZvciBmZXRjaGluZyBzdWdnZXN0aW9ucyBvbiBhIGdpdmVuIHNlYXJjaCB0ZXJtLlxuICAgKlxuICAgKiBAcGFyYW0gdGVybSBUaGUgc2VhcmNoIHRlcm1cbiAgICogQHJldHVyblxuICAgKi9cbiAgcHVibGljIGF1dG9jb21wbGV0ZSh0ZXJtOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldEpzb24oXG4gICAgICBgL2F1dG9jb21wbGV0ZT9wcmVmaXg9JHtlbmNvZGVVUklDb21wb25lbnQodGVybSl9YCxcbiAgICAgIHRoaXMuYmFja2VuZC5nZXRTZWFyY2hCYXNlKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBjcmVhdGUgYSBTZWFyY2hGaWx0ZXIgZm9yIGEgZm9ybSBlbGVtZW50LiBCYXNlZCBvbiB0aGUgdGFyZ2V0IHR5cGVzXG4gICAqIGl0J2xsIGNyZWF0ZSB0aGUgcmlnaHQga2luZCBvZiBmaWx0ZXIgdGhhdCB5b3UgdGhlbiBjYW4gYWRkIHRvIGEgU2VhcmNoUXVlcnlcbiAgICpcbiAgICogQHBhcmFtIHRhcmdldFR5cGVzXG4gICAqIEBwYXJhbSBmb3JtRWxlbWVudE5hbWVcbiAgICogQHBhcmFtIGVsZW1lbnRWYWx1ZVxuICAgKiBAcmV0dXJucyBTZWFyY2hGaWx0ZXJbXSBBbiBhcnJheSBvZiBzZWFyY2ggZmlsdGVycyBtb3N0IG9mIHRoZSB0aW1lIGNvbnRhaW5pbmcgb25seSBvbmUgZW50cnksIGJ1dFxuICAgKiBmb3IgdGFibGUgZWxlbWVudHMgdGhpcyBjb3VsZCBiZSBtb3JlXG4gICAqL1xuICBwdWJsaWMgZ2V0U2VhcmNoRmlsdGVyKFxuICAgIHRhcmdldFR5cGVzOiBPYmplY3RUeXBlW10sXG4gICAgZm9ybUVsZW1lbnROYW1lOiBzdHJpbmcsXG4gICAgZWxlbWVudFZhbHVlOiBhbnlcbiAgKTogU2VhcmNoRmlsdGVyW10ge1xuICAgIGNvbnN0IGZpbHRlcjogU2VhcmNoRmlsdGVyW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJUeXBlOiBTZWFyY2hGaWx0ZXJUeXBlID0gdGhpcy5pZGVudGlmeVNlYXJjaEZpbHRlcihcbiAgICAgIHRhcmdldFR5cGVzLFxuICAgICAgZm9ybUVsZW1lbnROYW1lXG4gICAgKTtcbiAgICBjb25zdCBmb3JtRWxlbWVudCA9IHRhcmdldFR5cGVzWzBdLmVsZW1lbnRzLmZpbmQoZWwgPT4gZWwucW5hbWUgPT09IGZvcm1FbGVtZW50TmFtZSk7XG5cbiAgICBpZiAoZWxlbWVudFZhbHVlID09PSBudWxsKSB7XG4gICAgICBmaWx0ZXIucHVzaChcbiAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihmb3JtRWxlbWVudE5hbWUsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTCwgbnVsbClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChmb3JtRWxlbWVudCAmJiBmb3JtRWxlbWVudC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3BhdGgnKSB7XG4gICAgICBmaWx0ZXIucHVzaChcbiAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihcbiAgICAgICAgICBmb3JtRWxlbWVudE5hbWUsXG4gICAgICAgICAgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLk1BVENILFxuICAgICAgICAgIGVsZW1lbnRWYWx1ZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudFZhbHVlIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSkge1xuICAgICAgLyoqXG4gICAgICAgKiBjcmVhdGUgZmlsdGVyIGZvciBlbGVtZW50cyB0aGF0IHN1cHBvcnQgcmFuZ2VzIGxpa2UgREFURVRJTUUgYW5kIE5VTUJFUlxuICAgICAgICovXG4gICAgICBpZiAoXG4gICAgICAgIGVsZW1lbnRWYWx1ZS5maXJzdFZhbHVlICE9PSBudWxsICYmXG4gICAgICAgIGVsZW1lbnRWYWx1ZS5maXJzdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICBmaWx0ZXIucHVzaChcbiAgICAgICAgICBuZXcgU2VhcmNoRmlsdGVyKFxuICAgICAgICAgICAgZm9ybUVsZW1lbnROYW1lLFxuICAgICAgICAgICAgZWxlbWVudFZhbHVlLm9wZXJhdG9yLFxuICAgICAgICAgICAgZWxlbWVudFZhbHVlLmZpcnN0VmFsdWUsXG4gICAgICAgICAgICBlbGVtZW50VmFsdWUuc2Vjb25kVmFsdWUsXG4gICAgICAgICAgICBmaWx0ZXJUeXBlLmRhdGV0aW1lID8ge3RpbWU6IGZpbHRlclR5cGUud2l0aHRpbWV9IDogdW5kZWZpbmVkXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKGZpbHRlclR5cGUubXVsdGlzZWxlY3QgfHwgQXJyYXkuaXNBcnJheShlbGVtZW50VmFsdWUpKSAmJiAhZmlsdGVyVHlwZS50YWJsZSkge1xuICAgICAgLyoqXG4gICAgICAgKiBjcmVhdGUgZmlsdGVyIGZvciBtdWx0aXNlbGVjdCBlbGVtZW50cyBsaWtlIENPREVTWVNURU0gYW5kIE9SR0FOSVpBVElPTlxuICAgICAgICovXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50VmFsdWUpICYmIGVsZW1lbnRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihcbiAgICAgICAgICAgIGZvcm1FbGVtZW50TmFtZSxcbiAgICAgICAgICAgIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTixcbiAgICAgICAgICAgIGVsZW1lbnRWYWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpbHRlclR5cGUudGFibGUpIHtcbiAgICAgIC8qKlxuICAgICAgICogY3JlYXRlIGZpbHRlcihzKSBmb3IgdGFibGUgZWxlbWVudHNcbiAgICAgICAqL1xuICAgICAgY29uc3QgcXVlcnlSb3cgPSBlbGVtZW50VmFsdWVbMF07XG4gICAgICBPYmplY3Qua2V5cyhxdWVyeVJvdykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmKHF1ZXJ5Um93W2tleV0gIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYCR7Zm9ybUVsZW1lbnROYW1lfS4ke2tleX1gO1xuICAgICAgICAgIGlmIChxdWVyeVJvd1trZXldIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSkge1xuICAgICAgICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Um93W2tleV0ub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgcXVlcnlSb3dba2V5XS5maXJzdFZhbHVlLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Um93W2tleV0uc2Vjb25kVmFsdWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocXVlcnlSb3dba2V5XSkgPyBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU4gOiBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUwsXG4gICAgICAgICAgICAgICAgcXVlcnlSb3dba2V5XVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogZGVmYXVsdCB3aWxsIHVzZSBlcXVhbGl0eSBvcGVyYXRvclxuICAgICAgICovXG4gICAgICBmaWx0ZXIucHVzaChcbiAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihcbiAgICAgICAgICBmb3JtRWxlbWVudE5hbWUsXG4gICAgICAgICAgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMLFxuICAgICAgICAgIGVsZW1lbnRWYWx1ZVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIGlkZW50aWZpZXMgZm9ybSBlbGVtZW50cyB0aGF0IGFyZSBlbmFibGVkIHRvIGNvbnRhaW4gbXVsdGlwbGUgdmFsdWVzXG4gICAqIHRyeSB0byBmaW5kIHRoZSBmb3JtIGVsZW1lbnQgaW5zaWRlIG9mIHRoZSBwcm92aWRlZCBvYmplY3QgdHlwZXMgdG8gZ2V0IGl0cyB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlW10gdGFyZ2V0VHlwZXNcbiAgICogQHBhcmFtIHN0cmluZyBmb3JtRWxlbWVudE5hbWVcbiAgICogQHJldHVybiBTZWFyY2hGaWx0ZXJUeXBlXG4gICAqL1xuICBwcml2YXRlIGlkZW50aWZ5U2VhcmNoRmlsdGVyKFxuICAgIHRhcmdldFR5cGVzOiBPYmplY3RUeXBlW10sXG4gICAgZm9ybUVsZW1lbnROYW1lOiBzdHJpbmdcbiAgKTogU2VhcmNoRmlsdGVyVHlwZSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBtYXRjaDtcbiAgICB3aGlsZSAoIW1hdGNoICYmIGkgPCB0YXJnZXRUeXBlcy5sZW5ndGgpIHtcbiAgICAgIG1hdGNoID0gdGFyZ2V0VHlwZXNbaV0uZWxlbWVudHMuZmluZChcbiAgICAgICAgZWxlbWVudCA9PiBlbGVtZW50LnFuYW1lID09PSBmb3JtRWxlbWVudE5hbWVcbiAgICAgICk7XG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG11bHRpc2VsZWN0OiB0aGlzLmlzTXVsdGlzZWxlY3RTZWFyY2hGaWx0ZXIobWF0Y2gpLFxuICAgICAgdGFibGU6IG1hdGNoICYmIG1hdGNoLnR5cGUgPT09ICdUQUJMRScsXG4gICAgICBkYXRldGltZTogbWF0Y2ggJiYgbWF0Y2gudHlwZSA9PT0gJ0RBVEVUSU1FJyxcbiAgICAgIHdpdGh0aW1lOiBtYXRjaCAmJiBtYXRjaC53aXRodGltZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogaWRlbnRpZmllcyBmb3JtIGVsZW1lbnRzIHRoYXQgYXJlIGVuYWJsZWQgdG8gY29udGFpbiBtdWx0aXBsZSB2YWx1ZXNcbiAgICpcbiAgICogQHBhcmFtIGZvcm1FbGVtZW50XG4gICAqIEByZXR1cm4gYm9vbGVhblxuICAgKi9cbiAgcHJpdmF0ZSBpc011bHRpc2VsZWN0U2VhcmNoRmlsdGVyKGZvcm1FbGVtZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZm9ybUVsZW1lbnQgJiZcbiAgICAgIChmb3JtRWxlbWVudC50eXBlID09PSAnT1JHQU5JWkFUSU9OJyB8fFxuICAgICAgICBmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgfHxcbiAgICAgICAgLy8gLi4uXG4gICAgICAgIChmb3JtRWxlbWVudC50eXBlID09PSAnU1RSSU5HJyAmJlxuICAgICAgICAgIGZvcm1FbGVtZW50LmNsYXNzaWZpY2F0aW9uID09PSAnc2VsZWN0b3InKSB8fFxuICAgICAgICAvLyBtdWx0aXNlbGVjdCByZWZlcmVuY2UgZmllbGRzXG4gICAgICAgIChmb3JtRWxlbWVudC50eXBlID09PSAnU1RSSU5HJyAmJiBmb3JtRWxlbWVudC5tdWx0aXNlbGVjdCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgU2VhcmNoUmVzdWx0IGZyb20gdGhlIHJlc3BvbnNlIHNlbnQgYnkgdGhlIHNlcnZlclxuICAgKlxuICAgKiBAcGFyYW0gYmFja2VuZFJlc3BvbnNlIFNlcnZlciByZXNwb25zZVxuICAgKiBAcmV0dXJuVGhlIFNlYXJjaFJlc3VsdCBTZWFyY2hSZXN1bHQgb2JqZWN0IGNyZWF0ZWQgZnJvbSB0aGUgc2VydmVyIHJlc3BvbnNlXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlUmVzdWx0RnJvbVJlc3BvbnNlKGJhY2tlbmRSZXNwb25zZSk6IFNlYXJjaFJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNlYXJjaFJlc3VsdCgpO1xuICAgIHJlc3VsdC5zdWdnZXN0cyA9IGJhY2tlbmRSZXNwb25zZS5zdWdnZXN0O1xuICAgIHJlc3VsdC5maWVsZHMgPSBiYWNrZW5kUmVzcG9uc2UuY29uZmlnO1xuXG4gICAgLyoqXG4gICAgICogdXNlIGhpdHMgX2lkIGZpZWxkIGFzIGlkIHByb3BlcnR5LCBiZWNhdXNlIG90aGVyd2lzZSBlbXB0eSByZXN1bHQgaGl0cyB3b3VsZCBub3QgY29udGFpbiBhbiBpZFxuICAgICAqL1xuICAgIGNvbnN0IGhpdHMgPSBiYWNrZW5kUmVzcG9uc2UuaGl0cy5oaXRzLm1hcChoID0+ICh7XG4gICAgICAuLi5oLl9zb3VyY2UsXG4gICAgICBpZDogaC5faWQsXG4gICAgICAuLi4oaC5zbmlwcGV0cyAmJiB7c25pcHBldHM6IGguc25pcHBldHN9KSxcbiAgICAgIC8vIGhhdmluZyByZXF1ZXN0ZWQgYSByZXNvbHZlZCByZWZlcmVuY2UgKG9wdGlvbnMpIHdlIGFsc28gcGFzcyBgX3JlZmVyZW5jZWAgaW4gdGhlIHJlc3VsdCBpdGVtXG4gICAgICAuLi4oaC5yZWZlcmVuY2VzICYmIHtfcmVmZXJlbmNlczogaC5yZWZlcmVuY2VzfSksXG4gICAgICAuLi4oaC5jb250ZXh0ICYmIHtjb250ZXh0OiBoLmNvbnRleHR9KVxuICAgIH0pKTtcblxuICAgIHJlc3VsdC5jb3VudCA9IGJhY2tlbmRSZXNwb25zZS5oaXRzLnRvdGFsO1xuICAgIHJlc3VsdC5oaXRzID0gaGl0cyB8fCBbXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBSZXN1bCB0RmllbGQgRGVmaW5pdGlvbiBDb25maWdcbiAgICpcbiAgICogQHBhcmFtIFNlYXJjaFF1ZXJ5IHF1ZXJ5XG4gICAqIEByZXR1cm4gKHt0eXBlOiBPYmplY3RUeXBlOyBjb250ZXh0VHlwZTogT2JqZWN0VHlwZX0pXG4gICAqL1xuICBnZXRSZXN1bHRGaWVsZERlZmluaXRpb25Db25maWcocXVlcnk6IFNlYXJjaFF1ZXJ5KSB7XG4gICAgY29uc3QgdHlwZSA9IChxdWVyeS50eXBlcyB8fCBbXSkubGVuZ3RoID09PSAxID8gcXVlcnkudHlwZXNbMF0gOiBudWxsO1xuICAgIGNvbnN0IGNvbnRleHRUeXBlID1cbiAgICAgIChxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMgfHwgW10pLmxlbmd0aCA9PT0gMVxuICAgICAgICA/IHF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlc1swXVxuICAgICAgICA6IG51bGw7XG4gICAgcmV0dXJuIHt0eXBlLCBjb250ZXh0VHlwZX07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDb25maWdUeXBlTmFtZXMoXG4gICAgdHlwZTogT2JqZWN0VHlwZSB8IG51bGwsXG4gICAgY29udGV4dFR5cGU6IE9iamVjdFR5cGUgfCBudWxsXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlTmFtZTogdHlwZSA/IHR5cGUucW5hbWUgOiAnc3lzb2JqZWN0JyxcbiAgICAgIGNvbnRleHRUeXBlTmFtZTogdHlwZSAmJiBjb250ZXh0VHlwZSA/IGNvbnRleHRUeXBlLnFuYW1lIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSByZXN1bHQgZmllbGQgZGVmaW5pdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdHlwZVxuICAgKiBVU0VSOiAoZGVmYXVsdCkgdGhlIHJlc3VsdCBsaXN0IGNvbmZpZ3VyYXRpb24gc2F2ZWQgYnkgdGhlIGN1cnJlbnQgdXNlclxuICAgKiBERUZBVUxUOiB0aGUgZGVmYXVsdCByZXN1bHQgbGlzdCBjb25maWd1cmF0aW9uIChhbHNvIHJldHVybmVkIHdoZW4gdGhlcmUgaXMgbm8gdXNlciBjb25maWd1cmF0aW9uKVxuICAgKiBBTEw6IGFsbCBhdmFpbGFibGUgcmVzdWx0IGZpZWxkcyBmb3IgdGhlIGdpdmVuIHR5cGUgKGFuZCBjb250ZXh0KVxuICAgKlxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZSB8IG51bGwgdHlwZSBUaGUgb2JqZWN0IHR5cGVcbiAgICogQHBhcmFtIE9iamVjdFR5cGUgfCBudWxsIGNvbnRleHRUeXBlIE9iamVjdCB0eXBlIHRhcmdldCB0eXBlcyBhbGxvd2VkIGNvbnRleHQgdHlwZVxuICAgKiBAcGFyYW0gbW9kZSBUaGUgcmVzdWx0IGxpc3RzIGNvbmZpZ3VyYXRpb24gbW9kZTpcbiAgICogQHJldHVybiBPYnNlcnZhYmxlPEZpZWxkRGVmaW5pdGlvbj5cbiAgICovXG4gIGZldGNoUmVzdWx0RmllbGREZWZpbml0aW9uKFxuICAgIHR5cGU6IE9iamVjdFR5cGUgfCBudWxsLFxuICAgIGNvbnRleHRUeXBlOiBPYmplY3RUeXBlIHwgbnVsbCxcbiAgICBtb2RlXG4gICkge1xuICAgIGNvbnN0IHt0eXBlTmFtZSwgY29udGV4dFR5cGVOYW1lfSA9IHRoaXMucmVzb2x2ZUNvbmZpZ1R5cGVOYW1lcyhcbiAgICAgIHR5cGUsXG4gICAgICBjb250ZXh0VHlwZVxuICAgICk7XG4gICAgY29uc3QgdXJsID0gVXRpbHMuYnVpbGRVcmkoYC91c2VyL2NvbmZpZy9yZXN1bHQvJHt0eXBlTmFtZX1gLCB7XG4gICAgICBjb250ZXh0dHlwZTogY29udGV4dFR5cGVOYW1lLFxuICAgICAgbW9kZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmRcbiAgICAgIC5nZXRKc29uKHVybClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoXG4gICAgICAgICAgKHJlczogYW55KSA9PlxuICAgICAgICAgICAgbmV3IEZpZWxkRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgcmVzLmVsZW1lbnRzLFxuICAgICAgICAgICAgICByZXMuc29ydG9yZGVyLFxuICAgICAgICAgICAgICByZXMuZ3JvdXBvcmRlcixcbiAgICAgICAgICAgICAgcmVzLnBpbm5lZCxcbiAgICAgICAgICAgICAgcmVzLmFsaWdubWVudHgsXG4gICAgICAgICAgICAgIHJlcy5tb2RlXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgYSBjb2x1bW4gZGVmaW5pdGlvbiBhcyByZXN1bHQgb3IgY29tbW9uIHJlc3VsdC5cbiAgICpcbiAgICogQHBhcmFtIE9iamVjdFR5cGUgfCBudWxsIHR5cGUgVGhlIG9iamVjdCB0eXBlXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlIHwgbnVsbCBjb250ZXh0VHlwZSBPYmplY3QgdHlwZSB0YXJnZXQgdHlwZXMgYWxsb3dlZCBjb250ZXh0IHR5cGVcbiAgICogQHBhcmFtIEZpZWxkRGVmaW5pdGlvbiBkYXRhIFRoZSByZXN1bHQgbGlzdCBjb25maWd1cmF0aW9uIHRvIGJlIHBlcnNpc3RlZFxuICAgKiBAcGFyYW0gYm9vbGVhbiBjb21tb24gRmxhZyBlbmFibGVzIHRvIHNldCBjb25maWcgYXMgZGVmYXVsdCAvIGNvbW1vbiByZXN1bHRcbiAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIHNhdmVSZXN1bHRGaWVsZERlZmluaXRpb24oXG4gICAgdHlwZTogT2JqZWN0VHlwZSB8IG51bGwsXG4gICAgY29udGV4dFR5cGU6IE9iamVjdFR5cGUgfCBudWxsLFxuICAgIGRhdGE6IEZpZWxkRGVmaW5pdGlvbixcbiAgICBjb21tb24gPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCBiYXNlVXJpID0gY29tbW9uXG4gICAgICA/ICcvdXNlci9jb25maWcvY29tbW9ucmVzdWx0LydcbiAgICAgIDogJy91c2VyL2NvbmZpZy9yZXN1bHQvJztcbiAgICBjb25zdCB7dHlwZU5hbWUsIGNvbnRleHRUeXBlTmFtZX0gPSB0aGlzLnJlc29sdmVDb25maWdUeXBlTmFtZXMoXG4gICAgICB0eXBlLFxuICAgICAgY29udGV4dFR5cGVcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IFV0aWxzLmJ1aWxkVXJpKGJhc2VVcmkgKyB0eXBlTmFtZSwge1xuICAgICAgY29udGV4dHR5cGU6IGNvbnRleHRUeXBlTmFtZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucG9zdCh1cmwsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjb2x1bW4gZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIE9iamVjdFR5cGUgfCBudWxsIHR5cGUgVGhlIG9iamVjdCB0eXBlXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlIHwgbnVsbCBjb250ZXh0VHlwZSBPYmplY3QgdHlwZSB0YXJnZXQgdHlwZXMgYWxsb3dlZCBjb250ZXh0IHR5cGVcbiAgICogQHJldHVybiBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIHJlbW92ZVJlc3VsdEZpZWxkRGVmaW5pdGlvbihcbiAgICB0eXBlOiBPYmplY3RUeXBlIHwgbnVsbCxcbiAgICBjb250ZXh0VHlwZTogT2JqZWN0VHlwZSB8IG51bGxcbiAgKSB7XG4gICAgY29uc3Qge3R5cGVOYW1lLCBjb250ZXh0VHlwZU5hbWV9ID0gdGhpcy5yZXNvbHZlQ29uZmlnVHlwZU5hbWVzKFxuICAgICAgdHlwZSxcbiAgICAgIGNvbnRleHRUeXBlXG4gICAgKTtcbiAgICBjb25zdCB1cmwgPSBVdGlscy5idWlsZFVyaShgL3VzZXIvY29uZmlnL3Jlc3VsdC8ke3R5cGVOYW1lfWAsIHtcbiAgICAgIGNvbnRleHR0eXBlOiBjb250ZXh0VHlwZU5hbWVcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmRlbCh1cmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIHRvIGJlIGFkZGVkIHRvIGEgZm9ybSBlbGVtZW50IGJ5IGV4dHJhY3RpbmcgaXQgZnJvbSBhXG4gICAqIHNlYXJjaCBmaWx0ZXIuIFRoZSBraW5kIG9mIHZhbHVlIGRpZmZlcnMgYmFzZWQgb24gdGhlIGZvcm0gZWxlbWVudHMgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIGV4dHJhY3QgdmFsdWUgZnJvbVxuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnRUeXBlIEZvcm0gZWxlbWVudHMgdHlwZSAoJ1NUUklORycsICdEQVRFJywgJ0NPREVTWVNURU0nLCAuLi4pXG4gICAqIEByZXR1cm5zIHRoZSBleHRyYWN0ZWQgdmFsdWVcbiAgICovXG4gIGZpbHRlclRvRWxlbWVudFZhbHVlKGZpbHRlcjogU2VhcmNoRmlsdGVyLCBmb3JtRWxlbWVudFR5cGU6IHN0cmluZykge1xuICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAvLyB0eXBlcyB0aGF0IHN1cHBvcnQgcmFuZ2VzXG4gICAgICBpZiAoKGZvcm1FbGVtZW50VHlwZSA9PT0gJ05VTUJFUicgfHwgZm9ybUVsZW1lbnRUeXBlID09PSAnREFURVRJTUUnKSAmJiBmaWx0ZXIuZmlyc3RWYWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IG5ldyBSYW5nZVZhbHVlKFxuICAgICAgICAgIGZpbHRlci5vcGVyYXRvcixcbiAgICAgICAgICBmaWx0ZXIuZmlyc3RWYWx1ZSxcbiAgICAgICAgICBmaWx0ZXIuc2Vjb25kVmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZmlsdGVyLmZpcnN0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGFibGUgdmFsdWUgYnkgZXh0cmFjdGluZyB0aGUgZGF0YSBmcm9tIHRoZSBjb3JyZXNwb25kaW5nXG4gICAqIHNlYXJjaCBmaWx0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVycyBUaGUgZmlsdGVycyB0byBleHRyYWN0IHZhbHVlIGZyb21cbiAgICogQHBhcmFtIHRhYmxlRWxlbWVudHMgdGhlIGZvcm0gZWxlbWVudHMgb2YgdGhlIHRhYmxlXG4gICAqIEByZXR1cm5zIHRoZSB0YWJsZSB2YWx1ZSBleHRyYWN0ZWQgZnJvbSBhbGwgZmlsdGVyc1xuICAgKi9cbiAgdGFibGVGaWx0ZXJzVG9FbGVtZW50VmFsdWUoZmlsdGVyczogU2VhcmNoRmlsdGVyW10sIHRhYmxlRWxlbWVudHMpe1xuICAgIGxldCB2YWx1ZSA9IHt9O1xuICAgIGZpbHRlcnMuZm9yRWFjaChmID0+IHtcbiAgICAgIGxldCBrZXkgPSB0YWJsZUVsZW1lbnRzLmZpbmQoZSA9PiBlLnFuYW1lID09PSBmLnByb3BlcnR5KS5uYW1lO1xuICAgICAgbGV0IHR5cGUgPSB0YWJsZUVsZW1lbnRzLmZpbmQoZSA9PiBlLnFuYW1lID09PSBmLnByb3BlcnR5KS50eXBlO1xuICAgICAgdmFsdWVba2V5XSA9IHRoaXMuZmlsdGVyVG9FbGVtZW50VmFsdWUoZiwgdHlwZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFt2YWx1ZV07XG4gIH1cbn1cbiJdfQ==
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lby1zZGsvY29yZS9zcmMvbGliL3NlcnZpY2Uvc2VhcmNoL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFeEMsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUt2QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLHNCQUFzQixDQUFDOzs7OztBQUU5Qjs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUNVLE1BQXFCLEVBQ3JCLE9BQXVCLEVBQ3ZCLE1BQWM7UUFGZCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDckIsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFVO1FBQ25DLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFO2dCQUMvQixPQUFPLEtBQUssQ0FBQzthQUNkO2lCQUFNLElBQ0wsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQ2xDO2dC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QyxDQUFDO0lBQ2pCLENBQUM7OzBHQXRtQlUsYUFBYTs4R0FBYixhQUFhLGNBRlosTUFBTTsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T2JqZWN0VHlwZX0gZnJvbSAnLi4vLi4vbW9kZWwvb2JqZWN0LXR5cGUubW9kZWwnO1xuaW1wb3J0IHtSYW5nZVZhbHVlfSBmcm9tICcuLi8uLi9tb2RlbC9yYW5nZS12YWx1ZS5tb2RlbCc7XG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi91dGlsL3V0aWxzJztcbmltcG9ydCB7QmFja2VuZFNlcnZpY2V9IGZyb20gJy4uL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtTeXN0ZW1TZXJ2aWNlfSBmcm9tICcuLi9zeXN0ZW0vc3lzdGVtLnNlcnZpY2UnO1xuaW1wb3J0IHtTZWFyY2hGaWx0ZXJUeXBlfSBmcm9tICcuL3NlYXJjaC1maWx0ZXItdHlwZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRmllbGREZWZpbml0aW9uLFxuICBTZWFyY2hGaWx0ZXIsXG4gIFNlYXJjaFF1ZXJ5LFxuICBTZWFyY2hSZXN1bHQsXG4gIFNlYXJjaFN0YXRlXG59IGZyb20gJy4vc2VhcmNoLXF1ZXJ5Lm1vZGVsJztcblxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIFNlYXJjaCBTZXJ2aWNlc1xuICogU2VlIHtAbGluayBTZWFyY2hRdWVyeX0gZm9yIFF1ZXJ5IERlZmluaXRpb25cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFja2VuZDogQmFja2VuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1xuICApIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBSYW5nZVZhbHVlIGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIHZhbHVlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBvYmplY3QgdG8gYmVcbiAgICogQHJldHVybnMgUmFuZ2VWYWx1ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0b1JhbmdlVmFsdWUodmFsdWU6IGFueSk6IFJhbmdlVmFsdWUge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnb3BlcmF0b3InKSAmJlxuICAgICAgICB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnZmlyc3RWYWx1ZScpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZVZhbHVlKFxuICAgICAgICAgIHZhbHVlLm9wZXJhdG9yLFxuICAgICAgICAgIHZhbHVlLmZpcnN0VmFsdWUsXG4gICAgICAgICAgdmFsdWUuc2Vjb25kVmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmcm9tYXRlZCBzZWFyY2ggUXVlcnlcbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5XG4gICAqIEByZXR1cm5zIFNlYXJjaFF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgYnVpbGRRdWVyeShxdWVyeTogYW55KTogU2VhcmNoUXVlcnkge1xuICAgIGxldCBxOiBTZWFyY2hRdWVyeTtcbiAgICBpZiAocXVlcnkgaW5zdGFuY2VvZiBTZWFyY2hRdWVyeSkge1xuICAgICAgcSA9IHF1ZXJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcU9iajtcbiAgICAgIC8qKlxuICAgICAgICogaWYgd2UgZ290IGEgc3RyaW5nLCB3ZSdsbCBhc3N1bWUgdGhhdCBpdCdzIGEgSlNPTlxuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBxT2JqID0gSlNPTi5wYXJzZShxdWVyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxT2JqID0gcXVlcnk7XG4gICAgICB9XG5cbiAgICAgIHEgPSBuZXcgU2VhcmNoUXVlcnkoKTtcbiAgICAgIHEudGVybSA9IHFPYmoudGVybTtcbiAgICAgIGlmIChxT2JqLmZpbHRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMocU9iai5maWx0ZXJzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgIHEuZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihcbiAgICAgICAgICAgICAgayxcbiAgICAgICAgICAgICAgcU9iai5maWx0ZXJzW2tdLm8sXG4gICAgICAgICAgICAgIHFPYmouZmlsdGVyc1trXS52MSxcbiAgICAgICAgICAgICAgcU9iai5maWx0ZXJzW2tdLnYyXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocU9iai50eXBlcykge1xuICAgICAgICBxT2JqLnR5cGVzLmZvckVhY2godCA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3lzdGVtLmdldE9iamVjdFR5cGUodCkpIHtcbiAgICAgICAgICAgIHEudHlwZXMucHVzaCh0aGlzLnN5c3RlbS5nZXRPYmplY3RUeXBlKHQpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcS50eXBlcy5wdXNoKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocU9iai5jb250ZXh0Zm9sZGVydHlwZXMpIHtcbiAgICAgICAgcU9iai5jb250ZXh0Zm9sZGVydHlwZXMuZm9yRWFjaCh0ID0+IHtcbiAgICAgICAgICBpZiAodCA9PT0gJ3N5c3Jvb3QnKSB7XG4gICAgICAgICAgICAvLyAnc3lzcm9vdCcgaXMgbm90IGEgcmVhbCBvYmplY3QgdHlwZSwgc28gd2UgaGF2ZSB0byBjcmVhdGUgYSBmYWtlIHR5cGUuXG4gICAgICAgICAgICBjb25zdCBzeXNyb290RmFrZU9iamVjdFR5cGUgPSBuZXcgT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICAgIGlkOiAnYScsXG4gICAgICAgICAgICAgIGZvbGRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgbmFtZTogJ3N5c3Jvb3QnLFxuICAgICAgICAgICAgICBxbmFtZTogJ3N5c3Jvb3QnLFxuICAgICAgICAgICAgICBsYWJlbDogJ3N5c3Jvb3QnLFxuICAgICAgICAgICAgICBpc2NvbnRleHRmb2xkZXI6IHRydWUsXG4gICAgICAgICAgICAgIGFic3RyYWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICAgIHNoYXJlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIG1pbmZpbGVzOiAwLFxuICAgICAgICAgICAgICBtYXhmaWxlczogMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxLmNvbnRleHRGb2xkZXJUeXBlcy5wdXNoKHN5c3Jvb3RGYWtlT2JqZWN0VHlwZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHEuY29udGV4dEZvbGRlclR5cGVzLnB1c2godGhpcy5zeXN0ZW0uZ2V0T2JqZWN0VHlwZSh0KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHEuZmllbGRzID0gcU9iai5maWVsZHM7XG4gICAgICBpZiAocU9iai5vcHRpb25zKSB7XG4gICAgICAgIHEuc3VnZ2VzdCA9IHFPYmoub3B0aW9ucy5zdWdnZXN0IHx8IGZhbHNlO1xuICAgICAgICBxLmV4cGVydE1vZGUgPSBxT2JqLm9wdGlvbnMuZXhwZXJ0bW9kZSB8fCBmYWxzZTtcbiAgICAgICAgcS5zY29wZSA9IHFPYmoub3B0aW9ucy5zY29wZTtcbiAgICAgICAgLy8gXCJ8fFwiIGRvZXMgbm90IHdvcmsgZm9yIHJlY29nbml6aW5nIFwiZmFsc2VcIiB3aXRoIHByaW9yaXR5IG92ZXIgXCJkZWZhdWx0IHRydWVcIlxuICAgICAgICBxLnJlc29sdmVSZWZlcmVuY2UgPSAocU9iai5vcHRpb25zLnJlc29sdmVyZWZlcmVuY2UgIT09IG51bGwpID8gcU9iai5vcHRpb25zLnJlc29sdmVyZWZlcmVuY2UgOlxuICAgICAgICAgICggcU9iai5vcHRpb25zLnJlc29sdmVSZWZlcmVuY2UgIT09IG51bGwgPyBxT2JqLm9wdGlvbnMucmVzb2x2ZVJlZmVyZW5jZSA6IHRydWUpO1xuICAgICAgICAvLyB3aXRoQ29udGV4dCB3YXMgb2xkIGFuZCBcIndyb25nXCIgbmFtZSBvZiBwYXJhbWV0ZXJcbiAgICAgICAgcS53aXRoQ29udGV4dCA9IHFPYmoub3B0aW9ucy53aXRoY29udGV4dCB8fCBxT2JqLm9wdGlvbnMud2l0aENvbnRleHQgfHwgZmFsc2U7XG4gICAgICAgIHEuc2VhcmNoTW9kZSA9XG4gICAgICAgICAgcU9iai5vcHRpb25zLnNlYXJjaG1vZGUgfHwgU2VhcmNoUXVlcnkuREVGQVVMVF9TRUFSQ0hfTU9ERTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIGJlIGV4ZWN1dGVkXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8U2VhcmNoUmVzdWx0PlxuICAgKi9cbiAgcHVibGljIHNlYXJjaChxdWVyeTogU2VhcmNoUXVlcnkpOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVRdWVyeShxdWVyeS5nZXRRdWVyeUpzb24oKSkucGlwZShcbiAgICAgIG1hcChyZXMgPT4gdGhpcy5jcmVhdGVSZXN1bHRGcm9tUmVzcG9uc2UocmVzKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIFNlYXJjaCByZXN1bHRzXG4gICAqL1xuICBwdWJsaWMgZ2V0U2VhcmNoU3RhdGUocXVlcnk6IGFueSk6IE9ic2VydmFibGU8U2VhcmNoU3RhdGU+IHtcblxuICAgIGlmIChxdWVyeSBpbnN0YW5jZW9mIFNlYXJjaFF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IHF1ZXJ5LmdldFF1ZXJ5SnNvbigpO1xuICAgIH1cbiAgICBkZWxldGUgcXVlcnkubmFtZTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUXVlcnkocXVlcnksIHRydWUpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gbmV3IFNlYXJjaFN0YXRlKCk7XG4gICAgICAgIHN0YXRlLmNvdW50ID0gcmVzLmhpdHMudG90YWw7XG4gICAgICAgIE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2VQYXJhbSA9IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdO1xuICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9ucyA9IHJlcy5hZ2dyZWdhdGlvbnNbYmFzZVBhcmFtXVxuICAgICAgICAgICAgPyByZXMuYWdncmVnYXRpb25zW2Jhc2VQYXJhbV0uYnVja2V0c1xuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICBsZXQgYWdncyA9IHt9O1xuICAgICAgICAgIGFnZ3JlZ2F0aW9ucy5mb3JFYWNoKGFnZ3JlZ2F0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCB7a2V5LCBkb2NfY291bnQsIGNvbnRleHRmb2xkZXJ0eXBlfSA9IGFnZ3JlZ2F0aW9uO1xuICAgICAgICAgICAgaWYgKGJhc2VQYXJhbSA9PT0gJ2ZpbGVzaXplJykge1xuICAgICAgICAgICAgICBkb2NfY291bnQgPSBhZ2dyZWdhdGlvblsnZmlsdGVyI2RvY3VtZW50cyddLmRvY19jb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLmFkZEFnZ3JlZ2F0aW9ucyhiYXNlUGFyYW0sIGtleSwgZG9jX2NvdW50LCBhZ2dyZWdhdGlvbik7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHR5cGUgYWdncmVnYXRpb25zIG1heSBhbHNvIGNvbnRhaW4gYnVja2V0cyBmb3IgdGhlaXIgY29udGV4dCB0eXBlc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGJhc2VQYXJhbSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRSAmJlxuICAgICAgICAgICAgICBjb250ZXh0Zm9sZGVydHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlLmJ1Y2tldHMuZm9yRWFjaChjdHhBZ2cgPT4ge1xuICAgICAgICAgICAgICAgIGFnZ3NbY3R4QWdnLmtleV0gPSBhZ2dzW2N0eEFnZy5rZXldID8gYWdnc1tjdHhBZ2cua2V5XSArIGN0eEFnZy5kb2NfY291bnQgOiBjdHhBZ2cuZG9jX2NvdW50O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoYmFzZVBhcmFtID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhhZ2dzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgc3RhdGUuYWRkQWdncmVnYXRpb25zKFxuICAgICAgICAgICAgICAgICdjb250ZXh0dHlwZScsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGFnZ3Nba2V5XVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIHBhcnQgb2YgYSBxdWVyaWVzIHJlc3VsdC4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgcGFnaW5nIG9mIHJlc3VsdHNcbiAgICogb3IgbGF6eSBsb2FkaW5nIGxhcmdlIHJlc3VsdHMuXG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gYmUgZXhlY3V0ZWRcbiAgICogQHBhcmFtIGZyb21JbmRleCBUaGUgaW5kZXggZnJvbSB3aGVyZSB0byBmZXRjaCByZXN1bHRzXG4gICAqIEBwYXJhbSBjaHVua1NpemUgU2l6ZSBvZiB0aGUgY2h1bmsgdG8gYmUgZmV0Y2hlZFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdD5cbiAgICovXG4gIHB1YmxpYyBnZXRDaHVua2VkUmVzdWx0KFxuICAgIHF1ZXJ5OiBTZWFyY2hRdWVyeSxcbiAgICBmcm9tSW5kZXg6IG51bWJlcixcbiAgICBjaHVua1NpemU6IG51bWJlclxuICApOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdD4ge1xuICAgIGNvbnN0IHEgPSBxdWVyeS5nZXRRdWVyeUpzb24oKTtcblxuICAgIHEuZnJvbSA9IGZyb21JbmRleDtcbiAgICBjb25zdCBxdWVyeVVyaSA9IGBzZWFyY2ghY2h1bms6JHtjaHVua1NpemV9ISR7SlNPTi5zdHJpbmdpZnkocSl9YDtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldFZpYVRlbXBDYWNoZShxdWVyeVVyaSwgKCkgPT5cbiAgICAgIHRoaXMuZXhlY3V0ZVF1ZXJ5KHEsIGZhbHNlLCBjaHVua1NpemUpLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gdGhpcy5jcmVhdGVSZXN1bHRGcm9tUmVzcG9uc2UocmVzKSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgcXVlcnlcbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5SnNvbiBUaGUgcXVlcnkgSlNPTiB0byBiZSBleGVjdXRlZFxuICAgKiBAcGFyYW0gYWdncmVnYXRlU2VhcmNoIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBleGVjdXRlIGFuIGFnZ3JlZ2F0aW9uIHNlYXJjaCAobm8gYWN0dWFsIHJlc3VsdHMpXG4gICAqIEBwYXJhbSBjdXN0b21TaXplIEN1c3RvbSBudW1iZXIgb2YgcmVzdWx0cyB0byBiZSBmZXRjaGVkLCBpZiBub3Qgc2V0IHRoZSBkZWZhdWx0IHNpemUgd2lsbCBiZSBhcHBsaWVkXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8YW55PlxuICAgKi9cbiAgcHVibGljIGV4ZWN1dGVRdWVyeShcbiAgICBxdWVyeUpzb246IGFueSxcbiAgICBhZ2dyZWdhdGVTZWFyY2g/OiBib29sZWFuLFxuICAgIGN1c3RvbVNpemU/OiBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgdXJpOiBzdHJpbmc7XG4gICAgbGV0IHF1ZXJ5ID0gcXVlcnlKc29uO1xuICAgIGlmIChhZ2dyZWdhdGVTZWFyY2gpIHtcbiAgICAgIHVyaSA9IGAvYWdncmVnYXRlYDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2l6ZSA9IGN1c3RvbVNpemUgfHwgdGhpcy5jb25maWcuZ2V0UmF3KCdzZWFyY2gubGltaXQnKTtcbiAgICAgIHVyaSA9IGAvP3NpemU9JHtzaXplfWA7XG4gICAgfVxuICAgIHF1ZXJ5Lm9wdGlvbnMgPSB7Li4ucXVlcnkub3B0aW9ucywgdHJhY2t0b3RhbGhpdHM6IHRoaXMuY29uZmlnLmdldFJhdygnc2VhcmNoLnRyYWNrVG90YWxIaXRzJykgfHwgZmFsc2UsIHRpbWV6b25lOiBVdGlscy5nZXRUaW1lem9uZU9mZnNldCgpfTtcblxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZ2V0VmlhVGVtcENhY2hlKHVyaSArIEpTT04uc3RyaW5naWZ5KHF1ZXJ5KSwgKCkgPT4gdGhpcy5iYWNrZW5kLnBvc3QodXJpLCBxdWVyeSwgdGhpcy5iYWNrZW5kLmdldFNlYXJjaEJhc2UoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkcyBhIGNzdi1maWxlIG9mIHRoZSByZXN1bHRzIG9mIGEgZ2l2ZW4gc2VhcmNoLXF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeUpzb24gVGhlIHF1ZXJ5IEpTT04gdG8gYmUgZXhlY3V0ZWRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBwdWJsaWMgZG93bmxvYWRDc3ZGcm9tUXVlcnkocXVlcnlKc29uOiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmRcbiAgICAgIC5wb3N0KCcvZXhwb3J0JywgcXVlcnlKc29uLCB0aGlzLmJhY2tlbmQuZ2V0U2VhcmNoQmFzZSgpLCB7XG4gICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtOCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIHRoaXMuZ2V0RmlsZU5hbWVGcm9tSHR0cFJlc3BvbnNlKHJlcyksIHthdXRvQm9tOiB0cnVlfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlTmFtZUZyb21IdHRwUmVzcG9uc2UocmVzOiBIdHRwUmVzcG9uc2U8YW55Pikge1xuICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciA9XG4gICAgICByZXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKSB8fCAnJztcbiAgICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uSGVhZGVyLnNwbGl0KCdmaWxlbmFtZT0nKVsxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHNlYXJjaCBmb3IgZmV0Y2hpbmcgc3VnZ2VzdGlvbnMgb24gYSBnaXZlbiBzZWFyY2ggdGVybS5cbiAgICpcbiAgICogQHBhcmFtIHRlcm0gVGhlIHNlYXJjaCB0ZXJtXG4gICAqIEByZXR1cm5cbiAgICovXG4gIHB1YmxpYyBhdXRvY29tcGxldGUodGVybTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5nZXRKc29uKFxuICAgICAgYC9hdXRvY29tcGxldGU/cHJlZml4PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRlcm0pfWAsXG4gICAgICB0aGlzLmJhY2tlbmQuZ2V0U2VhcmNoQmFzZSgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGEgU2VhcmNoRmlsdGVyIGZvciBhIGZvcm0gZWxlbWVudC4gQmFzZWQgb24gdGhlIHRhcmdldCB0eXBlc1xuICAgKiBpdCdsbCBjcmVhdGUgdGhlIHJpZ2h0IGtpbmQgb2YgZmlsdGVyIHRoYXQgeW91IHRoZW4gY2FuIGFkZCB0byBhIFNlYXJjaFF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXRUeXBlc1xuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnROYW1lXG4gICAqIEBwYXJhbSBlbGVtZW50VmFsdWVcbiAgICogQHJldHVybnMgU2VhcmNoRmlsdGVyW10gQW4gYXJyYXkgb2Ygc2VhcmNoIGZpbHRlcnMgbW9zdCBvZiB0aGUgdGltZSBjb250YWluaW5nIG9ubHkgb25lIGVudHJ5LCBidXRcbiAgICogZm9yIHRhYmxlIGVsZW1lbnRzIHRoaXMgY291bGQgYmUgbW9yZVxuICAgKi9cbiAgcHVibGljIGdldFNlYXJjaEZpbHRlcihcbiAgICB0YXJnZXRUeXBlczogT2JqZWN0VHlwZVtdLFxuICAgIGZvcm1FbGVtZW50TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRWYWx1ZTogYW55XG4gICk6IFNlYXJjaEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXI6IFNlYXJjaEZpbHRlcltdID0gW107XG4gICAgY29uc3QgZmlsdGVyVHlwZTogU2VhcmNoRmlsdGVyVHlwZSA9IHRoaXMuaWRlbnRpZnlTZWFyY2hGaWx0ZXIoXG4gICAgICB0YXJnZXRUeXBlcyxcbiAgICAgIGZvcm1FbGVtZW50TmFtZVxuICAgICk7XG4gICAgY29uc3QgZm9ybUVsZW1lbnQgPSB0YXJnZXRUeXBlc1swXS5lbGVtZW50cy5maW5kKGVsID0+IGVsLnFuYW1lID09PSBmb3JtRWxlbWVudE5hbWUpO1xuXG4gICAgaWYgKGVsZW1lbnRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoZm9ybUVsZW1lbnROYW1lLCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUwsIG51bGwpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZm9ybUVsZW1lbnQgJiYgZm9ybUVsZW1lbnQuY2xhc3NpZmljYXRpb24gPT09ICdwYXRoJykge1xuICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgZm9ybUVsZW1lbnROYW1lLFxuICAgICAgICAgIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5NQVRDSCxcbiAgICAgICAgICBlbGVtZW50VmFsdWVcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnRWYWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgIC8qKlxuICAgICAgICogY3JlYXRlIGZpbHRlciBmb3IgZWxlbWVudHMgdGhhdCBzdXBwb3J0IHJhbmdlcyBsaWtlIERBVEVUSU1FIGFuZCBOVU1CRVJcbiAgICAgICAqL1xuICAgICAgaWYgKFxuICAgICAgICBlbGVtZW50VmFsdWUuZmlyc3RWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICBlbGVtZW50VmFsdWUuZmlyc3RWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihcbiAgICAgICAgICAgIGZvcm1FbGVtZW50TmFtZSxcbiAgICAgICAgICAgIGVsZW1lbnRWYWx1ZS5vcGVyYXRvcixcbiAgICAgICAgICAgIGVsZW1lbnRWYWx1ZS5maXJzdFZhbHVlLFxuICAgICAgICAgICAgZWxlbWVudFZhbHVlLnNlY29uZFZhbHVlLFxuICAgICAgICAgICAgZmlsdGVyVHlwZS5kYXRldGltZSA/IHt0aW1lOiBmaWx0ZXJUeXBlLndpdGh0aW1lfSA6IHVuZGVmaW5lZFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChmaWx0ZXJUeXBlLm11bHRpc2VsZWN0IHx8IEFycmF5LmlzQXJyYXkoZWxlbWVudFZhbHVlKSkgJiYgIWZpbHRlclR5cGUudGFibGUpIHtcbiAgICAgIC8qKlxuICAgICAgICogY3JlYXRlIGZpbHRlciBmb3IgbXVsdGlzZWxlY3QgZWxlbWVudHMgbGlrZSBDT0RFU1lTVEVNIGFuZCBPUkdBTklaQVRJT05cbiAgICAgICAqL1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudFZhbHVlKSAmJiBlbGVtZW50VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgICBmb3JtRWxlbWVudE5hbWUsXG4gICAgICAgICAgICBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU4sXG4gICAgICAgICAgICBlbGVtZW50VmFsdWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWx0ZXJUeXBlLnRhYmxlKSB7XG4gICAgICAvKipcbiAgICAgICAqIGNyZWF0ZSBmaWx0ZXIocykgZm9yIHRhYmxlIGVsZW1lbnRzXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHF1ZXJ5Um93ID0gZWxlbWVudFZhbHVlWzBdO1xuICAgICAgT2JqZWN0LmtleXMocXVlcnlSb3cpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZihxdWVyeVJvd1trZXldICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGAke2Zvcm1FbGVtZW50TmFtZX0uJHtrZXl9YDtcbiAgICAgICAgICBpZiAocXVlcnlSb3dba2V5XSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgICAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICBuZXcgU2VhcmNoRmlsdGVyKFxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgICAgICAgICAgICBxdWVyeVJvd1trZXldLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Um93W2tleV0uZmlyc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICBxdWVyeVJvd1trZXldLnNlY29uZFZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICBuZXcgU2VhcmNoRmlsdGVyKFxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHF1ZXJ5Um93W2tleV0pID8gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOIDogU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Um93W2tleV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKipcbiAgICAgICAqIGRlZmF1bHQgd2lsbCB1c2UgZXF1YWxpdHkgb3BlcmF0b3JcbiAgICAgICAqL1xuICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgZm9ybUVsZW1lbnROYW1lLFxuICAgICAgICAgIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTCxcbiAgICAgICAgICBlbGVtZW50VmFsdWVcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBpZGVudGlmaWVzIGZvcm0gZWxlbWVudHMgdGhhdCBhcmUgZW5hYmxlZCB0byBjb250YWluIG11bHRpcGxlIHZhbHVlc1xuICAgKiB0cnkgdG8gZmluZCB0aGUgZm9ybSBlbGVtZW50IGluc2lkZSBvZiB0aGUgcHJvdmlkZWQgb2JqZWN0IHR5cGVzIHRvIGdldCBpdHMgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZVtdIHRhcmdldFR5cGVzXG4gICAqIEBwYXJhbSBzdHJpbmcgZm9ybUVsZW1lbnROYW1lXG4gICAqIEByZXR1cm4gU2VhcmNoRmlsdGVyVHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBpZGVudGlmeVNlYXJjaEZpbHRlcihcbiAgICB0YXJnZXRUeXBlczogT2JqZWN0VHlwZVtdLFxuICAgIGZvcm1FbGVtZW50TmFtZTogc3RyaW5nXG4gICk6IFNlYXJjaEZpbHRlclR5cGUge1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKCFtYXRjaCAmJiBpIDwgdGFyZ2V0VHlwZXMubGVuZ3RoKSB7XG4gICAgICBtYXRjaCA9IHRhcmdldFR5cGVzW2ldLmVsZW1lbnRzLmZpbmQoXG4gICAgICAgIGVsZW1lbnQgPT4gZWxlbWVudC5xbmFtZSA9PT0gZm9ybUVsZW1lbnROYW1lXG4gICAgICApO1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtdWx0aXNlbGVjdDogdGhpcy5pc011bHRpc2VsZWN0U2VhcmNoRmlsdGVyKG1hdGNoKSxcbiAgICAgIHRhYmxlOiBtYXRjaCAmJiBtYXRjaC50eXBlID09PSAnVEFCTEUnLFxuICAgICAgZGF0ZXRpbWU6IG1hdGNoICYmIG1hdGNoLnR5cGUgPT09ICdEQVRFVElNRScsXG4gICAgICB3aXRodGltZTogbWF0Y2ggJiYgbWF0Y2gud2l0aHRpbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGlkZW50aWZpZXMgZm9ybSBlbGVtZW50cyB0aGF0IGFyZSBlbmFibGVkIHRvIGNvbnRhaW4gbXVsdGlwbGUgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtRWxlbWVudFxuICAgKiBAcmV0dXJuIGJvb2xlYW5cbiAgICovXG4gIHByaXZhdGUgaXNNdWx0aXNlbGVjdFNlYXJjaEZpbHRlcihmb3JtRWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGZvcm1FbGVtZW50ICYmXG4gICAgICAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ09SR0FOSVpBVElPTicgfHxcbiAgICAgICAgZm9ybUVsZW1lbnQudHlwZSA9PT0gJ0NPREVTWVNURU0nIHx8XG4gICAgICAgIC8vIC4uLlxuICAgICAgICAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1NUUklORycgJiZcbiAgICAgICAgICBmb3JtRWxlbWVudC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3NlbGVjdG9yJykgfHxcbiAgICAgICAgLy8gbXVsdGlzZWxlY3QgcmVmZXJlbmNlIGZpZWxkc1xuICAgICAgICAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1NUUklORycgJiYgZm9ybUVsZW1lbnQubXVsdGlzZWxlY3QpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFNlYXJjaFJlc3VsdCBmcm9tIHRoZSByZXNwb25zZSBzZW50IGJ5IHRoZSBzZXJ2ZXJcbiAgICpcbiAgICogQHBhcmFtIGJhY2tlbmRSZXNwb25zZSBTZXJ2ZXIgcmVzcG9uc2VcbiAgICogQHJldHVyblRoZSBTZWFyY2hSZXN1bHQgU2VhcmNoUmVzdWx0IG9iamVjdCBjcmVhdGVkIGZyb20gdGhlIHNlcnZlciByZXNwb25zZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZVJlc3VsdEZyb21SZXNwb25zZShiYWNrZW5kUmVzcG9uc2UpOiBTZWFyY2hSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZWFyY2hSZXN1bHQoKTtcbiAgICByZXN1bHQuc3VnZ2VzdHMgPSBiYWNrZW5kUmVzcG9uc2Uuc3VnZ2VzdDtcbiAgICByZXN1bHQuZmllbGRzID0gYmFja2VuZFJlc3BvbnNlLmNvbmZpZztcblxuICAgIC8qKlxuICAgICAqIHVzZSBoaXRzIF9pZCBmaWVsZCBhcyBpZCBwcm9wZXJ0eSwgYmVjYXVzZSBvdGhlcndpc2UgZW1wdHkgcmVzdWx0IGhpdHMgd291bGQgbm90IGNvbnRhaW4gYW4gaWRcbiAgICAgKi9cbiAgICBjb25zdCBoaXRzID0gYmFja2VuZFJlc3BvbnNlLmhpdHMuaGl0cy5tYXAoaCA9PiAoe1xuICAgICAgLi4uaC5fc291cmNlLFxuICAgICAgaWQ6IGguX2lkLFxuICAgICAgLi4uKGguc25pcHBldHMgJiYge3NuaXBwZXRzOiBoLnNuaXBwZXRzfSksXG4gICAgICAvLyBoYXZpbmcgcmVxdWVzdGVkIGEgcmVzb2x2ZWQgcmVmZXJlbmNlIChvcHRpb25zKSB3ZSBhbHNvIHBhc3MgYF9yZWZlcmVuY2VgIGluIHRoZSByZXN1bHQgaXRlbVxuICAgICAgLi4uKGgucmVmZXJlbmNlcyAmJiB7X3JlZmVyZW5jZXM6IGgucmVmZXJlbmNlc30pLFxuICAgICAgLi4uKGguY29udGV4dCAmJiB7Y29udGV4dDogaC5jb250ZXh0fSlcbiAgICB9KSk7XG5cbiAgICByZXN1bHQuY291bnQgPSBiYWNrZW5kUmVzcG9uc2UuaGl0cy50b3RhbDtcbiAgICByZXN1bHQuaGl0cyA9IGhpdHMgfHwgW107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgUmVzdWwgdEZpZWxkIERlZmluaXRpb24gQ29uZmlnXG4gICAqXG4gICAqIEBwYXJhbSBTZWFyY2hRdWVyeSBxdWVyeVxuICAgKiBAcmV0dXJuICh7dHlwZTogT2JqZWN0VHlwZTsgY29udGV4dFR5cGU6IE9iamVjdFR5cGV9KVxuICAgKi9cbiAgZ2V0UmVzdWx0RmllbGREZWZpbml0aW9uQ29uZmlnKHF1ZXJ5OiBTZWFyY2hRdWVyeSkge1xuICAgIGNvbnN0IHR5cGUgPSAocXVlcnkudHlwZXMgfHwgW10pLmxlbmd0aCA9PT0gMSA/IHF1ZXJ5LnR5cGVzWzBdIDogbnVsbDtcbiAgICBjb25zdCBjb250ZXh0VHlwZSA9XG4gICAgICAocXVlcnkuY29udGV4dEZvbGRlclR5cGVzIHx8IFtdKS5sZW5ndGggPT09IDFcbiAgICAgICAgPyBxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF1cbiAgICAgICAgOiBudWxsO1xuICAgIHJldHVybiB7dHlwZSwgY29udGV4dFR5cGV9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQ29uZmlnVHlwZU5hbWVzKFxuICAgIHR5cGU6IE9iamVjdFR5cGUgfCBudWxsLFxuICAgIGNvbnRleHRUeXBlOiBPYmplY3RUeXBlIHwgbnVsbFxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZU5hbWU6IHR5cGUgPyB0eXBlLnFuYW1lIDogJ3N5c29iamVjdCcsXG4gICAgICBjb250ZXh0VHlwZU5hbWU6IHR5cGUgJiYgY29udGV4dFR5cGUgPyBjb250ZXh0VHlwZS5xbmFtZSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcmVzdWx0IGZpZWxkIGRlZmluaXRpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHR5cGVcbiAgICogVVNFUjogKGRlZmF1bHQpIHRoZSByZXN1bHQgbGlzdCBjb25maWd1cmF0aW9uIHNhdmVkIGJ5IHRoZSBjdXJyZW50IHVzZXJcbiAgICogREVGQVVMVDogdGhlIGRlZmF1bHQgcmVzdWx0IGxpc3QgY29uZmlndXJhdGlvbiAoYWxzbyByZXR1cm5lZCB3aGVuIHRoZXJlIGlzIG5vIHVzZXIgY29uZmlndXJhdGlvbilcbiAgICogQUxMOiBhbGwgYXZhaWxhYmxlIHJlc3VsdCBmaWVsZHMgZm9yIHRoZSBnaXZlbiB0eXBlIChhbmQgY29udGV4dClcbiAgICpcbiAgICogQHBhcmFtIE9iamVjdFR5cGUgfCBudWxsIHR5cGUgVGhlIG9iamVjdCB0eXBlXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlIHwgbnVsbCBjb250ZXh0VHlwZSBPYmplY3QgdHlwZSB0YXJnZXQgdHlwZXMgYWxsb3dlZCBjb250ZXh0IHR5cGVcbiAgICogQHBhcmFtIG1vZGUgVGhlIHJlc3VsdCBsaXN0cyBjb25maWd1cmF0aW9uIG1vZGU6XG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxGaWVsZERlZmluaXRpb24+XG4gICAqL1xuICBmZXRjaFJlc3VsdEZpZWxkRGVmaW5pdGlvbihcbiAgICB0eXBlOiBPYmplY3RUeXBlIHwgbnVsbCxcbiAgICBjb250ZXh0VHlwZTogT2JqZWN0VHlwZSB8IG51bGwsXG4gICAgbW9kZVxuICApIHtcbiAgICBjb25zdCB7dHlwZU5hbWUsIGNvbnRleHRUeXBlTmFtZX0gPSB0aGlzLnJlc29sdmVDb25maWdUeXBlTmFtZXMoXG4gICAgICB0eXBlLFxuICAgICAgY29udGV4dFR5cGVcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IFV0aWxzLmJ1aWxkVXJpKGAvdXNlci9jb25maWcvcmVzdWx0LyR7dHlwZU5hbWV9YCwge1xuICAgICAgY29udGV4dHR5cGU6IGNvbnRleHRUeXBlTmFtZSxcbiAgICAgIG1vZGVcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kXG4gICAgICAuZ2V0SnNvbih1cmwpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChyZXM6IGFueSkgPT5cbiAgICAgICAgICAgIG5ldyBGaWVsZERlZmluaXRpb24oXG4gICAgICAgICAgICAgIHJlcy5lbGVtZW50cyxcbiAgICAgICAgICAgICAgcmVzLnNvcnRvcmRlcixcbiAgICAgICAgICAgICAgcmVzLmdyb3Vwb3JkZXIsXG4gICAgICAgICAgICAgIHJlcy5waW5uZWQsXG4gICAgICAgICAgICAgIHJlcy5hbGlnbm1lbnR4LFxuICAgICAgICAgICAgICByZXMubW9kZVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgY29sdW1uIGRlZmluaXRpb24gYXMgcmVzdWx0IG9yIGNvbW1vbiByZXN1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlIHwgbnVsbCB0eXBlIFRoZSBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZSB8IG51bGwgY29udGV4dFR5cGUgT2JqZWN0IHR5cGUgdGFyZ2V0IHR5cGVzIGFsbG93ZWQgY29udGV4dCB0eXBlXG4gICAqIEBwYXJhbSBGaWVsZERlZmluaXRpb24gZGF0YSBUaGUgcmVzdWx0IGxpc3QgY29uZmlndXJhdGlvbiB0byBiZSBwZXJzaXN0ZWRcbiAgICogQHBhcmFtIGJvb2xlYW4gY29tbW9uIEZsYWcgZW5hYmxlcyB0byBzZXQgY29uZmlnIGFzIGRlZmF1bHQgLyBjb21tb24gcmVzdWx0XG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBzYXZlUmVzdWx0RmllbGREZWZpbml0aW9uKFxuICAgIHR5cGU6IE9iamVjdFR5cGUgfCBudWxsLFxuICAgIGNvbnRleHRUeXBlOiBPYmplY3RUeXBlIHwgbnVsbCxcbiAgICBkYXRhOiBGaWVsZERlZmluaXRpb24sXG4gICAgY29tbW9uID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgYmFzZVVyaSA9IGNvbW1vblxuICAgICAgPyAnL3VzZXIvY29uZmlnL2NvbW1vbnJlc3VsdC8nXG4gICAgICA6ICcvdXNlci9jb25maWcvcmVzdWx0Lyc7XG4gICAgY29uc3Qge3R5cGVOYW1lLCBjb250ZXh0VHlwZU5hbWV9ID0gdGhpcy5yZXNvbHZlQ29uZmlnVHlwZU5hbWVzKFxuICAgICAgdHlwZSxcbiAgICAgIGNvbnRleHRUeXBlXG4gICAgKTtcbiAgICBjb25zdCB1cmwgPSBVdGlscy5idWlsZFVyaShiYXNlVXJpICsgdHlwZU5hbWUsIHtcbiAgICAgIGNvbnRleHR0eXBlOiBjb250ZXh0VHlwZU5hbWVcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLnBvc3QodXJsLCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY29sdW1uIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlIHwgbnVsbCB0eXBlIFRoZSBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZSB8IG51bGwgY29udGV4dFR5cGUgT2JqZWN0IHR5cGUgdGFyZ2V0IHR5cGVzIGFsbG93ZWQgY29udGV4dCB0eXBlXG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICByZW1vdmVSZXN1bHRGaWVsZERlZmluaXRpb24oXG4gICAgdHlwZTogT2JqZWN0VHlwZSB8IG51bGwsXG4gICAgY29udGV4dFR5cGU6IE9iamVjdFR5cGUgfCBudWxsXG4gICkge1xuICAgIGNvbnN0IHt0eXBlTmFtZSwgY29udGV4dFR5cGVOYW1lfSA9IHRoaXMucmVzb2x2ZUNvbmZpZ1R5cGVOYW1lcyhcbiAgICAgIHR5cGUsXG4gICAgICBjb250ZXh0VHlwZVxuICAgICk7XG4gICAgY29uc3QgdXJsID0gVXRpbHMuYnVpbGRVcmkoYC91c2VyL2NvbmZpZy9yZXN1bHQvJHt0eXBlTmFtZX1gLCB7XG4gICAgICBjb250ZXh0dHlwZTogY29udGV4dFR5cGVOYW1lXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5kZWwodXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSB0byBiZSBhZGRlZCB0byBhIGZvcm0gZWxlbWVudCBieSBleHRyYWN0aW5nIGl0IGZyb20gYVxuICAgKiBzZWFyY2ggZmlsdGVyLiBUaGUga2luZCBvZiB2YWx1ZSBkaWZmZXJzIGJhc2VkIG9uIHRoZSBmb3JtIGVsZW1lbnRzIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0byBleHRyYWN0IHZhbHVlIGZyb21cbiAgICogQHBhcmFtIGZvcm1FbGVtZW50VHlwZSBGb3JtIGVsZW1lbnRzIHR5cGUgKCdTVFJJTkcnLCAnREFURScsICdDT0RFU1lTVEVNJywgLi4uKVxuICAgKiBAcmV0dXJucyB0aGUgZXh0cmFjdGVkIHZhbHVlXG4gICAqL1xuICBmaWx0ZXJUb0VsZW1lbnRWYWx1ZShmaWx0ZXI6IFNlYXJjaEZpbHRlciwgZm9ybUVsZW1lbnRUeXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgLy8gdHlwZXMgdGhhdCBzdXBwb3J0IHJhbmdlc1xuICAgICAgaWYgKChmb3JtRWxlbWVudFR5cGUgPT09ICdOVU1CRVInIHx8IGZvcm1FbGVtZW50VHlwZSA9PT0gJ0RBVEVUSU1FJykgJiYgZmlsdGVyLmZpcnN0VmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgUmFuZ2VWYWx1ZShcbiAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IsXG4gICAgICAgICAgZmlsdGVyLmZpcnN0VmFsdWUsXG4gICAgICAgICAgZmlsdGVyLnNlY29uZFZhbHVlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGZpbHRlci5maXJzdFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRhYmxlIHZhbHVlIGJ5IGV4dHJhY3RpbmcgdGhlIGRhdGEgZnJvbSB0aGUgY29ycmVzcG9uZGluZ1xuICAgKiBzZWFyY2ggZmlsdGVycy5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlcnMgVGhlIGZpbHRlcnMgdG8gZXh0cmFjdCB2YWx1ZSBmcm9tXG4gICAqIEBwYXJhbSB0YWJsZUVsZW1lbnRzIHRoZSBmb3JtIGVsZW1lbnRzIG9mIHRoZSB0YWJsZVxuICAgKiBAcmV0dXJucyB0aGUgdGFibGUgdmFsdWUgZXh0cmFjdGVkIGZyb20gYWxsIGZpbHRlcnNcbiAgICovXG4gIHRhYmxlRmlsdGVyc1RvRWxlbWVudFZhbHVlKGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdLCB0YWJsZUVsZW1lbnRzKXtcbiAgICBsZXQgdmFsdWUgPSB7fTtcbiAgICBmaWx0ZXJzLmZvckVhY2goZiA9PiB7XG4gICAgICBsZXQga2V5ID0gdGFibGVFbGVtZW50cy5maW5kKGUgPT4gZS5xbmFtZSA9PT0gZi5wcm9wZXJ0eSkubmFtZTtcbiAgICAgIGxldCB0eXBlID0gdGFibGVFbGVtZW50cy5maW5kKGUgPT4gZS5xbmFtZSA9PT0gZi5wcm9wZXJ0eSkudHlwZTtcbiAgICAgIHZhbHVlW2tleV0gPSB0aGlzLmZpbHRlclRvRWxlbWVudFZhbHVlKGYsIHR5cGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbdmFsdWVdO1xuICB9XG59XG4iXX0=
@@ -5323,6 +5323,7 @@ class SearchService {
5323
5323
  const aggregations = res.aggregations[baseParam]
5324
5324
  ? res.aggregations[baseParam].buckets
5325
5325
  : [];
5326
+ let aggs = {};
5326
5327
  aggregations.forEach(aggregation => {
5327
5328
  let { key, doc_count, contextfoldertype } = aggregation;
5328
5329
  if (baseParam === 'filesize') {
@@ -5335,10 +5336,15 @@ class SearchService {
5335
5336
  if (baseParam === SearchQuery.BASE_PARAMS.TYPE &&
5336
5337
  contextfoldertype) {
5337
5338
  contextfoldertype.buckets.forEach(ctxAgg => {
5338
- state.addAggregations('contexttype', ctxAgg.key, ctxAgg.doc_count, ctxAgg);
5339
+ aggs[ctxAgg.key] = aggs[ctxAgg.key] ? aggs[ctxAgg.key] + ctxAgg.doc_count : ctxAgg.doc_count;
5339
5340
  });
5340
5341
  }
5341
5342
  });
5343
+ if (baseParam === SearchQuery.BASE_PARAMS.TYPE) {
5344
+ Object.keys(aggs).forEach((key) => {
5345
+ state.addAggregations('contexttype', key, aggs[key]);
5346
+ });
5347
+ }
5342
5348
  });
5343
5349
  return state;
5344
5350
  }));