geonetwork-ui 2.7.0-dev.b9840dab3 → 2.7.0-dev.ca6c4a2dc

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 (140) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +4 -7
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +20 -20
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +3 -3
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +3 -3
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +4 -4
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +5 -5
  8. package/esm2022/libs/api/repository/src/index.mjs +2 -2
  9. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +5 -5
  10. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +55 -12
  11. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +3 -3
  12. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +3 -3
  13. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +3 -3
  14. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +3 -3
  15. package/esm2022/libs/api/repository/src/lib/metadata-language.token.mjs +3 -0
  16. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +11 -1
  17. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +3 -3
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.mjs +55 -0
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +8 -3
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +2 -1
  21. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +77 -1
  22. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +3 -5
  23. package/esm2022/libs/feature/router/src/lib/default/state/query-params.utils.mjs +4 -3
  24. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +3 -2
  25. package/esm2022/libs/feature/search/src/lib/state/reducer.mjs +5 -2
  26. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  27. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +1 -4
  28. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +7 -7
  29. package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +1 -6
  30. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
  31. package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +2 -2
  32. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  33. package/esm2022/libs/util/app-config/src/lib/parse-utils.mjs +5 -4
  34. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +50 -9
  35. package/esm2022/libs/util/shared/src/lib/record/quality-score.util.mjs +9 -8
  36. package/esm2022/libs/util/shared/src/lib/utils/geojson.mjs +58 -1
  37. package/esm2022/translations/de.json +52 -20
  38. package/esm2022/translations/en.json +53 -21
  39. package/esm2022/translations/es.json +39 -7
  40. package/esm2022/translations/fr.json +57 -25
  41. package/esm2022/translations/it.json +52 -20
  42. package/esm2022/translations/nl.json +39 -7
  43. package/esm2022/translations/pt.json +39 -7
  44. package/esm2022/translations/sk.json +43 -11
  45. package/fesm2022/geonetwork-ui.mjs +3023 -2935
  46. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  47. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts.map +1 -1
  48. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +1 -1
  49. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  50. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +2 -2
  51. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  52. package/libs/api/repository/src/index.d.ts +1 -1
  53. package/libs/api/repository/src/index.d.ts.map +1 -1
  54. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -2
  55. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  56. package/libs/api/repository/src/lib/metadata-language.token.d.ts +5 -0
  57. package/libs/api/repository/src/lib/metadata-language.token.d.ts.map +1 -0
  58. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +5 -1
  59. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  60. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts.map +1 -1
  61. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.d.ts +20 -0
  62. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.d.ts.map +1 -0
  63. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -0
  64. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +1 -0
  66. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  67. package/libs/feature/editor/src/lib/fields.config.d.ts +8 -1
  68. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  69. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +2 -2
  70. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  71. package/libs/feature/router/src/lib/default/state/query-params.utils.d.ts.map +1 -1
  72. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  73. package/libs/feature/search/src/lib/state/reducer.d.ts.map +1 -1
  74. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +0 -1
  75. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  76. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
  77. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  78. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  79. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  80. package/libs/util/app-config/src/lib/parse-utils.d.ts.map +1 -1
  81. package/libs/util/i18n/src/lib/language-codes.d.ts +91 -31
  82. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  83. package/libs/util/shared/src/lib/record/quality-score.util.d.ts.map +1 -1
  84. package/libs/util/shared/src/lib/utils/geojson.d.ts +7 -2
  85. package/libs/util/shared/src/lib/utils/geojson.d.ts.map +1 -1
  86. package/package.json +11 -10
  87. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +3 -6
  88. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +47 -22
  89. package/src/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.ts +2 -2
  90. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +2 -2
  91. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +2 -2
  92. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +3 -3
  93. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +6 -6
  94. package/src/libs/api/repository/src/index.ts +1 -1
  95. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -4
  96. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +65 -14
  97. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +2 -2
  98. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +2 -2
  99. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +2 -2
  100. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +2 -2
  101. package/src/libs/api/repository/src/lib/metadata-language.token.ts +8 -0
  102. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +17 -1
  103. package/src/libs/feature/catalog/src/lib/sources/sources.service.ts +2 -5
  104. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.css +0 -0
  105. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.html +22 -0
  106. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.ts +57 -0
  107. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +6 -0
  108. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +5 -0
  109. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
  110. package/src/libs/feature/editor/src/lib/fields.config.ts +85 -1
  111. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -8
  112. package/src/libs/feature/router/src/lib/default/state/query-params.utils.ts +5 -2
  113. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +2 -1
  114. package/src/libs/feature/search/src/lib/state/reducer.ts +4 -1
  115. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +4 -1
  116. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +0 -4
  117. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +6 -6
  118. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +0 -6
  119. package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
  120. package/src/libs/util/app-config/src/lib/fixtures.ts +1 -1
  121. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  122. package/src/libs/util/app-config/src/lib/parse-utils.ts +4 -7
  123. package/src/libs/util/i18n/src/lib/language-codes.ts +62 -11
  124. package/src/libs/util/shared/src/lib/record/quality-score.util.ts +13 -10
  125. package/src/libs/util/shared/src/lib/utils/geojson.ts +72 -2
  126. package/translations/de.json +52 -20
  127. package/translations/en.json +53 -21
  128. package/translations/es.json +39 -7
  129. package/translations/fr.json +57 -25
  130. package/translations/it.json +52 -20
  131. package/translations/nl.json +39 -7
  132. package/translations/pt.json +39 -7
  133. package/translations/sk.json +43 -11
  134. package/esm2022/libs/api/repository/src/lib/metadata-language.mjs +0 -3
  135. package/esm2022/libs/util/app-config/src/lib/constants.mjs +0 -439
  136. package/libs/api/repository/src/lib/metadata-language.d.ts +0 -3
  137. package/libs/api/repository/src/lib/metadata-language.d.ts.map +0 -1
  138. package/libs/util/app-config/src/lib/constants.d.ts +0 -2
  139. package/libs/util/app-config/src/lib/constants.d.ts.map +0 -1
  140. package/src/libs/api/repository/src/lib/metadata-language.ts +0 -3
@@ -4,7 +4,7 @@ import { allChildrenElement, appendChildren, createChild, createElement, createN
4
4
  import { readKind } from './read-parts';
5
5
  import { writeGeometry } from './utils/geometry';
6
6
  import { namePartsToFull } from './utils/individual-name';
7
- import { getLang3FromLang2 } from '../../../../../../libs/util/i18n/src/lib/language-codes';
7
+ import { toLang3 } from '../../../../../../libs/util/i18n/src/lib/language-codes';
8
8
  import { kindToCodeListValue } from '../common/resource-types';
9
9
  function writeLocalizedElement(writeFn, text, translations, defaultLanguage) {
10
10
  if (!translations)
@@ -458,7 +458,7 @@ export function appendServiceOnlineResources(record, rootEl) {
458
458
  }
459
459
  export function writeOnlineResources(record, rootEl) {
460
460
  removeOnlineResources()(rootEl);
461
- if (record.kind === 'dataset') {
461
+ if (record.kind === 'dataset' || record.kind === 'reuse') {
462
462
  appendDatasetOnlineResources(record, rootEl);
463
463
  return;
464
464
  }
@@ -500,12 +500,12 @@ export function writeLanguages(record, rootEl) {
500
500
  if (!record.otherLanguages?.length) {
501
501
  return;
502
502
  }
503
- const createLanguageEl = (lang) => pipe(createNestedElement('gmd:locale', 'gmd:PT_Locale'), writeAttribute('id', lang.toUpperCase()), createNestedChild('gmd:languageCode', 'gmd:LanguageCode'), writeAttribute('codeList', 'http://www.loc.gov/standards/iso639-2/'), writeAttribute('codeListValue', getLang3FromLang2(lang) ?? lang));
503
+ const createLanguageEl = (lang) => pipe(createNestedElement('gmd:locale', 'gmd:PT_Locale'), writeAttribute('id', lang.toUpperCase()), createNestedChild('gmd:languageCode', 'gmd:LanguageCode'), writeAttribute('codeList', 'http://www.loc.gov/standards/iso639-2/'), writeAttribute('codeListValue', toLang3(lang) ?? lang));
504
504
  // add new languages (only if other than default one)
505
505
  appendChildren(createLanguageEl(record.defaultLanguage), ...record.otherLanguages.map(createLanguageEl))(rootEl);
506
506
  }
507
507
  export function writeDefaultLanguage(record, rootEl) {
508
- const lang3 = getLang3FromLang2(record.defaultLanguage.toLowerCase());
508
+ const lang3 = toLang3(record.defaultLanguage.toLowerCase());
509
509
  return pipe(findNestedChildOrCreate('gmd:language', 'gmd:LanguageCode'), writeAttribute('codeList', 'http://www.loc.gov/standards/iso639-2/'), writeAttribute('codeListValue', lang3))(rootEl);
510
510
  }
511
511
  export function writeResourceIdentifier(record, rootEl) {
@@ -513,4 +513,4 @@ export function writeResourceIdentifier(record, rootEl) {
513
513
  ? pipe(createNestedChild('gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), writeCharacterString(record.resourceIdentifier))
514
514
  : noop)(rootEl);
515
515
  }
516
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQkEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRXhDLE9BQU8sRUFFTCxXQUFXLEVBQ1gsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQTtBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUU5RCxTQUFTLHFCQUFxQixDQUM1QixPQUFrRCxFQUNsRCxJQUFZLEVBQ1osWUFBOEIsRUFDOUIsZUFBNkI7SUFFN0IsSUFBSSxDQUFDLFlBQVk7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsQ0FB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LGtCQUFrQjtRQUN2QixDQUFDLENBQUMsSUFBSSxDQUNGLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUNwRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FDaEQ7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2F0YWxvZ1JlY29yZCxcbiAgQ29uc3RyYWludCxcbiAgRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBEYXRhc2V0UmVjb3JkLFxuICBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgSW5kaXZpZHVhbCxcbiAgS2V5d29yZCxcbiAgTGFuZ3VhZ2VDb2RlLFxuICBSZWNvcmRTdGF0dXMsXG4gIFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgUmV1c2VSZWNvcmQsXG4gIFJvbGUsXG4gIFNlcnZpY2VFbmRwb2ludCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTZXJ2aWNlUmVjb3JkLFxuICBVcGRhdGVGcmVxdWVuY3lDb2RlLFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMvZm9ybWF0J1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGZpbHRlckFycmF5LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBub29wLFxuICBwaXBlLFxuICB0YXAsXG59IGZyb20gJy4uL2Z1bmN0aW9uLXV0aWxzJ1xuaW1wb3J0IHtcbiAgYWxsQ2hpbGRyZW5FbGVtZW50LFxuICBhcHBlbmRDaGlsZHJlbixcbiAgY3JlYXRlQ2hpbGQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZU5lc3RlZENoaWxkLFxuICBjcmVhdGVOZXN0ZWRFbGVtZW50LFxuICBmaW5kQ2hpbGRPckNyZWF0ZSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCxcbiAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIHJlYWRBdHRyaWJ1dGUsXG4gIHJlbW92ZUFsbENoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbixcbiAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUsXG4gIHNldFRleHRDb250ZW50LFxuICB3cml0ZUF0dHJpYnV0ZSxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEtpbmQgfSBmcm9tICcuL3JlYWQtcGFydHMnXG5pbXBvcnQgeyB3cml0ZUdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IG5hbWVQYXJ0c1RvRnVsbCB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgZ2V0TGFuZzNGcm9tTGFuZzIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMvbGliL2xhbmd1YWdlLWNvZGVzJ1xuaW1wb3J0IHsga2luZFRvQ29kZUxpc3RWYWx1ZSB9IGZyb20gJy4uL2NvbW1vbi9yZXNvdXJjZS10eXBlcydcblxuZnVuY3Rpb24gd3JpdGVMb2NhbGl6ZWRFbGVtZW50KFxuICB3cml0ZUZuOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PixcbiAgdGV4dDogc3RyaW5nLFxuICB0cmFuc2xhdGlvbnM6IEZpZWxkVHJhbnNsYXRpb24sXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIGlmICghdHJhbnNsYXRpb25zKVxuICAgIHJldHVybiBwaXBlKHdyaXRlRm4sIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6UFRfRnJlZVRleHQnKSkgLy8gSWYgbm8gdHJhbnNsYXRpb25zLCByZW1vdmUgZXhpc3RpbmcgaWYgYW55XG4gIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsaXplZChsYW5nOiBMYW5ndWFnZUNvZGUsIHRyYW5zbGF0aW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0ZXh0R3JvdXAnLCAnZ21kOkxvY2FsaXNlZENoYXJhY3RlclN0cmluZycpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2xvY2FsZScsIGAjJHtsYW5nLnRvVXBwZXJDYXNlKCl9YCksXG4gICAgICBzZXRUZXh0Q29udGVudCh0cmFuc2xhdGlvbilcbiAgICApXG4gIH1cbiAgcmV0dXJuIHBpcGUoXG4gICAgd3JpdGVGbixcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOlBUX0ZyZWVUZXh0JyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpQVF9GcmVlVGV4dCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgY3JlYXRlTG9jYWxpemVkKGRlZmF1bHRMYW5ndWFnZSwgdGV4dCksXG4gICAgICAuLi5PYmplY3QuZW50cmllcyh0cmFuc2xhdGlvbnMpLm1hcCgoW2xhbmcsIHRyYW5zbGF0aW9uXSkgPT5cbiAgICAgICAgY3JlYXRlTG9jYWxpemVkKGxhbmcsIHRyYW5zbGF0aW9uKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDaGFyYWN0ZXJTdHJpbmcoXG4gIHRleHQ6IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoZmluZENoaWxkT3JDcmVhdGUoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnKSwgc2V0VGV4dENvbnRlbnQodGV4dCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHdyaXRlTG9jYWxpemVkRWxlbWVudChcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyh0ZXh0KSxcbiAgICB0ZXh0LFxuICAgIHRyYW5zbGF0aW9ucyxcbiAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaW5rYWdlKFxuICB1cmw6IFVSTFxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmxpbmthZ2UnLCAnZ21kOlVSTCcpLFxuICAgICAgc2V0VGV4dENvbnRlbnQodXJsLnRvU3RyaW5nKCkpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUFuY2hvcihcbiAgdXJsOiBVUkwsXG4gIHRleHQ/OiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2dteDpBbmNob3InKSxcbiAgICAgIHdyaXRlQXR0cmlidXRlKCd4bGluazpocmVmJywgdXJsLnRvU3RyaW5nKCkpLFxuICAgICAgdGV4dCA/IHNldFRleHRDb250ZW50KHRleHQpIDogbm9vcFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gIHVybDogVVJMLFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHdyaXRlTG9jYWxpemVkRWxlbWVudChcbiAgICB3cml0ZUFuY2hvcih1cmwsIHRleHQpLFxuICAgIHRleHQsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIGRlZmF1bHRMYW5ndWFnZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURhdGVUaW1lKFxuICBkYXRlOiBEYXRlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGF0ZVRpbWUnKSxcbiAgICBzZXRUZXh0Q29udGVudChmb3JtYXQoZGF0ZSwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NcIikpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGF0ZShcbiAgZGF0ZTogRGF0ZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkRhdGUnKSxcbiAgICAgIHNldFRleHRDb250ZW50KGZvcm1hdChkYXRlLCAneXl5eS1NTS1kZCcpKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEZWNpbWFsKFxuICBkZWNpbWFsOiBudW1iZXJcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGVjaW1hbCcpLCBzZXRUZXh0Q29udGVudChkZWNpbWFsLnRvU3RyaW5nKCkpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9ncmVzc0NvZGUoc3RhdHVzOiBSZWNvcmRTdGF0dXMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICByZXR1cm4gJ2NvbXBsZXRlZCdcbiAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgIHJldHVybiAnZGVwcmVjYXRlZCdcbiAgICBjYXNlICdvbmdvaW5nJzpcbiAgICAgIHJldHVybiAnb25Hb2luZydcbiAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgIHJldHVybiAncmVtb3ZlZCdcbiAgICBjYXNlICd1bmRlcl9kZXZlbG9wbWVudCc6XG4gICAgICByZXR1cm4gJ3VuZGVyRGV2ZWxvcG1lbnQnXG4gICAgY2FzZSAncGxhbm5lZCc6XG4gICAgICByZXR1cm4gJ3BsYW5uZWQnXG4gICAgY2FzZSAncmVxdWlyZWQnOlxuICAgICAgcmV0dXJuICdyZXF1aXJlZCdcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBwcm9ncmVzcyBjb2RlIGZyb20gc3RhdHVzOiAke3N0YXR1c31gXG4gICAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvbGVDb2RlKHJvbGU6IFJvbGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHJvbGUpIHtcbiAgICBjYXNlICdhdXRob3InOlxuICAgICAgcmV0dXJuICdhdXRob3InXG4gICAgY2FzZSAnY29sbGFib3JhdG9yJzpcbiAgICAgIHJldHVybiAnY29sbGFib3JhdG9yJ1xuICAgIGNhc2UgJ2NvbnRyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnY29udHJpYnV0b3InXG4gICAgY2FzZSAnY3VzdG9kaWFuJzpcbiAgICAgIHJldHVybiAnY3VzdG9kaWFuJ1xuICAgIGNhc2UgJ2Rpc3RyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnZGlzdHJpYnV0b3InXG4gICAgY2FzZSAnZWRpdG9yJzpcbiAgICAgIHJldHVybiAnZWRpdG9yJ1xuICAgIGNhc2UgJ2Z1bmRlcic6XG4gICAgICByZXR1cm4gJ2Z1bmRlcidcbiAgICBjYXNlICdtZWRpYXRvcic6XG4gICAgICByZXR1cm4gJ21lZGlhdG9yJ1xuICAgIGNhc2UgJ29yaWdpbmF0b3InOlxuICAgICAgcmV0dXJuICdvcmlnaW5hdG9yJ1xuICAgIGNhc2UgJ290aGVyJzpcbiAgICAgIHJldHVybiAnb3RoZXInXG4gICAgY2FzZSAnb3duZXInOlxuICAgICAgcmV0dXJuICdvd25lcidcbiAgICBjYXNlICdwb2ludF9vZl9jb250YWN0JzpcbiAgICAgIHJldHVybiAncG9pbnRPZkNvbnRhY3QnXG4gICAgY2FzZSAncHJpbmNpcGFsX2ludmVzdGlnYXRvcic6XG4gICAgICByZXR1cm4gJ3ByaW5jaXBhbEludmVzdGlnYXRvcidcbiAgICBjYXNlICdwcm9jZXNzb3InOlxuICAgICAgcmV0dXJuICdwcm9jZXNzb3InXG4gICAgY2FzZSAncHVibGlzaGVyJzpcbiAgICAgIHJldHVybiAncHVibGlzaGVyJ1xuICAgIGNhc2UgJ3Jlc291cmNlX3Byb3ZpZGVyJzpcbiAgICAgIHJldHVybiAncmVzb3VyY2VQcm92aWRlcidcbiAgICBjYXNlICdyaWdodHNfaG9sZGVyJzpcbiAgICAgIHJldHVybiAncmlnaHRzSG9sZGVyJ1xuICAgIGNhc2UgJ3Nwb25zb3InOlxuICAgICAgcmV0dXJuICdzcG9uc29yJ1xuICAgIGNhc2UgJ3N0YWtlaG9sZGVyJzpcbiAgICAgIHJldHVybiAnc3Rha2Vob2xkZXInXG4gICAgY2FzZSAndW5zcGVjaWZpZWQnOlxuICAgICAgcmV0dXJuICd1bnNwZWNpZmllZCdcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiAndXNlcidcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHJvbGUgY29kZSBmcm9tIHJvbGU6ICR7cm9sZX1gKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlRGlzdHJpYnV0aW9uUHJvdG9jb2woXG4gIGRpc3RyaWJ1dGlvbjogRGF0YXNldFNlcnZpY2VEaXN0cmlidXRpb25cbik6IHN0cmluZyB7XG4gIHN3aXRjaCAoZGlzdHJpYnV0aW9uLmFjY2Vzc1NlcnZpY2VQcm90b2NvbC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnb2djZmVhdHVyZXMnOlxuICAgICAgcmV0dXJuICdPR0MgQVBJIEZlYXR1cmVzJ1xuICAgIGNhc2UgJ3dmcyc6XG4gICAgICByZXR1cm4gJ09HQzpXRlMnXG4gICAgY2FzZSAnd21zJzpcbiAgICAgIHJldHVybiAnT0dDOldNUydcbiAgICBjYXNlICd3cHMnOlxuICAgICAgcmV0dXJuICdPR0M6V1BTJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGlzdHJpYnV0aW9uLmFjY2Vzc1NlcnZpY2VQcm90b2NvbFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUoXG4gIHVwZGF0ZUZyZXF1ZW5jeTogVXBkYXRlRnJlcXVlbmN5Q29kZVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIHN3aXRjaCAodXBkYXRlRnJlcXVlbmN5KSB7XG4gICAgY2FzZSAnYXNOZWVkZWQnOlxuICAgICAgcmV0dXJuICdhc05lZWRlZCdcbiAgICBjYXNlICd1bmtub3duJzpcbiAgICAgIHJldHVybiAndW5rbm93bidcbiAgICBjYXNlICdpcnJlZ3VsYXInOlxuICAgICAgcmV0dXJuICdpcnJlZ3VsYXInXG4gICAgY2FzZSAnbm90UGxhbm5lZCc6XG4gICAgICByZXR1cm4gJ25vdFBsYW5uZWQnXG4gICAgY2FzZSAnY29udGludWFsJzpcbiAgICAgIHJldHVybiAnY29udGludWFsJ1xuICAgIGNhc2UgJ3BlcmlvZGljJzpcbiAgICAgIHJldHVybiAncGVyaW9kaWMnXG4gICAgY2FzZSAnZGFpbHknOlxuICAgICAgcmV0dXJuICdkYWlseSdcbiAgICBjYXNlICd3ZWVrbHknOlxuICAgICAgcmV0dXJuICd3ZWVrbHknXG4gICAgY2FzZSAnZm9ydG5pZ2h0bHknOlxuICAgICAgcmV0dXJuICdmb3J0bmlnaHRseSdcbiAgICBjYXNlICdtb250aGx5JzpcbiAgICAgIHJldHVybiAnbW9udGhseSdcbiAgICBjYXNlICdxdWFydGVybHknOlxuICAgICAgcmV0dXJuICdxdWFydGVybHknXG4gICAgY2FzZSAnYmlhbm51YWxseSc6XG4gICAgICByZXR1cm4gJ2JpYW5udWFsbHknXG4gICAgY2FzZSAnYW5udWFsbHknOlxuICAgICAgcmV0dXJuICdhbm51YWxseSdcbiAgICBjYXNlICdzZW1pbW9udGhseSc6XG4gICAgICByZXR1cm4gJ3NlbWltb250aGx5J1xuICAgIGNhc2UgJ2JpZW5uaWFsbHknOlxuICAgICAgcmV0dXJuICdiaWVubmlhbGx5J1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09EdXJhdGlvbih1cGRhdGVGcmVxdWVuY3k6IFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSk6IHN0cmluZyB7XG4gIGNvbnN0IGR1cmF0aW9uID0ge1xuICAgIHllYXJzOiAwLFxuICAgIG1vbnRoczogMCxcbiAgICB3ZWVrczogMCxcbiAgICBkYXlzOiAwLFxuICAgIGhvdXJzOiAwLFxuICB9XG4gIHN3aXRjaCAodXBkYXRlRnJlcXVlbmN5LnBlcikge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi5kYXlzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5ob3VycyA9IE1hdGgucm91bmQoMjQgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd3ZWVrJzpcbiAgICAgIGR1cmF0aW9uLmRheXMgPSBNYXRoLnJvdW5kKDcgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIC0gMC4wMDAxKSAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0ICcyIHRpbWVzIHBlciB3ZWVrJyA9ICdldmVyeSAzIGRheXMnXG4gICAgICBicmVha1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGlmICh1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIDw9IDEpIGR1cmF0aW9uLm1vbnRocyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24uZGF5cyA9IE1hdGgucm91bmQoMzAgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd5ZWFyJzpcbiAgICAgIGlmICh1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIDw9IDEpIGR1cmF0aW9uLnllYXJzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5tb250aHMgPSBNYXRoLnJvdW5kKDEyIC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gIH1cbiAgY29uc3QgaG91cnMgPSBkdXJhdGlvbi5ob3VycyA+IDAgPyBgVCR7ZHVyYXRpb24uaG91cnN9SGAgOiAnJ1xuICByZXR1cm4gYFAke2R1cmF0aW9uLnllYXJzfVkke2R1cmF0aW9uLm1vbnRoc31NJHtkdXJhdGlvbi5kYXlzfUQke2hvdXJzfWBcbn1cblxuZnVuY3Rpb24gYXBwZW5kUmVzcG9uc2libGVQYXJ0eShcbiAgY29udGFjdDogSW5kaXZpZHVhbCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnMsXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgY29uc3QgZnVsbE5hbWUgPSBuYW1lUGFydHNUb0Z1bGwoY29udGFjdC5maXJzdE5hbWUsIGNvbnRhY3QubGFzdE5hbWUpXG5cbiAgY29uc3QgY3JlYXRlQWRkcmVzcyA9IHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmFkZHJlc3MnLCAnZ21kOkNJX0FkZHJlc3MnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDplbGVjdHJvbmljTWFpbEFkZHJlc3MnKSxcbiAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5lbWFpbClcbiAgICAgIClcbiAgICApLFxuICAgIGNvbnRhY3QuYWRkcmVzc1xuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRlbGl2ZXJ5UG9pbnQnKSxcbiAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QuYWRkcmVzcylcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcFxuICApXG5cbiAgY29uc3QgY3JlYXRlQ29udGFjdCA9IHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3RJbmZvJywgJ2dtZDpDSV9Db250YWN0JyksXG4gICAgY29udGFjdC5waG9uZVxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnBob25lJywgJ2dtZDpDSV9UZWxlcGhvbmUnLCAnZ21kOnZvaWNlJyksXG4gICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LnBob25lKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wLFxuICAgIGFwcGVuZENoaWxkcmVuKGNyZWF0ZUFkZHJlc3MpLFxuICAgIGNvbnRhY3Qub3JnYW5pemF0aW9uPy53ZWJzaXRlXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6b25saW5lUmVzb3VyY2UnLCAnZ21kOkNJX09ubGluZVJlc291cmNlJyksXG4gICAgICAgICAgICB3cml0ZUxpbmthZ2UoY29udGFjdC5vcmdhbml6YXRpb24ud2Vic2l0ZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcFxuICApXG5cbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScpLFxuICAgICAgZnVsbE5hbWVcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDppbmRpdmlkdWFsTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhmdWxsTmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGNvbnRhY3QucG9zaXRpb25cbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpwb3NpdGlvbk5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5wb3NpdGlvbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcblxuICAgICAgY29udGFjdC5vcmdhbml6YXRpb24/Lm5hbWVcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvcmdhbmlzYXRpb25OYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgY3JlYXRlQ29udGFjdCxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6cm9sZScsICdnbWQ6Q0lfUm9sZUNvZGUnKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9Sb2xlQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZ2V0Um9sZUNvZGUoY29udGFjdC5yb2xlKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlS2V5d29yZHMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihwaXBlKGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRlc2NyaXB0aXZlS2V5d29yZHMnKSkpXG59XG5cbi8vIHJldHVybnMgYSA8Z21kOnRoZXNhdXJ1c05hbWU+IGVsZW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUaGVzYXVydXModGhlc2F1cnVzOiBUaGVzYXVydXNNb2RlbCkge1xuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6dGhlc2F1cnVzTmFtZScsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0aXRsZScpLFxuICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyh0aGVzYXVydXMubmFtZSB8fCB0aGVzYXVydXMuaWQpXG4gICAgICApLFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmlkZW50aWZpZXInLCAnZ21kOk1EX0lkZW50aWZpZXInKSxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpjb2RlJyksXG4gICAgICAgICAgICB0aGVzYXVydXMudXJsXG4gICAgICAgICAgICAgID8gd3JpdGVBbmNob3IodGhlc2F1cnVzLnVybCwgdGhlc2F1cnVzLmlkKVxuICAgICAgICAgICAgICA6IHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHRoZXNhdXJ1cy5pZClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZEtleXdvcmRzKFxuICBrZXl3b3JkczogS2V5d29yZFtdLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIC8vIGtleXdvcmRzIGFyZSBncm91cGVkIGJ5IHRoZXNhdXJ1cyBpZiB0aGV5IGhhdmUgb25lLCBvdGhlcndpc2UgYnkgdHlwZVxuICBjb25zdCBrZXl3b3Jkc0J5VGhlc2F1cnVzOiBLZXl3b3JkW11bXSA9IGtleXdvcmRzLnJlZHVjZSgoYWNjLCBrZXl3b3JkKSA9PiB7XG4gICAgY29uc3QgdGhlc2F1cnVzSWQgPSBrZXl3b3JkLnRoZXNhdXJ1cz8uaWRcbiAgICBjb25zdCB0eXBlID0ga2V5d29yZC50eXBlXG4gICAgbGV0IGV4aXN0aW5nR3JvdXAgPSBhY2MuZmluZCgoZ3JvdXApID0+XG4gICAgICB0aGVzYXVydXNJZFxuICAgICAgICA/IGdyb3VwWzBdLnRoZXNhdXJ1cz8uaWQgPT09IHRoZXNhdXJ1c0lkXG4gICAgICAgIDogZ3JvdXBbMF0udHlwZSA9PT0gdHlwZSAmJiAhZ3JvdXBbMF0udGhlc2F1cnVzXG4gICAgKVxuICAgIGlmICghZXhpc3RpbmdHcm91cCkge1xuICAgICAgZXhpc3RpbmdHcm91cCA9IFtdXG4gICAgICBhY2MucHVzaChleGlzdGluZ0dyb3VwKVxuICAgIH1cbiAgICBleGlzdGluZ0dyb3VwLnB1c2goa2V5d29yZClcbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdKVxuICByZXR1cm4gYXBwZW5kQ2hpbGRyZW4oXG4gICAgLi4ua2V5d29yZHNCeVRoZXNhdXJ1cy5tYXAoKGtleXdvcmRzKSA9PlxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmRlc2NyaXB0aXZlS2V5d29yZHMnLCAnZ21kOk1EX0tleXdvcmRzJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6dHlwZScsICdnbWQ6TURfS2V5d29yZFR5cGVDb2RlJyksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfS2V5d29yZFR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywga2V5d29yZHNbMF0udHlwZSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGtleXdvcmRzWzBdLnRoZXNhdXJ1c1xuICAgICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oY3JlYXRlVGhlc2F1cnVzKGtleXdvcmRzWzBdLnRoZXNhdXJ1cykpXG4gICAgICAgICAgOiBub29wLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAuLi5rZXl3b3Jkcy5tYXAoKGtleXdvcmQpID0+XG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6a2V5d29yZCcpLFxuICAgICAgICAgICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBrZXl3b3JkLmxhYmVsLFxuICAgICAgICAgICAgICAgIGtleXdvcmQudHJhbnNsYXRpb25zPy5sYWJlbCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludChcbiAgY29uc3RyYWludDogQ29uc3RyYWludCxcbiAgdHlwZTogJ2xlZ2FsJyB8ICdzZWN1cml0eScgfCAnb3RoZXInLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIGlmICh0eXBlID09PSAnc2VjdXJpdHknKSB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLFxuICAgICAgICAnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnXG4gICAgICApLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAgICdnbWQ6Y2xhc3NpZmljYXRpb24nLFxuICAgICAgICAgICAgJ2dtZDpNRF9DbGFzc2lmaWNhdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9DbGFzc2lmaWNhdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdyZXN0cmljdGVkJylcbiAgICAgICAgKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgICd1cmwnIGluIGNvbnN0cmFpbnRcbiAgICAgICAgICAgID8gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC51cmwsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsZWdhbCcpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJywgJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ290aGVyUmVzdHJpY3Rpb25zJylcbiAgICAgICAgKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICAgICd1cmwnIGluIGNvbnN0cmFpbnRcbiAgICAgICAgICAgID8gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC51cmwsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9XG4gIC8vIG90aGVyXG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLFxuICAgICAgJ2dtZDpNRF9Db25zdHJhaW50cycsXG4gICAgICAnZ21kOnVzZUxpbWl0YXRpb24nXG4gICAgKSxcbiAgICAndXJsJyBpbiBjb25zdHJhaW50XG4gICAgICA/IHdyaXRlTG9jYWxpemVkQW5jaG9yKFxuICAgICAgICAgIGNvbnN0cmFpbnQudXJsLFxuICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgKVxuICAgICAgOiB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlT3RoZXJDb25zdHJhaW50cygpIHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIG1hcEFycmF5KFxuICAgICAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0NvbnN0cmFpbnRzJyksXG4gICAgICAgICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICAgICAgICAgICAgKGFycmF5KSA9PiBhcnJheS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVNlY3VyaXR5Q29uc3RyYWludHMoKSB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBtYXBBcnJheShcbiAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJyksXG4gICAgICAgICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICAgICAgICAgICAgKGFycmF5KSA9PiBhcnJheS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxlZ2FsQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBtYXBBcnJheShcbiAgICAgICAgcmVtb3ZlQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgICAgICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuZXZlcnkoKGNvZGUpID0+IGNvZGUgIT09ICdsaWNlbnNlJylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShwaXBlKGFsbENoaWxkcmVuRWxlbWVudCwgKGFycmF5KSA9PiBhcnJheS5sZW5ndGggPT09IDApKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGljZW5zZXMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuc29tZSgoY29kZSkgPT4gY29kZSA9PT0gJ2xpY2Vuc2UnKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaWNlbnNlKFxuICBsaWNlbnNlOiBDb25zdHJhaW50LFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJywgJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLCAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgKSxcbiAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnbGljZW5zZScpXG4gICAgICApLFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJywgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICksXG4gICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ290aGVyUmVzdHJpY3Rpb25zJylcbiAgICAgICksXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICAndXJsJyBpbiBsaWNlbnNlXG4gICAgICAgICAgPyB3cml0ZUFuY2hvcihsaWNlbnNlLnVybCwgbGljZW5zZS50ZXh0KVxuICAgICAgICAgIDogd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgIGxpY2Vuc2UudGV4dCxcbiAgICAgICAgICAgICAgbGljZW5zZS50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlT25saW5lUmVzb3VyY2VzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpkaXN0cmlidXRpb25JbmZvJylcbn1cblxuZnVuY3Rpb24gYXBwZW5kT25saW5lUmVzb3VyY2VGb3JtYXQobWltZVR5cGU6IHN0cmluZykge1xuICByZXR1cm4gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25Gb3JtYXQnLCAnZ21kOk1EX0Zvcm1hdCcpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOm5hbWUnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcobWltZVR5cGUpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dmVyc2lvbicpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKCcxLjAnKSAvLyBoYXJkY29kaW5nIHRoaXMgYXMgaXQgbW9zdCBsaWtlbHkgd29uJ3QgYmUgdXNlZCBidXQgaXMgbWFuZGF0b3J5XG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpc3RyaWJ1dGlvbkluZm8oKSB7XG4gIHJldHVybiBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsICdnbWQ6TURfRGlzdHJpYnV0aW9uJylcbn1cblxuLy8gYXBwbHkgdG8gTURfRGlzdHJpYnV0aW9uXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kT25saW5lUmVzb3VyY2UoXG4gIG9ubGluZVJlc291cmNlOiBEYXRhc2V0T25saW5lUmVzb3VyY2UsXG4gIGFwcGVuZEZvcm1hdEZuOiAoXG4gICAgbWltZVR5cGU6IHN0cmluZ1xuICApID0+IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICBsZXQgbmFtZTogc3RyaW5nXG4gIGxldCBmdW5jdGlvbkNvZGU6IHN0cmluZ1xuICBsZXQgcHJvdG9jb2w6IHN0cmluZ1xuICBpZiAob25saW5lUmVzb3VyY2UudHlwZSA9PT0gJ3NlcnZpY2UnKSB7XG4gICAgLy8gc2hvdWxkIHdlIGtlZXAgdGhlIGlkZW50aWZpZXJJblNlcnZpY2U/IHJlYWQtd3JpdGUgZHVwbGljYXRlIHdpdGggbmFtZVxuICAgIG5hbWUgPSBvbmxpbmVSZXNvdXJjZS5pZGVudGlmaWVySW5TZXJ2aWNlIC8vIHRoaXMgaXMgZm9yIEdlb05ldHdvcmsgdG8ga25vdyB0aGUgbGF5ZXIgbmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9IGdldFNlcnZpY2VEaXN0cmlidXRpb25Qcm90b2NvbChvbmxpbmVSZXNvdXJjZSlcbiAgfSBlbHNlIGlmIChvbmxpbmVSZXNvdXJjZS50eXBlID09PSAnZG93bmxvYWQnKSB7XG4gICAgbmFtZSA9IG9ubGluZVJlc291cmNlLm5hbWVcbiAgICBmdW5jdGlvbkNvZGUgPSAnZG93bmxvYWQnXG4gICAgcHJvdG9jb2wgPSAnV1dXOkRPV05MT0FEJ1xuICB9IGVsc2Uge1xuICAgIG5hbWUgPSBvbmxpbmVSZXNvdXJjZS5uYW1lXG4gICAgZnVuY3Rpb25Db2RlID0gJ2luZm9ybWF0aW9uJ1xuICAgIHByb3RvY29sID0gJ1dXVzpMSU5LJ1xuICB9XG4gIGNvbnN0IGFwcGVuZFRyYW5zZmVyT3B0aW9ucyA9IGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOnRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICAgICksXG4gICAgICB3cml0ZUxpbmthZ2Uob25saW5lUmVzb3VyY2UudXJsKSxcbiAgICAgICdkZXNjcmlwdGlvbicgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgICBvbmxpbmVSZXNvdXJjZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBvbmxpbmVSZXNvdXJjZS50cmFuc2xhdGlvbnM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBuYW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgb25saW5lUmVzb3VyY2UudHJhbnNsYXRpb25zPy5uYW1lLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocHJvdG9jb2wpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX09uTGluZUZ1bmN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZnVuY3Rpb25Db2RlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgICdtaW1lVHlwZScgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgID8gYXBwZW5kRm9ybWF0Rm4ob25saW5lUmVzb3VyY2UubWltZVR5cGUpXG4gICAgICA6IG5vb3AsXG4gICAgYXBwZW5kVHJhbnNmZXJPcHRpb25zXG4gIClcbn1cblxuLyoqXG4gKiBMb29rcyBmb3Igc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbiBvciBnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uIGVsZW1lbnRcbiAqIGRlcGVuZGluZyBvbiByZWNvcmQgdHlwZSwgY3JlYXRlIGlmIG1pc3NpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCkge1xuICByZXR1cm4gKHJvb3RFbDogWG1sRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGtpbmQgPSByZWFkS2luZChyb290RWwpXG4gICAgbGV0IGVsdE5hbWUgPSAnZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbidcbiAgICBpZiAoa2luZCA9PT0gJ3NlcnZpY2UnKSBlbHROYW1lID0gJ3NydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24nXG4gICAgcmV0dXJuIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6aWRlbnRpZmljYXRpb25JbmZvJywgZWx0TmFtZSkocm9vdEVsKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3JDcmVhdGVEaXN0cmlidXRpb24oKSB7XG4gIHJldHVybiAocm9vdEVsOiBYbWxFbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkaXN0cmlidXRpb25JbmZvJyxcbiAgICAgICdnbWQ6TURfRGlzdHJpYnV0aW9uJ1xuICAgICkocm9vdEVsKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVuaXF1ZUlkZW50aWZpZXIoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmZpbGVJZGVudGlmaWVyJyksXG4gICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVLaW5kKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpoaWVyYXJjaHlMZXZlbCcsICdnbWQ6TURfU2NvcGVDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfU2NvcGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBraW5kVG9Db2RlTGlzdFZhbHVlKHJlY29yZCkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUaXRsZShyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICByZWNvcmQudGl0bGUsXG4gICAgICByZWNvcmQudHJhbnNsYXRpb25zPy50aXRsZSxcbiAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVBYnN0cmFjdChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDphYnN0cmFjdCcpLFxuICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgcmVjb3JkLmFic3RyYWN0LFxuICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucz8uYWJzdHJhY3QsXG4gICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3RhdHVzKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOnN0YXR1cycsICdnbWQ6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUHJvZ3Jlc3NDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRQcm9ncmVzc0NvZGUocmVjb3JkLnN0YXR1cykpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Y29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoXG4gICAgICAgICAgICBjb250YWN0LFxuICAgICAgICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0c0ZvclJlc291cmNlKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnBvaW50T2ZDb250YWN0JyksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpjb250YWN0JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuY29udGFjdHNGb3JSZXNvdXJjZS5tYXAoKGNvbnRhY3QpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnBvaW50T2ZDb250YWN0JyksXG4gICAgICAgICAgYXBwZW5kUmVzcG9uc2libGVQYXJ0eShcbiAgICAgICAgICAgIGNvbnRhY3QsXG4gICAgICAgICAgICByZWNvcmQudHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtleXdvcmRzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVLZXl3b3JkcygpLFxuICAgIGFwcGVuZEtleXdvcmRzKHJlY29yZC5rZXl3b3JkcywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRvcGljcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDp0b3BpY0NhdGVnb3J5JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQudG9waWNzLm1hcCgodG9waWMpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnRvcGljQ2F0ZWdvcnknLCAnZ21kOk1EX1RvcGljQ2F0ZWdvcnlDb2RlJyksXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQodG9waWMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaWNlbnNlcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlTGljZW5zZXMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5saWNlbnNlcy5tYXAoKGxpY2Vuc2UpID0+XG4gICAgICAgIGNyZWF0ZUxpY2Vuc2UobGljZW5zZSwgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMZWdhbENvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVMZWdhbENvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQubGVnYWxDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ2xlZ2FsJywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc2VjdXJpdHlDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ3NlY3VyaXR5JywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPdGhlckNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCksXG4gICAgcmVtb3ZlRW1wdHlSZXNvdXJjZUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQub3RoZXJDb25zdHJhaW50cy5tYXAoKGMpID0+XG4gICAgICAgIGNyZWF0ZUNvbnN0cmFpbnQoYywgJ290aGVyJywgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZSlcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVcGRhdGVGcmVxdWVuY3koXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6cmVzb3VyY2VNYWludGVuYW5jZScpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpNRF9NYWludGVuYW5jZUluZm9ybWF0aW9uJyksXG4gICAgdHlwZW9mIHJlY29yZC51cGRhdGVGcmVxdWVuY3kgPT09ICdvYmplY3QnXG4gICAgICA/IHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICAgICAnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knLFxuICAgICAgICAgICAgJ2d0czpUTV9QZXJpb2REdXJhdGlvbidcbiAgICAgICAgICApLFxuICAgICAgICAgIHNldFRleHRDb250ZW50KGdldElTT0R1cmF0aW9uKHJlY29yZC51cGRhdGVGcmVxdWVuY3kpKVxuICAgICAgICApXG4gICAgICA6IHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICAgICAnZ21kOm1haW50ZW5hbmNlQW5kVXBkYXRlRnJlcXVlbmN5JyxcbiAgICAgICAgICAgICdnbWQ6TURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3RWYWx1ZScsXG4gICAgICAgICAgICBnZXRNYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUocmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlY29yZFVwZGF0ZWQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmRhdGVTdGFtcCcpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgd3JpdGVEYXRlVGltZShyZWNvcmQucmVjb3JkVXBkYXRlZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVSZXNvdXJjZURhdGUoXG4gIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRhdGUnKSxcbiAgICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAnZ21kOkNJX0RhdGUnLFxuICAgICAgICAgICAgICAnZ21kOmRhdGVUeXBlJyxcbiAgICAgICAgICAgICAgJ2dtZDpDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRSZXNvdXJjZURhdGUoXG4gIGRhdGU6IERhdGUsXG4gIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkYXRlJywgJ2dtZDpDSV9EYXRlJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOmRhdGUnKSwgd3JpdGVEYXRlVGltZShkYXRlKSksXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkYXRlVHlwZScsICdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJyksXG4gICAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgdHlwZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VDcmVhdGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlQ3JlYXRlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VDcmVhdGVkLCAnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlVXBkYXRlZChcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVSZXNvdXJjZURhdGUoJ3JldmlzaW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZXNvdXJjZVVwZGF0ZWQpIHJldHVyblxuICBhcHBlbmRSZXNvdXJjZURhdGUocmVjb3JkLnJlc291cmNlVXBkYXRlZCwgJ3JldmlzaW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZVB1Ymxpc2hlZChcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVSZXNvdXJjZURhdGUoJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxuICBpZiAoIXJlY29yZC5yZXNvdXJjZVB1Ymxpc2hlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VQdWJsaXNoZWQsICdwdWJsaWNhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmV1c2VUeXBlKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHdyaXRlS2luZChyZWNvcmQsIHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3BhdGlhbFJlcHJlc2VudGF0aW9uKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGlmICghcmVjb3JkLnNwYXRpYWxSZXByZXNlbnRhdGlvbikge1xuICAgIHBpcGUoXG4gICAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJylcbiAgICApKHJvb3RFbClcbiAgICByZXR1cm5cbiAgfVxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCByZWNvcmQuc3BhdGlhbFJlcHJlc2VudGF0aW9uKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlR3JhcGhpY092ZXJ2aWV3cyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpncmFwaGljT3ZlcnZpZXcnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5vdmVydmlld3NcbiAgICAgICAgLmZpbHRlcigob3ZlcnZpZXcpID0+IG92ZXJ2aWV3LnVybClcbiAgICAgICAgLm1hcCgob3ZlcnZpZXcpID0+XG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpncmFwaGljT3ZlcnZpZXcnLCAnZ21kOk1EX0Jyb3dzZUdyYXBoaWMnKSxcbiAgICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmaWxlTmFtZScpLFxuICAgICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG92ZXJ2aWV3LnVybC50b1N0cmluZygpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyBpbiBvdmVydmlld1xuICAgICAgICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmZpbGVEZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvdmVydmlldy5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogbm9vcFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxpbmVhZ2UocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdnbWQ6ZGF0YVF1YWxpdHlJbmZvJyxcbiAgICAgICdnbWQ6RFFfRGF0YVF1YWxpdHknLFxuICAgICAgJ2dtZDpsaW5lYWdlJyxcbiAgICAgICdnbWQ6TElfTGluZWFnZScsXG4gICAgICAnZ21kOnN0YXRlbWVudCdcbiAgICApLFxuICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgcmVjb3JkLmxpbmVhZ2UsXG4gICAgICByZWNvcmQudHJhbnNsYXRpb25zPy5saW5lYWdlLFxuICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlRW5kcG9pbnRQcm90b2NvbChlbmRwb2ludDogU2VydmljZUVuZHBvaW50KTogc3RyaW5nIHtcbiAgc3dpdGNoIChlbmRwb2ludC5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3dmcyc6XG4gICAgICByZXR1cm4gJ09HQzpXRlMnXG4gICAgY2FzZSAnd21zJzpcbiAgICAgIHJldHVybiAnT0dDOldNUydcbiAgICBjYXNlICd3cHMnOlxuICAgICAgcmV0dXJuICdPR0M6V1BTJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZW5kcG9pbnQuYWNjZXNzU2VydmljZVByb3RvY29sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9ubGluZVJlc291cmNlKG9ubGluZVJlc291cmNlOiBTZXJ2aWNlT25saW5lUmVzb3VyY2UpIHtcbiAgbGV0IGxpbmthZ2VVcmwsIGZ1bmN0aW9uQ29kZSwgcHJvdG9jb2xcbiAgaWYgKG9ubGluZVJlc291cmNlLnR5cGUgPT09ICdlbmRwb2ludCcpIHtcbiAgICBsaW5rYWdlVXJsID0gb25saW5lUmVzb3VyY2UudXJsLnRvU3RyaW5nKClcbiAgICBwcm90b2NvbCA9IGdldFNlcnZpY2VFbmRwb2ludFByb3RvY29sKG9ubGluZVJlc291cmNlKVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgfSBlbHNlIHtcbiAgICBsaW5rYWdlVXJsID0gb25saW5lUmVzb3VyY2UudXJsLnRvU3RyaW5nKClcbiAgICBmdW5jdGlvbkNvZGUgPSAnaW5mb3JtYXRpb24nXG4gICAgcHJvdG9jb2wgPSAnV1dXOkxJTksnXG4gIH1cbiAgY29uc3QgYXBwZW5kVHJhbnNmZXJPcHRpb25zID0gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0cmFuc2Zlck9wdGlvbnMnKSxcbiAgICAgIGNyZWF0ZU5lc3RlZENoaWxkKFxuICAgICAgICAnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnLFxuICAgICAgICAnZ21kOm9uTGluZScsXG4gICAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgICApLFxuICAgICAgd3JpdGVMaW5rYWdlKGxpbmthZ2VVcmwpLFxuICAgICAgJ2Rlc2NyaXB0aW9uJyBpbiBvbmxpbmVSZXNvdXJjZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG9ubGluZVJlc291cmNlLmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgJ25hbWUnIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvbmxpbmVSZXNvdXJjZS5uYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOnByb3RvY29sJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHByb3RvY29sKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9PbkxpbmVGdW5jdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGZ1bmN0aW9uQ29kZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsICdnbWQ6TURfRGlzdHJpYnV0aW9uJyksXG4gICAgYXBwZW5kVHJhbnNmZXJPcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERhdGFzZXRPbmxpbmVSZXNvdXJjZXMoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgLi4ucmVjb3JkLm9ubGluZVJlc291cmNlcy5tYXAoKGQpID0+XG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVEaXN0cmlidXRpb25JbmZvKCksXG4gICAgICAgIGFwcGVuZE9ubGluZVJlc291cmNlKFxuICAgICAgICAgIGQsXG4gICAgICAgICAgYXBwZW5kT25saW5lUmVzb3VyY2VGb3JtYXQsXG4gICAgICAgICAgcmVjb3JkLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kU2VydmljZU9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBTZXJ2aWNlUmVjb3JkIHwgUmV1c2VSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGFwcGVuZENoaWxkcmVuKC4uLnJlY29yZC5vbmxpbmVSZXNvdXJjZXMubWFwKGNyZWF0ZU9ubGluZVJlc291cmNlKSkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPbmxpbmVSZXNvdXJjZXMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlT25saW5lUmVzb3VyY2VzKCkocm9vdEVsKVxuXG4gIGlmIChyZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgYXBwZW5kRGF0YXNldE9ubGluZVJlc291cmNlcyhyZWNvcmQsIHJvb3RFbClcbiAgICByZXR1cm5cbiAgfVxuICBhcHBlbmRTZXJ2aWNlT25saW5lUmVzb3VyY2VzKHJlY29yZCwgcm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUZW1wb3JhbEV4dGVudHMoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnRlbXBvcmFsRWxlbWVudCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnRlbXBvcmFsRXh0ZW50cy5tYXAoKGV4dGVudCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6dGVtcG9yYWxFbGVtZW50JywgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgJ3N0YXJ0JyBpbiBleHRlbnQgJiYgJ2VuZCcgaW4gZXh0ZW50XG4gICAgICAgICAgICAgID8gcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpleHRlbnQnLCAnZ21sOlRpbWVQZXJpb2QnKSxcbiAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtbDpiZWdpblBvc2l0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudC5zdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNldFRleHRDb250ZW50KGZvcm1hdChleHRlbnQuc3RhcnQsICd5eXl5LU1NLWRkJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogd3JpdGVBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21sOmVuZFBvc2l0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudC5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXRUZXh0Q29udGVudChmb3JtYXQoZXh0ZW50LmVuZCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3cml0ZUF0dHJpYnV0ZSgnaW5kZXRlcm1pbmF0ZVBvc2l0aW9uJywgJ3Vua25vd24nKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBwaXBlKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZ21sOlRpbWVJbnN0YW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2dtbDp0aW1lUG9zaXRpb24nXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgZXh0ZW50LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5zdGFydCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgOiB3cml0ZUF0dHJpYnV0ZSgnaW5kZXRlcm1pbmF0ZVBvc2l0aW9uJywgJ3Vua25vd24nKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTcGF0aWFsRXh0ZW50cyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBjb25zdCBhcHBlbmRCb3VuZGluZ1BvbHlnb24gPSAoZ2VvbWV0cnk/OiBHZW9tZXRyeSkgPT4ge1xuICAgIGlmICghZ2VvbWV0cnkpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6RVhfQm91bmRpbmdQb2x5Z29uJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9seWdvbicpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKCgpID0+IHdyaXRlR2VvbWV0cnkoZ2VvbWV0cnkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgY29uc3QgYXBwZW5kR2VvZ3JhcGhpY0JvdW5kaW5nQm94ID0gKFxuICAgIGJib3g/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxuICApID0+IHtcbiAgICBpZiAoIWJib3gpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6RVhfR2VvZ3JhcGhpY0JvdW5kaW5nQm94JyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6d2VzdEJvdW5kTG9uZ2l0dWRlJyksIHdyaXRlRGVjaW1hbChiYm94WzBdKSksXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOmVhc3RCb3VuZExvbmdpdHVkZScpLCB3cml0ZURlY2ltYWwoYmJveFsyXSkpLFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpzb3V0aEJvdW5kTGF0aXR1ZGUnKSwgd3JpdGVEZWNpbWFsKGJib3hbMV0pKSxcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6bm9ydGhCb3VuZExhdGl0dWRlJyksIHdyaXRlRGVjaW1hbChiYm94WzNdKSlcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBjb25zdCBhcHBlbmRHZW9ncmFwaGljRGVzY3JpcHRpb24gPSAoXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgdHJhbnNsYXRpb25zPzogRmllbGRUcmFuc2xhdGlvblxuICApID0+IHtcbiAgICBpZiAoIWRlc2NyaXB0aW9uKSByZXR1cm4gbnVsbFxuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDpFWF9HZW9ncmFwaGljRGVzY3JpcHRpb24nLFxuICAgICAgICAnZ21kOmdlb2dyYXBoaWNJZGVudGlmaWVyJyxcbiAgICAgICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAgICAgJ2dtZDpjb2RlJ1xuICAgICAgKSxcbiAgICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmdlb2dyYXBoaWNFbGVtZW50JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc3BhdGlhbEV4dGVudHMubWFwKChleHRlbnQpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmdlb2dyYXBoaWNFbGVtZW50JyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBhcHBlbmRCb3VuZGluZ1BvbHlnb24oZXh0ZW50Lmdlb21ldHJ5KSxcbiAgICAgICAgICAgIGFwcGVuZEdlb2dyYXBoaWNCb3VuZGluZ0JveChleHRlbnQuYmJveCksXG4gICAgICAgICAgICBhcHBlbmRHZW9ncmFwaGljRGVzY3JpcHRpb24oXG4gICAgICAgICAgICAgIGV4dGVudC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgZXh0ZW50LnRyYW5zbGF0aW9ucz8uZGVzY3JpcHRpb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMYW5ndWFnZXMocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgLy8gY2xlYXIgZXhpc3RpbmdcbiAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpsb2NhbGUnKShyb290RWwpXG5cbiAgLy8gZG8gbm90IHdyaXRlIGRvd24gbGFuZ3VhZ2VzIGlmIHRoZXJlIGlzIG5vdGhpbmcgZWxzZSB0aGFuIHRoZSBkZWZhdWx0IG9uZVxuICBpZiAoIXJlY29yZC5vdGhlckxhbmd1YWdlcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBjcmVhdGVMYW5ndWFnZUVsID0gKGxhbmc6IExhbmd1YWdlQ29kZSkgPT5cbiAgICBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmxvY2FsZScsICdnbWQ6UFRfTG9jYWxlJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnaWQnLCBsYW5nLnRvVXBwZXJDYXNlKCkpLFxuICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoJ2dtZDpsYW5ndWFnZUNvZGUnLCAnZ21kOkxhbmd1YWdlQ29kZScpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0JywgJ2h0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGdldExhbmczRnJvbUxhbmcyKGxhbmcpID8/IGxhbmcpXG4gICAgKVxuXG4gIC8vIGFkZCBuZXcgbGFuZ3VhZ2VzIChvbmx5IGlmIG90aGVyIHRoYW4gZGVmYXVsdCBvbmUpXG4gIGFwcGVuZENoaWxkcmVuKFxuICAgIGNyZWF0ZUxhbmd1YWdlRWwocmVjb3JkLmRlZmF1bHRMYW5ndWFnZSksXG4gICAgLi4ucmVjb3JkLm90aGVyTGFuZ3VhZ2VzLm1hcChjcmVhdGVMYW5ndWFnZUVsKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGVmYXVsdExhbmd1YWdlKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGNvbnN0IGxhbmczID0gZ2V0TGFuZzNGcm9tTGFuZzIocmVjb3JkLmRlZmF1bHRMYW5ndWFnZS50b0xvd2VyQ2FzZSgpKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmxhbmd1YWdlJywgJ2dtZDpMYW5ndWFnZUNvZGUnKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3QnLCAnaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi8nKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGxhbmczKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VJZGVudGlmaWVyKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6aWRlbnRpZmllcicpLFxuICAgIHJlY29yZC5yZXNvdXJjZUlkZW50aWZpZXJcbiAgICAgID8gcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRDaGlsZCgnZ21kOmlkZW50aWZpZXInLCAnZ21kOk1EX0lkZW50aWZpZXInLCAnZ21kOmNvZGUnKSxcbiAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQucmVzb3VyY2VJZGVudGlmaWVyKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKShyb290RWwpXG59XG4iXX0=
516
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQkEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRXhDLE9BQU8sRUFFTCxXQUFXLEVBQ1gsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEVBQ0osSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seURBQXlELENBQUE7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFOUQsU0FBUyxxQkFBcUIsQ0FDNUIsT0FBa0QsRUFDbEQsSUFBWSxFQUNaLFlBQThCLEVBQzlCLGVBQTZCO0lBRTdCLElBQUksQ0FBQyxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUMs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QWdCLENBQUMsRUFDdEMsTUFBTSxDQUFDLGtCQUFrQjtRQUN2QixDQUFDLENBQUMsSUFBSSxDQUNGLGlCQUFpQixDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxFQUNwRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FDaEQ7UUFDSCxDQUFDLENBQUMsSUFBSSxDQUNULENBQUMsTUFBTSxDQUFDLENBQUE7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2F0YWxvZ1JlY29yZCxcbiAgQ29uc3RyYWludCxcbiAgRGF0YXNldE9ubGluZVJlc291cmNlLFxuICBEYXRhc2V0UmVjb3JkLFxuICBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgSW5kaXZpZHVhbCxcbiAgS2V5d29yZCxcbiAgTGFuZ3VhZ2VDb2RlLFxuICBSZWNvcmRTdGF0dXMsXG4gIFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgUmV1c2VSZWNvcmQsXG4gIFJvbGUsXG4gIFNlcnZpY2VFbmRwb2ludCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTZXJ2aWNlUmVjb3JkLFxuICBVcGRhdGVGcmVxdWVuY3lDb2RlLFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMvZm9ybWF0J1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGZpbHRlckFycmF5LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBub29wLFxuICBwaXBlLFxuICB0YXAsXG59IGZyb20gJy4uL2Z1bmN0aW9uLXV0aWxzJ1xuaW1wb3J0IHtcbiAgYWxsQ2hpbGRyZW5FbGVtZW50LFxuICBhcHBlbmRDaGlsZHJlbixcbiAgY3JlYXRlQ2hpbGQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZU5lc3RlZENoaWxkLFxuICBjcmVhdGVOZXN0ZWRFbGVtZW50LFxuICBmaW5kQ2hpbGRPckNyZWF0ZSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCxcbiAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIHJlYWRBdHRyaWJ1dGUsXG4gIHJlbW92ZUFsbENoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbixcbiAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUsXG4gIHNldFRleHRDb250ZW50LFxuICB3cml0ZUF0dHJpYnV0ZSxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEtpbmQgfSBmcm9tICcuL3JlYWQtcGFydHMnXG5pbXBvcnQgeyB3cml0ZUdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IG5hbWVQYXJ0c1RvRnVsbCB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgdG9MYW5nMyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9pMThuL3NyYy9saWIvbGFuZ3VhZ2UtY29kZXMnXG5pbXBvcnQgeyBraW5kVG9Db2RlTGlzdFZhbHVlIH0gZnJvbSAnLi4vY29tbW9uL3Jlc291cmNlLXR5cGVzJ1xuXG5mdW5jdGlvbiB3cml0ZUxvY2FsaXplZEVsZW1lbnQoXG4gIHdyaXRlRm46IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+LFxuICB0ZXh0OiBzdHJpbmcsXG4gIHRyYW5zbGF0aW9uczogRmllbGRUcmFuc2xhdGlvbixcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgaWYgKCF0cmFuc2xhdGlvbnMpXG4gICAgcmV0dXJuIHBpcGUod3JpdGVGbiwgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpQVF9GcmVlVGV4dCcpKSAvLyBJZiBubyB0cmFuc2xhdGlvbnMsIHJlbW92ZSBleGlzdGluZyBpZiBhbnlcbiAgZnVuY3Rpb24gY3JlYXRlTG9jYWxpemVkKGxhbmc6IExhbmd1YWdlQ29kZSwgdHJhbnNsYXRpb246IHN0cmluZykge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnRleHRHcm91cCcsICdnbWQ6TG9jYWxpc2VkQ2hhcmFjdGVyU3RyaW5nJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnbG9jYWxlJywgYCMke2xhbmcudG9VcHBlckNhc2UoKX1gKSxcbiAgICAgIHNldFRleHRDb250ZW50KHRyYW5zbGF0aW9uKVxuICAgIClcbiAgfVxuICByZXR1cm4gcGlwZShcbiAgICB3cml0ZUZuLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6UFRfRnJlZVRleHQnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOlBUX0ZyZWVUZXh0JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBjcmVhdGVMb2NhbGl6ZWQoZGVmYXVsdExhbmd1YWdlLCB0ZXh0KSxcbiAgICAgIC4uLk9iamVjdC5lbnRyaWVzKHRyYW5zbGF0aW9ucykubWFwKChbbGFuZywgdHJhbnNsYXRpb25dKSA9PlxuICAgICAgICBjcmVhdGVMb2NhbGl6ZWQobGFuZywgdHJhbnNsYXRpb24pXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNoYXJhY3RlclN0cmluZyhcbiAgdGV4dDogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkNoYXJhY3RlclN0cmluZycpLCBzZXRUZXh0Q29udGVudCh0ZXh0KSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gIHRleHQ6IHN0cmluZyxcbiAgdHJhbnNsYXRpb25zOiBGaWVsZFRyYW5zbGF0aW9uLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gd3JpdGVMb2NhbGl6ZWRFbGVtZW50KFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHRleHQpLFxuICAgIHRleHQsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIGRlZmF1bHRMYW5ndWFnZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxpbmthZ2UoXG4gIHVybDogVVJMXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6bGlua2FnZScsICdnbWQ6VVJMJyksXG4gICAgICBzZXRUZXh0Q29udGVudCh1cmwudG9TdHJpbmcoKSlcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQW5jaG9yKFxuICB1cmw6IFVSTCxcbiAgdGV4dD86IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ214OkFuY2hvcicpLFxuICAgICAgd3JpdGVBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnLCB1cmwudG9TdHJpbmcoKSksXG4gICAgICB0ZXh0ID8gc2V0VGV4dENvbnRlbnQodGV4dCkgOiBub29wXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxvY2FsaXplZEFuY2hvcihcbiAgdXJsOiBVUkwsXG4gIHRleHQ6IHN0cmluZyxcbiAgdHJhbnNsYXRpb25zOiBGaWVsZFRyYW5zbGF0aW9uLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gd3JpdGVMb2NhbGl6ZWRFbGVtZW50KFxuICAgIHdyaXRlQW5jaG9yKHVybCwgdGV4dCksXG4gICAgdGV4dCxcbiAgICB0cmFuc2xhdGlvbnMsXG4gICAgZGVmYXVsdExhbmd1YWdlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGF0ZVRpbWUoXG4gIGRhdGU6IERhdGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2djbzpEYXRlVGltZScpLFxuICAgIHNldFRleHRDb250ZW50KGZvcm1hdChkYXRlLCBcInl5eXktTU0tZGQnVCdISDptbTpzc1wiKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEYXRlKFxuICBkYXRlOiBEYXRlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGF0ZScpLFxuICAgICAgc2V0VGV4dENvbnRlbnQoZm9ybWF0KGRhdGUsICd5eXl5LU1NLWRkJykpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURlY2ltYWwoXG4gIGRlY2ltYWw6IG51bWJlclxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoZmluZENoaWxkT3JDcmVhdGUoJ2djbzpEZWNpbWFsJyksIHNldFRleHRDb250ZW50KGRlY2ltYWwudG9TdHJpbmcoKSkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2dyZXNzQ29kZShzdGF0dXM6IFJlY29yZFN0YXR1cyk6IHN0cmluZyB7XG4gIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgIHJldHVybiAnY29tcGxldGVkJ1xuICAgIGNhc2UgJ2RlcHJlY2F0ZWQnOlxuICAgICAgcmV0dXJuICdkZXByZWNhdGVkJ1xuICAgIGNhc2UgJ29uZ29pbmcnOlxuICAgICAgcmV0dXJuICdvbkdvaW5nJ1xuICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgcmV0dXJuICdyZW1vdmVkJ1xuICAgIGNhc2UgJ3VuZGVyX2RldmVsb3BtZW50JzpcbiAgICAgIHJldHVybiAndW5kZXJEZXZlbG9wbWVudCdcbiAgICBjYXNlICdwbGFubmVkJzpcbiAgICAgIHJldHVybiAncGxhbm5lZCdcbiAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICByZXR1cm4gJ3JlcXVpcmVkJ1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHByb2dyZXNzIGNvZGUgZnJvbSBzdGF0dXM6ICR7c3RhdHVzfWBcbiAgICAgIClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9sZUNvZGUocm9sZTogUm9sZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAocm9sZSkge1xuICAgIGNhc2UgJ2F1dGhvcic6XG4gICAgICByZXR1cm4gJ2F1dGhvcidcbiAgICBjYXNlICdjb2xsYWJvcmF0b3InOlxuICAgICAgcmV0dXJuICdjb2xsYWJvcmF0b3InXG4gICAgY2FzZSAnY29udHJpYnV0b3InOlxuICAgICAgcmV0dXJuICdjb250cmlidXRvcidcbiAgICBjYXNlICdjdXN0b2RpYW4nOlxuICAgICAgcmV0dXJuICdjdXN0b2RpYW4nXG4gICAgY2FzZSAnZGlzdHJpYnV0b3InOlxuICAgICAgcmV0dXJuICdkaXN0cmlidXRvcidcbiAgICBjYXNlICdlZGl0b3InOlxuICAgICAgcmV0dXJuICdlZGl0b3InXG4gICAgY2FzZSAnZnVuZGVyJzpcbiAgICAgIHJldHVybiAnZnVuZGVyJ1xuICAgIGNhc2UgJ21lZGlhdG9yJzpcbiAgICAgIHJldHVybiAnbWVkaWF0b3InXG4gICAgY2FzZSAnb3JpZ2luYXRvcic6XG4gICAgICByZXR1cm4gJ29yaWdpbmF0b3InXG4gICAgY2FzZSAnb3RoZXInOlxuICAgICAgcmV0dXJuICdvdGhlcidcbiAgICBjYXNlICdvd25lcic6XG4gICAgICByZXR1cm4gJ293bmVyJ1xuICAgIGNhc2UgJ3BvaW50X29mX2NvbnRhY3QnOlxuICAgICAgcmV0dXJuICdwb2ludE9mQ29udGFjdCdcbiAgICBjYXNlICdwcmluY2lwYWxfaW52ZXN0aWdhdG9yJzpcbiAgICAgIHJldHVybiAncHJpbmNpcGFsSW52ZXN0aWdhdG9yJ1xuICAgIGNhc2UgJ3Byb2Nlc3Nvcic6XG4gICAgICByZXR1cm4gJ3Byb2Nlc3NvcidcbiAgICBjYXNlICdwdWJsaXNoZXInOlxuICAgICAgcmV0dXJuICdwdWJsaXNoZXInXG4gICAgY2FzZSAncmVzb3VyY2VfcHJvdmlkZXInOlxuICAgICAgcmV0dXJuICdyZXNvdXJjZVByb3ZpZGVyJ1xuICAgIGNhc2UgJ3JpZ2h0c19ob2xkZXInOlxuICAgICAgcmV0dXJuICdyaWdodHNIb2xkZXInXG4gICAgY2FzZSAnc3BvbnNvcic6XG4gICAgICByZXR1cm4gJ3Nwb25zb3InXG4gICAgY2FzZSAnc3Rha2Vob2xkZXInOlxuICAgICAgcmV0dXJuICdzdGFrZWhvbGRlcidcbiAgICBjYXNlICd1bnNwZWNpZmllZCc6XG4gICAgICByZXR1cm4gJ3Vuc3BlY2lmaWVkJ1xuICAgIGNhc2UgJ3VzZXInOlxuICAgICAgcmV0dXJuICd1c2VyJ1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlcm1pbmUgcm9sZSBjb2RlIGZyb20gcm9sZTogJHtyb2xlfWApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZpY2VEaXN0cmlidXRpb25Qcm90b2NvbChcbiAgZGlzdHJpYnV0aW9uOiBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvblxuKTogc3RyaW5nIHtcbiAgc3dpdGNoIChkaXN0cmlidXRpb24uYWNjZXNzU2VydmljZVByb3RvY29sLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdvZ2NmZWF0dXJlcyc6XG4gICAgICByZXR1cm4gJ09HQyBBUEkgRmVhdHVyZXMnXG4gICAgY2FzZSAnd2ZzJzpcbiAgICAgIHJldHVybiAnT0dDOldGUydcbiAgICBjYXNlICd3bXMnOlxuICAgICAgcmV0dXJuICdPR0M6V01TJ1xuICAgIGNhc2UgJ3dwcyc6XG4gICAgICByZXR1cm4gJ09HQzpXUFMnXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkaXN0cmlidXRpb24uYWNjZXNzU2VydmljZVByb3RvY29sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1haW50ZW5hbmNlRnJlcXVlbmN5Q29kZShcbiAgdXBkYXRlRnJlcXVlbmN5OiBVcGRhdGVGcmVxdWVuY3lDb2RlXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgc3dpdGNoICh1cGRhdGVGcmVxdWVuY3kpIHtcbiAgICBjYXNlICdhc05lZWRlZCc6XG4gICAgICByZXR1cm4gJ2FzTmVlZGVkJ1xuICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgcmV0dXJuICd1bmtub3duJ1xuICAgIGNhc2UgJ2lycmVndWxhcic6XG4gICAgICByZXR1cm4gJ2lycmVndWxhcidcbiAgICBjYXNlICdub3RQbGFubmVkJzpcbiAgICAgIHJldHVybiAnbm90UGxhbm5lZCdcbiAgICBjYXNlICdjb250aW51YWwnOlxuICAgICAgcmV0dXJuICdjb250aW51YWwnXG4gICAgY2FzZSAncGVyaW9kaWMnOlxuICAgICAgcmV0dXJuICdwZXJpb2RpYydcbiAgICBjYXNlICdkYWlseSc6XG4gICAgICByZXR1cm4gJ2RhaWx5J1xuICAgIGNhc2UgJ3dlZWtseSc6XG4gICAgICByZXR1cm4gJ3dlZWtseSdcbiAgICBjYXNlICdmb3J0bmlnaHRseSc6XG4gICAgICByZXR1cm4gJ2ZvcnRuaWdodGx5J1xuICAgIGNhc2UgJ21vbnRobHknOlxuICAgICAgcmV0dXJuICdtb250aGx5J1xuICAgIGNhc2UgJ3F1YXJ0ZXJseSc6XG4gICAgICByZXR1cm4gJ3F1YXJ0ZXJseSdcbiAgICBjYXNlICdiaWFubnVhbGx5JzpcbiAgICAgIHJldHVybiAnYmlhbm51YWxseSdcbiAgICBjYXNlICdhbm51YWxseSc6XG4gICAgICByZXR1cm4gJ2FubnVhbGx5J1xuICAgIGNhc2UgJ3NlbWltb250aGx5JzpcbiAgICAgIHJldHVybiAnc2VtaW1vbnRobHknXG4gICAgY2FzZSAnYmllbm5pYWxseSc6XG4gICAgICByZXR1cm4gJ2JpZW5uaWFsbHknXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElTT0R1cmF0aW9uKHVwZGF0ZUZyZXF1ZW5jeTogVXBkYXRlRnJlcXVlbmN5Q3VzdG9tKTogc3RyaW5nIHtcbiAgY29uc3QgZHVyYXRpb24gPSB7XG4gICAgeWVhcnM6IDAsXG4gICAgbW9udGhzOiAwLFxuICAgIHdlZWtzOiAwLFxuICAgIGRheXM6IDAsXG4gICAgaG91cnM6IDAsXG4gIH1cbiAgc3dpdGNoICh1cGRhdGVGcmVxdWVuY3kucGVyKSB7XG4gICAgY2FzZSAnZGF5JzpcbiAgICAgIGlmICh1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIDw9IDEpIGR1cmF0aW9uLmRheXMgPSAxXG4gICAgICBlbHNlIGR1cmF0aW9uLmhvdXJzID0gTWF0aC5yb3VuZCgyNCAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgZHVyYXRpb24uZGF5cyA9IE1hdGgucm91bmQoNyAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgLSAwLjAwMDEpIC8vIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgJzIgdGltZXMgcGVyIHdlZWsnID0gJ2V2ZXJ5IDMgZGF5cydcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnbW9udGgnOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24ubW9udGhzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5kYXlzID0gTWF0aC5yb3VuZCgzMCAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3llYXInOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24ueWVhcnMgPSAxXG4gICAgICBlbHNlIGR1cmF0aW9uLm1vbnRocyA9IE1hdGgucm91bmQoMTIgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgfVxuICBjb25zdCBob3VycyA9IGR1cmF0aW9uLmhvdXJzID4gMCA/IGBUJHtkdXJhdGlvbi5ob3Vyc31IYCA6ICcnXG4gIHJldHVybiBgUCR7ZHVyYXRpb24ueWVhcnN9WSR7ZHVyYXRpb24ubW9udGhzfU0ke2R1cmF0aW9uLmRheXN9RCR7aG91cnN9YFxufVxuXG5mdW5jdGlvbiBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KFxuICBjb250YWN0OiBJbmRpdmlkdWFsLFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdExhbmd1YWdlOiBMYW5ndWFnZUNvZGVcbikge1xuICBjb25zdCBmdWxsTmFtZSA9IG5hbWVQYXJ0c1RvRnVsbChjb250YWN0LmZpcnN0TmFtZSwgY29udGFjdC5sYXN0TmFtZSlcblxuICBjb25zdCBjcmVhdGVBZGRyZXNzID0gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6YWRkcmVzcycsICdnbWQ6Q0lfQWRkcmVzcycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmVsZWN0cm9uaWNNYWlsQWRkcmVzcycpLFxuICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LmVtYWlsKVxuICAgICAgKVxuICAgICksXG4gICAgY29udGFjdC5hZGRyZXNzXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVsaXZlcnlQb2ludCcpLFxuICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5hZGRyZXNzKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wXG4gIClcblxuICBjb25zdCBjcmVhdGVDb250YWN0ID0gcGlwZShcbiAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6Y29udGFjdEluZm8nLCAnZ21kOkNJX0NvbnRhY3QnKSxcbiAgICBjb250YWN0LnBob25lXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6cGhvbmUnLCAnZ21kOkNJX1RlbGVwaG9uZScsICdnbWQ6dm9pY2UnKSxcbiAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QucGhvbmUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3AsXG4gICAgYXBwZW5kQ2hpbGRyZW4oY3JlYXRlQWRkcmVzcyksXG4gICAgY29udGFjdC5vcmdhbml6YXRpb24/LndlYnNpdGVcbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpvbmxpbmVSZXNvdXJjZScsICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnKSxcbiAgICAgICAgICAgIHdyaXRlTGlua2FnZShjb250YWN0Lm9yZ2FuaXphdGlvbi53ZWJzaXRlKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wXG4gIClcblxuICByZXR1cm4gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JyksXG4gICAgICBmdWxsTmFtZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmluZGl2aWR1YWxOYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGZ1bGxOYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgY29udGFjdC5wb3NpdGlvblxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnBvc2l0aW9uTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LnBvc2l0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuXG4gICAgICBjb250YWN0Lm9yZ2FuaXphdGlvbj8ubmFtZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm9yZ2FuaXNhdGlvbk5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5vcmdhbml6YXRpb24ubmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBjcmVhdGVDb250YWN0LFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpyb2xlJywgJ2dtZDpDSV9Sb2xlQ29kZScpLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX1JvbGVDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRSb2xlQ29kZShjb250YWN0LnJvbGUpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVLZXl3b3JkcygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKHBpcGUoZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycpKSlcbn1cblxuLy8gcmV0dXJucyBhIDxnbWQ6dGhlc2F1cnVzTmFtZT4gZWxlbWVudFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRoZXNhdXJ1cyh0aGVzYXVydXM6IFRoZXNhdXJ1c01vZGVsKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0aGVzYXVydXNOYW1lJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnRpdGxlJyksXG4gICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHRoZXNhdXJ1cy5uYW1lIHx8IHRoZXNhdXJ1cy5pZClcbiAgICAgICksXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6aWRlbnRpZmllcicsICdnbWQ6TURfSWRlbnRpZmllcicpLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmNvZGUnKSxcbiAgICAgICAgICAgIHRoZXNhdXJ1cy51cmxcbiAgICAgICAgICAgICAgPyB3cml0ZUFuY2hvcih0aGVzYXVydXMudXJsLCB0aGVzYXVydXMuaWQpXG4gICAgICAgICAgICAgIDogd3JpdGVDaGFyYWN0ZXJTdHJpbmcodGhlc2F1cnVzLmlkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kS2V5d29yZHMoXG4gIGtleXdvcmRzOiBLZXl3b3JkW10sXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgLy8ga2V5d29yZHMgYXJlIGdyb3VwZWQgYnkgdGhlc2F1cnVzIGlmIHRoZXkgaGF2ZSBvbmUsIG90aGVyd2lzZSBieSB0eXBlXG4gIGNvbnN0IGtleXdvcmRzQnlUaGVzYXVydXM6IEtleXdvcmRbXVtdID0ga2V5d29yZHMucmVkdWNlKChhY2MsIGtleXdvcmQpID0+IHtcbiAgICBjb25zdCB0aGVzYXVydXNJZCA9IGtleXdvcmQudGhlc2F1cnVzPy5pZFxuICAgIGNvbnN0IHR5cGUgPSBrZXl3b3JkLnR5cGVcbiAgICBsZXQgZXhpc3RpbmdHcm91cCA9IGFjYy5maW5kKChncm91cCkgPT5cbiAgICAgIHRoZXNhdXJ1c0lkXG4gICAgICAgID8gZ3JvdXBbMF0udGhlc2F1cnVzPy5pZCA9PT0gdGhlc2F1cnVzSWRcbiAgICAgICAgOiBncm91cFswXS50eXBlID09PSB0eXBlICYmICFncm91cFswXS50aGVzYXVydXNcbiAgICApXG4gICAgaWYgKCFleGlzdGluZ0dyb3VwKSB7XG4gICAgICBleGlzdGluZ0dyb3VwID0gW11cbiAgICAgIGFjYy5wdXNoKGV4aXN0aW5nR3JvdXApXG4gICAgfVxuICAgIGV4aXN0aW5nR3JvdXAucHVzaChrZXl3b3JkKVxuICAgIHJldHVybiBhY2NcbiAgfSwgW10pXG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICAuLi5rZXl3b3Jkc0J5VGhlc2F1cnVzLm1hcCgoa2V5d29yZHMpID0+XG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycsICdnbWQ6TURfS2V5d29yZHMnKSxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0eXBlJywgJ2dtZDpNRF9LZXl3b3JkVHlwZUNvZGUnKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9LZXl3b3JkVHlwZUNvZGUnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBrZXl3b3Jkc1swXS50eXBlKVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAga2V5d29yZHNbMF0udGhlc2F1cnVzXG4gICAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihjcmVhdGVUaGVzYXVydXMoa2V5d29yZHNbMF0udGhlc2F1cnVzKSlcbiAgICAgICAgICA6IG5vb3AsXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIC4uLmtleXdvcmRzLm1hcCgoa2V5d29yZCkgPT5cbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDprZXl3b3JkJyksXG4gICAgICAgICAgICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIGtleXdvcmQubGFiZWwsXG4gICAgICAgICAgICAgICAga2V5d29yZC50cmFuc2xhdGlvbnM/LmxhYmVsLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KFxuICBjb25zdHJhaW50OiBDb25zdHJhaW50LFxuICB0eXBlOiAnbGVnYWwnIHwgJ3NlY3VyaXR5JyB8ICdvdGhlcicsXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgaWYgKHR5cGUgPT09ICdzZWN1cml0eScpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsXG4gICAgICAgICdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cydcbiAgICAgICksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgJ2dtZDpjbGFzc2lmaWNhdGlvbicsXG4gICAgICAgICAgICAnZ21kOk1EX0NsYXNzaWZpY2F0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX0NsYXNzaWZpY2F0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ3Jlc3RyaWN0ZWQnKVxuICAgICAgICApLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICAgICAgJ3VybCcgaW4gY29uc3RyYWludFxuICAgICAgICAgICAgPyB3cml0ZUxvY2FsaXplZEFuY2hvcihcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnVybCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xlZ2FsJykge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLCAnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnb3RoZXJSZXN0cmljdGlvbnMnKVxuICAgICAgICApLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgICAgJ3VybCcgaW4gY29uc3RyYWludFxuICAgICAgICAgICAgPyB3cml0ZUxvY2FsaXplZEFuY2hvcihcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnVybCxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LnRleHQsXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50cmFuc2xhdGlvbnM/LnRleHQsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH1cbiAgLy8gb3RoZXJcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycsXG4gICAgICAnZ21kOk1EX0NvbnN0cmFpbnRzJyxcbiAgICAgICdnbWQ6dXNlTGltaXRhdGlvbidcbiAgICApLFxuICAgICd1cmwnIGluIGNvbnN0cmFpbnRcbiAgICAgID8gd3JpdGVMb2NhbGl6ZWRBbmNob3IoXG4gICAgICAgICAgY29uc3RyYWludC51cmwsXG4gICAgICAgICAgY29uc3RyYWludC50ZXh0LFxuICAgICAgICAgIGNvbnN0cmFpbnQudHJhbnNsYXRpb25zPy50ZXh0LFxuICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZVxuICAgICAgICApXG4gICAgICA6IHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgIGNvbnN0cmFpbnQudGV4dCxcbiAgICAgICAgICBjb25zdHJhaW50LnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2VcbiAgICAgICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgbWFwQXJyYXkoXG4gICAgICAgIHJlbW92ZUNoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfQ29uc3RyYWludHMnKSxcbiAgICAgICAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICAgICAgICAgICAgICAoYXJyYXkpID0+IGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2VjdXJpdHlDb25zdHJhaW50cygpIHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIG1hcEFycmF5KFxuICAgICAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnKSxcbiAgICAgICAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICAgICAgICAgICAgICAoYXJyYXkpID0+IGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGVnYWxDb25zdHJhaW50cygpIHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIG1hcEFycmF5KFxuICAgICAgICByZW1vdmVDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnKSxcbiAgICAgICAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICAgICAgICdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgICAgICAgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICAgICAgICAgIChyZXN0cmljdGlvbkNvZGVzKSA9PlxuICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25Db2Rlcy5ldmVyeSgoY29kZSkgPT4gY29kZSAhPT0gJ2xpY2Vuc2UnKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbXB0eVJlc291cmNlQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KHBpcGUoYWxsQ2hpbGRyZW5FbGVtZW50LCAoYXJyYXkpID0+IGFycmF5Lmxlbmd0aCA9PT0gMCkpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMaWNlbnNlcygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICAgIChyZXN0cmljdGlvbkNvZGVzKSA9PlxuICAgICAgICAgICAgcmVzdHJpY3Rpb25Db2Rlcy5zb21lKChjb2RlKSA9PiBjb2RlID09PSAnbGljZW5zZScpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxpY2Vuc2UoXG4gIGxpY2Vuc2U6IENvbnN0cmFpbnQsXG4gIGRlZmF1bHRMYW5ndWFnZTogTGFuZ3VhZ2VDb2RlXG4pIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLCAnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICApLFxuICAgICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdsaWNlbnNlJylcbiAgICAgICksXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLCAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgKSxcbiAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnb3RoZXJSZXN0cmljdGlvbnMnKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgICd1cmwnIGluIGxpY2Vuc2VcbiAgICAgICAgICA/IHdyaXRlQW5jaG9yKGxpY2Vuc2UudXJsLCBsaWNlbnNlLnRleHQpXG4gICAgICAgICAgOiB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgICAgICAgICAgbGljZW5zZS50ZXh0LFxuICAgICAgICAgICAgICBsaWNlbnNlLnRyYW5zbGF0aW9ucz8udGV4dCxcbiAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVPbmxpbmVSZXNvdXJjZXMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nKVxufVxuXG5mdW5jdGlvbiBhcHBlbmRPbmxpbmVSZXNvdXJjZUZvcm1hdChtaW1lVHlwZTogc3RyaW5nKSB7XG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkZvcm1hdCcsICdnbWQ6TURfRm9ybWF0JyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6bmFtZScpLCB3cml0ZUNoYXJhY3RlclN0cmluZyhtaW1lVHlwZSkpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp2ZXJzaW9uJyksXG4gICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoJzEuMCcpIC8vIGhhcmRjb2RpbmcgdGhpcyBhcyBpdCBtb3N0IGxpa2VseSB3b24ndCBiZSB1c2VkIGJ1dCBpcyBtYW5kYXRvcnlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlzdHJpYnV0aW9uSW5mbygpIHtcbiAgcmV0dXJuIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKVxufVxuXG4vLyBhcHBseSB0byBNRF9EaXN0cmlidXRpb25cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRPbmxpbmVSZXNvdXJjZShcbiAgb25saW5lUmVzb3VyY2U6IERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgYXBwZW5kRm9ybWF0Rm46IChcbiAgICBtaW1lVHlwZTogc3RyaW5nXG4gICkgPT4gQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4sXG4gIHRyYW5zbGF0aW9uczogUmVjb3JkVHJhbnNsYXRpb25zLFxuICBkZWZhdWx0TGFuZ3VhZ2U6IExhbmd1YWdlQ29kZVxuKSB7XG4gIGxldCBuYW1lOiBzdHJpbmdcbiAgbGV0IGZ1bmN0aW9uQ29kZTogc3RyaW5nXG4gIGxldCBwcm90b2NvbDogc3RyaW5nXG4gIGlmIChvbmxpbmVSZXNvdXJjZS50eXBlID09PSAnc2VydmljZScpIHtcbiAgICAvLyBzaG91bGQgd2Uga2VlcCB0aGUgaWRlbnRpZmllckluU2VydmljZT8gcmVhZC13cml0ZSBkdXBsaWNhdGUgd2l0aCBuYW1lXG4gICAgbmFtZSA9IG9ubGluZVJlc291cmNlLmlkZW50aWZpZXJJblNlcnZpY2UgLy8gdGhpcyBpcyBmb3IgR2VvTmV0d29yayB0byBrbm93IHRoZSBsYXllciBuYW1lXG4gICAgZnVuY3Rpb25Db2RlID0gJ2Rvd25sb2FkJ1xuICAgIHByb3RvY29sID0gZ2V0U2VydmljZURpc3RyaWJ1dGlvblByb3RvY29sKG9ubGluZVJlc291cmNlKVxuICB9IGVsc2UgaWYgKG9ubGluZVJlc291cmNlLnR5cGUgPT09ICdkb3dubG9hZCcpIHtcbiAgICBuYW1lID0gb25saW5lUmVzb3VyY2UubmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9ICdXV1c6RE9XTkxPQUQnXG4gIH0gZWxzZSB7XG4gICAgbmFtZSA9IG9ubGluZVJlc291cmNlLm5hbWVcbiAgICBmdW5jdGlvbkNvZGUgPSAnaW5mb3JtYXRpb24nXG4gICAgcHJvdG9jb2wgPSAnV1dXOkxJTksnXG4gIH1cbiAgY29uc3QgYXBwZW5kVHJhbnNmZXJPcHRpb25zID0gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICAgJ2dtZDpvbkxpbmUnLFxuICAgICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICAgKSxcbiAgICAgIHdyaXRlTGlua2FnZShvbmxpbmVSZXNvdXJjZS51cmwpLFxuICAgICAgJ2Rlc2NyaXB0aW9uJyBpbiBvbmxpbmVSZXNvdXJjZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgIHdyaXRlTG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nKFxuICAgICAgICAgICAgICAgIG9ubGluZVJlc291cmNlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIG9ubGluZVJlc291cmNlLnRyYW5zbGF0aW9ucz8uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIG5hbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBvbmxpbmVSZXNvdXJjZS50cmFuc2xhdGlvbnM/Lm5hbWUsXG4gICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLCB3cml0ZUNoYXJhY3RlclN0cmluZyhwcm90b2NvbCkpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpmdW5jdGlvbicsICdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfT25MaW5lRnVuY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBmdW5jdGlvbkNvZGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgJ21pbWVUeXBlJyBpbiBvbmxpbmVSZXNvdXJjZVxuICAgICAgPyBhcHBlbmRGb3JtYXRGbihvbmxpbmVSZXNvdXJjZS5taW1lVHlwZSlcbiAgICAgIDogbm9vcCxcbiAgICBhcHBlbmRUcmFuc2Zlck9wdGlvbnNcbiAgKVxufVxuXG4vKipcbiAqIExvb2tzIGZvciBzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uIG9yIGdtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24gZWxlbWVudFxuICogZGVwZW5kaW5nIG9uIHJlY29yZCB0eXBlLCBjcmVhdGUgaWYgbWlzc2luZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSB7XG4gIHJldHVybiAocm9vdEVsOiBYbWxFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qga2luZCA9IHJlYWRLaW5kKHJvb3RFbClcbiAgICBsZXQgZWx0TmFtZSA9ICdnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uJ1xuICAgIGlmIChraW5kID09PSAnc2VydmljZScpIGVsdE5hbWUgPSAnc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbidcbiAgICByZXR1cm4gZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDppZGVudGlmaWNhdGlvbkluZm8nLCBlbHROYW1lKShyb290RWwpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRPckNyZWF0ZURpc3RyaWJ1dGlvbigpIHtcbiAgcmV0dXJuIChyb290RWw6IFhtbEVsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnZ21kOmRpc3RyaWJ1dGlvbkluZm8nLFxuICAgICAgJ2dtZDpNRF9EaXN0cmlidXRpb24nXG4gICAgKShyb290RWwpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVW5pcXVlSWRlbnRpZmllcihcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZmlsZUlkZW50aWZpZXInKSxcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQudW5pcXVlSWRlbnRpZmllcilcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtpbmQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmhpZXJhcmNoeUxldmVsJywgJ2dtZDpNRF9TY29wZUNvZGUnKSxcbiAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9TY29wZUNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGtpbmRUb0NvZGVMaXN0VmFsdWUocmVjb3JkKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRpdGxlKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6dGl0bGUnKSxcbiAgICB3cml0ZUxvY2FsaXplZENoYXJhY3RlclN0cmluZyhcbiAgICAgIHJlY29yZC50aXRsZSxcbiAgICAgIHJlY29yZC50cmFuc2xhdGlvbnM/LnRpdGxlLFxuICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUFic3RyYWN0KHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmFic3RyYWN0JyksXG4gICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICByZWNvcmQuYWJzdHJhY3QsXG4gICAgICByZWNvcmQudHJhbnNsYXRpb25zPy5hYnN0cmFjdCxcbiAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTdGF0dXMocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6c3RhdHVzJywgJ2dtZDpNRF9Qcm9ncmVzc0NvZGUnKSxcbiAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9Qcm9ncmVzc0NvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGdldFByb2dyZXNzQ29kZShyZWNvcmQuc3RhdHVzKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNvbnRhY3RzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpjb250YWN0JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuY29udGFjdHMubWFwKChjb250YWN0KSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpjb250YWN0JyksXG4gICAgICAgICAgYXBwZW5kUmVzcG9uc2libGVQYXJ0eShcbiAgICAgICAgICAgIGNvbnRhY3QsXG4gICAgICAgICAgICByZWNvcmQudHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNvbnRhY3RzRm9yUmVzb3VyY2UoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6cG9pbnRPZkNvbnRhY3QnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmNvbnRhY3QnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5jb250YWN0c0ZvclJlc291cmNlLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9pbnRPZkNvbnRhY3QnKSxcbiAgICAgICAgICBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KFxuICAgICAgICAgICAgY29udGFjdCxcbiAgICAgICAgICAgIHJlY29yZC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlS2V5d29yZHMocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUtleXdvcmRzKCksXG4gICAgYXBwZW5kS2V5d29yZHMocmVjb3JkLmtleXdvcmRzLCByZWNvcmQuZGVmYXVsdExhbmd1YWdlKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVG9waWNzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnRvcGljQ2F0ZWdvcnknKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC50b3BpY3MubWFwKCh0b3BpYykgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6dG9waWNDYXRlZ29yeScsICdnbWQ6TURfVG9waWNDYXRlZ29yeUNvZGUnKSxcbiAgICAgICAgICBzZXRUZXh0Q29udGVudCh0b3BpYylcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxpY2Vuc2VzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVMaWNlbnNlcygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmxpY2Vuc2VzLm1hcCgobGljZW5zZSkgPT5cbiAgICAgICAgY3JlYXRlTGljZW5zZShsaWNlbnNlLCByZWNvcmQuZGVmYXVsdExhbmd1YWdlKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxlZ2FsQ29uc3RyYWludHMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUxlZ2FsQ29uc3RyYWludHMoKSxcbiAgICByZW1vdmVFbXB0eVJlc291cmNlQ29uc3RyYWludHMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5sZWdhbENvbnN0cmFpbnRzLm1hcCgoYykgPT5cbiAgICAgICAgY3JlYXRlQ29uc3RyYWludChjLCAnbGVnYWwnLCByZWNvcmQuZGVmYXVsdExhbmd1YWdlKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNlY3VyaXR5Q29uc3RyYWludHMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZVNlY3VyaXR5Q29uc3RyYWludHMoKSxcbiAgICByZW1vdmVFbXB0eVJlc291cmNlQ29uc3RyYWludHMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5zZWN1cml0eUNvbnN0cmFpbnRzLm1hcCgoYykgPT5cbiAgICAgICAgY3JlYXRlQ29uc3RyYWludChjLCAnc2VjdXJpdHknLCByZWNvcmQuZGVmYXVsdExhbmd1YWdlKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU90aGVyQ29uc3RyYWludHMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZU90aGVyQ29uc3RyYWludHMoKSxcbiAgICByZW1vdmVFbXB0eVJlc291cmNlQ29uc3RyYWludHMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5vdGhlckNvbnN0cmFpbnRzLm1hcCgoYykgPT5cbiAgICAgICAgY3JlYXRlQ29uc3RyYWludChjLCAnb3RoZXInLCByZWNvcmQuZGVmYXVsdExhbmd1YWdlKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVwZGF0ZUZyZXF1ZW5jeShcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpyZXNvdXJjZU1haW50ZW5hbmNlJyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nKSxcbiAgICB0eXBlb2YgcmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSA9PT0gJ29iamVjdCdcbiAgICAgID8gcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRDaGlsZChcbiAgICAgICAgICAgICdnbWQ6dXNlckRlZmluZWRNYWludGVuYW5jZUZyZXF1ZW5jeScsXG4gICAgICAgICAgICAnZ3RzOlRNX1BlcmlvZER1cmF0aW9uJ1xuICAgICAgICAgICksXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZ2V0SVNPRHVyYXRpb24ocmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSkpXG4gICAgICAgIClcbiAgICAgIDogcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRDaGlsZChcbiAgICAgICAgICAgICdnbWQ6bWFpbnRlbmFuY2VBbmRVcGRhdGVGcmVxdWVuY3knLFxuICAgICAgICAgICAgJ2dtZDpNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cml0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdFZhbHVlJyxcbiAgICAgICAgICAgIGdldE1haW50ZW5hbmNlRnJlcXVlbmN5Q29kZShyZWNvcmQudXBkYXRlRnJlcXVlbmN5KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVjb3JkVXBkYXRlZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZGF0ZVN0YW1wJyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICB3cml0ZURhdGVUaW1lKHJlY29yZC5yZWNvcmRVcGRhdGVkKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVJlc291cmNlRGF0ZShcbiAgdHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicgfCAncHVibGljYXRpb24nXG4pIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIHJlbW92ZUNoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZGF0ZScpLFxuICAgICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICdnbWQ6Q0lfRGF0ZScsXG4gICAgICAgICAgICAgICdnbWQ6ZGF0ZVR5cGUnLFxuICAgICAgICAgICAgICAnZ21kOkNJX0RhdGVUeXBlQ29kZSdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICAgICAgICBtYXAoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdHlwZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFJlc291cmNlRGF0ZShcbiAgZGF0ZTogRGF0ZSxcbiAgdHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicgfCAncHVibGljYXRpb24nXG4pIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmRhdGUnLCAnZ21kOkNJX0RhdGUnKSxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6ZGF0ZScpLCB3cml0ZURhdGVUaW1lKGRhdGUpKSxcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmRhdGVUeXBlJywgJ2dtZDpDSV9EYXRlVHlwZUNvZGUnKSxcbiAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd3JpdGVBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCB0eXBlKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZUNyZWF0ZWQoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcmVtb3ZlUmVzb3VyY2VEYXRlKCdjcmVhdGlvbicpKHJvb3RFbClcbiAgaWYgKCFyZWNvcmQucmVzb3VyY2VDcmVhdGVkKSByZXR1cm5cbiAgYXBwZW5kUmVzb3VyY2VEYXRlKHJlY29yZC5yZXNvdXJjZUNyZWF0ZWQsICdjcmVhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VVcGRhdGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgncmV2aXNpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlVXBkYXRlZCkgcmV0dXJuXG4gIGFwcGVuZFJlc291cmNlRGF0ZShyZWNvcmQucmVzb3VyY2VVcGRhdGVkLCAncmV2aXNpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlUHVibGlzaGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHJlbW92ZVJlc291cmNlRGF0ZSgncHVibGljYXRpb24nKShyb290RWwpXG4gIGlmICghcmVjb3JkLnJlc291cmNlUHVibGlzaGVkKSByZXR1cm5cbiAgYXBwZW5kUmVzb3VyY2VEYXRlKHJlY29yZC5yZXNvdXJjZVB1Ymxpc2hlZCwgJ3B1YmxpY2F0aW9uJykocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXVzZVR5cGUocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgd3JpdGVLaW5kKHJlY29yZCwgcm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTcGF0aWFsUmVwcmVzZW50YXRpb24oXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgaWYgKCFyZWNvcmQuc3BhdGlhbFJlcHJlc2VudGF0aW9uKSB7XG4gICAgcGlwZShcbiAgICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnKVxuICAgICkocm9vdEVsKVxuICAgIHJldHVyblxuICB9XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdnbWQ6c3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZScsXG4gICAgICAnZ21kOk1EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgd3JpdGVBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZUNvZGUnXG4gICAgKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIHJlY29yZC5zcGF0aWFsUmVwcmVzZW50YXRpb24pXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVHcmFwaGljT3ZlcnZpZXdzKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmdyYXBoaWNPdmVydmlldycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLm92ZXJ2aWV3c1xuICAgICAgICAuZmlsdGVyKChvdmVydmlldykgPT4gb3ZlcnZpZXcudXJsKVxuICAgICAgICAubWFwKChvdmVydmlldykgPT5cbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmdyYXBoaWNPdmVydmlldycsICdnbWQ6TURfQnJvd3NlR3JhcGhpYycpLFxuICAgICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmZpbGVOYW1lJyksXG4gICAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob3ZlcnZpZXcudXJsLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAnZGVzY3JpcHRpb24nIGluIG92ZXJ2aWV3XG4gICAgICAgICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZmlsZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG92ZXJ2aWV3LmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBub29wXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGluZWFnZShyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICByZWNvcmQubGluZWFnZSxcbiAgICAgIHJlY29yZC50cmFuc2xhdGlvbnM/LmxpbmVhZ2UsXG4gICAgICByZWNvcmQuZGVmYXVsdExhbmd1YWdlXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcnZpY2VFbmRwb2ludFByb3RvY29sKGVuZHBvaW50OiBTZXJ2aWNlRW5kcG9pbnQpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGVuZHBvaW50LmFjY2Vzc1NlcnZpY2VQcm90b2NvbC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnd2ZzJzpcbiAgICAgIHJldHVybiAnT0dDOldGUydcbiAgICBjYXNlICd3bXMnOlxuICAgICAgcmV0dXJuICdPR0M6V01TJ1xuICAgIGNhc2UgJ3dwcyc6XG4gICAgICByZXR1cm4gJ09HQzpXUFMnXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBlbmRwb2ludC5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2xcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT25saW5lUmVzb3VyY2Uob25saW5lUmVzb3VyY2U6IFNlcnZpY2VPbmxpbmVSZXNvdXJjZSkge1xuICBsZXQgbGlua2FnZVVybCwgZnVuY3Rpb25Db2RlLCBwcm90b2NvbFxuICBpZiAob25saW5lUmVzb3VyY2UudHlwZSA9PT0gJ2VuZHBvaW50Jykge1xuICAgIGxpbmthZ2VVcmwgPSBvbmxpbmVSZXNvdXJjZS51cmwudG9TdHJpbmcoKVxuICAgIHByb3RvY29sID0gZ2V0U2VydmljZUVuZHBvaW50UHJvdG9jb2wob25saW5lUmVzb3VyY2UpXG4gICAgZnVuY3Rpb25Db2RlID0gJ2Rvd25sb2FkJ1xuICB9IGVsc2Uge1xuICAgIGxpbmthZ2VVcmwgPSBvbmxpbmVSZXNvdXJjZS51cmwudG9TdHJpbmcoKVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdpbmZvcm1hdGlvbidcbiAgICBwcm90b2NvbCA9ICdXV1c6TElOSydcbiAgfVxuICBjb25zdCBhcHBlbmRUcmFuc2Zlck9wdGlvbnMgPSBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnRyYW5zZmVyT3B0aW9ucycpLFxuICAgICAgY3JlYXRlTmVzdGVkQ2hpbGQoXG4gICAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICAgJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZSdcbiAgICAgICksXG4gICAgICB3cml0ZUxpbmthZ2UobGlua2FnZVVybCksXG4gICAgICAnZGVzY3JpcHRpb24nIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob25saW5lUmVzb3VyY2UuZGVzY3JpcHRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICAnbmFtZScgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG9ubGluZVJlc291cmNlLm5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocHJvdG9jb2wpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX09uTGluZUZ1bmN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZnVuY3Rpb25Db2RlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBhcHBlbmRUcmFuc2Zlck9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YXNldE9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkIHwgUmV1c2VSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGFwcGVuZENoaWxkcmVuKFxuICAgIC4uLnJlY29yZC5vbmxpbmVSZXNvdXJjZXMubWFwKChkKSA9PlxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRGlzdHJpYnV0aW9uSW5mbygpLFxuICAgICAgICBhcHBlbmRPbmxpbmVSZXNvdXJjZShcbiAgICAgICAgICBkLFxuICAgICAgICAgIGFwcGVuZE9ubGluZVJlc291cmNlRm9ybWF0LFxuICAgICAgICAgIHJlY29yZC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgcmVjb3JkLmRlZmF1bHRMYW5ndWFnZVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMoXG4gIHJlY29yZDogU2VydmljZVJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgYXBwZW5kQ2hpbGRyZW4oLi4ucmVjb3JkLm9ubGluZVJlc291cmNlcy5tYXAoY3JlYXRlT25saW5lUmVzb3VyY2UpKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICByZW1vdmVPbmxpbmVSZXNvdXJjZXMoKShyb290RWwpXG5cbiAgaWYgKHJlY29yZC5raW5kID09PSAnZGF0YXNldCcgfHwgcmVjb3JkLmtpbmQgPT09ICdyZXVzZScpIHtcbiAgICBhcHBlbmREYXRhc2V0T25saW5lUmVzb3VyY2VzKHJlY29yZCwgcm9vdEVsKVxuICAgIHJldHVyblxuICB9XG4gIGFwcGVuZFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMocmVjb3JkLCByb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRlbXBvcmFsRXh0ZW50cyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6dGVtcG9yYWxFbGVtZW50JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQudGVtcG9yYWxFeHRlbnRzLm1hcCgoZXh0ZW50KSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZU5lc3RlZEVsZW1lbnQoJ2dtZDp0ZW1wb3JhbEVsZW1lbnQnLCAnZ21kOkVYX1RlbXBvcmFsRXh0ZW50JyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAnc3RhcnQnIGluIGV4dGVudCAmJiAnZW5kJyBpbiBleHRlbnRcbiAgICAgICAgICAgICAgPyBwaXBlKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlTmVzdGVkRWxlbWVudCgnZ21kOmV4dGVudCcsICdnbWw6VGltZVBlcmlvZCcpLFxuICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21sOmJlZ2luUG9zaXRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5zdGFydCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB3cml0ZUF0dHJpYnV0ZSgnaW5kZXRlcm1pbmF0ZVBvc2l0aW9uJywgJ3Vua25vd24nKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWw6ZW5kUG9zaXRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50LmVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNldFRleHRDb250ZW50KGZvcm1hdChleHRlbnQuZW5kLCAneXl5eS1NTS1kZCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHdyaXRlQXR0cmlidXRlKCdpbmRldGVybWluYXRlUG9zaXRpb24nLCAndW5rbm93bicpXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHBpcGUoXG4gICAgICAgICAgICAgICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAnZ21kOmV4dGVudCcsXG4gICAgICAgICAgICAgICAgICAgICdnbWw6VGltZUluc3RhbnQnLFxuICAgICAgICAgICAgICAgICAgICAnZ21sOnRpbWVQb3NpdGlvbidcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBleHRlbnQuc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgPyBzZXRUZXh0Q29udGVudChmb3JtYXQoZXh0ZW50LnN0YXJ0LCAneXl5eS1NTS1kZCcpKVxuICAgICAgICAgICAgICAgICAgICA6IHdyaXRlQXR0cmlidXRlKCdpbmRldGVybWluYXRlUG9zaXRpb24nLCAndW5rbm93bicpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNwYXRpYWxFeHRlbnRzKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIGNvbnN0IGFwcGVuZEJvdW5kaW5nUG9seWdvbiA9IChnZW9tZXRyeT86IEdlb21ldHJ5KSA9PiB7XG4gICAgaWYgKCFnZW9tZXRyeSkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpFWF9Cb3VuZGluZ1BvbHlnb24nKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpwb2x5Z29uJyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oKCkgPT4gd3JpdGVHZW9tZXRyeShnZW9tZXRyeSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBjb25zdCBhcHBlbmRHZW9ncmFwaGljQm91bmRpbmdCb3ggPSAoXG4gICAgYmJveD86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG4gICkgPT4ge1xuICAgIGlmICghYmJveCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpFWF9HZW9ncmFwaGljQm91bmRpbmdCb3gnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDp3ZXN0Qm91bmRMb25naXR1ZGUnKSwgd3JpdGVEZWNpbWFsKGJib3hbMF0pKSxcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6ZWFzdEJvdW5kTG9uZ2l0dWRlJyksIHdyaXRlRGVjaW1hbChiYm94WzJdKSksXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOnNvdXRoQm91bmRMYXRpdHVkZScpLCB3cml0ZURlY2ltYWwoYmJveFsxXSkpLFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpub3J0aEJvdW5kTGF0aXR1ZGUnKSwgd3JpdGVEZWNpbWFsKGJib3hbM10pKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGFwcGVuZEdlb2dyYXBoaWNEZXNjcmlwdGlvbiA9IChcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICB0cmFuc2xhdGlvbnM/OiBGaWVsZFRyYW5zbGF0aW9uXG4gICkgPT4ge1xuICAgIGlmICghZGVzY3JpcHRpb24pIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KFxuICAgICAgICAnZ21kOkVYX0dlb2dyYXBoaWNEZXNjcmlwdGlvbicsXG4gICAgICAgICdnbWQ6Z2VvZ3JhcGhpY0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOk1EX0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOmNvZGUnXG4gICAgICApLFxuICAgICAgd3JpdGVMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgIHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2VcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpleHRlbnQnLCAnZ21kOkVYX0V4dGVudCcpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Z2VvZ3JhcGhpY0VsZW1lbnQnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5zcGF0aWFsRXh0ZW50cy5tYXAoKGV4dGVudCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Z2VvZ3JhcGhpY0VsZW1lbnQnKSxcbiAgICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIGFwcGVuZEJvdW5kaW5nUG9seWdvbihleHRlbnQuZ2VvbWV0cnkpLFxuICAgICAgICAgICAgYXBwZW5kR2VvZ3JhcGhpY0JvdW5kaW5nQm94KGV4dGVudC5iYm94KSxcbiAgICAgICAgICAgIGFwcGVuZEdlb2dyYXBoaWNEZXNjcmlwdGlvbihcbiAgICAgICAgICAgICAgZXh0ZW50LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICBleHRlbnQudHJhbnNsYXRpb25zPy5kZXNjcmlwdGlvblxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxhbmd1YWdlcyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICAvLyBjbGVhciBleGlzdGluZ1xuICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmxvY2FsZScpKHJvb3RFbClcblxuICAvLyBkbyBub3Qgd3JpdGUgZG93biBsYW5ndWFnZXMgaWYgdGhlcmUgaXMgbm90aGluZyBlbHNlIHRoYW4gdGhlIGRlZmF1bHQgb25lXG4gIGlmICghcmVjb3JkLm90aGVyTGFuZ3VhZ2VzPy5sZW5ndGgpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUxhbmd1YWdlRWwgPSAobGFuZzogTGFuZ3VhZ2VDb2RlKSA9PlxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVOZXN0ZWRFbGVtZW50KCdnbWQ6bG9jYWxlJywgJ2dtZDpQVF9Mb2NhbGUnKSxcbiAgICAgIHdyaXRlQXR0cmlidXRlKCdpZCcsIGxhbmcudG9VcHBlckNhc2UoKSksXG4gICAgICBjcmVhdGVOZXN0ZWRDaGlsZCgnZ21kOmxhbmd1YWdlQ29kZScsICdnbWQ6TGFuZ3VhZ2VDb2RlJyksXG4gICAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3QnLCAnaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi8nKSxcbiAgICAgIHdyaXRlQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgdG9MYW5nMyhsYW5nKSA/PyBsYW5nKVxuICAgIClcblxuICAvLyBhZGQgbmV3IGxhbmd1YWdlcyAob25seSBpZiBvdGhlciB0aGFuIGRlZmF1bHQgb25lKVxuICBhcHBlbmRDaGlsZHJlbihcbiAgICBjcmVhdGVMYW5ndWFnZUVsKHJlY29yZC5kZWZhdWx0TGFuZ3VhZ2UpLFxuICAgIC4uLnJlY29yZC5vdGhlckxhbmd1YWdlcy5tYXAoY3JlYXRlTGFuZ3VhZ2VFbClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURlZmF1bHRMYW5ndWFnZShcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBjb25zdCBsYW5nMyA9IHRvTGFuZzMocmVjb3JkLmRlZmF1bHRMYW5ndWFnZS50b0xvd2VyQ2FzZSgpKVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmxhbmd1YWdlJywgJ2dtZDpMYW5ndWFnZUNvZGUnKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3QnLCAnaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9pc282MzktMi8nKSxcbiAgICB3cml0ZUF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGxhbmczKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VJZGVudGlmaWVyKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6aWRlbnRpZmllcicpLFxuICAgIHJlY29yZC5yZXNvdXJjZUlkZW50aWZpZXJcbiAgICAgID8gcGlwZShcbiAgICAgICAgICBjcmVhdGVOZXN0ZWRDaGlsZCgnZ21kOmlkZW50aWZpZXInLCAnZ21kOk1EX0lkZW50aWZpZXInLCAnZ21kOmNvZGUnKSxcbiAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQucmVzb3VyY2VJZGVudGlmaWVyKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKShyb290RWwpXG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- export * from './lib/metadata-language';
1
+ export * from './lib/metadata-language.token';
2
2
  export * from './lib/repository-url';
3
3
  export * from './lib/gn4';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMsc0JBQXNCLENBQUE7QUFDcEMsY0FBYyxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9tZXRhZGF0YS1sYW5ndWFnZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlcG9zaXRvcnktdXJsJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ240J1xuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtCQUErQixDQUFBO0FBQzdDLGNBQWMsc0JBQXNCLENBQUE7QUFDcEMsY0FBYyxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9tZXRhZGF0YS1sYW5ndWFnZS50b2tlbidcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlcG9zaXRvcnktdXJsJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ240J1xuIl19
@@ -1,5 +1,5 @@
1
1
  import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
2
- import { getLang3FromLang2 } from '../../../../../../../libs/util/i18n/src';
2
+ import { toLang2, toLang3 } from '../../../../../../../libs/util/i18n/src';
3
3
  import { TranslateService } from '@ngx-translate/core';
4
4
  import { Location } from '@angular/common';
5
5
  import * as i0 from "@angular/core";
@@ -21,14 +21,14 @@ export class AuthService {
21
21
  }
22
22
  return baseUrl
23
23
  .replace('${current_url}', new URL(this.location.path(), window.location.href).toString())
24
- .replace('${lang2}', this.translateService.currentLang)
25
- .replace('${lang3}', getLang3FromLang2(this.translateService.currentLang));
24
+ .replace('${lang2}', toLang2(this.translateService.currentLang))
25
+ .replace('${lang3}', toLang3(this.translateService.currentLang));
26
26
  }
27
27
  get logoutUrl() {
28
28
  return this.baseLogoutUrl;
29
29
  }
30
30
  get settingsUrl() {
31
- return this.baseSettingsUrl.replace('${lang3}', getLang3FromLang2(this.translateService.currentLang));
31
+ return this.baseSettingsUrl.replace('${lang3}', toLang3(this.translateService.currentLang));
32
32
  }
33
33
  constructor(baseLoginUrlToken, baseLogoutUrlToken, baseSettingsUrlToken, translateService, location) {
34
34
  this.baseLoginUrlToken = baseLoginUrlToken;
@@ -64,4 +64,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
64
64
  type: Inject,
65
65
  args: [SETTINGS_URL]
66
66
  }] }, { type: i1.TranslateService }, { type: i2.Location }] });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvcmVwb3NpdG9yeS9zcmMvbGliL2duNC9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTs7OztBQUUxQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxtRUFBbUUsQ0FBQTtBQUN4RyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVMsVUFBVSxDQUFDLENBQUE7QUFFL0QsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcscUJBQXFCLENBQUE7QUFDM0QsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxDQUFTLFdBQVcsQ0FBQyxDQUFBO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLDBFQUEwRSxDQUFBO0FBQ2xILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBUyxhQUFhLENBQUMsQ0FBQTtBQUtyRSxNQUFNLE9BQU8sV0FBVztJQUt0QixJQUFJLFFBQVE7UUFDVixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO1FBQy9CLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUNwQixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDckIsQ0FBQyxNQUFNLENBQUE7UUFDUiwwRUFBMEU7UUFDMUUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUNwRSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDckMsQ0FBQztRQUNELE9BQU8sT0FBTzthQUNYLE9BQU8sQ0FDTixnQkFBZ0IsRUFDaEIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUMvRDthQUNBLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQzthQUN0RCxPQUFPLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO0lBQzlFLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUE7SUFDM0IsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQ2pDLFVBQVUsRUFDVixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQ3JELENBQUE7SUFDSCxDQUFDO0lBRUQsWUFDeUMsaUJBQXlCLEVBQ3hCLGtCQUEwQixFQUN4QixvQkFBNEIsRUFDOUQsZ0JBQWtDLEVBQ2xDLFFBQWtCO1FBSmEsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBQ3hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBUTtRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVE7UUFDOUQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBdkM1QixpQkFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxxQkFBcUIsQ0FBQTtRQUM5RCxrQkFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxzQkFBc0IsQ0FBQTtRQUNqRSxvQkFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsSUFBSSx3QkFBd0IsQ0FBQTtJQXNDcEUsQ0FBQzsrR0F6Q08sV0FBVyxrQkFvQ0EsU0FBUyw2QkFDVCxVQUFVLDZCQUNWLFlBQVk7bUhBdEN2QixXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXFDSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVM7OzBCQUM1QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFVBQVU7OzBCQUM3QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBnZXRMYW5nM0Zyb21MYW5nMiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9pMThuL3NyYydcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0dONF9MT0dJTl9VUkwgPSBgL2dlb25ldHdvcmsvc3J2L1xcJHtsYW5nM30vY2F0YWxvZy5zaWduaW4/cmVkaXJlY3Q9XFwke2N1cnJlbnRfdXJsfWBcbmV4cG9ydCBjb25zdCBMT0dJTl9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignbG9naW5VcmwnKVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9HTjRfTE9HT1VUX1VSTCA9IGAvZ2VvbmV0d29yay9zaWdub3V0YFxuZXhwb3J0IGNvbnN0IExPR09VVF9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignbG9nb3V0VXJsJylcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfR040X1NFVFRJTkdTX1VSTCA9IGAvZ2VvbmV0d29yay9zcnYvXFwke2xhbmczfS9hZG1pbi5jb25zb2xlIy9vcmdhbml6YXRpb24vdXNlcnM/dXNlck9yR3JvdXA9YFxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1VSTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdzZXR0aW5nc1VybCcpXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gIGJhc2VMb2dpblVybCA9IHRoaXMuYmFzZUxvZ2luVXJsVG9rZW4gfHwgREVGQVVMVF9HTjRfTE9HSU5fVVJMXG4gIGJhc2VMb2dvdXRVcmwgPSB0aGlzLmJhc2VMb2dvdXRVcmxUb2tlbiB8fCBERUZBVUxUX0dONF9MT0dPVVRfVVJMXG4gIGJhc2VTZXR0aW5nc1VybCA9IHRoaXMuYmFzZVNldHRpbmdzVXJsVG9rZW4gfHwgREVGQVVMVF9HTjRfU0VUVElOR1NfVVJMXG5cbiAgZ2V0IGxvZ2luVXJsKCkge1xuICAgIGxldCBiYXNlVXJsID0gdGhpcy5iYXNlTG9naW5VcmxcbiAgICBjb25zdCBsb2NhdGlvbkhhc1F1ZXJ5UGFyYW1zID0gISFuZXcgVVJMKFxuICAgICAgdGhpcy5sb2NhdGlvbi5wYXRoKCksXG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgICkuc2VhcmNoXG4gICAgLy8gdGhpcyBpcyBzcGVjaWZpYyB0byBnZW9yY2hlc3RyYSBsb2dpbiBVUkwgYmFzZWQgb24gYSA/bG9naW4gcXVlcnkgcGFyYW1cbiAgICBpZiAoYmFzZVVybC5zdGFydHNXaXRoKCcke2N1cnJlbnRfdXJsfT8nKSAmJiBsb2NhdGlvbkhhc1F1ZXJ5UGFyYW1zKSB7XG4gICAgICBiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKCc/JywgJyYnKVxuICAgIH1cbiAgICByZXR1cm4gYmFzZVVybFxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgICcke2N1cnJlbnRfdXJsfScsXG4gICAgICAgIG5ldyBVUkwodGhpcy5sb2NhdGlvbi5wYXRoKCksIHdpbmRvdy5sb2NhdGlvbi5ocmVmKS50b1N0cmluZygpXG4gICAgICApXG4gICAgICAucmVwbGFjZSgnJHtsYW5nMn0nLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpXG4gICAgICAucmVwbGFjZSgnJHtsYW5nM30nLCBnZXRMYW5nM0Zyb21MYW5nMih0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpKVxuICB9XG5cbiAgZ2V0IGxvZ291dFVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlTG9nb3V0VXJsXG4gIH1cblxuICBnZXQgc2V0dGluZ3NVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVNldHRpbmdzVXJsLnJlcGxhY2UoXG4gICAgICAnJHtsYW5nM30nLFxuICAgICAgZ2V0TGFuZzNGcm9tTGFuZzIodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nKVxuICAgIClcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTE9HSU5fVVJMKSBwcml2YXRlIGJhc2VMb2dpblVybFRva2VuOiBzdHJpbmcsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChMT0dPVVRfVVJMKSBwcml2YXRlIGJhc2VMb2dvdXRVcmxUb2tlbjogc3RyaW5nLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoU0VUVElOR1NfVVJMKSBwcml2YXRlIGJhc2VTZXR0aW5nc1VybFRva2VuOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uXG4gICkge31cbn1cbiJdfQ==
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvcmVwb3NpdG9yeS9zcmMvbGliL2duNC9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBOzs7O0FBRTFDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1FQUFtRSxDQUFBO0FBQ3hHLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBUyxVQUFVLENBQUMsQ0FBQTtBQUUvRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQTtBQUMzRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxjQUFjLENBQVMsV0FBVyxDQUFDLENBQUE7QUFFakUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsMEVBQTBFLENBQUE7QUFDbEgsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFTLGFBQWEsQ0FBQyxDQUFBO0FBS3JFLE1BQU0sT0FBTyxXQUFXO0lBS3RCLElBQUksUUFBUTtRQUNWLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7UUFDL0IsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNyQixDQUFDLE1BQU0sQ0FBQTtRQUNSLDBFQUEwRTtRQUMxRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNyQyxDQUFDO1FBQ0QsT0FBTyxPQUFPO2FBQ1gsT0FBTyxDQUNOLGdCQUFnQixFQUNoQixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQy9EO2FBQ0EsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQy9ELE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUE7SUFDM0IsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQ2pDLFVBQVUsRUFDVixPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUMzQyxDQUFBO0lBQ0gsQ0FBQztJQUVELFlBQ3lDLGlCQUF5QixFQUN4QixrQkFBMEIsRUFDeEIsb0JBQTRCLEVBQzlELGdCQUFrQyxFQUNsQyxRQUFrQjtRQUphLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQUN4Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7UUFDeEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFRO1FBQzlELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQXZDNUIsaUJBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLElBQUkscUJBQXFCLENBQUE7UUFDOUQsa0JBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLElBQUksc0JBQXNCLENBQUE7UUFDakUsb0JBQWUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLElBQUksd0JBQXdCLENBQUE7SUFzQ3BFLENBQUM7K0dBekNPLFdBQVcsa0JBb0NBLFNBQVMsNkJBQ1QsVUFBVSw2QkFDVixZQUFZO21IQXRDdkIsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFxQ0ksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxTQUFTOzswQkFDNUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxVQUFVOzswQkFDN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgdG9MYW5nMiwgdG9MYW5nMyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9pMThuL3NyYydcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0dONF9MT0dJTl9VUkwgPSBgL2dlb25ldHdvcmsvc3J2L1xcJHtsYW5nM30vY2F0YWxvZy5zaWduaW4/cmVkaXJlY3Q9XFwke2N1cnJlbnRfdXJsfWBcbmV4cG9ydCBjb25zdCBMT0dJTl9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignbG9naW5VcmwnKVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9HTjRfTE9HT1VUX1VSTCA9IGAvZ2VvbmV0d29yay9zaWdub3V0YFxuZXhwb3J0IGNvbnN0IExPR09VVF9VUkwgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignbG9nb3V0VXJsJylcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfR040X1NFVFRJTkdTX1VSTCA9IGAvZ2VvbmV0d29yay9zcnYvXFwke2xhbmczfS9hZG1pbi5jb25zb2xlIy9vcmdhbml6YXRpb24vdXNlcnM/dXNlck9yR3JvdXA9YFxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1VSTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdzZXR0aW5nc1VybCcpXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gIGJhc2VMb2dpblVybCA9IHRoaXMuYmFzZUxvZ2luVXJsVG9rZW4gfHwgREVGQVVMVF9HTjRfTE9HSU5fVVJMXG4gIGJhc2VMb2dvdXRVcmwgPSB0aGlzLmJhc2VMb2dvdXRVcmxUb2tlbiB8fCBERUZBVUxUX0dONF9MT0dPVVRfVVJMXG4gIGJhc2VTZXR0aW5nc1VybCA9IHRoaXMuYmFzZVNldHRpbmdzVXJsVG9rZW4gfHwgREVGQVVMVF9HTjRfU0VUVElOR1NfVVJMXG5cbiAgZ2V0IGxvZ2luVXJsKCkge1xuICAgIGxldCBiYXNlVXJsID0gdGhpcy5iYXNlTG9naW5VcmxcbiAgICBjb25zdCBsb2NhdGlvbkhhc1F1ZXJ5UGFyYW1zID0gISFuZXcgVVJMKFxuICAgICAgdGhpcy5sb2NhdGlvbi5wYXRoKCksXG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgICkuc2VhcmNoXG4gICAgLy8gdGhpcyBpcyBzcGVjaWZpYyB0byBnZW9yY2hlc3RyYSBsb2dpbiBVUkwgYmFzZWQgb24gYSA/bG9naW4gcXVlcnkgcGFyYW1cbiAgICBpZiAoYmFzZVVybC5zdGFydHNXaXRoKCcke2N1cnJlbnRfdXJsfT8nKSAmJiBsb2NhdGlvbkhhc1F1ZXJ5UGFyYW1zKSB7XG4gICAgICBiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKCc/JywgJyYnKVxuICAgIH1cbiAgICByZXR1cm4gYmFzZVVybFxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgICcke2N1cnJlbnRfdXJsfScsXG4gICAgICAgIG5ldyBVUkwodGhpcy5sb2NhdGlvbi5wYXRoKCksIHdpbmRvdy5sb2NhdGlvbi5ocmVmKS50b1N0cmluZygpXG4gICAgICApXG4gICAgICAucmVwbGFjZSgnJHtsYW5nMn0nLCB0b0xhbmcyKHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZykpXG4gICAgICAucmVwbGFjZSgnJHtsYW5nM30nLCB0b0xhbmczKHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZykpXG4gIH1cblxuICBnZXQgbG9nb3V0VXJsKCkge1xuICAgIHJldHVybiB0aGlzLmJhc2VMb2dvdXRVcmxcbiAgfVxuXG4gIGdldCBzZXR0aW5nc1VybCgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlU2V0dGluZ3NVcmwucmVwbGFjZShcbiAgICAgICcke2xhbmczfScsXG4gICAgICB0b0xhbmczKHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZylcbiAgICApXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KExPR0lOX1VSTCkgcHJpdmF0ZSBiYXNlTG9naW5VcmxUb2tlbjogc3RyaW5nLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTE9HT1VUX1VSTCkgcHJpdmF0ZSBiYXNlTG9nb3V0VXJsVG9rZW46IHN0cmluZyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNFVFRJTkdTX1VSTCkgcHJpdmF0ZSBiYXNlU2V0dGluZ3NVcmxUb2tlbjogc3RyaW5nLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvblxuICApIHt9XG59XG4iXX0=