@envive-ai/react-hooks 0.2.10-arthur-3 → 0.2.10

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 (184) hide show
  1. package/dist/{NewOrgConfig-kYrS59aR.js → NewOrgConfig-Ch7rrfDH.js} +2 -2
  2. package/dist/{NewOrgConfig-BYo4V8-u.cjs → NewOrgConfig-D9hNf1kf.cjs} +2 -2
  3. package/dist/{SystemSettingsContext-BY1BFgAQ.js → SystemSettingsContext-BEDKzEGs.js} +2 -2
  4. package/dist/{SystemSettingsContext-EDpRMMt2.cjs → SystemSettingsContext-SsZBLhYl.cjs} +2 -2
  5. package/dist/{TrackComponentVisibleEvent-BHVBHQhu.js → TrackComponentVisibleEvent-C04P7hRs.js} +2 -2
  6. package/dist/{TrackComponentVisibleEvent-B_2kXqvV.cjs → TrackComponentVisibleEvent-CypK1zy3.cjs} +2 -2
  7. package/dist/{amplitudeContext-D58WY1aS.js → amplitudeContext-BlCtIx5s.js} +9 -9
  8. package/dist/{amplitudeContext-CjkMpI_a.cjs → amplitudeContext-BmuAesXk.cjs} +9 -9
  9. package/dist/{api-DeW6rHj3.cjs → api-BvygKEiX.cjs} +3 -3
  10. package/dist/{api-BWSsazAG.js → api-bHEYmSiT.js} +3 -3
  11. package/dist/{app-CflxT_xI.js → app-Aqkm_SlS.js} +2 -2
  12. package/dist/{app-BbPSHefQ.cjs → app-BQw_-JGl.cjs} +2 -2
  13. package/dist/application/models/graphql/index.cjs +2 -2
  14. package/dist/application/models/graphql/index.js +2 -2
  15. package/dist/application/models/guards/api/index.cjs +3 -3
  16. package/dist/application/models/guards/api/index.js +3 -3
  17. package/dist/application/models/guards/utils.cjs +1 -1
  18. package/dist/application/models/guards/utils.js +1 -1
  19. package/dist/application/models/index.cjs +7 -7
  20. package/dist/application/models/index.js +7 -7
  21. package/dist/application/utils/index.cjs +14 -14
  22. package/dist/application/utils/index.d.cts +2 -2
  23. package/dist/application/utils/index.d.ts +2 -2
  24. package/dist/application/utils/index.js +14 -14
  25. package/dist/atoms/app/index.cjs +10 -10
  26. package/dist/atoms/app/index.d.cts +6 -6
  27. package/dist/atoms/app/index.d.ts +7 -7
  28. package/dist/atoms/app/index.js +10 -10
  29. package/dist/atoms/chat/index.cjs +15 -15
  30. package/dist/atoms/chat/index.d.cts +26 -26
  31. package/dist/atoms/chat/index.d.ts +26 -26
  32. package/dist/atoms/chat/index.js +15 -15
  33. package/dist/atoms/globalSearch/index.d.cts +5 -5
  34. package/dist/atoms/globalSearch/index.d.ts +5 -5
  35. package/dist/atoms/org/index.d.cts +16 -16
  36. package/dist/atoms/org/index.d.ts +16 -16
  37. package/dist/atoms/search/index.cjs +17 -17
  38. package/dist/atoms/search/index.d.cts +1 -1
  39. package/dist/atoms/search/index.d.ts +1 -1
  40. package/dist/atoms/search/index.js +17 -17
  41. package/dist/{cdnContext-CtrIlAqX.js → cdnContext-CU9G_o-7.js} +2 -2
  42. package/dist/{cdnContext-CaDyQ_5p.cjs → cdnContext-Cjj2MuO-.cjs} +2 -2
  43. package/dist/{chat-Qkx5llOV.js → chat-Bxd6htvi.js} +7 -7
  44. package/dist/{chat-CLo8FBCb.cjs → chat-RYAkvBFh.cjs} +7 -7
  45. package/dist/{chatSearch-CjMcB3fG.js → chatSearch-BGLT3jWO.js} +4 -4
  46. package/dist/{chatSearch-CP7QtVyA.cjs → chatSearch-Bqv73Oy0.cjs} +4 -4
  47. package/dist/{chatState-BUN8ehpy.js → chatState-C8aDBHkl.js} +3 -3
  48. package/dist/{chatState-BUlDJ4NK.cjs → chatState-CACif3VJ.cjs} +3 -3
  49. package/dist/{commerce-api-DNnrOYWX.cjs → commerce-api-B7smzE4o.cjs} +6 -6
  50. package/dist/{commerce-api-CxnUXpTq.js → commerce-api-BSbzeNTu.js} +6 -6
  51. package/dist/contexts/amplitudeContext/index.cjs +14 -14
  52. package/dist/contexts/amplitudeContext/index.js +14 -14
  53. package/dist/contexts/cdnContext/index.cjs +4 -4
  54. package/dist/contexts/cdnContext/index.js +4 -4
  55. package/dist/contexts/chatContext/index.cjs +21 -21
  56. package/dist/contexts/chatContext/index.d.cts +2 -2
  57. package/dist/contexts/chatContext/index.d.ts +2 -2
  58. package/dist/contexts/chatContext/index.js +21 -21
  59. package/dist/contexts/enviveConfigContext/index.cjs +4 -4
  60. package/dist/contexts/enviveConfigContext/index.js +4 -4
  61. package/dist/contexts/enviveCssContext/index.cjs +14 -14
  62. package/dist/contexts/enviveCssContext/index.js +14 -14
  63. package/dist/contexts/featureFlagContext/index.cjs +6 -6
  64. package/dist/contexts/featureFlagContext/index.js +6 -6
  65. package/dist/contexts/featureFlagServiceContext/index.cjs +3 -3
  66. package/dist/contexts/featureFlagServiceContext/index.js +3 -3
  67. package/dist/contexts/graphqlContext/index.cjs +10 -10
  68. package/dist/contexts/graphqlContext/index.js +10 -10
  69. package/dist/contexts/localStorageContext/index.cjs +2 -2
  70. package/dist/contexts/localStorageContext/index.js +2 -2
  71. package/dist/contexts/newOrgConfigContext/index.cjs +13 -13
  72. package/dist/contexts/newOrgConfigContext/index.js +13 -13
  73. package/dist/contexts/searchContext/index.cjs +15 -15
  74. package/dist/contexts/searchContext/index.js +15 -15
  75. package/dist/contexts/sessionStorageContext/index.cjs +2 -2
  76. package/dist/contexts/sessionStorageContext/index.js +2 -2
  77. package/dist/contexts/shopifyUrlContext/index.cjs +2 -2
  78. package/dist/contexts/shopifyUrlContext/index.js +2 -2
  79. package/dist/contexts/systemSettingsContext/index.cjs +4 -4
  80. package/dist/contexts/systemSettingsContext/index.d.cts +2 -2
  81. package/dist/contexts/systemSettingsContext/index.d.ts +2 -2
  82. package/dist/contexts/systemSettingsContext/index.js +4 -4
  83. package/dist/contexts/userIdentityContext/index.cjs +16 -16
  84. package/dist/contexts/userIdentityContext/index.js +16 -16
  85. package/dist/{enviveConfig-Dv9-esGV.cjs → enviveConfig-B42OJ8bK.cjs} +3 -3
  86. package/dist/{enviveConfig-DZBohDpc.js → enviveConfig-BlIkxiAF.js} +3 -3
  87. package/dist/{enviveConfigContext-DrDjCems.js → enviveConfigContext-1_EivtCa.js} +3 -3
  88. package/dist/{enviveConfigContext-D2OELZDR.cjs → enviveConfigContext-Y1ahEAMe.cjs} +3 -3
  89. package/dist/{featureFlagServiceContext-FBM6DdMJ.js → featureFlagServiceContext-CAPrb4e_.js} +3 -3
  90. package/dist/{featureFlagServiceContext-CJyYItqu.cjs → featureFlagServiceContext-D3Ge8GH5.cjs} +3 -3
  91. package/dist/{featureGates-qU_ulhpC.cjs → featureGates-Bt_Y3kZ7.cjs} +1 -1
  92. package/dist/{featureGates-KEwAL8p_.js → featureGates-D4Me_IZH.js} +1 -1
  93. package/dist/frontendConfig-DPpzM5cz.d.cts +1 -1
  94. package/dist/frontendConfig-msK69LYN.d.ts +1 -1
  95. package/dist/{graphql-CkxgqsXP.js → graphql-CbI_HNEp.js} +2 -2
  96. package/dist/{graphql-i3dtpVTl.cjs → graphql-Cqoo1D4M.cjs} +2 -2
  97. package/dist/{graphqlContext-Dddy7mr7.cjs → graphqlContext-CIeJ0GDP.cjs} +5 -5
  98. package/dist/{graphqlContext-C0hG5Uer.js → graphqlContext-CoU6L9PE.js} +5 -5
  99. package/dist/hooks/AmplitudeOperations/index.cjs +15 -15
  100. package/dist/hooks/AmplitudeOperations/index.js +15 -15
  101. package/dist/hooks/AppDetails/index.cjs +13 -13
  102. package/dist/hooks/AppDetails/index.js +13 -13
  103. package/dist/hooks/CdnOperations/index.cjs +4 -4
  104. package/dist/hooks/CdnOperations/index.js +4 -4
  105. package/dist/hooks/ChatToggle/index.cjs +15 -15
  106. package/dist/hooks/ChatToggle/index.js +15 -15
  107. package/dist/hooks/ChatToggleAnalytics/index.cjs +16 -16
  108. package/dist/hooks/ChatToggleAnalytics/index.js +16 -16
  109. package/dist/hooks/CustomerSupportHandoff/index.cjs +1 -1
  110. package/dist/hooks/CustomerSupportHandoff/index.js +1 -1
  111. package/dist/hooks/GrabAndScroll/index.d.cts +2 -2
  112. package/dist/hooks/GraphQLConfig/index.cjs +11 -11
  113. package/dist/hooks/GraphQLConfig/index.js +11 -11
  114. package/dist/hooks/IdentifyUser/index.cjs +16 -16
  115. package/dist/hooks/IdentifyUser/index.js +16 -16
  116. package/dist/hooks/ImageResolver/index.cjs +9 -9
  117. package/dist/hooks/ImageResolver/index.js +9 -9
  118. package/dist/hooks/LocalStorageOperations/index.cjs +2 -2
  119. package/dist/hooks/LocalStorageOperations/index.js +2 -2
  120. package/dist/hooks/MessageFilter/index.cjs +7 -7
  121. package/dist/hooks/MessageFilter/index.js +7 -7
  122. package/dist/hooks/NewOrgConfig/index.cjs +14 -14
  123. package/dist/hooks/NewOrgConfig/index.js +14 -14
  124. package/dist/hooks/Search/index.cjs +24 -25
  125. package/dist/hooks/Search/index.d.cts +1 -1
  126. package/dist/hooks/Search/index.d.ts +1 -1
  127. package/dist/hooks/Search/index.js +24 -25
  128. package/dist/hooks/SearchOperations/index.cjs +15 -15
  129. package/dist/hooks/SearchOperations/index.js +15 -15
  130. package/dist/hooks/SessionStorageOperations/index.cjs +2 -2
  131. package/dist/hooks/SessionStorageOperations/index.js +2 -2
  132. package/dist/hooks/ShopifyUrlOperations/index.cjs +2 -2
  133. package/dist/hooks/ShopifyUrlOperations/index.d.cts +2 -2
  134. package/dist/hooks/ShopifyUrlOperations/index.d.ts +2 -2
  135. package/dist/hooks/ShopifyUrlOperations/index.js +2 -2
  136. package/dist/hooks/SystemSettingsContext/index.cjs +5 -5
  137. package/dist/hooks/SystemSettingsContext/index.d.ts +2 -2
  138. package/dist/hooks/SystemSettingsContext/index.js +5 -5
  139. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +14 -14
  140. package/dist/hooks/TrackComponentVisibleEvent/index.js +14 -14
  141. package/dist/hooks/UpdateAnalyticsProps/index.cjs +13 -13
  142. package/dist/hooks/UpdateAnalyticsProps/index.js +13 -13
  143. package/dist/{index-DeLfV7w5.d.ts → index-BVsXKN48.d.ts} +30 -30
  144. package/dist/{index-Bq0xKgFw.d.cts → index-DUrfTeD5.d.cts} +30 -30
  145. package/dist/{localStorageContext-NRP-CdmF.cjs → localStorageContext-C5giszHn.cjs} +2 -2
  146. package/dist/{localStorageContext-BPZ82q-G.js → localStorageContext-DAOJ4be4.js} +2 -2
  147. package/dist/{logger-TBIl4uIH.cjs → logger-0D_8Ip2L.cjs} +1 -1
  148. package/dist/{logger-W3lqg-4b.js → logger-Co0IA3k5.js} +1 -1
  149. package/dist/{models-CE5YjbzE.js → models-C9_O47X4.js} +4 -4
  150. package/dist/{models-CJy0mOoW.cjs → models-DRGfA-sZ.cjs} +4 -4
  151. package/dist/{newOrgConfigContext-P4xkie1E.js → newOrgConfigContext-DsAwdL0_.js} +4 -4
  152. package/dist/{newOrgConfigContext-Dg2gtrwB.cjs → newOrgConfigContext-eP_nDi0L.cjs} +4 -4
  153. package/dist/{search-BRBqhum7.js → search-Bxfp3AFT.js} +2 -2
  154. package/dist/{search-Bpd_wxaK.cjs → search-tl23J__F.cjs} +2 -2
  155. package/dist/{searchContext-D5_iwZ0f.cjs → searchContext-C-HQBmeN.cjs} +5 -5
  156. package/dist/{searchContext-CitUyTLP.js → searchContext-CRvkE-WU.js} +5 -5
  157. package/dist/{sessionStorageContext-CLYCm83p.js → sessionStorageContext-BUXBfp0L.js} +2 -2
  158. package/dist/{sessionStorageContext-B6FsNKjj.cjs → sessionStorageContext-Da06rhJB.cjs} +2 -2
  159. package/dist/{shopifyUrlContext-D2btP_lY.js → shopifyUrlContext-DaQ9rbqf.js} +2 -2
  160. package/dist/{shopifyUrlContext-CxjV3qvH.cjs → shopifyUrlContext-oIgAbTOi.cjs} +2 -2
  161. package/dist/{systemSettingsContext-DF0jSq9m.js → systemSettingsContext-BlaM8-wy.js} +2 -2
  162. package/dist/{systemSettingsContext-dmE1v6w8.cjs → systemSettingsContext-CTVhmhcx.cjs} +2 -2
  163. package/dist/types-DWorwfS-.d.cts +1 -1
  164. package/dist/{urlsParser-DxjoLj98.js → urlsParser-DLCzibqU.js} +1 -1
  165. package/dist/{urlsParser-COzMdJaX.cjs → urlsParser-DhcEZLc_.cjs} +1 -1
  166. package/dist/{useAmplitudeOperations-DzFMBUU_.cjs → useAmplitudeOperations-DvnS1WZZ.cjs} +2 -2
  167. package/dist/{useAmplitudeOperations-Cr03Hlk6.js → useAmplitudeOperations-Z6Jguzf_.js} +2 -2
  168. package/dist/{useAppDetails-BCvirEDu.cjs → useAppDetails-BqJdML4I.cjs} +4 -4
  169. package/dist/{useAppDetails-CiBg_ni5.js → useAppDetails-DBFaMyZB.js} +4 -4
  170. package/dist/{useGraphQLConfig-8oeOwWRP.js → useGraphQLConfig-BBiJnTYh.js} +2 -2
  171. package/dist/{useGraphQLConfig-CO9lCk8b.cjs → useGraphQLConfig-CV43KcMj.cjs} +2 -2
  172. package/dist/{userIdentityContext-CrWUNCrF.cjs → userIdentityContext-BCW4iWmh.cjs} +5 -5
  173. package/dist/{userIdentityContext-BgbcZ_P2.js → userIdentityContext-BhK_ukpI.js} +5 -5
  174. package/dist/utils-C2HshI4X.d.cts +1 -1
  175. package/dist/{utils-DIvMgPe8.js → utils-C4ci_t0-.js} +1 -1
  176. package/dist/{utils-CDw74BCO.cjs → utils-C6imnLBo.cjs} +1 -1
  177. package/dist/{utils-Cv772xzd.js → utils-CmGOtSiO.js} +4 -4
  178. package/dist/{utils-BXfzt6tu.cjs → utils-oPSGYptn.cjs} +4 -4
  179. package/package.json +1 -1
  180. package/src/hooks/Search/useSearchInput.ts +0 -1
  181. /package/dist/{AmplitudeOperations-ChZWcSsc.js → AmplitudeOperations-C-ieCm9m.js} +0 -0
  182. /package/dist/{AmplitudeOperations-JggIc1zD.cjs → AmplitudeOperations-p7APchq9.cjs} +0 -0
  183. /package/dist/{amplitudeContext-BItT9HmT.js → amplitudeContext-DbicJUzl.js} +0 -0
  184. /package/dist/{amplitudeContext-DPtyVv3Q.cjs → amplitudeContext-q3mggFSE.cjs} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { PageVariantTestType } from "./types-CtUb63bt.js";
2
- import { hasPropertyOfType } from "./utils-DIvMgPe8.js";
3
- import { isApiPDPAttributes, isApiProductResponseAttributes, isApiProductSearchResponseAttributes, isApiQueryTypedAttributes, isApiResponse, isApiReviewResponseAttributes, isApiSearchAttributes, isApiSuggestionClickedAttributes, isApiTextResponseAttributes, isApiUserEvent, isSuggestion } from "./api-BWSsazAG.js";
4
- import { logger_default } from "./logger-W3lqg-4b.js";
2
+ import { logger_default } from "./logger-Co0IA3k5.js";
3
+ import { hasPropertyOfType } from "./utils-C4ci_t0-.js";
4
+ import { isApiPDPAttributes, isApiProductResponseAttributes, isApiProductSearchResponseAttributes, isApiQueryTypedAttributes, isApiResponse, isApiReviewResponseAttributes, isApiSearchAttributes, isApiSuggestionClickedAttributes, isApiTextResponseAttributes, isApiUserEvent, isSuggestion } from "./api-bHEYmSiT.js";
5
5
  import { FormType, FulfillmentDisplayStatus, OrganizationStatusEnum, PLPAttributeCategory, PageVisitCategory, ResponseCategory, UserEventCategory } from "@spiffy-ai/commerce-api-client";
6
6
 
7
7
  //#region src/application/models/chatElementDisplayLocation.ts
@@ -1283,4 +1283,4 @@ const validateUserEvent = (data) => {
1283
1283
 
1284
1284
  //#endregion
1285
1285
  export { ChatElementDisplayLocation, GoogleAnalyticsEvents, MessageRole, MessageType, OrgShortName, ProductExperiment, SpiffyEventName, SpiffyWidgets, isApiFormResponseAttributes, isApiFormSubmittedResponseAttributes, isApiOrderResponseAttributes, isApiOrgConfigResults, isApiOrganizationConfig, isApiPLPEventAttributes, isApiPLPIdAttribute, isApiPageResponseAttributes, isApiProductSearchFilterResponseAttributes, isBaseEcommerceEvent, isGA4EcommerceEvent, isGraphQLColorsConfig, isLegacyUAEcommerceEvent, isMobilePLPChatPlacementParameter, isSpanxTakeAQuizCtaParameter, isVariantInfo, stringToFulfillmentDisplayStatusEnumValue, transformCamelToSnake, transformSnakeToCamel, validateAndTransformMountingConfig, validateAndTransformPageVariants, validateAndTransformWidgetConfig, validateGraphQLColorsConfig, validateGraphQLFrontendConfig, validateGraphQLOrgId, validateMobilePLPChatPlacementParameter, validateOrgConfigResults, validateOrganizationConfig, validateResponse, validateSuggestion, validateUserEvent };
1286
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLUNFNVlqYnpFLmpzIiwibmFtZXMiOlsicmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIm5vcm1hbGl6ZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IiwicmVzdWx0OiBXaWRnZXRNb3VudGluZ0NvbmZpZyIsInZhbGlkYXRlZFBhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSIsIm1vdW50aW5nQ29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+Iiwid2lkZ2V0Q29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ldmVudHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2dvb2dsZUFuYWx5dGljc0V2ZW50cy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvbWVzc2FnZS50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvb3Jnc0VudW0udHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9zcGlmZnlXaWRnZXRzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNCYXNlRWNvbW1lcmNlRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0dBNEVjb21tZXJjZUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlci50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzVmFyaWFudEluZm8udHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlGb3JtUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlPcmdhbml6YXRpb25Db25maWcudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlPcmdDb25maWdSZXN1bHRzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVBMUEV2ZW50QXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVByb2R1Y3RTZWFyY2hGaWx0ZXJBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvZ3JhcGhRTC9pc0dyYXBoUUxDb2xvcnNDb25maWcudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZS50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxDb2xvcnNDb25maWcudHMiLCIuLi9zcmMvbWVyY2hhbnRzL2RvbUluc2VydGlvbi50cyIsIi4uL3NyYy9tZXJjaGFudHMvZ3JpZEluc2VydGlvbi50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxPcmdJZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdhbml6YXRpb25Db25maWcudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVTdWdnZXN0aW9uLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlVXNlckV2ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENoYXQgZWxlbWVudCBkaXNwbGF5IGxvY2F0aW9uIGVudW1cbmV4cG9ydCBlbnVtIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uIHtcbiAgSU5fQ0hBVCA9ICdpbl9jaGF0JyxcbiAgQ0hBVF9QUkVWSUVXID0gJ2NoYXRfcHJldmlldycsXG4gIEZMT0FUSU5HX0JVVFRPTiA9ICdmbG9hdGluZ19idXR0b24nLFxuICBIRUxQX01FX0NIT09TRSA9ICdoZWxwX21lX2Nob29zZScsXG4gIFBMUF9JTUFHRV9CQU5ORVIgPSAncGxwX2ltYWdlX2Jhbm5lcicsXG4gIFRPUF9SRVZJRVdTX1NOSVBQRVQgPSAndG9wX3Jldmlld3Nfc25pcHBldCcsXG4gIEJPVFRPTV9SRVZJRVdTX1NOSVBQRVQgPSAnYm90dG9tX3Jldmlld3Nfc25pcHBldCcsXG4gIEJMT0NLX0JBQ0tfQlVUVE9OID0gJ2Jsb2NrX2JhY2tfYnV0dG9uJyxcbiAgU1dJVENIX1RPX0FHRU5UID0gJ3N3aXRjaF90b19hZ2VudCcsXG4gIENPTlZFUlNBVElPTkFMX1NFQVJDSCA9ICdjb252ZXJzYXRpb25hbF9zZWFyY2gnLFxuICBHTE9CQUxfU0VBUkNIX0VOVFJZUE9JTlQgPSAnZ2xvYmFsX3NlYXJjaF9lbnRyeXBvaW50JyxcbiAgU0VBUkNIX05BVl9FTlRSWVBPSU5UID0gJ3NlYXJjaF9uYXZfZW50cnlwb2ludCcsXG4gIFNFQVJDSF9QUk9NUFQgPSAnc2VhcmNoX3Byb21wdCcsXG4gIFNFQVJDSF9aRVJPX1NUQVRFX1NVR0dFU1RFRF9QUk9EVUNUUyA9ICdzZWFyY2hfemVyb19zdGF0ZV9zdWdnZXN0ZWRfcHJvZHVjdHMnLFxuICBTRUFSQ0hfUFJPTVBUX0JVVFRPTiA9ICdzZWFyY2hfcHJvbXB0X2J1dHRvbicsXG4gIFBST0RVQ1RfR1JJRCA9ICdwcm9kdWN0X2dyaWQnLFxuICBVTlNQRUNJRklFRCA9ICd1bnNwZWNpZmllZCcsXG4gIEZJTFRFUl9NT0RBTCA9ICdmaWx0ZXJfbW9kYWwnLFxuICBQUk9NUFRfQ0FSRCA9ICdwcm9tcHRfY2FyZCcsXG4gIFdJTkRPV19BUElfQ0FMTCA9ICd3aW5kb3dfYXBpX2NhbGwnLFxufVxuIiwiLy8gbmFtZXMgb2YgU3BpZmZ5IHNwZWNpZmljIEhUTUwgZXZlbnRzXG5leHBvcnQgZW51bSBTcGlmZnlFdmVudE5hbWUge1xuICBXaWRnZXRPcGVuID0gJ3NwaWZmeTp3aWRnZXRvcGVuJyxcbiAgV2lkZ2V0Q2xvc2UgPSAnc3BpZmZ5OndpZGdldGNsb3NlJyxcbn1cbiIsImVudW0gR29vZ2xlQW5hbHl0aWNzRXZlbnRzIHtcbiAgQUREX1RPX0NBUlRfdjEgPSAnYWRkX3RvX2NhcnQnLFxuICBBRERfVE9fQ0FSVF92MiA9ICdhZGRUb0NhcnQnLFxufVxuXG5leHBvcnQge1xuICBHb29nbGVBbmFseXRpY3NFdmVudHNcbn0iLCJpbXBvcnQgeyBDdXN0U2VydmljZUF0dGFjaG1lbnQsIEZvcm1UeXBlIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7XG4gIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLFxuICBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzLFxuICBSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMsXG4gIFBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMsXG4gIFRleHRSZXNwb25zZUF0dHJpYnV0ZXMsXG4gIFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyxcbiAgU2VhcmNoUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyxcbiAgQWNjZXB0YWJsZUZvcm1GaWVsZFR5cGUsXG4gIFNlYXJjaFByb2R1Y3RGaWx0ZXJBdHRyaWJ1dGVzLFxufSBmcm9tICcuL2FwaS9yZXNwb25zZSc7XG5cbmV4cG9ydCBlbnVtIE1lc3NhZ2VSb2xlIHtcbiAgVXNlciA9ICd1c2VyJyxcbiAgQXNzaXN0YW50ID0gJ2Fzc2lzdGFudCcsXG59XG5cbmV4cG9ydCBlbnVtIE1lc3NhZ2VUeXBlIHtcbiAgVGV4dCA9ICd0ZXh0JyxcbiAgU3VnZ2VzdGlvbkNsaWNrZWQgPSAnc3VnZ2VzdGlvbl9jbGlja2VkJyxcbiAgUHJvZHVjdCA9ICdwcm9kdWN0JyxcbiAgUHJvZHVjdFNlYXJjaCA9ICdwcm9kdWN0X3NlYXJjaCcsXG4gIFJldmlldyA9ICdyZXZpZXcnLFxuICBRdWVyeVR5cGVkID0gJ3F1ZXJ5X3R5cGVkJyxcbiAgU2VwYXJhdG9yID0gJ3NlcGFyYXRvcicsXG4gIFBhZ2UgPSAncGFnZScsXG4gIFNlYXJjaCA9ICdzZWFyY2gnLFxuICBBdHRhY2htZW50ID0gJ2F0dGFjaG1lbnQnLFxuICBDWEFnZW50UmVzcG9uc2UgPSAnY3hfYWdlbnRfcmVzcG9uc2UnLFxuICBGb3JtID0gJ2Zvcm0nLFxuICBPcmRlciA9ICdvcmRlcicsXG4gIFByb2R1Y3RTZWFyY2hGaWx0ZXIgPSAncHJvZHVjdF9zZWFyY2hfZmlsdGVyJyxcbn1cblxuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcm9sZTogTWVzc2FnZVJvbGU7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xufSAmIChcbiAgfCBUZXh0TWVzc2FnZU1ldGFkYXRhXG4gIHwgUXVlcnlUeXBlZE1ldGFkYXRhXG4gIHwgU3VnZ2VzdGlvbk1lc3NhZ2VNZXRhZGF0YVxuICB8IFByb2R1Y3RNZXNzYWdlTWV0YWRhdGFcbiAgfCBQcm9kdWN0U2VhcmNoTWVzc2FnZU1ldGFkYXRhXG4gIHwgUmV2aWV3TWVzc2FnZU1ldGFkYXRhXG4gIHwgU2VwYXJhdG9yTWVzc2FnZU1ldGFkYXRhXG4gIHwgUGFnZU1lc3NhZ2VNZXRhZGF0YVxuICB8IFNlYXJjaE1lc3NhZ2VNZXRhZGF0YVxuICB8IEF0dGFjaG1lbnRNZXRhZGF0YVxuICB8IENYQWdlbnRSZXNwb25zZU1ldGFkYXRhXG4gIHwgRm9ybU1lc3NhZ2VNZXRhZGF0YVxuICB8IE9yZGVyTWVzc2FnZU1ldGFkYXRhXG4gIHwgUHJvZHVjdFNlYXJjaEZpbHRlck1ldGFkYXRhXG4pO1xuXG50eXBlIEF0dGFjaG1lbnRNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuQXR0YWNobWVudDtcbiAgbWV0YWRhdGE6IHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGF0dGFjaG1lbnQ6IEN1c3RTZXJ2aWNlQXR0YWNobWVudFtdO1xuICB9O1xufTtcblxudHlwZSBDWEFnZW50UmVzcG9uc2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuQ1hBZ2VudFJlc3BvbnNlO1xuICBtZXRhZGF0YToge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBhZ2VudE5hbWU6IHN0cmluZztcbiAgfTtcbn07XG5cbnR5cGUgVGV4dE1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dDtcbiAgbWV0YWRhdGE6IFRleHRSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5cbnR5cGUgUXVlcnlUeXBlZE1ldGFkYXRhID0ge1xuICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkO1xuICBtZXRhZGF0YTogVGV4dFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcblxudHlwZSBTdWdnZXN0aW9uTWVzc2FnZU1ldGFkYXRhID0ge1xuICB0eXBlOiBNZXNzYWdlVHlwZS5TdWdnZXN0aW9uQ2xpY2tlZDtcbiAgbWV0YWRhdGE6IHtcbiAgICBzdWdnZXN0aW9uSWQ6IHN0cmluZztcbiAgICBzdWdnZXN0aW9uQ29udGVudDogc3RyaW5nO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZHVjdE1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdDtcbiAgbWV0YWRhdGE6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGEgPSB7XG4gIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2g7XG4gIG1ldGFkYXRhOiBTZWFyY2hQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xuXG50eXBlIFJldmlld01lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuUmV2aWV3O1xuICBtZXRhZGF0YTogUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xuXG50eXBlIFNlcGFyYXRvck1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuU2VwYXJhdG9yO1xufTtcblxudHlwZSBQYWdlTWVzc2FnZU1ldGFkYXRhID0ge1xuICB0eXBlOiBNZXNzYWdlVHlwZS5QYWdlO1xuICBtZXRhZGF0YTogUGFnZVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcblxudHlwZSBTZWFyY2hNZXNzYWdlTWV0YWRhdGEgPSB7XG4gIHR5cGU6IE1lc3NhZ2VUeXBlLlNlYXJjaDtcbiAgbWV0YWRhdGE6IFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcblxudHlwZSBQcm9kdWN0U2VhcmNoRmlsdGVyTWV0YWRhdGEgPSB7XG4gIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hGaWx0ZXI7XG4gIG1ldGFkYXRhOiBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUZpZWxkID0ge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogQWNjZXB0YWJsZUZvcm1GaWVsZFR5cGU7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICAvLyB0aGlzIGlzIHRoZSBvbmx5IGZvcm1hdCB3ZSBjdXJyZW50bHkgc3VwcG9ydFxuICBmb3JtYXQ/OiAnZW1haWwnO1xuICB2YWx1ZT86IHN0cmluZztcbn07XG5cbnR5cGUgRm9ybU1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuRm9ybTtcbiAgbWV0YWRhdGE6IHtcbiAgICBmb3JtVHlwZT86IEZvcm1UeXBlO1xuICAgIGZpZWxkczogRm9ybUZpZWxkW107XG4gIH07XG59O1xuXG50eXBlIE9yZGVyTWVzc2FnZU1ldGFkYXRhID0ge1xuICB0eXBlOiBNZXNzYWdlVHlwZS5PcmRlcjtcbiAgbWV0YWRhdGE6IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xuIiwiZXhwb3J0IGNvbnN0IE9yZ1Nob3J0TmFtZSA9IHtcbiAgQ290ZXJpZTogJ2NvdGVyaWUnLFxuICBGb3JMb3ZlQW5kTGVtb25zOiAnZm9yLWxvdmUtYW5kLWxlbW9ucycsXG4gIEdyZWVucGFuOiAnZ3JlZW5wYW4nLFxuICBKb3JkYW5DcmFpZzogJ2pvcmRhbi1jcmFpZycsXG4gIExhcnJ5QW5kU2VyZ2VzOiAnbGFycnlfYW5kX3NlcmdlcycsXG4gIExlYXBzQW5kUmVib3VuZHM6ICdsZWFwcy1hbmQtcmVib3VuZHMnLFxuICBNYW50cmFCcmFuZDogJ21hbnRyYS1icmFuZCcsXG4gIFNwYW54OiAnc3BhbngnLFxuICBTcGFueFN0YWdpbmc6ICdzdGFnaW5nLXNwYW54JyxcbiAgU3VwZXJnb29wOiAnc3VwZXJnb29wJyxcbiAgVW5pcXVlVmludGFnZTogJ3VuaXF1ZS12aW50YWdlJyxcbiAgSmFja0FyY2hlcjogJ2phY2stYXJjaGVyJyxcbiAgLyogLS0gQmVsb3cgaXRlbXMgYXJlIGdlbmVyYXRlZCBieSBwbG9wIC0tICovXG4gIFNraW5QZXJmZWN0aW9uOiAnc2tpbi1wZXJmZWN0aW9uJyxcbiAgTG9va09wdGljOiAnbG9vay1vcHRpYycsXG4gIEZpdmVDYmQ6ICdmaXZlLWNiZCcsXG4gIFNuYXBTdXBwbGVtZW50czogJ3NuYXAtc3VwcGxlbWVudHMnLFxuICBMb25nZXZpdHlyeDogJ2xvbmdldml0eXJ4JyxcbiAgVmVuYUNiZDogJ3ZlbmEtY2JkJyxcbiAgTWVkdGVycmE6ICdtZWR0ZXJyYScsXG4gIE1vZGVsbHM6ICdtb2RlbGxzJyxcbiAgUHJlc3NlZEZsb3JhbDogJ3ByZXNzZWQtZmxvcmFsJyxcbiAgS2luZHJlZEJyYXZlbHk6ICdraW5kcmVkLWJyYXZlbHknLFxuICBXaW5lRW50aHVzaWFzdDogJ3dpbmUtZW50aHVzaWFzdCcsXG4gIEhvbWVncm93bkNhbm5hYmlzOiAnaG9tZWdyb3duLWNhbm5hYmlzJyxcbiAgRHJlYW1sYW5kQmFieTogJ2RyZWFtbGFuZC1iYWJ5JyxcbiAgQmFuZG9saWVyOiAnYmFuZG9saWVyJyxcbiAgV2VzdG9uSm9uQm91Y2hlcjogJ3dlc3Rvbi1qb24tYm91Y2hlcicsXG4gIEt1dEZyb21UaGVLbG90aDogJ2t1dC1mcm9tLXRoZS1rbG90aCcsXG4gIEdyb292ZUxpZmU6ICdncm9vdmUtbGlmZScsXG4gIENhcnBlOiAnY2FycGUnLFxuICBXb2xmVGFjdGljYWw6ICd3b2xmLXRhY3RpY2FsJyxcbiAgV29sZk1hdHRyZXNzOiAnd29sZm1hdHRyZXNzJyxcbiAgRGVmYXVsdDogJ2RlZmF1bHQnLFxufSBhcyBjb25zdDtcbiIsImV4cG9ydCBlbnVtIFByb2R1Y3RFeHBlcmltZW50IHtcbiAgLy8gRGVmYXVsdCBpcyBvbmx5IHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGVudW0gaXMgbm9uLWVtcHR5LCBvdGhlcndpc2VcbiAgLy8gY2FsbGVycyB0aGF0IHRyeSB0byB1c2UgdGhpcyBlbnVtIHdpbGwgZ2VuZXJhdGUgYSB0eXBlc2NyaXB0IGVycm9yXG4gIERlZmF1bHQgPSAnZGVmYXVsdCcsXG59XG4iLCIvKipcbiAqIEVudW0gb2YgYWxsIHdpZGdldCBuYW1lcy4gVGhlc2UgYXJlIHdpZGdldHMgdGhhdCBhcmUgcmVuZGVyZWQgYW5kIGludGVncmF0ZWQgaW50b1xuICogYSBtZXJjaGFudCdzIHdlYnNpdGUuXG4gKi9cbmV4cG9ydCBlbnVtIFNwaWZmeVdpZGdldHMge1xuICBJbWFnZUJhbm5lciA9ICdpbWFnZV9iYW5uZXInLFxuICBJbWFnZVByb21wdENhcmQgPSAnaW1hZ2VfcHJvbXB0X2NhcmQnLFxuICBTaW5nbGVJbWFnZVByb21wdCA9ICdzaW5nbGVfaW1hZ2VfcHJvbXB0JyxcbiAgRW1iZWRkZWRXaWRnZXQgPSAnZW1iZWRkZWRfd2lkZ2V0JyxcbiAgRmxvYXRpbmdCdXR0b24gPSAnZmxvYXRpbmdfYnV0dG9uJyxcbiAgU3VnZ2VzdGlvbkJhciA9ICdzdWdnZXN0aW9uX2JhcicsXG4gIFNlYXJjaFByb21wdCA9ICdzZWFyY2hfcHJvbXB0JyxcbiAgR2xvYmFsU2VhcmNoID0gJ2dsb2JhbF9zZWFyY2gnLFxuICBTZWFyY2hSZXN1bHRzID0gJ3NlYXJjaF9yZXN1bHRzJyxcbiAgR2xvYmFsU2VhcmNoRW50cnlQb2ludCA9ICdnbG9iYWxfc2VhcmNoX2VudHJ5X3BvaW50JyxcbiAgU2VhcmNoWmVyb1N0YXRlID0gJ3NlYXJjaF96ZXJvX3N0YXRlJyxcblxufVxuIiwiaW1wb3J0IHR5cGUgeyBCYXNlRWNvbW1lcmNlRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgYSBiYXNlIEdvb2dsZSBBbmFseXRpY3MgZWNvbW1lcmNlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBldmVudCB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBpcyBhIGJhc2UgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Jhc2VFY29tbWVyY2VFdmVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBCYXNlRWNvbW1lcmNlRXZlbnQgPT5cbiAgZGF0YSAhPSBudWxsICYmXG4gIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAnZWNvbW1lcmNlJyBpbiBkYXRhICYmXG4gIGRhdGEuZWNvbW1lcmNlICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEuZWNvbW1lcmNlID09PSAnb2JqZWN0JyAmJlxuICAnZXZlbnQnIGluIGRhdGEgJiZcbiAgdHlwZW9mIGRhdGEuZXZlbnQgPT09ICdzdHJpbmcnO1xuIiwiaW1wb3J0IHR5cGUgeyBHQTRFY29tbWVyY2VFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIEdvb2dsZSBBbmFseXRpY3MgNCBlY29tbWVyY2UgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIGV2ZW50IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGEgR0E0IGVjb21tZXJjZSBldmVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgaXNHQTRFY29tbWVyY2VFdmVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBHQTRFY29tbWVyY2VFdmVudCA9PlxuICB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgZGF0YSAhPSBudWxsICYmXG4gICdlY29tbWVyY2UnIGluIGRhdGEgJiZcbiAgZGF0YS5lY29tbWVyY2UgIT0gbnVsbCAmJlxuICB0eXBlb2YgZGF0YS5lY29tbWVyY2UgPT09ICdvYmplY3QnICYmXG4gICdpdGVtcycgaW4gZGF0YS5lY29tbWVyY2UgJiZcbiAgQXJyYXkuaXNBcnJheShkYXRhLmVjb21tZXJjZS5pdGVtcyk7XG4iLCJpbXBvcnQgdHlwZSB7IFVBRWNvbW1lcmNlRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgYSBsZWdhY3kgVW5pdmVyc2FsIEFuYWx5dGljcyBlY29tbWVyY2UgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIGV2ZW50IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGEgbGVnYWN5IFVBIGVjb21tZXJjZSBldmVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50ID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFVBRWNvbW1lcmNlRXZlbnQgPT5cbiAgZGF0YSAhPSBudWxsICYmXG4gIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAnZWNvbW1lcmNlJyBpbiBkYXRhICYmXG4gIGRhdGEuZWNvbW1lcmNlICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEuZWNvbW1lcmNlID09PSAnb2JqZWN0JyAmJlxuICAnYWRkJyBpbiBkYXRhLmVjb21tZXJjZSAmJlxuICB0eXBlb2YgZGF0YS5lY29tbWVyY2UuYWRkID09PSAnb2JqZWN0JztcbiIsImludGVyZmFjZSBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIHtcbiAgcm93X2luZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgPSAoXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdmFsdWUgaXMgTW9iaWxlUGxwQ2hhdFBsYWNlbWVudFBhcmFtZXRlciA9PlxuICB2YWx1ZSAhPSBudWxsICYmXG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgJ3Jvd19pbmRleCcgaW4gdmFsdWUgJiZcbiAgdHlwZW9mIHZhbHVlLnJvd19pbmRleCA9PT0gJ251bWJlcic7XG4iLCJpbXBvcnQgeyBTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlciB9IGZyb20gJy4uL3NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyJztcblxuZXhwb3J0IGNvbnN0IGlzU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXIgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlciA9PlxuICB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3RleHQnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50ZXh0ID09PSAnc3RyaW5nJzsiLCJpbXBvcnQgeyBQYWdlVmlzaXRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBQRFBWYXJpYW50SW5mbywgUExQVmFyaWFudEluZm8sIFBhZ2VWaXNpdFZhcmlhbnRJbmZvLCBWYXJpYW50SW5mbyB9IGZyb20gJy4uL3ZhcmlhbnRJbmZvJztcblxuY29uc3QgaXNQRFBWYXJpYW50SW5mbyA9ICh2YXJpYW50SW5mbzogb2JqZWN0KTogdmFyaWFudEluZm8gaXMgUERQVmFyaWFudEluZm8gPT5cbiAgJ3ZhcmlhbnQnIGluIHZhcmlhbnRJbmZvICYmXG4gIHZhcmlhbnRJbmZvLnZhcmlhbnQgPT09ICdwZHAnICYmXG4gICdwcm9kdWN0SWQnIGluIHZhcmlhbnRJbmZvICYmXG4gIHR5cGVvZiB2YXJpYW50SW5mby5wcm9kdWN0SWQgPT09ICdzdHJpbmcnO1xuXG5jb25zdCBpc1BMUFZhcmlhbnRJbmZvID0gKHZhcmlhbnRJbmZvOiBvYmplY3QpOiB2YXJpYW50SW5mbyBpcyBQTFBWYXJpYW50SW5mbyA9PlxuICAndmFyaWFudCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdmFyaWFudEluZm8udmFyaWFudCA9PT0gJ3BscCcgJiZcbiAgJ3BscElkJyBpbiB2YXJpYW50SW5mbyAmJlxuICB0eXBlb2YgdmFyaWFudEluZm8ucGxwSWQgPT09ICdzdHJpbmcnO1xuXG5jb25zdCBpc1BhZ2VWaXNpdFZhcmlhbnRJbmZvID0gKHZhcmlhbnRJbmZvOiBvYmplY3QpOiB2YXJpYW50SW5mbyBpcyBQYWdlVmlzaXRWYXJpYW50SW5mbyA9PlxuICAndmFyaWFudCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdmFyaWFudEluZm8udmFyaWFudCA9PT0gJ3BhZ2VfdmlzaXQnICYmXG4gICd1cmwnIGluIHZhcmlhbnRJbmZvICYmXG4gIHR5cGVvZiB2YXJpYW50SW5mby51cmwgPT09ICdzdHJpbmcnICYmXG4gICdwYWdlVmlzaXRDYXRlZ29yeScgaW4gdmFyaWFudEluZm8gJiZcbiAgT2JqZWN0LnZhbHVlcyhQYWdlVmlzaXRDYXRlZ29yeSkuaW5jbHVkZXModmFyaWFudEluZm8ucGFnZVZpc2l0Q2F0ZWdvcnkgYXMgUGFnZVZpc2l0Q2F0ZWdvcnkpO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgVmFyaWFudEluZm8uXG4gKlxuICogQHBhcmFtIHZhcmlhbnRJbmZvIC0gVGhlIHVua25vd24gb2JqZWN0IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGEgaXMgYSB2YWxpZCBWYXJpYW50SW5mbyBvYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVmFyaWFudEluZm8gPSAodmFyaWFudEluZm86IHVua25vd24pOiB2YXJpYW50SW5mbyBpcyBWYXJpYW50SW5mbyA9PlxuICB2YXJpYW50SW5mbyAhPSBudWxsICYmXG4gIHR5cGVvZiB2YXJpYW50SW5mbyA9PT0gJ29iamVjdCcgJiZcbiAgJ3ZhcmlhbnRJZCcgaW4gdmFyaWFudEluZm8gJiZcbiAgKGlzUERQVmFyaWFudEluZm8odmFyaWFudEluZm8pIHx8XG4gICAgaXNQTFBWYXJpYW50SW5mbyh2YXJpYW50SW5mbykgfHxcbiAgICBpc1BhZ2VWaXNpdFZhcmlhbnRJbmZvKHZhcmlhbnRJbmZvKSk7XG4iLCJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBGb3JtVHlwZSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0eU9mVHlwZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzJztcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIHRoZSBwcm92aWRlZCBkYXRhIGhhcyB0aGUgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzICh3aXRoIHRoZSBjb3JyZWN0IHR5cGVzKSBvZlxuICogYSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVcbiAqXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0YSBoYXMgdGhlIGNvcnJlY3QgcHJvcGVydGllcywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXMgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IGRhdGEgaXMgbnVsbCBvciBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnZm9ybV9jYXRlZ29yeScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5mb3JtX2NhdGVnb3J5ICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzOiBmb3JtX2NhdGVnb3J5IGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdmb3JtX2NhdGVnb3J5JyBpbiBkYXRhICYmIHR5cGVvZiBkYXRhLmZvcm1fY2F0ZWdvcnkgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKFxuICAgICAgIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEuZm9ybV9jYXRlZ29yeSwgJ2Zvcm1fdHlwZScsICdzdHJpbmcnKSB8fFxuICAgICAgIU9iamVjdC52YWx1ZXMoRm9ybVR5cGUpLmluY2x1ZGVzKGRhdGEuZm9ybV9jYXRlZ29yeS5mb3JtX3R5cGUgYXMgRm9ybVR5cGUpXG4gICAgKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAgICdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IGZvcm1fdHlwZSBpcyBtaXNzaW5nIG9yIG5vdCBhIHZhbGlkIGZvcm0gdHlwZScsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ3NjaGVtYScsICdvYmplY3QnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzOiBzY2hlbWEgaXMgbWlzc2luZyBvciBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRPRE86IGFsc28gd2FubmEgdmFsaWRhdGUgdGhlIGZpZWxkcyBvZiBkYXRhLnNjaGVtYS5wcm9wZXJ0aWVzIGJ1dCBtaWdodCB3YW5uYSBjaGFuZ2UgdGhlIHNjaGVtYVxuICAvLyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgbmFtZSBhcyBhIGtleSBpbiB0aGUgb2JqZWN0XG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YS5zY2hlbWEsICdwcm9wZXJ0aWVzJywgJ29iamVjdCcpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogc2NoZW1hLnByb3BlcnRpZXMgaXMgbWlzc2luZyBvciBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEuc2NoZW1hLCAncmVxdWlyZWQnLCAnYXJyYXknKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IHNjaGVtYS5yZXF1aXJlZCBpcyBtaXNzaW5nIG9yIG5vdCBhbiBhcnJheScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IGRhdGEgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhZGF0YS5zY2hlbWEucmVxdWlyZWQuZXZlcnkoXG4gICAgICAoa2V5OiB1bmtub3duKSA9PiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkgaW4gZGF0YS5zY2hlbWEucHJvcGVydGllcyxcbiAgICApXG4gICkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IHNjaGVtYS5yZXF1aXJlZCBjb250YWlucyBpbnZhbGlkIHByb3BlcnR5IGtleXMnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzLCBGb3JtVHlwZSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0eU9mVHlwZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGlzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcyA9IChcbiAgZGF0YTogdW5rbm93bixcbik6IGRhdGEgaXMgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzJywgJ2RhdGEgaXMgbnVsbCBvciBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnZmlsbGVkX3NjaGVtYScsICdvYmplY3QnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzJywgJ2ZpbGxlZF9zY2hlbWEgaXMgbm90IGFuIG9iamVjdCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2Zvcm1fcmVzcG9uc2VfaWQnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzJyxcbiAgICAgICdmb3JtX3Jlc3BvbnNlX2lkIGlzIG5vdCBhIHN0cmluZycsXG4gICAgICBkYXRhLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2Zvcm1fdHlwZScgaW4gZGF0YSkgfHwgIU9iamVjdC52YWx1ZXMoRm9ybVR5cGUpLmluY2x1ZGVzKGRhdGEuZm9ybV90eXBlIGFzIEZvcm1UeXBlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMnLFxuICAgICAgJ2Zvcm1fdHlwZSBpcyBub3QgYSB2YWxpZCBmb3JtIHR5cGUgZW51bScsXG4gICAgICBkYXRhLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgT3JkZXJJdGVtSW5mbywgT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgaGFzUHJvcGVydHlPZlR5cGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy91dGlscyc7XG5cbi8vIHRoZSBjbGllbnQgU0RLIGdlbmVyYXRlcyBkYXRlLXRpbWUgZm9ybWF0IHR5cGVzIGFzIGBEYXRlYCBidXQgdGhlIG9wZW5hcGkgdHlwZXNjcmlwdCBnZW5lcmF0b3Jcbi8vIGRvZXMgbm90IGNvcnJlY3RseSBkZXNlcmlhbGl6ZSBkYXRlLXRpbWUgdmFsdWVzIHNvIHRoZXkgYXJlIGFsd2F5cyBgc3RyaW5nYCBhdCBydW50aW1lIGluc3RlYWQgb2Zcbi8vIGBEYXRlYCBvYmplY3RzLiBUaGVzZSBpbnRlcmZhY2VzIG92ZXJyaWRlIHRoZSBTREsgdHlwZXMgc28gdGhhdCB3ZSBjYW4gdmFsaWRhdGUgYWdhaW5zdCB0aGUgYWN0dWFsXG4vLyBgc3RyaW5nYCB2YWx1ZXMuIGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuQVBJVG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IvaXNzdWVzLzkyNlxuZXhwb3J0IGludGVyZmFjZSBBcGlPcmRlckl0ZW1JbmZvXG4gIGV4dGVuZHMgT21pdDxPcmRlckl0ZW1JbmZvLCAnZGVsaXZlcmVkX2F0JyB8ICdlc3RpbWF0ZWRfZGVsaXZlcnlfYXQnIHwgJ2luX3RyYW5zaXRfYXQnPiB7XG4gIGRlbGl2ZXJlZF9hdD86IHN0cmluZztcbiAgZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0Pzogc3RyaW5nO1xuICBpbl90cmFuc2l0X2F0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzXG4gIGV4dGVuZHMgT21pdDxPcmRlclJlc3BvbnNlQXR0cmlidXRlcywgJ2NyZWF0ZWRfYXQnIHwgJ2xhdGVzdF9ldmVudF9kYXRlJyB8ICdsaW5lX2l0ZW1zJz4ge1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gIGxhdGVzdF9ldmVudF9kYXRlOiBzdHJpbmc7XG4gIGxpbmVfaXRlbXM6IEFwaU9yZGVySXRlbUluZm9bXTtcbn1cblxuY29uc3QgaXNBcGlPcmRlckl0ZW1JbmZvID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZGVySXRlbUluZm8gPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGJlIGFuIG9iamVjdCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ29yZGVyX2l0ZW1faWQnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIG9yZGVyX2l0ZW1faWQgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpdGVtX3RpdGxlJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvIG11c3QgaGF2ZSBhbiBpdGVtX3RpdGxlIHByb3BlcnR5JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnaXRlbV9wcmljZScsICdudW1iZXInKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGhhdmUgYW4gaXRlbV9wcmljZSBwcm9wZXJ0eScsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2l0ZW1fcXVhbnRpdHknLCAnbnVtYmVyJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIGl0ZW1fcXVhbnRpdHkgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpbWFnZScsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby5pbWFnZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdmdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1cycsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdPcmRlckl0ZW1JbmZvLmZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAndHJhY2tpbmdfdXJsJywgJ3N0cmluZycsIHRydWUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvLnRyYWNraW5nX3VybCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdkZWxpdmVyZWRfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uZGVsaXZlcmVkX2F0IG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2VzdGltYXRlZF9kZWxpdmVyeV9hdCcsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby5lc3RpbWF0ZWRfZGVsaXZlcnlfYXQgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2luX3RyYW5zaXRfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uaW5fdHJhbnNpdF9hdCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBiZSBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdjcmVhdGVkX2F0JywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgY3JlYXRlZF9hdCBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnbGF0ZXN0X2V2ZW50X2RhdGUnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYSBsYXRlc3RfZXZlbnRfZGF0ZSBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnbGluZV9pdGVtcycsICdhcnJheScpIHx8XG4gICAgIWRhdGEubGluZV9pdGVtcy5ldmVyeSgoaXRlbTogdW5rbm93bikgPT4gaXNBcGlPcmRlckl0ZW1JbmZvKGl0ZW0pKVxuICApIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYSBsaW5lX2l0ZW1zIHByb3BlcnR5IHdpdGggYXQgbGVhc3Qgb25lIG9yZGVyIGl0ZW0nLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ29yZGVyX2lkJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGFuIG9yZGVyX2lkIHByb3BlcnR5IGFuZCBoYXZlIHR5cGUgc3RyaW5nJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdvcmRlcl9udW1iZXInLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYW4gb3JkZXJfbnVtYmVyIHByb3BlcnR5IGFuZCBoYXZlIHR5cGUgc3RyaW5nJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG4vLyB0aGUgXCJjb25maWdcIiBwcm9wZXJ0eSBpcyBhIGdlbmVyaWMgb2JqZWN0IGluIHRoZSBjb21tZXJjZSBhcGkgc3BlYywgdGhlc2UgaW50ZXJmYWNlc1xuLy8gYXJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHN0cnVjdHVyZSBvZiB0aGF0IG9iamVjdCBhbmQgdG8gdHJhbnNmb3JtIHRoZSBhcGkgcmVzcG9uc2Vcbi8vIGludG8gYSB0eXBlZCBvYmplY3QgZm9yIHRoZSBmcm9udGVuZC4gRG8gbm90IHVzZSB0aGVzZSBpbnRlcmZhY2VzIGZvciBhbnl0aGluZyBlbHNlLlxuaW50ZXJmYWNlIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZSB7XG4gIHNlc3Npb25fcmVwbGF5X2VuYWJsZWQ6IGJvb2xlYW47XG4gIHNlc3Npb25fcmVwbGF5X3NhbXBsZV9yYXRlOiBudW1iZXI7XG4gIHRyYWNraW5nX2VuYWJsZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBcGlPcmdBbmFseXRpY3NDb25maWdDdXN0b21lclNlcnZpY2Uge1xuICBwcm92aWRlcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzIHtcbiAgbWVhc3VyZW1lbnRfaWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFwaU9yZ0FuYWx5dGljc0NvbmZpZyB7XG4gIGFtcGxpdHVkZT86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTtcbiAgY3VzdG9tZXJfc2VydmljZT86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZTtcbiAgZ29vZ2xlX2FuYWx5dGljcz86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0dvb2dsZUFuYWx5dGljcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlPcmdhbml6YXRpb25Db25maWcgZXh0ZW5kcyBPcmdhbml6YXRpb25Db25maWcge1xuICBjb25maWc6IEFwaU9yZ0FuYWx5dGljc0NvbmZpZztcbn1cblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGUgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZSA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3Nlc3Npb25fcmVwbGF5X2VuYWJsZWQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLnNlc3Npb25fcmVwbGF5X2VuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogc2Vzc2lvbl9yZXBsYXlfZW5hYmxlZCBpcyBub3QgYSBib29sZWFuJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgISgnc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUnIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUgIT09ICdudW1iZXInXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUgaXMgbm90IGEgbnVtYmVyJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgndHJhY2tpbmdfZW5hYmxlZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEudHJhY2tpbmdfZW5hYmxlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQW1wbGl0dWRlOiB0cmFja2luZ19lbmFibGVkIGlzIG5vdCBhIGJvb2xlYW4nLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdDdXN0b21lclNlcnZpY2UgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZSA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdwcm92aWRlcicgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEucHJvdmlkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlOiBwcm92aWRlciBpcyBub3QgYSBzdHJpbmcnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3MgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0dvb2dsZUFuYWx5dGljcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdtZWFzdXJlbWVudF9pZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEubWVhc3VyZW1lbnRfaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzOiBtZWFzdXJlbWVudF9pZCBpcyBub3QgYSBzdHJpbmcnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdhbXBsaXR1ZGUnIGluIGRhdGEgJiZcbiAgICAhaXNBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGUoZGF0YS5hbXBsaXR1ZGUpXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNPcmdBbmFseXRpY3NDb25maWc6IGFtcGxpdHVkZSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdjdXN0b21lcl9zZXJ2aWNlJyBpbiBkYXRhICYmXG4gICAgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlKGRhdGEuY3VzdG9tZXJfc2VydmljZSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogY3VzdG9tZXJfc2VydmljZSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdnb29nbGVfYW5hbHl0aWNzJyBpbiBkYXRhICYmXG4gICAgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzKGRhdGEuZ29vZ2xlX2FuYWx5dGljcylcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogZ29vZ2xlX2FuYWx5dGljcyBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ2FuaXphdGlvbkNvbmZpZyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2NyZWF0ZWRfYXQnIGluIGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogY3JlYXRlZF9hdCBpcyBub3QgZGVmaW5lZCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCduYW1lc3BhY2UnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLm5hbWVzcGFjZSAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzT3JnQ29uZmlnOiBuYW1lc3BhY2UgaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2lzX2xhdGVzdCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuaXNfbGF0ZXN0ICE9PSAnYm9vbGVhbicpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzT3JnQ29uZmlnOiBpc19sYXRlc3QgaXMgbm90IGEgYm9vbGVhbicsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCd2ZXJzaW9uJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS52ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNPcmdDb25maWc6IHZlcnNpb24gaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3VwZGF0ZWRfYXQnIGluIGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogdXBkYXRlZF9hdCBpcyBub3QgZGVmaW5lZCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdjb25maWcnIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY29uZmlnICE9PSAnb2JqZWN0JyB8fFxuICAgICFpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZyhkYXRhLmNvbmZpZylcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogY29uZmlnIGlzIG5vdCBhbiBvYmplY3QnLCBkYXRhKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ29yZ2FuaXphdGlvbl9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5vcmdhbml6YXRpb25faWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogb3JnYW5pemF0aW9uX2lkIGlzIG5vdCBhIHN0cmluZycsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnaWQnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogaWQgaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgU3RhdHNpZ0V4cGVyaW1lbnQgYXMgQXBpT3JnQ29uZmlnRXhwZXJpbWVudCxcbiAgU3RhdHNpZ0ZlYXR1cmVHYXRlIGFzIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlLFxuICBPcmdhbml6YXRpb25TZXR0aW5ncyBhcyBBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5ncyxcbiAgT3JnYW5pemF0aW9uIGFzIEFwaU9yZ2FuaXphdGlvbixcbiAgT3JnYW5pemF0aW9uU3RhdHVzRW51bSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IEFwaU9yZ2FuaXphdGlvbkNvbmZpZywgaXNBcGlPcmdhbml6YXRpb25Db25maWcgfSBmcm9tICcuL2lzQXBpT3JnYW5pemF0aW9uQ29uZmlnJztcblxuaW50ZXJmYWNlIEFwaU9yZ0NvbmZpZ1Jlc3VsdHMge1xuICBjb25maWdzOiBBcGlPcmdhbml6YXRpb25Db25maWdbXTtcbiAgZXhwZXJpbWVudHM6IEFwaU9yZ0NvbmZpZ0V4cGVyaW1lbnRbXTtcbiAgZ2F0ZXM6IEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW107XG4gIG9yZzogQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3M7XG59XG5cbmNvbnN0IGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBBcGlPcmdDb25maWdFeHBlcmltZW50ID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudDogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnZ3JvdXAnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuZ3JvdXAgIT09ICdzdHJpbmcnICYmIGRhdGEuZ3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IGdyb3VwIGlzIG5vdCBhIHN0cmluZyBvciB1bmRlZmluZWQnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnZ3JvdXBfbmFtZScgaW4gZGF0YSAmJlxuICAgIHR5cGVvZiBkYXRhLmdyb3VwX25hbWUgIT09ICdzdHJpbmcnICYmXG4gICAgZGF0YS5ncm91cF9uYW1lICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IGdyb3VwX25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnbmFtZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyAmJiBkYXRhLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdFeHBlcmltZW50OiBuYW1lIGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3J1bGVfaWQnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEucnVsZV9pZCAhPT0gJ3N0cmluZycgJiYgZGF0YS5ydWxlX2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudDogcnVsZV9pZCBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS52YWx1ZSAhPT0gJ29iamVjdCcgJiYgZGF0YS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IHZhbHVlIGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc0FwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGU6IGRhdGEgaXMgbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ25hbWUnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEubmFtZSAhPT0gJ3N0cmluZycgJiYgZGF0YS5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGU6IG5hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgncnVsZV9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5ydWxlX2lkICE9PSAnc3RyaW5nJyAmJiBkYXRhLnJ1bGVfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdGZWF0dXJlR2F0ZTogcnVsZV9pZCBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS52YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmIGRhdGEudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdGZWF0dXJlR2F0ZTogdmFsdWUgaXMgbm90IGEgYm9vbGVhbicsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzQXBpT3JnYW5pemF0aW9uID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ2FuaXphdGlvbiA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdpZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogaWQgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdkaXNwbGF5X25hbWUnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmRpc3BsYXlfbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBkaXNwbGF5X25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdkb21haW4nIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmRvbWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBkb21haW4gaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdzaG9ydF9uYW1lJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5zaG9ydF9uYW1lICE9PSAnc3RyaW5nJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdhbml6YXRpb246IHNob3J0X25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdzdGF0dXMnIGluIGRhdGEpIHx8XG4gICAgIU9iamVjdC52YWx1ZXMoT3JnYW5pemF0aW9uU3RhdHVzRW51bSkuaW5jbHVkZXMoZGF0YS5zdGF0dXMgYXMgT3JnYW5pemF0aW9uU3RhdHVzRW51bSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBzdGF0dXMgaXMgbm90IGEgdmFsaWQgT3JnYW5pemF0aW9uU3RhdHVzRW51bSB2YWx1ZScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdjcmVhdGVkX2F0JyBpbiBkYXRhICYmXG4gICAgIShkYXRhLmNyZWF0ZWRfYXQgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgIHR5cGVvZiBkYXRhLmNyZWF0ZWRfYXQgIT09ICdzdHJpbmcnICYmXG4gICAgZGF0YS5jcmVhdGVkX2F0ICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogY3JlYXRlZF9hdCBpcyBub3QgYSBEYXRlJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAndXBkYXRlZF9hdCcgaW4gZGF0YSAmJlxuICAgICEoZGF0YS51cGRhdGVkX2F0IGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICB0eXBlb2YgZGF0YS51cGRhdGVkX2F0ICE9PSAnc3RyaW5nJyAmJlxuICAgIGRhdGEudXBkYXRlZF9hdCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdhbml6YXRpb246IHVwZGF0ZWRfYXQgaXMgbm90IGEgRGF0ZScsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5nczogZGF0YSBpcyBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgnb3JnJyBpbiBkYXRhKSB8fCAhaXNBcGlPcmdhbml6YXRpb24oZGF0YS5vcmcpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3M6IG9yZyBpcyBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBza2lwIHZhbGlkYXRpb24gZm9yICdzZXR0aW5ncycgZm9yIG5vd1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHMgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUmVxdWlyZWQ8QXBpT3JnQ29uZmlnUmVzdWx0cz4gPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdSZXN1bHRzOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICEoJ2NvbmZpZ3MnIGluIGRhdGEpIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoZGF0YS5jb25maWdzKSB8fFxuICAgICFkYXRhLmNvbmZpZ3MuZXZlcnkoKGNvbmZpZykgPT4gaXNBcGlPcmdhbml6YXRpb25Db25maWcoY29uZmlnKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHM6IGNvbmZpZ3MgaXMgbm90IGFuIGFycmF5JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnZXhwZXJpbWVudHMnIGluIGRhdGEgJiZcbiAgICBkYXRhLmV4cGVyaW1lbnRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoZGF0YS5leHBlcmltZW50cykgfHxcbiAgICAgICFkYXRhLmV4cGVyaW1lbnRzLmV2ZXJ5KChleHApID0+IGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudChleHApKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnUmVzdWx0czogZXhwZXJpbWVudHMgaXMgbm90IGFuIGFycmF5IG9yIGNvbnRhaW5zIGludmFsaWQgaXRlbXMnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdnYXRlcycgaW4gZGF0YSkgfHxcbiAgICAhQXJyYXkuaXNBcnJheShkYXRhLmdhdGVzKSB8fFxuICAgICFkYXRhLmdhdGVzLmV2ZXJ5KChnYXRlKSA9PiBpc0FwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlKGdhdGUpKVxuICApIHtcbiAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdSZXN1bHRzOiBnYXRlcyBpcyBub3QgYW4gYXJyYXkgb3IgY29udGFpbnMgaW52YWxpZCBpdGVtcycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ29yZycgaW4gZGF0YSkgfHwgIWlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MoZGF0YS5vcmcpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnUmVzdWx0czogb3JnIGlzIG5vdCBhbiBvYmplY3Qgb3IgaGFzIGludmFsaWQgZmllbGRzJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIEFwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgPT4ge1xuICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3RpdGxlJyBpbiBvYmogJiYgb2JqLnRpdGxlICE9IG51bGwgJiYgdHlwZW9mIG9iai50aXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ2Rlc2NyaXB0aW9uJyBpbiBvYmogJiYgdHlwZW9mIG9iai5kZXNjcmlwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3VybCcgaW4gb2JqICYmIHR5cGVvZiBvYmoudXJsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7XG4gIFBMUEF0dHJpYnV0ZUNhdGVnb3J5LFxuICBQTFBBdHRyaWJ1dGVzLFxuICBQTFBJZEF0dHJpYnV0ZXMsXG59IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBMUElkQXR0cmlidXRlID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFBMUElkQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2lkJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBMUEV2ZW50QXR0cmlidXRlcyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBQTFBBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgISgnY2F0ZWdvcnknIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY2F0ZWdvcnkgIT09ICdzdHJpbmcnIHx8XG4gICAgIU9iamVjdC52YWx1ZXMoUExQQXR0cmlidXRlQ2F0ZWdvcnkpLmluY2x1ZGVzKGRhdGEuY2F0ZWdvcnkgYXMgUExQQXR0cmlidXRlQ2F0ZWdvcnkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdhdHRyaWJ1dGVzJyBpbiBkYXRhKSB8fFxuICAgIHR5cGVvZiBkYXRhLmF0dHJpYnV0ZXMgIT09ICdvYmplY3QnIHx8XG4gICAgIWlzQXBpUExQSWRBdHRyaWJ1dGUoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuZXhwb3J0IGNvbnN0IGlzQXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyA9IChcbiAgYXR0cmlidXRlczogdW5rbm93bixcbik6IGF0dHJpYnV0ZXMgaXMgUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChhdHRyaWJ1dGVzID09IG51bGwgfHwgdHlwZW9mIGF0dHJpYnV0ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdmaWx0ZXJfbmFtZScgaW4gYXR0cmlidXRlcyAmJiB0eXBlb2YgYXR0cmlidXRlcy5maWx0ZXJfbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbCc7XG5cbmNvbnN0IFJFUVVJUkVEX0NPTE9SX0ZJRUxEUyA9IFtcbiAgJ2FjY2VudF9wcmltYXJ5JyxcbiAgJ2FjY2VudF9zZWNvbmRhcnknLFxuICAnYmFja2dyb3VuZF9kYXJrJyxcbiAgJ2JhY2tncm91bmRfbGlnaHQnLFxuICAnYmFja2dyb3VuZF9wcmltYXJ5JyxcbiAgJ2JhY2tncm91bmRfc2F0dXJhdGVkJyxcbiAgJ2JhY2tncm91bmRfc2Vjb25kYXJ5JyxcbiAgJ2JhY2tncm91bmRfc2Vjb25kYXJ5X2RhcmsnLFxuICAnYmFja2dyb3VuZF90ZXJ0aWFyeScsXG4gICdib3JkZXJfZGFyaycsXG4gICdib3JkZXJfbGlnaHQnLFxuICAnYm9yZGVyX21lZGl1bScsXG4gICdib3JkZXJfb3V0bGluZScsXG4gICd0ZXh0X2FjY2VudCcsXG4gICd0ZXh0X2xpZ2h0JyxcbiAgJ3RleHRfbGluaycsXG4gICd0ZXh0X3ByaW1hcnknLFxuICAndGV4dF9zZWNvbmRhcnknLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGlzR3JhcGhRTENvbG9yc0NvbmZpZyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YSA9PiB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgZGF0YSA9PT0gbnVsbCkge1xuICAgIExvZ2dlci5sb2dFcnJvcignSW52YWxpZCBncmFwaHFsIHJlc3BvbnNlIGZvciBjb2xvcnMgY29uZmlnJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgZWFjaCByZXF1aXJlZCBmaWVsZFxuICBjb25zdCBtaXNzaW5nRmllbGRzID0gUkVRVUlSRURfQ09MT1JfRklFTERTLmZpbHRlcihcbiAgICAoZmllbGQpID0+ICEoZmllbGQgaW4gZGF0YSkgfHwgdHlwZW9mIChkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtmaWVsZF0gIT09ICdzdHJpbmcnLFxuICApO1xuXG4gIGlmIChtaXNzaW5nRmllbGRzLmxlbmd0aCA9PT0gUkVRVUlSRURfQ09MT1JfRklFTERTLmxlbmd0aCkge1xuICAgIExvZ2dlci5sb2dFcnJvcignQWxsIGNvbG9yIGZpZWxkcyBhcmUgbWlzc2luZyBvciBudWxsJywgdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobWlzc2luZ0ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgY29sb3IgZmllbGRzJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgICAgbWlzc2luZ0ZpZWxkcyxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgdXRpbGl0eSB0byB0cmFuc2Zvcm0gc25ha2VfY2FzZSBvYmplY3Qga2V5cyB0byBjYW1lbENhc2UgYXQgcnVudGltZS5cbiAqIFRoaXMgaXMgdGhlIHJ1bnRpbWUgZXF1aXZhbGVudCBvZiB0aGUgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIHR5cGUgdXRpbGl0eS5cbiAqL1xuXG4vLyBMaXN0IG9mIGFjcm9ueW1zIHRoYXQgc2hvdWxkIGJlIHByZXNlcnZlZCBhcyB1cHBlcmNhc2UgaW4gY2FtZWxDYXNlIGFuZCBsb3dlcmNhc2UgaW4gc25ha2VfY2FzZVxuY29uc3QgUFJFU0VSVkVEX0FDUk9OWU1TID0gW1wiUExQXCIsIFwiUERQXCIsIFwiU1ZHXCJdO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgc25ha2VfY2FzZSBzdHJpbmcgdG8gY2FtZWxDYXNlXG4gKiBIYW5kbGVzIHNwZWNpZmljIGFjcm9ueW1zIGxpa2UgUExQIGFuZCBQRFAgY29ycmVjdGx5XG4gKi9cbmNvbnN0IHRvQ2FtZWxDYXNlID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgLy8gUHJlLXByb2Nlc3M6IGNvbnZlcnQgYWxsIHdvcmRzIHRoYXQgbWF0Y2ggdGhlIFBSRVNFUlZFRF9BQ1JPTllNUyByZWdleCB0byB1cHBlcmNhc2VcbiAgbGV0IHByb2Nlc3NlZFN0ciA9IHN0cjtcbiAgZm9yIChjb25zdCBhY3JvbnltIG9mIFBSRVNFUlZFRF9BQ1JPTllNUykge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXyR7YWNyb255bX1fP2AsIFwiZ2lcIik7XG5cbiAgICBpZiAocHJvY2Vzc2VkU3RyLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgcHJvY2Vzc2VkU3RyID0gcHJvY2Vzc2VkU3RyLnJlcGxhY2UocmVnZXgsICh2KSA9PlxuICAgICAgICB2LmVuZHNXaXRoKFwiX1wiKSA/IGAke2Fjcm9ueW19X2AgOiBgJHthY3JvbnltfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9jZXNzZWRTdHIucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGxldHRlcikgPT4gbGV0dGVyLnRvVXBwZXJDYXNlKCkpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNhbWVsQ2FzZSBzdHJpbmcgdG8gc25ha2VfY2FzZVxuICogSGFuZGxlcyBjb25zZWN1dGl2ZSBjYXBpdGFsIGxldHRlcnMgY29ycmVjdGx5IChlLmcuLCBcIlBEUFwiIC0+IFwicGRwXCIsIG5vdCBcInBfZF9wXCIpXG4gKiBQcmVzZXJ2ZXMgc3BlY2lmaWMgYWNyb255bXMgbGlrZSBQTFAgYW5kIFBEUCBhcyBsb3dlcmNhc2UgaW4gc25ha2VfY2FzZVxuICovXG5jb25zdCB0b1NuYWtlQ2FzZSA9IChzdHI6IHN0cmluZykgPT5cbiAgc3RyXG4gICAgLnJlcGxhY2UoLyhbQS1aXSkoPz1bYS16XSkvZywgXCJfJDFcIilcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMV8kMlwiKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL15fLywgXCJcIik7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgb2JqZWN0IGtleXMgZnJvbSBzbmFrZV9jYXNlIHRvIGNhbWVsQ2FzZVxuICovXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtU25ha2VUb0NhbWVsID0gKG9iajogdW5rbm93bik6IHVua25vd24gPT4ge1xuICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcCgodmFsKSA9PiB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodmFsKSk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IGNhbWVsS2V5ID0gdG9DYW1lbENhc2Uoa2V5KTtcbiAgICAgIHJlc3VsdFtjYW1lbEtleV0gPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBvYmplY3Qga2V5cyBmcm9tIGNhbWVsQ2FzZSB0byBzbmFrZV9jYXNlXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1DYW1lbFRvU25ha2UgPSAob2JqOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmoubWFwKHRyYW5zZm9ybUNhbWVsVG9TbmFrZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IHNuYWtlS2V5ID0gdG9TbmFrZUNhc2Uoa2V5KTtcbiAgICAgIHJlc3VsdFtzbmFrZUtleV0gPSB0cmFuc2Zvcm1DYW1lbFRvU25ha2UodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcbiIsImltcG9ydCB7IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgZW51bSB2YWx1ZSBvciB1bmRlZmluZWQgaWYgdGhlIHN0cmluZ1xuICogZG9lcyBub3QgbWFwIHRvIGEgdmFsaWQgZW51bVxuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nVG9GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNFbnVtVmFsdWUgPSAoXG4gIHN0YXR1czogc3RyaW5nLFxuKTogRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzIHwgdW5kZWZpbmVkID0+IHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlICdBVFRFTVBURURfREVMSVZFUlknOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5BVFRFTVBURURfREVMSVZFUlk7XG4gICAgY2FzZSAnQ0FOQ0VMRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5DQU5DRUxFRDtcbiAgICBjYXNlICdDT05GSVJNRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5DT05GSVJNRUQ7XG4gICAgY2FzZSAnREVMSVZFUkVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuREVMSVZFUkVEO1xuICAgIGNhc2UgJ0ZBSUxVUkUnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5GQUlMVVJFO1xuICAgIGNhc2UgJ0ZVTEZJTExFRCc6XG4gICAgICByZXR1cm4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLkZVTEZJTExFRDtcbiAgICBjYXNlICdJTl9UUkFOU0lUJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuSU5fVFJBTlNJVDtcbiAgICBjYXNlICdMQUJFTF9QUklOVEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuTEFCRUxfUFJJTlRFRDtcbiAgICBjYXNlICdMQUJFTF9QVVJDSEFTRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5MQUJFTF9QVVJDSEFTRUQ7XG4gICAgY2FzZSAnTEFCRUxfVk9JREVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuTEFCRUxfVk9JREVEO1xuICAgIGNhc2UgJ01BUktFRF9BU19GVUxGSUxMRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5NQVJLRURfQVNfRlVMRklMTEVEO1xuICAgIGNhc2UgJ05PVF9ERUxJVkVSRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5OT1RfREVMSVZFUkVEO1xuICAgIGNhc2UgJ09VVF9GT1JfREVMSVZFUlknOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5PVVRfRk9SX0RFTElWRVJZO1xuICAgIGNhc2UgJ1BJQ0tFRF9VUCc6XG4gICAgICByZXR1cm4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLlBJQ0tFRF9VUDtcbiAgICBjYXNlICdSRUFEWV9GT1JfUElDS1VQJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUkVBRFlfRk9SX1BJQ0tVUDtcbiAgICBjYXNlICdTVUJNSVRURUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5TVUJNSVRURUQ7XG4gICAgY2FzZSAnSU5fUFJPR1JFU1MnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5JTl9QUk9HUkVTUztcbiAgICBjYXNlICdPTl9IT0xEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuT05fSE9MRDtcbiAgICBjYXNlICdPUEVOJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuT1BFTjtcbiAgICBjYXNlICdQQVJUSUFMTFlfRlVMRklMTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUEFSVElBTExZX0ZVTEZJTExFRDtcbiAgICBjYXNlICdQRU5ESU5HX0ZVTEZJTExNRU5UJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUEVORElOR19GVUxGSUxMTUVOVDtcbiAgICBjYXNlICdSRVFVRVNUX0RFQ0xJTkVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUkVRVUVTVF9ERUNMSU5FRDtcbiAgICBjYXNlICdSRVNUT0NLRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5SRVNUT0NLRUQ7XG4gICAgY2FzZSAnU0NIRURVTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuU0NIRURVTEVEO1xuICAgIGNhc2UgJ1VORlVMRklMTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuVU5GVUxGSUxMRUQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iLCJpbXBvcnQgeyBDb2xvck1hcHBpbmcsIENvbG9yTmFtZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdcIjtcbmltcG9ydCB7IGlzR3JhcGhRTENvbG9yc0NvbmZpZyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9ncmFwaFFML2lzR3JhcGhRTENvbG9yc0NvbmZpZ1wiO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVHcmFwaFFMQ29sb3JzQ29uZmlnID0gKFxuICBkYXRhOiB1bmtub3duXG4pOiBDb2xvck1hcHBpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzR3JhcGhRTENvbG9yc0NvbmZpZyhkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iLCJlbnVtIERPTUluc2VydGlvblR5cGUge1xuICBBRlRFUiA9IFwiYWZ0ZXJcIixcbiAgQkVGT1JFID0gXCJiZWZvcmVcIixcbiAgQURKQUNFTlRfQUZURVJfQkVHSU4gPSBcImFkamFjZW50LWFmdGVyLWJlZ2luXCIsXG4gIEFESkFDRU5UX0JFRk9SRV9CRUdJTiA9IFwiYWRqYWNlbnQtYmVmb3JlLWJlZ2luXCIsXG4gIEFESkFDRU5UX0FGVEVSX0VORCA9IFwiYWRqYWNlbnQtYWZ0ZXItZW5kXCIsXG4gIEFESkFDRU5UX0JFRk9SRV9FTkQgPSBcImFkamFjZW50LWJlZm9yZS1lbmRcIixcbiAgQVBQRU5EX0NISUxEID0gXCJhcHBlbmQtY2hpbGRcIixcbiAgTk9ORSA9IFwibm9uZVwiLFxufVxuXG5leHBvcnQgY29uc3QgRE9NSW5zZXJ0aW9uVHlwZVRvSW5zZXJ0UG9zaXRpb24gPSAoXG4gIHR5cGU6IERPTUluc2VydGlvblR5cGVcbik6IEluc2VydFBvc2l0aW9uID0+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBET01JbnNlcnRpb25UeXBlLkFESkFDRU5UX0FGVEVSX0JFR0lOOlxuICAgICAgcmV0dXJuIFwiYWZ0ZXJiZWdpblwiO1xuICAgIGNhc2UgRE9NSW5zZXJ0aW9uVHlwZS5CRUZPUkU6XG4gICAgY2FzZSBET01JbnNlcnRpb25UeXBlLkFESkFDRU5UX0JFRk9SRV9CRUdJTjpcbiAgICAgIHJldHVybiBcImJlZm9yZWJlZ2luXCI7XG4gICAgY2FzZSBET01JbnNlcnRpb25UeXBlLkFESkFDRU5UX0JFRk9SRV9FTkQ6XG4gICAgICByZXR1cm4gXCJiZWZvcmVlbmRcIjtcbiAgICBjYXNlIERPTUluc2VydGlvblR5cGUuQUZURVI6XG4gICAgY2FzZSBET01JbnNlcnRpb25UeXBlLkFESkFDRU5UX0FGVEVSX0VORDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiYWZ0ZXJlbmRcIjtcbiAgfVxufTtcblxuZXhwb3J0IHsgRE9NSW5zZXJ0aW9uVHlwZSB9O1xuIiwiZW51bSBHcmlkSW5zZXJ0aW9uVHlwZSB7XG4gIEZJWEVEXzEgPSBcImZpeGVkLTFcIixcbiAgRklYRURfMiA9IFwiZml4ZWQtMlwiLFxuICBGSVhFRF8zID0gXCJmaXhlZC0zXCIsXG4gIEZJWEVEXzQgPSBcImZpeGVkLTRcIixcbiAgRklYRURfNSA9IFwiZml4ZWQtNVwiLFxuICBGSVhFRF82ID0gXCJmaXhlZC02XCIsXG4gIEZJWEVEXzcgPSBcImZpeGVkLTdcIixcbiAgRklYRURfOCA9IFwiZml4ZWQtOFwiLFxuICBGSVhFRF85ID0gXCJmaXhlZC05XCIsXG4gIEZJWEVEXzEyID0gXCJmaXhlZC0xMlwiLFxuICBGSVhFRF8xMyA9IFwiZml4ZWQtMTNcIixcbiAgUk9XXzEgPSBcInJvdy0xXCIsXG4gIFJPV18yID0gXCJyb3ctMlwiLFxuICBST1dfMyA9IFwicm93LTNcIixcbiAgUk9XXzQgPSBcInJvdy00XCIsXG59XG5cbmV4cG9ydCB7IEdyaWRJbnNlcnRpb25UeXBlIH07XG4iLCJpbXBvcnQgeyBGcm9udGVuZENvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZnJvbnRlbmRDb25maWcnO1xuaW1wb3J0IHsgdHJhbnNmb3JtU25ha2VUb0NhbWVsIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lcic7XG5pbXBvcnQge1xuICBXaWRnZXRDb25maWcsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRNb3VudGluZ0NvbmZpZyxcbn0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmltcG9ydCB7IERPTUluc2VydGlvblR5cGUgfSBmcm9tICdzcmMvbWVyY2hhbnRzL2RvbUluc2VydGlvbic7XG5pbXBvcnQgeyBHcmlkSW5zZXJ0aW9uVHlwZSB9IGZyb20gJ3NyYy9tZXJjaGFudHMvZ3JpZEluc2VydGlvbic7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIFBhZ2VWYXJpYW50UXVlcnlEYXRhIHRvIFBhZ2VWYXJpYW50Q29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHMgPSAoXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBQYWdlVmFyaWFudENvbmZpZyA9PiB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKGNvbmZpZykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgY29uc3QgeyB2YXJpYW50Q2hlY2tzLCB3aWRnZXRNb3VudGluZywgLi4ucmVzdCB9ID0gdHJhbnNmb3JtZWQ7XG5cbiAgLy8gQ29udmVydCB2YXJpYW50Q2hlY2tzIHRvIHZhcmlhbnRUZXN0cyB3aXRoIHRlc3RUeXBlIG5vcm1hbGl6YXRpb25cbiAgY29uc3QgdmFyaWFudFRlc3RzID0gQXJyYXkuaXNBcnJheSh2YXJpYW50Q2hlY2tzKVxuICAgID8gdmFyaWFudENoZWNrcy5tYXAoKHsgY2hlY2tUeXBlLCAuLi5yZXN0Q2hlY2sgfSkgPT4gKHtcbiAgICAgICAgLi4ucmVzdENoZWNrLFxuICAgICAgICB0ZXN0VHlwZTogY2hlY2tUeXBlLFxuICAgICAgfSkpXG4gICAgOiBbXTtcblxuICAvLyBOb3JtYWxpemUgd2lkZ2V0TW91bnRpbmc6IGNoZWNrcyAtPiB0ZXN0cywgY2hlY2tUeXBlIC0+IHRlc3RUeXBlXG4gIGNvbnN0IG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyA9IEFycmF5LmlzQXJyYXkod2lkZ2V0TW91bnRpbmcpXG4gICAgPyB3aWRnZXRNb3VudGluZy5tYXAoKHsgbW91bnRpbmdQb2ludFdpZGdldHMsIC4uLnJlc3RNb3VudGluZyB9KSA9PiAoe1xuICAgICAgICAuLi5yZXN0TW91bnRpbmcsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KG1vdW50aW5nUG9pbnRXaWRnZXRzKVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBtb3VudGluZ1BvaW50V2lkZ2V0czogbW91bnRpbmdQb2ludFdpZGdldHMubWFwKCh7IGNoZWNrcywgLi4ucmVzdFdpZGdldCB9KSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnJlc3RXaWRnZXQsXG4gICAgICAgICAgICAgICAgdGVzdHM6IEFycmF5LmlzQXJyYXkoY2hlY2tzKVxuICAgICAgICAgICAgICAgICAgPyBjaGVja3MubWFwKCh7IGNoZWNrVHlwZSwgLi4ucmVzdENoZWNrIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdENoZWNrLFxuICAgICAgICAgICAgICAgICAgICAgIHRlc3RUeXBlOiBjaGVja1R5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSkpXG4gICAgOiBbXTtcblxuICBjb25zdCBub3JtYWxpemVkQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAuLi5yZXN0LFxuICAgIC4uLih2YXJpYW50VGVzdHMgPyB7IHZhcmlhbnRUZXN0cyB9IDoge30pLFxuICAgIC4uLihub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcgPyB7IHdpZGdldE1vdW50aW5nOiBub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcgfSA6IHt9KSxcbiAgfTtcblxuICBjb25zdCB2YXJpYW50SWQgPSBub3JtYWxpemVkQ29uZmlnLnZhcmlhbnRJZCBhcyBzdHJpbmc7XG4gIGNvbnN0IHZhcmlhbnRUeXBlID0gbm9ybWFsaXplZENvbmZpZy52YXJpYW50VHlwZSBhcyBzdHJpbmc7XG5cbiAgaWYgKHR5cGVvZiB2YXJpYW50SWQgIT09ICdzdHJpbmcnIHx8ICF2YXJpYW50SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB2YXJpYW50SWQgZm9yIHBhZ2VWYXJpYW50YCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhcmlhbnRUeXBlICE9PSAnc3RyaW5nJyB8fCAhdmFyaWFudFR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB2YXJpYW50VHlwZSBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YXJpYW50VGVzdHMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1pc3Npbmcgb3IgaW52YWxpZCB2YXJpYW50VGVzdHMgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBNdXN0IGJlIGFuIGFycmF5YCxcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCB0ZXN0IG9mIHZhcmlhbnRUZXN0cykge1xuICAgIGlmICghdGVzdC50ZXN0VHlwZSB8fCB0eXBlb2YgdGVzdC50ZXN0VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YXJpYW50VGVzdC50ZXN0VHlwZSBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKFBhZ2VWYXJpYW50VGVzdFR5cGUpLmluY2x1ZGVzKHRlc3QudGVzdFR5cGUgYXMgUGFnZVZhcmlhbnRUZXN0VHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgdGVzdFR5cGUgJyR7dGVzdC50ZXN0VHlwZX0nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhcbiAgICAgICAgICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICAgICAgICApLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWlzc2luZyBvciBpbnZhbGlkIHdpZGdldE1vdW50aW5nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gTXVzdCBiZSBhbiBhcnJheWAsXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgbW91bnRpbmcgb2Ygbm9ybWFsaXplZFdpZGdldE1vdW50aW5nKSB7XG4gICAgaWYgKHR5cGVvZiBtb3VudGluZy5tb3VudGluZ0NvbmZpZ0lkICE9PSAnc3RyaW5nJyB8fCAhbW91bnRpbmcubW91bnRpbmdDb25maWdJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1vdW50aW5nQ29uZmlnSWQgaW4gd2lkZ2V0TW91bnRpbmcgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuXG4gICAgaWYgKG1vdW50aW5nLndpZGdldENvbmZpZ0lkICYmIHR5cGVvZiBtb3VudGluZy53aWRnZXRDb25maWdJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aWRnZXRDb25maWdJZCBpbiB3aWRnZXRNb3VudGluZyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG5cbiAgICBpZiAobW91bnRpbmcubW91bnRpbmdQb2ludFdpZGdldHMpIHtcbiAgICAgIGZvciAoY29uc3Qgd2lkZ2V0IG9mIG1vdW50aW5nLm1vdW50aW5nUG9pbnRXaWRnZXRzKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2lkZ2V0LndpZGdldENvbmZpZ0lkICE9PSAnc3RyaW5nJyB8fCAhd2lkZ2V0LndpZGdldENvbmZpZ0lkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgd2lkZ2V0Q29uZmlnSWQgaW4gbW91bnRpbmdQb2ludFdpZGdldHMgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHdpZGdldC50ZXN0cykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBvciBtaXNzaW5nIHRlc3RzIGluIG1vdW50aW5nUG9pbnRXaWRnZXRzIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh2YXJpYW50VHlwZSA9PT0gJ3BscCcpIHtcbiAgICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucGxwSWRFeHRyYWN0b3IgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLnBscElkRXh0cmFjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBwbHBJZEV4dHJhY3RvciBmb3IgUExQIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhcmlhbnRUeXBlID09PSAncGRwJykge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnByb2R1Y3RJZEV4dHJhY3RvciAhPT0gJ3N0cmluZycgfHxcbiAgICAgICFub3JtYWxpemVkQ29uZmlnLnByb2R1Y3RJZEV4dHJhY3RvclxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgcHJvZHVjdElkRXh0cmFjdG9yIGZvciBQRFAgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZENvbmZpZy5wYXJlbnRQcm9kdWN0SWRFeHRyYWN0b3IgJiZcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnBhcmVudFByb2R1Y3RJZEV4dHJhY3RvciAhPT0gJ3N0cmluZydcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyZW50UHJvZHVjdElkRXh0cmFjdG9yIGZvciBQRFAgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIE11c3QgYmUgc3RyaW5nIGlmIHByb3ZpZGVkYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRDb25maWcgYXMgUGFnZVZhcmlhbnRDb25maWc7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBNb3VudGluZ0NvbmZpZ1F1ZXJ5RGF0YSB0byBXaWRnZXRNb3VudGluZ0NvbmZpZ1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWcgPSAoXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbmZpZ0tleTogc3RyaW5nLFxuKTogV2lkZ2V0TW91bnRpbmdDb25maWcgPT4ge1xuICAvLyBSRU5BTUlORyBMT0dJQzogQ29udmVydCBiYWNrZW5kIFwiQ2hlY2tcIiB0ZXJtaW5vbG9neSB0byBmcm9udGVuZCBcIlRlc3RcIiB0ZXJtaW5vbG9neVxuICBjb25zdCBub3JtYWxpemVkQ29uZmlnID0geyAuLi5jb25maWcgfTtcblxuICAvLyBDb252ZXJ0IGNoZWNrSWQgdG8gdGVzdElkIGZvciBmcm9udGVuZCBjb21wYXRpYmlsaXR5IChkYXRhIGlzIGFscmVhZHkgY2FtZWxDYXNlKVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5jaGVja0lkICYmICFub3JtYWxpemVkQ29uZmlnLnRlc3RJZCkge1xuICAgIG5vcm1hbGl6ZWRDb25maWcudGVzdElkID0gbm9ybWFsaXplZENvbmZpZy5jaGVja0lkO1xuICAgIGRlbGV0ZSBub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQ7XG4gIH1cblxuICAvLyBSZXF1aXJlZCBmaWVsZHMgLSB0aGVzZSBtdXN0IGJlIHByZXNlbnQgYW5kIHZhbGlkXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5tb3VudGluZ0NvbmZpZ0lkICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy5tb3VudGluZ0NvbmZpZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgbW91bnRpbmdDb25maWdJZCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmNvbnRhaW5lcklkICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy5jb250YWluZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGNvbnRhaW5lcklkIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcudGVzdElkICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy50ZXN0SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB0ZXN0SWQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgLy8gUmVxdWlyZWQgaW5zZXJ0aW9uUG9pbnRcbiAgaWYgKFxuICAgICFub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50IHx8XG4gICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBpbnNlcnRpb25Qb2ludCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICBjb25zdCBpbnNlcnRpb25Qb2ludCA9IG5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gVmFsaWRhdGUgaW5zZXJ0aW9uUG9pbnQgcmVxdWlyZWQgZmllbGRzXG4gIGlmICh0eXBlb2YgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IgIT09ICdzdHJpbmcnIHx8ICFpbnNlcnRpb25Qb2ludC5zZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGluc2VydGlvblBvaW50LnNlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8ICFpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBpbnNlcnRpb25UeXBlIGlzIGEgdmFsaWQgRE9NSW5zZXJ0aW9uVHlwZVxuICBpZiAoIU9iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMoaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgJyR7aW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCBpbnNlcnRpb25Qb2ludCBmaWVsZHNcbiAgaWYgKGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4ICE9IG51bGwgJiYgdHlwZW9mIGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBudW1iZXIgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCBwYXJlbnRJbnNlcnRpb25Qb2ludCBpZiBwcmVzZW50XG4gIGxldCBwYXJlbnRJbnNlcnRpb25Qb2ludDtcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcucGFyZW50SW5zZXJ0aW9uUG9pbnQpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludCAhPT0gJ29iamVjdCcgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdGApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudFBvaW50ID0gbm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIHBhcmVudFBvaW50LnNlbGVjdG9yICE9PSAnc3RyaW5nJyB8fCAhcGFyZW50UG9pbnQuc2VsZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50LnNlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fCAhcGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWlzc2luZyBvciBpbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5pbmNsdWRlcyhwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgJyR7cGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50UG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB0eXBlb2YgcGFyZW50UG9pbnQuc2VsZWN0aW9uSW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBudW1iZXIgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwYXJlbnRJbnNlcnRpb25Qb2ludCA9IHtcbiAgICAgIHNlbGVjdG9yOiBwYXJlbnRQb2ludC5zZWxlY3RvcixcbiAgICAgIGluc2VydGlvblR5cGU6IHBhcmVudFBvaW50Lmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSxcbiAgICAgIHNlbGVjdGlvbkluZGV4OiBwYXJlbnRQb2ludC5zZWxlY3Rpb25JbmRleCBhcyBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIHdyYXBwaW5nRWxlbWVudCBpZiBwcmVzZW50XG4gIGxldCB3cmFwcGluZ0VsZW1lbnQ7XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudCkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudCAhPT0gJ29iamVjdCcgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy53cmFwcGluZ0VsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd3JhcHBpbmdFbGVtZW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd3JhcHBpbmcgPSBub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIHdyYXBwaW5nLmNsYXNzTmFtZSAhPT0gJ3N0cmluZycgfHwgIXdyYXBwaW5nLmNsYXNzTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd3JhcHBpbmdFbGVtZW50LmNsYXNzTmFtZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd3JhcHBpbmcuZWxlbWVudCAhPT0gJ3N0cmluZycgfHwgIXdyYXBwaW5nLmVsZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5lbGVtZW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3cmFwcGluZy5pbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fCAhd3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd3JhcHBpbmdFbGVtZW50Lmluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5pbmNsdWRlcyh3cmFwcGluZy5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5pbnNlcnRpb25UeXBlICcke3dyYXBwaW5nLmluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgd3JhcHBpbmdFbGVtZW50ID0ge1xuICAgICAgY2xhc3NOYW1lOiB3cmFwcGluZy5jbGFzc05hbWUsXG4gICAgICBlbGVtZW50OiB3cmFwcGluZy5lbGVtZW50LFxuICAgICAgaW5zZXJ0aW9uVHlwZTogd3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlLFxuICAgIH07XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCBmaWVsZHNcbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3RvciAhPSBudWxsICYmXG4gICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3RvciAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZGl2Q2hlY2tTZWxlY3RvciBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNsYXNzTmFtZSAhPSBudWxsICYmIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmNsYXNzTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjbGFzc05hbWUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBzdXBwcmVzc2lvblNlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMgIT0gbnVsbCAmJlxuICAgICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcyAhPT0gJ29iamVjdCcgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcykpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGRhdGFBdHRyaWJ1dGVzIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLnN0eWxlICE9IG51bGwgJiZcbiAgICAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5zdHlsZSkpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdHlsZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdCBvciBudWxsL3VuZGVmaW5lZGApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZ3JpZEluc2VydGlvblR5cGUgaWYgcHJlc2VudFxuICBsZXQgZ3JpZEluc2VydGlvblR5cGU7XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8XG4gICAgICAhbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdyaWRJbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhT2JqZWN0LnZhbHVlcyhHcmlkSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMoXG4gICAgICAgIG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUgYXMgR3JpZEluc2VydGlvblR5cGUsXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGdyaWRJbnNlcnRpb25UeXBlICcke25vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEdyaWRJbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBncmlkSW5zZXJ0aW9uVHlwZSA9IG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUgYXMgR3JpZEluc2VydGlvblR5cGU7XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgcmV0dXJuIG9iamVjdCwgb25seSBpbmNsdWRpbmcgb3B0aW9uYWwgZmllbGRzIGlmIHRoZXkgaGF2ZSB2YWx1ZXNcbiAgY29uc3QgcmVzdWx0OiBXaWRnZXRNb3VudGluZ0NvbmZpZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQsXG4gICAgY29udGFpbmVySWQ6IG5vcm1hbGl6ZWRDb25maWcuY29udGFpbmVySWQsXG4gICAgdGVzdElkOiBub3JtYWxpemVkQ29uZmlnLnRlc3RJZCxcbiAgICBpbnNlcnRpb25Qb2ludDoge1xuICAgICAgc2VsZWN0b3I6IGluc2VydGlvblBvaW50LnNlbGVjdG9yLFxuICAgICAgaW5zZXJ0aW9uVHlwZTogaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlLFxuICAgICAgLi4uKGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4ICE9IG51bGwgJiYge1xuICAgICAgICBzZWxlY3Rpb25JbmRleDogaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXgsXG4gICAgICB9KSxcbiAgICB9LFxuICB9O1xuXG4gIC8vIE9ubHkgYWRkIG9wdGlvbmFsIGZpZWxkcyBpZiB0aGV5IGhhdmUgdmFsdWVzXG4gIGlmIChwYXJlbnRJbnNlcnRpb25Qb2ludCkge1xuICAgIHJlc3VsdC5wYXJlbnRJbnNlcnRpb25Qb2ludCA9IHBhcmVudEluc2VydGlvblBvaW50O1xuICB9XG4gIGlmIChncmlkSW5zZXJ0aW9uVHlwZSkge1xuICAgIHJlc3VsdC5ncmlkSW5zZXJ0aW9uVHlwZSA9IGdyaWRJbnNlcnRpb25UeXBlO1xuICB9XG4gIGlmICh3cmFwcGluZ0VsZW1lbnQpIHtcbiAgICByZXN1bHQud3JhcHBpbmdFbGVtZW50ID0gd3JhcHBpbmdFbGVtZW50O1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmRpdkNoZWNrU2VsZWN0b3IpIHtcbiAgICByZXN1bHQuZGl2Q2hlY2tTZWxlY3RvciA9IG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3RvciBhcyBzdHJpbmc7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lKSB7XG4gICAgcmVzdWx0LmNsYXNzTmFtZSA9IG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lIGFzIHN0cmluZztcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yKSB7XG4gICAgcmVzdWx0LnN1cHByZXNzaW9uU2VsZWN0b3IgPSBub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3I7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMpIHtcbiAgICByZXN1bHQuZGF0YUF0dHJpYnV0ZXMgPSBub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuc3R5bGUpIHtcbiAgICByZXN1bHQuc3R5bGUgPSBub3JtYWxpemVkQ29uZmlnLnN0eWxlIGFzIFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj47XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gV2lkZ2V0Q29uZmlnUXVlcnlEYXRhIHRvIFdpZGdldENvbmZpZ1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtV2lkZ2V0Q29uZmlnID0gKFxuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjb25maWdLZXk6IHN0cmluZyxcbik6IFdpZGdldENvbmZpZyA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoY29uZmlnKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcud2lkZ2V0Q29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLndpZGdldENvbmZpZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd2lkZ2V0Q29uZmlnSWQgZm9yIHdpZGdldCBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcudHlwZSAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcudHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHR5cGUgZm9yIHdpZGdldCBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNvbnRlbnRJZCAhPSBudWxsICYmIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmNvbnRlbnRJZCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjb250ZW50SWQgZm9yIHdpZGdldCBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cblxuICAvLyBOb3RlOiBXaWRnZXQgY29uZmlncyBhcmUgY29tcGxleCB1bmlvbnMgd2l0aCB0eXBlLXNwZWNpZmljIHByb3BlcnRpZXMuXG5cbiAgLy8gUmV0dXJuIHRoZSBub3JtYWxpemVkIGNvbmZpZyBhcyBXaWRnZXRDb25maWdcbiAgLy8gVXNlIGludGVybWVkaWF0ZSAndW5rbm93bicgY2FzdCBmb3IgY29tcGxleCB1bmlvbiB0eXBlc1xuICByZXR1cm4gbm9ybWFsaXplZENvbmZpZyBhcyB1bmtub3duIGFzIFdpZGdldENvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZyA9IChkYXRhOiB1bmtub3duKTogRnJvbnRlbmRDb25maWcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBvYmogPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIFZhbGlkYXRlIG1lcmNoYW50X292ZXJyaWRlX2NzcyBpZiBwcmVzZW50XG4gIGlmIChcbiAgICAnbWVyY2hhbnRfb3ZlcnJpZGVfY3NzJyBpbiBvYmogJiZcbiAgICB0eXBlb2Ygb2JqLm1lcmNoYW50X292ZXJyaWRlX2NzcyAhPT0gJ3N0cmluZycgJiZcbiAgICBvYmoubWVyY2hhbnRfb3ZlcnJpZGVfY3NzICE9PSBudWxsXG4gICkge1xuICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IGRhdGEgfSxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBwYWdlX3ZhcmlhbnRzIGlmIHByZXNlbnRcbiAgaWYgKCdwYWdlX3ZhcmlhbnRzJyBpbiBvYmopIHtcbiAgICBpZiAoXG4gICAgICBvYmoucGFnZV92YXJpYW50cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvYmoucGFnZV92YXJpYW50cyAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkob2JqLnBhZ2VfdmFyaWFudHMpXG4gICAgKSB7XG4gICAgICBMb2dnZXIubG9nV2FybihcbiAgICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogcGFnZV92YXJpYW50cyBtdXN0IGJlIGFuIGFycmF5IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7IGRhdGEgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG1vdW50aW5nX2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ21vdW50aW5nX2NvbmZpZ3MnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai5tb3VudGluZ19jb25maWdzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9iai5tb3VudGluZ19jb25maWdzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoubW91bnRpbmdfY29uZmlncylcbiAgICApIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBtb3VudGluZ19jb25maWdzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgZGF0YSB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgd2lkZ2V0X2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ3dpZGdldF9jb25maWdzJyBpbiBvYmopIHtcbiAgICBpZiAoXG4gICAgICBvYmoud2lkZ2V0X2NvbmZpZ3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb2JqLndpZGdldF9jb25maWdzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoud2lkZ2V0X2NvbmZpZ3MpXG4gICAgKSB7XG4gICAgICBMb2dnZXIubG9nV2FybihcbiAgICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogd2lkZ2V0X2NvbmZpZ3MgbXVzdCBiZSBhbiBhcnJheSBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBkYXRhIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB1aV9jb25maWdzIGlmIHByZXNlbnRcbiAgaWYgKCd1aV9jb25maWdzJyBpbiBvYmogJiYgdHlwZW9mIG9iai51aV9jb25maWdzICE9PSAnb2JqZWN0JyAmJiBvYmoudWlfY29uZmlncyAhPT0gbnVsbCkge1xuICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogdWlfY29uZmlncyBtdXN0IGJlIGFuIG9iamVjdCBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IGRhdGEgfSxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRyYW5zZm9ybSB0aGUgZGF0YSB0byBjYW1lbENhc2VcbiAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwob2JqKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIENvbnZlcnQgcGFnZV92YXJpYW50cyBmcm9tIGFycmF5IHRvIHZhbGlkYXRlZCBhcnJheSBpZiBwcmVzZW50XG4gICAgaWYgKHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzKSkge1xuICAgICAgY29uc3QgcGFnZVZhcmlhbnRzQXJyYXkgPSB0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzO1xuICAgICAgY29uc3QgdmFsaWRhdGVkUGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBwYWdlVmFyaWFudHNBcnJheSkge1xuICAgICAgICBpZiAodmFyaWFudCAmJiB0eXBlb2YgdmFyaWFudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhcmlhbnQudmFyaWFudElkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYXJpYW50ID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHModmFyaWFudCk7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQYWdlVmFyaWFudHMucHVzaCh2YWxpZGF0ZWRWYXJpYW50KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgcGFnZSB2YXJpYW50LCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIHZhcmlhbnRJZDogdmFyaWFudC52YXJpYW50SWQsXG4gICAgICAgICAgICAgIHZhcmlhbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgdmFyaWFudHNcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgcGFnZSB2YXJpYW50IHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgdmFyaWFudCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzID0gdmFsaWRhdGVkUGFnZVZhcmlhbnRzO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgbW91bnRpbmdfY29uZmlncyBmcm9tIGFycmF5IHRvIFJlY29yZCBpZiBwcmVzZW50XG4gICAgaWYgKHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzKSkge1xuICAgICAgY29uc3QgbW91bnRpbmdDb25maWdzQXJyYXkgPSB0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzIGFzIEFycmF5PHtcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZzogdW5rbm93bjtcbiAgICAgIH0+O1xuICAgICAgY29uc3QgbW91bnRpbmdDb25maWdzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz4gPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1vdW50aW5nQ29uZmlnc0FycmF5KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpdGVtICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0ua2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGl0ZW0uY29uZmlnICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0uY29uZmlnID09PSAnb2JqZWN0J1xuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgYW5kIHRyYW5zZm9ybSB0aGUgY29uZmlnIHN0cnVjdHVyZVxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaXRlbS5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRDb25maWcgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywgaXRlbS5rZXkpO1xuICAgICAgICAgICAgbW91bnRpbmdDb25maWdzUmVjb3JkW2l0ZW0ua2V5XSA9IHZhbGlkYXRlZENvbmZpZztcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgbW91bnRpbmcgY29uZmlnLCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ0tleTogaXRlbS5rZXksXG4gICAgICAgICAgICAgIGNvbmZpZzogaXRlbS5jb25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgY29uZmlnc1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBtb3VudGluZyBjb25maWcgaXRlbSBzdHJ1Y3R1cmUsIHNraXBwaW5nJywgdW5kZWZpbmVkLCB7IGl0ZW0gfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJhbnNmb3JtZWREYXRhLm1vdW50aW5nQ29uZmlncyA9IG1vdW50aW5nQ29uZmlnc1JlY29yZDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHdpZGdldF9jb25maWdzIGZyb20gYXJyYXkgdG8gUmVjb3JkIGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLndpZGdldENvbmZpZ3MgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncykpIHtcbiAgICAgIGNvbnN0IHdpZGdldENvbmZpZ3NBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzIGFzIEFycmF5PHtcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZzogdW5rbm93bjtcbiAgICAgIH0+O1xuICAgICAgY29uc3Qgd2lkZ2V0Q29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHdpZGdldENvbmZpZ3NBcnJheSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaXRlbSAmJlxuICAgICAgICAgIHR5cGVvZiBpdGVtLmtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBpdGVtLmNvbmZpZyAmJlxuICAgICAgICAgIHR5cGVvZiBpdGVtLmNvbmZpZyA9PT0gJ29iamVjdCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gd2lkZ2V0IGNvbmZpZyB1c2luZyB0aGUgZGVkaWNhdGVkIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGl0ZW0uY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWcoY29uZmlnLCBpdGVtLmtleSk7XG4gICAgICAgICAgICB3aWRnZXRDb25maWdzUmVjb3JkW2l0ZW0ua2V5XSA9IHZhbGlkYXRlZENvbmZpZztcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgd2lkZ2V0IGNvbmZpZywgc2tpcHBpbmcnLCBlcnJvciwge1xuICAgICAgICAgICAgICBjb25maWdLZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICBjb25maWc6IGl0ZW0uY29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDb250aW51ZSBwcm9jZXNzaW5nIG90aGVyIGNvbmZpZ3NcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgd2lkZ2V0IGNvbmZpZyBpdGVtIHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgaXRlbSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncyA9IHdpZGdldENvbmZpZ3NSZWNvcmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YSBhcyBGcm9udGVuZENvbmZpZztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBMb2dnZXIubG9nV2FybignRmFpbGVkIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YScsIGVycm9yLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdmFsaWRhdGVHcmFwaFFMT3JnSWQgPSAoZGF0YTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycgfHwgZGF0YSA9PT0gJycpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiaW1wb3J0IHsgaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIH0gZnJvbSAnLi4vZ3VhcmRzL2lzTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlcic7XG5pbXBvcnQgeyBNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIH0gZnJvbSAnLi4vbW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlcic7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgPSAoXG4gIHZhbHVlOiB1bmtub3duLFxuKTogTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyKHZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJvd0luZGV4OiB2YWx1ZS5yb3dfaW5kZXgsXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnYW5pemF0aW9uQ29uZmlnJztcbmltcG9ydCB7IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JnYW5pemF0aW9uQ29uZmlnJztcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBPcmdhbml6YXRpb25Db25maWcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzQXBpT3JnYW5pemF0aW9uQ29uZmlnKGRhdGEpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IGRhdGEuaWQsXG4gICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQudG9JU09TdHJpbmcoKSxcbiAgICBuYW1lc3BhY2U6IGRhdGEubmFtZXNwYWNlLFxuICAgIG9yZ2FuaXphdGlvbklkOiBkYXRhLm9yZ2FuaXphdGlvbl9pZCxcbiAgICBpc0xhdGVzdDogZGF0YS5pc19sYXRlc3QsXG4gICAgdmVyc2lvbjogZGF0YS52ZXJzaW9uLFxuICAgIHVwZGF0ZWRBdDogZGF0YS51cGRhdGVkX2F0LnRvSVNPU3RyaW5nKCksXG4gICAgY29uZmlnOiB7XG4gICAgICBhbXBsaXR1ZGU6IGRhdGEuY29uZmlnLmFtcGxpdHVkZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHNlc3Npb25SZXBsYXlFbmFibGVkOiBkYXRhLmNvbmZpZy5hbXBsaXR1ZGUuc2Vzc2lvbl9yZXBsYXlfZW5hYmxlZCxcbiAgICAgICAgICAgIHNlc3Npb25SZXBsYXlTYW1wbGVSYXRlOiBkYXRhLmNvbmZpZy5hbXBsaXR1ZGUuc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUsXG4gICAgICAgICAgICB0cmFja2luZ0VuYWJsZWQ6IGRhdGEuY29uZmlnLmFtcGxpdHVkZS50cmFja2luZ19lbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjdXN0b21lclNlcnZpY2U6IGRhdGEuY29uZmlnLmN1c3RvbWVyX3NlcnZpY2VcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBwcm92aWRlcjogZGF0YS5jb25maWcuY3VzdG9tZXJfc2VydmljZS5wcm92aWRlcixcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZ29vZ2xlQW5hbHl0aWNzOiBkYXRhLmNvbmZpZy5nb29nbGVfYW5hbHl0aWNzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgbWVhc3VyZW1lbnRJZDogZGF0YS5jb25maWcuZ29vZ2xlX2FuYWx5dGljcy5tZWFzdXJlbWVudF9pZCxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0sXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgaXNBcGlPcmdDb25maWdSZXN1bHRzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JnQ29uZmlnUmVzdWx0cyc7XG5pbXBvcnQgeyBPcmdDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbmltcG9ydCB7IHZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ2FuaXphdGlvbkNvbmZpZyc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzID0gKGRhdGE6IHVua25vd24pOiBPcmdDb25maWcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzQXBpT3JnQ29uZmlnUmVzdWx0cyhkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ3M6IGRhdGEuY29uZmlnc1xuICAgICAgLm1hcCgoY29uZmlnKSA9PiB2YWxpZGF0ZU9yZ2FuaXphdGlvbkNvbmZpZyhjb25maWcpKVxuICAgICAgLmZpbHRlcigoY29uZmlnKTogY29uZmlnIGlzIE9yZ2FuaXphdGlvbkNvbmZpZyA9PiBjb25maWcgIT0gbnVsbCksXG4gICAgZXhwZXJpbWVudHM6IGRhdGEuZXhwZXJpbWVudHMubWFwKChleHBlcmltZW50KSA9PiAoe1xuICAgICAgZ3JvdXA6IGV4cGVyaW1lbnQuZ3JvdXAsXG4gICAgICBncm91cE5hbWU6IGV4cGVyaW1lbnQuZ3JvdXBfbmFtZSxcbiAgICAgIG5hbWU6IGV4cGVyaW1lbnQubmFtZSxcbiAgICAgIHJ1bGVJZDogZXhwZXJpbWVudC5ydWxlX2lkLFxuICAgICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHN0cm9uZ2x5IHR5cGVkIGJ1dCB3ZSdyZSBub3QgcnVubmluZyBhbnkgZXhwZXJpbWVudHMgYXQgdGhlIG1vbWVudFxuICAgICAgdmFsdWU6IGV4cGVyaW1lbnQudmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgfSkpLFxuICAgIGdhdGVzOiBkYXRhLmdhdGVzLm1hcCgoZ2F0ZSkgPT4gKHtcbiAgICAgIGdyb3VwTmFtZTogZ2F0ZS5ncm91cF9uYW1lLFxuICAgICAgbmFtZTogZ2F0ZS5uYW1lLFxuICAgICAgcnVsZUlkOiBnYXRlLnJ1bGVfaWQsXG4gICAgICB2YWx1ZTogZ2F0ZS52YWx1ZSxcbiAgICB9KSksXG4gICAgb3JnOiB7XG4gICAgICBvcmc6IHtcbiAgICAgICAgaWQ6IGRhdGEub3JnLm9yZy5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGRhdGEub3JnLm9yZy5kaXNwbGF5X25hbWUsXG4gICAgICAgIGRvbWFpbjogZGF0YS5vcmcub3JnLmRvbWFpbixcbiAgICAgICAgc2hvcnROYW1lOiBkYXRhLm9yZy5vcmcuc2hvcnRfbmFtZSxcbiAgICAgICAgc3RhdHVzOiBkYXRhLm9yZy5vcmcuc3RhdHVzLFxuICAgICAgICBjcmVhdGVkQXQ6IGRhdGEub3JnLm9yZy5jcmVhdGVkX2F0Py50b0lTT1N0cmluZygpLFxuICAgICAgICB1cGRhdGVkQXQ6IGRhdGEub3JnLm9yZy51cGRhdGVkX2F0Py50b0lTT1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIHNldHRpbmdzOiB7fSxcbiAgICB9LFxuICB9O1xufTtcbiIsImltcG9ydCB7IFJlc3BvbnNlQ2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgUmVzcG9uc2UsIFJldmlld1JpY2hJbmZvcm1hdGlvbiB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvaW5kZXgnO1xuaW1wb3J0IHsgQXBpUmV2aWV3UmljaEluZm9ybWF0aW9uIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5pbXBvcnQgeyBpc0FwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgaXNBcGlSZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVJlc3BvbnNlJztcbmltcG9ydCB7IGlzQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgaXNBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFNlYXJjaEF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgaXNBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVJlc3BvbnNlJztcbmltcG9ydCB7IGlzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcyc7XG5pbXBvcnQgeyBzdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbHMvc3RyaW5nVG9GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNFbnVtVmFsdWUnO1xuaW1wb3J0IHsgaXNBcGlQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFNlYXJjaEZpbHRlckF0dHJpYnV0ZXMnO1xuXG5jb25zdCByaWNoSW5mb3JtYXRpb25Gcm9tQ29tbWVyY2VSaWNoSW5mb3JtYXRpb24gPSAoXG4gIGRhdGE6IEFwaVJldmlld1JpY2hJbmZvcm1hdGlvbixcbik6IFJldmlld1JpY2hJbmZvcm1hdGlvbiA9PiAoe1xuICBjb25zOiBkYXRhLmNvbnMsXG4gIHByb3M6IGRhdGEucHJvcyxcbiAgcmV2aWV3RGF0ZTogZGF0YS5yZXZpZXdfZGF0ZSxcbiAgcmV2aWV3ZXJUaXRsZTogZGF0YS5yZXZpZXdlcl90aXRsZSxcbiAgcHJvZHVjdEZhbWlsaWFyaXR5OiBkYXRhLnByb2R1Y3RfZmFtaWxpYXJpdHksXG59KTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUmVzcG9uc2UgPSAoZGF0YTogdW5rbm93bik6IFJlc3BvbnNlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaVJlc3BvbnNlKGRhdGEpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlRleHQgJiYgaXNBcGlUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlRleHQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNvbnRlbnQ6IGRhdGEuYXR0cmlidXRlcy5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdCAmJlxuICAgIGlzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgaWQ6IGRhdGEuYXR0cmlidXRlcy5pZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuYXR0cmlidXRlcy5kZXNjcmlwdGlvbixcbiAgICAgICAgaW1hZ2VVcmw6IGRhdGEuYXR0cmlidXRlcy5pbWFnZV91cmwsXG4gICAgICAgIGltYWdlVXJsczogZGF0YS5hdHRyaWJ1dGVzLmltYWdlX3VybHMsXG4gICAgICAgIHRpdGxlOiBkYXRhLmF0dHJpYnV0ZXMudGl0bGUsXG4gICAgICAgIHVybDogZGF0YS5hdHRyaWJ1dGVzLnVybCxcbiAgICAgICAgb3JpZ2luYWxQcmljZTogZGF0YS5hdHRyaWJ1dGVzLm9yaWdpbmFsX3ByaWNlLFxuICAgICAgICBzYWxlUHJpY2U6IGRhdGEuYXR0cmlidXRlcy5zYWxlX3ByaWNlLFxuICAgICAgICBhdmVyYWdlUmF0aW5nOiBkYXRhLmF0dHJpYnV0ZXMuYXZlcmFnZV9yYXRpbmcsXG4gICAgICAgIG51bWJlclJldmlld3M6IGRhdGEuYXR0cmlidXRlcy5udW1iZXJfcmV2aWV3cyxcbiAgICAgICAgbWV0YWRhdGE6IGRhdGEuYXR0cmlidXRlcy5tZXRhZGF0YSxcbiAgICAgICAgaXNGb3JHcmlkOiBkYXRhLmF0dHJpYnV0ZXMuaXNfZm9yX2dyaWQsXG4gICAgICAgIGNvbG9yczogZGF0YS5hdHRyaWJ1dGVzLmNvbG9ycyxcbiAgICAgICAgc2l6ZXM6IGRhdGEuYXR0cmlidXRlcy5zaXplcyxcbiAgICAgICAgZmlsdGVyczogZGF0YS5hdHRyaWJ1dGVzLmZpbHRlcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5SZXZpZXcgJiYgaXNBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKSkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUmV2aWV3LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBpZDogZGF0YS5hdHRyaWJ1dGVzLmlkLFxuICAgICAgICBwcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2lkLFxuICAgICAgICB0aXRsZTogZGF0YS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICByZXZpZXdlcjogZGF0YS5hdHRyaWJ1dGVzLnJldmlld2VyLFxuICAgICAgICByZXZpZXc6IGRhdGEuYXR0cmlidXRlcy5yZXZpZXcsXG4gICAgICAgIHN0YXJzOiBkYXRhLmF0dHJpYnV0ZXMuc3RhcnMsXG4gICAgICAgIHJpY2hJbmZvcm1hdGlvbjogZGF0YS5hdHRyaWJ1dGVzLnJpY2hfaW5mb3JtYXRpb25cbiAgICAgICAgICA/IHJpY2hJbmZvcm1hdGlvbkZyb21Db21tZXJjZVJpY2hJbmZvcm1hdGlvbihkYXRhLmF0dHJpYnV0ZXMucmljaF9pbmZvcm1hdGlvbilcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlNlcGFyYXRvcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuU2VwYXJhdG9yLFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5QYWdlICYmIGlzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5QYWdlLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBpZDogZGF0YS5hdHRyaWJ1dGVzLmlkLFxuICAgICAgICB0aXRsZTogZGF0YS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5hdHRyaWJ1dGVzLmRlc2NyaXB0aW9uLFxuICAgICAgICB1cmw6IGRhdGEuYXR0cmlidXRlcy51cmwsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Gb3JtICYmIGlzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Gb3JtLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBmb3JtQ2F0ZWdvcnk6IGRhdGEuYXR0cmlidXRlcy5mb3JtX2NhdGVnb3J5XG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGZvcm1UeXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybV9jYXRlZ29yeS5mb3JtX3R5cGUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIHByb3BlcnRpZXM6IGRhdGEuYXR0cmlidXRlcy5zY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICByZXF1aXJlZDogZGF0YS5hdHRyaWJ1dGVzLnNjaGVtYS5yZXF1aXJlZC5tYXAoU3RyaW5nKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3RTZWFyY2ggJiZcbiAgICBpc0FwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3RTZWFyY2gsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGdlbmVyYXRlZFF1ZXJ5OiBkYXRhLmF0dHJpYnV0ZXMuZ2VuZXJhdGVkX3F1ZXJ5LFxuICAgICAgICBwcm9kdWN0Q291bnQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2NvdW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlciAmJlxuICAgIGlzQXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlcixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZmlsdGVyTmFtZTogZGF0YS5hdHRyaWJ1dGVzLmZpbHRlcl9uYW1lLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuT3JkZXIgJiYgaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5PcmRlcixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgb3JkZXJJZDogZGF0YS5hdHRyaWJ1dGVzLm9yZGVyX2lkLFxuICAgICAgICBvcmRlck51bWJlcjogZGF0YS5hdHRyaWJ1dGVzLm9yZGVyX251bWJlcixcbiAgICAgICAgY3JlYXRlZEF0OiBkYXRhLmF0dHJpYnV0ZXMuY3JlYXRlZF9hdCxcbiAgICAgICAgbGF0ZXN0RXZlbnREYXRlOiBkYXRhLmF0dHJpYnV0ZXMubGF0ZXN0X2V2ZW50X2RhdGUsXG4gICAgICAgIGxpbmVJdGVtczogZGF0YS5hdHRyaWJ1dGVzLmxpbmVfaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgIGl0ZW1UaXRsZTogaXRlbS5pdGVtX3RpdGxlLFxuICAgICAgICAgIGl0ZW1QcmljZTogaXRlbS5pdGVtX3ByaWNlLFxuICAgICAgICAgIGl0ZW1RdWFudGl0eTogaXRlbS5pdGVtX3F1YW50aXR5LFxuICAgICAgICAgIG9yZGVySXRlbUlkOiBpdGVtLm9yZGVyX2l0ZW1faWQsXG4gICAgICAgICAgaW1hZ2U6IGl0ZW0uaW1hZ2UgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIGluVHJhbnNpdEF0OiBpdGVtLmluX3RyYW5zaXRfYXQgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIGRlbGl2ZXJlZEF0OiBpdGVtLmRlbGl2ZXJlZF9hdCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgZXN0aW1hdGVkRGVsaXZlcnlBdDogaXRlbS5lc3RpbWF0ZWRfZGVsaXZlcnlfYXQgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIGZ1bGZpbGxtZW50RGlzcGxheVN0YXR1czogaXRlbS5mdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1c1xuICAgICAgICAgICAgPyBzdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZShpdGVtLmZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdHJhY2tpbmdVcmw6IGl0ZW0udHJhY2tpbmdfdXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBpc1N1Z2dlc3Rpb24gfSBmcm9tICcuLi9ndWFyZHMvYXBpL2lzQXBpU3VnZ2VzdGlvbic7XG5pbXBvcnQgeyBTdWdnZXN0aW9uIH0gZnJvbSAnLi4vYXBpL3N1Z2dlc3Rpb24nO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdWdnZXN0aW9uID0gKGRhdGE6IHVua25vd24pOiBTdWdnZXN0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc1N1Z2dlc3Rpb24oZGF0YSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogZGF0YS5pZCxcbiAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICBjb250ZW50OiBkYXRhLmNvbnRlbnQsXG4gICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgaXNBbnN3ZXI6IGRhdGEuaXNfYW5zd2VyLFxuICB9O1xufTtcbiIsImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IGlzQXBpVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpVXNlckV2ZW50JztcbmltcG9ydCB7IFVzZXJFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvaW5kZXgnO1xuaW1wb3J0IHsgaXNBcGlQRFBBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUERQRXZlbnRBdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzQXBpUXVlcnlUeXBlZEF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlRdWVyeVR5cGVkRXZlbnRBdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzQXBpU2VhcmNoQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVNlYXJjaEV2ZW50QXR0cmlidXRlcyc7XG5pbXBvcnQgeyBpc0FwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVN1Z2dlc3Rpb25DbGlja2VkRXZlbnRBdHRyaWJ1dGVzJztcbmltcG9ydCB7XG4gIGlzQXBpUExQRXZlbnRBdHRyaWJ1dGVzLFxuICBpc0FwaVBMUElkQXR0cmlidXRlLFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQTFBFdmVudEF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcyc7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVVzZXJFdmVudCA9IChkYXRhOiB1bmtub3duKTogVXNlckV2ZW50IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaVVzZXJFdmVudChkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgJiYgaXNBcGlQRFBBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2lkLFxuICAgICAgICBwYXJlbnRQcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wYXJlbnRfcHJvZHVjdF9pZCxcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQgJiZcbiAgICBpc0FwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50SWQ6IGRhdGEuZXZlbnRfaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBxdWVyeTogZGF0YS5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCAmJiBpc0FwaVNlYXJjaEF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKSkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiBkYXRhLmV2ZW50X2lkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzZWFyY2hUZXJtOiBkYXRhLmF0dHJpYnV0ZXMuc2VhcmNoX3Rlcm0sXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogZGF0YS5hdHRyaWJ1dGVzLnNlbGVjdGVkX2ZpbHRlcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQgJiZcbiAgICBpc0FwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiBkYXRhLmV2ZW50X2lkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHN1Z2dlc3Rpb25JZDogZGF0YS5hdHRyaWJ1dGVzLnN1Z2dlc3Rpb25faWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQgJiYgaXNBcGlQTFBFdmVudEF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKSkge1xuICAgIGlmIChpc0FwaVBMUElkQXR0cmlidXRlKGRhdGEuYXR0cmlidXRlcykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV2ZW50SWQ6IGRhdGEuZXZlbnRfaWQsXG4gICAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjYXRlZ29yeTogZGF0YS5hdHRyaWJ1dGVzLmNhdGVnb3J5LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGlkOiBkYXRhLmF0dHJpYnV0ZXMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQgJiZcbiAgICBpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGZpbGxlZFNjaGVtYTogeyAuLi5kYXRhLmF0dHJpYnV0ZXMuZmlsbGVkX3NjaGVtYSB9LFxuICAgICAgICBmb3JtUmVzcG9uc2VJZDogZGF0YS5hdHRyaWJ1dGVzLmZvcm1fcmVzcG9uc2VfaWQsXG4gICAgICAgIGZvcm1UeXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybV90eXBlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gd2UncmUgbm90IHVzaW5nIGFwcF91bmxvYWRlZCBhdCB0aGUgbW9tZW50IHNvIHJldHVybiB0aGUgYXBwX2xvYWRlZCBldmVudCBhcyBkZWZhdWx0XG4gIHJldHVybiB7XG4gICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwTG9hZGVkLFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLElBQVksb0ZBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUNwQkYsSUFBWSw4REFBTDtBQUNMO0FBQ0E7Ozs7OztBQ0hGLElBQUssMEVBQUw7QUFDRTtBQUNBOztFQUZHOzs7O0FDYUwsSUFBWSxzREFBTDtBQUNMO0FBQ0E7OztBQUdGLElBQVksc0RBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUNoQ0YsTUFBYSxlQUFlO0NBQzFCLFNBQVM7Q0FDVCxrQkFBa0I7Q0FDbEIsVUFBVTtDQUNWLGFBQWE7Q0FDYixnQkFBZ0I7Q0FDaEIsa0JB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
1286
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLUM5X080N1g0LmpzIiwibmFtZXMiOlsicmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIm5vcm1hbGl6ZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IiwicmVzdWx0OiBXaWRnZXRNb3VudGluZ0NvbmZpZyIsInZhbGlkYXRlZFBhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSIsIm1vdW50aW5nQ29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+Iiwid2lkZ2V0Q29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ldmVudHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2dvb2dsZUFuYWx5dGljc0V2ZW50cy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvbWVzc2FnZS50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvb3Jnc0VudW0udHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9zcGlmZnlXaWRnZXRzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNCYXNlRWNvbW1lcmNlRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0dBNEVjb21tZXJjZUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlci50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzVmFyaWFudEluZm8udHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlGb3JtUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlPcmdhbml6YXRpb25Db25maWcudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlPcmdDb25maWdSZXN1bHRzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVBMUEV2ZW50QXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVByb2R1Y3RTZWFyY2hGaWx0ZXJBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvZ3JhcGhRTC9pc0dyYXBoUUxDb2xvcnNDb25maWcudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZS50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxDb2xvcnNDb25maWcudHMiLCIuLi9zcmMvbWVyY2hhbnRzL2RvbUluc2VydGlvbi50cyIsIi4uL3NyYy9tZXJjaGFudHMvZ3JpZEluc2VydGlvbi50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxPcmdJZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdhbml6YXRpb25Db25maWcudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVTdWdnZXN0aW9uLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlVXNlckV2ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENoYXQgZWxlbWVudCBkaXNwbGF5IGxvY2F0aW9uIGVudW1cbmV4cG9ydCBlbnVtIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uIHtcbiAgSU5fQ0hBVCA9ICdpbl9jaGF0JyxcbiAgQ0hBVF9QUkVWSUVXID0gJ2NoYXRfcHJldmlldycsXG4gIEZMT0FUSU5HX0JVVFRPTiA9ICdmbG9hdGluZ19idXR0b24nLFxuICBIRUxQX01FX0NIT09TRSA9ICdoZWxwX21lX2Nob29zZScsXG4gIFBMUF9JTUFHRV9CQU5ORVIgPSAncGxwX2ltYWdlX2Jhbm5lcicsXG4gIFRPUF9SRVZJRVdTX1NOSVBQRVQgPSAndG9wX3Jldmlld3Nfc25pcHBldCcsXG4gIEJPVFRPTV9SRVZJRVdTX1NOSVBQRVQgPSAnYm90dG9tX3Jldmlld3Nfc25pcHBldCcsXG4gIEJMT0NLX0JBQ0tfQlVUVE9OID0gJ2Jsb2NrX2JhY2tfYnV0dG9uJyxcbiAgU1dJVENIX1RPX0FHRU5UID0gJ3N3aXRjaF90b19hZ2VudCcsXG4gIENPTlZFUlNBVElPTkFMX1NFQVJDSCA9ICdjb252ZXJzYXRpb25hbF9zZWFyY2gnLFxuICBHTE9CQUxfU0VBUkNIX0VOVFJZUE9JTlQgPSAnZ2xvYmFsX3NlYXJjaF9lbnRyeXBvaW50JyxcbiAgU0VBUkNIX05BVl9FTlRSWVBPSU5UID0gJ3NlYXJjaF9uYXZfZW50cnlwb2ludCcsXG4gIFNFQVJDSF9QUk9NUFQgPSAnc2VhcmNoX3Byb21wdCcsXG4gIFNFQVJDSF9aRVJPX1NUQVRFX1NVR0dFU1RFRF9QUk9EVUNUUyA9ICdzZWFyY2hfemVyb19zdGF0ZV9zdWdnZXN0ZWRfcHJvZHVjdHMnLFxuICBTRUFSQ0hfUFJPTVBUX0JVVFRPTiA9ICdzZWFyY2hfcHJvbXB0X2J1dHRvbicsXG4gIFBST0RVQ1RfR1JJRCA9ICdwcm9kdWN0X2dyaWQnLFxuICBVTlNQRUNJRklFRCA9ICd1bnNwZWNpZmllZCcsXG4gIEZJTFRFUl9NT0RBTCA9ICdmaWx0ZXJfbW9kYWwnLFxuICBQUk9NUFRfQ0FSRCA9ICdwcm9tcHRfY2FyZCcsXG4gIFdJTkRPV19BUElfQ0FMTCA9ICd3aW5kb3dfYXBpX2NhbGwnLFxufVxuIiwiLy8gbmFtZXMgb2YgU3BpZmZ5IHNwZWNpZmljIEhUTUwgZXZlbnRzXG5leHBvcnQgZW51bSBTcGlmZnlFdmVudE5hbWUge1xuICBXaWRnZXRPcGVuID0gJ3NwaWZmeTp3aWRnZXRvcGVuJyxcbiAgV2lkZ2V0Q2xvc2UgPSAnc3BpZmZ5OndpZGdldGNsb3NlJyxcbn1cbiIsImVudW0gR29vZ2xlQW5hbHl0aWNzRXZlbnRzIHtcbiAgQUREX1RPX0NBUlRfdjEgPSAnYWRkX3RvX2NhcnQnLFxuICBBRERfVE9fQ0FSVF92MiA9ICdhZGRUb0NhcnQnLFxufVxuXG5leHBvcnQge1xuICBHb29nbGVBbmFseXRpY3NFdmVudHNcbn0iLCJpbXBvcnQgeyBDdXN0U2VydmljZUF0dGFjaG1lbnQsIEZvcm1UeXBlIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7XG4gIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLFxuICBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzLFxuICBSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMsXG4gIFBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMsXG4gIFRleHRSZXNwb25zZUF0dHJpYnV0ZXMsXG4gIFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyxcbiAgU2VhcmNoUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyxcbiAgQWNjZXB0YWJsZUZvcm1GaWVsZFR5cGUsXG4gIFNlYXJjaFByb2R1Y3RGaWx0ZXJBdHRyaWJ1dGVzLFxufSBmcm9tICcuL2FwaS9yZXNwb25zZSc7XG5cbmV4cG9ydCBlbnVtIE1lc3NhZ2VSb2xlIHtcbiAgVXNlciA9ICd1c2VyJyxcbiAgQXNzaXN0YW50ID0gJ2Fzc2lzdGFudCcsXG59XG5cbmV4cG9ydCBlbnVtIE1lc3NhZ2VUeXBlIHtcbiAgVGV4dCA9ICd0ZXh0JyxcbiAgU3VnZ2VzdGlvbkNsaWNrZWQgPSAnc3VnZ2VzdGlvbl9jbGlja2VkJyxcbiAgUHJvZHVjdCA9ICdwcm9kdWN0JyxcbiAgUHJvZHVjdFNlYXJjaCA9ICdwcm9kdWN0X3NlYXJjaCcsXG4gIFJldmlldyA9ICdyZXZpZXcnLFxuICBRdWVyeVR5cGVkID0gJ3F1ZXJ5X3R5cGVkJyxcbiAgU2VwYXJhdG9yID0gJ3NlcGFyYXRvcicsXG4gIFBhZ2UgPSAncGFnZScsXG4gIFNlYXJjaCA9ICdzZWFyY2gnLFxuICBBdHRhY2htZW50ID0gJ2F0dGFjaG1lbnQnLFxuICBDWEFnZW50UmVzcG9uc2UgPSAnY3hfYWdlbnRfcmVzcG9uc2UnLFxuICBGb3JtID0gJ2Zvcm0nLFxuICBPcmRlciA9ICdvcmRlcicsXG4gIFByb2R1Y3RTZWFyY2hGaWx0ZXIgPSAncHJvZHVjdF9zZWFyY2hfZmlsdGVyJyxcbn1cblxuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcm9sZTogTWVzc2FnZVJvbGU7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xufSAmIChcbiAgfCBUZXh0TWVzc2FnZU1ldGFkYXRhXG4gIHwgUXVlcnlUeXBlZE1ldGFkYXRhXG4gIHwgU3VnZ2VzdGlvbk1lc3NhZ2VNZXRhZGF0YVxuICB8IFByb2R1Y3RNZXNzYWdlTWV0YWRhdGFcbiAgfCBQcm9kdWN0U2VhcmNoTWVzc2FnZU1ldGFkYXRhXG4gIHwgUmV2aWV3TWVzc2FnZU1ldGFkYXRhXG4gIHwgU2VwYXJhdG9yTWVzc2FnZU1ldGFkYXRhXG4gIHwgUGFnZU1lc3NhZ2VNZXRhZGF0YVxuICB8IFNlYXJjaE1lc3NhZ2VNZXRhZGF0YVxuICB8IEF0dGFjaG1lbnRNZXRhZGF0YVxuICB8IENYQWdlbnRSZXNwb25zZU1ldGFkYXRhXG4gIHwgRm9ybU1lc3NhZ2VNZXRhZGF0YVxuICB8IE9yZGVyTWVzc2FnZU1ldGFkYXRhXG4gIHwgUHJvZHVjdFNlYXJjaEZpbHRlck1ldGFkYXRhXG4pO1xuXG50eXBlIEF0dGFjaG1lbnRNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuQXR0YWNobWVudDtcbiAgbWV0YWRhdGE6IHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIGF0dGFjaG1lbnQ6IEN1c3RTZXJ2aWNlQXR0YWNobWVudFtdO1xuICB9O1xufTtcblxudHlwZSBDWEFnZW50UmVzcG9uc2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuQ1hBZ2VudFJlc3BvbnNlO1xuICBtZXRhZGF0YToge1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBhZ2VudE5hbWU6IHN0cmluZztcbiAgfTtcbn07XG5cbnR5cGUgVGV4dE1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dDtcbiAgbWV0YWRhdGE6IFRleHRSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5cbnR5cGUgUXVlcnlUeXBlZE1ldGFkYXRhID0ge1xuICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkO1xuICBtZXRhZGF0YTogVGV4dFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcblxudHlwZSBTdWdnZXN0aW9uTWVzc2FnZU1ldGFkYXRhID0ge1xuICB0eXBlOiBNZXNzYWdlVHlwZS5TdWdnZXN0aW9uQ2xpY2tlZDtcbiAgbWV0YWRhdGE6IHtcbiAgICBzdWdnZXN0aW9uSWQ6IHN0cmluZztcbiAgICBzdWdnZXN0aW9uQ29udGVudDogc3RyaW5nO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgUHJvZHVjdE1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdDtcbiAgbWV0YWRhdGE6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3RTZWFyY2hNZXNzYWdlTWV0YWRhdGEgPSB7XG4gIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2g7XG4gIG1ldGFkYXRhOiBTZWFyY2hQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xuXG50eXBlIFJldmlld01lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuUmV2aWV3O1xuICBtZXRhZGF0YTogUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xuXG50eXBlIFNlcGFyYXRvck1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuU2VwYXJhdG9yO1xufTtcblxudHlwZSBQYWdlTWVzc2FnZU1ldGFkYXRhID0ge1xuICB0eXBlOiBNZXNzYWdlVHlwZS5QYWdlO1xuICBtZXRhZGF0YTogUGFnZVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcblxudHlwZSBTZWFyY2hNZXNzYWdlTWV0YWRhdGEgPSB7XG4gIHR5cGU6IE1lc3NhZ2VUeXBlLlNlYXJjaDtcbiAgbWV0YWRhdGE6IFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcblxudHlwZSBQcm9kdWN0U2VhcmNoRmlsdGVyTWV0YWRhdGEgPSB7XG4gIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hGaWx0ZXI7XG4gIG1ldGFkYXRhOiBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlc1snYXR0cmlidXRlcyddO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUZpZWxkID0ge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogQWNjZXB0YWJsZUZvcm1GaWVsZFR5cGU7XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICAvLyB0aGlzIGlzIHRoZSBvbmx5IGZvcm1hdCB3ZSBjdXJyZW50bHkgc3VwcG9ydFxuICBmb3JtYXQ/OiAnZW1haWwnO1xuICB2YWx1ZT86IHN0cmluZztcbn07XG5cbnR5cGUgRm9ybU1lc3NhZ2VNZXRhZGF0YSA9IHtcbiAgdHlwZTogTWVzc2FnZVR5cGUuRm9ybTtcbiAgbWV0YWRhdGE6IHtcbiAgICBmb3JtVHlwZT86IEZvcm1UeXBlO1xuICAgIGZpZWxkczogRm9ybUZpZWxkW107XG4gIH07XG59O1xuXG50eXBlIE9yZGVyTWVzc2FnZU1ldGFkYXRhID0ge1xuICB0eXBlOiBNZXNzYWdlVHlwZS5PcmRlcjtcbiAgbWV0YWRhdGE6IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ107XG59O1xuIiwiZXhwb3J0IGNvbnN0IE9yZ1Nob3J0TmFtZSA9IHtcbiAgQ290ZXJpZTogJ2NvdGVyaWUnLFxuICBGb3JMb3ZlQW5kTGVtb25zOiAnZm9yLWxvdmUtYW5kLWxlbW9ucycsXG4gIEdyZWVucGFuOiAnZ3JlZW5wYW4nLFxuICBKb3JkYW5DcmFpZzogJ2pvcmRhbi1jcmFpZycsXG4gIExhcnJ5QW5kU2VyZ2VzOiAnbGFycnlfYW5kX3NlcmdlcycsXG4gIExlYXBzQW5kUmVib3VuZHM6ICdsZWFwcy1hbmQtcmVib3VuZHMnLFxuICBNYW50cmFCcmFuZDogJ21hbnRyYS1icmFuZCcsXG4gIFNwYW54OiAnc3BhbngnLFxuICBTcGFueFN0YWdpbmc6ICdzdGFnaW5nLXNwYW54JyxcbiAgU3VwZXJnb29wOiAnc3VwZXJnb29wJyxcbiAgVW5pcXVlVmludGFnZTogJ3VuaXF1ZS12aW50YWdlJyxcbiAgSmFja0FyY2hlcjogJ2phY2stYXJjaGVyJyxcbiAgLyogLS0gQmVsb3cgaXRlbXMgYXJlIGdlbmVyYXRlZCBieSBwbG9wIC0tICovXG4gIFNraW5QZXJmZWN0aW9uOiAnc2tpbi1wZXJmZWN0aW9uJyxcbiAgTG9va09wdGljOiAnbG9vay1vcHRpYycsXG4gIEZpdmVDYmQ6ICdmaXZlLWNiZCcsXG4gIFNuYXBTdXBwbGVtZW50czogJ3NuYXAtc3VwcGxlbWVudHMnLFxuICBMb25nZXZpdHlyeDogJ2xvbmdldml0eXJ4JyxcbiAgVmVuYUNiZDogJ3ZlbmEtY2JkJyxcbiAgTWVkdGVycmE6ICdtZWR0ZXJyYScsXG4gIE1vZGVsbHM6ICdtb2RlbGxzJyxcbiAgUHJlc3NlZEZsb3JhbDogJ3ByZXNzZWQtZmxvcmFsJyxcbiAgS2luZHJlZEJyYXZlbHk6ICdraW5kcmVkLWJyYXZlbHknLFxuICBXaW5lRW50aHVzaWFzdDogJ3dpbmUtZW50aHVzaWFzdCcsXG4gIEhvbWVncm93bkNhbm5hYmlzOiAnaG9tZWdyb3duLWNhbm5hYmlzJyxcbiAgRHJlYW1sYW5kQmFieTogJ2RyZWFtbGFuZC1iYWJ5JyxcbiAgQmFuZG9saWVyOiAnYmFuZG9saWVyJyxcbiAgV2VzdG9uSm9uQm91Y2hlcjogJ3dlc3Rvbi1qb24tYm91Y2hlcicsXG4gIEt1dEZyb21UaGVLbG90aDogJ2t1dC1mcm9tLXRoZS1rbG90aCcsXG4gIEdyb292ZUxpZmU6ICdncm9vdmUtbGlmZScsXG4gIENhcnBlOiAnY2FycGUnLFxuICBXb2xmVGFjdGljYWw6ICd3b2xmLXRhY3RpY2FsJyxcbiAgV29sZk1hdHRyZXNzOiAnd29sZm1hdHRyZXNzJyxcbiAgRGVmYXVsdDogJ2RlZmF1bHQnLFxufSBhcyBjb25zdDtcbiIsImV4cG9ydCBlbnVtIFByb2R1Y3RFeHBlcmltZW50IHtcbiAgLy8gRGVmYXVsdCBpcyBvbmx5IHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGVudW0gaXMgbm9uLWVtcHR5LCBvdGhlcndpc2VcbiAgLy8gY2FsbGVycyB0aGF0IHRyeSB0byB1c2UgdGhpcyBlbnVtIHdpbGwgZ2VuZXJhdGUgYSB0eXBlc2NyaXB0IGVycm9yXG4gIERlZmF1bHQgPSAnZGVmYXVsdCcsXG59XG4iLCIvKipcbiAqIEVudW0gb2YgYWxsIHdpZGdldCBuYW1lcy4gVGhlc2UgYXJlIHdpZGdldHMgdGhhdCBhcmUgcmVuZGVyZWQgYW5kIGludGVncmF0ZWQgaW50b1xuICogYSBtZXJjaGFudCdzIHdlYnNpdGUuXG4gKi9cbmV4cG9ydCBlbnVtIFNwaWZmeVdpZGdldHMge1xuICBJbWFnZUJhbm5lciA9ICdpbWFnZV9iYW5uZXInLFxuICBJbWFnZVByb21wdENhcmQgPSAnaW1hZ2VfcHJvbXB0X2NhcmQnLFxuICBTaW5nbGVJbWFnZVByb21wdCA9ICdzaW5nbGVfaW1hZ2VfcHJvbXB0JyxcbiAgRW1iZWRkZWRXaWRnZXQgPSAnZW1iZWRkZWRfd2lkZ2V0JyxcbiAgRmxvYXRpbmdCdXR0b24gPSAnZmxvYXRpbmdfYnV0dG9uJyxcbiAgU3VnZ2VzdGlvbkJhciA9ICdzdWdnZXN0aW9uX2JhcicsXG4gIFNlYXJjaFByb21wdCA9ICdzZWFyY2hfcHJvbXB0JyxcbiAgR2xvYmFsU2VhcmNoID0gJ2dsb2JhbF9zZWFyY2gnLFxuICBTZWFyY2hSZXN1bHRzID0gJ3NlYXJjaF9yZXN1bHRzJyxcbiAgR2xvYmFsU2VhcmNoRW50cnlQb2ludCA9ICdnbG9iYWxfc2VhcmNoX2VudHJ5X3BvaW50JyxcbiAgU2VhcmNoWmVyb1N0YXRlID0gJ3NlYXJjaF96ZXJvX3N0YXRlJyxcblxufVxuIiwiaW1wb3J0IHR5cGUgeyBCYXNlRWNvbW1lcmNlRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgYSBiYXNlIEdvb2dsZSBBbmFseXRpY3MgZWNvbW1lcmNlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBldmVudCB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBpcyBhIGJhc2UgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Jhc2VFY29tbWVyY2VFdmVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBCYXNlRWNvbW1lcmNlRXZlbnQgPT5cbiAgZGF0YSAhPSBudWxsICYmXG4gIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAnZWNvbW1lcmNlJyBpbiBkYXRhICYmXG4gIGRhdGEuZWNvbW1lcmNlICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEuZWNvbW1lcmNlID09PSAnb2JqZWN0JyAmJlxuICAnZXZlbnQnIGluIGRhdGEgJiZcbiAgdHlwZW9mIGRhdGEuZXZlbnQgPT09ICdzdHJpbmcnO1xuIiwiaW1wb3J0IHR5cGUgeyBHQTRFY29tbWVyY2VFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIEdvb2dsZSBBbmFseXRpY3MgNCBlY29tbWVyY2UgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIGV2ZW50IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGEgR0E0IGVjb21tZXJjZSBldmVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgaXNHQTRFY29tbWVyY2VFdmVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBHQTRFY29tbWVyY2VFdmVudCA9PlxuICB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiZcbiAgZGF0YSAhPSBudWxsICYmXG4gICdlY29tbWVyY2UnIGluIGRhdGEgJiZcbiAgZGF0YS5lY29tbWVyY2UgIT0gbnVsbCAmJlxuICB0eXBlb2YgZGF0YS5lY29tbWVyY2UgPT09ICdvYmplY3QnICYmXG4gICdpdGVtcycgaW4gZGF0YS5lY29tbWVyY2UgJiZcbiAgQXJyYXkuaXNBcnJheShkYXRhLmVjb21tZXJjZS5pdGVtcyk7XG4iLCJpbXBvcnQgdHlwZSB7IFVBRWNvbW1lcmNlRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgYSBsZWdhY3kgVW5pdmVyc2FsIEFuYWx5dGljcyBlY29tbWVyY2UgZXZlbnQuXG4gKlxuICogQHBhcmFtIGRhdGEgVGhlIGV2ZW50IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGEgbGVnYWN5IFVBIGVjb21tZXJjZSBldmVudCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50ID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFVBRWNvbW1lcmNlRXZlbnQgPT5cbiAgZGF0YSAhPSBudWxsICYmXG4gIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAnZWNvbW1lcmNlJyBpbiBkYXRhICYmXG4gIGRhdGEuZWNvbW1lcmNlICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEuZWNvbW1lcmNlID09PSAnb2JqZWN0JyAmJlxuICAnYWRkJyBpbiBkYXRhLmVjb21tZXJjZSAmJlxuICB0eXBlb2YgZGF0YS5lY29tbWVyY2UuYWRkID09PSAnb2JqZWN0JztcbiIsImludGVyZmFjZSBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIHtcbiAgcm93X2luZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgPSAoXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdmFsdWUgaXMgTW9iaWxlUGxwQ2hhdFBsYWNlbWVudFBhcmFtZXRlciA9PlxuICB2YWx1ZSAhPSBudWxsICYmXG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgJ3Jvd19pbmRleCcgaW4gdmFsdWUgJiZcbiAgdHlwZW9mIHZhbHVlLnJvd19pbmRleCA9PT0gJ251bWJlcic7XG4iLCJpbXBvcnQgeyBTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlciB9IGZyb20gJy4uL3NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyJztcblxuZXhwb3J0IGNvbnN0IGlzU3BhbnhUYWtlQVF1aXpDdGFQYXJhbWV0ZXIgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlciA9PlxuICB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3RleHQnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50ZXh0ID09PSAnc3RyaW5nJzsiLCJpbXBvcnQgeyBQYWdlVmlzaXRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBQRFBWYXJpYW50SW5mbywgUExQVmFyaWFudEluZm8sIFBhZ2VWaXNpdFZhcmlhbnRJbmZvLCBWYXJpYW50SW5mbyB9IGZyb20gJy4uL3ZhcmlhbnRJbmZvJztcblxuY29uc3QgaXNQRFBWYXJpYW50SW5mbyA9ICh2YXJpYW50SW5mbzogb2JqZWN0KTogdmFyaWFudEluZm8gaXMgUERQVmFyaWFudEluZm8gPT5cbiAgJ3ZhcmlhbnQnIGluIHZhcmlhbnRJbmZvICYmXG4gIHZhcmlhbnRJbmZvLnZhcmlhbnQgPT09ICdwZHAnICYmXG4gICdwcm9kdWN0SWQnIGluIHZhcmlhbnRJbmZvICYmXG4gIHR5cGVvZiB2YXJpYW50SW5mby5wcm9kdWN0SWQgPT09ICdzdHJpbmcnO1xuXG5jb25zdCBpc1BMUFZhcmlhbnRJbmZvID0gKHZhcmlhbnRJbmZvOiBvYmplY3QpOiB2YXJpYW50SW5mbyBpcyBQTFBWYXJpYW50SW5mbyA9PlxuICAndmFyaWFudCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdmFyaWFudEluZm8udmFyaWFudCA9PT0gJ3BscCcgJiZcbiAgJ3BscElkJyBpbiB2YXJpYW50SW5mbyAmJlxuICB0eXBlb2YgdmFyaWFudEluZm8ucGxwSWQgPT09ICdzdHJpbmcnO1xuXG5jb25zdCBpc1BhZ2VWaXNpdFZhcmlhbnRJbmZvID0gKHZhcmlhbnRJbmZvOiBvYmplY3QpOiB2YXJpYW50SW5mbyBpcyBQYWdlVmlzaXRWYXJpYW50SW5mbyA9PlxuICAndmFyaWFudCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdmFyaWFudEluZm8udmFyaWFudCA9PT0gJ3BhZ2VfdmlzaXQnICYmXG4gICd1cmwnIGluIHZhcmlhbnRJbmZvICYmXG4gIHR5cGVvZiB2YXJpYW50SW5mby51cmwgPT09ICdzdHJpbmcnICYmXG4gICdwYWdlVmlzaXRDYXRlZ29yeScgaW4gdmFyaWFudEluZm8gJiZcbiAgT2JqZWN0LnZhbHVlcyhQYWdlVmlzaXRDYXRlZ29yeSkuaW5jbHVkZXModmFyaWFudEluZm8ucGFnZVZpc2l0Q2F0ZWdvcnkgYXMgUGFnZVZpc2l0Q2F0ZWdvcnkpO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgdmFsaWQgVmFyaWFudEluZm8uXG4gKlxuICogQHBhcmFtIHZhcmlhbnRJbmZvIC0gVGhlIHVua25vd24gb2JqZWN0IHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGEgaXMgYSB2YWxpZCBWYXJpYW50SW5mbyBvYmplY3QsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzVmFyaWFudEluZm8gPSAodmFyaWFudEluZm86IHVua25vd24pOiB2YXJpYW50SW5mbyBpcyBWYXJpYW50SW5mbyA9PlxuICB2YXJpYW50SW5mbyAhPSBudWxsICYmXG4gIHR5cGVvZiB2YXJpYW50SW5mbyA9PT0gJ29iamVjdCcgJiZcbiAgJ3ZhcmlhbnRJZCcgaW4gdmFyaWFudEluZm8gJiZcbiAgKGlzUERQVmFyaWFudEluZm8odmFyaWFudEluZm8pIHx8XG4gICAgaXNQTFBWYXJpYW50SW5mbyh2YXJpYW50SW5mbykgfHxcbiAgICBpc1BhZ2VWaXNpdFZhcmlhbnRJbmZvKHZhcmlhbnRJbmZvKSk7XG4iLCJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBGb3JtVHlwZSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0eU9mVHlwZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzJztcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIHRoZSBwcm92aWRlZCBkYXRhIGhhcyB0aGUgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzICh3aXRoIHRoZSBjb3JyZWN0IHR5cGVzKSBvZlxuICogYSBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVcbiAqXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0YSBoYXMgdGhlIGNvcnJlY3QgcHJvcGVydGllcywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXMgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IGRhdGEgaXMgbnVsbCBvciBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnZm9ybV9jYXRlZ29yeScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5mb3JtX2NhdGVnb3J5ICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzOiBmb3JtX2NhdGVnb3J5IGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdmb3JtX2NhdGVnb3J5JyBpbiBkYXRhICYmIHR5cGVvZiBkYXRhLmZvcm1fY2F0ZWdvcnkgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKFxuICAgICAgIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEuZm9ybV9jYXRlZ29yeSwgJ2Zvcm1fdHlwZScsICdzdHJpbmcnKSB8fFxuICAgICAgIU9iamVjdC52YWx1ZXMoRm9ybVR5cGUpLmluY2x1ZGVzKGRhdGEuZm9ybV9jYXRlZ29yeS5mb3JtX3R5cGUgYXMgRm9ybVR5cGUpXG4gICAgKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAgICdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IGZvcm1fdHlwZSBpcyBtaXNzaW5nIG9yIG5vdCBhIHZhbGlkIGZvcm0gdHlwZScsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAge1xuICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ3NjaGVtYScsICdvYmplY3QnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzOiBzY2hlbWEgaXMgbWlzc2luZyBvciBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRPRE86IGFsc28gd2FubmEgdmFsaWRhdGUgdGhlIGZpZWxkcyBvZiBkYXRhLnNjaGVtYS5wcm9wZXJ0aWVzIGJ1dCBtaWdodCB3YW5uYSBjaGFuZ2UgdGhlIHNjaGVtYVxuICAvLyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgbmFtZSBhcyBhIGtleSBpbiB0aGUgb2JqZWN0XG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YS5zY2hlbWEsICdwcm9wZXJ0aWVzJywgJ29iamVjdCcpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogc2NoZW1hLnByb3BlcnRpZXMgaXMgbWlzc2luZyBvciBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEuc2NoZW1hLCAncmVxdWlyZWQnLCAnYXJyYXknKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IHNjaGVtYS5yZXF1aXJlZCBpcyBtaXNzaW5nIG9yIG5vdCBhbiBhcnJheScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IGRhdGEgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhZGF0YS5zY2hlbWEucmVxdWlyZWQuZXZlcnkoXG4gICAgICAoa2V5OiB1bmtub3duKSA9PiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkgaW4gZGF0YS5zY2hlbWEucHJvcGVydGllcyxcbiAgICApXG4gICkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IHNjaGVtYS5yZXF1aXJlZCBjb250YWlucyBpbnZhbGlkIHByb3BlcnR5IGtleXMnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzLCBGb3JtVHlwZSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0eU9mVHlwZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGlzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcyA9IChcbiAgZGF0YTogdW5rbm93bixcbik6IGRhdGEgaXMgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzJywgJ2RhdGEgaXMgbnVsbCBvciBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnZmlsbGVkX3NjaGVtYScsICdvYmplY3QnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzJywgJ2ZpbGxlZF9zY2hlbWEgaXMgbm90IGFuIG9iamVjdCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2Zvcm1fcmVzcG9uc2VfaWQnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzJyxcbiAgICAgICdmb3JtX3Jlc3BvbnNlX2lkIGlzIG5vdCBhIHN0cmluZycsXG4gICAgICBkYXRhLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2Zvcm1fdHlwZScgaW4gZGF0YSkgfHwgIU9iamVjdC52YWx1ZXMoRm9ybVR5cGUpLmluY2x1ZGVzKGRhdGEuZm9ybV90eXBlIGFzIEZvcm1UeXBlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMnLFxuICAgICAgJ2Zvcm1fdHlwZSBpcyBub3QgYSB2YWxpZCBmb3JtIHR5cGUgZW51bScsXG4gICAgICBkYXRhLFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgT3JkZXJJdGVtSW5mbywgT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgaGFzUHJvcGVydHlPZlR5cGUgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy91dGlscyc7XG5cbi8vIHRoZSBjbGllbnQgU0RLIGdlbmVyYXRlcyBkYXRlLXRpbWUgZm9ybWF0IHR5cGVzIGFzIGBEYXRlYCBidXQgdGhlIG9wZW5hcGkgdHlwZXNjcmlwdCBnZW5lcmF0b3Jcbi8vIGRvZXMgbm90IGNvcnJlY3RseSBkZXNlcmlhbGl6ZSBkYXRlLXRpbWUgdmFsdWVzIHNvIHRoZXkgYXJlIGFsd2F5cyBgc3RyaW5nYCBhdCBydW50aW1lIGluc3RlYWQgb2Zcbi8vIGBEYXRlYCBvYmplY3RzLiBUaGVzZSBpbnRlcmZhY2VzIG92ZXJyaWRlIHRoZSBTREsgdHlwZXMgc28gdGhhdCB3ZSBjYW4gdmFsaWRhdGUgYWdhaW5zdCB0aGUgYWN0dWFsXG4vLyBgc3RyaW5nYCB2YWx1ZXMuIGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuQVBJVG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IvaXNzdWVzLzkyNlxuZXhwb3J0IGludGVyZmFjZSBBcGlPcmRlckl0ZW1JbmZvXG4gIGV4dGVuZHMgT21pdDxPcmRlckl0ZW1JbmZvLCAnZGVsaXZlcmVkX2F0JyB8ICdlc3RpbWF0ZWRfZGVsaXZlcnlfYXQnIHwgJ2luX3RyYW5zaXRfYXQnPiB7XG4gIGRlbGl2ZXJlZF9hdD86IHN0cmluZztcbiAgZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0Pzogc3RyaW5nO1xuICBpbl90cmFuc2l0X2F0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzXG4gIGV4dGVuZHMgT21pdDxPcmRlclJlc3BvbnNlQXR0cmlidXRlcywgJ2NyZWF0ZWRfYXQnIHwgJ2xhdGVzdF9ldmVudF9kYXRlJyB8ICdsaW5lX2l0ZW1zJz4ge1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gIGxhdGVzdF9ldmVudF9kYXRlOiBzdHJpbmc7XG4gIGxpbmVfaXRlbXM6IEFwaU9yZGVySXRlbUluZm9bXTtcbn1cblxuY29uc3QgaXNBcGlPcmRlckl0ZW1JbmZvID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZGVySXRlbUluZm8gPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGJlIGFuIG9iamVjdCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ29yZGVyX2l0ZW1faWQnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIG9yZGVyX2l0ZW1faWQgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpdGVtX3RpdGxlJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvIG11c3QgaGF2ZSBhbiBpdGVtX3RpdGxlIHByb3BlcnR5JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnaXRlbV9wcmljZScsICdudW1iZXInKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGhhdmUgYW4gaXRlbV9wcmljZSBwcm9wZXJ0eScsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2l0ZW1fcXVhbnRpdHknLCAnbnVtYmVyJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIGl0ZW1fcXVhbnRpdHkgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpbWFnZScsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby5pbWFnZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdmdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1cycsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdPcmRlckl0ZW1JbmZvLmZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAndHJhY2tpbmdfdXJsJywgJ3N0cmluZycsIHRydWUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvLnRyYWNraW5nX3VybCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdkZWxpdmVyZWRfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uZGVsaXZlcmVkX2F0IG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2VzdGltYXRlZF9kZWxpdmVyeV9hdCcsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby5lc3RpbWF0ZWRfZGVsaXZlcnlfYXQgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2luX3RyYW5zaXRfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uaW5fdHJhbnNpdF9hdCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBiZSBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdjcmVhdGVkX2F0JywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgY3JlYXRlZF9hdCBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnbGF0ZXN0X2V2ZW50X2RhdGUnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYSBsYXRlc3RfZXZlbnRfZGF0ZSBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnbGluZV9pdGVtcycsICdhcnJheScpIHx8XG4gICAgIWRhdGEubGluZV9pdGVtcy5ldmVyeSgoaXRlbTogdW5rbm93bikgPT4gaXNBcGlPcmRlckl0ZW1JbmZvKGl0ZW0pKVxuICApIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYSBsaW5lX2l0ZW1zIHByb3BlcnR5IHdpdGggYXQgbGVhc3Qgb25lIG9yZGVyIGl0ZW0nLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ29yZGVyX2lkJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGFuIG9yZGVyX2lkIHByb3BlcnR5IGFuZCBoYXZlIHR5cGUgc3RyaW5nJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdvcmRlcl9udW1iZXInLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYW4gb3JkZXJfbnVtYmVyIHByb3BlcnR5IGFuZCBoYXZlIHR5cGUgc3RyaW5nJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG4vLyB0aGUgXCJjb25maWdcIiBwcm9wZXJ0eSBpcyBhIGdlbmVyaWMgb2JqZWN0IGluIHRoZSBjb21tZXJjZSBhcGkgc3BlYywgdGhlc2UgaW50ZXJmYWNlc1xuLy8gYXJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHN0cnVjdHVyZSBvZiB0aGF0IG9iamVjdCBhbmQgdG8gdHJhbnNmb3JtIHRoZSBhcGkgcmVzcG9uc2Vcbi8vIGludG8gYSB0eXBlZCBvYmplY3QgZm9yIHRoZSBmcm9udGVuZC4gRG8gbm90IHVzZSB0aGVzZSBpbnRlcmZhY2VzIGZvciBhbnl0aGluZyBlbHNlLlxuaW50ZXJmYWNlIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZSB7XG4gIHNlc3Npb25fcmVwbGF5X2VuYWJsZWQ6IGJvb2xlYW47XG4gIHNlc3Npb25fcmVwbGF5X3NhbXBsZV9yYXRlOiBudW1iZXI7XG4gIHRyYWNraW5nX2VuYWJsZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBBcGlPcmdBbmFseXRpY3NDb25maWdDdXN0b21lclNlcnZpY2Uge1xuICBwcm92aWRlcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzIHtcbiAgbWVhc3VyZW1lbnRfaWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFwaU9yZ0FuYWx5dGljc0NvbmZpZyB7XG4gIGFtcGxpdHVkZT86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTtcbiAgY3VzdG9tZXJfc2VydmljZT86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZTtcbiAgZ29vZ2xlX2FuYWx5dGljcz86IEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0dvb2dsZUFuYWx5dGljcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlPcmdhbml6YXRpb25Db25maWcgZXh0ZW5kcyBPcmdhbml6YXRpb25Db25maWcge1xuICBjb25maWc6IEFwaU9yZ0FuYWx5dGljc0NvbmZpZztcbn1cblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGUgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZSA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3Nlc3Npb25fcmVwbGF5X2VuYWJsZWQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLnNlc3Npb25fcmVwbGF5X2VuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogc2Vzc2lvbl9yZXBsYXlfZW5hYmxlZCBpcyBub3QgYSBib29sZWFuJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgISgnc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUnIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUgIT09ICdudW1iZXInXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUgaXMgbm90IGEgbnVtYmVyJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgndHJhY2tpbmdfZW5hYmxlZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEudHJhY2tpbmdfZW5hYmxlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQW1wbGl0dWRlOiB0cmFja2luZ19lbmFibGVkIGlzIG5vdCBhIGJvb2xlYW4nLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdDdXN0b21lclNlcnZpY2UgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZSA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdwcm92aWRlcicgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEucHJvdmlkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlOiBwcm92aWRlciBpcyBub3QgYSBzdHJpbmcnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3MgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0dvb2dsZUFuYWx5dGljcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdtZWFzdXJlbWVudF9pZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEubWVhc3VyZW1lbnRfaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzOiBtZWFzdXJlbWVudF9pZCBpcyBub3QgYSBzdHJpbmcnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdhbXBsaXR1ZGUnIGluIGRhdGEgJiZcbiAgICAhaXNBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGUoZGF0YS5hbXBsaXR1ZGUpXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNPcmdBbmFseXRpY3NDb25maWc6IGFtcGxpdHVkZSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdjdXN0b21lcl9zZXJ2aWNlJyBpbiBkYXRhICYmXG4gICAgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlKGRhdGEuY3VzdG9tZXJfc2VydmljZSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogY3VzdG9tZXJfc2VydmljZSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdnb29nbGVfYW5hbHl0aWNzJyBpbiBkYXRhICYmXG4gICAgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzKGRhdGEuZ29vZ2xlX2FuYWx5dGljcylcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogZ29vZ2xlX2FuYWx5dGljcyBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ2FuaXphdGlvbkNvbmZpZyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2NyZWF0ZWRfYXQnIGluIGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogY3JlYXRlZF9hdCBpcyBub3QgZGVmaW5lZCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCduYW1lc3BhY2UnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLm5hbWVzcGFjZSAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzT3JnQ29uZmlnOiBuYW1lc3BhY2UgaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2lzX2xhdGVzdCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuaXNfbGF0ZXN0ICE9PSAnYm9vbGVhbicpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzT3JnQ29uZmlnOiBpc19sYXRlc3QgaXMgbm90IGEgYm9vbGVhbicsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCd2ZXJzaW9uJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS52ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNPcmdDb25maWc6IHZlcnNpb24gaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3VwZGF0ZWRfYXQnIGluIGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogdXBkYXRlZF9hdCBpcyBub3QgZGVmaW5lZCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdjb25maWcnIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY29uZmlnICE9PSAnb2JqZWN0JyB8fFxuICAgICFpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZyhkYXRhLmNvbmZpZylcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogY29uZmlnIGlzIG5vdCBhbiBvYmplY3QnLCBkYXRhKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ29yZ2FuaXphdGlvbl9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5vcmdhbml6YXRpb25faWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogb3JnYW5pemF0aW9uX2lkIGlzIG5vdCBhIHN0cmluZycsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnaWQnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogaWQgaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgU3RhdHNpZ0V4cGVyaW1lbnQgYXMgQXBpT3JnQ29uZmlnRXhwZXJpbWVudCxcbiAgU3RhdHNpZ0ZlYXR1cmVHYXRlIGFzIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlLFxuICBPcmdhbml6YXRpb25TZXR0aW5ncyBhcyBBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5ncyxcbiAgT3JnYW5pemF0aW9uIGFzIEFwaU9yZ2FuaXphdGlvbixcbiAgT3JnYW5pemF0aW9uU3RhdHVzRW51bSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IEFwaU9yZ2FuaXphdGlvbkNvbmZpZywgaXNBcGlPcmdhbml6YXRpb25Db25maWcgfSBmcm9tICcuL2lzQXBpT3JnYW5pemF0aW9uQ29uZmlnJztcblxuaW50ZXJmYWNlIEFwaU9yZ0NvbmZpZ1Jlc3VsdHMge1xuICBjb25maWdzOiBBcGlPcmdhbml6YXRpb25Db25maWdbXTtcbiAgZXhwZXJpbWVudHM6IEFwaU9yZ0NvbmZpZ0V4cGVyaW1lbnRbXTtcbiAgZ2F0ZXM6IEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlW107XG4gIG9yZzogQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3M7XG59XG5cbmNvbnN0IGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBBcGlPcmdDb25maWdFeHBlcmltZW50ID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudDogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnZ3JvdXAnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuZ3JvdXAgIT09ICdzdHJpbmcnICYmIGRhdGEuZ3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IGdyb3VwIGlzIG5vdCBhIHN0cmluZyBvciB1bmRlZmluZWQnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnZ3JvdXBfbmFtZScgaW4gZGF0YSAmJlxuICAgIHR5cGVvZiBkYXRhLmdyb3VwX25hbWUgIT09ICdzdHJpbmcnICYmXG4gICAgZGF0YS5ncm91cF9uYW1lICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IGdyb3VwX25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnbmFtZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyAmJiBkYXRhLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdFeHBlcmltZW50OiBuYW1lIGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3J1bGVfaWQnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEucnVsZV9pZCAhPT0gJ3N0cmluZycgJiYgZGF0YS5ydWxlX2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudDogcnVsZV9pZCBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS52YWx1ZSAhPT0gJ29iamVjdCcgJiYgZGF0YS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IHZhbHVlIGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc0FwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGU6IGRhdGEgaXMgbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ25hbWUnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEubmFtZSAhPT0gJ3N0cmluZycgJiYgZGF0YS5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGU6IG5hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgncnVsZV9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5ydWxlX2lkICE9PSAnc3RyaW5nJyAmJiBkYXRhLnJ1bGVfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdGZWF0dXJlR2F0ZTogcnVsZV9pZCBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS52YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmIGRhdGEudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdGZWF0dXJlR2F0ZTogdmFsdWUgaXMgbm90IGEgYm9vbGVhbicsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzQXBpT3JnYW5pemF0aW9uID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ2FuaXphdGlvbiA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdpZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogaWQgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdkaXNwbGF5X25hbWUnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmRpc3BsYXlfbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBkaXNwbGF5X25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdkb21haW4nIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmRvbWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBkb21haW4gaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdzaG9ydF9uYW1lJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5zaG9ydF9uYW1lICE9PSAnc3RyaW5nJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdhbml6YXRpb246IHNob3J0X25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdzdGF0dXMnIGluIGRhdGEpIHx8XG4gICAgIU9iamVjdC52YWx1ZXMoT3JnYW5pemF0aW9uU3RhdHVzRW51bSkuaW5jbHVkZXMoZGF0YS5zdGF0dXMgYXMgT3JnYW5pemF0aW9uU3RhdHVzRW51bSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBzdGF0dXMgaXMgbm90IGEgdmFsaWQgT3JnYW5pemF0aW9uU3RhdHVzRW51bSB2YWx1ZScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdjcmVhdGVkX2F0JyBpbiBkYXRhICYmXG4gICAgIShkYXRhLmNyZWF0ZWRfYXQgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgIHR5cGVvZiBkYXRhLmNyZWF0ZWRfYXQgIT09ICdzdHJpbmcnICYmXG4gICAgZGF0YS5jcmVhdGVkX2F0ICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogY3JlYXRlZF9hdCBpcyBub3QgYSBEYXRlJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAndXBkYXRlZF9hdCcgaW4gZGF0YSAmJlxuICAgICEoZGF0YS51cGRhdGVkX2F0IGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICB0eXBlb2YgZGF0YS51cGRhdGVkX2F0ICE9PSAnc3RyaW5nJyAmJlxuICAgIGRhdGEudXBkYXRlZF9hdCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdhbml6YXRpb246IHVwZGF0ZWRfYXQgaXMgbm90IGEgRGF0ZScsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5nczogZGF0YSBpcyBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgnb3JnJyBpbiBkYXRhKSB8fCAhaXNBcGlPcmdhbml6YXRpb24oZGF0YS5vcmcpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3M6IG9yZyBpcyBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBza2lwIHZhbGlkYXRpb24gZm9yICdzZXR0aW5ncycgZm9yIG5vd1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHMgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUmVxdWlyZWQ8QXBpT3JnQ29uZmlnUmVzdWx0cz4gPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdSZXN1bHRzOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICEoJ2NvbmZpZ3MnIGluIGRhdGEpIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoZGF0YS5jb25maWdzKSB8fFxuICAgICFkYXRhLmNvbmZpZ3MuZXZlcnkoKGNvbmZpZykgPT4gaXNBcGlPcmdhbml6YXRpb25Db25maWcoY29uZmlnKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHM6IGNvbmZpZ3MgaXMgbm90IGFuIGFycmF5JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnZXhwZXJpbWVudHMnIGluIGRhdGEgJiZcbiAgICBkYXRhLmV4cGVyaW1lbnRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoZGF0YS5leHBlcmltZW50cykgfHxcbiAgICAgICFkYXRhLmV4cGVyaW1lbnRzLmV2ZXJ5KChleHApID0+IGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudChleHApKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnUmVzdWx0czogZXhwZXJpbWVudHMgaXMgbm90IGFuIGFycmF5IG9yIGNvbnRhaW5zIGludmFsaWQgaXRlbXMnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdnYXRlcycgaW4gZGF0YSkgfHxcbiAgICAhQXJyYXkuaXNBcnJheShkYXRhLmdhdGVzKSB8fFxuICAgICFkYXRhLmdhdGVzLmV2ZXJ5KChnYXRlKSA9PiBpc0FwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlKGdhdGUpKVxuICApIHtcbiAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdSZXN1bHRzOiBnYXRlcyBpcyBub3QgYW4gYXJyYXkgb3IgY29udGFpbnMgaW52YWxpZCBpdGVtcycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ29yZycgaW4gZGF0YSkgfHwgIWlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MoZGF0YS5vcmcpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnUmVzdWx0czogb3JnIGlzIG5vdCBhbiBvYmplY3Qgb3IgaGFzIGludmFsaWQgZmllbGRzJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIEFwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgPT4ge1xuICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3RpdGxlJyBpbiBvYmogJiYgb2JqLnRpdGxlICE9IG51bGwgJiYgdHlwZW9mIG9iai50aXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ2Rlc2NyaXB0aW9uJyBpbiBvYmogJiYgdHlwZW9mIG9iai5kZXNjcmlwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3VybCcgaW4gb2JqICYmIHR5cGVvZiBvYmoudXJsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7XG4gIFBMUEF0dHJpYnV0ZUNhdGVnb3J5LFxuICBQTFBBdHRyaWJ1dGVzLFxuICBQTFBJZEF0dHJpYnV0ZXMsXG59IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBMUElkQXR0cmlidXRlID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFBMUElkQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2lkJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBMUEV2ZW50QXR0cmlidXRlcyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBQTFBBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgISgnY2F0ZWdvcnknIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY2F0ZWdvcnkgIT09ICdzdHJpbmcnIHx8XG4gICAgIU9iamVjdC52YWx1ZXMoUExQQXR0cmlidXRlQ2F0ZWdvcnkpLmluY2x1ZGVzKGRhdGEuY2F0ZWdvcnkgYXMgUExQQXR0cmlidXRlQ2F0ZWdvcnkpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdhdHRyaWJ1dGVzJyBpbiBkYXRhKSB8fFxuICAgIHR5cGVvZiBkYXRhLmF0dHJpYnV0ZXMgIT09ICdvYmplY3QnIHx8XG4gICAgIWlzQXBpUExQSWRBdHRyaWJ1dGUoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuZXhwb3J0IGNvbnN0IGlzQXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyA9IChcbiAgYXR0cmlidXRlczogdW5rbm93bixcbik6IGF0dHJpYnV0ZXMgaXMgUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChhdHRyaWJ1dGVzID09IG51bGwgfHwgdHlwZW9mIGF0dHJpYnV0ZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdmaWx0ZXJfbmFtZScgaW4gYXR0cmlidXRlcyAmJiB0eXBlb2YgYXR0cmlidXRlcy5maWx0ZXJfbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3JhcGhxbCc7XG5cbmNvbnN0IFJFUVVJUkVEX0NPTE9SX0ZJRUxEUyA9IFtcbiAgJ2FjY2VudF9wcmltYXJ5JyxcbiAgJ2FjY2VudF9zZWNvbmRhcnknLFxuICAnYmFja2dyb3VuZF9kYXJrJyxcbiAgJ2JhY2tncm91bmRfbGlnaHQnLFxuICAnYmFja2dyb3VuZF9wcmltYXJ5JyxcbiAgJ2JhY2tncm91bmRfc2F0dXJhdGVkJyxcbiAgJ2JhY2tncm91bmRfc2Vjb25kYXJ5JyxcbiAgJ2JhY2tncm91bmRfc2Vjb25kYXJ5X2RhcmsnLFxuICAnYmFja2dyb3VuZF90ZXJ0aWFyeScsXG4gICdib3JkZXJfZGFyaycsXG4gICdib3JkZXJfbGlnaHQnLFxuICAnYm9yZGVyX21lZGl1bScsXG4gICdib3JkZXJfb3V0bGluZScsXG4gICd0ZXh0X2FjY2VudCcsXG4gICd0ZXh0X2xpZ2h0JyxcbiAgJ3RleHRfbGluaycsXG4gICd0ZXh0X3ByaW1hcnknLFxuICAndGV4dF9zZWNvbmRhcnknLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGlzR3JhcGhRTENvbG9yc0NvbmZpZyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YSA9PiB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgZGF0YSA9PT0gbnVsbCkge1xuICAgIExvZ2dlci5sb2dFcnJvcignSW52YWxpZCBncmFwaHFsIHJlc3BvbnNlIGZvciBjb2xvcnMgY29uZmlnJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQ2hlY2sgZWFjaCByZXF1aXJlZCBmaWVsZFxuICBjb25zdCBtaXNzaW5nRmllbGRzID0gUkVRVUlSRURfQ09MT1JfRklFTERTLmZpbHRlcihcbiAgICAoZmllbGQpID0+ICEoZmllbGQgaW4gZGF0YSkgfHwgdHlwZW9mIChkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtmaWVsZF0gIT09ICdzdHJpbmcnLFxuICApO1xuXG4gIGlmIChtaXNzaW5nRmllbGRzLmxlbmd0aCA9PT0gUkVRVUlSRURfQ09MT1JfRklFTERTLmxlbmd0aCkge1xuICAgIExvZ2dlci5sb2dFcnJvcignQWxsIGNvbG9yIGZpZWxkcyBhcmUgbWlzc2luZyBvciBudWxsJywgdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobWlzc2luZ0ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgY29sb3IgZmllbGRzJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgICAgbWlzc2luZ0ZpZWxkcyxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCIvKipcbiAqIEdlbmVyaWMgdXRpbGl0eSB0byB0cmFuc2Zvcm0gc25ha2VfY2FzZSBvYmplY3Qga2V5cyB0byBjYW1lbENhc2UgYXQgcnVudGltZS5cbiAqIFRoaXMgaXMgdGhlIHJ1bnRpbWUgZXF1aXZhbGVudCBvZiB0aGUgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIHR5cGUgdXRpbGl0eS5cbiAqL1xuXG4vLyBMaXN0IG9mIGFjcm9ueW1zIHRoYXQgc2hvdWxkIGJlIHByZXNlcnZlZCBhcyB1cHBlcmNhc2UgaW4gY2FtZWxDYXNlIGFuZCBsb3dlcmNhc2UgaW4gc25ha2VfY2FzZVxuY29uc3QgUFJFU0VSVkVEX0FDUk9OWU1TID0gW1wiUExQXCIsIFwiUERQXCIsIFwiU1ZHXCJdO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgc25ha2VfY2FzZSBzdHJpbmcgdG8gY2FtZWxDYXNlXG4gKiBIYW5kbGVzIHNwZWNpZmljIGFjcm9ueW1zIGxpa2UgUExQIGFuZCBQRFAgY29ycmVjdGx5XG4gKi9cbmNvbnN0IHRvQ2FtZWxDYXNlID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgLy8gUHJlLXByb2Nlc3M6IGNvbnZlcnQgYWxsIHdvcmRzIHRoYXQgbWF0Y2ggdGhlIFBSRVNFUlZFRF9BQ1JPTllNUyByZWdleCB0byB1cHBlcmNhc2VcbiAgbGV0IHByb2Nlc3NlZFN0ciA9IHN0cjtcbiAgZm9yIChjb25zdCBhY3JvbnltIG9mIFBSRVNFUlZFRF9BQ1JPTllNUykge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXyR7YWNyb255bX1fP2AsIFwiZ2lcIik7XG5cbiAgICBpZiAocHJvY2Vzc2VkU3RyLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgcHJvY2Vzc2VkU3RyID0gcHJvY2Vzc2VkU3RyLnJlcGxhY2UocmVnZXgsICh2KSA9PlxuICAgICAgICB2LmVuZHNXaXRoKFwiX1wiKSA/IGAke2Fjcm9ueW19X2AgOiBgJHthY3JvbnltfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9jZXNzZWRTdHIucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGxldHRlcikgPT4gbGV0dGVyLnRvVXBwZXJDYXNlKCkpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNhbWVsQ2FzZSBzdHJpbmcgdG8gc25ha2VfY2FzZVxuICogSGFuZGxlcyBjb25zZWN1dGl2ZSBjYXBpdGFsIGxldHRlcnMgY29ycmVjdGx5IChlLmcuLCBcIlBEUFwiIC0+IFwicGRwXCIsIG5vdCBcInBfZF9wXCIpXG4gKiBQcmVzZXJ2ZXMgc3BlY2lmaWMgYWNyb255bXMgbGlrZSBQTFAgYW5kIFBEUCBhcyBsb3dlcmNhc2UgaW4gc25ha2VfY2FzZVxuICovXG5jb25zdCB0b1NuYWtlQ2FzZSA9IChzdHI6IHN0cmluZykgPT5cbiAgc3RyXG4gICAgLnJlcGxhY2UoLyhbQS1aXSkoPz1bYS16XSkvZywgXCJfJDFcIilcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMV8kMlwiKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL15fLywgXCJcIik7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgb2JqZWN0IGtleXMgZnJvbSBzbmFrZV9jYXNlIHRvIGNhbWVsQ2FzZVxuICovXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtU25ha2VUb0NhbWVsID0gKG9iajogdW5rbm93bik6IHVua25vd24gPT4ge1xuICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcCgodmFsKSA9PiB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodmFsKSk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IGNhbWVsS2V5ID0gdG9DYW1lbENhc2Uoa2V5KTtcbiAgICAgIHJlc3VsdFtjYW1lbEtleV0gPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBvYmplY3Qga2V5cyBmcm9tIGNhbWVsQ2FzZSB0byBzbmFrZV9jYXNlXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1DYW1lbFRvU25ha2UgPSAob2JqOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmoubWFwKHRyYW5zZm9ybUNhbWVsVG9TbmFrZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IHNuYWtlS2V5ID0gdG9TbmFrZUNhc2Uoa2V5KTtcbiAgICAgIHJlc3VsdFtzbmFrZUtleV0gPSB0cmFuc2Zvcm1DYW1lbFRvU25ha2UodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcbiIsImltcG9ydCB7IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgZW51bSB2YWx1ZSBvciB1bmRlZmluZWQgaWYgdGhlIHN0cmluZ1xuICogZG9lcyBub3QgbWFwIHRvIGEgdmFsaWQgZW51bVxuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nVG9GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNFbnVtVmFsdWUgPSAoXG4gIHN0YXR1czogc3RyaW5nLFxuKTogRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzIHwgdW5kZWZpbmVkID0+IHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlICdBVFRFTVBURURfREVMSVZFUlknOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5BVFRFTVBURURfREVMSVZFUlk7XG4gICAgY2FzZSAnQ0FOQ0VMRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5DQU5DRUxFRDtcbiAgICBjYXNlICdDT05GSVJNRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5DT05GSVJNRUQ7XG4gICAgY2FzZSAnREVMSVZFUkVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuREVMSVZFUkVEO1xuICAgIGNhc2UgJ0ZBSUxVUkUnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5GQUlMVVJFO1xuICAgIGNhc2UgJ0ZVTEZJTExFRCc6XG4gICAgICByZXR1cm4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLkZVTEZJTExFRDtcbiAgICBjYXNlICdJTl9UUkFOU0lUJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuSU5fVFJBTlNJVDtcbiAgICBjYXNlICdMQUJFTF9QUklOVEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuTEFCRUxfUFJJTlRFRDtcbiAgICBjYXNlICdMQUJFTF9QVVJDSEFTRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5MQUJFTF9QVVJDSEFTRUQ7XG4gICAgY2FzZSAnTEFCRUxfVk9JREVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuTEFCRUxfVk9JREVEO1xuICAgIGNhc2UgJ01BUktFRF9BU19GVUxGSUxMRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5NQVJLRURfQVNfRlVMRklMTEVEO1xuICAgIGNhc2UgJ05PVF9ERUxJVkVSRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5OT1RfREVMSVZFUkVEO1xuICAgIGNhc2UgJ09VVF9GT1JfREVMSVZFUlknOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5PVVRfRk9SX0RFTElWRVJZO1xuICAgIGNhc2UgJ1BJQ0tFRF9VUCc6XG4gICAgICByZXR1cm4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLlBJQ0tFRF9VUDtcbiAgICBjYXNlICdSRUFEWV9GT1JfUElDS1VQJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUkVBRFlfRk9SX1BJQ0tVUDtcbiAgICBjYXNlICdTVUJNSVRURUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5TVUJNSVRURUQ7XG4gICAgY2FzZSAnSU5fUFJPR1JFU1MnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5JTl9QUk9HUkVTUztcbiAgICBjYXNlICdPTl9IT0xEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuT05fSE9MRDtcbiAgICBjYXNlICdPUEVOJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuT1BFTjtcbiAgICBjYXNlICdQQVJUSUFMTFlfRlVMRklMTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUEFSVElBTExZX0ZVTEZJTExFRDtcbiAgICBjYXNlICdQRU5ESU5HX0ZVTEZJTExNRU5UJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUEVORElOR19GVUxGSUxMTUVOVDtcbiAgICBjYXNlICdSRVFVRVNUX0RFQ0xJTkVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUkVRVUVTVF9ERUNMSU5FRDtcbiAgICBjYXNlICdSRVNUT0NLRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5SRVNUT0NLRUQ7XG4gICAgY2FzZSAnU0NIRURVTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuU0NIRURVTEVEO1xuICAgIGNhc2UgJ1VORlVMRklMTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuVU5GVUxGSUxMRUQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iLCJpbXBvcnQgeyBDb2xvck1hcHBpbmcsIENvbG9yTmFtZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdcIjtcbmltcG9ydCB7IGlzR3JhcGhRTENvbG9yc0NvbmZpZyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9ncmFwaFFML2lzR3JhcGhRTENvbG9yc0NvbmZpZ1wiO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVHcmFwaFFMQ29sb3JzQ29uZmlnID0gKFxuICBkYXRhOiB1bmtub3duXG4pOiBDb2xvck1hcHBpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzR3JhcGhRTENvbG9yc0NvbmZpZyhkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iLCJlbnVtIERPTUluc2VydGlvblR5cGUge1xuICBBRlRFUiA9IFwiYWZ0ZXJcIixcbiAgQkVGT1JFID0gXCJiZWZvcmVcIixcbiAgQURKQUNFTlRfQUZURVJfQkVHSU4gPSBcImFkamFjZW50LWFmdGVyLWJlZ2luXCIsXG4gIEFESkFDRU5UX0JFRk9SRV9CRUdJTiA9IFwiYWRqYWNlbnQtYmVmb3JlLWJlZ2luXCIsXG4gIEFESkFDRU5UX0FGVEVSX0VORCA9IFwiYWRqYWNlbnQtYWZ0ZXItZW5kXCIsXG4gIEFESkFDRU5UX0JFRk9SRV9FTkQgPSBcImFkamFjZW50LWJlZm9yZS1lbmRcIixcbiAgQVBQRU5EX0NISUxEID0gXCJhcHBlbmQtY2hpbGRcIixcbiAgTk9ORSA9IFwibm9uZVwiLFxufVxuXG5leHBvcnQgY29uc3QgRE9NSW5zZXJ0aW9uVHlwZVRvSW5zZXJ0UG9zaXRpb24gPSAoXG4gIHR5cGU6IERPTUluc2VydGlvblR5cGVcbik6IEluc2VydFBvc2l0aW9uID0+IHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBET01JbnNlcnRpb25UeXBlLkFESkFDRU5UX0FGVEVSX0JFR0lOOlxuICAgICAgcmV0dXJuIFwiYWZ0ZXJiZWdpblwiO1xuICAgIGNhc2UgRE9NSW5zZXJ0aW9uVHlwZS5CRUZPUkU6XG4gICAgY2FzZSBET01JbnNlcnRpb25UeXBlLkFESkFDRU5UX0JFRk9SRV9CRUdJTjpcbiAgICAgIHJldHVybiBcImJlZm9yZWJlZ2luXCI7XG4gICAgY2FzZSBET01JbnNlcnRpb25UeXBlLkFESkFDRU5UX0JFRk9SRV9FTkQ6XG4gICAgICByZXR1cm4gXCJiZWZvcmVlbmRcIjtcbiAgICBjYXNlIERPTUluc2VydGlvblR5cGUuQUZURVI6XG4gICAgY2FzZSBET01JbnNlcnRpb25UeXBlLkFESkFDRU5UX0FGVEVSX0VORDpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiYWZ0ZXJlbmRcIjtcbiAgfVxufTtcblxuZXhwb3J0IHsgRE9NSW5zZXJ0aW9uVHlwZSB9O1xuIiwiZW51bSBHcmlkSW5zZXJ0aW9uVHlwZSB7XG4gIEZJWEVEXzEgPSBcImZpeGVkLTFcIixcbiAgRklYRURfMiA9IFwiZml4ZWQtMlwiLFxuICBGSVhFRF8zID0gXCJmaXhlZC0zXCIsXG4gIEZJWEVEXzQgPSBcImZpeGVkLTRcIixcbiAgRklYRURfNSA9IFwiZml4ZWQtNVwiLFxuICBGSVhFRF82ID0gXCJmaXhlZC02XCIsXG4gIEZJWEVEXzcgPSBcImZpeGVkLTdcIixcbiAgRklYRURfOCA9IFwiZml4ZWQtOFwiLFxuICBGSVhFRF85ID0gXCJmaXhlZC05XCIsXG4gIEZJWEVEXzEyID0gXCJmaXhlZC0xMlwiLFxuICBGSVhFRF8xMyA9IFwiZml4ZWQtMTNcIixcbiAgUk9XXzEgPSBcInJvdy0xXCIsXG4gIFJPV18yID0gXCJyb3ctMlwiLFxuICBST1dfMyA9IFwicm93LTNcIixcbiAgUk9XXzQgPSBcInJvdy00XCIsXG59XG5cbmV4cG9ydCB7IEdyaWRJbnNlcnRpb25UeXBlIH07XG4iLCJpbXBvcnQgeyBGcm9udGVuZENvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZnJvbnRlbmRDb25maWcnO1xuaW1wb3J0IHsgdHJhbnNmb3JtU25ha2VUb0NhbWVsIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lcic7XG5pbXBvcnQge1xuICBXaWRnZXRDb25maWcsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRNb3VudGluZ0NvbmZpZyxcbn0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmltcG9ydCB7IERPTUluc2VydGlvblR5cGUgfSBmcm9tICdzcmMvbWVyY2hhbnRzL2RvbUluc2VydGlvbic7XG5pbXBvcnQgeyBHcmlkSW5zZXJ0aW9uVHlwZSB9IGZyb20gJ3NyYy9tZXJjaGFudHMvZ3JpZEluc2VydGlvbic7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIFBhZ2VWYXJpYW50UXVlcnlEYXRhIHRvIFBhZ2VWYXJpYW50Q29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHMgPSAoXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBQYWdlVmFyaWFudENvbmZpZyA9PiB7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKGNvbmZpZykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgY29uc3QgeyB2YXJpYW50Q2hlY2tzLCB3aWRnZXRNb3VudGluZywgLi4ucmVzdCB9ID0gdHJhbnNmb3JtZWQ7XG5cbiAgLy8gQ29udmVydCB2YXJpYW50Q2hlY2tzIHRvIHZhcmlhbnRUZXN0cyB3aXRoIHRlc3RUeXBlIG5vcm1hbGl6YXRpb25cbiAgY29uc3QgdmFyaWFudFRlc3RzID0gQXJyYXkuaXNBcnJheSh2YXJpYW50Q2hlY2tzKVxuICAgID8gdmFyaWFudENoZWNrcy5tYXAoKHsgY2hlY2tUeXBlLCAuLi5yZXN0Q2hlY2sgfSkgPT4gKHtcbiAgICAgICAgLi4ucmVzdENoZWNrLFxuICAgICAgICB0ZXN0VHlwZTogY2hlY2tUeXBlLFxuICAgICAgfSkpXG4gICAgOiBbXTtcblxuICAvLyBOb3JtYWxpemUgd2lkZ2V0TW91bnRpbmc6IGNoZWNrcyAtPiB0ZXN0cywgY2hlY2tUeXBlIC0+IHRlc3RUeXBlXG4gIGNvbnN0IG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyA9IEFycmF5LmlzQXJyYXkod2lkZ2V0TW91bnRpbmcpXG4gICAgPyB3aWRnZXRNb3VudGluZy5tYXAoKHsgbW91bnRpbmdQb2ludFdpZGdldHMsIC4uLnJlc3RNb3VudGluZyB9KSA9PiAoe1xuICAgICAgICAuLi5yZXN0TW91bnRpbmcsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KG1vdW50aW5nUG9pbnRXaWRnZXRzKVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBtb3VudGluZ1BvaW50V2lkZ2V0czogbW91bnRpbmdQb2ludFdpZGdldHMubWFwKCh7IGNoZWNrcywgLi4ucmVzdFdpZGdldCB9KSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnJlc3RXaWRnZXQsXG4gICAgICAgICAgICAgICAgdGVzdHM6IEFycmF5LmlzQXJyYXkoY2hlY2tzKVxuICAgICAgICAgICAgICAgICAgPyBjaGVja3MubWFwKCh7IGNoZWNrVHlwZSwgLi4ucmVzdENoZWNrIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdENoZWNrLFxuICAgICAgICAgICAgICAgICAgICAgIHRlc3RUeXBlOiBjaGVja1R5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSkpXG4gICAgOiBbXTtcblxuICBjb25zdCBub3JtYWxpemVkQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAuLi5yZXN0LFxuICAgIC4uLih2YXJpYW50VGVzdHMgPyB7IHZhcmlhbnRUZXN0cyB9IDoge30pLFxuICAgIC4uLihub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcgPyB7IHdpZGdldE1vdW50aW5nOiBub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcgfSA6IHt9KSxcbiAgfTtcblxuICBjb25zdCB2YXJpYW50SWQgPSBub3JtYWxpemVkQ29uZmlnLnZhcmlhbnRJZCBhcyBzdHJpbmc7XG4gIGNvbnN0IHZhcmlhbnRUeXBlID0gbm9ybWFsaXplZENvbmZpZy52YXJpYW50VHlwZSBhcyBzdHJpbmc7XG5cbiAgaWYgKHR5cGVvZiB2YXJpYW50SWQgIT09ICdzdHJpbmcnIHx8ICF2YXJpYW50SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB2YXJpYW50SWQgZm9yIHBhZ2VWYXJpYW50YCk7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhcmlhbnRUeXBlICE9PSAnc3RyaW5nJyB8fCAhdmFyaWFudFR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB2YXJpYW50VHlwZSBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YXJpYW50VGVzdHMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE1pc3Npbmcgb3IgaW52YWxpZCB2YXJpYW50VGVzdHMgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBNdXN0IGJlIGFuIGFycmF5YCxcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCB0ZXN0IG9mIHZhcmlhbnRUZXN0cykge1xuICAgIGlmICghdGVzdC50ZXN0VHlwZSB8fCB0eXBlb2YgdGVzdC50ZXN0VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YXJpYW50VGVzdC50ZXN0VHlwZSBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKFBhZ2VWYXJpYW50VGVzdFR5cGUpLmluY2x1ZGVzKHRlc3QudGVzdFR5cGUgYXMgUGFnZVZhcmlhbnRUZXN0VHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgdGVzdFR5cGUgJyR7dGVzdC50ZXN0VHlwZX0nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhcbiAgICAgICAgICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICAgICAgICApLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWlzc2luZyBvciBpbnZhbGlkIHdpZGdldE1vdW50aW5nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gTXVzdCBiZSBhbiBhcnJheWAsXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgbW91bnRpbmcgb2Ygbm9ybWFsaXplZFdpZGdldE1vdW50aW5nKSB7XG4gICAgaWYgKHR5cGVvZiBtb3VudGluZy5tb3VudGluZ0NvbmZpZ0lkICE9PSAnc3RyaW5nJyB8fCAhbW91bnRpbmcubW91bnRpbmdDb25maWdJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1vdW50aW5nQ29uZmlnSWQgaW4gd2lkZ2V0TW91bnRpbmcgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuXG4gICAgaWYgKG1vdW50aW5nLndpZGdldENvbmZpZ0lkICYmIHR5cGVvZiBtb3VudGluZy53aWRnZXRDb25maWdJZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3aWRnZXRDb25maWdJZCBpbiB3aWRnZXRNb3VudGluZyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG5cbiAgICBpZiAobW91bnRpbmcubW91bnRpbmdQb2ludFdpZGdldHMpIHtcbiAgICAgIGZvciAoY29uc3Qgd2lkZ2V0IG9mIG1vdW50aW5nLm1vdW50aW5nUG9pbnRXaWRnZXRzKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2lkZ2V0LndpZGdldENvbmZpZ0lkICE9PSAnc3RyaW5nJyB8fCAhd2lkZ2V0LndpZGdldENvbmZpZ0lkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgd2lkZ2V0Q29uZmlnSWQgaW4gbW91bnRpbmdQb2ludFdpZGdldHMgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHdpZGdldC50ZXN0cykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBvciBtaXNzaW5nIHRlc3RzIGluIG1vdW50aW5nUG9pbnRXaWRnZXRzIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh2YXJpYW50VHlwZSA9PT0gJ3BscCcpIHtcbiAgICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucGxwSWRFeHRyYWN0b3IgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLnBscElkRXh0cmFjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBwbHBJZEV4dHJhY3RvciBmb3IgUExQIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhcmlhbnRUeXBlID09PSAncGRwJykge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnByb2R1Y3RJZEV4dHJhY3RvciAhPT0gJ3N0cmluZycgfHxcbiAgICAgICFub3JtYWxpemVkQ29uZmlnLnByb2R1Y3RJZEV4dHJhY3RvclxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgcHJvZHVjdElkRXh0cmFjdG9yIGZvciBQRFAgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZENvbmZpZy5wYXJlbnRQcm9kdWN0SWRFeHRyYWN0b3IgJiZcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnBhcmVudFByb2R1Y3RJZEV4dHJhY3RvciAhPT0gJ3N0cmluZydcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyZW50UHJvZHVjdElkRXh0cmFjdG9yIGZvciBQRFAgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIE11c3QgYmUgc3RyaW5nIGlmIHByb3ZpZGVkYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRDb25maWcgYXMgUGFnZVZhcmlhbnRDb25maWc7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBNb3VudGluZ0NvbmZpZ1F1ZXJ5RGF0YSB0byBXaWRnZXRNb3VudGluZ0NvbmZpZ1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWcgPSAoXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbmZpZ0tleTogc3RyaW5nLFxuKTogV2lkZ2V0TW91bnRpbmdDb25maWcgPT4ge1xuICAvLyBSRU5BTUlORyBMT0dJQzogQ29udmVydCBiYWNrZW5kIFwiQ2hlY2tcIiB0ZXJtaW5vbG9neSB0byBmcm9udGVuZCBcIlRlc3RcIiB0ZXJtaW5vbG9neVxuICBjb25zdCBub3JtYWxpemVkQ29uZmlnID0geyAuLi5jb25maWcgfTtcblxuICAvLyBDb252ZXJ0IGNoZWNrSWQgdG8gdGVzdElkIGZvciBmcm9udGVuZCBjb21wYXRpYmlsaXR5IChkYXRhIGlzIGFscmVhZHkgY2FtZWxDYXNlKVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5jaGVja0lkICYmICFub3JtYWxpemVkQ29uZmlnLnRlc3RJZCkge1xuICAgIG5vcm1hbGl6ZWRDb25maWcudGVzdElkID0gbm9ybWFsaXplZENvbmZpZy5jaGVja0lkO1xuICAgIGRlbGV0ZSBub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQ7XG4gIH1cblxuICAvLyBSZXF1aXJlZCBmaWVsZHMgLSB0aGVzZSBtdXN0IGJlIHByZXNlbnQgYW5kIHZhbGlkXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5tb3VudGluZ0NvbmZpZ0lkICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy5tb3VudGluZ0NvbmZpZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgbW91bnRpbmdDb25maWdJZCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmNvbnRhaW5lcklkICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy5jb250YWluZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGNvbnRhaW5lcklkIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcudGVzdElkICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy50ZXN0SWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB0ZXN0SWQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgLy8gUmVxdWlyZWQgaW5zZXJ0aW9uUG9pbnRcbiAgaWYgKFxuICAgICFub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50IHx8XG4gICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLmluc2VydGlvblBvaW50KVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBpbnNlcnRpb25Qb2ludCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICBjb25zdCBpbnNlcnRpb25Qb2ludCA9IG5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gVmFsaWRhdGUgaW5zZXJ0aW9uUG9pbnQgcmVxdWlyZWQgZmllbGRzXG4gIGlmICh0eXBlb2YgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IgIT09ICdzdHJpbmcnIHx8ICFpbnNlcnRpb25Qb2ludC5zZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGluc2VydGlvblBvaW50LnNlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8ICFpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBpbnNlcnRpb25UeXBlIGlzIGEgdmFsaWQgRE9NSW5zZXJ0aW9uVHlwZVxuICBpZiAoIU9iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMoaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgJyR7aW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCBpbnNlcnRpb25Qb2ludCBmaWVsZHNcbiAgaWYgKGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4ICE9IG51bGwgJiYgdHlwZW9mIGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4ICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBudW1iZXIgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCBwYXJlbnRJbnNlcnRpb25Qb2ludCBpZiBwcmVzZW50XG4gIGxldCBwYXJlbnRJbnNlcnRpb25Qb2ludDtcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcucGFyZW50SW5zZXJ0aW9uUG9pbnQpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludCAhPT0gJ29iamVjdCcgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXJlbnRJbnNlcnRpb25Qb2ludCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdGApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudFBvaW50ID0gbm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIHBhcmVudFBvaW50LnNlbGVjdG9yICE9PSAnc3RyaW5nJyB8fCAhcGFyZW50UG9pbnQuc2VsZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50LnNlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fCAhcGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWlzc2luZyBvciBpbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5pbmNsdWRlcyhwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUgJyR7cGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50UG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB0eXBlb2YgcGFyZW50UG9pbnQuc2VsZWN0aW9uSW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBudW1iZXIgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwYXJlbnRJbnNlcnRpb25Qb2ludCA9IHtcbiAgICAgIHNlbGVjdG9yOiBwYXJlbnRQb2ludC5zZWxlY3RvcixcbiAgICAgIGluc2VydGlvblR5cGU6IHBhcmVudFBvaW50Lmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSxcbiAgICAgIHNlbGVjdGlvbkluZGV4OiBwYXJlbnRQb2ludC5zZWxlY3Rpb25JbmRleCBhcyBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIHdyYXBwaW5nRWxlbWVudCBpZiBwcmVzZW50XG4gIGxldCB3cmFwcGluZ0VsZW1lbnQ7XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudCkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudCAhPT0gJ29iamVjdCcgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy53cmFwcGluZ0VsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd3JhcHBpbmdFbGVtZW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgd3JhcHBpbmcgPSBub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIHdyYXBwaW5nLmNsYXNzTmFtZSAhPT0gJ3N0cmluZycgfHwgIXdyYXBwaW5nLmNsYXNzTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd3JhcHBpbmdFbGVtZW50LmNsYXNzTmFtZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd3JhcHBpbmcuZWxlbWVudCAhPT0gJ3N0cmluZycgfHwgIXdyYXBwaW5nLmVsZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5lbGVtZW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3cmFwcGluZy5pbnNlcnRpb25UeXBlICE9PSAnc3RyaW5nJyB8fCAhd3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd3JhcHBpbmdFbGVtZW50Lmluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5pbmNsdWRlcyh3cmFwcGluZy5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHdyYXBwaW5nRWxlbWVudC5pbnNlcnRpb25UeXBlICcke3dyYXBwaW5nLmluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgd3JhcHBpbmdFbGVtZW50ID0ge1xuICAgICAgY2xhc3NOYW1lOiB3cmFwcGluZy5jbGFzc05hbWUsXG4gICAgICBlbGVtZW50OiB3cmFwcGluZy5lbGVtZW50LFxuICAgICAgaW5zZXJ0aW9uVHlwZTogd3JhcHBpbmcuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlLFxuICAgIH07XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBvcHRpb25hbCBmaWVsZHNcbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3RvciAhPSBudWxsICYmXG4gICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3RvciAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZGl2Q2hlY2tTZWxlY3RvciBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNsYXNzTmFtZSAhPSBudWxsICYmIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmNsYXNzTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjbGFzc05hbWUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBzdXBwcmVzc2lvblNlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMgIT0gbnVsbCAmJlxuICAgICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcyAhPT0gJ29iamVjdCcgfHxcbiAgICAgIEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcykpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGRhdGFBdHRyaWJ1dGVzIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLnN0eWxlICE9IG51bGwgJiZcbiAgICAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkobm9ybWFsaXplZENvbmZpZy5zdHlsZSkpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdHlsZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGFuIG9iamVjdCBvciBudWxsL3VuZGVmaW5lZGApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgZ3JpZEluc2VydGlvblR5cGUgaWYgcHJlc2VudFxuICBsZXQgZ3JpZEluc2VydGlvblR5cGU7XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8XG4gICAgICAhbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGdyaWRJbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhT2JqZWN0LnZhbHVlcyhHcmlkSW5zZXJ0aW9uVHlwZSkuaW5jbHVkZXMoXG4gICAgICAgIG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUgYXMgR3JpZEluc2VydGlvblR5cGUsXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGdyaWRJbnNlcnRpb25UeXBlICcke25vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGV9JyBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKEdyaWRJbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBncmlkSW5zZXJ0aW9uVHlwZSA9IG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUgYXMgR3JpZEluc2VydGlvblR5cGU7XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgcmV0dXJuIG9iamVjdCwgb25seSBpbmNsdWRpbmcgb3B0aW9uYWwgZmllbGRzIGlmIHRoZXkgaGF2ZSB2YWx1ZXNcbiAgY29uc3QgcmVzdWx0OiBXaWRnZXRNb3VudGluZ0NvbmZpZyA9IHtcbiAgICBtb3VudGluZ0NvbmZpZ0lkOiBub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQsXG4gICAgY29udGFpbmVySWQ6IG5vcm1hbGl6ZWRDb25maWcuY29udGFpbmVySWQsXG4gICAgdGVzdElkOiBub3JtYWxpemVkQ29uZmlnLnRlc3RJZCxcbiAgICBpbnNlcnRpb25Qb2ludDoge1xuICAgICAgc2VsZWN0b3I6IGluc2VydGlvblBvaW50LnNlbGVjdG9yLFxuICAgICAgaW5zZXJ0aW9uVHlwZTogaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlLFxuICAgICAgLi4uKGluc2VydGlvblBvaW50LnNlbGVjdGlvbkluZGV4ICE9IG51bGwgJiYge1xuICAgICAgICBzZWxlY3Rpb25JbmRleDogaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXgsXG4gICAgICB9KSxcbiAgICB9LFxuICB9O1xuXG4gIC8vIE9ubHkgYWRkIG9wdGlvbmFsIGZpZWxkcyBpZiB0aGV5IGhhdmUgdmFsdWVzXG4gIGlmIChwYXJlbnRJbnNlcnRpb25Qb2ludCkge1xuICAgIHJlc3VsdC5wYXJlbnRJbnNlcnRpb25Qb2ludCA9IHBhcmVudEluc2VydGlvblBvaW50O1xuICB9XG4gIGlmIChncmlkSW5zZXJ0aW9uVHlwZSkge1xuICAgIHJlc3VsdC5ncmlkSW5zZXJ0aW9uVHlwZSA9IGdyaWRJbnNlcnRpb25UeXBlO1xuICB9XG4gIGlmICh3cmFwcGluZ0VsZW1lbnQpIHtcbiAgICByZXN1bHQud3JhcHBpbmdFbGVtZW50ID0gd3JhcHBpbmdFbGVtZW50O1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmRpdkNoZWNrU2VsZWN0b3IpIHtcbiAgICByZXN1bHQuZGl2Q2hlY2tTZWxlY3RvciA9IG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3RvciBhcyBzdHJpbmc7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lKSB7XG4gICAgcmVzdWx0LmNsYXNzTmFtZSA9IG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lIGFzIHN0cmluZztcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5zdXBwcmVzc2lvblNlbGVjdG9yKSB7XG4gICAgcmVzdWx0LnN1cHByZXNzaW9uU2VsZWN0b3IgPSBub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3I7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMpIHtcbiAgICByZXN1bHQuZGF0YUF0dHJpYnV0ZXMgPSBub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuc3R5bGUpIHtcbiAgICByZXN1bHQuc3R5bGUgPSBub3JtYWxpemVkQ29uZmlnLnN0eWxlIGFzIFBhcnRpYWw8Q1NTU3R5bGVEZWNsYXJhdGlvbj47XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gV2lkZ2V0Q29uZmlnUXVlcnlEYXRhIHRvIFdpZGdldENvbmZpZ1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQW5kVHJhbnNmb3JtV2lkZ2V0Q29uZmlnID0gKFxuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBjb25maWdLZXk6IHN0cmluZyxcbik6IFdpZGdldENvbmZpZyA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoY29uZmlnKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcud2lkZ2V0Q29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLndpZGdldENvbmZpZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd2lkZ2V0Q29uZmlnSWQgZm9yIHdpZGdldCBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcudHlwZSAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcudHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHR5cGUgZm9yIHdpZGdldCBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNvbnRlbnRJZCAhPSBudWxsICYmIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmNvbnRlbnRJZCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjb250ZW50SWQgZm9yIHdpZGdldCBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cblxuICAvLyBOb3RlOiBXaWRnZXQgY29uZmlncyBhcmUgY29tcGxleCB1bmlvbnMgd2l0aCB0eXBlLXNwZWNpZmljIHByb3BlcnRpZXMuXG5cbiAgLy8gUmV0dXJuIHRoZSBub3JtYWxpemVkIGNvbmZpZyBhcyBXaWRnZXRDb25maWdcbiAgLy8gVXNlIGludGVybWVkaWF0ZSAndW5rbm93bicgY2FzdCBmb3IgY29tcGxleCB1bmlvbiB0eXBlc1xuICByZXR1cm4gbm9ybWFsaXplZENvbmZpZyBhcyB1bmtub3duIGFzIFdpZGdldENvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZyA9IChkYXRhOiB1bmtub3duKTogRnJvbnRlbmRDb25maWcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBvYmogPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8vIFZhbGlkYXRlIG1lcmNoYW50X292ZXJyaWRlX2NzcyBpZiBwcmVzZW50XG4gIGlmIChcbiAgICAnbWVyY2hhbnRfb3ZlcnJpZGVfY3NzJyBpbiBvYmogJiZcbiAgICB0eXBlb2Ygb2JqLm1lcmNoYW50X292ZXJyaWRlX2NzcyAhPT0gJ3N0cmluZycgJiZcbiAgICBvYmoubWVyY2hhbnRfb3ZlcnJpZGVfY3NzICE9PSBudWxsXG4gICkge1xuICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IGRhdGEgfSxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBwYWdlX3ZhcmlhbnRzIGlmIHByZXNlbnRcbiAgaWYgKCdwYWdlX3ZhcmlhbnRzJyBpbiBvYmopIHtcbiAgICBpZiAoXG4gICAgICBvYmoucGFnZV92YXJpYW50cyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvYmoucGFnZV92YXJpYW50cyAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkob2JqLnBhZ2VfdmFyaWFudHMpXG4gICAgKSB7XG4gICAgICBMb2dnZXIubG9nV2FybihcbiAgICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogcGFnZV92YXJpYW50cyBtdXN0IGJlIGFuIGFycmF5IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7IGRhdGEgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG1vdW50aW5nX2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ21vdW50aW5nX2NvbmZpZ3MnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai5tb3VudGluZ19jb25maWdzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9iai5tb3VudGluZ19jb25maWdzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoubW91bnRpbmdfY29uZmlncylcbiAgICApIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBtb3VudGluZ19jb25maWdzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgZGF0YSB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgd2lkZ2V0X2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ3dpZGdldF9jb25maWdzJyBpbiBvYmopIHtcbiAgICBpZiAoXG4gICAgICBvYmoud2lkZ2V0X2NvbmZpZ3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb2JqLndpZGdldF9jb25maWdzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoud2lkZ2V0X2NvbmZpZ3MpXG4gICAgKSB7XG4gICAgICBMb2dnZXIubG9nV2FybihcbiAgICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogd2lkZ2V0X2NvbmZpZ3MgbXVzdCBiZSBhbiBhcnJheSBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBkYXRhIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB1aV9jb25maWdzIGlmIHByZXNlbnRcbiAgaWYgKCd1aV9jb25maWdzJyBpbiBvYmogJiYgdHlwZW9mIG9iai51aV9jb25maWdzICE9PSAnb2JqZWN0JyAmJiBvYmoudWlfY29uZmlncyAhPT0gbnVsbCkge1xuICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgJ0ludmFsaWQgR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YTogdWlfY29uZmlncyBtdXN0IGJlIGFuIG9iamVjdCBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IGRhdGEgfSxcbiAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRyYW5zZm9ybSB0aGUgZGF0YSB0byBjYW1lbENhc2VcbiAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwob2JqKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIC8vIENvbnZlcnQgcGFnZV92YXJpYW50cyBmcm9tIGFycmF5IHRvIHZhbGlkYXRlZCBhcnJheSBpZiBwcmVzZW50XG4gICAgaWYgKHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzKSkge1xuICAgICAgY29uc3QgcGFnZVZhcmlhbnRzQXJyYXkgPSB0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzO1xuICAgICAgY29uc3QgdmFsaWRhdGVkUGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBwYWdlVmFyaWFudHNBcnJheSkge1xuICAgICAgICBpZiAodmFyaWFudCAmJiB0eXBlb2YgdmFyaWFudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhcmlhbnQudmFyaWFudElkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYXJpYW50ID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1QYWdlVmFyaWFudHModmFyaWFudCk7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQYWdlVmFyaWFudHMucHVzaCh2YWxpZGF0ZWRWYXJpYW50KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgcGFnZSB2YXJpYW50LCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIHZhcmlhbnRJZDogdmFyaWFudC52YXJpYW50SWQsXG4gICAgICAgICAgICAgIHZhcmlhbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgdmFyaWFudHNcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgcGFnZSB2YXJpYW50IHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgdmFyaWFudCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEucGFnZVZhcmlhbnRzID0gdmFsaWRhdGVkUGFnZVZhcmlhbnRzO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgbW91bnRpbmdfY29uZmlncyBmcm9tIGFycmF5IHRvIFJlY29yZCBpZiBwcmVzZW50XG4gICAgaWYgKHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzKSkge1xuICAgICAgY29uc3QgbW91bnRpbmdDb25maWdzQXJyYXkgPSB0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzIGFzIEFycmF5PHtcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZzogdW5rbm93bjtcbiAgICAgIH0+O1xuICAgICAgY29uc3QgbW91bnRpbmdDb25maWdzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz4gPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1vdW50aW5nQ29uZmlnc0FycmF5KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpdGVtICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0ua2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGl0ZW0uY29uZmlnICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0uY29uZmlnID09PSAnb2JqZWN0J1xuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgYW5kIHRyYW5zZm9ybSB0aGUgY29uZmlnIHN0cnVjdHVyZVxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaXRlbS5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRDb25maWcgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywgaXRlbS5rZXkpO1xuICAgICAgICAgICAgbW91bnRpbmdDb25maWdzUmVjb3JkW2l0ZW0ua2V5XSA9IHZhbGlkYXRlZENvbmZpZztcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgbW91bnRpbmcgY29uZmlnLCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ0tleTogaXRlbS5rZXksXG4gICAgICAgICAgICAgIGNvbmZpZzogaXRlbS5jb25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgY29uZmlnc1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBtb3VudGluZyBjb25maWcgaXRlbSBzdHJ1Y3R1cmUsIHNraXBwaW5nJywgdW5kZWZpbmVkLCB7IGl0ZW0gfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJhbnNmb3JtZWREYXRhLm1vdW50aW5nQ29uZmlncyA9IG1vdW50aW5nQ29uZmlnc1JlY29yZDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHdpZGdldF9jb25maWdzIGZyb20gYXJyYXkgdG8gUmVjb3JkIGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLndpZGdldENvbmZpZ3MgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncykpIHtcbiAgICAgIGNvbnN0IHdpZGdldENvbmZpZ3NBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzIGFzIEFycmF5PHtcbiAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZzogdW5rbm93bjtcbiAgICAgIH0+O1xuICAgICAgY29uc3Qgd2lkZ2V0Q29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHdpZGdldENvbmZpZ3NBcnJheSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaXRlbSAmJlxuICAgICAgICAgIHR5cGVvZiBpdGVtLmtleSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBpdGVtLmNvbmZpZyAmJlxuICAgICAgICAgIHR5cGVvZiBpdGVtLmNvbmZpZyA9PT0gJ29iamVjdCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gd2lkZ2V0IGNvbmZpZyB1c2luZyB0aGUgZGVkaWNhdGVkIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGl0ZW0uY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWcoY29uZmlnLCBpdGVtLmtleSk7XG4gICAgICAgICAgICB3aWRnZXRDb25maWdzUmVjb3JkW2l0ZW0ua2V5XSA9IHZhbGlkYXRlZENvbmZpZztcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgd2lkZ2V0IGNvbmZpZywgc2tpcHBpbmcnLCBlcnJvciwge1xuICAgICAgICAgICAgICBjb25maWdLZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICBjb25maWc6IGl0ZW0uY29uZmlnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDb250aW51ZSBwcm9jZXNzaW5nIG90aGVyIGNvbmZpZ3NcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ0ludmFsaWQgd2lkZ2V0IGNvbmZpZyBpdGVtIHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgaXRlbSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncyA9IHdpZGdldENvbmZpZ3NSZWNvcmQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YSBhcyBGcm9udGVuZENvbmZpZztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBMb2dnZXIubG9nV2FybignRmFpbGVkIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gR3JhcGhRTCBmcm9udGVuZCBjb25maWcgZGF0YScsIGVycm9yLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdmFsaWRhdGVHcmFwaFFMT3JnSWQgPSAoZGF0YTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycgfHwgZGF0YSA9PT0gJycpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiaW1wb3J0IHsgaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIH0gZnJvbSAnLi4vZ3VhcmRzL2lzTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlcic7XG5pbXBvcnQgeyBNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIH0gZnJvbSAnLi4vbW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlcic7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgPSAoXG4gIHZhbHVlOiB1bmtub3duLFxuKTogTW9iaWxlUExQQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyKHZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJvd0luZGV4OiB2YWx1ZS5yb3dfaW5kZXgsXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnYW5pemF0aW9uQ29uZmlnJztcbmltcG9ydCB7IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JnYW5pemF0aW9uQ29uZmlnJztcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBPcmdhbml6YXRpb25Db25maWcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzQXBpT3JnYW5pemF0aW9uQ29uZmlnKGRhdGEpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IGRhdGEuaWQsXG4gICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQudG9JU09TdHJpbmcoKSxcbiAgICBuYW1lc3BhY2U6IGRhdGEubmFtZXNwYWNlLFxuICAgIG9yZ2FuaXphdGlvbklkOiBkYXRhLm9yZ2FuaXphdGlvbl9pZCxcbiAgICBpc0xhdGVzdDogZGF0YS5pc19sYXRlc3QsXG4gICAgdmVyc2lvbjogZGF0YS52ZXJzaW9uLFxuICAgIHVwZGF0ZWRBdDogZGF0YS51cGRhdGVkX2F0LnRvSVNPU3RyaW5nKCksXG4gICAgY29uZmlnOiB7XG4gICAgICBhbXBsaXR1ZGU6IGRhdGEuY29uZmlnLmFtcGxpdHVkZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHNlc3Npb25SZXBsYXlFbmFibGVkOiBkYXRhLmNvbmZpZy5hbXBsaXR1ZGUuc2Vzc2lvbl9yZXBsYXlfZW5hYmxlZCxcbiAgICAgICAgICAgIHNlc3Npb25SZXBsYXlTYW1wbGVSYXRlOiBkYXRhLmNvbmZpZy5hbXBsaXR1ZGUuc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUsXG4gICAgICAgICAgICB0cmFja2luZ0VuYWJsZWQ6IGRhdGEuY29uZmlnLmFtcGxpdHVkZS50cmFja2luZ19lbmFibGVkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjdXN0b21lclNlcnZpY2U6IGRhdGEuY29uZmlnLmN1c3RvbWVyX3NlcnZpY2VcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBwcm92aWRlcjogZGF0YS5jb25maWcuY3VzdG9tZXJfc2VydmljZS5wcm92aWRlcixcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZ29vZ2xlQW5hbHl0aWNzOiBkYXRhLmNvbmZpZy5nb29nbGVfYW5hbHl0aWNzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgbWVhc3VyZW1lbnRJZDogZGF0YS5jb25maWcuZ29vZ2xlX2FuYWx5dGljcy5tZWFzdXJlbWVudF9pZCxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0sXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgaXNBcGlPcmdDb25maWdSZXN1bHRzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpT3JnQ29uZmlnUmVzdWx0cyc7XG5pbXBvcnQgeyBPcmdDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbmltcG9ydCB7IHZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ2FuaXphdGlvbkNvbmZpZyc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzID0gKGRhdGE6IHVua25vd24pOiBPcmdDb25maWcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzQXBpT3JnQ29uZmlnUmVzdWx0cyhkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ3M6IGRhdGEuY29uZmlnc1xuICAgICAgLm1hcCgoY29uZmlnKSA9PiB2YWxpZGF0ZU9yZ2FuaXphdGlvbkNvbmZpZyhjb25maWcpKVxuICAgICAgLmZpbHRlcigoY29uZmlnKTogY29uZmlnIGlzIE9yZ2FuaXphdGlvbkNvbmZpZyA9PiBjb25maWcgIT0gbnVsbCksXG4gICAgZXhwZXJpbWVudHM6IGRhdGEuZXhwZXJpbWVudHMubWFwKChleHBlcmltZW50KSA9PiAoe1xuICAgICAgZ3JvdXA6IGV4cGVyaW1lbnQuZ3JvdXAsXG4gICAgICBncm91cE5hbWU6IGV4cGVyaW1lbnQuZ3JvdXBfbmFtZSxcbiAgICAgIG5hbWU6IGV4cGVyaW1lbnQubmFtZSxcbiAgICAgIHJ1bGVJZDogZXhwZXJpbWVudC5ydWxlX2lkLFxuICAgICAgLy8gVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHN0cm9uZ2x5IHR5cGVkIGJ1dCB3ZSdyZSBub3QgcnVubmluZyBhbnkgZXhwZXJpbWVudHMgYXQgdGhlIG1vbWVudFxuICAgICAgdmFsdWU6IGV4cGVyaW1lbnQudmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgfSkpLFxuICAgIGdhdGVzOiBkYXRhLmdhdGVzLm1hcCgoZ2F0ZSkgPT4gKHtcbiAgICAgIGdyb3VwTmFtZTogZ2F0ZS5ncm91cF9uYW1lLFxuICAgICAgbmFtZTogZ2F0ZS5uYW1lLFxuICAgICAgcnVsZUlkOiBnYXRlLnJ1bGVfaWQsXG4gICAgICB2YWx1ZTogZ2F0ZS52YWx1ZSxcbiAgICB9KSksXG4gICAgb3JnOiB7XG4gICAgICBvcmc6IHtcbiAgICAgICAgaWQ6IGRhdGEub3JnLm9yZy5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGRhdGEub3JnLm9yZy5kaXNwbGF5X25hbWUsXG4gICAgICAgIGRvbWFpbjogZGF0YS5vcmcub3JnLmRvbWFpbixcbiAgICAgICAgc2hvcnROYW1lOiBkYXRhLm9yZy5vcmcuc2hvcnRfbmFtZSxcbiAgICAgICAgc3RhdHVzOiBkYXRhLm9yZy5vcmcuc3RhdHVzLFxuICAgICAgICBjcmVhdGVkQXQ6IGRhdGEub3JnLm9yZy5jcmVhdGVkX2F0Py50b0lTT1N0cmluZygpLFxuICAgICAgICB1cGRhdGVkQXQ6IGRhdGEub3JnLm9yZy51cGRhdGVkX2F0Py50b0lTT1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIHNldHRpbmdzOiB7fSxcbiAgICB9LFxuICB9O1xufTtcbiIsImltcG9ydCB7IFJlc3BvbnNlQ2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgUmVzcG9uc2UsIFJldmlld1JpY2hJbmZvcm1hdGlvbiB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvaW5kZXgnO1xuaW1wb3J0IHsgQXBpUmV2aWV3UmljaEluZm9ybWF0aW9uIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5pbXBvcnQgeyBpc0FwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgaXNBcGlSZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVJlc3BvbnNlJztcbmltcG9ydCB7IGlzQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgaXNBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFNlYXJjaEF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgaXNBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVJlc3BvbnNlJztcbmltcG9ydCB7IGlzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcyc7XG5pbXBvcnQgeyBzdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbHMvc3RyaW5nVG9GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNFbnVtVmFsdWUnO1xuaW1wb3J0IHsgaXNBcGlQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFNlYXJjaEZpbHRlckF0dHJpYnV0ZXMnO1xuXG5jb25zdCByaWNoSW5mb3JtYXRpb25Gcm9tQ29tbWVyY2VSaWNoSW5mb3JtYXRpb24gPSAoXG4gIGRhdGE6IEFwaVJldmlld1JpY2hJbmZvcm1hdGlvbixcbik6IFJldmlld1JpY2hJbmZvcm1hdGlvbiA9PiAoe1xuICBjb25zOiBkYXRhLmNvbnMsXG4gIHByb3M6IGRhdGEucHJvcyxcbiAgcmV2aWV3RGF0ZTogZGF0YS5yZXZpZXdfZGF0ZSxcbiAgcmV2aWV3ZXJUaXRsZTogZGF0YS5yZXZpZXdlcl90aXRsZSxcbiAgcHJvZHVjdEZhbWlsaWFyaXR5OiBkYXRhLnByb2R1Y3RfZmFtaWxpYXJpdHksXG59KTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUmVzcG9uc2UgPSAoZGF0YTogdW5rbm93bik6IFJlc3BvbnNlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaVJlc3BvbnNlKGRhdGEpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlRleHQgJiYgaXNBcGlUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlRleHQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNvbnRlbnQ6IGRhdGEuYXR0cmlidXRlcy5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdCAmJlxuICAgIGlzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgaWQ6IGRhdGEuYXR0cmlidXRlcy5pZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuYXR0cmlidXRlcy5kZXNjcmlwdGlvbixcbiAgICAgICAgaW1hZ2VVcmw6IGRhdGEuYXR0cmlidXRlcy5pbWFnZV91cmwsXG4gICAgICAgIGltYWdlVXJsczogZGF0YS5hdHRyaWJ1dGVzLmltYWdlX3VybHMsXG4gICAgICAgIHRpdGxlOiBkYXRhLmF0dHJpYnV0ZXMudGl0bGUsXG4gICAgICAgIHVybDogZGF0YS5hdHRyaWJ1dGVzLnVybCxcbiAgICAgICAgb3JpZ2luYWxQcmljZTogZGF0YS5hdHRyaWJ1dGVzLm9yaWdpbmFsX3ByaWNlLFxuICAgICAgICBzYWxlUHJpY2U6IGRhdGEuYXR0cmlidXRlcy5zYWxlX3ByaWNlLFxuICAgICAgICBhdmVyYWdlUmF0aW5nOiBkYXRhLmF0dHJpYnV0ZXMuYXZlcmFnZV9yYXRpbmcsXG4gICAgICAgIG51bWJlclJldmlld3M6IGRhdGEuYXR0cmlidXRlcy5udW1iZXJfcmV2aWV3cyxcbiAgICAgICAgbWV0YWRhdGE6IGRhdGEuYXR0cmlidXRlcy5tZXRhZGF0YSxcbiAgICAgICAgaXNGb3JHcmlkOiBkYXRhLmF0dHJpYnV0ZXMuaXNfZm9yX2dyaWQsXG4gICAgICAgIGNvbG9yczogZGF0YS5hdHRyaWJ1dGVzLmNvbG9ycyxcbiAgICAgICAgc2l6ZXM6IGRhdGEuYXR0cmlidXRlcy5zaXplcyxcbiAgICAgICAgZmlsdGVyczogZGF0YS5hdHRyaWJ1dGVzLmZpbHRlcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5SZXZpZXcgJiYgaXNBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKSkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUmV2aWV3LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBpZDogZGF0YS5hdHRyaWJ1dGVzLmlkLFxuICAgICAgICBwcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2lkLFxuICAgICAgICB0aXRsZTogZGF0YS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICByZXZpZXdlcjogZGF0YS5hdHRyaWJ1dGVzLnJldmlld2VyLFxuICAgICAgICByZXZpZXc6IGRhdGEuYXR0cmlidXRlcy5yZXZpZXcsXG4gICAgICAgIHN0YXJzOiBkYXRhLmF0dHJpYnV0ZXMuc3RhcnMsXG4gICAgICAgIHJpY2hJbmZvcm1hdGlvbjogZGF0YS5hdHRyaWJ1dGVzLnJpY2hfaW5mb3JtYXRpb25cbiAgICAgICAgICA/IHJpY2hJbmZvcm1hdGlvbkZyb21Db21tZXJjZVJpY2hJbmZvcm1hdGlvbihkYXRhLmF0dHJpYnV0ZXMucmljaF9pbmZvcm1hdGlvbilcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlNlcGFyYXRvcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuU2VwYXJhdG9yLFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5QYWdlICYmIGlzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5QYWdlLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBpZDogZGF0YS5hdHRyaWJ1dGVzLmlkLFxuICAgICAgICB0aXRsZTogZGF0YS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5hdHRyaWJ1dGVzLmRlc2NyaXB0aW9uLFxuICAgICAgICB1cmw6IGRhdGEuYXR0cmlidXRlcy51cmwsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Gb3JtICYmIGlzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Gb3JtLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBmb3JtQ2F0ZWdvcnk6IGRhdGEuYXR0cmlidXRlcy5mb3JtX2NhdGVnb3J5XG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGZvcm1UeXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybV9jYXRlZ29yeS5mb3JtX3R5cGUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIHByb3BlcnRpZXM6IGRhdGEuYXR0cmlidXRlcy5zY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICByZXF1aXJlZDogZGF0YS5hdHRyaWJ1dGVzLnNjaGVtYS5yZXF1aXJlZC5tYXAoU3RyaW5nKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3RTZWFyY2ggJiZcbiAgICBpc0FwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3RTZWFyY2gsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGdlbmVyYXRlZFF1ZXJ5OiBkYXRhLmF0dHJpYnV0ZXMuZ2VuZXJhdGVkX3F1ZXJ5LFxuICAgICAgICBwcm9kdWN0Q291bnQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2NvdW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlciAmJlxuICAgIGlzQXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlcixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZmlsdGVyTmFtZTogZGF0YS5hdHRyaWJ1dGVzLmZpbHRlcl9uYW1lLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuT3JkZXIgJiYgaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5PcmRlcixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgb3JkZXJJZDogZGF0YS5hdHRyaWJ1dGVzLm9yZGVyX2lkLFxuICAgICAgICBvcmRlck51bWJlcjogZGF0YS5hdHRyaWJ1dGVzLm9yZGVyX251bWJlcixcbiAgICAgICAgY3JlYXRlZEF0OiBkYXRhLmF0dHJpYnV0ZXMuY3JlYXRlZF9hdCxcbiAgICAgICAgbGF0ZXN0RXZlbnREYXRlOiBkYXRhLmF0dHJpYnV0ZXMubGF0ZXN0X2V2ZW50X2RhdGUsXG4gICAgICAgIGxpbmVJdGVtczogZGF0YS5hdHRyaWJ1dGVzLmxpbmVfaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgIGl0ZW1UaXRsZTogaXRlbS5pdGVtX3RpdGxlLFxuICAgICAgICAgIGl0ZW1QcmljZTogaXRlbS5pdGVtX3ByaWNlLFxuICAgICAgICAgIGl0ZW1RdWFudGl0eTogaXRlbS5pdGVtX3F1YW50aXR5LFxuICAgICAgICAgIG9yZGVySXRlbUlkOiBpdGVtLm9yZGVyX2l0ZW1faWQsXG4gICAgICAgICAgaW1hZ2U6IGl0ZW0uaW1hZ2UgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIGluVHJhbnNpdEF0OiBpdGVtLmluX3RyYW5zaXRfYXQgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIGRlbGl2ZXJlZEF0OiBpdGVtLmRlbGl2ZXJlZF9hdCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgZXN0aW1hdGVkRGVsaXZlcnlBdDogaXRlbS5lc3RpbWF0ZWRfZGVsaXZlcnlfYXQgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgIGZ1bGZpbGxtZW50RGlzcGxheVN0YXR1czogaXRlbS5mdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1c1xuICAgICAgICAgICAgPyBzdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZShpdGVtLmZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdHJhY2tpbmdVcmw6IGl0ZW0udHJhY2tpbmdfdXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBpc1N1Z2dlc3Rpb24gfSBmcm9tICcuLi9ndWFyZHMvYXBpL2lzQXBpU3VnZ2VzdGlvbic7XG5pbXBvcnQgeyBTdWdnZXN0aW9uIH0gZnJvbSAnLi4vYXBpL3N1Z2dlc3Rpb24nO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdWdnZXN0aW9uID0gKGRhdGE6IHVua25vd24pOiBTdWdnZXN0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc1N1Z2dlc3Rpb24oZGF0YSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogZGF0YS5pZCxcbiAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICBjb250ZW50OiBkYXRhLmNvbnRlbnQsXG4gICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgaXNBbnN3ZXI6IGRhdGEuaXNfYW5zd2VyLFxuICB9O1xufTtcbiIsImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IGlzQXBpVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpVXNlckV2ZW50JztcbmltcG9ydCB7IFVzZXJFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvaW5kZXgnO1xuaW1wb3J0IHsgaXNBcGlQRFBBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUERQRXZlbnRBdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzQXBpUXVlcnlUeXBlZEF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlRdWVyeVR5cGVkRXZlbnRBdHRyaWJ1dGVzJztcbmltcG9ydCB7IGlzQXBpU2VhcmNoQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVNlYXJjaEV2ZW50QXR0cmlidXRlcyc7XG5pbXBvcnQgeyBpc0FwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVN1Z2dlc3Rpb25DbGlja2VkRXZlbnRBdHRyaWJ1dGVzJztcbmltcG9ydCB7XG4gIGlzQXBpUExQRXZlbnRBdHRyaWJ1dGVzLFxuICBpc0FwaVBMUElkQXR0cmlidXRlLFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQTFBFdmVudEF0dHJpYnV0ZXMnO1xuaW1wb3J0IHsgaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcyc7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVVzZXJFdmVudCA9IChkYXRhOiB1bmtub3duKTogVXNlckV2ZW50IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaVVzZXJFdmVudChkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgJiYgaXNBcGlQRFBBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcykpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2lkLFxuICAgICAgICBwYXJlbnRQcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wYXJlbnRfcHJvZHVjdF9pZCxcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQgJiZcbiAgICBpc0FwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50SWQ6IGRhdGEuZXZlbnRfaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBxdWVyeTogZGF0YS5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCAmJiBpc0FwaVNlYXJjaEF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKSkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiBkYXRhLmV2ZW50X2lkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzZWFyY2hUZXJtOiBkYXRhLmF0dHJpYnV0ZXMuc2VhcmNoX3Rlcm0sXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogZGF0YS5hdHRyaWJ1dGVzLnNlbGVjdGVkX2ZpbHRlcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQgJiZcbiAgICBpc0FwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiBkYXRhLmV2ZW50X2lkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHN1Z2dlc3Rpb25JZDogZGF0YS5hdHRyaWJ1dGVzLnN1Z2dlc3Rpb25faWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQgJiYgaXNBcGlQTFBFdmVudEF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKSkge1xuICAgIGlmIChpc0FwaVBMUElkQXR0cmlidXRlKGRhdGEuYXR0cmlidXRlcykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV2ZW50SWQ6IGRhdGEuZXZlbnRfaWQsXG4gICAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjYXRlZ29yeTogZGF0YS5hdHRyaWJ1dGVzLmNhdGVnb3J5LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGlkOiBkYXRhLmF0dHJpYnV0ZXMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQgJiZcbiAgICBpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGZpbGxlZFNjaGVtYTogeyAuLi5kYXRhLmF0dHJpYnV0ZXMuZmlsbGVkX3NjaGVtYSB9LFxuICAgICAgICBmb3JtUmVzcG9uc2VJZDogZGF0YS5hdHRyaWJ1dGVzLmZvcm1fcmVzcG9uc2VfaWQsXG4gICAgICAgIGZvcm1UeXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybV90eXBlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gd2UncmUgbm90IHVzaW5nIGFwcF91bmxvYWRlZCBhdCB0aGUgbW9tZW50IHNvIHJldHVybiB0aGUgYXBwX2xvYWRlZCBldmVudCBhcyBkZWZhdWx0XG4gIHJldHVybiB7XG4gICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwTG9hZGVkLFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLElBQVksb0ZBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUNwQkYsSUFBWSw4REFBTDtBQUNMO0FBQ0E7Ozs7OztBQ0hGLElBQUssMEVBQUw7QUFDRTtBQUNBOztFQUZHOzs7O0FDYUwsSUFBWSxzREFBTDtBQUNMO0FBQ0E7OztBQUdGLElBQVksc0RBQUw7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUNoQ0YsTUFBYSxlQUFlO0NBQzFCLFNBQVM7Q0FDVCxrQkFBa0I7Q0FDbEIsVUFBVTtDQUNWLGFBQWE7Q0FDYixnQkFBZ0I7Q0FDaEIsa0JB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