geonetwork-ui 2.6.0-dev.ceb4be4c1 → 2.6.0-dev.d1dbf336f

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 (69) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +8 -4
  2. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +5 -2
  3. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
  5. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +14 -5
  6. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  7. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +266 -11
  8. package/esm2022/libs/ui/search/src/index.mjs +2 -1
  9. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +19 -12
  10. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +3 -3
  11. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +10 -4
  12. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +42 -1
  13. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +24 -2
  14. package/esm2022/translations/de.json +28 -4
  15. package/esm2022/translations/en.json +28 -4
  16. package/esm2022/translations/es.json +27 -3
  17. package/esm2022/translations/fr.json +28 -4
  18. package/esm2022/translations/it.json +27 -3
  19. package/esm2022/translations/nl.json +27 -3
  20. package/esm2022/translations/pt.json +27 -3
  21. package/fesm2022/geonetwork-ui.mjs +604 -107
  22. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  23. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
  24. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  25. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
  26. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  27. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  28. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +4 -2
  29. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  30. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +1 -0
  31. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  32. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +48 -3
  33. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
  34. package/libs/ui/search/src/index.d.ts +1 -0
  35. package/libs/ui/search/src/index.d.ts.map +1 -1
  36. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +3 -3
  37. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  38. package/libs/ui/search/src/lib/ui-search.module.d.ts +2 -1
  39. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  40. package/libs/util/i18n/src/lib/i18n.constants.d.ts +1 -0
  41. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  42. package/libs/util/i18n/src/lib/language-codes.d.ts +23 -1
  43. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  46. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +13 -3
  47. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +5 -1
  48. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -3
  49. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -1
  50. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +16 -2
  51. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +1 -0
  52. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +117 -11
  53. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +316 -6
  54. package/src/libs/ui/search/src/index.ts +1 -0
  55. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +11 -3
  56. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +14 -11
  57. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +1 -1
  58. package/src/libs/ui/search/src/lib/ui-search.module.ts +3 -0
  59. package/src/libs/util/i18n/src/lib/i18n.constants.ts +42 -0
  60. package/src/libs/util/i18n/src/lib/language-codes.ts +23 -1
  61. package/tailwind.base.css +1 -1
  62. package/translations/de.json +28 -4
  63. package/translations/en.json +28 -4
  64. package/translations/es.json +27 -3
  65. package/translations/fr.json +28 -4
  66. package/translations/it.json +27 -3
  67. package/translations/nl.json +27 -3
  68. package/translations/pt.json +27 -3
  69. package/translations/sk.json +27 -3
@@ -3,11 +3,12 @@ import { Injectable } from '@angular/core';
3
3
  import { assertValidXml, findConverterForDocument, Gn4Converter, Iso19139Converter, } from '../../../../../../libs/api/metadata-converter/src';
4
4
  import { PublicationVersionError } from '../../../../../../libs/common/domain/src/lib/model/error';
5
5
  import { PlatformServiceInterface } from '../../../../../../libs/common/domain/src/lib/platform.service.interface';
6
- import { RecordsApiService, SearchApiService, } from '../../../../../../libs/data-access/gn4/src';
6
+ import { RecordsApiService, SearchApiService, LanguagesApiService, } from '../../../../../../libs/data-access/gn4/src';
7
7
  import { combineLatest, exhaustMap, forkJoin, from, of, Subject, switchMap, throwError, } from 'rxjs';
8
8
  import { catchError, map, tap } from 'rxjs/operators';
9
9
  import { lt } from 'semver';
10
10
  import { ElasticsearchService } from './elasticsearch';
11
+ import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "@angular/common/http";
13
14
  import * as i2 from "../../../../../../libs/data-access/gn4/src";
@@ -17,13 +18,14 @@ import * as i5 from "../../../../../../libs/common/domain/src/lib/platform.servi
17
18
  const minPublicationApiVersion = '4.2.5';
18
19
  const TEMPORARY_ID_PREFIX = 'TEMP-ID-';
19
20
  export class Gn4Repository {
20
- constructor(httpClient, gn4SearchApi, gn4SearchHelper, gn4Mapper, gn4RecordsApi, platformService) {
21
+ constructor(httpClient, gn4SearchApi, gn4SearchHelper, gn4Mapper, gn4RecordsApi, platformService, gn4LanguagesApi) {
21
22
  this.httpClient = httpClient;
22
23
  this.gn4SearchApi = gn4SearchApi;
23
24
  this.gn4SearchHelper = gn4SearchHelper;
24
25
  this.gn4Mapper = gn4Mapper;
25
26
  this.gn4RecordsApi = gn4RecordsApi;
26
27
  this.platformService = platformService;
28
+ this.gn4LanguagesApi = gn4LanguagesApi;
27
29
  this._draftsChanged = new Subject();
28
30
  this.draftsChanged$ = this._draftsChanged.asObservable();
29
31
  }
@@ -248,6 +250,13 @@ export class Gn4Repository {
248
250
  }));
249
251
  }));
250
252
  }
253
+ getApplicationLanguages() {
254
+ return this.gn4LanguagesApi
255
+ .getApplicationLanguages()
256
+ .pipe(map((languages) => languages
257
+ .map((lang) => LANG_3_TO_2_MAPPER[lang.id ?? ''])
258
+ .filter((code) => !!code)));
259
+ }
251
260
  getRecordAsXml(uniqueIdentifier) {
252
261
  return this.gn4RecordsApi
253
262
  .getRecordAs(uniqueIdentifier, undefined, false, undefined, undefined, undefined, 'application/xml', 'response', undefined, { httpHeaderAccept: 'text/xml,application/xml' } // this is to make sure that the response is parsed as text
@@ -288,10 +297,10 @@ export class Gn4Repository {
288
297
  removeRecordFromLocalStorage(recordId) {
289
298
  window.localStorage.removeItem(this.getLocalStorageKeyForRecord(recordId));
290
299
  }
291
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository, deps: [{ token: i1.HttpClient }, { token: i2.SearchApiService }, { token: i3.ElasticsearchService }, { token: i4.Gn4Converter }, { token: i2.RecordsApiService }, { token: i5.PlatformServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
300
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository, deps: [{ token: i1.HttpClient }, { token: i2.SearchApiService }, { token: i3.ElasticsearchService }, { token: i4.Gn4Converter }, { token: i2.RecordsApiService }, { token: i5.PlatformServiceInterface }, { token: i2.LanguagesApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
292
301
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository }); }
293
302
  }
294
303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4Repository, decorators: [{
295
304
  type: Injectable
296
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SearchApiService }, { type: i3.ElasticsearchService }, { type: i4.Gn4Converter }, { type: i2.RecordsApiService }, { type: i5.PlatformServiceInterface }] });
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2duNC1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBRVosaUJBQWlCLEdBQ2xCLE1BQU0sbURBQW1ELENBQUE7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUE7QUFlbEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUE7QUFFbEgsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FFakIsTUFBTSw0Q0FBNEMsQ0FBQTtBQUNuRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFVBQVUsRUFDVixRQUFRLEVBQ1IsSUFBSSxFQUVKLEVBQUUsRUFDRixPQUFPLEVBQ1AsU0FBUyxFQUNULFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQTtBQUNiLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUE7Ozs7Ozs7QUFFdEQsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUE7QUFFeEMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUE7QUFLdEMsTUFBTSxPQUFPLGFBQWE7SUFJeEIsWUFDVSxVQUFzQixFQUN0QixZQUE4QixFQUM5QixlQUFxQyxFQUNyQyxTQUF1QixFQUN2Qixh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QUMsQ0FBQTtJQUM1RSxDQUFDOytHQWpoQlUsYUFBYTttSEFBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgYXNzZXJ0VmFsaWRYbWwsXG4gIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudCxcbiAgR240Q29udmVydGVyLFxuICBHbjRTZWFyY2hSZXN1bHRzLFxuICBJc28xOTEzOUNvbnZlcnRlcixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYydcbmltcG9ydCB7IFB1YmxpY2F0aW9uVmVyc2lvbkVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvZXJyb3InXG5pbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBEYXRhc2V0RmVhdHVyZVR5cGUsXG4gIERhdGFzZXRGZWF0dXJlQ2F0YWxvZyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHtcbiAgQWdncmVnYXRpb25zLFxuICBBZ2dyZWdhdGlvbnNQYXJhbXMsXG4gIEZpZWxkRmlsdGVycyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvc2VhcmNoJ1xuaW1wb3J0IHtcbiAgU2VhcmNoUGFyYW1zLFxuICBTZWFyY2hSZXN1bHRzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gvc2VhcmNoLm1vZGVsJ1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcGxhdGZvcm0uc2VydmljZS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBSZWNvcmRzUmVwb3NpdG9yeUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL3JlcG9zaXRvcnkvcmVjb3Jkcy1yZXBvc2l0b3J5LmludGVyZmFjZSdcbmltcG9ydCB7XG4gIFJlY29yZHNBcGlTZXJ2aWNlLFxuICBTZWFyY2hBcGlTZXJ2aWNlLFxuICBGZWF0dXJlUmVzcG9uc2VBcGlNb2RlbCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWFjY2Vzcy9nbjQvc3JjJ1xuaW1wb3J0IHtcbiAgY29tYmluZUxhdGVzdCxcbiAgZXhoYXVzdE1hcCxcbiAgZm9ya0pvaW4sXG4gIGZyb20sXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgbHQgfSBmcm9tICdzZW12ZXInXG5pbXBvcnQgeyBFbGFzdGljc2VhcmNoU2VydmljZSB9IGZyb20gJy4vZWxhc3RpY3NlYXJjaCdcblxuY29uc3QgbWluUHVibGljYXRpb25BcGlWZXJzaW9uID0gJzQuMi41J1xuXG5jb25zdCBURU1QT1JBUllfSURfUFJFRklYID0gJ1RFTVAtSUQtJ1xuXG5leHBvcnQgdHlwZSBSZWNvcmRBc1htbCA9IHN0cmluZ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR240UmVwb3NpdG9yeSBpbXBsZW1lbnRzIFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlIHtcbiAgX2RyYWZ0c0NoYW5nZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpXG4gIGRyYWZ0c0NoYW5nZWQkID0gdGhpcy5fZHJhZnRzQ2hhbmdlZC5hc09ic2VydmFibGUoKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGduNFNlYXJjaEFwaTogU2VhcmNoQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGduNFNlYXJjaEhlbHBlcjogRWxhc3RpY3NlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnbjRNYXBwZXI6IEduNENvbnZlcnRlcixcbiAgICBwcml2YXRlIGduNFJlY29yZHNBcGk6IFJlY29yZHNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm1TZXJ2aWNlOiBQbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2VcbiAgKSB7fVxuXG4gIHNlYXJjaCh7XG4gICAgZmlsdGVycyxcbiAgICBmaWVsZHMsXG4gICAgb2Zmc2V0LFxuICAgIGxpbWl0LFxuICAgIHNvcnQsXG4gICAgZmlsdGVySWRzLFxuICAgIGZpbHRlckdlb21ldHJ5LFxuICB9OiBTZWFyY2hQYXJhbXMpOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdHM+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRTZWFyY2hSZXF1ZXN0Qm9keShcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZpbHRlcklkcyxcbiAgICAgICAgICAgIGZpbHRlckdlb21ldHJ5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PlxuICAgICAgICAgIHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmRzKHJlc3VsdHMuaGl0cy5oaXRzKS50aGVuKChyZWNvcmRzKSA9PiAoe1xuICAgICAgICAgICAgY291bnQ6IHJlc3VsdHMuaGl0cy50b3RhbD8udmFsdWUgfHwgMCxcbiAgICAgICAgICAgIHJlY29yZHMsXG4gICAgICAgICAgfSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGdldE1hdGNoZXNDb3VudChmaWx0ZXJzOiBGaWVsZEZpbHRlcnMpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ3JlY29yZHMtY291bnQnLFxuICAgICAgICBudWxsLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgLi4udGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0U2VhcmNoUmVxdWVzdEJvZHkoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmlsdGVyc1xuICAgICAgICAgICksXG4gICAgICAgICAgdHJhY2tfdG90YWxfaGl0czogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKG1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT4gcmVzdWx0cy5oaXRzLnRvdGFsPy52YWx1ZSB8fCAwKSlcbiAgfVxuXG4gIGdldFJlY29yZCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgWydmY2F0cycsICdoYXNzb3VyY2VzJ10sXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuZ240U2VhcmNoSGVscGVyLmdldE1ldGFkYXRhQnlJZHNQYXlsb2FkKFt1bmlxdWVJZGVudGlmaWVyXSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT4gcmVzdWx0cy5oaXRzLmhpdHNbMF0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHJlY29yZCkgPT5cbiAgICAgICAgICByZWNvcmQgPyB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkKHJlY29yZCkgOiBvZihudWxsKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBnZXRNdWx0aXBsZVJlY29yZHMoXG4gICAgdW5pcXVlSWRlbnRpZmllcnM6IHN0cmluZ1tdXG4gICk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0TWV0YWRhdGFCeUlkc1BheWxvYWQodW5pcXVlSWRlbnRpZmllcnMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+IHJlc3VsdHMuaGl0cy5oaXRzKSxcbiAgICAgICAgc3dpdGNoTWFwKChyZWNvcmRzKSA9PlxuICAgICAgICAgIHJlY29yZHMgJiYgcmVjb3Jkcy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmRzKHJlY29yZHMpXG4gICAgICAgICAgICA6IG9mKG51bGwpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgbWFwRW1iZWRkZWRGZWF0dXJlQ2F0YWxvZyhcbiAgICBmZWF0dXJlVHlwZXM6IEFycmF5PERhdGFzZXRGZWF0dXJlVHlwZT5cbiAgKTogRGF0YXNldEZlYXR1cmVDYXRhbG9nIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmVhdHVyZVR5cGVzOiBmZWF0dXJlVHlwZXMubWFwKChmZWF0dXJlVHlwZSkgPT4gKHtcbiAgICAgICAgbmFtZTogZmVhdHVyZVR5cGUudHlwZU5hbWUgfHwgJycsXG4gICAgICAgIGRlZmluaXRpb246IGZlYXR1cmVUeXBlLmRlZmluaXRpb24gfHwgJycsXG4gICAgICAgIGF0dHJpYnV0ZXM6IEFycmF5LmlzQXJyYXkoZmVhdHVyZVR5cGUuYXR0cmlidXRlVGFibGUpXG4gICAgICAgICAgPyBmZWF0dXJlVHlwZS5hdHRyaWJ1dGVUYWJsZS5tYXAoKGF0dHIpID0+ICh7XG4gICAgICAgICAgICAgIG5hbWU6IGF0dHIubmFtZSxcbiAgICAgICAgICAgICAgY29kZTogYXR0ci5jb2RlLFxuICAgICAgICAgICAgICB0aXRsZTogYXR0ci5kZWZpbml0aW9uLFxuICAgICAgICAgICAgICB0eXBlOiBhdHRyLnR5cGUsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6IFtdLFxuICAgICAgfSkpLFxuICAgIH1cbiAgfVxuICBnZXRGZWF0dXJlQ2F0YWxvZyhcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgdmlzaXRlZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCkgLy8gcHJldmVudCBsb29waW5nXG4gICk6IE9ic2VydmFibGU8RGF0YXNldEZlYXR1cmVDYXRhbG9nIHwgbnVsbD4ge1xuICAgIGlmIChcbiAgICAgIHJlY29yZC5leHRyYXM/LlsnZmVhdHVyZVR5cGVzJ10gJiZcbiAgICAgIEFycmF5LmlzQXJyYXkocmVjb3JkLmV4dHJhc1snZmVhdHVyZVR5cGVzJ10pICYmXG4gICAgICByZWNvcmQuZXh0cmFzWydmZWF0dXJlVHlwZXMnXS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5tYXBFbWJlZGRlZEZlYXR1cmVDYXRhbG9nKHJlY29yZC5leHRyYXNbJ2ZlYXR1cmVUeXBlcyddKSlcbiAgICB9XG5cbiAgICBjb25zdCBmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXIgPSByZWNvcmQuZXh0cmFzW1xuICAgICAgJ2ZlYXR1cmVDYXRhbG9nSWRlbnRpZmllcidcbiAgICBdIGFzIHN0cmluZ1xuICAgIGlmIChmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXIgJiYgIXZpc2l0ZWQuaGFzKGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllcikpIHtcbiAgICAgIHZpc2l0ZWQuYWRkKGZlYXR1cmVDYXRhbG9nSWRlbnRpZmllcilcbiAgICAgIHJldHVybiB0aGlzLmdldFJlY29yZChmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXIpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVjb3JkKSA9PlxuICAgICAgICAgIHJlY29yZCA/IHRoaXMuZ2V0RmVhdHVyZUNhdGFsb2cocmVjb3JkLCB2aXNpdGVkKSA6IG9mKG51bGwpXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbClcbiAgfVxuXG4gIGdldFNpbWlsYXJSZWNvcmRzKHNpbWlsYXJUbzogQ2F0YWxvZ1JlY29yZCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0UmVsYXRlZFJlY29yZFBheWxvYWQoc2ltaWxhclRvLCAzKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PlxuICAgICAgICAgIHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmRzKHJlc3VsdHMuaGl0cy5oaXRzKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBnZXRTb3VyY2VzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPiB7XG4gICAgY29uc3Qgc291cmNlc0lkZW50aWZpZXJzID0gcmVjb3JkLmV4dHJhcz8uWydzb3VyY2VzSWRlbnRpZmllcnMnXSBhcyBzdHJpbmdbXVxuICAgIGlmIChzb3VyY2VzSWRlbnRpZmllcnMgJiYgc291cmNlc0lkZW50aWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE11bHRpcGxlUmVjb3Jkcyhzb3VyY2VzSWRlbnRpZmllcnMpXG4gICAgfVxuICAgIHJldHVybiBvZihudWxsKVxuICB9XG5cbiAgZ2V0U291cmNlT2YocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICBjb25zdCBzb3VyY2VPZklkZW50aWZpZXJzID0gcmVjb3JkLmV4dHJhcz8uW1xuICAgICAgJ3NvdXJjZU9mSWRlbnRpZmllcnMnXG4gICAgXSBhcyBzdHJpbmdbXVxuICAgIGlmIChzb3VyY2VPZklkZW50aWZpZXJzICYmIHNvdXJjZU9mSWRlbnRpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TXVsdGlwbGVSZWNvcmRzKHNvdXJjZU9mSWRlbnRpZmllcnMpXG4gICAgfVxuICAgIHJldHVybiBvZihudWxsKVxuICB9XG5cbiAgYWdncmVnYXRlKHBhcmFtczogQWdncmVnYXRpb25zUGFyYW1zKTogT2JzZXJ2YWJsZTxBZ2dyZWdhdGlvbnM+IHtcbiAgICAvLyBpZiBhZ2dyZWdhdGlvbnMgYXJlIGVtcHR5LCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHJpZ2h0IGF3YXlcbiAgICBpZiAoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT09IDApIHJldHVybiBvZih7fSlcblxuICAgIGNvbnN0IGFnZ3JlZ2F0aW9ucyA9IHRoaXMuZ240U2VhcmNoSGVscGVyLmJ1aWxkQWdncmVnYXRpb25zUGF5bG9hZChwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0U2VhcmNoUmVxdWVzdEJvZHkoYWdncmVnYXRpb25zKSlcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBHbjRTZWFyY2hSZXN1bHRzKSA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKHJlc3BvbnNlLmFnZ3JlZ2F0aW9ucykucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnIpID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyXTogdGhpcy5nbjRTZWFyY2hIZWxwZXIucGFyc2VBZ2dyZWdhdGlvblJlc3VsdChcbiAgICAgICAgICAgICAgICByZXNwb25zZS5hZ2dyZWdhdGlvbnNbY3Vycl0sXG4gICAgICAgICAgICAgICAgcGFyYW1zW2N1cnJdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBmdXp6eVNlYXJjaChxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHRzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5nbjRTZWFyY2hIZWxwZXIuYnVpbGRBdXRvY29tcGxldGVQYXlsb2FkKHF1ZXJ5KSlcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+XG4gICAgICAgICAgdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZHMocmVzdWx0cy5oaXRzLmhpdHMpLnRoZW4oKHJlY29yZHMpID0+ICh7XG4gICAgICAgICAgICBjb3VudDogcmVzdWx0cy5oaXRzLnRvdGFsPy52YWx1ZSB8fCAwLFxuICAgICAgICAgICAgcmVjb3JkcyxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0UmVjb3JkUHVibGljYXRpb25TdGF0dXModW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHVuaXF1ZUlkZW50aWZpZXJcbiAgICAgID8gdGhpcy5nZXRSZWNvcmQodW5pcXVlSWRlbnRpZmllcikucGlwZShcbiAgICAgICAgICBtYXAoKHJlY29yZCkgPT4gcmVjb3JkLmV4dHJhc1snaXNQdWJsaXNoZWRUb0FsbCddIGFzIGJvb2xlYW4pXG4gICAgICAgIClcbiAgICAgIDogb2YodHJ1ZSlcbiAgfVxuXG4gIGNhbkVkaXRSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXIpLnBpcGUoXG4gICAgICBtYXAoKHJlY29yZCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVjb3JkLmV4dHJhc1snZWRpdCddIGFzIGJvb2xlYW5cbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgb3BlblJlY29yZEZvckVkaXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl0gfCBudWxsPiB7XG4gICAgY29uc3QgZHJhZnQkID0gb2YodGhpcy5nZXRSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHVuaXF1ZUlkZW50aWZpZXIpKVxuICAgIGNvbnN0IHJlY29yZEFzWG1sJCA9IHRoaXMuZ2V0UmVjb3JkQXNYbWwodW5pcXVlSWRlbnRpZmllcilcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtkcmFmdCQsIHJlY29yZEFzWG1sJF0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKFtkcmFmdCwgcmVjb3JkQXNYbWxdKSA9PiB7XG4gICAgICAgIGNvbnN0IHhtbCA9IGRyYWZ0ID8/IHJlY29yZEFzWG1sXG4gICAgICAgIGNvbnN0IGlzU2F2ZWRBbHJlYWR5ID0gcmVjb3JkQXNYbWwgIT09IG51bGxcbiAgICAgICAgcmV0dXJuIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudCh4bWwpXG4gICAgICAgICAgLnJlYWRSZWNvcmQoeG1sKVxuICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgKHJlY29yZCkgPT5cbiAgICAgICAgICAgICAgW3JlY29yZCwgeG1sLCBpc1NhdmVkQWxyZWFkeV0gYXMgW0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl1cbiAgICAgICAgICApXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIG9wZW5SZWNvcmRGb3JEdXBsaWNhdGlvbihcbiAgICB1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxbQ2F0YWxvZ1JlY29yZCwgc3RyaW5nLCB0cnVlXSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRSZWNvcmRzQXBpXG4gICAgICAuY3JlYXRlKFxuICAgICAgICB1bmlxdWVJZGVudGlmaWVyLFxuICAgICAgICAnMicsXG4gICAgICAgICdNRVRBREFUQScsXG4gICAgICAgICcnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB0cnVlLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAnYm9keScsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB7XG4gICAgICAgICAgaHR0cEhlYWRlckFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04JyxcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgodW5pcXVlSWRlbnRpZmllcikgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY29yZEFzWG1sKHVuaXF1ZUlkZW50aWZpZXIpXG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHhtbCkgPT4ge1xuICAgICAgICAgIHJldHVybiBmcm9tKFxuICAgICAgICAgICAgZmluZENvbnZlcnRlckZvckRvY3VtZW50KHhtbClcbiAgICAgICAgICAgICAgLnJlYWRSZWNvcmQoeG1sKVxuICAgICAgICAgICAgICAudGhlbigocmVjb3JkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtyZWNvcmQsIHhtbCwgdHJ1ZV0gYXMgW0NhdGFsb2dSZWNvcmQsIHN0cmluZywgdHJ1ZV1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICApXG4gIH1cblxuICBzYXZlUmVjb3JkKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICByZWZlcmVuY2VSZWNvcmRTb3VyY2U/OiBzdHJpbmcsXG4gICAgcHVibGlzaFRvQWxsID0gdHJ1ZVxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtU2VydmljZS5nZXRBcGlWZXJzaW9uKCkucGlwZShcbiAgICAgIG1hcCgodmVyc2lvbikgPT4ge1xuICAgICAgICBpZiAobHQodmVyc2lvbiwgbWluUHVibGljYXRpb25BcGlWZXJzaW9uKSkge1xuICAgICAgICAgIHRocm93IG5ldyBQdWJsaWNhdGlvblZlcnNpb25FcnJvcih2ZXJzaW9uKVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnNlcmlhbGl6ZVJlY29yZFRvWG1sKHJlY29yZCwgcmVmZXJlbmNlUmVjb3JkU291cmNlKSksXG4gICAgICBzd2l0Y2hNYXAoKHJlY29yZFhtbCkgPT5cbiAgICAgICAgdGhpcy5nbjRSZWNvcmRzQXBpLmluc2VydChcbiAgICAgICAgICAnTUVUQURBVEEnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHB1Ymxpc2hUb0FsbCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgJ09WRVJXUklURScsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgJ19ub25lXycsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgcmVjb3JkWG1sXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhSWQgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5tZXRhZGF0YUluZm9zKVswXVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UubWV0YWRhdGFJbmZvc1ttZXRhZGF0YUlkXVswXS51dWlkXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGR1cGxpY2F0ZUV4dGVybmFsUmVjb3JkKHJlY29yZERvd25sb2FkVXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldEV4dGVybmFsUmVjb3JkQXNYbWwocmVjb3JkRG93bmxvYWRVcmwpLnBpcGUoXG4gICAgICBleGhhdXN0TWFwKGFzeW5jIChmZXRjaGVkUmVjb3JkQXNYbWw6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoZmV0Y2hlZFJlY29yZEFzWG1sKVxuICAgICAgICBjb25zdCByZWNvcmQgPSBhd2FpdCBjb252ZXJ0ZXIucmVhZFJlY29yZChmZXRjaGVkUmVjb3JkQXNYbWwpXG5cbiAgICAgICAgcmVjb3JkLnRpdGxlID0gYCR7cmVjb3JkLnRpdGxlfSAoQ29weSlgXG4gICAgICAgIGNvbnN0IHJlY29yZEFzWG1sID0gYXdhaXQgY29udmVydGVyLndyaXRlUmVjb3JkKFxuICAgICAgICAgIHJlY29yZCxcbiAgICAgICAgICBmZXRjaGVkUmVjb3JkQXNYbWxcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNhdmVSZWNvcmQocmVjb3JkLCByZWNvcmRBc1htbCwgZmFsc2UpXG4gICAgICB9KSxcbiAgICAgIGV4aGF1c3RNYXAoKHV1aWRPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPHN0cmluZz4pID0+IHV1aWRPYnNlcnZhYmxlKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcilcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZGVsZXRlUmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmduNFJlY29yZHNBcGkuZGVsZXRlUmVjb3JkKHVuaXF1ZUlkZW50aWZpZXIpXG4gIH1cblxuICBnZW5lcmF0ZVRlbXBvcmFyeUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke1RFTVBPUkFSWV9JRF9QUkVGSVh9JHtEYXRlLm5vdygpfWBcbiAgfVxuXG4gIHNhdmVSZWNvcmRBc0RyYWZ0KFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgICByZWZlcmVuY2VSZWNvcmRTb3VyY2U/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVSZWNvcmRUb1htbChyZWNvcmQsIHJlZmVyZW5jZVJlY29yZFNvdXJjZSkucGlwZShcbiAgICAgIHRhcCgocmVjb3JkWG1sKSA9PiB7XG4gICAgICAgIHRoaXMuc2F2ZVJlY29yZFRvTG9jYWxTdG9yYWdlKHJlY29yZFhtbCwgcmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpXG4gICAgICAgIHRoaXMuX2RyYWZ0c0NoYW5nZWQubmV4dCgpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGNsZWFyUmVjb3JkRHJhZnQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHVuaXF1ZUlkZW50aWZpZXIpXG4gICAgdGhpcy5fZHJhZnRzQ2hhbmdlZC5uZXh0KClcbiAgfVxuXG4gIHJlY29yZEhhc0RyYWZ0KHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFJlY29yZEZyb21Mb2NhbFN0b3JhZ2UodW5pcXVlSWRlbnRpZmllcikgIT09IG51bGxcbiAgfVxuXG4gIC8vIGdlbmVyYXRlZCBieSBjb3BpbG90XG4gIGdldEFsbERyYWZ0cygpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT4ge1xuICAgIGNvbnN0IGl0ZW1zID0geyAuLi53aW5kb3cubG9jYWxTdG9yYWdlIH1cbiAgICBjb25zdCBkcmFmdHMgPSBPYmplY3Qua2V5cyhpdGVtcylcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2dlb25ldHdvcmstdWktZHJhZnQtJykpXG4gICAgICAubWFwKChrZXkpID0+IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKVxuICAgICAgLmZpbHRlcigoZHJhZnQpID0+IGRyYWZ0ICE9PSBudWxsKVxuICAgIHJldHVybiBmcm9tKFxuICAgICAgUHJvbWlzZS5hbGwoXG4gICAgICAgIGRyYWZ0cy5tYXAoKGRyYWZ0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudChkcmFmdCkucmVhZFJlY29yZChkcmFmdClcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBnZXREcmFmdHNDb3VudCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGNvbnN0IGl0ZW1zID0geyAuLi53aW5kb3cubG9jYWxTdG9yYWdlIH1cbiAgICBjb25zdCBkcmFmdENvdW50ID0gT2JqZWN0LmtleXMoaXRlbXMpXG4gICAgICAuZmlsdGVyKChrZXkpID0+IGtleS5zdGFydHNXaXRoKCdnZW9uZXR3b3JrLXVpLWRyYWZ0LScpKVxuICAgICAgLm1hcCgoa2V5KSA9PiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSlcbiAgICAgIC5maWx0ZXIoKGRyYWZ0KSA9PiBkcmFmdCAhPT0gbnVsbCkubGVuZ3RoXG4gICAgcmV0dXJuIG9mKGRyYWZ0Q291bnQpXG4gIH1cblxuICBoYXNSZWNvcmRDaGFuZ2VkU2luY2VEcmFmdChsb2NhbFJlY29yZDogQ2F0YWxvZ1JlY29yZCkge1xuICAgIHJldHVybiBvZih7XG4gICAgICBpc1Vuc2F2ZWQ6ICFsb2NhbFJlY29yZC51bmlxdWVJZGVudGlmaWVyLFxuICAgICAgaGFzRHJhZnQ6IHRoaXMucmVjb3JkSGFzRHJhZnQobG9jYWxSZWNvcmQudW5pcXVlSWRlbnRpZmllciksXG4gICAgfSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeyBpc1Vuc2F2ZWQsIGhhc0RyYWZ0IH0pID0+IHtcbiAgICAgICAgaWYgKGlzVW5zYXZlZCB8fCAhaGFzRHJhZnQpIHtcbiAgICAgICAgICByZXR1cm4gb2YoeyB1c2VyOiB1bmRlZmluZWQsIGRhdGU6IHVuZGVmaW5lZCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihbXG4gICAgICAgICAgdGhpcy5nZXRBbGxEcmFmdHMoKS5waXBlKFxuICAgICAgICAgICAgbWFwKChkcmFmdHMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdSZWNvcmQgPSBkcmFmdHMuZmluZChcbiAgICAgICAgICAgICAgICAoZHJhZnQpID0+XG4gICAgICAgICAgICAgICAgICBkcmFmdC51bmlxdWVJZGVudGlmaWVyID09PSBsb2NhbFJlY29yZC51bmlxdWVJZGVudGlmaWVyXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoaW5nUmVjb3JkPy5yZWNvcmRVcGRhdGVkIHx8IG51bGxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0aGlzLmdldFJlY29yZChsb2NhbFJlY29yZC51bmlxdWVJZGVudGlmaWVyKSxcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICBtYXAoKFtkcmFmdFJlY29yZFVwZGF0ZWQsIHJlY2VudFJlY29yZF0pID0+IHtcbiAgICAgICAgICAgIGlmIChyZWNlbnRSZWNvcmQ/LnJlY29yZFVwZGF0ZWQgPiBkcmFmdFJlY29yZFVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdXNlciA9IHJlY2VudFJlY29yZC5leHRyYXM/Llsnb3duZXJJbmZvJ11cbiAgICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICA/LnNwbGl0KCd8JylcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1c2VyOiBgJHt1c2VyWzJdfSAke3VzZXJbMV19YCxcbiAgICAgICAgICAgICAgICBkYXRlOiByZWNlbnRSZWNvcmQucmVjb3JkVXBkYXRlZCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgdXNlcjogdW5kZWZpbmVkLCBkYXRlOiB1bmRlZmluZWQgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWNvcmRBc1htbCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRSZWNvcmRzQXBpXG4gICAgICAuZ2V0UmVjb3JkQXMoXG4gICAgICAgIHVuaXF1ZUlkZW50aWZpZXIsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICdhcHBsaWNhdGlvbi94bWwnLFxuICAgICAgICAncmVzcG9uc2UnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgaHR0cEhlYWRlckFjY2VwdDogJ3RleHQveG1sLGFwcGxpY2F0aW9uL3htbCcgYXMgJ2FwcGxpY2F0aW9uL3htbCcgfSAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXNwb25zZSBpcyBwYXJzZWQgYXMgdGV4dFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+XG4gICAgICAgICAgZXJyb3Iuc3RhdHVzID09PSA0MDQgPyBvZihudWxsKSA6IHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplUmVjb3JkVG9YbWwoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIC8vIGlmIHRoZXJlJ3MgYSByZWZlcmVuY2UgcmVjb3JkLCB1c2UgdGhhdCBzdGFuZGFyZDsgb3RoZXJ3aXNlLCB1c2UgaXNvMTkxMzlcbiAgICBjb25zdCBjb252ZXJ0ZXIgPSByZWZlcmVuY2VSZWNvcmRTb3VyY2VcbiAgICAgID8gZmluZENvbnZlcnRlckZvckRvY3VtZW50KHJlZmVyZW5jZVJlY29yZFNvdXJjZSlcbiAgICAgIDogbmV3IElzbzE5MTM5Q29udmVydGVyKClcbiAgICByZXR1cm4gZnJvbShjb252ZXJ0ZXIud3JpdGVSZWNvcmQocmVjb3JkLCByZWZlcmVuY2VSZWNvcmRTb3VyY2UpKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRlcm5hbFJlY29yZEFzWG1sKFxuICAgIHJlY29yZERvd25sb2FkVXJsOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgY29uc3QgcmVzcG9uc2VUeXBlXyA9ICd0ZXh0J1xuICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgJ3RleHQveG1sLGFwcGxpY2F0aW9uL3htbCcpXG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0PHN0cmluZz4ocmVjb3JkRG93bmxvYWRVcmwsIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZWNvcmRBc1htbEZpbGUpID0+IHtcbiAgICAgICAgICBhc3NlcnRWYWxpZFhtbChyZWNvcmRBc1htbEZpbGUpXG5cbiAgICAgICAgICByZXR1cm4gcmVjb3JkQXNYbWxGaWxlXG4gICAgICAgIH0pXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGdlb25ldHdvcmstdWktZHJhZnQtJHtyZWNvcmRJZH1gIC8vIE5ldmVyIGNoYW5nZSB0aGlzIHByZWZpeCBhcyBpdCBpcyBhIGJyZWFraW5nIGNoYW5nZVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlUmVjb3JkVG9Mb2NhbFN0b3JhZ2UocmVjb3JkQXNYbWw6IFJlY29yZEFzWG1sLCByZWNvcmRJZDogc3RyaW5nKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgdGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQpLFxuICAgICAgcmVjb3JkQXNYbWxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFJlY29yZEZyb21Mb2NhbFN0b3JhZ2UocmVjb3JkSWQ6IHN0cmluZyk6IFJlY29yZEFzWG1sIHtcbiAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgdGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQpXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHJlY29yZElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRMb2NhbFN0b3JhZ2VLZXlGb3JSZWNvcmQocmVjb3JkSWQpKVxuICB9XG59XG4iXX0=
305
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.SearchApiService }, { type: i3.ElasticsearchService }, { type: i4.Gn4Converter }, { type: i2.RecordsApiService }, { type: i5.PlatformServiceInterface }, { type: i2.LanguagesApiService }] });
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LXJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L2duNC1yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBRVosaUJBQWlCLEdBQ2xCLE1BQU0sbURBQW1ELENBQUE7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUE7QUFlbEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUE7QUFFbEgsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsbUJBQW1CLEdBQ3BCLE1BQU0sNENBQTRDLENBQUE7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYixVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksRUFFSixFQUFFLEVBQ0YsT0FBTyxFQUNQLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxNQUFNLENBQUE7QUFDYixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFBOzs7Ozs7O0FBRXpFLE1BQU0sd0JBQXdCLEdBQUcsT0FBTyxDQUFBO0FBRXhDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFBO0FBS3RDLE1BQU0sT0FBTyxhQUFhO0lB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dUIsUUFBUSxFQUFFLENBQUEsQ0FBQyxzREFBc0Q7SUFDakcsQ0FBQztJQUVPLHdCQUF3QixDQUFDLFdBQXdCLEVBQUUsUUFBZ0I7UUFDekUsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3pCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsRUFDMUMsV0FBVyxDQUNaLENBQUE7SUFDSCxDQUFDO0lBRU8seUJBQXlCLENBQUMsUUFBZ0I7UUFDaEQsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDaEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUMzQyxDQUFBO0lBQ0gsQ0FBQztJQUVPLDRCQUE0QixDQUFDLFFBQWdCO1FBQ25ELE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7K0dBOWhCVSxhQUFhO21IQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEhlYWRlcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBhc3NlcnRWYWxpZFhtbCxcbiAgZmluZENvbnZlcnRlckZvckRvY3VtZW50LFxuICBHbjRDb252ZXJ0ZXIsXG4gIEduNFNlYXJjaFJlc3VsdHMsXG4gIElzbzE5MTM5Q29udmVydGVyLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjJ1xuaW1wb3J0IHsgUHVibGljYXRpb25WZXJzaW9uRXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9lcnJvcidcbmltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIERhdGFzZXRGZWF0dXJlVHlwZSxcbiAgRGF0YXNldEZlYXR1cmVDYXRhbG9nLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQge1xuICBBZ2dyZWdhdGlvbnMsXG4gIEFnZ3JlZ2F0aW9uc1BhcmFtcyxcbiAgRmllbGRGaWx0ZXJzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gnXG5pbXBvcnQge1xuICBTZWFyY2hQYXJhbXMsXG4gIFNlYXJjaFJlc3VsdHMsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3NlYXJjaC9zZWFyY2gubW9kZWwnXG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9wbGF0Zm9ybS5zZXJ2aWNlLmludGVyZmFjZSdcbmltcG9ydCB7IFJlY29yZHNSZXBvc2l0b3J5SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcmVwb3NpdG9yeS9yZWNvcmRzLXJlcG9zaXRvcnkuaW50ZXJmYWNlJ1xuaW1wb3J0IHtcbiAgUmVjb3Jkc0FwaVNlcnZpY2UsXG4gIFNlYXJjaEFwaVNlcnZpY2UsXG4gIExhbmd1YWdlc0FwaVNlcnZpY2UsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGF0YS1hY2Nlc3MvZ240L3NyYydcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIGV4aGF1c3RNYXAsXG4gIGZvcmtKb2luLFxuICBmcm9tLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IGx0IH0gZnJvbSAnc2VtdmVyJ1xuaW1wb3J0IHsgRWxhc3RpY3NlYXJjaFNlcnZpY2UgfSBmcm9tICcuL2VsYXN0aWNzZWFyY2gnXG5pbXBvcnQgeyBMQU5HXzNfVE9fMl9NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMnXG5cbmNvbnN0IG1pblB1YmxpY2F0aW9uQXBpVmVyc2lvbiA9ICc0LjIuNSdcblxuY29uc3QgVEVNUE9SQVJZX0lEX1BSRUZJWCA9ICdURU1QLUlELSdcblxuZXhwb3J0IHR5cGUgUmVjb3JkQXNYbWwgPSBzdHJpbmdcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEduNFJlcG9zaXRvcnkgaW1wbGVtZW50cyBSZWNvcmRzUmVwb3NpdG9yeUludGVyZmFjZSB7XG4gIF9kcmFmdHNDaGFuZ2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuICBkcmFmdHNDaGFuZ2VkJCA9IHRoaXMuX2RyYWZ0c0NoYW5nZWQuYXNPYnNlcnZhYmxlKClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hBcGk6IFNlYXJjaEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnbjRTZWFyY2hIZWxwZXI6IEVsYXN0aWNzZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ240TWFwcGVyOiBHbjRDb252ZXJ0ZXIsXG4gICAgcHJpdmF0ZSBnbjRSZWNvcmRzQXBpOiBSZWNvcmRzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgZ240TGFuZ3VhZ2VzQXBpOiBMYW5ndWFnZXNBcGlTZXJ2aWNlXG4gICkge31cblxuICBzZWFyY2goe1xuICAgIGZpbHRlcnMsXG4gICAgZmllbGRzLFxuICAgIG9mZnNldCxcbiAgICBsaW1pdCxcbiAgICBzb3J0LFxuICAgIGZpbHRlcklkcyxcbiAgICBmaWx0ZXJHZW9tZXRyeSxcbiAgfTogU2VhcmNoUGFyYW1zKTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHRzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240U2VhcmNoQXBpXG4gICAgICAuc2VhcmNoKFxuICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy5nbjRTZWFyY2hIZWxwZXIuZ2V0U2VhcmNoUmVxdWVzdEJvZHkoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWx0ZXJJZHMsXG4gICAgICAgICAgICBmaWx0ZXJHZW9tZXRyeVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZXN1bHRzLmhpdHMuaGl0cykudGhlbigocmVjb3JkcykgPT4gKHtcbiAgICAgICAgICAgIGNvdW50OiByZXN1bHRzLmhpdHMudG90YWw/LnZhbHVlIHx8IDAsXG4gICAgICAgICAgICByZWNvcmRzLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBnZXRNYXRjaGVzQ291bnQoZmlsdGVyczogRmllbGRGaWx0ZXJzKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdyZWNvcmRzLWNvdW50JyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLnRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgICApLFxuICAgICAgICAgIHRyYWNrX3RvdGFsX2hpdHM6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShtYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+IHJlc3VsdHMuaGl0cy50b3RhbD8udmFsdWUgfHwgMCkpXG4gIH1cblxuICBnZXRSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIFsnZmNhdHMnLCAnaGFzc291cmNlcyddLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB0aGlzLmduNFNlYXJjaEhlbHBlci5nZXRNZXRhZGF0YUJ5SWRzUGF5bG9hZChbdW5pcXVlSWRlbnRpZmllcl0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdHM6IEduNFNlYXJjaFJlc3VsdHMpID0+IHJlc3VsdHMuaGl0cy5oaXRzWzBdKSxcbiAgICAgICAgc3dpdGNoTWFwKChyZWNvcmQpID0+XG4gICAgICAgICAgcmVjb3JkID8gdGhpcy5nbjRNYXBwZXIucmVhZFJlY29yZChyZWNvcmQpIDogb2YobnVsbClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0TXVsdGlwbGVSZWNvcmRzKFxuICAgIHVuaXF1ZUlkZW50aWZpZXJzOiBzdHJpbmdbXVxuICApOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRTZWFyY2hBcGlcbiAgICAgIC5zZWFyY2goXG4gICAgICAgICdidWNrZXQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuZ240U2VhcmNoSGVscGVyLmdldE1ldGFkYXRhQnlJZHNQYXlsb2FkKHVuaXF1ZUlkZW50aWZpZXJzKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PiByZXN1bHRzLmhpdHMuaGl0cyksXG4gICAgICAgIHN3aXRjaE1hcCgocmVjb3JkcykgPT5cbiAgICAgICAgICByZWNvcmRzICYmIHJlY29yZHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZWNvcmRzKVxuICAgICAgICAgICAgOiBvZihudWxsKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIG1hcEVtYmVkZGVkRmVhdHVyZUNhdGFsb2coXG4gICAgZmVhdHVyZVR5cGVzOiBBcnJheTxEYXRhc2V0RmVhdHVyZVR5cGU+XG4gICk6IERhdGFzZXRGZWF0dXJlQ2F0YWxvZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZlYXR1cmVUeXBlczogZmVhdHVyZVR5cGVzLm1hcCgoZmVhdHVyZVR5cGUpID0+ICh7XG4gICAgICAgIG5hbWU6IGZlYXR1cmVUeXBlLnR5cGVOYW1lIHx8ICcnLFxuICAgICAgICBkZWZpbml0aW9uOiBmZWF0dXJlVHlwZS5kZWZpbml0aW9uIHx8ICcnLFxuICAgICAgICBhdHRyaWJ1dGVzOiBBcnJheS5pc0FycmF5KGZlYXR1cmVUeXBlLmF0dHJpYnV0ZVRhYmxlKVxuICAgICAgICAgID8gZmVhdHVyZVR5cGUuYXR0cmlidXRlVGFibGUubWFwKChhdHRyKSA9PiAoe1xuICAgICAgICAgICAgICBuYW1lOiBhdHRyLm5hbWUsXG4gICAgICAgICAgICAgIGNvZGU6IGF0dHIuY29kZSxcbiAgICAgICAgICAgICAgdGl0bGU6IGF0dHIuZGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgdHlwZTogYXR0ci50eXBlLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiBbXSxcbiAgICAgIH0pKSxcbiAgICB9XG4gIH1cbiAgZ2V0RmVhdHVyZUNhdGFsb2coXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHZpc2l0ZWQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpIC8vIHByZXZlbnQgbG9vcGluZ1xuICApOiBPYnNlcnZhYmxlPERhdGFzZXRGZWF0dXJlQ2F0YWxvZyB8IG51bGw+IHtcbiAgICBpZiAoXG4gICAgICByZWNvcmQuZXh0cmFzPy5bJ2ZlYXR1cmVUeXBlcyddICYmXG4gICAgICBBcnJheS5pc0FycmF5KHJlY29yZC5leHRyYXNbJ2ZlYXR1cmVUeXBlcyddKSAmJlxuICAgICAgcmVjb3JkLmV4dHJhc1snZmVhdHVyZVR5cGVzJ10ubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMubWFwRW1iZWRkZWRGZWF0dXJlQ2F0YWxvZyhyZWNvcmQuZXh0cmFzWydmZWF0dXJlVHlwZXMnXSkpXG4gICAgfVxuXG4gICAgY29uc3QgZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyID0gcmVjb3JkLmV4dHJhc1tcbiAgICAgICdmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXInXG4gICAgXSBhcyBzdHJpbmdcbiAgICBpZiAoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyICYmICF2aXNpdGVkLmhhcyhmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXIpKSB7XG4gICAgICB2aXNpdGVkLmFkZChmZWF0dXJlQ2F0YWxvZ0lkZW50aWZpZXIpXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZWNvcmQoZmVhdHVyZUNhdGFsb2dJZGVudGlmaWVyKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHJlY29yZCkgPT5cbiAgICAgICAgICByZWNvcmQgPyB0aGlzLmdldEZlYXR1cmVDYXRhbG9nKHJlY29yZCwgdmlzaXRlZCkgOiBvZihudWxsKVxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKG51bGwpXG4gIH1cblxuICBnZXRTaW1pbGFyUmVjb3JkcyhzaW1pbGFyVG86IENhdGFsb2dSZWNvcmQpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFJlbGF0ZWRSZWNvcmRQYXlsb2FkKHNpbWlsYXJUbywgMylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzdWx0czogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICB0aGlzLmduNE1hcHBlci5yZWFkUmVjb3JkcyhyZXN1bHRzLmhpdHMuaGl0cylcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZ2V0U291cmNlcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT4ge1xuICAgIGNvbnN0IHNvdXJjZXNJZGVudGlmaWVycyA9IHJlY29yZC5leHRyYXM/Llsnc291cmNlc0lkZW50aWZpZXJzJ10gYXMgc3RyaW5nW11cbiAgICBpZiAoc291cmNlc0lkZW50aWZpZXJzICYmIHNvdXJjZXNJZGVudGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNdWx0aXBsZVJlY29yZHMoc291cmNlc0lkZW50aWZpZXJzKVxuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbClcbiAgfVxuXG4gIGdldFNvdXJjZU9mKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPiB7XG4gICAgY29uc3Qgc291cmNlT2ZJZGVudGlmaWVycyA9IHJlY29yZC5leHRyYXM/LltcbiAgICAgICdzb3VyY2VPZklkZW50aWZpZXJzJ1xuICAgIF0gYXMgc3RyaW5nW11cbiAgICBpZiAoc291cmNlT2ZJZGVudGlmaWVycyAmJiBzb3VyY2VPZklkZW50aWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE11bHRpcGxlUmVjb3Jkcyhzb3VyY2VPZklkZW50aWZpZXJzKVxuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbClcbiAgfVxuXG4gIGFnZ3JlZ2F0ZShwYXJhbXM6IEFnZ3JlZ2F0aW9uc1BhcmFtcyk6IE9ic2VydmFibGU8QWdncmVnYXRpb25zPiB7XG4gICAgLy8gaWYgYWdncmVnYXRpb25zIGFyZSBlbXB0eSwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCByaWdodCBhd2F5XG4gICAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09PSAwKSByZXR1cm4gb2Yoe30pXG5cbiAgICBjb25zdCBhZ2dyZWdhdGlvbnMgPSB0aGlzLmduNFNlYXJjaEhlbHBlci5idWlsZEFnZ3JlZ2F0aW9uc1BheWxvYWQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZ240U2VhcmNoSGVscGVyLmdldFNlYXJjaFJlcXVlc3RCb2R5KGFnZ3JlZ2F0aW9ucykpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogR240U2VhcmNoUmVzdWx0cykgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZS5hZ2dyZWdhdGlvbnMpLnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3Vycl06IHRoaXMuZ240U2VhcmNoSGVscGVyLnBhcnNlQWdncmVnYXRpb25SZXN1bHQoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuYWdncmVnYXRpb25zW2N1cnJdLFxuICAgICAgICAgICAgICAgIHBhcmFtc1tjdXJyXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgZnV6enlTZWFyY2gocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8U2VhcmNoUmVzdWx0cz4ge1xuICAgIHJldHVybiB0aGlzLmduNFNlYXJjaEFwaVxuICAgICAgLnNlYXJjaChcbiAgICAgICAgJ2J1Y2tldCcsXG4gICAgICAgIG51bGwsXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZ240U2VhcmNoSGVscGVyLmJ1aWxkQXV0b2NvbXBsZXRlUGF5bG9hZChxdWVyeSkpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXN1bHRzOiBHbjRTZWFyY2hSZXN1bHRzKSA9PlxuICAgICAgICAgIHRoaXMuZ240TWFwcGVyLnJlYWRSZWNvcmRzKHJlc3VsdHMuaGl0cy5oaXRzKS50aGVuKChyZWNvcmRzKSA9PiAoe1xuICAgICAgICAgICAgY291bnQ6IHJlc3VsdHMuaGl0cy50b3RhbD8udmFsdWUgfHwgMCxcbiAgICAgICAgICAgIHJlY29yZHMsXG4gICAgICAgICAgfSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGdldFJlY29yZFB1YmxpY2F0aW9uU3RhdHVzKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB1bmlxdWVJZGVudGlmaWVyXG4gICAgICA/IHRoaXMuZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXIpLnBpcGUoXG4gICAgICAgICAgbWFwKChyZWNvcmQpID0+IHJlY29yZC5leHRyYXNbJ2lzUHVibGlzaGVkVG9BbGwnXSBhcyBib29sZWFuKVxuICAgICAgICApXG4gICAgICA6IG9mKHRydWUpXG4gIH1cblxuICBjYW5FZGl0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmdldFJlY29yZCh1bmlxdWVJZGVudGlmaWVyKS5waXBlKFxuICAgICAgbWFwKChyZWNvcmQpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC5leHRyYXNbJ2VkaXQnXSBhcyBib29sZWFuXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIG9wZW5SZWNvcmRGb3JFZGl0aW9uKFxuICAgIHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGJvb2xlYW5dIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRyYWZ0JCA9IG9mKHRoaXMuZ2V0UmVjb3JkRnJvbUxvY2FsU3RvcmFnZSh1bmlxdWVJZGVudGlmaWVyKSlcbiAgICBjb25zdCByZWNvcmRBc1htbCQgPSB0aGlzLmdldFJlY29yZEFzWG1sKHVuaXF1ZUlkZW50aWZpZXIpXG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbZHJhZnQkLCByZWNvcmRBc1htbCRdKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChbZHJhZnQsIHJlY29yZEFzWG1sXSkgPT4ge1xuICAgICAgICBjb25zdCB4bWwgPSBkcmFmdCA/PyByZWNvcmRBc1htbFxuICAgICAgICBjb25zdCBpc1NhdmVkQWxyZWFkeSA9IHJlY29yZEFzWG1sICE9PSBudWxsXG4gICAgICAgIHJldHVybiBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoeG1sKVxuICAgICAgICAgIC5yZWFkUmVjb3JkKHhtbClcbiAgICAgICAgICAudGhlbihcbiAgICAgICAgICAgIChyZWNvcmQpID0+XG4gICAgICAgICAgICAgIFtyZWNvcmQsIHhtbCwgaXNTYXZlZEFscmVhZHldIGFzIFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGJvb2xlYW5dXG4gICAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBvcGVuUmVjb3JkRm9yRHVwbGljYXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgdHJ1ZV0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ240UmVjb3Jkc0FwaVxuICAgICAgLmNyZWF0ZShcbiAgICAgICAgdW5pcXVlSWRlbnRpZmllcixcbiAgICAgICAgJzInLFxuICAgICAgICAnTUVUQURBVEEnLFxuICAgICAgICAnJyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgJ2JvZHknLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAge1xuICAgICAgICAgIGh0dHBIZWFkZXJBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCcsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHVuaXF1ZUlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWNvcmRBc1htbCh1bmlxdWVJZGVudGlmaWVyKVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCh4bWwpID0+IHtcbiAgICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIGZpbmRDb252ZXJ0ZXJGb3JEb2N1bWVudCh4bWwpXG4gICAgICAgICAgICAgIC5yZWFkUmVjb3JkKHhtbClcbiAgICAgICAgICAgICAgLnRoZW4oKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBbcmVjb3JkLCB4bWwsIHRydWVdIGFzIFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIHRydWVdXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgc2F2ZVJlY29yZChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nLFxuICAgIHB1Ymxpc2hUb0FsbCA9IHRydWVcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVNlcnZpY2UuZ2V0QXBpVmVyc2lvbigpLnBpcGUoXG4gICAgICBtYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgaWYgKGx0KHZlcnNpb24sIG1pblB1YmxpY2F0aW9uQXBpVmVyc2lvbikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUHVibGljYXRpb25WZXJzaW9uRXJyb3IodmVyc2lvbilcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zZXJpYWxpemVSZWNvcmRUb1htbChyZWNvcmQsIHJlZmVyZW5jZVJlY29yZFNvdXJjZSkpLFxuICAgICAgc3dpdGNoTWFwKChyZWNvcmRYbWwpID0+XG4gICAgICAgIHRoaXMuZ240UmVjb3Jkc0FwaS5pbnNlcnQoXG4gICAgICAgICAgJ01FVEFEQVRBJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBwdWJsaXNoVG9BbGwsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICdPVkVSV1JJVEUnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICdfbm9uZV8nLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHJlY29yZFhtbFxuICAgICAgICApXG4gICAgICApLFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YUlkID0gT2JqZWN0LmtleXMocmVzcG9uc2UubWV0YWRhdGFJbmZvcylbMF1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm1ldGFkYXRhSW5mb3NbbWV0YWRhdGFJZF1bMF0udXVpZFxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBkdXBsaWNhdGVFeHRlcm5hbFJlY29yZChyZWNvcmREb3dubG9hZFVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRFeHRlcm5hbFJlY29yZEFzWG1sKHJlY29yZERvd25sb2FkVXJsKS5waXBlKFxuICAgICAgZXhoYXVzdE1hcChhc3luYyAoZmV0Y2hlZFJlY29yZEFzWG1sOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVyID0gZmluZENvbnZlcnRlckZvckRvY3VtZW50KGZldGNoZWRSZWNvcmRBc1htbClcbiAgICAgICAgY29uc3QgcmVjb3JkID0gYXdhaXQgY29udmVydGVyLnJlYWRSZWNvcmQoZmV0Y2hlZFJlY29yZEFzWG1sKVxuXG4gICAgICAgIHJlY29yZC50aXRsZSA9IGAke3JlY29yZC50aXRsZX0gKENvcHkpYFxuICAgICAgICBjb25zdCByZWNvcmRBc1htbCA9IGF3YWl0IGNvbnZlcnRlci53cml0ZVJlY29yZChcbiAgICAgICAgICByZWNvcmQsXG4gICAgICAgICAgZmV0Y2hlZFJlY29yZEFzWG1sXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4gdGhpcy5zYXZlUmVjb3JkKHJlY29yZCwgcmVjb3JkQXNYbWwsIGZhbHNlKVxuICAgICAgfSksXG4gICAgICBleGhhdXN0TWFwKCh1dWlkT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmc+KSA9PiB1dWlkT2JzZXJ2YWJsZSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGRlbGV0ZVJlY29yZCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRSZWNvcmRzQXBpLmRlbGV0ZVJlY29yZCh1bmlxdWVJZGVudGlmaWVyKVxuICB9XG5cbiAgZ2VuZXJhdGVUZW1wb3JhcnlJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtURU1QT1JBUllfSURfUFJFRklYfSR7RGF0ZS5ub3coKX1gXG4gIH1cblxuICBzYXZlUmVjb3JkQXNEcmFmdChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplUmVjb3JkVG9YbWwocmVjb3JkLCByZWZlcmVuY2VSZWNvcmRTb3VyY2UpLnBpcGUoXG4gICAgICB0YXAoKHJlY29yZFhtbCkgPT4ge1xuICAgICAgICB0aGlzLnNhdmVSZWNvcmRUb0xvY2FsU3RvcmFnZShyZWNvcmRYbWwsIHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICAgICAgICB0aGlzLl9kcmFmdHNDaGFuZ2VkLm5leHQoKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBjbGVhclJlY29yZERyYWZ0KHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlUmVjb3JkRnJvbUxvY2FsU3RvcmFnZSh1bmlxdWVJZGVudGlmaWVyKVxuICAgIHRoaXMuX2RyYWZ0c0NoYW5nZWQubmV4dCgpXG4gIH1cblxuICByZWNvcmRIYXNEcmFmdCh1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZWNvcmRGcm9tTG9jYWxTdG9yYWdlKHVuaXF1ZUlkZW50aWZpZXIpICE9PSBudWxsXG4gIH1cblxuICAvLyBnZW5lcmF0ZWQgYnkgY29waWxvdFxuICBnZXRBbGxEcmFmdHMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+IHtcbiAgICBjb25zdCBpdGVtcyA9IHsgLi4ud2luZG93LmxvY2FsU3RvcmFnZSB9XG4gICAgY29uc3QgZHJhZnRzID0gT2JqZWN0LmtleXMoaXRlbXMpXG4gICAgICAuZmlsdGVyKChrZXkpID0+IGtleS5zdGFydHNXaXRoKCdnZW9uZXR3b3JrLXVpLWRyYWZ0LScpKVxuICAgICAgLm1hcCgoa2V5KSA9PiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSlcbiAgICAgIC5maWx0ZXIoKGRyYWZ0KSA9PiBkcmFmdCAhPT0gbnVsbClcbiAgICByZXR1cm4gZnJvbShcbiAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICBkcmFmdHMubWFwKChkcmFmdCkgPT4ge1xuICAgICAgICAgIHJldHVybiBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQoZHJhZnQpLnJlYWRSZWNvcmQoZHJhZnQpXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgZ2V0RHJhZnRzQ291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBjb25zdCBpdGVtcyA9IHsgLi4ud2luZG93LmxvY2FsU3RvcmFnZSB9XG4gICAgY29uc3QgZHJhZnRDb3VudCA9IE9iamVjdC5rZXlzKGl0ZW1zKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aCgnZ2VvbmV0d29yay11aS1kcmFmdC0nKSlcbiAgICAgIC5tYXAoKGtleSkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpXG4gICAgICAuZmlsdGVyKChkcmFmdCkgPT4gZHJhZnQgIT09IG51bGwpLmxlbmd0aFxuICAgIHJldHVybiBvZihkcmFmdENvdW50KVxuICB9XG5cbiAgaGFzUmVjb3JkQ2hhbmdlZFNpbmNlRHJhZnQobG9jYWxSZWNvcmQ6IENhdGFsb2dSZWNvcmQpIHtcbiAgICByZXR1cm4gb2Yoe1xuICAgICAgaXNVbnNhdmVkOiAhbG9jYWxSZWNvcmQudW5pcXVlSWRlbnRpZmllcixcbiAgICAgIGhhc0RyYWZ0OiB0aGlzLnJlY29yZEhhc0RyYWZ0KGxvY2FsUmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpLFxuICAgIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHsgaXNVbnNhdmVkLCBoYXNEcmFmdCB9KSA9PiB7XG4gICAgICAgIGlmIChpc1Vuc2F2ZWQgfHwgIWhhc0RyYWZ0KSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHsgdXNlcjogdW5kZWZpbmVkLCBkYXRlOiB1bmRlZmluZWQgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oW1xuICAgICAgICAgIHRoaXMuZ2V0QWxsRHJhZnRzKCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoZHJhZnRzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nUmVjb3JkID0gZHJhZnRzLmZpbmQoXG4gICAgICAgICAgICAgICAgKGRyYWZ0KSA9PlxuICAgICAgICAgICAgICAgICAgZHJhZnQudW5pcXVlSWRlbnRpZmllciA9PT0gbG9jYWxSZWNvcmQudW5pcXVlSWRlbnRpZmllclxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGluZ1JlY29yZD8ucmVjb3JkVXBkYXRlZCB8fCBudWxsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpcy5nZXRSZWNvcmQobG9jYWxSZWNvcmQudW5pcXVlSWRlbnRpZmllciksXG4gICAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgbWFwKChbZHJhZnRSZWNvcmRVcGRhdGVkLCByZWNlbnRSZWNvcmRdKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVjZW50UmVjb3JkPy5yZWNvcmRVcGRhdGVkID4gZHJhZnRSZWNvcmRVcGRhdGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSByZWNlbnRSZWNvcmQuZXh0cmFzPy5bJ293bmVySW5mbyddXG4gICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgPy5zcGxpdCgnfCcpXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdXNlcjogYCR7dXNlclsyXX0gJHt1c2VyWzFdfWAsXG4gICAgICAgICAgICAgICAgZGF0ZTogcmVjZW50UmVjb3JkLnJlY29yZFVwZGF0ZWQsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHVzZXI6IHVuZGVmaW5lZCwgZGF0ZTogdW5kZWZpbmVkIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9uTGFuZ3VhZ2VzKCk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5nbjRMYW5ndWFnZXNBcGlcbiAgICAgIC5nZXRBcHBsaWNhdGlvbkxhbmd1YWdlcygpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsYW5ndWFnZXMpID0+XG4gICAgICAgICAgbGFuZ3VhZ2VzXG4gICAgICAgICAgICAubWFwKChsYW5nKSA9PiBMQU5HXzNfVE9fMl9NQVBQRVJbbGFuZy5pZCA/PyAnJ10pXG4gICAgICAgICAgICAuZmlsdGVyKChjb2RlKTogY29kZSBpcyBzdHJpbmcgPT4gISFjb2RlKVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFJlY29yZEFzWG1sKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmduNFJlY29yZHNBcGlcbiAgICAgIC5nZXRSZWNvcmRBcyhcbiAgICAgICAgdW5pcXVlSWRlbnRpZmllcixcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCcsXG4gICAgICAgICdyZXNwb25zZScsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBodHRwSGVhZGVyQWNjZXB0OiAndGV4dC94bWwsYXBwbGljYXRpb24veG1sJyBhcyAnYXBwbGljYXRpb24veG1sJyB9IC8vIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlc3BvbnNlIGlzIHBhcnNlZCBhcyB0ZXh0XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT5cbiAgICAgICAgICBlcnJvci5zdGF0dXMgPT09IDQwNCA/IG9mKG51bGwpIDogdGhyb3dFcnJvcigoKSA9PiBlcnJvcilcbiAgICAgICAgKVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVSZWNvcmRUb1htbChcbiAgICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gICAgcmVmZXJlbmNlUmVjb3JkU291cmNlPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgLy8gaWYgdGhlcmUncyBhIHJlZmVyZW5jZSByZWNvcmQsIHVzZSB0aGF0IHN0YW5kYXJkOyBvdGhlcndpc2UsIHVzZSBpc28xOTEzOVxuICAgIGNvbnN0IGNvbnZlcnRlciA9IHJlZmVyZW5jZVJlY29yZFNvdXJjZVxuICAgICAgPyBmaW5kQ29udmVydGVyRm9yRG9jdW1lbnQocmVmZXJlbmNlUmVjb3JkU291cmNlKVxuICAgICAgOiBuZXcgSXNvMTkxMzlDb252ZXJ0ZXIoKVxuICAgIHJldHVybiBmcm9tKGNvbnZlcnRlci53cml0ZVJlY29yZChyZWNvcmQsIHJlZmVyZW5jZVJlY29yZFNvdXJjZSkpXG4gIH1cblxuICBwcml2YXRlIGdldEV4dGVybmFsUmVjb3JkQXNYbWwoXG4gICAgcmVjb3JkRG93bmxvYWRVcmw6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICBjb25zdCByZXNwb25zZVR5cGVfID0gJ3RleHQnXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCAndGV4dC94bWwsYXBwbGljYXRpb24veG1sJylcblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQ8c3RyaW5nPihyZWNvcmREb3dubG9hZFVybCwge1xuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogJ2JvZHknLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlY29yZEFzWG1sRmlsZSkgPT4ge1xuICAgICAgICAgIGFzc2VydFZhbGlkWG1sKHJlY29yZEFzWG1sRmlsZSlcblxuICAgICAgICAgIHJldHVybiByZWNvcmRBc1htbEZpbGVcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlS2V5Rm9yUmVjb3JkKHJlY29yZElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgZ2VvbmV0d29yay11aS1kcmFmdC0ke3JlY29yZElkfWAgLy8gTmV2ZXIgY2hhbmdlIHRoaXMgcHJlZml4IGFzIGl0IGlzIGEgYnJlYWtpbmcgY2hhbmdlXG4gIH1cblxuICBwcml2YXRlIHNhdmVSZWNvcmRUb0xvY2FsU3RvcmFnZShyZWNvcmRBc1htbDogUmVjb3JkQXNYbWwsIHJlY29yZElkOiBzdHJpbmcpIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICB0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZCksXG4gICAgICByZWNvcmRBc1htbFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVjb3JkRnJvbUxvY2FsU3RvcmFnZShyZWNvcmRJZDogc3RyaW5nKTogUmVjb3JkQXNYbWwge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXG4gICAgICB0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZClcbiAgICApXG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZEZyb21Mb2NhbFN0b3JhZ2UocmVjb3JkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmdldExvY2FsU3RvcmFnZUtleUZvclJlY29yZChyZWNvcmRJZCkpXG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  export class RecordsRepositoryInterface {
2
2
  }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3Jkcy1yZXBvc2l0b3J5LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL3JlcG9zaXRvcnkvcmVjb3Jkcy1yZXBvc2l0b3J5LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLE9BQWdCLDBCQUEwQjtDQXlGL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9ucyxcbiAgQWdncmVnYXRpb25zUGFyYW1zLFxuICBGaWVsZEZpbHRlcnMsXG4gIFNlYXJjaFBhcmFtcyxcbiAgU2VhcmNoUmVzdWx0cyxcbn0gZnJvbSAnLi4vbW9kZWwvc2VhcmNoJ1xuaW1wb3J0IHsgQ2F0YWxvZ1JlY29yZCwgRGF0YXNldEZlYXR1cmVDYXRhbG9nIH0gZnJvbSAnLi4vbW9kZWwvcmVjb3JkJ1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVjb3Jkc1JlcG9zaXRvcnlJbnRlcmZhY2Uge1xuICBhYnN0cmFjdCBzZWFyY2gocGFyYW1zOiBTZWFyY2hQYXJhbXMpOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdHM+XG4gIGFic3RyYWN0IGdldE1hdGNoZXNDb3VudChmaWx0ZXJzOiBGaWVsZEZpbHRlcnMpOiBPYnNlcnZhYmxlPG51bWJlcj5cbiAgYWJzdHJhY3QgZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZCB8IG51bGw+XG4gIGFic3RyYWN0IGdldEZlYXR1cmVDYXRhbG9nKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZFxuICApOiBPYnNlcnZhYmxlPERhdGFzZXRGZWF0dXJlQ2F0YWxvZyB8IG51bGw+XG4gIGFic3RyYWN0IGFnZ3JlZ2F0ZShwYXJhbXM6IEFnZ3JlZ2F0aW9uc1BhcmFtcyk6IE9ic2VydmFibGU8QWdncmVnYXRpb25zPlxuICBhYnN0cmFjdCBnZXRTaW1pbGFyUmVjb3JkcyhcbiAgICBzaW1pbGFyVG86IENhdGFsb2dSZWNvcmRcbiAgKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+XG4gIGFic3RyYWN0IGdldFNvdXJjZXMocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+XG4gIGFic3RyYWN0IGdldFNvdXJjZU9mKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPlxuICBhYnN0cmFjdCBmdXp6eVNlYXJjaChxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHRzPlxuICBhYnN0cmFjdCBjYW5FZGl0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj5cbiAgLyoqXG4gICAqIFRoaXMgZW1pdHMgb25jZTpcbiAgICogLSByZWNvcmQgb2JqZWN0OyBpZiBhIGRyYWZ0IGV4aXN0cywgdGhpcyB3aWxsIHJldHVybiBpdFxuICAgKiAtIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlY29yZCBhcyB0ZXh0XG4gICAqIC0gYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSByZWNvcmQgaGFzIGJlZW4gc2F2ZWQgYXQgbGVhc3Qgb25jZSBpbiBhIGZpbmFsIHZlcnNpb24gKGkuZS4gbm90IG9ubHkgYXMgZHJhZnQpXG4gICAqIEBwYXJhbSB1bmlxdWVJZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl0gfCBudWxsPlxuICAgKi9cbiAgYWJzdHJhY3Qgb3BlblJlY29yZEZvckVkaXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl0gfCBudWxsPlxuXG4gIC8qKlxuICAgKiBUaGlzIGVtaXRzIG9uY2U6XG4gICAqIC0gcmVjb3JkIG9iamVjdCB3aXRoIGEgbmV3IHVuaXF1ZSBpZGVudGlmaWVyIGFuZCBzdWZmaXhlZCB0aXRsZVxuICAgKiAtIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlY29yZCBhcyB0ZXh0XG4gICAqIC0gZmFsc2UsIGFzIHRoZSBkdXBsaWNhdGVkIHJlY29yZCBpcyBhbHdheXMgYSBkcmFmdFxuICAgKiBAcGFyYW0gdW5pcXVlSWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGZhbHNlXSB8IG51bGw+XG4gICAqL1xuICBhYnN0cmFjdCBvcGVuUmVjb3JkRm9yRHVwbGljYXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgdHJ1ZV0gfCBudWxsPlxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcmVjb3JkXG4gICAqIEBwYXJhbSByZWZlcmVuY2VSZWNvcmRTb3VyY2VcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxzdHJpbmc+IFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZWNvcmQgYXMgaXQgd2FzIHdoZW4gc2F2ZWRcbiAgICovXG4gIGFic3RyYWN0IHNhdmVSZWNvcmQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZyxcbiAgICBwdWJsaXNoVG9BbGw/OiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPlxuXG4gIC8qKlxuICAgKiBUcnkgdG8gZHVwbGljYXRlIHRoZSBleHRlcm5hbCByZWNvcmQgZnJvbSBnaXZlbiB1cmwuIElmIGl0IHN1Y2VlZCwgdGhlbiBpdCB3aWxsIHNhdmUgdGhlIHJlY29yZCBhcyBkcmFmdCBhbmQgcmV0dXJuIGl0cyB0ZW1wb3JhcnkgaWQuXG4gICAqXG4gICAqIEBwYXJhbSByZWNvcmREb3dubG9hZFVybFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPHN0cmluZz5cbiAgICovXG4gIGFic3RyYWN0IGR1cGxpY2F0ZUV4dGVybmFsUmVjb3JkKFxuICAgIHJlY29yZERvd25sb2FkVXJsOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB1bmlxdWVJZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8dm9pZD4gUmV0dXJucyB3aGVuIHJlY29yZCBpcyBkZWxldGVkXG4gICAqL1xuICBhYnN0cmFjdCBkZWxldGVSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPlxuXG4gIGFic3RyYWN0IGdlbmVyYXRlVGVtcG9yYXJ5SWQoKTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEBwYXJhbSByZWNvcmRcbiAgICogQHBhcmFtIHJlZmVyZW5jZVJlY29yZFNvdXJjZVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPHN0cmluZz4gUmV0dXJucyB0aGUgc291cmNlIG9mIHRoZSByZWNvcmQgYXMgaXQgd2FzIHNlcmlhbGl6ZWQgd2hlbiBzYXZlZFxuICAgKi9cbiAgYWJzdHJhY3Qgc2F2ZVJlY29yZEFzRHJhZnQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz5cblxuICBhYnN0cmFjdCBjbGVhclJlY29yZERyYWZ0KHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWRcbiAgYWJzdHJhY3QgcmVjb3JkSGFzRHJhZnQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogYm9vbGVhblxuXG4gIC8qKiB3aWxsIHJldHVybiBhbGwgcGVuZGluZyBkcmFmdHMsIGJvdGggcHVibGlzaGVkIGFuZCBub3QgcHVibGlzaGVkICovXG4gIGFic3RyYWN0IGdldEFsbERyYWZ0cygpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT5cbiAgYWJzdHJhY3QgZ2V0RHJhZnRzQ291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+XG4gIGFic3RyYWN0IGRyYWZ0c0NoYW5nZWQkOiBPYnNlcnZhYmxlPHZvaWQ+XG4gIGFic3RyYWN0IGhhc1JlY29yZENoYW5nZWRTaW5jZURyYWZ0KFxuICAgIGxvY2FsUmVjb3JkOiBDYXRhbG9nUmVjb3JkXG4gICk6IE9ic2VydmFibGU8eyB1c2VyOiBzdHJpbmc7IGRhdGU6IERhdGUgfT5cbiAgYWJzdHJhY3QgZ2V0UmVjb3JkUHVibGljYXRpb25TdGF0dXModXVpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPlxufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3Jkcy1yZXBvc2l0b3J5LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL3JlcG9zaXRvcnkvcmVjb3Jkcy1yZXBvc2l0b3J5LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxNQUFNLE9BQWdCLDBCQUEwQjtDQTBGL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9ucyxcbiAgQWdncmVnYXRpb25zUGFyYW1zLFxuICBGaWVsZEZpbHRlcnMsXG4gIFNlYXJjaFBhcmFtcyxcbiAgU2VhcmNoUmVzdWx0cyxcbn0gZnJvbSAnLi4vbW9kZWwvc2VhcmNoJ1xuaW1wb3J0IHsgQ2F0YWxvZ1JlY29yZCwgRGF0YXNldEZlYXR1cmVDYXRhbG9nIH0gZnJvbSAnLi4vbW9kZWwvcmVjb3JkJ1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVjb3Jkc1JlcG9zaXRvcnlJbnRlcmZhY2Uge1xuICBhYnN0cmFjdCBzZWFyY2gocGFyYW1zOiBTZWFyY2hQYXJhbXMpOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdHM+XG4gIGFic3RyYWN0IGdldE1hdGNoZXNDb3VudChmaWx0ZXJzOiBGaWVsZEZpbHRlcnMpOiBPYnNlcnZhYmxlPG51bWJlcj5cbiAgYWJzdHJhY3QgZ2V0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZCB8IG51bGw+XG4gIGFic3RyYWN0IGdldEZlYXR1cmVDYXRhbG9nKFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZFxuICApOiBPYnNlcnZhYmxlPERhdGFzZXRGZWF0dXJlQ2F0YWxvZyB8IG51bGw+XG4gIGFic3RyYWN0IGFnZ3JlZ2F0ZShwYXJhbXM6IEFnZ3JlZ2F0aW9uc1BhcmFtcyk6IE9ic2VydmFibGU8QWdncmVnYXRpb25zPlxuICBhYnN0cmFjdCBnZXRTaW1pbGFyUmVjb3JkcyhcbiAgICBzaW1pbGFyVG86IENhdGFsb2dSZWNvcmRcbiAgKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+XG4gIGFic3RyYWN0IGdldFNvdXJjZXMocmVjb3JkOiBDYXRhbG9nUmVjb3JkKTogT2JzZXJ2YWJsZTxDYXRhbG9nUmVjb3JkW10+XG4gIGFic3RyYWN0IGdldFNvdXJjZU9mKHJlY29yZDogQ2F0YWxvZ1JlY29yZCk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZFtdPlxuICBhYnN0cmFjdCBmdXp6eVNlYXJjaChxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHRzPlxuICBhYnN0cmFjdCBjYW5FZGl0UmVjb3JkKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj5cbiAgLyoqXG4gICAqIFRoaXMgZW1pdHMgb25jZTpcbiAgICogLSByZWNvcmQgb2JqZWN0OyBpZiBhIGRyYWZ0IGV4aXN0cywgdGhpcyB3aWxsIHJldHVybiBpdFxuICAgKiAtIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlY29yZCBhcyB0ZXh0XG4gICAqIC0gYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSByZWNvcmQgaGFzIGJlZW4gc2F2ZWQgYXQgbGVhc3Qgb25jZSBpbiBhIGZpbmFsIHZlcnNpb24gKGkuZS4gbm90IG9ubHkgYXMgZHJhZnQpXG4gICAqIEBwYXJhbSB1bmlxdWVJZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl0gfCBudWxsPlxuICAgKi9cbiAgYWJzdHJhY3Qgb3BlblJlY29yZEZvckVkaXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgYm9vbGVhbl0gfCBudWxsPlxuXG4gIC8qKlxuICAgKiBUaGlzIGVtaXRzIG9uY2U6XG4gICAqIC0gcmVjb3JkIG9iamVjdCB3aXRoIGEgbmV3IHVuaXF1ZSBpZGVudGlmaWVyIGFuZCBzdWZmaXhlZCB0aXRsZVxuICAgKiAtIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlY29yZCBhcyB0ZXh0XG4gICAqIC0gZmFsc2UsIGFzIHRoZSBkdXBsaWNhdGVkIHJlY29yZCBpcyBhbHdheXMgYSBkcmFmdFxuICAgKiBAcGFyYW0gdW5pcXVlSWRlbnRpZmllclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPFtDYXRhbG9nUmVjb3JkLCBzdHJpbmcsIGZhbHNlXSB8IG51bGw+XG4gICAqL1xuICBhYnN0cmFjdCBvcGVuUmVjb3JkRm9yRHVwbGljYXRpb24oXG4gICAgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8W0NhdGFsb2dSZWNvcmQsIHN0cmluZywgdHJ1ZV0gfCBudWxsPlxuXG4gIC8qKlxuICAgKiBAcGFyYW0gcmVjb3JkXG4gICAqIEBwYXJhbSByZWZlcmVuY2VSZWNvcmRTb3VyY2VcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxzdHJpbmc+IFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZWNvcmQgYXMgaXQgd2FzIHdoZW4gc2F2ZWRcbiAgICovXG4gIGFic3RyYWN0IHNhdmVSZWNvcmQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZyxcbiAgICBwdWJsaXNoVG9BbGw/OiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPlxuXG4gIC8qKlxuICAgKiBUcnkgdG8gZHVwbGljYXRlIHRoZSBleHRlcm5hbCByZWNvcmQgZnJvbSBnaXZlbiB1cmwuIElmIGl0IHN1Y2VlZCwgdGhlbiBpdCB3aWxsIHNhdmUgdGhlIHJlY29yZCBhcyBkcmFmdCBhbmQgcmV0dXJuIGl0cyB0ZW1wb3JhcnkgaWQuXG4gICAqXG4gICAqIEBwYXJhbSByZWNvcmREb3dubG9hZFVybFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPHN0cmluZz5cbiAgICovXG4gIGFic3RyYWN0IGR1cGxpY2F0ZUV4dGVybmFsUmVjb3JkKFxuICAgIHJlY29yZERvd25sb2FkVXJsOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB1bmlxdWVJZGVudGlmaWVyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8dm9pZD4gUmV0dXJucyB3aGVuIHJlY29yZCBpcyBkZWxldGVkXG4gICAqL1xuICBhYnN0cmFjdCBkZWxldGVSZWNvcmQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPlxuXG4gIGFic3RyYWN0IGdlbmVyYXRlVGVtcG9yYXJ5SWQoKTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEBwYXJhbSByZWNvcmRcbiAgICogQHBhcmFtIHJlZmVyZW5jZVJlY29yZFNvdXJjZVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPHN0cmluZz4gUmV0dXJucyB0aGUgc291cmNlIG9mIHRoZSByZWNvcmQgYXMgaXQgd2FzIHNlcmlhbGl6ZWQgd2hlbiBzYXZlZFxuICAgKi9cbiAgYWJzdHJhY3Qgc2F2ZVJlY29yZEFzRHJhZnQoXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICAgIHJlZmVyZW5jZVJlY29yZFNvdXJjZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPHN0cmluZz5cblxuICBhYnN0cmFjdCBjbGVhclJlY29yZERyYWZ0KHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWRcbiAgYWJzdHJhY3QgcmVjb3JkSGFzRHJhZnQodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKTogYm9vbGVhblxuXG4gIC8qKiB3aWxsIHJldHVybiBhbGwgcGVuZGluZyBkcmFmdHMsIGJvdGggcHVibGlzaGVkIGFuZCBub3QgcHVibGlzaGVkICovXG4gIGFic3RyYWN0IGdldEFsbERyYWZ0cygpOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmRbXT5cbiAgYWJzdHJhY3QgZ2V0RHJhZnRzQ291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+XG4gIGFic3RyYWN0IGRyYWZ0c0NoYW5nZWQkOiBPYnNlcnZhYmxlPHZvaWQ+XG4gIGFic3RyYWN0IGhhc1JlY29yZENoYW5nZWRTaW5jZURyYWZ0KFxuICAgIGxvY2FsUmVjb3JkOiBDYXRhbG9nUmVjb3JkXG4gICk6IE9ic2VydmFibGU8eyB1c2VyOiBzdHJpbmc7IGRhdGU6IERhdGUgfT5cbiAgYWJzdHJhY3QgZ2V0UmVjb3JkUHVibGljYXRpb25TdGF0dXModXVpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPlxuICBhYnN0cmFjdCBnZXRBcHBsaWNhdGlvbkxhbmd1YWdlcygpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPlxufVxuIl19