@envive-ai/react-hooks 0.3.43 → 0.3.44

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 (65) hide show
  1. package/dist/application/models/index.cjs +0 -1
  2. package/dist/application/models/index.js +0 -1
  3. package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +3 -3
  4. package/dist/application/models/validators/validateGraphQLFrontendConfig.js +3 -3
  5. package/dist/application/utils/urlsParser.cjs +1 -2
  6. package/dist/application/utils/urlsParser.js +1 -2
  7. package/dist/atoms/app/index.d.cts +7 -7
  8. package/dist/atoms/app/index.d.ts +7 -7
  9. package/dist/atoms/chat/chatState.d.ts +19 -19
  10. package/dist/atoms/chat/form.d.cts +2 -2
  11. package/dist/atoms/chat/form.d.ts +2 -2
  12. package/dist/atoms/chat/index.d.cts +3 -3
  13. package/dist/atoms/chat/index.d.ts +2 -2
  14. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  15. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  16. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  17. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  18. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  19. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  20. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  21. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  22. package/dist/atoms/chat/replies.d.cts +3 -3
  23. package/dist/atoms/chat/replies.d.ts +2 -2
  24. package/dist/atoms/chat/suggestions.d.cts +2 -2
  25. package/dist/atoms/chat/suggestions.d.ts +2 -2
  26. package/dist/atoms/envive/enviveConfig.d.cts +13 -13
  27. package/dist/atoms/envive/enviveConfig.d.ts +12 -12
  28. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  29. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  30. package/dist/atoms/org/customerService.d.cts +6 -6
  31. package/dist/atoms/org/customerService.d.ts +6 -6
  32. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  33. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  34. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  35. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  36. package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
  37. package/dist/atoms/org/orgAnalyticsConfig.d.ts +4 -4
  38. package/dist/atoms/search/chatSearch.d.cts +17 -17
  39. package/dist/atoms/search/chatSearch.d.ts +17 -17
  40. package/dist/atoms/search/searchAPI.d.cts +13 -13
  41. package/dist/atoms/search/searchAPI.d.ts +13 -13
  42. package/dist/atoms/search/types.d.ts +1 -1
  43. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  44. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  45. package/dist/contexts/types.cjs +1 -1
  46. package/dist/contexts/types.d.cts +2 -2
  47. package/dist/contexts/types.d.ts +2 -2
  48. package/dist/contexts/types.js +1 -1
  49. package/dist/contexts/typesV3.d.cts +1 -1
  50. package/dist/contexts/typesV3.d.ts +1 -1
  51. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.ts +2 -2
  52. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.cts +2 -2
  53. package/dist/hooks/ShopifyUrlOperations/useShopifyUrlOperations.d.ts +2 -2
  54. package/dist/hooks/utils.d.cts +1 -1
  55. package/dist/hooks/utils.d.ts +1 -1
  56. package/dist/mocks/salesAgentMockData.cjs +2 -2
  57. package/dist/mocks/salesAgentMockData.js +2 -2
  58. package/dist/services/enviveConfigService/fetchGraphQLConfig.cjs +14 -3
  59. package/dist/services/enviveConfigService/fetchGraphQLConfig.js +14 -3
  60. package/package.json +1 -1
  61. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +3 -3
  62. package/src/application/utils/urlsParser.ts +0 -2
  63. package/src/contexts/types.ts +1 -1
  64. package/src/mocks/salesAgentMockData.ts +1 -1
  65. package/src/services/enviveConfigService/fetchGraphQLConfig.ts +13 -2
@@ -38,7 +38,6 @@ const require_spiffyWidgets = require('./spiffyWidgets.cjs');
38
38
  const require_getMerchantFrontendConfigQuery = require('./graphql/queries/getMerchantFrontendConfigQuery.cjs');
39
39
  const require_getMerchantColorsQuery = require('./graphql/queries/getMerchantColorsQuery.cjs');
40
40
  const require_getMerchantOrgIdQuery = require('./graphql/queries/getMerchantOrgIdQuery.cjs');
41
- require('./graphql/index.cjs');
42
41
  const require_isBaseEcommerceEvent = require('./guards/isBaseEcommerceEvent.cjs');
43
42
  const require_isGA4EcommerceEvent = require('./guards/isGA4EcommerceEvent.cjs');
44
43
  const require_isLegacyUAEcommerceEvent = require('./guards/isLegacyUAEcommerceEvent.cjs');
@@ -38,7 +38,6 @@ import { SpiffyWidgets } from "./spiffyWidgets.js";
38
38
  import { getMerchantFrontendConfigQuery } from "./graphql/queries/getMerchantFrontendConfigQuery.js";
39
39
  import { getMerchantColorsQuery } from "./graphql/queries/getMerchantColorsQuery.js";
40
40
  import { getMerchantOrgIdQuery } from "./graphql/queries/getMerchantOrgIdQuery.js";
41
- import "./graphql/index.js";
42
41
  import { isBaseEcommerceEvent } from "./guards/isBaseEcommerceEvent.js";
43
42
  import { isGA4EcommerceEvent } from "./guards/isGA4EcommerceEvent.js";
44
43
  import { isLegacyUAEcommerceEvent } from "./guards/isLegacyUAEcommerceEvent.js";
@@ -62,7 +62,7 @@ const validateAndTransformMountingConfig = (config, configKey) => {
62
62
  }
63
63
  if (typeof normalizedConfig.mountingConfigId !== "string" || !normalizedConfig.mountingConfigId) throw new Error(`Missing or invalid mountingConfigId for config '${configKey}'`);
64
64
  if (typeof normalizedConfig.containerId !== "string" || !normalizedConfig.containerId) throw new Error(`Missing or invalid containerId for config '${configKey}'`);
65
- if (typeof normalizedConfig.testId !== "string" || !normalizedConfig.testId) throw new Error(`Missing or invalid testId for config '${configKey}'`);
65
+ if (normalizedConfig.testId !== void 0 && typeof normalizedConfig.testId !== "string") throw new Error(`Invalid testId for config '${configKey}'. Must be a string if provided`);
66
66
  if (!normalizedConfig.insertionPoint || typeof normalizedConfig.insertionPoint !== "object" || Array.isArray(normalizedConfig.insertionPoint)) throw new Error(`Missing or invalid insertionPoint for config '${configKey}'`);
67
67
  const insertionPoint = normalizedConfig.insertionPoint;
68
68
  if (typeof insertionPoint.selector !== "string" || !insertionPoint.selector) throw new Error(`Missing or invalid insertionPoint.selector for config '${configKey}'`);
@@ -111,7 +111,7 @@ const validateAndTransformMountingConfig = (config, configKey) => {
111
111
  const result = {
112
112
  mountingConfigId: normalizedConfig.mountingConfigId,
113
113
  containerId: normalizedConfig.containerId,
114
- testId: normalizedConfig.testId,
114
+ ...normalizedConfig.testId ? { testId: normalizedConfig.testId } : {},
115
115
  insertionPoint: {
116
116
  selector: insertionPoint.selector,
117
117
  insertionType: insertionPoint.insertionType,
@@ -229,4 +229,4 @@ exports.validateAndTransformMountingConfig = validateAndTransformMountingConfig;
229
229
  exports.validateAndTransformPageVariants = validateAndTransformPageVariants;
230
230
  exports.validateAndTransformWidgetConfig = validateAndTransformWidgetConfig;
231
231
  exports.validateGraphQLFrontendConfig = validateGraphQLFrontendConfig;
232
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWcuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwidHJhbnNmb3JtU25ha2VUb0NhbWVsIiwibm9ybWFsaXplZENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iLCJQYWdlVmFyaWFudFRlc3RUeXBlIiwiRE9NSW5zZXJ0aW9uVHlwZSIsIkdyaWRJbnNlcnRpb25UeXBlIiwicmVzdWx0OiBXaWRnZXRNb3VudGluZ0NvbmZpZyIsInZhbGlkYXRlZFBhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSIsIm1vdW50aW5nQ29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+Iiwid2lkZ2V0Q29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCB7IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbHMvc25ha2VUb0NhbWVsVHJhbnNmb3JtZXInO1xuaW1wb3J0IHtcbiAgUGFnZVZhcmlhbnRDb25maWcsXG4gIFBhZ2VWYXJpYW50VGVzdFR5cGUsXG4gIFdpZGdldENvbmZpZyxcbiAgV2lkZ2V0TW91bnRpbmdDb25maWcsXG59IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlcyc7XG5pbXBvcnQgeyBET01JbnNlcnRpb25UeXBlIH0gZnJvbSAnc3JjL21lcmNoYW50cy9kb21JbnNlcnRpb24nO1xuaW1wb3J0IHsgR3JpZEluc2VydGlvblR5cGUgfSBmcm9tICdzcmMvbWVyY2hhbnRzL2dyaWRJbnNlcnRpb24nO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCd2YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZycpO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBQYWdlVmFyaWFudFF1ZXJ5RGF0YSB0byBQYWdlVmFyaWFudENvbmZpZ1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzID0gKFxuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUGFnZVZhcmlhbnRDb25maWcgPT4ge1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb25maWcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGNvbnN0IHsgdmFyaWFudENoZWNrcywgd2lkZ2V0TW91bnRpbmcsIC4uLnJlc3QgfSA9IHRyYW5zZm9ybWVkO1xuXG4gIC8vIENvbnZlcnQgdmFyaWFudENoZWNrcyB0byB2YXJpYW50VGVzdHMgd2l0aCB0ZXN0VHlwZSBub3JtYWxpemF0aW9uXG4gIGNvbnN0IHZhcmlhbnRUZXN0cyA9IEFycmF5LmlzQXJyYXkodmFyaWFudENoZWNrcylcbiAgICA/IHZhcmlhbnRDaGVja3MubWFwKCh7IGNoZWNrVHlwZSwgLi4ucmVzdENoZWNrIH0pID0+ICh7XG4gICAgICAgIC4uLnJlc3RDaGVjayxcbiAgICAgICAgdGVzdFR5cGU6IGNoZWNrVHlwZSxcbiAgICAgIH0pKVxuICAgIDogW107XG5cbiAgLy8gTm9ybWFsaXplIHdpZGdldE1vdW50aW5nOiBjaGVja3MgLT4gdGVzdHMsIGNoZWNrVHlwZSAtPiB0ZXN0VHlwZVxuICBjb25zdCBub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcgPSBBcnJheS5pc0FycmF5KHdpZGdldE1vdW50aW5nKVxuICAgID8gd2lkZ2V0TW91bnRpbmcubWFwKCh7IG1vdW50aW5nUG9pbnRXaWRnZXRzLCAuLi5yZXN0TW91bnRpbmcgfSkgPT4gKHtcbiAgICAgICAgLi4ucmVzdE1vdW50aW5nLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShtb3VudGluZ1BvaW50V2lkZ2V0cylcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgbW91bnRpbmdQb2ludFdpZGdldHM6IG1vdW50aW5nUG9pbnRXaWRnZXRzLm1hcCgoeyBjaGVja3MsIC4uLnJlc3RXaWRnZXQgfSkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5yZXN0V2lkZ2V0LFxuICAgICAgICAgICAgICAgIHRlc3RzOiBBcnJheS5pc0FycmF5KGNoZWNrcylcbiAgICAgICAgICAgICAgICAgID8gY2hlY2tzLm1hcCgoeyBjaGVja1R5cGUsIC4uLnJlc3RDaGVjayB9KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3RDaGVjayxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXN0VHlwZTogY2hlY2tUeXBlLFxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0pKVxuICAgIDogW107XG5cbiAgY29uc3Qgbm9ybWFsaXplZENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgLi4ucmVzdCxcbiAgICAuLi4odmFyaWFudFRlc3RzID8geyB2YXJpYW50VGVzdHMgfSA6IHt9KSxcbiAgICAuLi4obm9ybWFsaXplZFdpZGdldE1vdW50aW5nID8geyB3aWRnZXRNb3VudGluZzogbm9ybWFsaXplZFdpZGdldE1vdW50aW5nIH0gOiB7fSksXG4gIH07XG5cbiAgY29uc3QgdmFyaWFudElkID0gbm9ybWFsaXplZENvbmZpZy52YXJpYW50SWQgYXMgc3RyaW5nO1xuICBjb25zdCB2YXJpYW50VHlwZSA9IG5vcm1hbGl6ZWRDb25maWcudmFyaWFudFR5cGUgYXMgc3RyaW5nO1xuXG4gIGlmICh0eXBlb2YgdmFyaWFudElkICE9PSAnc3RyaW5nJyB8fCAhdmFyaWFudElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgdmFyaWFudElkIGZvciBwYWdlVmFyaWFudGApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YXJpYW50VHlwZSAhPT0gJ3N0cmluZycgfHwgIXZhcmlhbnRUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgdmFyaWFudFR5cGUgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFyaWFudFRlc3RzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nIG9yIGludmFsaWQgdmFyaWFudFRlc3RzIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gTXVzdCBiZSBhbiBhcnJheWAsXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgdGVzdCBvZiB2YXJpYW50VGVzdHMpIHtcbiAgICBpZiAoIXRlc3QudGVzdFR5cGUgfHwgdHlwZW9mIHRlc3QudGVzdFR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFyaWFudFRlc3QudGVzdFR5cGUgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhQYWdlVmFyaWFudFRlc3RUeXBlKS5pbmNsdWRlcyh0ZXN0LnRlc3RUeXBlIGFzIFBhZ2VWYXJpYW50VGVzdFR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHRlc3RUeXBlICcke3Rlc3QudGVzdFR5cGV9JyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoXG4gICAgICAgICAgUGFnZVZhcmlhbnRUZXN0VHlwZSxcbiAgICAgICAgKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1pc3Npbmcgb3IgaW52YWxpZCB3aWRnZXRNb3VudGluZyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIE11c3QgYmUgYW4gYXJyYXlgLFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG1vdW50aW5nIG9mIG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZykge1xuICAgIGlmICh0eXBlb2YgbW91bnRpbmcubW91bnRpbmdDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIW1vdW50aW5nLm1vdW50aW5nQ29uZmlnSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtb3VudGluZ0NvbmZpZ0lkIGluIHdpZGdldE1vdW50aW5nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cblxuICAgIGlmIChtb3VudGluZy53aWRnZXRDb25maWdJZCAmJiB0eXBlb2YgbW91bnRpbmcud2lkZ2V0Q29uZmlnSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd2lkZ2V0Q29uZmlnSWQgaW4gd2lkZ2V0TW91bnRpbmcgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuXG4gICAgaWYgKG1vdW50aW5nLm1vdW50aW5nUG9pbnRXaWRnZXRzKSB7XG4gICAgICBmb3IgKGNvbnN0IHdpZGdldCBvZiBtb3VudGluZy5tb3VudGluZ1BvaW50V2lkZ2V0cykge1xuICAgICAgICBpZiAodHlwZW9mIHdpZGdldC53aWRnZXRDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIXdpZGdldC53aWRnZXRDb25maWdJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIHdpZGdldENvbmZpZ0lkIGluIG1vdW50aW5nUG9pbnRXaWRnZXRzIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh3aWRnZXQudGVzdHMpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgb3IgbWlzc2luZyB0ZXN0cyBpbiBtb3VudGluZ1BvaW50V2lkZ2V0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodmFyaWFudFR5cGUgPT09ICdwbHAnKSB7XG4gICAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnBscElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy5wbHBJZEV4dHJhY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgcGxwSWRFeHRyYWN0b3IgZm9yIFBMUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh2YXJpYW50VHlwZSA9PT0gJ3BkcCcpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wcm9kdWN0SWRFeHRyYWN0b3IgIT09ICdzdHJpbmcnIHx8XG4gICAgICAhbm9ybWFsaXplZENvbmZpZy5wcm9kdWN0SWRFeHRyYWN0b3JcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHByb2R1Y3RJZEV4dHJhY3RvciBmb3IgUERQIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWRDb25maWcucGFyZW50UHJvZHVjdElkRXh0cmFjdG9yICYmXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wYXJlbnRQcm9kdWN0SWRFeHRyYWN0b3IgIT09ICdzdHJpbmcnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmVudFByb2R1Y3RJZEV4dHJhY3RvciBmb3IgUERQIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBNdXN0IGJlIHN0cmluZyBpZiBwcm92aWRlZGAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkQ29uZmlnIGFzIFBhZ2VWYXJpYW50Q29uZmlnO1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gTW91bnRpbmdDb25maWdRdWVyeURhdGEgdG8gV2lkZ2V0TW91bnRpbmdDb25maWdcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnID0gKFxuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjb25maWdLZXk6IHN0cmluZyxcbik6IFdpZGdldE1vdW50aW5nQ29uZmlnID0+IHtcbiAgLy8gUkVOQU1JTkcgTE9HSUM6IENvbnZlcnQgYmFja2VuZCBcIkNoZWNrXCIgdGVybWlub2xvZ3kgdG8gZnJvbnRlbmQgXCJUZXN0XCIgdGVybWlub2xvZ3lcbiAgY29uc3Qgbm9ybWFsaXplZENvbmZpZyA9IHsgLi4uY29uZmlnIH07XG5cbiAgLy8gQ29udmVydCBjaGVja0lkIHRvIHRlc3RJZCBmb3IgZnJvbnRlbmQgY29tcGF0aWJpbGl0eSAoZGF0YSBpcyBhbHJlYWR5IGNhbWVsQ2FzZSlcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY2hlY2tJZCAmJiAhbm9ybWFsaXplZENvbmZpZy50ZXN0SWQpIHtcbiAgICBub3JtYWxpemVkQ29uZmlnLnRlc3RJZCA9IG5vcm1hbGl6ZWRDb25maWcuY2hlY2tJZDtcbiAgICBkZWxldGUgbm9ybWFsaXplZENvbmZpZy5jaGVja0lkO1xuICB9XG5cbiAgLy8gUmVxdWlyZWQgZmllbGRzIC0gdGhlc2UgbXVzdCBiZSBwcmVzZW50IGFuZCB2YWxpZFxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcubW91bnRpbmdDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcubW91bnRpbmdDb25maWdJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIG1vdW50aW5nQ29uZmlnSWQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5jb250YWluZXJJZCAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcuY29udGFpbmVySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBjb250YWluZXJJZCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnRlc3RJZCAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcudGVzdElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgdGVzdElkIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIC8vIFJlcXVpcmVkIGluc2VydGlvblBvaW50XG4gIGlmIChcbiAgICAhbm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludCB8fFxuICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50ICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgaW5zZXJ0aW9uUG9pbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgY29uc3QgaW5zZXJ0aW9uUG9pbnQgPSBub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIFZhbGlkYXRlIGluc2VydGlvblBvaW50IHJlcXVpcmVkIGZpZWxkc1xuICBpZiAodHlwZW9mIGluc2VydGlvblBvaW50LnNlbGVjdG9yICE9PSAnc3RyaW5nJyB8fCAhaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBpbnNlcnRpb25Qb2ludC5zZWxlY3RvciBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fCAhaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgaW5zZXJ0aW9uVHlwZSBpcyBhIHZhbGlkIERPTUluc2VydGlvblR5cGVcbiAgaWYgKCFPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmluY2x1ZGVzKGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlICcke2luc2VydGlvblBvaW50Lmluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uYWwgaW5zZXJ0aW9uUG9pbnQgZmllbGRzXG4gIGlmIChpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCAhPSBudWxsICYmIHR5cGVvZiBpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uYWwgcGFyZW50SW5zZXJ0aW9uUG9pbnQgaWYgcHJlc2VudFxuICBsZXQgcGFyZW50SW5zZXJ0aW9uUG9pbnQ7XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50KSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucGFyZW50SW5zZXJ0aW9uUG9pbnQgIT09ICdvYmplY3QnIHx8XG4gICAgICBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcucGFyZW50SW5zZXJ0aW9uUG9pbnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRQb2ludCA9IG5vcm1hbGl6ZWRDb25maWcucGFyZW50SW5zZXJ0aW9uUG9pbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKHR5cGVvZiBwYXJlbnRQb2ludC5zZWxlY3RvciAhPT0gJ3N0cmluZycgfHwgIXBhcmVudFBvaW50LnNlbGVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludC5zZWxlY3RvciBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHwgIXBhcmVudFBvaW50Lmluc2VydGlvblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMocGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlICcke3BhcmVudFBvaW50Lmluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudFBvaW50LnNlbGVjdGlvbkluZGV4ICE9IG51bGwgJiYgdHlwZW9mIHBhcmVudFBvaW50LnNlbGVjdGlvbkluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcGFyZW50SW5zZXJ0aW9uUG9pbnQgPSB7XG4gICAgICBzZWxlY3RvcjogcGFyZW50UG9pbnQuc2VsZWN0b3IsXG4gICAgICBpbnNlcnRpb25UeXBlOiBwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUsXG4gICAgICBzZWxlY3Rpb25JbmRleDogcGFyZW50UG9pbnQuc2VsZWN0aW9uSW5kZXggYXMgbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCB3cmFwcGluZ0VsZW1lbnQgaWYgcHJlc2VudFxuICBsZXQgd3JhcHBpbmdFbGVtZW50O1xuICBpZiAobm9ybWFsaXplZENvbmZpZy53cmFwcGluZ0VsZW1lbnQpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy53cmFwcGluZ0VsZW1lbnQgIT09ICdvYmplY3QnIHx8XG4gICAgICBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdyYXBwaW5nRWxlbWVudCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdGApO1xuICAgIH1cblxuICAgIGNvbnN0IHdyYXBwaW5nID0gbm9ybWFsaXplZENvbmZpZy53cmFwcGluZ0VsZW1lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKHR5cGVvZiB3cmFwcGluZy5jbGFzc05hbWUgIT09ICdzdHJpbmcnIHx8ICF3cmFwcGluZy5jbGFzc05hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5jbGFzc05hbWUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdyYXBwaW5nLmVsZW1lbnQgIT09ICdzdHJpbmcnIHx8ICF3cmFwcGluZy5lbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuZWxlbWVudCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHwgIXdyYXBwaW5nLmluc2VydGlvblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5pbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMod3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuaW5zZXJ0aW9uVHlwZSAnJHt3cmFwcGluZy5pbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHdyYXBwaW5nRWxlbWVudCA9IHtcbiAgICAgIGNsYXNzTmFtZTogd3JhcHBpbmcuY2xhc3NOYW1lLFxuICAgICAgZWxlbWVudDogd3JhcHBpbmcuZWxlbWVudCxcbiAgICAgIGluc2VydGlvblR5cGU6IHdyYXBwaW5nLmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uYWwgZmllbGRzXG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLmRpdkNoZWNrU2VsZWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmRpdkNoZWNrU2VsZWN0b3IgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGRpdkNoZWNrU2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUgIT0gbnVsbCAmJiB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY2xhc3NOYW1lIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuc3VwcHJlc3Npb25TZWxlY3RvciAhPSBudWxsICYmXG4gICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuc3VwcHJlc3Npb25TZWxlY3RvciAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgc3VwcHJlc3Npb25TZWxlY3RvciBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzICE9IG51bGwgJiZcbiAgICAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMgIT09ICdvYmplY3QnIHx8XG4gICAgICBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMpKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBkYXRhQXR0cmlidXRlcyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdCBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5zdHlsZSAhPSBudWxsICYmXG4gICAgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnN0eWxlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcuc3R5bGUpKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3R5bGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3Qgb3IgbnVsbC91bmRlZmluZWRgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGdyaWRJbnNlcnRpb25UeXBlIGlmIHByZXNlbnRcbiAgbGV0IGdyaWRJbnNlcnRpb25UeXBlO1xuICBpZiAobm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fFxuICAgICAgIW5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBncmlkSW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIU9iamVjdC52YWx1ZXMoR3JpZEluc2VydGlvblR5cGUpLmluY2x1ZGVzKFxuICAgICAgICBub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlIGFzIEdyaWRJbnNlcnRpb25UeXBlLFxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBncmlkSW5zZXJ0aW9uVHlwZSAnJHtub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhHcmlkSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZ3JpZEluc2VydGlvblR5cGUgPSBub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlIGFzIEdyaWRJbnNlcnRpb25UeXBlO1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIHJldHVybiBvYmplY3QsIG9ubHkgaW5jbHVkaW5nIG9wdGlvbmFsIGZpZWxkcyBpZiB0aGV5IGhhdmUgdmFsdWVzXG4gIGNvbnN0IHJlc3VsdDogV2lkZ2V0TW91bnRpbmdDb25maWcgPSB7XG4gICAgbW91bnRpbmdDb25maWdJZDogbm9ybWFsaXplZENvbmZpZy5tb3VudGluZ0NvbmZpZ0lkLFxuICAgIGNvbnRhaW5lcklkOiBub3JtYWxpemVkQ29uZmlnLmNvbnRhaW5lcklkLFxuICAgIHRlc3RJZDogbm9ybWFsaXplZENvbmZpZy50ZXN0SWQsXG4gICAgaW5zZXJ0aW9uUG9pbnQ6IHtcbiAgICAgIHNlbGVjdG9yOiBpbnNlcnRpb25Qb2ludC5zZWxlY3RvcixcbiAgICAgIGluc2VydGlvblR5cGU6IGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSxcbiAgICAgIC4uLihpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCAhPSBudWxsICYmIHtcbiAgICAgICAgc2VsZWN0aW9uSW5kZXg6IGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4LFxuICAgICAgfSksXG4gICAgfSxcbiAgfTtcblxuICAvLyBPbmx5IGFkZCBvcHRpb25hbCBmaWVsZHMgaWYgdGhleSBoYXZlIHZhbHVlc1xuICBpZiAocGFyZW50SW5zZXJ0aW9uUG9pbnQpIHtcbiAgICByZXN1bHQucGFyZW50SW5zZXJ0aW9uUG9pbnQgPSBwYXJlbnRJbnNlcnRpb25Qb2ludDtcbiAgfVxuICBpZiAoZ3JpZEluc2VydGlvblR5cGUpIHtcbiAgICByZXN1bHQuZ3JpZEluc2VydGlvblR5cGUgPSBncmlkSW5zZXJ0aW9uVHlwZTtcbiAgfVxuICBpZiAod3JhcHBpbmdFbGVtZW50KSB7XG4gICAgcmVzdWx0LndyYXBwaW5nRWxlbWVudCA9IHdyYXBwaW5nRWxlbWVudDtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yKSB7XG4gICAgcmVzdWx0LmRpdkNoZWNrU2VsZWN0b3IgPSBub3JtYWxpemVkQ29uZmlnLmRpdkNoZWNrU2VsZWN0b3IgYXMgc3RyaW5nO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNsYXNzTmFtZSkge1xuICAgIHJlc3VsdC5jbGFzc05hbWUgPSBub3JtYWxpemVkQ29uZmlnLmNsYXNzTmFtZSBhcyBzdHJpbmc7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuc3VwcHJlc3Npb25TZWxlY3Rvcikge1xuICAgIHJlc3VsdC5zdXBwcmVzc2lvblNlbGVjdG9yID0gbm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzKSB7XG4gICAgcmVzdWx0LmRhdGFBdHRyaWJ1dGVzID0gbm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcyBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLnN0eWxlKSB7XG4gICAgcmVzdWx0LnN0eWxlID0gbm9ybWFsaXplZENvbmZpZy5zdHlsZSBhcyBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIFdpZGdldENvbmZpZ1F1ZXJ5RGF0YSB0byBXaWRnZXRDb25maWdcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybVdpZGdldENvbmZpZyA9IChcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29uZmlnS2V5OiBzdHJpbmcsXG4pOiBXaWRnZXRDb25maWcgPT4ge1xuICBjb25zdCBub3JtYWxpemVkQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKGNvbmZpZykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLndpZGdldENvbmZpZ0lkICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy53aWRnZXRDb25maWdJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHdpZGdldENvbmZpZ0lkIGZvciB3aWRnZXQgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnR5cGUgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLnR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB0eXBlIGZvciB3aWRnZXQgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICBpZiAobm9ybWFsaXplZENvbmZpZy5jb250ZW50SWQgIT0gbnVsbCAmJiB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5jb250ZW50SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY29udGVudElkIGZvciB3aWRnZXQgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG5cbiAgLy8gTm90ZTogV2lkZ2V0IGNvbmZpZ3MgYXJlIGNvbXBsZXggdW5pb25zIHdpdGggdHlwZS1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxuXG4gIC8vIFJldHVybiB0aGUgbm9ybWFsaXplZCBjb25maWcgYXMgV2lkZ2V0Q29uZmlnXG4gIC8vIFVzZSBpbnRlcm1lZGlhdGUgJ3Vua25vd24nIGNhc3QgZm9yIGNvbXBsZXggdW5pb24gdHlwZXNcbiAgcmV0dXJuIG5vcm1hbGl6ZWRDb25maWcgYXMgdW5rbm93biBhcyBXaWRnZXRDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWcgPSAoZGF0YTogdW5rbm93bik6IEZyb250ZW5kQ29uZmlnIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGE6IG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgb2JqID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBWYWxpZGF0ZSBtZXJjaGFudF9vdmVycmlkZV9jc3MgaWYgcHJlc2VudFxuICBpZiAoXG4gICAgJ21lcmNoYW50X292ZXJyaWRlX2NzcycgaW4gb2JqICYmXG4gICAgdHlwZW9mIG9iai5tZXJjaGFudF9vdmVycmlkZV9jc3MgIT09ICdzdHJpbmcnICYmXG4gICAgb2JqLm1lcmNoYW50X292ZXJyaWRlX2NzcyAhPT0gbnVsbFxuICApIHtcbiAgICBsb2dnZXIubG9nV2FybihcbiAgICAgICdJbnZhbGlkIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGE6IG1lcmNoYW50X292ZXJyaWRlX2NzcyBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgeyBkYXRhIH0sXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgcGFnZV92YXJpYW50cyBpZiBwcmVzZW50XG4gIGlmICgncGFnZV92YXJpYW50cycgaW4gb2JqKSB7XG4gICAgaWYgKFxuICAgICAgb2JqLnBhZ2VfdmFyaWFudHMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb2JqLnBhZ2VfdmFyaWFudHMgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG9iai5wYWdlX3ZhcmlhbnRzKVxuICAgICkge1xuICAgICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdJbnZhbGlkIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGE6IHBhZ2VfdmFyaWFudHMgbXVzdCBiZSBhbiBhcnJheSBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBkYXRhIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBtb3VudGluZ19jb25maWdzIGlmIHByZXNlbnRcbiAgaWYgKCdtb3VudGluZ19jb25maWdzJyBpbiBvYmopIHtcbiAgICBpZiAoXG4gICAgICBvYmoubW91bnRpbmdfY29uZmlncyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvYmoubW91bnRpbmdfY29uZmlncyAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkob2JqLm1vdW50aW5nX2NvbmZpZ3MpXG4gICAgKSB7XG4gICAgICBsb2dnZXIubG9nV2FybihcbiAgICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogbW91bnRpbmdfY29uZmlncyBtdXN0IGJlIGFuIGFycmF5IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7IGRhdGEgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHdpZGdldF9jb25maWdzIGlmIHByZXNlbnRcbiAgaWYgKCd3aWRnZXRfY29uZmlncycgaW4gb2JqKSB7XG4gICAgaWYgKFxuICAgICAgb2JqLndpZGdldF9jb25maWdzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9iai53aWRnZXRfY29uZmlncyAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkob2JqLndpZGdldF9jb25maWdzKVxuICAgICkge1xuICAgICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdJbnZhbGlkIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGE6IHdpZGdldF9jb25maWdzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgZGF0YSB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgdWlfY29uZmlncyBpZiBwcmVzZW50XG4gIGlmICgndWlfY29uZmlncycgaW4gb2JqICYmIHR5cGVvZiBvYmoudWlfY29uZmlncyAhPT0gJ29iamVjdCcgJiYgb2JqLnVpX2NvbmZpZ3MgIT09IG51bGwpIHtcbiAgICBsb2dnZXIubG9nV2FybihcbiAgICAgICdJbnZhbGlkIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGE6IHVpX2NvbmZpZ3MgbXVzdCBiZSBhbiBvYmplY3Qgb3IgbnVsbC91bmRlZmluZWQnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgeyBkYXRhIH0sXG4gICAgKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUcmFuc2Zvcm0gdGhlIGRhdGEgdG8gY2FtZWxDYXNlXG4gICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKG9iaikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBDb252ZXJ0IHBhZ2VfdmFyaWFudHMgZnJvbSBhcnJheSB0byB2YWxpZGF0ZWQgYXJyYXkgaWYgcHJlc2VudFxuICAgIGlmICh0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzICYmIEFycmF5LmlzQXJyYXkodHJhbnNmb3JtZWREYXRhLnBhZ2VWYXJpYW50cykpIHtcbiAgICAgIGNvbnN0IHBhZ2VWYXJpYW50c0FycmF5ID0gdHJhbnNmb3JtZWREYXRhLnBhZ2VWYXJpYW50cztcbiAgICAgIGNvbnN0IHZhbGlkYXRlZFBhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgcGFnZVZhcmlhbnRzQXJyYXkpIHtcbiAgICAgICAgaWYgKHZhcmlhbnQgJiYgdHlwZW9mIHZhcmlhbnQgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YXJpYW50LnZhcmlhbnRJZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFyaWFudCA9IHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzKHZhcmlhbnQpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGFnZVZhcmlhbnRzLnB1c2godmFsaWRhdGVkVmFyaWFudCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIHBhZ2UgdmFyaWFudCwgc2tpcHBpbmcnLCBlcnJvciwge1xuICAgICAgICAgICAgICB2YXJpYW50SWQ6IHZhcmlhbnQudmFyaWFudElkLFxuICAgICAgICAgICAgICB2YXJpYW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDb250aW51ZSBwcm9jZXNzaW5nIG90aGVyIHZhcmlhbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIHBhZ2UgdmFyaWFudCBzdHJ1Y3R1cmUsIHNraXBwaW5nJywgdW5kZWZpbmVkLCB7IHZhcmlhbnQgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJhbnNmb3JtZWREYXRhLnBhZ2VWYXJpYW50cyA9IHZhbGlkYXRlZFBhZ2VWYXJpYW50cztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IG1vdW50aW5nX2NvbmZpZ3MgZnJvbSBhcnJheSB0byBSZWNvcmQgaWYgcHJlc2VudFxuICAgIGlmICh0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzICYmIEFycmF5LmlzQXJyYXkodHJhbnNmb3JtZWREYXRhLm1vdW50aW5nQ29uZmlncykpIHtcbiAgICAgIGNvbnN0IG1vdW50aW5nQ29uZmlnc0FycmF5ID0gdHJhbnNmb3JtZWREYXRhLm1vdW50aW5nQ29uZmlncyBhcyBBcnJheTx7XG4gICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICBjb25maWc6IHVua25vd247XG4gICAgICB9PjtcbiAgICAgIGNvbnN0IG1vdW50aW5nQ29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+ID0ge307XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtb3VudGluZ0NvbmZpZ3NBcnJheSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaXRlbSAmJlxuICAgICAgICAgIHR5cGVvZiBpdGVtLmtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBpdGVtLmNvbmZpZyAmJlxuICAgICAgICAgIHR5cGVvZiBpdGVtLmNvbmZpZyA9PT0gJ29iamVjdCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gdGhlIGNvbmZpZyBzdHJ1Y3R1cmVcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGl0ZW0uY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1Nb3VudGluZ0NvbmZpZyhjb25maWcsIGl0ZW0ua2V5KTtcbiAgICAgICAgICAgIG1vdW50aW5nQ29uZmlnc1JlY29yZFtpdGVtLmtleV0gPSB2YWxpZGF0ZWRDb25maWc7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIG1vdW50aW5nIGNvbmZpZywgc2tpcHBpbmcnLCBlcnJvciwge1xuICAgICAgICAgICAgICBjb25maWdLZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICBjb25maWc6IGl0ZW0uY29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDb250aW51ZSBwcm9jZXNzaW5nIG90aGVyIGNvbmZpZ3NcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgbW91bnRpbmcgY29uZmlnIGl0ZW0gc3RydWN0dXJlLCBza2lwcGluZycsIHVuZGVmaW5lZCwgeyBpdGVtIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MgPSBtb3VudGluZ0NvbmZpZ3NSZWNvcmQ7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCB3aWRnZXRfY29uZmlncyBmcm9tIGFycmF5IHRvIFJlY29yZCBpZiBwcmVzZW50XG4gICAgaWYgKHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzICYmIEFycmF5LmlzQXJyYXkodHJhbnNmb3JtZWREYXRhLndpZGdldENvbmZpZ3MpKSB7XG4gICAgICBjb25zdCB3aWRnZXRDb25maWdzQXJyYXkgPSB0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncyBhcyBBcnJheTx7XG4gICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICBjb25maWc6IHVua25vd247XG4gICAgICB9PjtcbiAgICAgIGNvbnN0IHdpZGdldENvbmZpZ3NSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB3aWRnZXRDb25maWdzQXJyYXkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGl0ZW0gJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5rZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgaXRlbS5jb25maWcgJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5jb25maWcgPT09ICdvYmplY3QnXG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBhbmQgdHJhbnNmb3JtIHdpZGdldCBjb25maWcgdXNpbmcgdGhlIGRlZGljYXRlZCB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZENvbmZpZyA9IHZhbGlkYXRlQW5kVHJhbnNmb3JtV2lkZ2V0Q29uZmlnKGNvbmZpZywgaXRlbS5rZXkpO1xuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnc1JlY29yZFtpdGVtLmtleV0gPSB2YWxpZGF0ZWRDb25maWc7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIHdpZGdldCBjb25maWcsIHNraXBwaW5nJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgY29uZmlnS2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgICAgY29uZmlnOiBpdGVtLmNvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgcHJvY2Vzc2luZyBvdGhlciBjb25maWdzXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIHdpZGdldCBjb25maWcgaXRlbSBzdHJ1Y3R1cmUsIHNraXBwaW5nJywgdW5kZWZpbmVkLCB7IGl0ZW0gfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJhbnNmb3JtZWREYXRhLndpZGdldENvbmZpZ3MgPSB3aWRnZXRDb25maWdzUmVjb3JkO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGEgYXMgRnJvbnRlbmRDb25maWc7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmxvZ1dhcm4oJ0ZhaWxlZCB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGEnLCBlcnJvciwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBWUEsTUFBTSxTQUFTLElBQUlBLHVCQUFPLGdDQUFnQztBQUcxRCxNQUFhLG9DQUNYLFdBQ3NCO0NBR3RCLE1BQU0sRUFBRSxlQUFlLGdCQUFnQixHQUFHLFNBRnRCQyxzREFBc0IsT0FBTztDQUtqRCxNQUFNLGVBQWUsTUFBTSxRQUFRLGNBQWMsR0FDN0MsY0FBYyxLQUFLLEVBQUUsV0FBVyxHQUFHLGlCQUFpQjtFQUNsRCxHQUFHO0VBQ0gsVUFBVTtFQUNYLEVBQUUsR0FDSCxFQUFFO0NBR04sTUFBTSwyQkFBMkIsTUFBTSxRQUFRLGVBQWUsR0FDMUQsZUFBZSxLQUFLLEVBQUUsc0JBQXNCLEdBQUcsb0JBQW9CO0VBQ2pFLEdBQUc7RUFDSCxHQUFJLE1BQU0sUUFBUSxxQkFBcUIsR0FDbkMsRUFDRSxzQkFBc0IscUJBQXFCLEtBQUssRUFBRSxRQUFRLEdBQUcsa0JBQWtCO0dBQzdFLEdBQUc7R0FDSCxPQUFPLE1BQU0sUUFBUSxPQUFPLEdBQ3hCLE9BQU8sS0FBSyxFQUFFLFdBQVcsR0FBRyxpQkFBaUI7SUFDM0MsR0FBRztJQUNILFVBQVU7SUFDWCxFQUFFLEdBQ0gsRUFBRTtHQUNQLEVBQUUsRUFDSixHQUNELEVBQUU7RUFDUCxFQUFFLEdBQ0gsRUFBRTtDQUVOLE1BQU1DLG1CQUE0QztFQUNoRCxHQUFHO0VBQ0gsR0FBSSxlQUFlLEVBQUUsY0FBYyxHQUFHLEVBQUU7RUFDeEMsR0FBSSwyQkFBMkIsRUFBRSxnQkFBZ0IsMEJBQTBCLEdBQUcsRUFBRTtFQUNqRjtDQUVELE1BQU0sWUFBWSxpQkFBaUI7Q0FDbkMsTUFBTSxjQUFjLGlCQUFpQjtBQUVyQyxLQUFJLE9BQU8sY0FBYyxZQUFZLENBQUMsVUFDcEMsT0FBTSxJQUFJLE1BQU0sK0NBQStDO0FBR2pFLEtBQUksT0FBTyxnQkFBZ0IsWUFBWSxDQUFDLFlBQ3RDLE9BQU0sSUFBSSxNQUFNLG1EQUFtRCxVQUFVLEdBQUc7QUFHbEYsS0FBSSxDQUFDLE1BQU0sUUFBUSxhQUFhLENBQzlCLE9BQU0sSUFBSSxNQUNSLG9EQUFvRCxVQUFVLHFCQUMvRDtBQUdILE1BQUssTUFBTSxRQUFRLGNBQWM7QUFDL0IsTUFBSSxDQUFDLEtBQUssWUFBWSxPQUFPLEtBQUssYUFBYSxTQUM3QyxPQUFNLElBQUksTUFBTSxpREFBaUQsVUFBVSxHQUFHO0FBRWhGLE1BQUksQ0FBQyxPQUFPLE9BQU9DLDJDQUFvQixDQUFDLFNBQVMsS0FBSyxTQUFnQyxDQUNwRixPQUFNLElBQUksTUFDUixxQkFBcUIsS0FBSyxTQUFTLHFCQUFxQixVQUFVLGtCQUFrQixPQUFPLE9BQ3pGQSwyQ0FDRCxDQUFDLEtBQUssS0FBSyxHQUNiOztBQUlMLEtBQUksQ0FBQyxNQUFNLFFBQVEseUJBQXlCLENBQzFDLE9BQU0sSUFBSSxNQUNSLHNEQUFzRCxVQUFVLHFCQUNqRTtBQUdILE1BQUssTUFBTSxZQUFZLDBCQUEwQjtBQUMvQyxNQUFJLE9BQU8sU0FBUyxxQkFBcUIsWUFBWSxDQUFDLFNBQVMsaUJBQzdELE9BQU0sSUFBSSxNQUFNLCtEQUErRCxVQUFVLEdBQUc7QUFHOUYsTUFBSSxTQUFTLGtCQUFrQixPQUFPLFNBQVMsbUJBQW1CLFNBQ2hFLE9BQU0sSUFBSSxNQUFNLDZEQUE2RCxVQUFVLEdBQUc7QUFHNUYsTUFBSSxTQUFTLHFCQUNYLE1BQUssTUFBTSxVQUFVLFNBQVMsc0JBQXNCO0FBQ2xELE9BQUksT0FBTyxPQUFPLG1CQUFtQixZQUFZLENBQUMsT0FBTyxlQUN2RCxPQUFNLElBQUksTUFDUixtRUFBbUUsVUFBVSxHQUM5RTtBQUdILE9BQUksQ0FBQyxNQUFNLFFBQVEsT0FBTyxNQUFNLENBQzlCLE9BQU0sSUFBSSxNQUNSLHFFQUFxRSxVQUFVLEdBQ2hGOzs7QUFNVCxLQUFJLGdCQUFnQixPQUNsQjtNQUFJLE9BQU8saUJBQWlCLG1CQUFtQixZQUFZLENBQUMsaUJBQWlCLGVBQzNFLE9BQU0sSUFBSSxNQUFNLDBEQUEwRCxVQUFVLEdBQUc7O0FBSTNGLEtBQUksZ0JBQWdCLE9BQU87QUFDekIsTUFDRSxPQUFPLGlCQUFpQix1QkFBdUIsWUFDL0MsQ0FBQyxpQkFBaUIsbUJBRWxCLE9BQU0sSUFBSSxNQUFNLDhEQUE4RCxVQUFVLEdBQUc7QUFFN0YsTUFDRSxpQkFBaUIsNEJBQ2pCLE9BQU8saUJBQWlCLDZCQUE2QixTQUVyRCxPQUFNLElBQUksTUFDUix5REFBeUQsVUFBVSwrQkFDcEU7O0FBSUwsUUFBTzs7QUFJVCxNQUFhLHNDQUNYLFFBQ0EsY0FDeUI7Q0FFekIsTUFBTSxtQkFBbUIsRUFBRSxHQUFHLFFBQVE7QUFHdEMsS0FBSSxpQkFBaUIsV0FBVyxDQUFDLGlCQUFpQixRQUFRO0FBQ3hELG1CQUFpQixTQUFTLGlCQUFpQjtBQUMzQyxTQUFPLGlCQUFpQjs7QUFJMUIsS0FBSSxPQUFPLGlCQUFpQixxQkFBcUIsWUFBWSxDQUFDLGlCQUFpQixpQkFDN0UsT0FBTSxJQUFJLE1BQU0sbURBQW1ELFVBQVUsR0FBRztBQUVsRixLQUFJLE9BQU8saUJBQWlCLGdCQUFnQixZQUFZLENBQUMsaUJBQWlCLFlBQ3hFLE9BQU0sSUFBSSxNQUFNLDhDQUE4QyxVQUFVLEdBQUc7QUFFN0UsS0FBSSxPQUFPLGlCQUFpQixXQUFXLFlBQVksQ0FBQyxpQkFBaUIsT0FDbkUsT0FBTSxJQUFJLE1BQU0seUNBQXlDLFVBQVUsR0FBRztBQUl4RSxLQUNFLENBQUMsaUJBQWlCLGtCQUNsQixPQUFPLGlCQUFpQixtQkFBbUIsWUFDM0MsTUFBTSxRQUFRLGlCQUFpQixlQUFlLENBRTlDLE9BQU0sSUFBSSxNQUFNLGlEQUFpRCxVQUFVLEdBQUc7Q0FHaEYsTUFBTSxpQkFBaUIsaUJBQWlCO0FBR3hDLEtBQUksT0FBTyxlQUFlLGFBQWEsWUFBWSxDQUFDLGVBQWUsU0FDakUsT0FBTSxJQUFJLE1BQU0sMERBQTBELFVBQVUsR0FBRztBQUV6RixLQUFJLE9BQU8sZUFBZSxrQkFBa0IsWUFBWSxDQUFDLGVBQWUsY0FDdEUsT0FBTSxJQUFJLE1BQU0sK0RBQStELFVBQVUsR0FBRztBQUk5RixLQUFJLENBQUMsT0FBTyxPQUFPQyxzQ0FBaUIsQ0FBQyxTQUFTLGVBQWUsY0FBa0MsQ0FDN0YsT0FBTSxJQUFJLE1BQ1IseUNBQXlDLGVBQWUsY0FBYyxnQkFBZ0IsVUFBVSxrQkFBa0IsT0FBTyxPQUFPQSxzQ0FBaUIsQ0FBQyxLQUFLLEtBQUssR0FDN0o7QUFJSCxLQUFJLGVBQWUsa0JBQWtCLFFBQVEsT0FBTyxlQUFlLG1CQUFtQixTQUNwRixPQUFNLElBQUksTUFDUixxREFBcUQsVUFBVSx1Q0FDaEU7Q0FJSCxJQUFJO0FBQ0osS0FBSSxpQkFBaUIsc0JBQXNCO0FBQ3pDLE1BQ0UsT0FBTyxpQkFBaUIseUJBQXlCLFlBQ2pELE1BQU0sUUFBUSxpQkFBaUIscUJBQXFCLENBRXBELE9BQU0sSUFBSSxNQUFNLDRDQUE0QyxVQUFVLHNCQUFzQjtFQUc5RixNQUFNLGNBQWMsaUJBQWlCO0FBQ3JDLE1BQUksT0FBTyxZQUFZLGFBQWEsWUFBWSxDQUFDLFlBQVksU0FDM0QsT0FBTSxJQUFJLE1BQU0sZ0VBQWdFLFVBQVUsR0FBRztBQUUvRixNQUFJLE9BQU8sWUFBWSxrQkFBa0IsWUFBWSxDQUFDLFlBQVksY0FDaEUsT0FBTSxJQUFJLE1BQ1IscUVBQXFFLFVBQVUsR0FDaEY7QUFHSCxNQUFJLENBQUMsT0FBTyxPQUFPQSxzQ0FBaUIsQ0FBQyxTQUFTLFlBQVksY0FBa0MsQ0FDMUYsT0FBTSxJQUFJLE1BQ1IsK0NBQStDLFlBQVksY0FBYyxnQkFBZ0IsVUFBVSxrQkFBa0IsT0FBTyxPQUFPQSxzQ0FBaUIsQ0FBQyxLQUFLLEtBQUssR0FDaEs7QUFHSCxNQUFJLFlBQVksa0JBQWtCLFFBQVEsT0FBTyxZQUFZLG1CQUFtQixTQUM5RSxPQUFNLElBQUksTUFDUiwyREFBMkQsVUFBVSx1Q0FDdEU7QUFHSCx5QkFBdUI7R0FDckIsVUFBVSxZQUFZO0dBQ3RCLGVBQWUsWUFBWTtHQUMzQixnQkFBZ0IsWUFBWTtHQUM3Qjs7Q0FJSCxJQUFJO0FBQ0osS0FBSSxpQkFBaUIsaUJBQWlCO0FBQ3BDLE1BQ0UsT0FBTyxpQkFBaUIsb0JBQW9CLFlBQzVDLE1BQU0sUUFBUSxpQkFBaUIsZ0JBQWdCLENBRS9DLE9BQU0sSUFBSSxNQUFNLHVDQUF1QyxVQUFVLHNCQUFzQjtFQUd6RixNQUFNLFdBQVcsaUJBQWlCO0FBQ2xDLE1BQUksT0FBTyxTQUFTLGNBQWMsWUFBWSxDQUFDLFNBQVMsVUFDdEQsT0FBTSxJQUFJLE1BQU0sNERBQTRELFVBQVUsR0FBRztBQUUzRixNQUFJLE9BQU8sU0FBUyxZQUFZLFlBQVksQ0FBQyxTQUFTLFFBQ3BELE9BQU0sSUFBSSxNQUFNLDBEQUEwRCxVQUFVLEdBQUc7QUFFekYsTUFBSSxPQUFPLFNBQVMsa0JBQWtCLFlBQVksQ0FBQyxTQUFTLGNBQzFELE9BQU0sSUFBSSxNQUFNLGdFQUFnRSxVQUFVLEdBQUc7QUFHL0YsTUFBSSxDQUFDLE9BQU8sT0FBT0Esc0NBQWlCLENBQUMsU0FBUyxTQUFTLGNBQWtDLENBQ3ZGLE9BQU0sSUFBSSxNQUNSLDBDQUEwQyxTQUFTLGNBQWMsZ0JBQWdCLFVBQVUsa0JBQWtCLE9BQU8sT0FBT0Esc0NBQWlCLENBQUMsS0FBSyxLQUFLLEdBQ3hKO0FBR0gsb0JBQWtCO0dBQ2hCLFdBQVcsU0FBUztHQUNwQixTQUFTLFNBQVM7R0FDbEIsZUFBZSxTQUFTO0dBQ3pCOztBQUlILEtBQ0UsaUJBQWlCLG9CQUFvQixRQUNyQyxPQUFPLGlCQUFpQixxQkFBcUIsU0FFN0MsT0FBTSxJQUFJLE1BQ1Isd0NBQXdDLFVBQVUsdUNBQ25EO0FBRUgsS0FBSSxpQkFBaUIsYUFBYSxRQUFRLE9BQU8saUJBQWlCLGNBQWMsU0FDOUUsT0FBTSxJQUFJLE1BQ1IsaUNBQWlDLFVBQVUsdUNBQzVDO0FBRUgsS0FDRSxpQkFBaUIsdUJBQXVCLFFBQ3hDLE9BQU8saUJBQWlCLHdCQUF3QixTQUVoRCxPQUFNLElBQUksTUFDUiwyQ0FBMkMsVUFBVSx1Q0FDdEQ7QUFFSCxLQUNFLGlCQUFpQixrQkFBa0IsU0FDbEMsT0FBTyxpQkFBaUIsbUJBQW1CLFlBQzFDLE1BQU0sUUFBUSxpQkFBaUIsZUFBZSxFQUVoRCxPQUFNLElBQUksTUFDUixzQ0FBc0MsVUFBVSx3Q0FDakQ7QUFFSCxLQUNFLGlCQUFpQixTQUFTLFNBQ3pCLE9BQU8saUJBQWlCLFVBQVUsWUFBWSxNQUFNLFFBQVEsaUJBQWlCLE1BQU0sRUFFcEYsT0FBTSxJQUFJLE1BQU0sNkJBQTZCLFVBQVUsd0NBQXdDO0NBSWpHLElBQUk7QUFDSixLQUFJLGlCQUFpQixtQkFBbUI7QUFDdEMsTUFDRSxPQUFPLGlCQUFpQixzQkFBc0IsWUFDOUMsQ0FBQyxpQkFBaUIsa0JBRWxCLE9BQU0sSUFBSSxNQUFNLHlDQUF5QyxVQUFVLHFCQUFxQjtBQUcxRixNQUNFLENBQUMsT0FBTyxPQUFPQyx3Q0FBa0IsQ0FBQyxTQUNoQyxpQkFBaUIsa0JBQ2xCLENBRUQsT0FBTSxJQUFJLE1BQ1IsOEJBQThCLGlCQUFpQixrQkFBa0IsZ0JBQWdCLFVBQVUsa0JBQWtCLE9BQU8sT0FBT0Esd0NBQWtCLENBQUMsS0FBSyxLQUFLLEdBQ3pKO0FBRUgsc0JBQW9CLGlCQUFpQjs7Q0FJdkMsTUFBTUMsU0FBK0I7RUFDbkMsa0JBQWtCLGlCQUFpQjtFQUNuQyxhQUFhLGlCQUFpQjtFQUM5QixRQUFRLGlCQUFpQjtFQUN6QixnQkFBZ0I7R0FDZCxVQUFVLGVBQWU7R0FDekIsZUFBZSxlQUFlO0dBQzlCLEdBQUksZUFBZSxrQkFBa0IsUUFBUSxFQUMzQyxnQkFBZ0IsZUFBZSxnQkFDaEM7R0FDRjtFQUNGO0FBR0QsS0FBSSxxQkFDRixRQUFPLHVCQUF1QjtBQUVoQyxLQUFJLGtCQUNGLFFBQU8sb0JBQW9CO0FBRTdCLEtBQUksZ0JBQ0YsUUFBTyxrQkFBa0I7QUFFM0IsS0FBSSxpQkFBaUIsaUJBQ25CLFFBQU8sbUJBQW1CLGlCQUFpQjtBQUU3QyxLQUFJLGlCQUFpQixVQUNuQixRQUFPLFlBQVksaUJBQWlCO0FBRXRDLEtBQUksaUJBQWlCLG9CQUNuQixRQUFPLHNCQUFzQixpQkFBaUI7QUFFaEQsS0FBSSxpQkFBaUIsZUFDbkIsUUFBTyxpQkFBaUIsaUJBQWlCO0FBRTNDLEtBQUksaUJBQWlCLE1BQ25CLFFBQU8sUUFBUSxpQkFBaUI7QUFHbEMsUUFBTzs7QUFJVCxNQUFhLG9DQUNYLFFBQ0EsY0FDaUI7Q0FDakIsTUFBTSxtQkFBbUJMLHNEQUFzQixPQUFPO0FBRXRELEtBQUksT0FBTyxpQkFBaUIsbUJBQW1CLFlBQVksQ0FBQyxpQkFBaUIsZUFDM0UsT0FBTSxJQUFJLE1BQU0sd0RBQXdELFVBQVUsR0FBRztBQUV2RixLQUFJLE9BQU8saUJBQWlCLFNBQVMsWUFBWSxDQUFDLGlCQUFpQixLQUNqRSxPQUFNLElBQUksTUFBTSw4Q0FBOEMsVUFBVSxHQUFHO0FBRzdFLEtBQUksaUJBQWlCLGFBQWEsUUFBUSxPQUFPLGlCQUFpQixjQUFjLFNBQzlFLE9BQU0sSUFBSSxNQUNSLHdDQUF3QyxVQUFVLHVDQUNuRDtBQU9ILFFBQU87O0FBR1QsTUFBYSxpQ0FBaUMsU0FBOEM7QUFDMUYsS0FBSSxTQUFTLFFBQVEsU0FBUyxPQUM1QjtBQUdGLEtBQUksT0FBTyxTQUFTLFlBQVksTUFBTSxRQUFRLEtBQUssRUFBRTtBQUNuRCxTQUFPLFFBQVEsdURBQXVELFFBQVcsRUFBRSxNQUFNLENBQUM7QUFDMUY7O0NBR0YsTUFBTSxNQUFNO0FBR1osS0FDRSwyQkFBMkIsT0FDM0IsT0FBTyxJQUFJLDBCQUEwQixZQUNyQyxJQUFJLDBCQUEwQixNQUM5QjtBQUNBLFNBQU8sUUFDTCx3RkFDQSxRQUNBLEVBQUUsTUFBTSxDQUNUO0FBQ0Q7O0FBSUYsS0FBSSxtQkFBbUIsS0FDckI7TUFDRSxJQUFJLGtCQUFrQixVQUN0QixJQUFJLGtCQUFrQixRQUN0QixDQUFDLE1BQU0sUUFBUSxJQUFJLGNBQWMsRUFDakM7QUFDQSxVQUFPLFFBQ0wsMEZBQ0EsUUFDQSxFQUFFLE1BQU0sQ0FDVDtBQUNEOzs7QUFLSixLQUFJLHNCQUFzQixLQUN4QjtNQUNFLElBQUkscUJBQXFCLFVBQ3pCLElBQUkscUJBQXFCLFFBQ3pCLENBQUMsTUFBTSxRQUFRLElBQUksaUJBQWlCLEVBQ3BDO0FBQ0EsVUFBTyxRQUNMLDZGQUNBLFFBQ0EsRUFBRSxNQUFNLENBQ1Q7QUFDRDs7O0FBS0osS0FBSSxvQkFBb0IsS0FDdEI7TUFDRSxJQUFJLG1CQUFtQixVQUN2QixJQUFJLG1CQUFtQixRQUN2QixDQUFDLE1BQU0sUUFBUSxJQUFJLGVBQWUsRUFDbEM7QUFDQSxVQUFPLFFBQ0wsMkZBQ0EsUUFDQSxFQUFFLE1BQU0sQ0FDVDtBQUNEOzs7QUFLSixLQUFJLGdCQUFnQixPQUFPLE9BQU8sSUFBSSxlQUFlLFlBQVksSUFBSSxlQUFlLE1BQU07QUFDeEYsU0FBTyxRQUNMLHdGQUNBLFFBQ0EsRUFBRSxNQUFNLENBQ1Q7QUFDRDs7QUFHRixLQUFJO0VBRUYsTUFBTSxrQkFBa0JBLHNEQUFzQixJQUFJO0FBR2xELE1BQUksZ0JBQWdCLGdCQUFnQixNQUFNLFFBQVEsZ0JBQWdCLGFBQWEsRUFBRTtHQUMvRSxNQUFNLG9CQUFvQixnQkFBZ0I7R0FDMUMsTUFBTU0sd0JBQTZDLEVBQUU7QUFFckQsUUFBSyxNQUFNLFdBQVcsa0JBQ3BCLEtBQUksV0FBVyxPQUFPLFlBQVksWUFBWSxPQUFPLFFBQVEsY0FBYyxTQUN6RSxLQUFJO0lBQ0YsTUFBTSxtQkFBbUIsaUNBQWlDLFFBQVE7QUFDbEUsMEJBQXNCLEtBQUssaUJBQWlCO1lBQ3JDLE9BQU87QUFDZCxXQUFPLFFBQVEsa0NBQWtDLE9BQU87S0FDdEQsV0FBVyxRQUFRO0tBQ25CO0tBQ0QsQ0FBQzs7T0FJSixRQUFPLFFBQVEsNENBQTRDLFFBQVcsRUFBRSxTQUFTLENBQUM7QUFJdEYsbUJBQWdCLGVBQWU7O0FBSWpDLE1BQUksZ0JBQWdCLG1CQUFtQixNQUFNLFFBQVEsZ0JBQWdCLGdCQUFnQixFQUFFO0dBQ3JGLE1BQU0sdUJBQXVCLGdCQUFnQjtHQUk3QyxNQUFNQyx3QkFBOEQsRUFBRTtBQUV0RSxRQUFLLE1BQU0sUUFBUSxxQkFDakIsS0FDRSxRQUNBLE9BQU8sS0FBSyxRQUFRLFlBQ3BCLEtBQUssVUFDTCxPQUFPLEtBQUssV0FBVyxTQUV2QixLQUFJO0lBRUYsTUFBTSxTQUFTLEtBQUs7SUFDcEIsTUFBTSxrQkFBa0IsbUNBQW1DLFFBQVEsS0FBSyxJQUFJO0FBQzVFLDBCQUFzQixLQUFLLE9BQU87WUFDM0IsT0FBTztBQUNkLFdBQU8sUUFBUSxxQ0FBcUMsT0FBTztLQUN6RCxXQUFXLEtBQUs7S0FDaEIsUUFBUSxLQUFLO0tBQ2QsQ0FBQzs7T0FJSixRQUFPLFFBQVEsb0RBQW9ELFFBQVcsRUFBRSxNQUFNLENBQUM7QUFJM0YsbUJBQWdCLGtCQUFrQjs7QUFJcEMsTUFBSSxnQkFBZ0IsaUJBQWlCLE1BQU0sUUFBUSxnQkFBZ0IsY0FBYyxFQUFFO0dBQ2pGLE1BQU0scUJBQXFCLGdCQUFnQjtHQUkzQyxNQUFNQyxzQkFBK0MsRUFBRTtBQUV2RCxRQUFLLE1BQU0sUUFBUSxtQkFDakIsS0FDRSxRQUNBLE9BQU8sS0FBSyxRQUFRLFlBQ3BCLEtBQUssVUFDTCxPQUFPLEtBQUssV0FBVyxTQUV2QixLQUFJO0lBRUYsTUFBTSxTQUFTLEtBQUs7SUFDcEIsTUFBTSxrQkFBa0IsaUNBQWlDLFFBQVEsS0FBSyxJQUFJO0FBQzFFLHdCQUFvQixLQUFLLE9BQU87WUFDekIsT0FBTztBQUNkLFdBQU8sUUFBUSxtQ0FBbUMsT0FBTztLQUN2RCxXQUFXLEtBQUs7S0FDaEIsUUFBUSxLQUFLO0tBQ2QsQ0FBQzs7T0FJSixRQUFPLFFBQVEsa0RBQWtELFFBQVcsRUFBRSxNQUFNLENBQUM7QUFJekYsbUJBQWdCLGdCQUFnQjs7QUFHbEMsU0FBTztVQUNBLE9BQU87QUFDZCxTQUFPLFFBQVEsaUVBQWlFLE9BQU8sRUFDckYsTUFDRCxDQUFDO0FBQ0YifQ==
232
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWcuY2pzIiwibmFtZXMiOlsiTG9nZ2VyIiwidHJhbnNmb3JtU25ha2VUb0NhbWVsIiwibm9ybWFsaXplZENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iLCJQYWdlVmFyaWFudFRlc3RUeXBlIiwiRE9NSW5zZXJ0aW9uVHlwZSIsIkdyaWRJbnNlcnRpb25UeXBlIiwicmVzdWx0OiBXaWRnZXRNb3VudGluZ0NvbmZpZyIsInZhbGlkYXRlZFBhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSIsIm1vdW50aW5nQ29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+Iiwid2lkZ2V0Q29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCB7IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbHMvc25ha2VUb0NhbWVsVHJhbnNmb3JtZXInO1xuaW1wb3J0IHtcbiAgUGFnZVZhcmlhbnRDb25maWcsXG4gIFBhZ2VWYXJpYW50VGVzdFR5cGUsXG4gIFdpZGdldENvbmZpZyxcbiAgV2lkZ2V0TW91bnRpbmdDb25maWcsXG59IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlcyc7XG5pbXBvcnQgeyBET01JbnNlcnRpb25UeXBlIH0gZnJvbSAnc3JjL21lcmNoYW50cy9kb21JbnNlcnRpb24nO1xuaW1wb3J0IHsgR3JpZEluc2VydGlvblR5cGUgfSBmcm9tICdzcmMvbWVyY2hhbnRzL2dyaWRJbnNlcnRpb24nO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCd2YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZycpO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBQYWdlVmFyaWFudFF1ZXJ5RGF0YSB0byBQYWdlVmFyaWFudENvbmZpZ1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtUGFnZVZhcmlhbnRzID0gKFxuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUGFnZVZhcmlhbnRDb25maWcgPT4ge1xuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb25maWcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGNvbnN0IHsgdmFyaWFudENoZWNrcywgd2lkZ2V0TW91bnRpbmcsIC4uLnJlc3QgfSA9IHRyYW5zZm9ybWVkO1xuXG4gIC8vIENvbnZlcnQgdmFyaWFudENoZWNrcyB0byB2YXJpYW50VGVzdHMgd2l0aCB0ZXN0VHlwZSBub3JtYWxpemF0aW9uXG4gIGNvbnN0IHZhcmlhbnRUZXN0cyA9IEFycmF5LmlzQXJyYXkodmFyaWFudENoZWNrcylcbiAgICA/IHZhcmlhbnRDaGVja3MubWFwKCh7IGNoZWNrVHlwZSwgLi4ucmVzdENoZWNrIH0pID0+ICh7XG4gICAgICAgIC4uLnJlc3RDaGVjayxcbiAgICAgICAgdGVzdFR5cGU6IGNoZWNrVHlwZSxcbiAgICAgIH0pKVxuICAgIDogW107XG5cbiAgLy8gTm9ybWFsaXplIHdpZGdldE1vdW50aW5nOiBjaGVja3MgLT4gdGVzdHMsIGNoZWNrVHlwZSAtPiB0ZXN0VHlwZVxuICBjb25zdCBub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcgPSBBcnJheS5pc0FycmF5KHdpZGdldE1vdW50aW5nKVxuICAgID8gd2lkZ2V0TW91bnRpbmcubWFwKCh7IG1vdW50aW5nUG9pbnRXaWRnZXRzLCAuLi5yZXN0TW91bnRpbmcgfSkgPT4gKHtcbiAgICAgICAgLi4ucmVzdE1vdW50aW5nLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShtb3VudGluZ1BvaW50V2lkZ2V0cylcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgbW91bnRpbmdQb2ludFdpZGdldHM6IG1vdW50aW5nUG9pbnRXaWRnZXRzLm1hcCgoeyBjaGVja3MsIC4uLnJlc3RXaWRnZXQgfSkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5yZXN0V2lkZ2V0LFxuICAgICAgICAgICAgICAgIHRlc3RzOiBBcnJheS5pc0FycmF5KGNoZWNrcylcbiAgICAgICAgICAgICAgICAgID8gY2hlY2tzLm1hcCgoeyBjaGVja1R5cGUsIC4uLnJlc3RDaGVjayB9KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3RDaGVjayxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXN0VHlwZTogY2hlY2tUeXBlLFxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0pKVxuICAgIDogW107XG5cbiAgY29uc3Qgbm9ybWFsaXplZENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgLi4ucmVzdCxcbiAgICAuLi4odmFyaWFudFRlc3RzID8geyB2YXJpYW50VGVzdHMgfSA6IHt9KSxcbiAgICAuLi4obm9ybWFsaXplZFdpZGdldE1vdW50aW5nID8geyB3aWRnZXRNb3VudGluZzogbm9ybWFsaXplZFdpZGdldE1vdW50aW5nIH0gOiB7fSksXG4gIH07XG5cbiAgY29uc3QgdmFyaWFudElkID0gbm9ybWFsaXplZENvbmZpZy52YXJpYW50SWQgYXMgc3RyaW5nO1xuICBjb25zdCB2YXJpYW50VHlwZSA9IG5vcm1hbGl6ZWRDb25maWcudmFyaWFudFR5cGUgYXMgc3RyaW5nO1xuXG4gIGlmICh0eXBlb2YgdmFyaWFudElkICE9PSAnc3RyaW5nJyB8fCAhdmFyaWFudElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgdmFyaWFudElkIGZvciBwYWdlVmFyaWFudGApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YXJpYW50VHlwZSAhPT0gJ3N0cmluZycgfHwgIXZhcmlhbnRUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgdmFyaWFudFR5cGUgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFyaWFudFRlc3RzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nIG9yIGludmFsaWQgdmFyaWFudFRlc3RzIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gTXVzdCBiZSBhbiBhcnJheWAsXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgdGVzdCBvZiB2YXJpYW50VGVzdHMpIHtcbiAgICBpZiAoIXRlc3QudGVzdFR5cGUgfHwgdHlwZW9mIHRlc3QudGVzdFR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFyaWFudFRlc3QudGVzdFR5cGUgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhQYWdlVmFyaWFudFRlc3RUeXBlKS5pbmNsdWRlcyh0ZXN0LnRlc3RUeXBlIGFzIFBhZ2VWYXJpYW50VGVzdFR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHRlc3RUeXBlICcke3Rlc3QudGVzdFR5cGV9JyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoXG4gICAgICAgICAgUGFnZVZhcmlhbnRUZXN0VHlwZSxcbiAgICAgICAgKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1pc3Npbmcgb3IgaW52YWxpZCB3aWRnZXRNb3VudGluZyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIE11c3QgYmUgYW4gYXJyYXlgLFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG1vdW50aW5nIG9mIG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZykge1xuICAgIGlmICh0eXBlb2YgbW91bnRpbmcubW91bnRpbmdDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIW1vdW50aW5nLm1vdW50aW5nQ29uZmlnSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtb3VudGluZ0NvbmZpZ0lkIGluIHdpZGdldE1vdW50aW5nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cblxuICAgIGlmIChtb3VudGluZy53aWRnZXRDb25maWdJZCAmJiB0eXBlb2YgbW91bnRpbmcud2lkZ2V0Q29uZmlnSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd2lkZ2V0Q29uZmlnSWQgaW4gd2lkZ2V0TW91bnRpbmcgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuXG4gICAgaWYgKG1vdW50aW5nLm1vdW50aW5nUG9pbnRXaWRnZXRzKSB7XG4gICAgICBmb3IgKGNvbnN0IHdpZGdldCBvZiBtb3VudGluZy5tb3VudGluZ1BvaW50V2lkZ2V0cykge1xuICAgICAgICBpZiAodHlwZW9mIHdpZGdldC53aWRnZXRDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIXdpZGdldC53aWRnZXRDb25maWdJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIHdpZGdldENvbmZpZ0lkIGluIG1vdW50aW5nUG9pbnRXaWRnZXRzIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh3aWRnZXQudGVzdHMpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgb3IgbWlzc2luZyB0ZXN0cyBpbiBtb3VudGluZ1BvaW50V2lkZ2V0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodmFyaWFudFR5cGUgPT09ICdwbHAnKSB7XG4gICAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnBscElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy5wbHBJZEV4dHJhY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgcGxwSWRFeHRyYWN0b3IgZm9yIFBMUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh2YXJpYW50VHlwZSA9PT0gJ3BkcCcpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wcm9kdWN0SWRFeHRyYWN0b3IgIT09ICdzdHJpbmcnIHx8XG4gICAgICAhbm9ybWFsaXplZENvbmZpZy5wcm9kdWN0SWRFeHRyYWN0b3JcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHByb2R1Y3RJZEV4dHJhY3RvciBmb3IgUERQIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWRDb25maWcucGFyZW50UHJvZHVjdElkRXh0cmFjdG9yICYmXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wYXJlbnRQcm9kdWN0SWRFeHRyYWN0b3IgIT09ICdzdHJpbmcnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmVudFByb2R1Y3RJZEV4dHJhY3RvciBmb3IgUERQIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBNdXN0IGJlIHN0cmluZyBpZiBwcm92aWRlZGAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkQ29uZmlnIGFzIFBhZ2VWYXJpYW50Q29uZmlnO1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gTW91bnRpbmdDb25maWdRdWVyeURhdGEgdG8gV2lkZ2V0TW91bnRpbmdDb25maWdcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnID0gKFxuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjb25maWdLZXk6IHN0cmluZyxcbik6IFdpZGdldE1vdW50aW5nQ29uZmlnID0+IHtcbiAgLy8gUkVOQU1JTkcgTE9HSUM6IENvbnZlcnQgYmFja2VuZCBcIkNoZWNrXCIgdGVybWlub2xvZ3kgdG8gZnJvbnRlbmQgXCJUZXN0XCIgdGVybWlub2xvZ3lcbiAgY29uc3Qgbm9ybWFsaXplZENvbmZpZyA9IHsgLi4uY29uZmlnIH07XG5cbiAgLy8gQ29udmVydCBjaGVja0lkIHRvIHRlc3RJZCBmb3IgZnJvbnRlbmQgY29tcGF0aWJpbGl0eSAoZGF0YSBpcyBhbHJlYWR5IGNhbWVsQ2FzZSlcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY2hlY2tJZCAmJiAhbm9ybWFsaXplZENvbmZpZy50ZXN0SWQpIHtcbiAgICBub3JtYWxpemVkQ29uZmlnLnRlc3RJZCA9IG5vcm1hbGl6ZWRDb25maWcuY2hlY2tJZDtcbiAgICBkZWxldGUgbm9ybWFsaXplZENvbmZpZy5jaGVja0lkO1xuICB9XG5cbiAgLy8gUmVxdWlyZWQgZmllbGRzIC0gdGhlc2UgbXVzdCBiZSBwcmVzZW50IGFuZCB2YWxpZFxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcubW91bnRpbmdDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcubW91bnRpbmdDb25maWdJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIG1vdW50aW5nQ29uZmlnSWQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5jb250YWluZXJJZCAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcuY29udGFpbmVySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBjb250YWluZXJJZCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcudGVzdElkICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcudGVzdElkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZXN0SWQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBpZiBwcm92aWRlZGApO1xuICB9XG5cbiAgLy8gUmVxdWlyZWQgaW5zZXJ0aW9uUG9pbnRcbiAgaWYgKFxuICAgICFub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50IHx8XG4gICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBpbnNlcnRpb25Qb2ludCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICBjb25zdCBpbnNlcnRpb25Qb2ludCA9IG5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gVmFsaWRhdGUgaW5zZXJ0aW9uUG9pbnQgcmVxdWlyZWQgZmllbGRzXG4gIGlmICh0eXBlb2YgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IgIT09ICdzdHJpbmcnIHx8ICFpbnNlcnRpb25Qb2ludC5zZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGluc2VydGlvblBvaW50LnNlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8ICFpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBpbnNlcnRpb25UeXBlIGlzIGEgdmFsaWQgRE9NSW5zZXJ0aW9uVHlwZVxuICBpZiAoIU9iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMoaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgJyR7aW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCBpbnNlcnRpb25Qb2ludCBmaWVsZHNcbiAgaWYgKGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4ICE9IG51bGwgJiYgdHlwZW9mIGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBudW1iZXIgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCBwYXJlbnRJbnNlcnRpb25Qb2ludCBpZiBwcmVzZW50XG4gIGxldCBwYXJlbnRJbnNlcnRpb25Qb2ludDtcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcucGFyZW50SW5zZXJ0aW9uUG9pbnQpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludCAhPT0gJ29iamVjdCcgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdGApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudFBvaW50ID0gbm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIHBhcmVudFBvaW50LnNlbGVjdG9yICE9PSAnc3RyaW5nJyB8fCAhcGFyZW50UG9pbnQuc2VsZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50LnNlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fCAhcGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWlzc2luZyBvciBpbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5pbmNsdWRlcyhwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgJyR7cGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50UG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB0eXBlb2YgcGFyZW50UG9pbnQuc2VsZWN0aW9uSW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBudW1iZXIgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwYXJlbnRJbnNlcnRpb25Qb2ludCA9IHtcbiAgICAgIHNlbGVjdG9yOiBwYXJlbnRQb2ludC5zZWxlY3RvcixcbiAgICAgIGluc2VydGlvblR5cGU6IHBhcmVudFBvaW50Lmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSxcbiAgICAgIHNlbGVjdGlvbkluZGV4OiBwYXJlbnRQb2ludC5zZWxlY3Rpb25JbmRleCBhcyBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIHdyYXBwaW5nRWxlbWVudCBpZiBwcmVzZW50XG4gIGxldCB3cmFwcGluZ0VsZW1lbnQ7XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudCkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudCAhPT0gJ29iamVjdCcgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy53cmFwcGluZ0VsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd3JhcHBpbmdFbGVtZW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd3JhcHBpbmcgPSBub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIHdyYXBwaW5nLmNsYXNzTmFtZSAhPT0gJ3N0cmluZycgfHwgIXdyYXBwaW5nLmNsYXNzTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd3JhcHBpbmdFbGVtZW50LmNsYXNzTmFtZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd3JhcHBpbmcuZWxlbWVudCAhPT0gJ3N0cmluZycgfHwgIXdyYXBwaW5nLmVsZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5lbGVtZW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3cmFwcGluZy5pbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fCAhd3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd3JhcHBpbmdFbGVtZW50Lmluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5pbmNsdWRlcyh3cmFwcGluZy5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5pbnNlcnRpb25UeXBlICcke3dyYXBwaW5nLmluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgd3JhcHBpbmdFbGVtZW50ID0ge1xuICAgICAgY2xhc3NOYW1lOiB3cmFwcGluZy5jbGFzc05hbWUsXG4gICAgICBlbGVtZW50OiB3cmFwcGluZy5lbGVtZW50LFxuICAgICAgaW5zZXJ0aW9uVHlwZTogd3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlLFxuICAgIH07XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCBmaWVsZHNcbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3RvciAhPSBudWxsICYmXG4gICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3RvciAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZGl2Q2hlY2tTZWxlY3RvciBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNsYXNzTmFtZSAhPSBudWxsICYmIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmNsYXNzTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjbGFzc05hbWUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBzdXBwcmVzc2lvblNlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMgIT0gbnVsbCAmJlxuICAgICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcyAhPT0gJ29iamVjdCcgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcykpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGRhdGFBdHRyaWJ1dGVzIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLnN0eWxlICE9IG51bGwgJiZcbiAgICAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5zdHlsZSkpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdHlsZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdCBvciBudWxsL3VuZGVmaW5lZGApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZ3JpZEluc2VydGlvblR5cGUgaWYgcHJlc2VudFxuICBsZXQgZ3JpZEluc2VydGlvblR5cGU7XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8XG4gICAgICAhbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdyaWRJbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhT2JqZWN0LnZhbHVlcyhHcmlkSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMoXG4gICAgICAgIG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUgYXMgR3JpZEluc2VydGlvblR5cGUsXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGdyaWRJbnNlcnRpb25UeXBlICcke25vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEdyaWRJbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBncmlkSW5zZXJ0aW9uVHlwZSA9IG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUgYXMgR3JpZEluc2VydGlvblR5cGU7XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgcmV0dXJuIG9iamVjdCwgb25seSBpbmNsdWRpbmcgb3B0aW9uYWwgZmllbGRzIGlmIHRoZXkgaGF2ZSB2YWx1ZXNcbiAgY29uc3QgcmVzdWx0OiBXaWRnZXRNb3VudGluZ0NvbmZpZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQsXG4gICAgY29udGFpbmVySWQ6IG5vcm1hbGl6ZWRDb25maWcuY29udGFpbmVySWQsXG4gICAgLi4uKG5vcm1hbGl6ZWRDb25maWcudGVzdElkID8geyB0ZXN0SWQ6IG5vcm1hbGl6ZWRDb25maWcudGVzdElkIGFzIHN0cmluZyB9IDoge30pLFxuICAgIGluc2VydGlvblBvaW50OiB7XG4gICAgICBzZWxlY3RvcjogaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IsXG4gICAgICBpbnNlcnRpb25UeXBlOiBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUsXG4gICAgICAuLi4oaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB7XG4gICAgICAgIHNlbGVjdGlvbkluZGV4OiBpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gT25seSBhZGQgb3B0aW9uYWwgZmllbGRzIGlmIHRoZXkgaGF2ZSB2YWx1ZXNcbiAgaWYgKHBhcmVudEluc2VydGlvblBvaW50KSB7XG4gICAgcmVzdWx0LnBhcmVudEluc2VydGlvblBvaW50ID0gcGFyZW50SW5zZXJ0aW9uUG9pbnQ7XG4gIH1cbiAgaWYgKGdyaWRJbnNlcnRpb25UeXBlKSB7XG4gICAgcmVzdWx0LmdyaWRJbnNlcnRpb25UeXBlID0gZ3JpZEluc2VydGlvblR5cGU7XG4gIH1cbiAgaWYgKHdyYXBwaW5nRWxlbWVudCkge1xuICAgIHJlc3VsdC53cmFwcGluZ0VsZW1lbnQgPSB3cmFwcGluZ0VsZW1lbnQ7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3Rvcikge1xuICAgIHJlc3VsdC5kaXZDaGVja1NlbGVjdG9yID0gbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yIGFzIHN0cmluZztcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUpIHtcbiAgICByZXN1bHQuY2xhc3NOYW1lID0gbm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUgYXMgc3RyaW5nO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IpIHtcbiAgICByZXN1bHQuc3VwcHJlc3Npb25TZWxlY3RvciA9IG5vcm1hbGl6ZWRDb25maWcuc3VwcHJlc3Npb25TZWxlY3RvcjtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcykge1xuICAgIHJlc3VsdC5kYXRhQXR0cmlidXRlcyA9IG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5zdHlsZSkge1xuICAgIHJlc3VsdC5zdHlsZSA9IG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgYXMgUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBXaWRnZXRDb25maWdRdWVyeURhdGEgdG8gV2lkZ2V0Q29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWcgPSAoXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbmZpZ0tleTogc3RyaW5nLFxuKTogV2lkZ2V0Q29uZmlnID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZENvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb25maWcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy53aWRnZXRDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcud2lkZ2V0Q29uZmlnSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3aWRnZXRDb25maWdJZCBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy50eXBlICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy50eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgdHlwZSBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY29udGVudElkICE9IG51bGwgJiYgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY29udGVudElkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNvbnRlbnRJZCBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIE5vdGU6IFdpZGdldCBjb25maWdzIGFyZSBjb21wbGV4IHVuaW9ucyB3aXRoIHR5cGUtc3BlY2lmaWMgcHJvcGVydGllcy5cblxuICAvLyBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgY29uZmlnIGFzIFdpZGdldENvbmZpZ1xuICAvLyBVc2UgaW50ZXJtZWRpYXRlICd1bmtub3duJyBjYXN0IGZvciBjb21wbGV4IHVuaW9uIHR5cGVzXG4gIHJldHVybiBub3JtYWxpemVkQ29uZmlnIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBGcm9udGVuZENvbmZpZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG9iaiA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gVmFsaWRhdGUgbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIGlmIHByZXNlbnRcbiAgaWYgKFxuICAgICdtZXJjaGFudF9vdmVycmlkZV9jc3MnIGluIG9iaiAmJlxuICAgIHR5cGVvZiBvYmoubWVyY2hhbnRfb3ZlcnJpZGVfY3NzICE9PSAnc3RyaW5nJyAmJlxuICAgIG9iai5tZXJjaGFudF9vdmVycmlkZV9jc3MgIT09IG51bGxcbiAgKSB7XG4gICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBtZXJjaGFudF9vdmVycmlkZV9jc3MgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHBhZ2VfdmFyaWFudHMgaWYgcHJlc2VudFxuICBpZiAoJ3BhZ2VfdmFyaWFudHMnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai5wYWdlX3ZhcmlhbnRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9iai5wYWdlX3ZhcmlhbnRzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoucGFnZV92YXJpYW50cylcbiAgICApIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBwYWdlX3ZhcmlhbnRzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgZGF0YSB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgbW91bnRpbmdfY29uZmlncyBpZiBwcmVzZW50XG4gIGlmICgnbW91bnRpbmdfY29uZmlncycgaW4gb2JqKSB7XG4gICAgaWYgKFxuICAgICAgb2JqLm1vdW50aW5nX2NvbmZpZ3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb2JqLm1vdW50aW5nX2NvbmZpZ3MgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG9iai5tb3VudGluZ19jb25maWdzKVxuICAgICkge1xuICAgICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdJbnZhbGlkIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGE6IG1vdW50aW5nX2NvbmZpZ3MgbXVzdCBiZSBhbiBhcnJheSBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBkYXRhIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB3aWRnZXRfY29uZmlncyBpZiBwcmVzZW50XG4gIGlmICgnd2lkZ2V0X2NvbmZpZ3MnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai53aWRnZXRfY29uZmlncyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvYmoud2lkZ2V0X2NvbmZpZ3MgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG9iai53aWRnZXRfY29uZmlncylcbiAgICApIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiB3aWRnZXRfY29uZmlncyBtdXN0IGJlIGFuIGFycmF5IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7IGRhdGEgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHVpX2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ3VpX2NvbmZpZ3MnIGluIG9iaiAmJiB0eXBlb2Ygb2JqLnVpX2NvbmZpZ3MgIT09ICdvYmplY3QnICYmIG9iai51aV9jb25maWdzICE9PSBudWxsKSB7XG4gICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiB1aV9jb25maWdzIG11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVHJhbnNmb3JtIHRoZSBkYXRhIHRvIGNhbWVsQ2FzZVxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChvYmopIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gQ29udmVydCBwYWdlX3ZhcmlhbnRzIGZyb20gYXJyYXkgdG8gdmFsaWRhdGVkIGFycmF5IGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLnBhZ2VWYXJpYW50cyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMpKSB7XG4gICAgICBjb25zdCBwYWdlVmFyaWFudHNBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHM7XG4gICAgICBjb25zdCB2YWxpZGF0ZWRQYWdlVmFyaWFudHM6IFBhZ2VWYXJpYW50Q29uZmlnW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHBhZ2VWYXJpYW50c0FycmF5KSB7XG4gICAgICAgIGlmICh2YXJpYW50ICYmIHR5cGVvZiB2YXJpYW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFyaWFudC52YXJpYW50SWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhcmlhbnQgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyh2YXJpYW50KTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBhZ2VWYXJpYW50cy5wdXNoKHZhbGlkYXRlZFZhcmlhbnQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBwYWdlIHZhcmlhbnQsIHNraXBwaW5nJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgdmFyaWFudElkOiB2YXJpYW50LnZhcmlhbnRJZCxcbiAgICAgICAgICAgICAgdmFyaWFudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgcHJvY2Vzc2luZyBvdGhlciB2YXJpYW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBwYWdlIHZhcmlhbnQgc3RydWN0dXJlLCBza2lwcGluZycsIHVuZGVmaW5lZCwgeyB2YXJpYW50IH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMgPSB2YWxpZGF0ZWRQYWdlVmFyaWFudHM7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBtb3VudGluZ19jb25maWdzIGZyb20gYXJyYXkgdG8gUmVjb3JkIGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLm1vdW50aW5nQ29uZmlncyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MpKSB7XG4gICAgICBjb25zdCBtb3VudGluZ0NvbmZpZ3NBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MgYXMgQXJyYXk8e1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgY29uZmlnOiB1bmtub3duO1xuICAgICAgfT47XG4gICAgICBjb25zdCBtb3VudGluZ0NvbmZpZ3NSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPiA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbW91bnRpbmdDb25maWdzQXJyYXkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGl0ZW0gJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5rZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgaXRlbS5jb25maWcgJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5jb25maWcgPT09ICdvYmplY3QnXG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBhbmQgdHJhbnNmb3JtIHRoZSBjb25maWcgc3RydWN0dXJlXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZENvbmZpZyA9IHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWcoY29uZmlnLCBpdGVtLmtleSk7XG4gICAgICAgICAgICBtb3VudGluZ0NvbmZpZ3NSZWNvcmRbaXRlbS5rZXldID0gdmFsaWRhdGVkQ29uZmlnO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBtb3VudGluZyBjb25maWcsIHNraXBwaW5nJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgY29uZmlnS2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgICAgY29uZmlnOiBpdGVtLmNvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgcHJvY2Vzc2luZyBvdGhlciBjb25maWdzXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIG1vdW50aW5nIGNvbmZpZyBpdGVtIHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgaXRlbSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzID0gbW91bnRpbmdDb25maWdzUmVjb3JkO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgd2lkZ2V0X2NvbmZpZ3MgZnJvbSBhcnJheSB0byBSZWNvcmQgaWYgcHJlc2VudFxuICAgIGlmICh0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzKSkge1xuICAgICAgY29uc3Qgd2lkZ2V0Q29uZmlnc0FycmF5ID0gdHJhbnNmb3JtZWREYXRhLndpZGdldENvbmZpZ3MgYXMgQXJyYXk8e1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgY29uZmlnOiB1bmtub3duO1xuICAgICAgfT47XG4gICAgICBjb25zdCB3aWRnZXRDb25maWdzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2lkZ2V0Q29uZmlnc0FycmF5KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpdGVtICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0ua2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGl0ZW0uY29uZmlnICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0uY29uZmlnID09PSAnb2JqZWN0J1xuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgYW5kIHRyYW5zZm9ybSB3aWRnZXQgY29uZmlnIHVzaW5nIHRoZSBkZWRpY2F0ZWQgdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaXRlbS5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRDb25maWcgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybVdpZGdldENvbmZpZyhjb25maWcsIGl0ZW0ua2V5KTtcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ3NSZWNvcmRbaXRlbS5rZXldID0gdmFsaWRhdGVkQ29uZmlnO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCB3aWRnZXQgY29uZmlnLCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ0tleTogaXRlbS5rZXksXG4gICAgICAgICAgICAgIGNvbmZpZzogaXRlbS5jb25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgY29uZmlnc1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCB3aWRnZXQgY29uZmlnIGl0ZW0gc3RydWN0dXJlLCBza2lwcGluZycsIHVuZGVmaW5lZCwgeyBpdGVtIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzID0gd2lkZ2V0Q29uZmlnc1JlY29yZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhIGFzIEZyb250ZW5kQ29uZmlnO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5sb2dXYXJuKCdGYWlsZWQgdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhJywgZXJyb3IsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVlBLE1BQU0sU0FBUyxJQUFJQSx1QkFBTyxnQ0FBZ0M7QUFHMUQsTUFBYSxvQ0FDWCxXQUNzQjtDQUd0QixNQUFNLEVBQUUsZUFBZSxnQkFBZ0IsR0FBRyxTQUZ0QkMsc0RBQXNCLE9BQU87Q0FLakQsTUFBTSxlQUFlLE1BQU0sUUFBUSxjQUFjLEdBQzdDLGNBQWMsS0FBSyxFQUFFLFdBQVcsR0FBRyxpQkFBaUI7RUFDbEQsR0FBRztFQUNILFVBQVU7RUFDWCxFQUFFLEdBQ0gsRUFBRTtDQUdOLE1BQU0sMkJBQTJCLE1BQU0sUUFBUSxlQUFlLEdBQzFELGVBQWUsS0FBSyxFQUFFLHNCQUFzQixHQUFHLG9CQUFvQjtFQUNqRSxHQUFHO0VBQ0gsR0FBSSxNQUFNLFFBQVEscUJBQXFCLEdBQ25DLEVBQ0Usc0JBQXNCLHFCQUFxQixLQUFLLEVBQUUsUUFBUSxHQUFHLGtCQUFrQjtHQUM3RSxHQUFHO0dBQ0gsT0FBTyxNQUFNLFFBQVEsT0FBTyxHQUN4QixPQUFPLEtBQUssRUFBRSxXQUFXLEdBQUcsaUJBQWlCO0lBQzNDLEdB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
@@ -62,7 +62,7 @@ const validateAndTransformMountingConfig = (config, configKey) => {
62
62
  }
63
63
  if (typeof normalizedConfig.mountingConfigId !== "string" || !normalizedConfig.mountingConfigId) throw new Error(`Missing or invalid mountingConfigId for config '${configKey}'`);
64
64
  if (typeof normalizedConfig.containerId !== "string" || !normalizedConfig.containerId) throw new Error(`Missing or invalid containerId for config '${configKey}'`);
65
- if (typeof normalizedConfig.testId !== "string" || !normalizedConfig.testId) throw new Error(`Missing or invalid testId for config '${configKey}'`);
65
+ if (normalizedConfig.testId !== void 0 && typeof normalizedConfig.testId !== "string") throw new Error(`Invalid testId for config '${configKey}'. Must be a string if provided`);
66
66
  if (!normalizedConfig.insertionPoint || typeof normalizedConfig.insertionPoint !== "object" || Array.isArray(normalizedConfig.insertionPoint)) throw new Error(`Missing or invalid insertionPoint for config '${configKey}'`);
67
67
  const insertionPoint = normalizedConfig.insertionPoint;
68
68
  if (typeof insertionPoint.selector !== "string" || !insertionPoint.selector) throw new Error(`Missing or invalid insertionPoint.selector for config '${configKey}'`);
@@ -111,7 +111,7 @@ const validateAndTransformMountingConfig = (config, configKey) => {
111
111
  const result = {
112
112
  mountingConfigId: normalizedConfig.mountingConfigId,
113
113
  containerId: normalizedConfig.containerId,
114
- testId: normalizedConfig.testId,
114
+ ...normalizedConfig.testId ? { testId: normalizedConfig.testId } : {},
115
115
  insertionPoint: {
116
116
  selector: insertionPoint.selector,
117
117
  insertionType: insertionPoint.insertionType,
@@ -226,4 +226,4 @@ const validateGraphQLFrontendConfig = (data) => {
226
226
 
227
227
  //#endregion
228
228
  export { validateAndTransformMountingConfig, validateAndTransformPageVariants, validateAndTransformWidgetConfig, validateGraphQLFrontendConfig };
229
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWcuanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJub3JtYWxpemVkQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsInJlc3VsdDogV2lkZ2V0TW91bnRpbmdDb25maWciLCJ2YWxpZGF0ZWRQYWdlVmFyaWFudHM6IFBhZ2VWYXJpYW50Q29uZmlnW10iLCJtb3VudGluZ0NvbmZpZ3NSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPiIsIndpZGdldENvbmZpZ3NSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZyb250ZW5kQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyJztcbmltcG9ydCB7XG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRDb25maWcsXG4gIFdpZGdldE1vdW50aW5nQ29uZmlnLFxufSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXMnO1xuaW1wb3J0IHsgRE9NSW5zZXJ0aW9uVHlwZSB9IGZyb20gJ3NyYy9tZXJjaGFudHMvZG9tSW5zZXJ0aW9uJztcbmltcG9ydCB7IEdyaWRJbnNlcnRpb25UeXBlIH0gZnJvbSAnc3JjL21lcmNoYW50cy9ncmlkSW5zZXJ0aW9uJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigndmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWcnKTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gUGFnZVZhcmlhbnRRdWVyeURhdGEgdG8gUGFnZVZhcmlhbnRDb25maWdcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyA9IChcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFBhZ2VWYXJpYW50Q29uZmlnID0+IHtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoY29uZmlnKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdCB7IHZhcmlhbnRDaGVja3MsIHdpZGdldE1vdW50aW5nLCAuLi5yZXN0IH0gPSB0cmFuc2Zvcm1lZDtcblxuICAvLyBDb252ZXJ0IHZhcmlhbnRDaGVja3MgdG8gdmFyaWFudFRlc3RzIHdpdGggdGVzdFR5cGUgbm9ybWFsaXphdGlvblxuICBjb25zdCB2YXJpYW50VGVzdHMgPSBBcnJheS5pc0FycmF5KHZhcmlhbnRDaGVja3MpXG4gICAgPyB2YXJpYW50Q2hlY2tzLm1hcCgoeyBjaGVja1R5cGUsIC4uLnJlc3RDaGVjayB9KSA9PiAoe1xuICAgICAgICAuLi5yZXN0Q2hlY2ssXG4gICAgICAgIHRlc3RUeXBlOiBjaGVja1R5cGUsXG4gICAgICB9KSlcbiAgICA6IFtdO1xuXG4gIC8vIE5vcm1hbGl6ZSB3aWRnZXRNb3VudGluZzogY2hlY2tzIC0+IHRlc3RzLCBjaGVja1R5cGUgLT4gdGVzdFR5cGVcbiAgY29uc3Qgbm9ybWFsaXplZFdpZGdldE1vdW50aW5nID0gQXJyYXkuaXNBcnJheSh3aWRnZXRNb3VudGluZylcbiAgICA/IHdpZGdldE1vdW50aW5nLm1hcCgoeyBtb3VudGluZ1BvaW50V2lkZ2V0cywgLi4ucmVzdE1vdW50aW5nIH0pID0+ICh7XG4gICAgICAgIC4uLnJlc3RNb3VudGluZyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkobW91bnRpbmdQb2ludFdpZGdldHMpXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG1vdW50aW5nUG9pbnRXaWRnZXRzOiBtb3VudGluZ1BvaW50V2lkZ2V0cy5tYXAoKHsgY2hlY2tzLCAuLi5yZXN0V2lkZ2V0IH0pID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucmVzdFdpZGdldCxcbiAgICAgICAgICAgICAgICB0ZXN0czogQXJyYXkuaXNBcnJheShjaGVja3MpXG4gICAgICAgICAgICAgICAgICA/IGNoZWNrcy5tYXAoKHsgY2hlY2tUeXBlLCAuLi5yZXN0Q2hlY2sgfSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN0Q2hlY2ssXG4gICAgICAgICAgICAgICAgICAgICAgdGVzdFR5cGU6IGNoZWNrVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIC4uLnJlc3QsXG4gICAgLi4uKHZhcmlhbnRUZXN0cyA/IHsgdmFyaWFudFRlc3RzIH0gOiB7fSksXG4gICAgLi4uKG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyA/IHsgd2lkZ2V0TW91bnRpbmc6IG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyB9IDoge30pLFxuICB9O1xuXG4gIGNvbnN0IHZhcmlhbnRJZCA9IG5vcm1hbGl6ZWRDb25maWcudmFyaWFudElkIGFzIHN0cmluZztcbiAgY29uc3QgdmFyaWFudFR5cGUgPSBub3JtYWxpemVkQ29uZmlnLnZhcmlhbnRUeXBlIGFzIHN0cmluZztcblxuICBpZiAodHlwZW9mIHZhcmlhbnRJZCAhPT0gJ3N0cmluZycgfHwgIXZhcmlhbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRJZCBmb3IgcGFnZVZhcmlhbnRgKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFyaWFudFR5cGUgIT09ICdzdHJpbmcnIHx8ICF2YXJpYW50VHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRUeXBlIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhcmlhbnRUZXN0cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRUZXN0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIE11c3QgYmUgYW4gYXJyYXlgLFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHRlc3Qgb2YgdmFyaWFudFRlc3RzKSB7XG4gICAgaWYgKCF0ZXN0LnRlc3RUeXBlIHx8IHR5cGVvZiB0ZXN0LnRlc3RUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhcmlhbnRUZXN0LnRlc3RUeXBlIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoUGFnZVZhcmlhbnRUZXN0VHlwZSkuaW5jbHVkZXModGVzdC50ZXN0VHlwZSBhcyBQYWdlVmFyaWFudFRlc3RUeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB0ZXN0VHlwZSAnJHt0ZXN0LnRlc3RUeXBlfScgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKFxuICAgICAgICAgIFBhZ2VWYXJpYW50VGVzdFR5cGUsXG4gICAgICAgICkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZFdpZGdldE1vdW50aW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nIG9yIGludmFsaWQgd2lkZ2V0TW91bnRpbmcgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBNdXN0IGJlIGFuIGFycmF5YCxcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBtb3VudGluZyBvZiBub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcpIHtcbiAgICBpZiAodHlwZW9mIG1vdW50aW5nLm1vdW50aW5nQ29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFtb3VudGluZy5tb3VudGluZ0NvbmZpZ0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW91bnRpbmdDb25maWdJZCBpbiB3aWRnZXRNb3VudGluZyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG5cbiAgICBpZiAobW91bnRpbmcud2lkZ2V0Q29uZmlnSWQgJiYgdHlwZW9mIG1vdW50aW5nLndpZGdldENvbmZpZ0lkICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdpZGdldENvbmZpZ0lkIGluIHdpZGdldE1vdW50aW5nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cblxuICAgIGlmIChtb3VudGluZy5tb3VudGluZ1BvaW50V2lkZ2V0cykge1xuICAgICAgZm9yIChjb25zdCB3aWRnZXQgb2YgbW91bnRpbmcubW91bnRpbmdQb2ludFdpZGdldHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aWRnZXQud2lkZ2V0Q29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICF3aWRnZXQud2lkZ2V0Q29uZmlnSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCB3aWRnZXRDb25maWdJZCBpbiBtb3VudGluZ1BvaW50V2lkZ2V0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkod2lkZ2V0LnRlc3RzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIG9yIG1pc3NpbmcgdGVzdHMgaW4gbW91bnRpbmdQb2ludFdpZGdldHMgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhcmlhbnRUeXBlID09PSAncGxwJykge1xuICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wbHBJZEV4dHJhY3RvciAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcucGxwSWRFeHRyYWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHBscElkRXh0cmFjdG9yIGZvciBQTFAgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAodmFyaWFudFR5cGUgPT09ICdwZHAnKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucHJvZHVjdElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJyB8fFxuICAgICAgIW5vcm1hbGl6ZWRDb25maWcucHJvZHVjdElkRXh0cmFjdG9yXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBwcm9kdWN0SWRFeHRyYWN0b3IgZm9yIFBEUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkQ29uZmlnLnBhcmVudFByb2R1Y3RJZEV4dHJhY3RvciAmJlxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucGFyZW50UHJvZHVjdElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJlbnRQcm9kdWN0SWRFeHRyYWN0b3IgZm9yIFBEUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gTXVzdCBiZSBzdHJpbmcgaWYgcHJvdmlkZWRgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbmZpZyBhcyBQYWdlVmFyaWFudENvbmZpZztcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIE1vdW50aW5nQ29uZmlnUXVlcnlEYXRhIHRvIFdpZGdldE1vdW50aW5nQ29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1Nb3VudGluZ0NvbmZpZyA9IChcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29uZmlnS2V5OiBzdHJpbmcsXG4pOiBXaWRnZXRNb3VudGluZ0NvbmZpZyA9PiB7XG4gIC8vIFJFTkFNSU5HIExPR0lDOiBDb252ZXJ0IGJhY2tlbmQgXCJDaGVja1wiIHRlcm1pbm9sb2d5IHRvIGZyb250ZW5kIFwiVGVzdFwiIHRlcm1pbm9sb2d5XG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuXG4gIC8vIENvbnZlcnQgY2hlY2tJZCB0byB0ZXN0SWQgZm9yIGZyb250ZW5kIGNvbXBhdGliaWxpdHkgKGRhdGEgaXMgYWxyZWFkeSBjYW1lbENhc2UpXG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQgJiYgIW5vcm1hbGl6ZWRDb25maWcudGVzdElkKSB7XG4gICAgbm9ybWFsaXplZENvbmZpZy50ZXN0SWQgPSBub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQ7XG4gICAgZGVsZXRlIG5vcm1hbGl6ZWRDb25maWcuY2hlY2tJZDtcbiAgfVxuXG4gIC8vIFJlcXVpcmVkIGZpZWxkcyAtIHRoZXNlIG11c3QgYmUgcHJlc2VudCBhbmQgdmFsaWRcbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBtb3VudGluZ0NvbmZpZ0lkIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY29udGFpbmVySWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLmNvbnRhaW5lcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgY29udGFpbmVySWQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy50ZXN0SWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLnRlc3RJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHRlc3RJZCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICAvLyBSZXF1aXJlZCBpbnNlcnRpb25Qb2ludFxuICBpZiAoXG4gICAgIW5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQgfHxcbiAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludCAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGluc2VydGlvblBvaW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydGlvblBvaW50ID0gbm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBWYWxpZGF0ZSBpbnNlcnRpb25Qb2ludCByZXF1aXJlZCBmaWVsZHNcbiAgaWYgKHR5cGVvZiBpbnNlcnRpb25Qb2ludC5zZWxlY3RvciAhPT0gJ3N0cmluZycgfHwgIWluc2VydGlvblBvaW50LnNlbGVjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2YgaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHwgIWluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGluc2VydGlvblR5cGUgaXMgYSB2YWxpZCBET01JbnNlcnRpb25UeXBlXG4gIGlmICghT2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5pbmNsdWRlcyhpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSAnJHtpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIGluc2VydGlvblBvaW50IGZpZWxkc1xuICBpZiAoaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB0eXBlb2YgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIG51bWJlciBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIHBhcmVudEluc2VydGlvblBvaW50IGlmIHByZXNlbnRcbiAgbGV0IHBhcmVudEluc2VydGlvblBvaW50O1xuICBpZiAobm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludCkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50ICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50UG9pbnQgPSBub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2YgcGFyZW50UG9pbnQuc2VsZWN0b3IgIT09ICdzdHJpbmcnIHx8ICFwYXJlbnRQb2ludC5zZWxlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmVudFBvaW50Lmluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8ICFwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNaXNzaW5nIG9yIGludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmluY2x1ZGVzKHBhcmVudFBvaW50Lmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSAnJHtwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXJlbnRQb2ludC5zZWxlY3Rpb25JbmRleCAhPSBudWxsICYmIHR5cGVvZiBwYXJlbnRQb2ludC5zZWxlY3Rpb25JbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIG51bWJlciBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHBhcmVudEluc2VydGlvblBvaW50ID0ge1xuICAgICAgc2VsZWN0b3I6IHBhcmVudFBvaW50LnNlbGVjdG9yLFxuICAgICAgaW5zZXJ0aW9uVHlwZTogcGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlLFxuICAgICAgc2VsZWN0aW9uSW5kZXg6IHBhcmVudFBvaW50LnNlbGVjdGlvbkluZGV4IGFzIG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uYWwgd3JhcHBpbmdFbGVtZW50IGlmIHByZXNlbnRcbiAgbGV0IHdyYXBwaW5nRWxlbWVudDtcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50KSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50ICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3cmFwcGluZ0VsZW1lbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGluZyA9IG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2Ygd3JhcHBpbmcuY2xhc3NOYW1lICE9PSAnc3RyaW5nJyB8fCAhd3JhcHBpbmcuY2xhc3NOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuY2xhc3NOYW1lIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3cmFwcGluZy5lbGVtZW50ICE9PSAnc3RyaW5nJyB8fCAhd3JhcHBpbmcuZWxlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd3JhcHBpbmdFbGVtZW50LmVsZW1lbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdyYXBwaW5nLmluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8ICF3cmFwcGluZy5pbnNlcnRpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuaW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmluY2x1ZGVzKHdyYXBwaW5nLmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgd3JhcHBpbmdFbGVtZW50Lmluc2VydGlvblR5cGUgJyR7d3JhcHBpbmcuaW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB3cmFwcGluZ0VsZW1lbnQgPSB7XG4gICAgICBjbGFzc05hbWU6IHdyYXBwaW5nLmNsYXNzTmFtZSxcbiAgICAgIGVsZW1lbnQ6IHdyYXBwaW5nLmVsZW1lbnQsXG4gICAgICBpbnNlcnRpb25UeXBlOiB3cmFwcGluZy5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIGZpZWxkc1xuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBkaXZDaGVja1NlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lICE9IG51bGwgJiYgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNsYXNzTmFtZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIHN1cHByZXNzaW9uU2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcyAhPSBudWxsICYmXG4gICAgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZGF0YUF0dHJpYnV0ZXMgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3Qgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgIT0gbnVsbCAmJlxuICAgICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5zdHlsZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLnN0eWxlKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0eWxlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkYCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBncmlkSW5zZXJ0aW9uVHlwZSBpZiBwcmVzZW50XG4gIGxldCBncmlkSW5zZXJ0aW9uVHlwZTtcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHxcbiAgICAgICFub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ3JpZEluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICFPYmplY3QudmFsdWVzKEdyaWRJbnNlcnRpb25UeXBlKS5pbmNsdWRlcyhcbiAgICAgICAgbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSBhcyBHcmlkSW5zZXJ0aW9uVHlwZSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZ3JpZEluc2VydGlvblR5cGUgJyR7bm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoR3JpZEluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGdyaWRJbnNlcnRpb25UeXBlID0gbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSBhcyBHcmlkSW5zZXJ0aW9uVHlwZTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSByZXR1cm4gb2JqZWN0LCBvbmx5IGluY2x1ZGluZyBvcHRpb25hbCBmaWVsZHMgaWYgdGhleSBoYXZlIHZhbHVlc1xuICBjb25zdCByZXN1bHQ6IFdpZGdldE1vdW50aW5nQ29uZmlnID0ge1xuICAgIG1vdW50aW5nQ29uZmlnSWQ6IG5vcm1hbGl6ZWRDb25maWcubW91bnRpbmdDb25maWdJZCxcbiAgICBjb250YWluZXJJZDogbm9ybWFsaXplZENvbmZpZy5jb250YWluZXJJZCxcbiAgICB0ZXN0SWQ6IG5vcm1hbGl6ZWRDb25maWcudGVzdElkLFxuICAgIGluc2VydGlvblBvaW50OiB7XG4gICAgICBzZWxlY3RvcjogaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IsXG4gICAgICBpbnNlcnRpb25UeXBlOiBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUsXG4gICAgICAuLi4oaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB7XG4gICAgICAgIHNlbGVjdGlvbkluZGV4OiBpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gT25seSBhZGQgb3B0aW9uYWwgZmllbGRzIGlmIHRoZXkgaGF2ZSB2YWx1ZXNcbiAgaWYgKHBhcmVudEluc2VydGlvblBvaW50KSB7XG4gICAgcmVzdWx0LnBhcmVudEluc2VydGlvblBvaW50ID0gcGFyZW50SW5zZXJ0aW9uUG9pbnQ7XG4gIH1cbiAgaWYgKGdyaWRJbnNlcnRpb25UeXBlKSB7XG4gICAgcmVzdWx0LmdyaWRJbnNlcnRpb25UeXBlID0gZ3JpZEluc2VydGlvblR5cGU7XG4gIH1cbiAgaWYgKHdyYXBwaW5nRWxlbWVudCkge1xuICAgIHJlc3VsdC53cmFwcGluZ0VsZW1lbnQgPSB3cmFwcGluZ0VsZW1lbnQ7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3Rvcikge1xuICAgIHJlc3VsdC5kaXZDaGVja1NlbGVjdG9yID0gbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yIGFzIHN0cmluZztcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUpIHtcbiAgICByZXN1bHQuY2xhc3NOYW1lID0gbm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUgYXMgc3RyaW5nO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IpIHtcbiAgICByZXN1bHQuc3VwcHJlc3Npb25TZWxlY3RvciA9IG5vcm1hbGl6ZWRDb25maWcuc3VwcHJlc3Npb25TZWxlY3RvcjtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcykge1xuICAgIHJlc3VsdC5kYXRhQXR0cmlidXRlcyA9IG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5zdHlsZSkge1xuICAgIHJlc3VsdC5zdHlsZSA9IG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgYXMgUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBXaWRnZXRDb25maWdRdWVyeURhdGEgdG8gV2lkZ2V0Q29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWcgPSAoXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbmZpZ0tleTogc3RyaW5nLFxuKTogV2lkZ2V0Q29uZmlnID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZENvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb25maWcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy53aWRnZXRDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcud2lkZ2V0Q29uZmlnSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3aWRnZXRDb25maWdJZCBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy50eXBlICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy50eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgdHlwZSBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY29udGVudElkICE9IG51bGwgJiYgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY29udGVudElkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNvbnRlbnRJZCBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIE5vdGU6IFdpZGdldCBjb25maWdzIGFyZSBjb21wbGV4IHVuaW9ucyB3aXRoIHR5cGUtc3BlY2lmaWMgcHJvcGVydGllcy5cblxuICAvLyBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgY29uZmlnIGFzIFdpZGdldENvbmZpZ1xuICAvLyBVc2UgaW50ZXJtZWRpYXRlICd1bmtub3duJyBjYXN0IGZvciBjb21wbGV4IHVuaW9uIHR5cGVzXG4gIHJldHVybiBub3JtYWxpemVkQ29uZmlnIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBGcm9udGVuZENvbmZpZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG9iaiA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gVmFsaWRhdGUgbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIGlmIHByZXNlbnRcbiAgaWYgKFxuICAgICdtZXJjaGFudF9vdmVycmlkZV9jc3MnIGluIG9iaiAmJlxuICAgIHR5cGVvZiBvYmoubWVyY2hhbnRfb3ZlcnJpZGVfY3NzICE9PSAnc3RyaW5nJyAmJlxuICAgIG9iai5tZXJjaGFudF9vdmVycmlkZV9jc3MgIT09IG51bGxcbiAgKSB7XG4gICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBtZXJjaGFudF9vdmVycmlkZV9jc3MgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHBhZ2VfdmFyaWFudHMgaWYgcHJlc2VudFxuICBpZiAoJ3BhZ2VfdmFyaWFudHMnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai5wYWdlX3ZhcmlhbnRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9iai5wYWdlX3ZhcmlhbnRzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoucGFnZV92YXJpYW50cylcbiAgICApIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBwYWdlX3ZhcmlhbnRzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgZGF0YSB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgbW91bnRpbmdfY29uZmlncyBpZiBwcmVzZW50XG4gIGlmICgnbW91bnRpbmdfY29uZmlncycgaW4gb2JqKSB7XG4gICAgaWYgKFxuICAgICAgb2JqLm1vdW50aW5nX2NvbmZpZ3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb2JqLm1vdW50aW5nX2NvbmZpZ3MgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG9iai5tb3VudGluZ19jb25maWdzKVxuICAgICkge1xuICAgICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdJbnZhbGlkIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGE6IG1vdW50aW5nX2NvbmZpZ3MgbXVzdCBiZSBhbiBhcnJheSBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBkYXRhIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB3aWRnZXRfY29uZmlncyBpZiBwcmVzZW50XG4gIGlmICgnd2lkZ2V0X2NvbmZpZ3MnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai53aWRnZXRfY29uZmlncyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvYmoud2lkZ2V0X2NvbmZpZ3MgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG9iai53aWRnZXRfY29uZmlncylcbiAgICApIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiB3aWRnZXRfY29uZmlncyBtdXN0IGJlIGFuIGFycmF5IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7IGRhdGEgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHVpX2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ3VpX2NvbmZpZ3MnIGluIG9iaiAmJiB0eXBlb2Ygb2JqLnVpX2NvbmZpZ3MgIT09ICdvYmplY3QnICYmIG9iai51aV9jb25maWdzICE9PSBudWxsKSB7XG4gICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiB1aV9jb25maWdzIG11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVHJhbnNmb3JtIHRoZSBkYXRhIHRvIGNhbWVsQ2FzZVxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChvYmopIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gQ29udmVydCBwYWdlX3ZhcmlhbnRzIGZyb20gYXJyYXkgdG8gdmFsaWRhdGVkIGFycmF5IGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLnBhZ2VWYXJpYW50cyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMpKSB7XG4gICAgICBjb25zdCBwYWdlVmFyaWFudHNBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHM7XG4gICAgICBjb25zdCB2YWxpZGF0ZWRQYWdlVmFyaWFudHM6IFBhZ2VWYXJpYW50Q29uZmlnW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHBhZ2VWYXJpYW50c0FycmF5KSB7XG4gICAgICAgIGlmICh2YXJpYW50ICYmIHR5cGVvZiB2YXJpYW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFyaWFudC52YXJpYW50SWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhcmlhbnQgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyh2YXJpYW50KTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBhZ2VWYXJpYW50cy5wdXNoKHZhbGlkYXRlZFZhcmlhbnQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBwYWdlIHZhcmlhbnQsIHNraXBwaW5nJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgdmFyaWFudElkOiB2YXJpYW50LnZhcmlhbnRJZCxcbiAgICAgICAgICAgICAgdmFyaWFudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgcHJvY2Vzc2luZyBvdGhlciB2YXJpYW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBwYWdlIHZhcmlhbnQgc3RydWN0dXJlLCBza2lwcGluZycsIHVuZGVmaW5lZCwgeyB2YXJpYW50IH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMgPSB2YWxpZGF0ZWRQYWdlVmFyaWFudHM7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBtb3VudGluZ19jb25maWdzIGZyb20gYXJyYXkgdG8gUmVjb3JkIGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLm1vdW50aW5nQ29uZmlncyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MpKSB7XG4gICAgICBjb25zdCBtb3VudGluZ0NvbmZpZ3NBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MgYXMgQXJyYXk8e1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgY29uZmlnOiB1bmtub3duO1xuICAgICAgfT47XG4gICAgICBjb25zdCBtb3VudGluZ0NvbmZpZ3NSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPiA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbW91bnRpbmdDb25maWdzQXJyYXkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGl0ZW0gJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5rZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgaXRlbS5jb25maWcgJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5jb25maWcgPT09ICdvYmplY3QnXG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBhbmQgdHJhbnNmb3JtIHRoZSBjb25maWcgc3RydWN0dXJlXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZENvbmZpZyA9IHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWcoY29uZmlnLCBpdGVtLmtleSk7XG4gICAgICAgICAgICBtb3VudGluZ0NvbmZpZ3NSZWNvcmRbaXRlbS5rZXldID0gdmFsaWRhdGVkQ29uZmlnO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBtb3VudGluZyBjb25maWcsIHNraXBwaW5nJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgY29uZmlnS2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgICAgY29uZmlnOiBpdGVtLmNvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgcHJvY2Vzc2luZyBvdGhlciBjb25maWdzXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIG1vdW50aW5nIGNvbmZpZyBpdGVtIHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgaXRlbSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzID0gbW91bnRpbmdDb25maWdzUmVjb3JkO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgd2lkZ2V0X2NvbmZpZ3MgZnJvbSBhcnJheSB0byBSZWNvcmQgaWYgcHJlc2VudFxuICAgIGlmICh0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzKSkge1xuICAgICAgY29uc3Qgd2lkZ2V0Q29uZmlnc0FycmF5ID0gdHJhbnNmb3JtZWREYXRhLndpZGdldENvbmZpZ3MgYXMgQXJyYXk8e1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgY29uZmlnOiB1bmtub3duO1xuICAgICAgfT47XG4gICAgICBjb25zdCB3aWRnZXRDb25maWdzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2lkZ2V0Q29uZmlnc0FycmF5KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpdGVtICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0ua2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGl0ZW0uY29uZmlnICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0uY29uZmlnID09PSAnb2JqZWN0J1xuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgYW5kIHRyYW5zZm9ybSB3aWRnZXQgY29uZmlnIHVzaW5nIHRoZSBkZWRpY2F0ZWQgdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaXRlbS5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRDb25maWcgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybVdpZGdldENvbmZpZyhjb25maWcsIGl0ZW0ua2V5KTtcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ3NSZWNvcmRbaXRlbS5rZXldID0gdmFsaWRhdGVkQ29uZmlnO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCB3aWRnZXQgY29uZmlnLCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ0tleTogaXRlbS5rZXksXG4gICAgICAgICAgICAgIGNvbmZpZzogaXRlbS5jb25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgY29uZmlnc1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCB3aWRnZXQgY29uZmlnIGl0ZW0gc3RydWN0dXJlLCBza2lwcGluZycsIHVuZGVmaW5lZCwgeyBpdGVtIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzID0gd2lkZ2V0Q29uZmlnc1JlY29yZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhIGFzIEZyb250ZW5kQ29uZmlnO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5sb2dXYXJuKCdGYWlsZWQgdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhJywgZXJyb3IsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVlBLE1BQU0sU0FBUyxJQUFJQSxlQUFPLGdDQUFnQztBQUcxRCxNQUFhLG9DQUNYLFdBQ3NCO0NBR3RCLE1BQU0sRUFBRSxlQUFlLGdCQUFnQixHQUFHLFNBRnRCLHNCQUFzQixPQUFPO0NBS2pELE1BQU0sZUFBZSxNQUFNLFFBQVEsY0FBYyxHQUM3QyxjQUFjLEtBQUssRUFBRSxXQUFXLEdBQUcsaUJBQWlCO0VBQ2xELEdBQUc7RUFDSCxVQUFVO0VBQ1gsRUFBRSxHQUNILEVBQUU7Q0FHTixNQUFNLDJCQUEyQixNQUFNLFFBQVEsZUFBZSxHQUMxRCxlQUFlLEtBQUssRUFBRSxzQkFBc0IsR0FBRyxvQkFBb0I7RUFDakUsR0FBRztFQUNILEdBQUksTUFBTSxRQUFRLHFCQUFxQixHQUNuQyxFQUNFLHNCQUFzQixxQkFBcUIsS0FBSyxFQUFFLFFBQVEsR0FBRyxrQkFBa0I7R0FDN0UsR0FBRztHQUNILE9BQU8sTUFBTSxRQUFRLE9BQU8sR0FDeEIsT0FBTyxLQUFLLEVBQUUsV0FBVyxHQUFHLGlCQUFpQjtJQUMzQyxHQUFHO0lBQ0gsVUFBVTtJQUNYLEVBQUUsR0FDSCxFQUFFO0dBQ1AsRUFBRSxFQUNKLEdBQ0QsRUFBRTtFQUNQLEVBQUUsR0FDSCxFQUFFO0NBRU4sTUFBTUMsbUJBQTRDO0VBQ2hELEdBQUc7RUFDSCxHQUFJLGVBQWUsRUFBRSxjQUFjLEdBQUcsRUFBRTtFQUN4QyxHQUFJLDJCQUEyQixFQUFFLGdCQUFn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
229
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWcuanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJub3JtYWxpemVkQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsInJlc3VsdDogV2lkZ2V0TW91bnRpbmdDb25maWciLCJ2YWxpZGF0ZWRQYWdlVmFyaWFudHM6IFBhZ2VWYXJpYW50Q29uZmlnW10iLCJtb3VudGluZ0NvbmZpZ3NSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPiIsIndpZGdldENvbmZpZ3NSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZyb250ZW5kQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyJztcbmltcG9ydCB7XG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRDb25maWcsXG4gIFdpZGdldE1vdW50aW5nQ29uZmlnLFxufSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXMnO1xuaW1wb3J0IHsgRE9NSW5zZXJ0aW9uVHlwZSB9IGZyb20gJ3NyYy9tZXJjaGFudHMvZG9tSW5zZXJ0aW9uJztcbmltcG9ydCB7IEdyaWRJbnNlcnRpb25UeXBlIH0gZnJvbSAnc3JjL21lcmNoYW50cy9ncmlkSW5zZXJ0aW9uJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigndmFsaWRhdGVHcmFwaFFMRnJvbnRlbmRDb25maWcnKTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gUGFnZVZhcmlhbnRRdWVyeURhdGEgdG8gUGFnZVZhcmlhbnRDb25maWdcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyA9IChcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFBhZ2VWYXJpYW50Q29uZmlnID0+IHtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoY29uZmlnKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdCB7IHZhcmlhbnRDaGVja3MsIHdpZGdldE1vdW50aW5nLCAuLi5yZXN0IH0gPSB0cmFuc2Zvcm1lZDtcblxuICAvLyBDb252ZXJ0IHZhcmlhbnRDaGVja3MgdG8gdmFyaWFudFRlc3RzIHdpdGggdGVzdFR5cGUgbm9ybWFsaXphdGlvblxuICBjb25zdCB2YXJpYW50VGVzdHMgPSBBcnJheS5pc0FycmF5KHZhcmlhbnRDaGVja3MpXG4gICAgPyB2YXJpYW50Q2hlY2tzLm1hcCgoeyBjaGVja1R5cGUsIC4uLnJlc3RDaGVjayB9KSA9PiAoe1xuICAgICAgICAuLi5yZXN0Q2hlY2ssXG4gICAgICAgIHRlc3RUeXBlOiBjaGVja1R5cGUsXG4gICAgICB9KSlcbiAgICA6IFtdO1xuXG4gIC8vIE5vcm1hbGl6ZSB3aWRnZXRNb3VudGluZzogY2hlY2tzIC0+IHRlc3RzLCBjaGVja1R5cGUgLT4gdGVzdFR5cGVcbiAgY29uc3Qgbm9ybWFsaXplZFdpZGdldE1vdW50aW5nID0gQXJyYXkuaXNBcnJheSh3aWRnZXRNb3VudGluZylcbiAgICA/IHdpZGdldE1vdW50aW5nLm1hcCgoeyBtb3VudGluZ1BvaW50V2lkZ2V0cywgLi4ucmVzdE1vdW50aW5nIH0pID0+ICh7XG4gICAgICAgIC4uLnJlc3RNb3VudGluZyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkobW91bnRpbmdQb2ludFdpZGdldHMpXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG1vdW50aW5nUG9pbnRXaWRnZXRzOiBtb3VudGluZ1BvaW50V2lkZ2V0cy5tYXAoKHsgY2hlY2tzLCAuLi5yZXN0V2lkZ2V0IH0pID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucmVzdFdpZGdldCxcbiAgICAgICAgICAgICAgICB0ZXN0czogQXJyYXkuaXNBcnJheShjaGVja3MpXG4gICAgICAgICAgICAgICAgICA/IGNoZWNrcy5tYXAoKHsgY2hlY2tUeXBlLCAuLi5yZXN0Q2hlY2sgfSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN0Q2hlY2ssXG4gICAgICAgICAgICAgICAgICAgICAgdGVzdFR5cGU6IGNoZWNrVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIC4uLnJlc3QsXG4gICAgLi4uKHZhcmlhbnRUZXN0cyA/IHsgdmFyaWFudFRlc3RzIH0gOiB7fSksXG4gICAgLi4uKG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyA/IHsgd2lkZ2V0TW91bnRpbmc6IG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyB9IDoge30pLFxuICB9O1xuXG4gIGNvbnN0IHZhcmlhbnRJZCA9IG5vcm1hbGl6ZWRDb25maWcudmFyaWFudElkIGFzIHN0cmluZztcbiAgY29uc3QgdmFyaWFudFR5cGUgPSBub3JtYWxpemVkQ29uZmlnLnZhcmlhbnRUeXBlIGFzIHN0cmluZztcblxuICBpZiAodHlwZW9mIHZhcmlhbnRJZCAhPT0gJ3N0cmluZycgfHwgIXZhcmlhbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRJZCBmb3IgcGFnZVZhcmlhbnRgKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFyaWFudFR5cGUgIT09ICdzdHJpbmcnIHx8ICF2YXJpYW50VHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRUeXBlIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhcmlhbnRUZXN0cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRUZXN0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIE11c3QgYmUgYW4gYXJyYXlgLFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHRlc3Qgb2YgdmFyaWFudFRlc3RzKSB7XG4gICAgaWYgKCF0ZXN0LnRlc3RUeXBlIHx8IHR5cGVvZiB0ZXN0LnRlc3RUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhcmlhbnRUZXN0LnRlc3RUeXBlIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoUGFnZVZhcmlhbnRUZXN0VHlwZSkuaW5jbHVkZXModGVzdC50ZXN0VHlwZSBhcyBQYWdlVmFyaWFudFRlc3RUeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB0ZXN0VHlwZSAnJHt0ZXN0LnRlc3RUeXBlfScgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKFxuICAgICAgICAgIFBhZ2VWYXJpYW50VGVzdFR5cGUsXG4gICAgICAgICkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZFdpZGdldE1vdW50aW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nIG9yIGludmFsaWQgd2lkZ2V0TW91bnRpbmcgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBNdXN0IGJlIGFuIGFycmF5YCxcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBtb3VudGluZyBvZiBub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcpIHtcbiAgICBpZiAodHlwZW9mIG1vdW50aW5nLm1vdW50aW5nQ29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFtb3VudGluZy5tb3VudGluZ0NvbmZpZ0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW91bnRpbmdDb25maWdJZCBpbiB3aWRnZXRNb3VudGluZyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG5cbiAgICBpZiAobW91bnRpbmcud2lkZ2V0Q29uZmlnSWQgJiYgdHlwZW9mIG1vdW50aW5nLndpZGdldENvbmZpZ0lkICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdpZGdldENvbmZpZ0lkIGluIHdpZGdldE1vdW50aW5nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cblxuICAgIGlmIChtb3VudGluZy5tb3VudGluZ1BvaW50V2lkZ2V0cykge1xuICAgICAgZm9yIChjb25zdCB3aWRnZXQgb2YgbW91bnRpbmcubW91bnRpbmdQb2ludFdpZGdldHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aWRnZXQud2lkZ2V0Q29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICF3aWRnZXQud2lkZ2V0Q29uZmlnSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCB3aWRnZXRDb25maWdJZCBpbiBtb3VudGluZ1BvaW50V2lkZ2V0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkod2lkZ2V0LnRlc3RzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIG9yIG1pc3NpbmcgdGVzdHMgaW4gbW91bnRpbmdQb2ludFdpZGdldHMgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhcmlhbnRUeXBlID09PSAncGxwJykge1xuICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wbHBJZEV4dHJhY3RvciAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcucGxwSWRFeHRyYWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHBscElkRXh0cmFjdG9yIGZvciBQTFAgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAodmFyaWFudFR5cGUgPT09ICdwZHAnKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucHJvZHVjdElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJyB8fFxuICAgICAgIW5vcm1hbGl6ZWRDb25maWcucHJvZHVjdElkRXh0cmFjdG9yXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBwcm9kdWN0SWRFeHRyYWN0b3IgZm9yIFBEUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkQ29uZmlnLnBhcmVudFByb2R1Y3RJZEV4dHJhY3RvciAmJlxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucGFyZW50UHJvZHVjdElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJlbnRQcm9kdWN0SWRFeHRyYWN0b3IgZm9yIFBEUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gTXVzdCBiZSBzdHJpbmcgaWYgcHJvdmlkZWRgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbmZpZyBhcyBQYWdlVmFyaWFudENvbmZpZztcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIE1vdW50aW5nQ29uZmlnUXVlcnlEYXRhIHRvIFdpZGdldE1vdW50aW5nQ29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1Nb3VudGluZ0NvbmZpZyA9IChcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29uZmlnS2V5OiBzdHJpbmcsXG4pOiBXaWRnZXRNb3VudGluZ0NvbmZpZyA9PiB7XG4gIC8vIFJFTkFNSU5HIExPR0lDOiBDb252ZXJ0IGJhY2tlbmQgXCJDaGVja1wiIHRlcm1pbm9sb2d5IHRvIGZyb250ZW5kIFwiVGVzdFwiIHRlcm1pbm9sb2d5XG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuXG4gIC8vIENvbnZlcnQgY2hlY2tJZCB0byB0ZXN0SWQgZm9yIGZyb250ZW5kIGNvbXBhdGliaWxpdHkgKGRhdGEgaXMgYWxyZWFkeSBjYW1lbENhc2UpXG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQgJiYgIW5vcm1hbGl6ZWRDb25maWcudGVzdElkKSB7XG4gICAgbm9ybWFsaXplZENvbmZpZy50ZXN0SWQgPSBub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQ7XG4gICAgZGVsZXRlIG5vcm1hbGl6ZWRDb25maWcuY2hlY2tJZDtcbiAgfVxuXG4gIC8vIFJlcXVpcmVkIGZpZWxkcyAtIHRoZXNlIG11c3QgYmUgcHJlc2VudCBhbmQgdmFsaWRcbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBtb3VudGluZ0NvbmZpZ0lkIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY29udGFpbmVySWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLmNvbnRhaW5lcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgY29udGFpbmVySWQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLnRlc3RJZCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnRlc3RJZCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVzdElkIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgaWYgcHJvdmlkZWRgKTtcbiAgfVxuXG4gIC8vIFJlcXVpcmVkIGluc2VydGlvblBvaW50XG4gIGlmIChcbiAgICAhbm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludCB8fFxuICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50ICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgaW5zZXJ0aW9uUG9pbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgY29uc3QgaW5zZXJ0aW9uUG9pbnQgPSBub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIFZhbGlkYXRlIGluc2VydGlvblBvaW50IHJlcXVpcmVkIGZpZWxkc1xuICBpZiAodHlwZW9mIGluc2VydGlvblBvaW50LnNlbGVjdG9yICE9PSAnc3RyaW5nJyB8fCAhaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBpbnNlcnRpb25Qb2ludC5zZWxlY3RvciBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fCAhaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgaW5zZXJ0aW9uVHlwZSBpcyBhIHZhbGlkIERPTUluc2VydGlvblR5cGVcbiAgaWYgKCFPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmluY2x1ZGVzKGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlICcke2luc2VydGlvblBvaW50Lmluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uYWwgaW5zZXJ0aW9uUG9pbnQgZmllbGRzXG4gIGlmIChpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCAhPSBudWxsICYmIHR5cGVvZiBpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uYWwgcGFyZW50SW5zZXJ0aW9uUG9pbnQgaWYgcHJlc2VudFxuICBsZXQgcGFyZW50SW5zZXJ0aW9uUG9pbnQ7XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50KSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucGFyZW50SW5zZXJ0aW9uUG9pbnQgIT09ICdvYmplY3QnIHx8XG4gICAgICBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcucGFyZW50SW5zZXJ0aW9uUG9pbnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRQb2ludCA9IG5vcm1hbGl6ZWRDb25maWcucGFyZW50SW5zZXJ0aW9uUG9pbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKHR5cGVvZiBwYXJlbnRQb2ludC5zZWxlY3RvciAhPT0gJ3N0cmluZycgfHwgIXBhcmVudFBvaW50LnNlbGVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludC5zZWxlY3RvciBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHwgIXBhcmVudFBvaW50Lmluc2VydGlvblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMocGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlICcke3BhcmVudFBvaW50Lmluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudFBvaW50LnNlbGVjdGlvbkluZGV4ICE9IG51bGwgJiYgdHlwZW9mIHBhcmVudFBvaW50LnNlbGVjdGlvbkluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcGFyZW50SW5zZXJ0aW9uUG9pbnQgPSB7XG4gICAgICBzZWxlY3RvcjogcGFyZW50UG9pbnQuc2VsZWN0b3IsXG4gICAgICBpbnNlcnRpb25UeXBlOiBwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUsXG4gICAgICBzZWxlY3Rpb25JbmRleDogcGFyZW50UG9pbnQuc2VsZWN0aW9uSW5kZXggYXMgbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCB3cmFwcGluZ0VsZW1lbnQgaWYgcHJlc2VudFxuICBsZXQgd3JhcHBpbmdFbGVtZW50O1xuICBpZiAobm9ybWFsaXplZENvbmZpZy53cmFwcGluZ0VsZW1lbnQpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy53cmFwcGluZ0VsZW1lbnQgIT09ICdvYmplY3QnIHx8XG4gICAgICBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdyYXBwaW5nRWxlbWVudCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdGApO1xuICAgIH1cblxuICAgIGNvbnN0IHdyYXBwaW5nID0gbm9ybWFsaXplZENvbmZpZy53cmFwcGluZ0VsZW1lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKHR5cGVvZiB3cmFwcGluZy5jbGFzc05hbWUgIT09ICdzdHJpbmcnIHx8ICF3cmFwcGluZy5jbGFzc05hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5jbGFzc05hbWUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdyYXBwaW5nLmVsZW1lbnQgIT09ICdzdHJpbmcnIHx8ICF3cmFwcGluZy5lbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuZWxlbWVudCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHwgIXdyYXBwaW5nLmluc2VydGlvblR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5pbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMod3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuaW5zZXJ0aW9uVHlwZSAnJHt3cmFwcGluZy5pbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHdyYXBwaW5nRWxlbWVudCA9IHtcbiAgICAgIGNsYXNzTmFtZTogd3JhcHBpbmcuY2xhc3NOYW1lLFxuICAgICAgZWxlbWVudDogd3JhcHBpbmcuZWxlbWVudCxcbiAgICAgIGluc2VydGlvblR5cGU6IHdyYXBwaW5nLmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uYWwgZmllbGRzXG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLmRpdkNoZWNrU2VsZWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmRpdkNoZWNrU2VsZWN0b3IgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGRpdkNoZWNrU2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUgIT0gbnVsbCAmJiB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY2xhc3NOYW1lIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuc3VwcHJlc3Npb25TZWxlY3RvciAhPSBudWxsICYmXG4gICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuc3VwcHJlc3Npb25TZWxlY3RvciAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgc3VwcHJlc3Npb25TZWxlY3RvciBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzICE9IG51bGwgJiZcbiAgICAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMgIT09ICdvYmplY3QnIHx8XG4gICAgICBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMpKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBkYXRhQXR0cmlidXRlcyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdCBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5zdHlsZSAhPSBudWxsICYmXG4gICAgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnN0eWxlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcuc3R5bGUpKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3R5bGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3Qgb3IgbnVsbC91bmRlZmluZWRgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGdyaWRJbnNlcnRpb25UeXBlIGlmIHByZXNlbnRcbiAgbGV0IGdyaWRJbnNlcnRpb25UeXBlO1xuICBpZiAobm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fFxuICAgICAgIW5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBncmlkSW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nYCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIU9iamVjdC52YWx1ZXMoR3JpZEluc2VydGlvblR5cGUpLmluY2x1ZGVzKFxuICAgICAgICBub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlIGFzIEdyaWRJbnNlcnRpb25UeXBlLFxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBncmlkSW5zZXJ0aW9uVHlwZSAnJHtub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhHcmlkSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgZ3JpZEluc2VydGlvblR5cGUgPSBub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlIGFzIEdyaWRJbnNlcnRpb25UeXBlO1xuICB9XG5cbiAgLy8gQnVpbGQgdGhlIHJldHVybiBvYmplY3QsIG9ubHkgaW5jbHVkaW5nIG9wdGlvbmFsIGZpZWxkcyBpZiB0aGV5IGhhdmUgdmFsdWVzXG4gIGNvbnN0IHJlc3VsdDogV2lkZ2V0TW91bnRpbmdDb25maWcgPSB7XG4gICAgbW91bnRpbmdDb25maWdJZDogbm9ybWFsaXplZENvbmZpZy5tb3VudGluZ0NvbmZpZ0lkLFxuICAgIGNvbnRhaW5lcklkOiBub3JtYWxpemVkQ29uZmlnLmNvbnRhaW5lcklkLFxuICAgIC4uLihub3JtYWxpemVkQ29uZmlnLnRlc3RJZCA/IHsgdGVzdElkOiBub3JtYWxpemVkQ29uZmlnLnRlc3RJZCBhcyBzdHJpbmcgfSA6IHt9KSxcbiAgICBpbnNlcnRpb25Qb2ludDoge1xuICAgICAgc2VsZWN0b3I6IGluc2VydGlvblBvaW50LnNlbGVjdG9yLFxuICAgICAgaW5zZXJ0aW9uVHlwZTogaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlLFxuICAgICAgLi4uKGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4ICE9IG51bGwgJiYge1xuICAgICAgICBzZWxlY3Rpb25JbmRleDogaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXgsXG4gICAgICB9KSxcbiAgICB9LFxuICB9O1xuXG4gIC8vIE9ubHkgYWRkIG9wdGlvbmFsIGZpZWxkcyBpZiB0aGV5IGhhdmUgdmFsdWVzXG4gIGlmIChwYXJlbnRJbnNlcnRpb25Qb2ludCkge1xuICAgIHJlc3VsdC5wYXJlbnRJbnNlcnRpb25Qb2ludCA9IHBhcmVudEluc2VydGlvblBvaW50O1xuICB9XG4gIGlmIChncmlkSW5zZXJ0aW9uVHlwZSkge1xuICAgIHJlc3VsdC5ncmlkSW5zZXJ0aW9uVHlwZSA9IGdyaWRJbnNlcnRpb25UeXBlO1xuICB9XG4gIGlmICh3cmFwcGluZ0VsZW1lbnQpIHtcbiAgICByZXN1bHQud3JhcHBpbmdFbGVtZW50ID0gd3JhcHBpbmdFbGVtZW50O1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmRpdkNoZWNrU2VsZWN0b3IpIHtcbiAgICByZXN1bHQuZGl2Q2hlY2tTZWxlY3RvciA9IG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3RvciBhcyBzdHJpbmc7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lKSB7XG4gICAgcmVzdWx0LmNsYXNzTmFtZSA9IG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lIGFzIHN0cmluZztcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yKSB7XG4gICAgcmVzdWx0LnN1cHByZXNzaW9uU2VsZWN0b3IgPSBub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3I7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMpIHtcbiAgICByZXN1bHQuZGF0YUF0dHJpYnV0ZXMgPSBub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuc3R5bGUpIHtcbiAgICByZXN1bHQuc3R5bGUgPSBub3JtYWxpemVkQ29uZmlnLnN0eWxlIGFzIFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj47XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gV2lkZ2V0Q29uZmlnUXVlcnlEYXRhIHRvIFdpZGdldENvbmZpZ1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtV2lkZ2V0Q29uZmlnID0gKFxuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjb25maWdLZXk6IHN0cmluZyxcbik6IFdpZGdldENvbmZpZyA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoY29uZmlnKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcud2lkZ2V0Q29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLndpZGdldENvbmZpZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd2lkZ2V0Q29uZmlnSWQgZm9yIHdpZGdldCBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcudHlwZSAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcudHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHR5cGUgZm9yIHdpZGdldCBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNvbnRlbnRJZCAhPSBudWxsICYmIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmNvbnRlbnRJZCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjb250ZW50SWQgZm9yIHdpZGdldCBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cblxuICAvLyBOb3RlOiBXaWRnZXQgY29uZmlncyBhcmUgY29tcGxleCB1bmlvbnMgd2l0aCB0eXBlLXNwZWNpZmljIHByb3BlcnRpZXMuXG5cbiAgLy8gUmV0dXJuIHRoZSBub3JtYWxpemVkIGNvbmZpZyBhcyBXaWRnZXRDb25maWdcbiAgLy8gVXNlIGludGVybWVkaWF0ZSAndW5rbm93bicgY2FzdCBmb3IgY29tcGxleCB1bmlvbiB0eXBlc1xuICByZXR1cm4gbm9ybWFsaXplZENvbmZpZyBhcyB1bmtub3duIGFzIFdpZGdldENvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZyA9IChkYXRhOiB1bmtub3duKTogRnJvbnRlbmRDb25maWcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgbG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBvYmogPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIFZhbGlkYXRlIG1lcmNoYW50X292ZXJyaWRlX2NzcyBpZiBwcmVzZW50XG4gIGlmIChcbiAgICAnbWVyY2hhbnRfb3ZlcnJpZGVfY3NzJyBpbiBvYmogJiZcbiAgICB0eXBlb2Ygb2JqLm1lcmNoYW50X292ZXJyaWRlX2NzcyAhPT0gJ3N0cmluZycgJiZcbiAgICBvYmoubWVyY2hhbnRfb3ZlcnJpZGVfY3NzICE9PSBudWxsXG4gICkge1xuICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IGRhdGEgfSxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBwYWdlX3ZhcmlhbnRzIGlmIHByZXNlbnRcbiAgaWYgKCdwYWdlX3ZhcmlhbnRzJyBpbiBvYmopIHtcbiAgICBpZiAoXG4gICAgICBvYmoucGFnZV92YXJpYW50cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvYmoucGFnZV92YXJpYW50cyAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkob2JqLnBhZ2VfdmFyaWFudHMpXG4gICAgKSB7XG4gICAgICBsb2dnZXIubG9nV2FybihcbiAgICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogcGFnZV92YXJpYW50cyBtdXN0IGJlIGFuIGFycmF5IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7IGRhdGEgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG1vdW50aW5nX2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ21vdW50aW5nX2NvbmZpZ3MnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai5tb3VudGluZ19jb25maWdzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9iai5tb3VudGluZ19jb25maWdzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoubW91bnRpbmdfY29uZmlncylcbiAgICApIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBtb3VudGluZ19jb25maWdzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgZGF0YSB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgd2lkZ2V0X2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ3dpZGdldF9jb25maWdzJyBpbiBvYmopIHtcbiAgICBpZiAoXG4gICAgICBvYmoud2lkZ2V0X2NvbmZpZ3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb2JqLndpZGdldF9jb25maWdzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoud2lkZ2V0X2NvbmZpZ3MpXG4gICAgKSB7XG4gICAgICBsb2dnZXIubG9nV2FybihcbiAgICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogd2lkZ2V0X2NvbmZpZ3MgbXVzdCBiZSBhbiBhcnJheSBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBkYXRhIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB1aV9jb25maWdzIGlmIHByZXNlbnRcbiAgaWYgKCd1aV9jb25maWdzJyBpbiBvYmogJiYgdHlwZW9mIG9iai51aV9jb25maWdzICE9PSAnb2JqZWN0JyAmJiBvYmoudWlfY29uZmlncyAhPT0gbnVsbCkge1xuICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogdWlfY29uZmlncyBtdXN0IGJlIGFuIG9iamVjdCBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IGRhdGEgfSxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRyYW5zZm9ybSB0aGUgZGF0YSB0byBjYW1lbENhc2VcbiAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwob2JqKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIENvbnZlcnQgcGFnZV92YXJpYW50cyBmcm9tIGFycmF5IHRvIHZhbGlkYXRlZCBhcnJheSBpZiBwcmVzZW50XG4gICAgaWYgKHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzKSkge1xuICAgICAgY29uc3QgcGFnZVZhcmlhbnRzQXJyYXkgPSB0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzO1xuICAgICAgY29uc3QgdmFsaWRhdGVkUGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBwYWdlVmFyaWFudHNBcnJheSkge1xuICAgICAgICBpZiAodmFyaWFudCAmJiB0eXBlb2YgdmFyaWFudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhcmlhbnQudmFyaWFudElkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYXJpYW50ID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHModmFyaWFudCk7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQYWdlVmFyaWFudHMucHVzaCh2YWxpZGF0ZWRWYXJpYW50KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgcGFnZSB2YXJpYW50LCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIHZhcmlhbnRJZDogdmFyaWFudC52YXJpYW50SWQsXG4gICAgICAgICAgICAgIHZhcmlhbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgdmFyaWFudHNcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgcGFnZSB2YXJpYW50IHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgdmFyaWFudCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzID0gdmFsaWRhdGVkUGFnZVZhcmlhbnRzO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgbW91bnRpbmdfY29uZmlncyBmcm9tIGFycmF5IHRvIFJlY29yZCBpZiBwcmVzZW50XG4gICAgaWYgKHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzKSkge1xuICAgICAgY29uc3QgbW91bnRpbmdDb25maWdzQXJyYXkgPSB0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzIGFzIEFycmF5PHtcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZzogdW5rbm93bjtcbiAgICAgIH0+O1xuICAgICAgY29uc3QgbW91bnRpbmdDb25maWdzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz4gPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1vdW50aW5nQ29uZmlnc0FycmF5KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpdGVtICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0ua2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGl0ZW0uY29uZmlnICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0uY29uZmlnID09PSAnb2JqZWN0J1xuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgYW5kIHRyYW5zZm9ybSB0aGUgY29uZmlnIHN0cnVjdHVyZVxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaXRlbS5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRDb25maWcgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywgaXRlbS5rZXkpO1xuICAgICAgICAgICAgbW91bnRpbmdDb25maWdzUmVjb3JkW2l0ZW0ua2V5XSA9IHZhbGlkYXRlZENvbmZpZztcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgbW91bnRpbmcgY29uZmlnLCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ0tleTogaXRlbS5rZXksXG4gICAgICAgICAgICAgIGNvbmZpZzogaXRlbS5jb25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgY29uZmlnc1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIubG9nV2FybignSW52YWxpZCBtb3VudGluZyBjb25maWcgaXRlbSBzdHJ1Y3R1cmUsIHNraXBwaW5nJywgdW5kZWZpbmVkLCB7IGl0ZW0gfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJhbnNmb3JtZWREYXRhLm1vdW50aW5nQ29uZmlncyA9IG1vdW50aW5nQ29uZmlnc1JlY29yZDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHdpZGdldF9jb25maWdzIGZyb20gYXJyYXkgdG8gUmVjb3JkIGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLndpZGdldENvbmZpZ3MgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncykpIHtcbiAgICAgIGNvbnN0IHdpZGdldENvbmZpZ3NBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzIGFzIEFycmF5PHtcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZzogdW5rbm93bjtcbiAgICAgIH0+O1xuICAgICAgY29uc3Qgd2lkZ2V0Q29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHdpZGdldENvbmZpZ3NBcnJheSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaXRlbSAmJlxuICAgICAgICAgIHR5cGVvZiBpdGVtLmtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBpdGVtLmNvbmZpZyAmJlxuICAgICAgICAgIHR5cGVvZiBpdGVtLmNvbmZpZyA9PT0gJ29iamVjdCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gd2lkZ2V0IGNvbmZpZyB1c2luZyB0aGUgZGVkaWNhdGVkIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGl0ZW0uY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWcoY29uZmlnLCBpdGVtLmtleSk7XG4gICAgICAgICAgICB3aWRnZXRDb25maWdzUmVjb3JkW2l0ZW0ua2V5XSA9IHZhbGlkYXRlZENvbmZpZztcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgd2lkZ2V0IGNvbmZpZywgc2tpcHBpbmcnLCBlcnJvciwge1xuICAgICAgICAgICAgICBjb25maWdLZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICBjb25maWc6IGl0ZW0uY29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDb250aW51ZSBwcm9jZXNzaW5nIG90aGVyIGNvbmZpZ3NcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgd2lkZ2V0IGNvbmZpZyBpdGVtIHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgaXRlbSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncyA9IHdpZGdldENvbmZpZ3NSZWNvcmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YSBhcyBGcm9udGVuZENvbmZpZztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIubG9nV2FybignRmFpbGVkIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YScsIGVycm9yLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFZQSxNQUFNLFNBQVMsSUFBSUEsZUFBTyxnQ0FBZ0M7QUFHMUQsTUFBYSxvQ0FDWCxXQUNzQjtDQUd0QixNQUFNLEVBQUUsZUFBZSxnQkFBZ0IsR0FBRyxTQUZ0QixzQkFBc0IsT0FBTztDQUtqRCxNQUFNLGVBQWUsTUFBTSxRQUFRLGNBQWMsR0FDN0MsY0FBYyxLQUFLLEVBQUUsV0FBVyxHQUFHLGlCQUFpQjtFQUNsRCxHQUFHO0VBQ0gsVUFBVTtFQUNYLEVBQUUsR0FDSCxFQUFFO0NBR04sTUFBTSwyQkFBMkIsTUFBTSxRQUFRLGVBQWUsR0FDMUQsZUFBZSxLQUFLLEVBQUUsc0JBQXNCLEdBQUcsb0JBQW9CO0VBQ2pFLEdBQUc7RUFDSCxHQUFJLE1BQU0sUUFBUSxxQkFBcUIsR0FDbkMsRUFDRSxzQkFBc0IscUJBQXFCLEtBQUssRUFBRSxRQUFRLEdBQUcsa0JBQWtCO0dBQzdFLEdBQUc7R0FDSCxPQUFPLE1BQU0sUUFBUSxPQUFPLEdBQ3hCLE9BQU8sS0FBSyxFQUFFLFdBQVcsR0FBRyxpQkFBaUI7SUFDM0MsR0FBRztJQUNILFVBQVU7SUFDWCxFQUFFLEdBQ0gsRUFBRTtHQUNQLEVBQUUsRUFDSixHQUNELEVBQUU7RUFDUCxFQUFFLEdBQ0gsRUFBRTtDQUVOLE1BQU1D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
@@ -35,7 +35,6 @@ const parseSearchHash = (hash) => {
35
35
  query: params.q ? decodeURIComponent(params.q) : null
36
36
  };
37
37
  };
38
- window.history.pushState(null, "");
39
38
 
40
39
  //#endregion
41
40
  exports.buildSearchHash = buildSearchHash;
@@ -44,4 +43,4 @@ exports.createUrlWithQueryParams = createUrlWithQueryParams;
44
43
  exports.getQueryParam = getQueryParam;
45
44
  exports.parseHref = parseHref;
46
45
  exports.parseSearchHash = parseSearchHash;
47
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsc1BhcnNlci5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3VybHNQYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZVJvbGUsIFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGEgfSBmcm9tICcuLi9tb2RlbHMvbWVzc2FnZSc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUhyZWYgPSAoXG4gIGhyZWY6IHN0cmluZyxcbik6IHsgdXJsOiBVUkwgfCB1bmRlZmluZWQ7IHVybFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zIHwgdW5kZWZpbmVkIH0gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoaHJlZik7XG4gICAgY29uc3QgdXJsU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmwuc2VhcmNoKTtcbiAgICByZXR1cm4geyB1cmwsIHVybFNlYXJjaFBhcmFtcyB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgdXJsOiB1bmRlZmluZWQsIHVybFNlYXJjaFBhcmFtczogdW5kZWZpbmVkIH07XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVcmxXaXRoUXVlcnlQYXJhbXMgPSAoXG4gIHVybDogc3RyaW5nLFxuICBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIE9iamVjdC5lbnRyaWVzKHF1ZXJ5UGFyYW1zKS5mb3JFYWNoKChbdmFsdWUsIGtleV0pID0+IHVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKHZhbHVlLCBrZXkpKTtcblxuICByZXR1cm4gdXJsT2JqLmhyZWY7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlQYXJhbSA9IChrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgcmV0dXJuIHVybE9iai5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG59O1xuXG50eXBlIFNlYXJjaE1lc3NhZ2UgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHJvbGU6IE1lc3NhZ2VSb2xlO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbn0gJiBQcm9kdWN0U2VhcmNoTWVzc2FnZU1ldGFkYXRhO1xuXG5leHBvcnQgY29uc3QgYnVpbGRTZWFyY2hIYXNoID0gKG1lc3NhZ2U6IFNlYXJjaE1lc3NhZ2UpOiBzdHJpbmcgPT5cbiAgYCNldnM9dHJ1ZSZzPSR7bWVzc2FnZS5pZH0mcT0ke21lc3NhZ2UubWV0YWRhdGEuZ2VuZXJhdGVkUXVlcnl9YDtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkU2VhcmNoU3RhcnRIYXNoID0gKHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmcgPT4gYCNldnM9dHJ1ZSZxPSR7cXVlcnl9YDtcblxuLy8gQmFzaWMgcGFyc2VyIGZvciB0aGUgc2VhcmNoIGhhc2hcbmV4cG9ydCBjb25zdCBwYXJzZVNlYXJjaEhhc2ggPSAoaGFzaDogc3RyaW5nKTogeyBpZDogc3RyaW5nIHwgbnVsbDsgcXVlcnk6IHN0cmluZyB8IG51bGwgfSA9PiB7XG4gIGlmICghaGFzaC5zdGFydHNXaXRoKCcjZXZzPXRydWUnKSkge1xuICAgIHJldHVybiB7IGlkOiBudWxsLCBxdWVyeTogbnVsbCB9O1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhoYXNoLnNwbGl0KCcmJykubWFwKHBhcmFtID0+IHBhcmFtLnNwbGl0KCc9JykpKTtcbiAgcmV0dXJuIHtcbiAgICBpZDogcGFyYW1zLnMgPyBkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLnMpIDogbnVsbCxcbiAgICBxdWVyeTogcGFyYW1zLnEgPyBkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLnEpIDogbnVsbCxcbiAgfTtcbn07XG5cbndpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCAnJyk7XG4iXSwibWFwcGluZ3MiOiI7O0FBRUEsTUFBYSxhQUNYLFNBQzJFO0FBQzNFLEtBQUk7RUFDRixNQUFNLE1BQU0sSUFBSSxJQUFJLEtBQUs7QUFFekIsU0FBTztHQUFFO0dBQUssaUJBRFUsSUFBSSxnQkFBZ0IsSUFBSSxPQUFPO0dBQ3hCO1VBQ3hCLEdBQUc7QUFDVixTQUFPO0dBQUUsS0FBSztHQUFXLGlCQUFpQjtHQUFXOzs7QUFJekQsTUFBYSw0QkFDWCxLQUNBLGdCQUNXO0NBQ1gsTUFBTSxTQUFTLElBQUksSUFBSSxLQUFLLE9BQU8sU0FBUyxLQUFLO0FBQ2pELFFBQU8sUUFBUSxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sU0FBUyxPQUFPLGFBQWEsT0FBTyxPQUFPLElBQUksQ0FBQztBQUU3RixRQUFPLE9BQU87O0FBR2hCLE1BQWEsaUJBQWlCLFFBQStCO0FBRTNELFFBRGUsSUFBSSxJQUFJLE9BQU8sU0FBUyxLQUFLLENBQzlCLGFBQWEsSUFBSSxJQUFJOztBQVNyQyxNQUFhLG1CQUFtQixZQUM5QixlQUFlLFFBQVEsR0FBRyxLQUFLLFFBQVEsU0FBUztBQUVsRCxNQUFhLHdCQUF3QixVQUEwQixlQUFlO0FBRzlFLE1BQWEsbUJBQW1CLFNBQThEO0FBQzVGLEtBQUksQ0FBQyxLQUFLLFdBQVcsWUFBWSxDQUMvQixRQUFPO0VBQUUsSUFBSTtFQUFNLE9BQU87RUFBTTtDQUVsQyxNQUFNLFNBQVMsT0FBTyxZQUFZLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSSxVQUFTLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNqRixRQUFPO0VBQ0wsSUFBSSxPQUFPLElBQUksbUJBQW1CLE9BQU8sRUFBRSxHQUFHO0VBQzlDLE9BQU8sT0FBTyxJQUFJLG1CQUFtQixPQUFPLEVBQUUsR0FBRztFQUNsRDs7QUFHSCxPQUFPLFFBQVEsVUFBVSxNQUFNLEdBQUcifQ==
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsc1BhcnNlci5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3VybHNQYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWVzc2FnZVJvbGUsIFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGEgfSBmcm9tICcuLi9tb2RlbHMvbWVzc2FnZSc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUhyZWYgPSAoXG4gIGhyZWY6IHN0cmluZyxcbik6IHsgdXJsOiBVUkwgfCB1bmRlZmluZWQ7IHVybFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zIHwgdW5kZWZpbmVkIH0gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoaHJlZik7XG4gICAgY29uc3QgdXJsU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmwuc2VhcmNoKTtcbiAgICByZXR1cm4geyB1cmwsIHVybFNlYXJjaFBhcmFtcyB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgdXJsOiB1bmRlZmluZWQsIHVybFNlYXJjaFBhcmFtczogdW5kZWZpbmVkIH07XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVcmxXaXRoUXVlcnlQYXJhbXMgPSAoXG4gIHVybDogc3RyaW5nLFxuICBxdWVyeVBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIE9iamVjdC5lbnRyaWVzKHF1ZXJ5UGFyYW1zKS5mb3JFYWNoKChbdmFsdWUsIGtleV0pID0+IHVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKHZhbHVlLCBrZXkpKTtcblxuICByZXR1cm4gdXJsT2JqLmhyZWY7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UXVlcnlQYXJhbSA9IChrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgcmV0dXJuIHVybE9iai5zZWFyY2hQYXJhbXMuZ2V0KGtleSk7XG59O1xuXG50eXBlIFNlYXJjaE1lc3NhZ2UgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHJvbGU6IE1lc3NhZ2VSb2xlO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbn0gJiBQcm9kdWN0U2VhcmNoTWVzc2FnZU1ldGFkYXRhO1xuXG5leHBvcnQgY29uc3QgYnVpbGRTZWFyY2hIYXNoID0gKG1lc3NhZ2U6IFNlYXJjaE1lc3NhZ2UpOiBzdHJpbmcgPT5cbiAgYCNldnM9dHJ1ZSZzPSR7bWVzc2FnZS5pZH0mcT0ke21lc3NhZ2UubWV0YWRhdGEuZ2VuZXJhdGVkUXVlcnl9YDtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkU2VhcmNoU3RhcnRIYXNoID0gKHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmcgPT4gYCNldnM9dHJ1ZSZxPSR7cXVlcnl9YDtcblxuLy8gQmFzaWMgcGFyc2VyIGZvciB0aGUgc2VhcmNoIGhhc2hcbmV4cG9ydCBjb25zdCBwYXJzZVNlYXJjaEhhc2ggPSAoaGFzaDogc3RyaW5nKTogeyBpZDogc3RyaW5nIHwgbnVsbDsgcXVlcnk6IHN0cmluZyB8IG51bGwgfSA9PiB7XG4gIGlmICghaGFzaC5zdGFydHNXaXRoKCcjZXZzPXRydWUnKSkge1xuICAgIHJldHVybiB7IGlkOiBudWxsLCBxdWVyeTogbnVsbCB9O1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhoYXNoLnNwbGl0KCcmJykubWFwKHBhcmFtID0+IHBhcmFtLnNwbGl0KCc9JykpKTtcbiAgcmV0dXJuIHtcbiAgICBpZDogcGFyYW1zLnMgPyBkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLnMpIDogbnVsbCxcbiAgICBxdWVyeTogcGFyYW1zLnEgPyBkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLnEpIDogbnVsbCxcbiAgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7O0FBRUEsTUFBYSxhQUNYLFNBQzJFO0FBQzNFLEtBQUk7RUFDRixNQUFNLE1BQU0sSUFBSSxJQUFJLEtBQUs7QUFFekIsU0FBTztHQUFFO0dBQUssaUJBRFUsSUFBSSxnQkFBZ0IsSUFBSSxPQUFPO0dBQ3hCO1VBQ3hCLEdBQUc7QUFDVixTQUFPO0dBQUUsS0FBSztHQUFXLGlCQUFpQjtHQUFXOzs7QUFJekQsTUFBYSw0QkFDWCxLQUNBLGdCQUNXO0NBQ1gsTUFBTSxTQUFTLElBQUksSUFBSSxLQUFLLE9BQU8sU0FBUyxLQUFLO0FBQ2pELFFBQU8sUUFBUSxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sU0FBUyxPQUFPLGFBQWEsT0FBTyxPQUFPLElBQUksQ0FBQztBQUU3RixRQUFPLE9BQU87O0FBR2hCLE1BQWEsaUJBQWlCLFFBQStCO0FBRTNELFFBRGUsSUFBSSxJQUFJLE9BQU8sU0FBUyxLQUFLLENBQzlCLGFBQWEsSUFBSSxJQUFJOztBQVNyQyxNQUFhLG1CQUFtQixZQUM5QixlQUFlLFFBQVEsR0FBRyxLQUFLLFFBQVEsU0FBUztBQUVsRCxNQUFhLHdCQUF3QixVQUEwQixlQUFlO0FBRzlFLE1BQWEsbUJBQW1CLFNBQThEO0FBQzVGLEtBQUksQ0FBQyxLQUFLLFdBQVcsWUFBWSxDQUMvQixRQUFPO0VBQUUsSUFBSTtFQUFNLE9BQU87RUFBTTtDQUVsQyxNQUFNLFNBQVMsT0FBTyxZQUFZLEtBQUssTUFBTSxJQUFJLENBQUMsS0FBSSxVQUFTLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNqRixRQUFPO0VBQ0wsSUFBSSxPQUFPLElBQUksbUJBQW1CLE9BQU8sRUFBRSxHQUFHO0VBQzlDLE9BQU8sT0FBTyxJQUFJLG1CQUFtQixPQUFPLEVBQUUsR0FBRztFQUNsRCJ9
@@ -34,8 +34,7 @@ const parseSearchHash = (hash) => {
34
34
  query: params.q ? decodeURIComponent(params.q) : null
35
35
  };
36
36
  };
37
- window.history.pushState(null, "");
38
37
 
39
38
  //#endregion
40
39
  export { buildSearchHash, buildSearchStartHash, createUrlWithQueryParams, getQueryParam, parseHref, parseSearchHash };
41
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsc1BhcnNlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvdXJsc1BhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlUm9sZSwgUHJvZHVjdFNlYXJjaE1lc3NhZ2VNZXRhZGF0YSB9IGZyb20gJy4uL21vZGVscy9tZXNzYWdlJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlSHJlZiA9IChcbiAgaHJlZjogc3RyaW5nLFxuKTogeyB1cmw6IFVSTCB8IHVuZGVmaW5lZDsgdXJsU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMgfCB1bmRlZmluZWQgfSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybC5zZWFyY2gpO1xuICAgIHJldHVybiB7IHVybCwgdXJsU2VhcmNoUGFyYW1zIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyB1cmw6IHVuZGVmaW5lZCwgdXJsU2VhcmNoUGFyYW1zOiB1bmRlZmluZWQgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVVybFdpdGhRdWVyeVBhcmFtcyA9IChcbiAgdXJsOiBzdHJpbmcsXG4gIHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgT2JqZWN0LmVudHJpZXMocXVlcnlQYXJhbXMpLmZvckVhY2goKFt2YWx1ZSwga2V5XSkgPT4gdXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQodmFsdWUsIGtleSkpO1xuXG4gIHJldHVybiB1cmxPYmouaHJlZjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtID0gKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICByZXR1cm4gdXJsT2JqLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbn07XG5cbnR5cGUgU2VhcmNoTWVzc2FnZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcm9sZTogTWVzc2FnZVJvbGU7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xufSAmIFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGE7XG5cbmV4cG9ydCBjb25zdCBidWlsZFNlYXJjaEhhc2ggPSAobWVzc2FnZTogU2VhcmNoTWVzc2FnZSk6IHN0cmluZyA9PlxuICBgI2V2cz10cnVlJnM9JHttZXNzYWdlLmlkfSZxPSR7bWVzc2FnZS5tZXRhZGF0YS5nZW5lcmF0ZWRRdWVyeX1gO1xuXG5leHBvcnQgY29uc3QgYnVpbGRTZWFyY2hTdGFydEhhc2ggPSAocXVlcnk6IHN0cmluZyk6IHN0cmluZyA9PiBgI2V2cz10cnVlJnE9JHtxdWVyeX1gO1xuXG4vLyBCYXNpYyBwYXJzZXIgZm9yIHRoZSBzZWFyY2ggaGFzaFxuZXhwb3J0IGNvbnN0IHBhcnNlU2VhcmNoSGFzaCA9IChoYXNoOiBzdHJpbmcpOiB7IGlkOiBzdHJpbmcgfCBudWxsOyBxdWVyeTogc3RyaW5nIHwgbnVsbCB9ID0+IHtcbiAgaWYgKCFoYXNoLnN0YXJ0c1dpdGgoJyNldnM9dHJ1ZScpKSB7XG4gICAgcmV0dXJuIHsgaWQ6IG51bGwsIHF1ZXJ5OiBudWxsIH07XG4gIH1cbiAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmZyb21FbnRyaWVzKGhhc2guc3BsaXQoJyYnKS5tYXAocGFyYW0gPT4gcGFyYW0uc3BsaXQoJz0nKSkpO1xuICByZXR1cm4ge1xuICAgIGlkOiBwYXJhbXMucyA/IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMucykgOiBudWxsLFxuICAgIHF1ZXJ5OiBwYXJhbXMucSA/IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMucSkgOiBudWxsLFxuICB9O1xufTtcblxud2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsICcnKTtcbiJdLCJtYXBwaW5ncyI6IjtBQUVBLE1BQWEsYUFDWCxTQUMyRTtBQUMzRSxLQUFJO0VBQ0YsTUFBTSxNQUFNLElBQUksSUFBSSxLQUFLO0FBRXpCLFNBQU87R0FBRTtHQUFLLGlCQURVLElBQUksZ0JBQWdCLElBQUksT0FBTztHQUN4QjtVQUN4QixHQUFHO0FBQ1YsU0FBTztHQUFFLEtBQUs7R0FBVyxpQkFBaUI7R0FBVzs7O0FBSXpELE1BQWEsNEJBQ1gsS0FDQSxnQkFDVztDQUNYLE1BQU0sU0FBUyxJQUFJLElBQUksS0FBSyxPQUFPLFNBQVMsS0FBSztBQUNqRCxRQUFPLFFBQVEsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLFNBQVMsT0FBTyxhQUFhLE9BQU8sT0FBTyxJQUFJLENBQUM7QUFFN0YsUUFBTyxPQUFPOztBQUdoQixNQUFhLGlCQUFpQixRQUErQjtBQUUzRCxRQURlLElBQUksSUFBSSxPQUFPLFNBQVMsS0FBSyxDQUM5QixhQUFhLElBQUksSUFBSTs7QUFTckMsTUFBYSxtQkFBbUIsWUFDOUIsZUFBZSxRQUFRLEdBQUcsS0FBSyxRQUFRLFNBQVM7QUFFbEQsTUFBYSx3QkFBd0IsVUFBMEIsZUFBZTtBQUc5RSxNQUFhLG1CQUFtQixTQUE4RDtBQUM1RixLQUFJLENBQUMsS0FBSyxXQUFXLFlBQVksQ0FDL0IsUUFBTztFQUFFLElBQUk7RUFBTSxPQUFPO0VBQU07Q0FFbEMsTUFBTSxTQUFTLE9BQU8sWUFBWSxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUksVUFBUyxNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDakYsUUFBTztFQUNMLElBQUksT0FBTyxJQUFJLG1CQUFtQixPQUFPLEVBQUUsR0FBRztFQUM5QyxPQUFPLE9BQU8sSUFBSSxtQkFBbUIsT0FBTyxFQUFFLEdBQUc7RUFDbEQ7O0FBR0gsT0FBTyxRQUFRLFVBQVUsTUFBTSxHQUFHIn0=
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsc1BhcnNlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvdXJsc1BhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXNzYWdlUm9sZSwgUHJvZHVjdFNlYXJjaE1lc3NhZ2VNZXRhZGF0YSB9IGZyb20gJy4uL21vZGVscy9tZXNzYWdlJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlSHJlZiA9IChcbiAgaHJlZjogc3RyaW5nLFxuKTogeyB1cmw6IFVSTCB8IHVuZGVmaW5lZDsgdXJsU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMgfCB1bmRlZmluZWQgfSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChocmVmKTtcbiAgICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybC5zZWFyY2gpO1xuICAgIHJldHVybiB7IHVybCwgdXJsU2VhcmNoUGFyYW1zIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyB1cmw6IHVuZGVmaW5lZCwgdXJsU2VhcmNoUGFyYW1zOiB1bmRlZmluZWQgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVVybFdpdGhRdWVyeVBhcmFtcyA9IChcbiAgdXJsOiBzdHJpbmcsXG4gIHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgT2JqZWN0LmVudHJpZXMocXVlcnlQYXJhbXMpLmZvckVhY2goKFt2YWx1ZSwga2V5XSkgPT4gdXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQodmFsdWUsIGtleSkpO1xuXG4gIHJldHVybiB1cmxPYmouaHJlZjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtID0gKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICByZXR1cm4gdXJsT2JqLnNlYXJjaFBhcmFtcy5nZXQoa2V5KTtcbn07XG5cbnR5cGUgU2VhcmNoTWVzc2FnZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcm9sZTogTWVzc2FnZVJvbGU7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xufSAmIFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGE7XG5cbmV4cG9ydCBjb25zdCBidWlsZFNlYXJjaEhhc2ggPSAobWVzc2FnZTogU2VhcmNoTWVzc2FnZSk6IHN0cmluZyA9PlxuICBgI2V2cz10cnVlJnM9JHttZXNzYWdlLmlkfSZxPSR7bWVzc2FnZS5tZXRhZGF0YS5nZW5lcmF0ZWRRdWVyeX1gO1xuXG5leHBvcnQgY29uc3QgYnVpbGRTZWFyY2hTdGFydEhhc2ggPSAocXVlcnk6IHN0cmluZyk6IHN0cmluZyA9PiBgI2V2cz10cnVlJnE9JHtxdWVyeX1gO1xuXG4vLyBCYXNpYyBwYXJzZXIgZm9yIHRoZSBzZWFyY2ggaGFzaFxuZXhwb3J0IGNvbnN0IHBhcnNlU2VhcmNoSGFzaCA9IChoYXNoOiBzdHJpbmcpOiB7IGlkOiBzdHJpbmcgfCBudWxsOyBxdWVyeTogc3RyaW5nIHwgbnVsbCB9ID0+IHtcbiAgaWYgKCFoYXNoLnN0YXJ0c1dpdGgoJyNldnM9dHJ1ZScpKSB7XG4gICAgcmV0dXJuIHsgaWQ6IG51bGwsIHF1ZXJ5OiBudWxsIH07XG4gIH1cbiAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmZyb21FbnRyaWVzKGhhc2guc3BsaXQoJyYnKS5tYXAocGFyYW0gPT4gcGFyYW0uc3BsaXQoJz0nKSkpO1xuICByZXR1cm4ge1xuICAgIGlkOiBwYXJhbXMucyA/IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMucykgOiBudWxsLFxuICAgIHF1ZXJ5OiBwYXJhbXMucSA/IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMucSkgOiBudWxsLFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUVBLE1BQWEsYUFDWCxTQUMyRTtBQUMzRSxLQUFJO0VBQ0YsTUFBTSxNQUFNLElBQUksSUFBSSxLQUFLO0FBRXpCLFNBQU87R0FBRTtHQUFLLGlCQURVLElBQUksZ0JBQWdCLElBQUksT0FBTztHQUN4QjtVQUN4QixHQUFHO0FBQ1YsU0FBTztHQUFFLEtBQUs7R0FBVyxpQkFBaUI7R0FBVzs7O0FBSXpELE1BQWEsNEJBQ1gsS0FDQSxnQkFDVztDQUNYLE1BQU0sU0FBUyxJQUFJLElBQUksS0FBSyxPQUFPLFNBQVMsS0FBSztBQUNqRCxRQUFPLFFBQVEsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLFNBQVMsT0FBTyxhQUFhLE9BQU8sT0FBTyxJQUFJLENBQUM7QUFFN0YsUUFBTyxPQUFPOztBQUdoQixNQUFhLGlCQUFpQixRQUErQjtBQUUzRCxRQURlLElBQUksSUFBSSxPQUFPLFNBQVMsS0FBSyxDQUM5QixhQUFhLElBQUksSUFBSTs7QUFTckMsTUFBYSxtQkFBbUIsWUFDOUIsZUFBZSxRQUFRLEdBQUcsS0FBSyxRQUFRLFNBQVM7QUFFbEQsTUFBYSx3QkFBd0IsVUFBMEIsZUFBZTtBQUc5RSxNQUFhLG1CQUFtQixTQUE4RDtBQUM1RixLQUFJLENBQUMsS0FBSyxXQUFXLFlBQVksQ0FDL0IsUUFBTztFQUFFLElBQUk7RUFBTSxPQUFPO0VBQU07Q0FFbEMsTUFBTSxTQUFTLE9BQU8sWUFBWSxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUksVUFBUyxNQUFNLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDakYsUUFBTztFQUNMLElBQUksT0FBTyxJQUFJLG1CQUFtQixPQUFPLEVBQUUsR0FBRztFQUM5QyxPQUFPLE9BQU8sSUFBSSxtQkFBbUIsT0FBTyxFQUFFLEdBQUc7RUFDbEQifQ==
@@ -2,7 +2,7 @@ import { UserIdentityContextType } from "../../contexts/userIdentityContext/user
2
2
  import { hasParsedVariantInfoAtom, pageUserEventAtom, pageVariantInfoAtom, supportedEventAtom, variantInfoAtom } from "./variant.cjs";
3
3
  import { VariantInfo } from "../../application/models/variantInfo/variantInfo.cjs";
4
4
  import { ContextEnvEnum, ContextSourceEnum } from "@spiffy-ai/commerce-api-client";
5
- import * as jotai12 from "jotai";
5
+ import * as jotai0 from "jotai";
6
6
  import * as jotai_utils0 from "jotai/utils";
7
7
 
8
8
  //#region src/atoms/app/index.d.ts
@@ -15,13 +15,13 @@ interface AppDetails {
15
15
  env: ContextEnvEnum;
16
16
  variantInfo: VariantInfo;
17
17
  }
18
- declare const userIdAtom: jotai12.WritableAtom<string, [value: string], void>;
19
- declare const userIdentityAtom: jotai12.PrimitiveAtom<UserIdentityContextType | undefined> & {
18
+ declare const userIdAtom: jotai0.WritableAtom<string, [value: string], void>;
19
+ declare const userIdentityAtom: jotai0.PrimitiveAtom<UserIdentityContextType | undefined> & {
20
20
  init: UserIdentityContextType | undefined;
21
21
  };
22
- declare const appSourceAtom: jotai12.Atom<ContextSourceEnum>;
23
- declare const chatIdAtom: jotai12.WritableAtom<string, [string | typeof jotai_utils0.RESET | ((prev: string) => string | typeof jotai_utils0.RESET)], void>;
24
- declare const appDetailsAtom: jotai12.Atom<AppDetails>;
22
+ declare const appSourceAtom: jotai0.Atom<ContextSourceEnum>;
23
+ declare const chatIdAtom: jotai0.WritableAtom<string, [string | typeof jotai_utils0.RESET | ((prev: string) => string | typeof jotai_utils0.RESET)], void>;
24
+ declare const appDetailsAtom: jotai0.Atom<AppDetails>;
25
25
  //#endregion
26
26
  export { AppDetails, appDetailsAtom, appSourceAtom, chatIdAtom, hasParsedVariantInfoAtom, pageUserEventAtom, pageVariantInfoAtom, supportedEventAtom, userIdAtom, userIdentityAtom, variantInfoAtom };
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F0b21zL2FwcC9pbmRleC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRleHRFbnZFbnVtLCBDb250ZXh0U291cmNlRW51bSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBWYXJpYW50SW5mbyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgVXNlcklkZW50aXR5Q29udGV4dFR5cGUgfSBmcm9tICdzcmMvY29udGV4dHMvdXNlcklkZW50aXR5Q29udGV4dC91c2VySWRlbnRpdHlDb250ZXh0JztcbmV4cG9ydCBpbnRlcmZhY2UgQXBwRGV0YWlscyB7XG4gICAgb3JnSWQ6IHN0cmluZztcbiAgICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgICBjaGF0SWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBzb3VyY2U6IENvbnRleHRTb3VyY2VFbnVtO1xuICAgIGVudjogQ29udGV4dEVudkVudW07XG4gICAgdmFyaWFudEluZm86IFZhcmlhbnRJbmZvO1xufVxuZXhwb3J0IHsgcGFnZVVzZXJFdmVudEF0b20sIHBhZ2VWYXJpYW50SW5mb0F0b20sIHZhcmlhbnRJbmZvQXRvbSwgaGFzUGFyc2VkVmFyaWFudEluZm9BdG9tLCBzdXBwb3J0ZWRFdmVudEF0b20sIH0gZnJvbSAnLi92YXJpYW50JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHVzZXJJZEF0b206IGltcG9ydChcImpvdGFpXCIpLldyaXRhYmxlQXRvbTxzdHJpbmcsIFt2YWx1ZTogc3RyaW5nXSwgdm9pZD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VySWRlbnRpdHlBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5QcmltaXRpdmVBdG9tPFVzZXJJZGVudGl0eUNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiAmIHtcbiAgICBpbml0OiBVc2VySWRlbnRpdHlDb250ZXh0VHlwZSB8IHVuZGVmaW5lZDtcbn07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhcHBTb3VyY2VBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5BdG9tPENvbnRleHRTb3VyY2VFbnVtPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNoYXRJZEF0b206IGltcG9ydChcImpvdGFpXCIpLldyaXRhYmxlQXRvbTxzdHJpbmcsIFtzdHJpbmcgfCB0eXBlb2YgaW1wb3J0KFwiam90YWkvdXRpbHNcIikuUkVTRVQgfCAoKHByZXY6IHN0cmluZykgPT4gc3RyaW5nIHwgdHlwZW9mIGltcG9ydChcImpvdGFpL3V0aWxzXCIpLlJFU0VUKV0sIHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgYXBwRGV0YWlsc0F0b206IGltcG9ydChcImpvdGFpXCIpLkF0b208QXBwRGV0YWlscz47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBS0EsSUFBVyxhQUFhO0NBQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUV4QixJQUFXLGFBQU8sQ0FBQSxXQUFBLFFBQUEsYUFBQTtBQUNsQixJQUFXLG1CQUFrQjtDQUFBO09BQUE7T0FBQSxRQUFBO09BQUE7Q0FBQTtBQUM3QixJQUFXLGdCQUFZO0NBQUE7T0FBQTtPQUFBLFFBQUE7Q0FBQTtBQUN2QixJQUFXLGFBQWE7Q0FBQztPQUFHLGFBQUE7T0FBQSxhQUFBO09BQUEsUUFBQTtDQUFBO0FBQzVCLElBQUEsaUJBQUE7Q0FBQTtPQUFBO09BQUEsUUFBQTtDQUFBIn0=
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F0b21zL2FwcC9pbmRleC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRleHRFbnZFbnVtLCBDb250ZXh0U291cmNlRW51bSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBWYXJpYW50SW5mbyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgVXNlcklkZW50aXR5Q29udGV4dFR5cGUgfSBmcm9tICdzcmMvY29udGV4dHMvdXNlcklkZW50aXR5Q29udGV4dC91c2VySWRlbnRpdHlDb250ZXh0JztcbmV4cG9ydCBpbnRlcmZhY2UgQXBwRGV0YWlscyB7XG4gICAgb3JnSWQ6IHN0cmluZztcbiAgICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgICBjaGF0SWQ6IHN0cmluZztcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBzb3VyY2U6IENvbnRleHRTb3VyY2VFbnVtO1xuICAgIGVudjogQ29udGV4dEVudkVudW07XG4gICAgdmFyaWFudEluZm86IFZhcmlhbnRJbmZvO1xufVxuZXhwb3J0IHsgcGFnZVVzZXJFdmVudEF0b20sIHBhZ2VWYXJpYW50SW5mb0F0b20sIHZhcmlhbnRJbmZvQXRvbSwgaGFzUGFyc2VkVmFyaWFudEluZm9BdG9tLCBzdXBwb3J0ZWRFdmVudEF0b20sIH0gZnJvbSAnLi92YXJpYW50JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHVzZXJJZEF0b206IGltcG9ydChcImpvdGFpXCIpLldyaXRhYmxlQXRvbTxzdHJpbmcsIFt2YWx1ZTogc3RyaW5nXSwgdm9pZD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VySWRlbnRpdHlBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5QcmltaXRpdmVBdG9tPFVzZXJJZGVudGl0eUNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiAmIHtcbiAgICBpbml0OiBVc2VySWRlbnRpdHlDb250ZXh0VHlwZSB8IHVuZGVmaW5lZDtcbn07XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhcHBTb3VyY2VBdG9tOiBpbXBvcnQoXCJqb3RhaVwiKS5BdG9tPENvbnRleHRTb3VyY2VFbnVtPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNoYXRJZEF0b206IGltcG9ydChcImpvdGFpXCIpLldyaXRhYmxlQXRvbTxzdHJpbmcsIFtzdHJpbmcgfCB0eXBlb2YgaW1wb3J0KFwiam90YWkvdXRpbHNcIikuUkVTRVQgfCAoKHByZXY6IHN0cmluZykgPT4gc3RyaW5nIHwgdHlwZW9mIGltcG9ydChcImpvdGFpL3V0aWxzXCIpLlJFU0VUKV0sIHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgYXBwRGV0YWlsc0F0b206IGltcG9ydChcImpvdGFpXCIpLkF0b208QXBwRGV0YWlscz47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBS0EsSUFBVyxhQUFhO0NBQUE7T0FBQTtPQUFBO09BQUE7Q0FBQTtBQUV4QixJQUFXLGFBQU8sQ0FBQSxVQUFBLE9BQUEsYUFBQTtBQUNsQixJQUFXLG1CQUFrQjtDQUFBO09BQUE7T0FBQSxPQUFBO09BQUE7Q0FBQTtBQUM3QixJQUFXLGdCQUFZO0NBQUE7T0FBQTtPQUFBLE9BQUE7Q0FBQTtBQUN2QixJQUFXLGFBQWE7Q0FBQztPQUFHLGFBQUE7T0FBQSxhQUFBO09BQUEsT0FBQTtDQUFBO0FBQzVCLElBQUEsaUJBQUE7Q0FBQTtPQUFBO09BQUEsT0FBQTtDQUFBIn0=
@@ -2,7 +2,7 @@ import { UserIdentityContextType } from "../../contexts/userIdentityContext/user
2
2
  import { hasParsedVariantInfoAtom, pageUserEventAtom, pageVariantInfoAtom, supportedEventAtom, variantInfoAtom } from "./variant.js";
3
3
  import { VariantInfo } from "../../application/models/variantInfo/variantInfo.js";
4
4
  import { ContextEnvEnum, ContextSourceEnum } from "@spiffy-ai/commerce-api-client";
5
- import * as jotai0 from "jotai";
5
+ import * as jotai16 from "jotai";
6
6
  import * as jotai_utils0 from "jotai/utils";
7
7
 
8
8
  //#region src/atoms/app/index.d.ts
@@ -15,13 +15,13 @@ interface AppDetails {
15
15
  env: ContextEnvEnum;
16
16
  variantInfo: VariantInfo;
17
17
  }
18
- declare const userIdAtom: jotai0.WritableAtom<string, [value: string], void>;
19
- declare const userIdentityAtom: jotai0.PrimitiveAtom<UserIdentityContextType | undefined> & {
18
+ declare const userIdAtom: jotai16.WritableAtom<string, [value: string], void>;
19
+ declare const userIdentityAtom: jotai16.PrimitiveAtom<UserIdentityContextType | undefined> & {
20
20
  init: UserIdentityContextType | undefined;
21
21
  };
22
- declare const appSourceAtom: jotai0.Atom<ContextSourceEnum>;
23
- declare const chatIdAtom: jotai0.WritableAtom<string, [string | typeof jotai_utils0.RESET | ((prev: string) => string | typeof jotai_utils0.RESET)], void>;
24
- declare const appDetailsAtom: jotai0.Atom<AppDetails>;
22
+ declare const appSourceAtom: jotai16.Atom<ContextSourceEnum>;
23
+ declare const chatIdAtom: jotai16.WritableAtom<string, [string | typeof jotai_utils0.RESET | ((prev: string) => string | typeof jotai_utils0.RESET)], void>;
24
+ declare const appDetailsAtom: jotai16.Atom<AppDetails>;
25
25
  //#endregion
26
26
  export { AppDetails, appDetailsAtom, appSourceAtom, chatIdAtom, hasParsedVariantInfoAtom, pageUserEventAtom, pageVariantInfoAtom, supportedEventAtom, userIdAtom, userIdentityAtom, variantInfoAtom };
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXRvbXMvYXBwL2luZGV4LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dEVudkVudW0sIENvbnRleHRTb3VyY2VFbnVtIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IFZhcmlhbnRJbmZvIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBVc2VySWRlbnRpdHlDb250ZXh0VHlwZSB9IGZyb20gJ3NyYy9jb250ZXh0cy91c2VySWRlbnRpdHlDb250ZXh0L3VzZXJJZGVudGl0eUNvbnRleHQnO1xuZXhwb3J0IGludGVyZmFjZSBBcHBEZXRhaWxzIHtcbiAgICBvcmdJZDogc3RyaW5nO1xuICAgIG9yZ1Nob3J0TmFtZTogc3RyaW5nO1xuICAgIGNoYXRJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHNvdXJjZTogQ29udGV4dFNvdXJjZUVudW07XG4gICAgZW52OiBDb250ZXh0RW52RW51bTtcbiAgICB2YXJpYW50SW5mbzogVmFyaWFudEluZm87XG59XG5leHBvcnQgeyBwYWdlVXNlckV2ZW50QXRvbSwgcGFnZVZhcmlhbnRJbmZvQXRvbSwgdmFyaWFudEluZm9BdG9tLCBoYXNQYXJzZWRWYXJpYW50SW5mb0F0b20sIHN1cHBvcnRlZEV2ZW50QXRvbSwgfSBmcm9tICcuL3ZhcmlhbnQnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlcklkQXRvbTogaW1wb3J0KFwiam90YWlcIikuV3JpdGFibGVBdG9tPHN0cmluZywgW3ZhbHVlOiBzdHJpbmddLCB2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHVzZXJJZGVudGl0eUF0b206IGltcG9ydChcImpvdGFpXCIpLlByaW1pdGl2ZUF0b208VXNlcklkZW50aXR5Q29udGV4dFR5cGUgfCB1bmRlZmluZWQ+ICYge1xuICAgIGluaXQ6IFVzZXJJZGVudGl0eUNvbnRleHRUeXBlIHwgdW5kZWZpbmVkO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGFwcFNvdXJjZUF0b206IGltcG9ydChcImpvdGFpXCIpLkF0b208Q29udGV4dFNvdXJjZUVudW0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgY2hhdElkQXRvbTogaW1wb3J0KFwiam90YWlcIikuV3JpdGFibGVBdG9tPHN0cmluZywgW3N0cmluZyB8IHR5cGVvZiBpbXBvcnQoXCJqb3RhaS91dGlsc1wiKS5SRVNFVCB8ICgocHJldjogc3RyaW5nKSA9PiBzdHJpbmcgfCB0eXBlb2YgaW1wb3J0KFwiam90YWkvdXRpbHNcIikuUkVTRVQpXSwgdm9pZD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhcHBEZXRhaWxzQXRvbTogaW1wb3J0KFwiam90YWlcIikuQXRvbTxBcHBEZXRhaWxzPjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxJQUFXLGFBQWE7Q0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBRXhCLElBQVcsYUFBTyxDQUFBLFdBQUEsT0FBQSxhQUFBO0FBQ2xCLElBQVcsbUJBQWtCO0NBQUE7T0FBQTtPQUFBLE9BQUE7T0FBQTtDQUFBO0FBQzdCLElBQVcsZ0JBQVk7Q0FBQTtPQUFBO09BQUEsT0FBQTtDQUFBO0FBQ3ZCLElBQVcsYUFBYTtDQUFDO09BQUcsYUFBQTtPQUFBLGFBQUE7T0FBQSxPQUFBO0NBQUE7QUFDNUIsSUFBQSxpQkFBQTtDQUFBO09BQUE7T0FBQSxPQUFBO0NBQUEifQ==
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXRvbXMvYXBwL2luZGV4LmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dEVudkVudW0sIENvbnRleHRTb3VyY2VFbnVtIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IFZhcmlhbnRJbmZvIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBVc2VySWRlbnRpdHlDb250ZXh0VHlwZSB9IGZyb20gJ3NyYy9jb250ZXh0cy91c2VySWRlbnRpdHlDb250ZXh0L3VzZXJJZGVudGl0eUNvbnRleHQnO1xuZXhwb3J0IGludGVyZmFjZSBBcHBEZXRhaWxzIHtcbiAgICBvcmdJZDogc3RyaW5nO1xuICAgIG9yZ1Nob3J0TmFtZTogc3RyaW5nO1xuICAgIGNoYXRJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIHNvdXJjZTogQ29udGV4dFNvdXJjZUVudW07XG4gICAgZW52OiBDb250ZXh0RW52RW51bTtcbiAgICB2YXJpYW50SW5mbzogVmFyaWFudEluZm87XG59XG5leHBvcnQgeyBwYWdlVXNlckV2ZW50QXRvbSwgcGFnZVZhcmlhbnRJbmZvQXRvbSwgdmFyaWFudEluZm9BdG9tLCBoYXNQYXJzZWRWYXJpYW50SW5mb0F0b20sIHN1cHBvcnRlZEV2ZW50QXRvbSwgfSBmcm9tICcuL3ZhcmlhbnQnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlcklkQXRvbTogaW1wb3J0KFwiam90YWlcIikuV3JpdGFibGVBdG9tPHN0cmluZywgW3ZhbHVlOiBzdHJpbmddLCB2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHVzZXJJZGVudGl0eUF0b206IGltcG9ydChcImpvdGFpXCIpLlByaW1pdGl2ZUF0b208VXNlcklkZW50aXR5Q29udGV4dFR5cGUgfCB1bmRlZmluZWQ+ICYge1xuICAgIGluaXQ6IFVzZXJJZGVudGl0eUNvbnRleHRUeXBlIHwgdW5kZWZpbmVkO1xufTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGFwcFNvdXJjZUF0b206IGltcG9ydChcImpvdGFpXCIpLkF0b208Q29udGV4dFNvdXJjZUVudW0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgY2hhdElkQXRvbTogaW1wb3J0KFwiam90YWlcIikuV3JpdGFibGVBdG9tPHN0cmluZywgW3N0cmluZyB8IHR5cGVvZiBpbXBvcnQoXCJqb3RhaS91dGlsc1wiKS5SRVNFVCB8ICgocHJldjogc3RyaW5nKSA9PiBzdHJpbmcgfCB0eXBlb2YgaW1wb3J0KFwiam90YWkvdXRpbHNcIikuUkVTRVQpXSwgdm9pZD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhcHBEZXRhaWxzQXRvbTogaW1wb3J0KFwiam90YWlcIikuQXRvbTxBcHBEZXRhaWxzPjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFLQSxJQUFXLGFBQWE7Q0FBQTtPQUFBO09BQUE7T0FBQTtDQUFBO0FBRXhCLElBQVcsYUFBTyxDQUFBLFVBQUEsUUFBQSxhQUFBO0FBQ2xCLElBQVcsbUJBQWtCO0NBQUE7T0FBQTtPQUFBLFFBQUE7T0FBQTtDQUFBO0FBQzdCLElBQVcsZ0JBQVk7Q0FBQTtPQUFBO09BQUEsUUFBQTtDQUFBO0FBQ3ZCLElBQVcsYUFBYTtDQUFDO09BQUcsYUFBQTtPQUFBLGFBQUE7T0FBQSxRQUFBO0NBQUE7QUFDNUIsSUFBQSxpQkFBQTtDQUFBO09BQUE7T0FBQSxRQUFBO0NBQUEifQ==