@kontur.candy/tools 2.124.0 → 2.128.0

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 (239) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/distr/Common/AsyncUtils.js +30 -1
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +42 -1
  4. package/distr/Common/CandyApiClient/CandyApiClientContext.js +33 -1
  5. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +4 -0
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +4 -0
  7. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +29 -1
  8. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +4 -0
  9. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +35 -1
  10. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +35 -1
  11. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +37 -1
  12. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +29 -1
  13. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +34 -1
  14. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +28 -1
  15. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +4 -0
  16. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +33 -1
  17. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +29 -1
  18. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +6 -1
  19. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +4 -0
  20. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +4 -0
  21. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +41 -1
  22. package/distr/Common/CandyApiClient/ICandyApiClient.js +5 -1
  23. package/distr/Common/CandyApiClient/IsBuffer.js +29 -1
  24. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +4 -0
  25. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +4 -0
  26. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +4 -0
  27. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +4 -0
  28. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +4 -0
  29. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +6 -1
  30. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +4 -0
  31. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +4 -0
  32. package/distr/Common/CandyApiClient/Types/DraftFullId.js +4 -0
  33. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +4 -0
  34. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +6 -1
  35. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +4 -0
  36. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +4 -0
  37. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +6 -1
  38. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +4 -0
  39. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +4 -0
  40. package/distr/Common/CandyApiClient/Types/Guid.js +4 -0
  41. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +6 -1
  42. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +4 -0
  43. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +4 -0
  44. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +6 -1
  45. package/distr/Common/CommonConstants/SectionNames.js +28 -1
  46. package/distr/Common/Comparers.js +30 -8
  47. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +29 -1
  48. package/distr/Common/EndPoints.js +34 -1
  49. package/distr/Common/Errors.js +69 -1
  50. package/distr/Common/FormActionHandlers/ContextualActionNames.js +30 -1
  51. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +4 -0
  52. package/distr/Common/Funcs.js +29 -1
  53. package/distr/Common/GFV.js +4 -0
  54. package/distr/Common/HttpClient/AuthenticationMode.js +32 -1
  55. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +28 -1
  56. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +4 -0
  57. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +29 -1
  58. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +31 -1
  59. package/distr/Common/HttpClient/HttpClient.js +62 -4
  60. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +4 -0
  61. package/distr/Common/HttpClient/IHttpClient.js +4 -0
  62. package/distr/Common/IntRangeUtils.js +31 -1
  63. package/distr/Common/IterableUtils.js +38 -1
  64. package/distr/Common/KCLangRuntimeUtils.js +36 -1
  65. package/distr/Common/ModelPath/AbsoluteModelPathSet.js +34 -1
  66. package/distr/Common/ModelPath/BuildIterationSequence.js +29 -1
  67. package/distr/Common/ModelPath/EachCurrentCollision.js +6 -1
  68. package/distr/Common/ModelPath/IEquatable.js +4 -0
  69. package/distr/Common/ModelPath/ModelPath.js +54 -1
  70. package/distr/Common/ModelPath/ModelPathBuilder.js +34 -1
  71. package/distr/Common/ModelPath/ModelPathMap.js +41 -1
  72. package/distr/Common/ModelPath/ModelPathSet.js +34 -1
  73. package/distr/Common/ModelPath/PathMatcher.js +28 -1
  74. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +34 -1
  75. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +4 -0
  76. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +29 -1
  77. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +34 -1
  78. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +38 -1
  79. package/distr/Common/NidusClient/INidusClient.js +30 -1
  80. package/distr/Common/NidusClient/NidusClientContext.js +38 -1
  81. package/distr/Common/NidusClient/NidusClientImpl.js +34 -1
  82. package/distr/Common/PathConstants.js +29 -1
  83. package/distr/Common/TypingUtils.js +55 -1
  84. package/distr/Common/UUID.js +30 -1
  85. package/distr/Common/UseAsyncEffect.js +31 -1
  86. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +34 -1
  87. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +29 -1
  88. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +30 -1
  89. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +34 -1
  90. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +34 -1
  91. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +29 -1
  92. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +32 -1
  93. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +28 -1
  94. package/distr/Tools/src/BuildTasks/FSTask.js +28 -1
  95. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +30 -1
  96. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +37 -1
  97. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +34 -1
  98. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +29 -1
  99. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +29 -1
  100. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +31 -1
  101. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +34 -1
  102. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +35 -1
  103. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +37 -2
  104. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +34 -2
  105. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +5 -1
  106. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +5 -1
  107. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +33 -3
  108. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +29 -2
  109. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +28 -1
  110. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +34 -1
  111. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +45 -1
  112. package/distr/Tools/src/BuildTasks/ReadFormSource.js +37 -1
  113. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +31 -1
  114. package/distr/Tools/src/BuildTasks/Version.js +32 -1
  115. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +29 -1
  116. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +30 -1
  117. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +28 -1
  118. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +31 -1
  119. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +48 -6
  120. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +29 -1
  121. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +34 -1
  122. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +42 -1
  123. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +34 -1
  124. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +36 -2
  125. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +35 -1
  126. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +34 -1
  127. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +45 -4
  128. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +34 -1
  129. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +34 -1
  130. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +41 -3
  131. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +41 -3
  132. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +39 -21
  133. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +29 -1
  134. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +43 -3
  135. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +48 -4
  136. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +29 -1
  137. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +4 -0
  138. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +4 -0
  139. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +42 -2
  140. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +34 -1
  141. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +29 -1
  142. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +4 -0
  143. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +34 -15
  144. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +29 -1
  145. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +25 -13
  146. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +30 -1
  147. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +4 -0
  148. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +28 -1
  149. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +29 -8
  150. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +28 -1
  151. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +29 -1
  152. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +43 -4
  153. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +30 -1
  154. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +29 -1
  155. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +34 -1
  156. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +34 -1
  157. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +29 -1
  158. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +28 -1
  159. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +30 -1
  160. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +28 -1
  161. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +30 -1
  162. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +33 -2
  163. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +29 -1
  164. package/distr/Tools/src/CandyCLI.js +29 -1
  165. package/distr/Tools/src/CheckNodeJsVersion.js +31 -1
  166. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +33 -2
  167. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +34 -1
  168. package/distr/Tools/src/Commons/ErrorUntyped.js +4 -0
  169. package/distr/Tools/src/Commons/EventObject.js +44 -2
  170. package/distr/Tools/src/Commons/ExecUtils.js +29 -1
  171. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +29 -1
  172. package/distr/Tools/src/Commons/FormGlobsUtils.js +34 -1
  173. package/distr/Tools/src/Commons/FsUtils.js +32 -1
  174. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +32 -1
  175. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +33 -2
  176. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +34 -1
  177. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +34 -1
  178. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +4 -0
  179. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +34 -1
  180. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +34 -1
  181. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +34 -2
  182. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +34 -1
  183. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +37 -2
  184. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +34 -1
  185. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +34 -1
  186. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +34 -1
  187. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +34 -1
  188. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +4 -0
  189. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +34 -1
  190. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +34 -1
  191. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +71 -5
  192. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +28 -1
  193. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +83 -12
  194. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +35 -2
  195. package/distr/Tools/src/Commons/Locks/Lock.js +34 -1
  196. package/distr/Tools/src/Commons/Locks/LockHandle.js +34 -1
  197. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +34 -1
  198. package/distr/Tools/src/Commons/Logging/ELKLogger.js +31 -1
  199. package/distr/Tools/src/Commons/Logging/ILogger.js +36 -1
  200. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +41 -1
  201. package/distr/Tools/src/Commons/Logging/Logger.js +35 -2
  202. package/distr/Tools/src/Commons/Logging/StaticLogger.js +38 -1
  203. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +30 -1
  204. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +48 -1
  205. package/distr/Tools/src/Commons/PathPattern.js +34 -1
  206. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +34 -1
  207. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +4 -0
  208. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +89 -1
  209. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +34 -1
  210. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +34 -1
  211. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +34 -1
  212. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +34 -1
  213. package/distr/Tools/src/Commons/TasksCore/Observe.js +28 -1
  214. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +34 -1
  215. package/distr/Tools/src/Commons/TimingUtils.js +29 -1
  216. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +42 -1
  217. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +32 -2
  218. package/distr/Tools/src/GenerateReadMe.js +31 -1
  219. package/distr/Tools/src/Keys/localhost-key.pem +35 -0
  220. package/distr/Tools/src/Keys/localhost.pem +80 -0
  221. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +2 -46786
  222. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +38 -0
  223. package/distr/Tools/src/LocalServerFrontEndDist/index.html +1 -9
  224. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -99398
  225. package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +49 -0
  226. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  227. package/distr/Tools/src/Options/CandyToolOptions.js +28 -1
  228. package/distr/Tools/src/ReadFarmConfig.js +29 -1
  229. package/distr/Tools/src/SelfUpdate.js +44 -10
  230. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +5 -1
  231. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +5 -1
  232. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +5 -1
  233. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +5 -1
  234. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +5 -1
  235. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +5 -1
  236. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +5 -1
  237. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +5 -1
  238. package/package.json +1 -3
  239. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.map +0 -1
@@ -1,5 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
4
+ return a;
5
+ };
6
+
3
7
  !function () {
4
8
  "use strict";
5
9
 
@@ -953,4 +957,4 @@
953
957
  };
954
958
  e.g.CF = ue;
955
959
  }();
956
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL0NhbmR5RW5naW5lL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvQ29tbW9uL0Vycm9ycy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIiwid2VicGFjazovL0NhbmR5RW5naW5lL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiZyIsImdsb2JhbFRoaXMiLCJ0aGlzIiwiRnVuY3Rpb24iLCJlIiwid2luZG93IiwiZ2xvYmFsIiwic2VsZiIsInN1cHBvcnQiLCJTeW1ib2wiLCJCbG9iIiwib2JqIiwiRGF0YVZpZXciLCJwcm90b3R5cGUiLCJpc1Byb3RvdHlwZU9mIiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsIk9iamVjdCIsInRvU3RyaW5nIiwiY2FsbCIsIm5vcm1hbGl6ZU5hbWUiLCJuYW1lIiwiU3RyaW5nIiwidGVzdCIsIlR5cGVFcnJvciIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJ2YWx1ZSIsIml0ZXJhdG9yRm9yIiwiaXRlbXMiLCJpdGVyYXRvciIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJ1bmRlZmluZWQiLCJIZWFkZXJzIiwiaGVhZGVycyIsIm1hcCIsImZvckVhY2giLCJhcHBlbmQiLCJBcnJheSIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwibGVuZ3RoIiwiaSIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJidWZmZXJDbG9uZSIsInNsaWNlIiwiYnl0ZUxlbmd0aCIsImJ1ZmZlciIsIkJvZHkiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJfYm9keUFycmF5QnVmZmVyIiwidHlwZSIsInJlamVjdGVkIiwiRXJyb3IiLCJhcnJheUJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJ0aGVuIiwidGV4dCIsInJlYWRBcnJheUJ1ZmZlckFzVGV4dCIsImZvcm1EYXRhIiwiZGVjb2RlIiwianNvbiIsIkpTT04iLCJwYXJzZSIsIm1ldGhvZHMiLCJtZXRob2QiLCJ1cGNhc2VkIiwidG9VcHBlckNhc2UiLCJSZXF1ZXN0IiwiaW5wdXQiLCJvcHRpb25zIiwidXJsIiwiY3JlZGVudGlhbHMiLCJtb2RlIiwic2lnbmFsIiwicmVmZXJyZXIiLCJjYWNoZSIsInJlUGFyYW1TZWFyY2giLCJyZXBsYWNlIiwiRGF0ZSIsImdldFRpbWUiLCJjbG9uZSIsImZvcm0iLCJ0cmltIiwic3BsaXQiLCJieXRlcyIsImRlY29kZVVSSUNvbXBvbmVudCIsInJhd0hlYWRlcnMiLCJzdWJzdHIiLCJsaW5lIiwicGFydHMiLCJrZXkiLCJSZXNwb25zZSIsImJvZHlJbml0Iiwic3RhdHVzIiwib2siLCJzdGF0dXNUZXh0IiwicmVzcG9uc2UiLCJyZWRpcmVjdFN0YXR1c2VzIiwicmVkaXJlY3QiLCJSYW5nZUVycm9yIiwibG9jYXRpb24iLCJET01FeGNlcHRpb24iLCJlcnIiLCJtZXNzYWdlIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsImZldGNoIiwiaW5pdCIsInJlcXVlc3QiLCJhYm9ydGVkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydFhociIsImFib3J0IiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsImhyZWYiLCJvcGVuIiwiZml4VXJsIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJwb2x5ZmlsbCIsIkxvYWRJbnRvRG9jdW1lbnQiLCJ1cmkiLCJzY3JpcHRMb2FkZWQiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImRvY3VtZW50RWxlbWVudCIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJsb2FkSGFuZGxlciIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaWdub3JlRXJyb3IiLCJsaW5rIiwicGFyc2VCb29sIiwiQm9vbGVhbiIsImNsaWVudFNldHRpbmdzIiwiYXV0aG9yaXplZCIsImNhdWxkcm9uQXBpVXJsIiwiYWJvbklkIiwib3JnSWQiLCJ1c2VySWQiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJwYXRoIiwiZmllbGROYW1lIiwibWFwQ2h1bmtWYWx1ZXMiLCJjaHVuayIsImZpbHRlciIsInJlZHVjZUNodW5rVmFsdWVzIiwiY2h1bmtzIiwicmVkdWNlIiwiTGVnYWN5UHVibGljRm9ybSIsImVycm9yTG9nIiwiZ0lkIiwicGlja2xpc3RzUHJvdmlkZXIiLCJnZXRCeUdJZCIsImV2ZW50TmFtZSIsImxpc3RlbmVyIiwiZXZlbnRNYW5hZ2VyIiwib24iLCJvZmYiLCJjb25zb2xlIiwiY2hhbmdlU2V0Iiwic3RvcEF1dG9zZW5kIiwidW5tb3VudCIsIm1vZGVsIiwiZ2V0Q2FjaGVkQ2h1bmsiLCJzZXR0aW5ncyIsImZvcm1Sb290IiwidmFsaWRhdG9yIiwidmFsaWRhdGVBbGwiLCJlcnJvckNvdW50IiwiZ2V0Q2FjaGVkIiwicGF0aE9yTW9kZWxDaHVuayIsImlubmVyQ2h1bmsiLCJmaWxsIiwicGF0aE9yQXJyYXkiLCJhcnJheSIsImNvbmNhdCIsImluc3RhbmNlIiwiZGVmYXVsdENhbGxiYWNrIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImlzQWxsb3dlZCIsImRvbWFpbnMiLCJSZWdFeHAiLCJob3N0IiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwic2VhcmNoIiwicGFyYW0iLCJmaW5kIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwibGVmdCIsInJpZ2h0IiwibGVmdE51bWJlcnMiLCJwYXJzZUludCIsIngiLCJyaWdodE51bWJlcnMiLCJsb2FkRm9ybSIsImdmdiIsImVuZ2luZVZlcnNpb24iLCJ0aGVtZSIsImVudHJ5UG9pbnQiLCJpc05lZWRFbmdpbmUiLCJ1c2VTYW1lUmVzb3VyY2VzRm9yVGhlbWUiLCJpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwiLCJtaW4iLCJ0aGVtZVBvc3RmaXgiLCJ2IiwicmVzb3VyY2Vab25lIiwic3R5bGVTaGVldCIsImNiIiwicnVuUGFyYWxsZWwiLCJyZW5kZXJGb3JtIiwicGFnZUNvbnRlbnQiLCJleHRlbmRlZFNldHRpbmdzIiwicHVibGljRm9ybSIsImNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0iLCJnZXRFbmdpbmVFbnRyeVBvaW50IiwibnMiLCJkcmFmdElkIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsImZldGNoSW1wbCIsImNsaWVudERyYWZ0SW5mbyIsImVuZ2luZVZlcnNpb25QYXJhbSIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwibG9hZEVycm9yIiwicmVuZGVyIiwidGVtcGxhdGVzQXBpIiwiQ2FuZHlDbGllbnRFeHBvcnRzIiwic3RhcnQiLCJwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4Il0sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE1BQUlBLENBQUFBLEdBQXNCLEVBQTFCOzs7Ozs7OztBQ0RBQTs7QUFBQUEsRUFBQUEsQ0FBQUEsQ0FBb0JDLENBQXBCRCxHQUF3QixZQUFBO0FBQ3ZCLFFBQTBCLFlBQUEsT0FBZkUsVUFBWCxFQUFvQyxPQUFPQSxVQUFQOztBQUNwQyxRQUFBO0FB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QUEsQ0FBQUEsQ0FBT3VQLEVBQVB2UCxHQUFZcVQsRUFBWnJUIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGFib25JZDogXCJ7YWJvbklkfVwiLFxuICAgIG9yZ0lkOiBcIntvcmdJZH1cIixcbiAgICB1c2VySWQ6IFwie3VzZXJJZH1cIixcbiAgICBpc1Rlc3RTZXJ2ZXI6IHBhcnNlQm9vbChcIntpc1Rlc3RTZXJ2ZXJ9XCIpLFxuICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntyZW5kZXJDYWNoaW5nRm9ySUU4fVwiKSxcbiAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IHBhcnNlQm9vbChcIntub3JtYWxpemF0aW9uT25TZXJ2ZXJ9XCIpLFxuICAgIG5vcm1hdGl2ZVVybDogXCJ7bm9ybWF0aXZlVXJsfVwiLFxuICAgIHJlc291cmNlc1ZlcnNpb246IFwie3Jlc291cmNlc1ZlcnNpb259XCIsXG4gICAga29udHVyRG9tYWluczogXCJ7a29udHVyRG9tYWluc31cIixcbn07XG4iLCJleHBvcnQgY2xhc3MgQXBwbGljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSA/PyBcIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRQcm9ncmFtU3RhdGVFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQXBpL0NhbmR5QXBpQ2xpZW50L1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeUZpbHRlciwgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFNlcnZlckVycm9yTG9nKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeUdJZChnSWQ6IHN0cmluZywgZmlsdGVyPzogUGlja2xpc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0QnlHSWQoZ0lkLCBmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vZmZNb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZvcm0uY2hhbmdlU2V0LnN0b3BBdXRvc2VuZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnVubW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS51bm1vdW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvdXJTdGVwcygpOiBTdGVwW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLm1vZGVsLmdldENhY2hlZENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpO1xuICAgICAgICAvLyBAdHMtaWdub3JlINCt0YLQviDQsiDRgdGC0LDRgNGL0YUg0LTQstC40LbQutCw0YUg0YLRg9GCINGC0LDQutC+0Lkg0LLRi9C30L7QslxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZGF0b3IudmFsaWRhdGVBbGwoa2V5cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWQodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpO1xuICAgICAgICByZXR1cm4gZXJyb3JDb3VudCAhPSB1bmRlZmluZWQgJiYgZXJyb3JDb3VudCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24obW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9KTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcsIHZhbHVlOiBNb2RlbFZhbHVlKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChcbiAgICAgICAgcGF0aE9yTW9kZWxDaHVuazogc3RyaW5nIHwgeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIHZhbHVlPzogTW9kZWxWYWx1ZVxuICAgICk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aE9yTW9kZWxDaHVuayAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwYXRoT3JNb2RlbENodW5rKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2h1bmsgPSBPYmplY3Qua2V5cyhwYXRoT3JNb2RlbENodW5rKS5yZWR1Y2U8UmVhZG9ubHlNb2RlbENodW5rPihcbiAgICAgICAgICAgICAgICAocmVzdWx0LCBwYXRoKSA9PiAoeyBbcGF0aF06IHsgdmFsdWU6IHBhdGhPck1vZGVsQ2h1bmtbcGF0aF0gfSwgLi4ucmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuZmlsbChpbm5lckNodW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLnNldChwYXRoT3JNb2RlbENodW5rLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uc2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBvYmplY3Qgd2l0aCBwYXRoLXZhbHVlIHBhaXJzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQocGF0aE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdKTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yQXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMoXG4gICAgICAgICAgICAgICAgcGF0aE9yQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChwYXRoID0+IG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayhwYXRoKSkpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZTxBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+PigocmVzdWx0LCBhcnJheSkgPT4gcmVzdWx0LmNvbmNhdChhcnJheSksIFtdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsocGF0aE9yQXJyYXkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aE9yQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5nZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIGFycmF5IG9mIHBhdGhzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBNb2RlbFZhbHVlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ubW9kZWwuZ2V0KHBhdGgsIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluc3RhbmNlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoaWxkcmVuKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLyogdHNsaW50OmRpc2FibGU6bm8tbnVsbC1rZXl3b3JkIG5vLWFueSBuby11bnNhZmUtYW55ICovXG5pbXBvcnQgeyBmZXRjaCB9IGZyb20gXCJ3aGF0d2ctZmV0Y2hcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcblxuaW1wb3J0IHR5cGUgeyBDbGllbnREcmFmdEluZm9SZXNwb25zZSB9IGZyb20gXCIuL0NsaWVudERyYWZ0SW5mb1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBjbGllbnRTZXR0aW5ncyB9IGZyb20gXCIuL0NsaWVudFNldHRpbmdzXCI7XG5pbXBvcnQgeyBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtIH0gZnJvbSBcIi4vTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtXCI7XG5cbnR5cGUgRm9ybUNvbnRhaW5lciA9IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuXG50eXBlIEVuZ2luZUVudHJ5UG9pbnQgPSAoKSA9PiB2b2lkO1xuXG5pbnRlcmZhY2UgUmVuZGVyRm9ybVNldHRpbmdzIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZW5kZXJGb3JtOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50O1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbn1cblxudHlwZSBTdGFydEZvcm1GdW5jID0gKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MpID0+IFByb21pc2U8SUZvcm0+O1xuXG5pbnRlcmZhY2UgQ2FuZHlHbG9iYWxJbmplY3RlZFZhciB7XG4gICAgc3RhcnQ6IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucywgY2FsbGJhY2s/OiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+KSA9PiB2b2lkO1xuICAgIGtlZm9ybXNVcmw/OiBzdHJpbmc7XG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogYm9vbGVhbjtcbiAgICBlbnRyeVBvaW50OiB7IFtrZXk6IHN0cmluZ106IFN0YXJ0Rm9ybUZ1bmMgfTtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uLCB0aGVtZSB9ID0gc2V0dGluZ3M7XG5cbiAgICBpZiAoZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmVlZEVuZ2luZSA9IGVuZ2luZVZlcnNpb24gJiYgIWdsb2JhbFtlbmdpbmVWZXJzaW9uXTtcbiAgICBjb25zdCB1c2VTYW1lUmVzb3VyY2VzRm9yVGhlbWUgPVxuICAgICAgICBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMDYuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRoZW1lUG9zdGZpeCA9ICF1c2VTYW1lUmVzb3VyY2VzRm9yVGhlbWUgJiYgdGhlbWUgPyBgLiR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoZW1lKX1gIDogXCJcIjtcbiAgICBjb25zdCB0YXNrczogVGFza1tdID0gW107XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7IHY6IHJlc291cmNlc1ZlcnNpb24sIHJlc291cmNlWm9uZTogc2V0dGluZ3MucmVzb3VyY2Vab25lIH07XG4gICAgaWYgKG5lZWRMb2FkU3R5bGVzRm9yR2Z2KSB7XG4gICAgICAgIHRhc2tzLnB1c2goY2IgPT5cbiAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldChcbiAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzLyR7Z2Z2fSR7dGhlbWVQb3N0Zml4fSR7bWlufS5jc3NgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRhc2tzLnB1c2goY2IgPT4gTG9hZEludG9Eb2N1bWVudC5zY3JpcHQodXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvJHtnZnZ9JHttaW59LmpzYCwgcGFyYW1zKSksIGNiKSk7XG5cbiAgICBpZiAoaXNOZWVkRW5naW5lKSB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHt0aGVtZVBvc3RmaXh9JHttaW59LmNzc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnNjcmlwdChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7bWlufS5qc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBydW5QYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZW5kZXJGb3JtKFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPlxuKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUVudHJ5UG9pbnQgPVxuICAgICAgICBnbG9iYWwuQ0YuZW50cnlQb2ludFtleHRlbmRlZFNldHRpbmdzLmdmdl0gPz8gcmVqZWN0KGBGb3JtIGVudHJ5IHBvaW50ICR7ZXh0ZW5kZWRTZXR0aW5ncy5nZnZ9IG5vdCBmb3VuZC5gKTtcbiAgICBmb3JtRW50cnlQb2ludChwYWdlQ29udGVudCwgZXh0ZW5kZWRTZXR0aW5ncylcbiAgICAgICAgLnRoZW4oZm9ybSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGb3JtID0gZm9ybS5wdWJsaWNGb3JtIHx8IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybSk7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHB1YmxpY0Zvcm0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Rm9ybU9wdGlvbnMge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBzZXR0aW5ncyA9IGNsaWVudFNldHRpbmdzO1xuXG4gICAgaWYgKCFpc0FsbG93ZWQoc2V0dGluZ3Mua29udHVyRG9tYWlucykpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJkb21haW4udW50cnVzdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIXNldHRpbmdzLmF1dGhvcml6ZWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJ1c2VyLnVuYXV0aGVudGljYXRlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFkcmFmdElkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5kcmFmdElkIGlzIHJlcXVpcmVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIW5zKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5ucyBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2Vab25lID0gb3B0aW9ucy5yZXNvdXJjZVpvbmUgPz8gZ2V0UGFyYW1ldGVyQnlOYW1lKFwicmVzb3VyY2Vab25lXCIpO1xuICAgIGNvbnN0IGNsaWVudERyYWZ0VXJsID0gYnVpbGRVcmwodXJsKGB2MS9ucy8ke25zfS9kcmFmdHMvJHtkcmFmdElkfS9jbGllbnQtZHJhZnQtaW5mb2ApLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBnZnYgfSA9IGNsaWVudERyYWZ0SW5mbztcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb25QYXJhbSA9IGdldFBhcmFtZXRlckJ5TmFtZShcImVuZ2luZVZlcnNpb25cIik7XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uID0gY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb25cbiAgICAgICAgICAgICAgICA/IGVuZ2luZVZlcnNpb25QYXJhbSB8fCBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvblxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5jbGllbnREcmFmdEluZm8sXG4gICAgICAgICAgICAgICAgbW9kZWw6IG9wdGlvbnMubW9kZWwsXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbGVhbkZvcm06IG9wdGlvbnMuaXNEaXNhYmxlZENsZWFuRm9ybSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBlbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uOiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbG9hZEZvcm0oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBnZnY6IGV4dGVuZGVkU2V0dGluZ3MuZ2Z2LFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLmVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgdGhlbWU6IGV4dGVuZGVkU2V0dGluZ3MudGhlbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEVycm9yIHx8ICFnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoYGR5bmFtaWMgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBnZnYgJHtnZnZ9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4dGVuZGVkU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzQXBpOiBvcHRpb25zLnRlbXBsYXRlc0FwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtOiByZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5jb25zdCBDYW5keUNsaWVudEV4cG9ydHM6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVudHJ5UG9pbnQ6IHt9LFxuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4fVwiKSxcbiAgICBrZWZvcm1zVXJsOiBcIntrZWZvcm1zVXJsfVwiLFxufTtcblxuZ2xvYmFsLkNGID0gQ2FuZHlDbGllbnRFeHBvcnRzO1xuXG5leHBvcnQgeyBDYW5keUNsaWVudEV4cG9ydHMgfTtcbiIsIi8qKipcbiAqINCh0YLRgNC+0LPQvtGC0LjQv9C40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LfQsNC80LXQvdCwINC00LvRjyBCb29sZWFuKC4uLilcbiAqINCe0LHRi9GH0L3QviDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LTQu9GPIFsuLi5dLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiB1bmRlZmluZWQgfCBudWxsIHwgVCk6IGlucHV0IGlzIFQge1xuICAgIHJldHVybiBpbnB1dCAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgcmV0dXJuIGAke25ldmVyQXJndW1lbnR9YDtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
960
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL0NhbmR5RW5naW5lL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvQ29tbW9uL0Vycm9ycy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIiwid2VicGFjazovL0NhbmR5RW5naW5lL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiZyIsImdsb2JhbFRoaXMiLCJ0aGlzIiwiRnVuY3Rpb24iLCJlIiwid2luZG93IiwiZ2xvYmFsIiwic2VsZiIsInN1cHBvcnQiLCJTeW1ib2wiLCJCbG9iIiwib2JqIiwiRGF0YVZpZXciLCJwcm90b3R5cGUiLCJpc1Byb3RvdHlwZU9mIiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsIk9iamVjdCIsInRvU3RyaW5nIiwiY2FsbCIsIm5vcm1hbGl6ZU5hbWUiLCJuYW1lIiwiU3RyaW5nIiwidGVzdCIsIlR5cGVFcnJvciIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJ2YWx1ZSIsIml0ZXJhdG9yRm9yIiwiaXRlbXMiLCJpdGVyYXRvciIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJ1bmRlZmluZWQiLCJIZWFkZXJzIiwiaGVhZGVycyIsIm1hcCIsImZvckVhY2giLCJhcHBlbmQiLCJBcnJheSIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwibGVuZ3RoIiwiaSIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJidWZmZXJDbG9uZSIsInNsaWNlIiwiYnl0ZUxlbmd0aCIsImJ1ZmZlciIsIkJvZHkiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJfYm9keUFycmF5QnVmZmVyIiwidHlwZSIsInJlamVjdGVkIiwiRXJyb3IiLCJhcnJheUJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJ0aGVuIiwidGV4dCIsInJlYWRBcnJheUJ1ZmZlckFzVGV4dCIsImZvcm1EYXRhIiwiZGVjb2RlIiwianNvbiIsIkpTT04iLCJwYXJzZSIsIm1ldGhvZHMiLCJtZXRob2QiLCJ1cGNhc2VkIiwidG9VcHBlckNhc2UiLCJSZXF1ZXN0IiwiaW5wdXQiLCJvcHRpb25zIiwidXJsIiwiY3JlZGVudGlhbHMiLCJtb2RlIiwic2lnbmFsIiwicmVmZXJyZXIiLCJjYWNoZSIsInJlUGFyYW1TZWFyY2giLCJyZXBsYWNlIiwiRGF0ZSIsImdldFRpbWUiLCJjbG9uZSIsImZvcm0iLCJ0cmltIiwic3BsaXQiLCJieXRlcyIsImRlY29kZVVSSUNvbXBvbmVudCIsInJhd0hlYWRlcnMiLCJzdWJzdHIiLCJsaW5lIiwicGFydHMiLCJrZXkiLCJSZXNwb25zZSIsImJvZHlJbml0Iiwic3RhdHVzIiwib2siLCJzdGF0dXNUZXh0IiwicmVzcG9uc2UiLCJyZWRpcmVjdFN0YXR1c2VzIiwicmVkaXJlY3QiLCJSYW5nZUVycm9yIiwibG9jYXRpb24iLCJET01FeGNlcHRpb24iLCJlcnIiLCJtZXNzYWdlIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsImZldGNoIiwiaW5pdCIsInJlcXVlc3QiLCJhYm9ydGVkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydFhociIsImFib3J0IiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsImhyZWYiLCJvcGVuIiwiZml4VXJsIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJwb2x5ZmlsbCIsIkxvYWRJbnRvRG9jdW1lbnQiLCJ1cmkiLCJzY3JpcHRMb2FkZWQiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImRvY3VtZW50RWxlbWVudCIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJsb2FkSGFuZGxlciIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaWdub3JlRXJyb3IiLCJsaW5rIiwicGFyc2VCb29sIiwiQm9vbGVhbiIsImNsaWVudFNldHRpbmdzIiwiYXV0aG9yaXplZCIsImNhdWxkcm9uQXBpVXJsIiwiYWJvbklkIiwib3JnSWQiLCJ1c2VySWQiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJwYXRoIiwiZmllbGROYW1lIiwibWFwQ2h1bmtWYWx1ZXMiLCJjaHVuayIsImZpbHRlciIsInJlZHVjZUNodW5rVmFsdWVzIiwiY2h1bmtzIiwicmVkdWNlIiwiTGVnYWN5UHVibGljRm9ybSIsImVycm9yTG9nIiwiZ0lkIiwicGlja2xpc3RzUHJvdmlkZXIiLCJnZXRCeUdJZCIsImV2ZW50TmFtZSIsImxpc3RlbmVyIiwiZXZlbnRNYW5hZ2VyIiwib24iLCJvZmYiLCJjb25zb2xlIiwiY2hhbmdlU2V0Iiwic3RvcEF1dG9zZW5kIiwidW5tb3VudCIsIm1vZGVsIiwiZ2V0Q2FjaGVkQ2h1bmsiLCJzZXR0aW5ncyIsImZvcm1Sb290IiwidmFsaWRhdG9yIiwidmFsaWRhdGVBbGwiLCJlcnJvckNvdW50IiwiZ2V0Q2FjaGVkIiwicGF0aE9yTW9kZWxDaHVuayIsImlubmVyQ2h1bmsiLCJmaWxsIiwicGF0aE9yQXJyYXkiLCJhcnJheSIsImNvbmNhdCIsImluc3RhbmNlIiwiZGVmYXVsdENhbGxiYWNrIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImlzQWxsb3dlZCIsImRvbWFpbnMiLCJSZWdFeHAiLCJob3N0IiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwic2VhcmNoIiwicGFyYW0iLCJmaW5kIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwibGVmdCIsInJpZ2h0IiwibGVmdE51bWJlcnMiLCJwYXJzZUludCIsIngiLCJyaWdodE51bWJlcnMiLCJsb2FkRm9ybSIsImdmdiIsImVuZ2luZVZlcnNpb24iLCJ0aGVtZSIsImVudHJ5UG9pbnQiLCJpc05lZWRFbmdpbmUiLCJ1c2VTYW1lUmVzb3VyY2VzRm9yVGhlbWUiLCJpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwiLCJtaW4iLCJ0aGVtZVBvc3RmaXgiLCJ2IiwicmVzb3VyY2Vab25lIiwic3R5bGVTaGVldCIsImNiIiwicnVuUGFyYWxsZWwiLCJyZW5kZXJGb3JtIiwicGFnZUNvbnRlbnQiLCJleHRlbmRlZFNldHRpbmdzIiwicHVibGljRm9ybSIsImNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0iLCJnZXRFbmdpbmVFbnRyeVBvaW50IiwibnMiLCJkcmFmdElkIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsImZldGNoSW1wbCIsImNsaWVudERyYWZ0SW5mbyIsImVuZ2luZVZlcnNpb25QYXJhbSIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwibG9hZEVycm9yIiwicmVuZGVyIiwidGVtcGxhdGVzQXBpIiwiQ2FuZHlDbGllbnRFeHBvcnRzIiwic3RhcnQiLCJwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxNQUFJQSxDQUFBQSxHQUFzQixFQUExQjs7Ozs7Ozs7QUNEQUE7O0FBQUFBLEVBQUFBLENBQUFBLENBQW9CQyxDQUFwQkQsR0FBd0IsWUFBQTtBQUN2QixRQUEwQixZQUFBLE9BQWZFLFVBQVgsRUFBb0MsT0FBT0EsVUFBUDs7QUFDcEMsUUFB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LENBQUFBLENBQUFBLENBQU91UCxFQUFQdlAsR0FBWXFULEVBQVpyVCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZSBuby11bnNhZmUtYW55XG5leHBvcnQgY2xhc3MgTG9hZEludG9Eb2N1bWVudCB7XG4gICAgcHVibGljIHN0YXRpYyBzY3JpcHQodXJpOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBsZXQgc2NyaXB0TG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cbiAgICAgICAgZnVuY3Rpb24gbG9hZEhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0TG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNjcmlwdC5yZWFkeVN0YXRlIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5nIHRoZSB1c2VyIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgY29tcGxldGVzIHRvIGxvYWQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW4gSUUgZXZlbiB1cG9uIGVycm9yLiBJbiBhbnlcbiAgICAgICAgLy8gY2FzZSBpdCBpcyB0aGUgY2xpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHNjcmlwdCByYW5cbiAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5LlxuICAgICAgICBzY3JpcHQub25sb2FkID0gbG9hZEhhbmRsZXI7XG4gICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBsb2FkSGFuZGxlcjtcblxuICAgICAgICAvLyBBZGQgYW4gZXJyb3IgY2FsbGJhY2suXG4gICAgICAgIC8vIE5PVEUodXNlcik6IE5vdCBzdXBwb3J0ZWQgaW4gSUUuXG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNjcmlwdC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc2NyaXB0LlwiKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIHRoZSBzY3JpcHQgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFNhZmFyaSBuZXZlciBsb2FkcyB0aGUgc2NyaXB0IGlmIHdlIGRvbid0IHNldFxuICAgICAgICAvLyB0aGUgc3JjIGF0dHJpYnV0ZSBiZWZvcmUgYXBwZW5kaW5nLlxuICAgICAgICBzY3JpcHQuc3JjID0gdXJpO1xuICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIiwgXCJ1c2UtY3JlZGVudGlhbHNcIik7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHN0eWxlU2hlZXQodXJpOiBzdHJpbmcsIGlnbm9yZUVycm9yOiBib29sZWFuLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZSA9ICgpID0+IGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpZ25vcmVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc3R5bGVzaGVldC5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gPz8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJzdHlsZXNoZWV0XCIpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJ0ZXh0L2Nzc1wiKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvbHZlKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHVyaSk7XG4gICAgfVxufVxuIiwiZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgY2xpZW50U2V0dGluZ3MgPSB7XG4gICAgYXV0aG9yaXplZDogcGFyc2VCb29sKFwie2F1dGhvcml6ZWR9XCIpLFxuICAgIGNhdWxkcm9uQXBpVXJsOiBcIntjYXVsZHJvbkFwaVVybH1cIixcbiAgICBhYm9uSWQ6IFwie2Fib25JZH1cIixcbiAgICBvcmdJZDogXCJ7b3JnSWR9XCIsXG4gICAgdXNlcklkOiBcInt1c2VySWR9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCBwcm9ncmFtIHN0YXRlXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGFyZ3VtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgbWVzc2FnZSAhPSB1bmRlZmluZWQgPyBgJHttZXNzYWdlfSAoYXJndW1lbnQ6ICR7YXJndW1lbnROYW1lfSlgIDogYEludmFsaWQgYXJndW1lbnQgdmFsdWU6ICR7YXJndW1lbnROYW1lfWBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBpbmdFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHR5cGluZ1wiKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9FcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9Gb3JtUGFydHMvVG91ci9Ub3VyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0FwaS9DYW5keUFwaUNsaWVudC9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbFZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbEhvb2tGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvRXh0ZXJuYWxFdmVudHMvRXh0ZXJuYWxIb29rRnVuY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlNb2RlbENodW5rIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGVsU3RvcmluZy9Nb2RlbENodW5rXCI7XG5pbXBvcnQgdHlwZSB7IFBpY2tsaXN0UXVlcnlGaWx0ZXIsIFBpY2tsaXN0UXVlcnlSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9QaWNrbGlzdHMvUGlja2xpc3RUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgeyBNb2RlbEV2ZW50c0xpc3RlbmVyIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9Nb2RlbEV2ZW50cy9Nb2RlbEV2ZW50XCI7XG5cbmltcG9ydCB7IElMZWdhY3lGb3JtIH0gZnJvbSBcIi4vSUxlZ2FjeUZvcm1cIjtcblxuZXhwb3J0IHR5cGUgTW9kZWxFdmVudFBhdGggPVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHBhdGg/OiBzdHJpbmcsIGZpZWxkTmFtZT86IHN0cmluZyk6IE1vZGVsRXZlbnRQYXRoIHtcbiAgICBpZiAoZmllbGROYW1lICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGF0aCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBiZSBkZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoLCBmaWVsZE5hbWVdO1xuICAgIH1cbiAgICBpZiAocGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGhdO1xuICAgIH1cbiAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl07XG59XG5cbmZ1bmN0aW9uIG1hcENodW5rVmFsdWVzKGNodW5rOiBSZWFkb25seU1vZGVsQ2h1bmspOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2h1bmspXG4gICAgICAgIC5maWx0ZXIocGF0aCA9PiBjaHVua1twYXRoXSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2h1bmtbcGF0aF0sIFwidmFsdWVcIikpXG4gICAgICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaHVua1twYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgW3BhdGhdOiByZXN1bHQudmFsdWUgfTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZUNodW5rVmFsdWVzKGNodW5rczogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pik6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGNodW5rKSA9PiAoe1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgLi4uY2h1bmssXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICk7XG59XG5cbmNsYXNzIExlZ2FjeVB1YmxpY0Zvcm0gaW1wbGVtZW50cyBJUHVibGljRm9ybSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtOiBJTGVnYWN5Rm9ybTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihmb3JtOiBJTGVnYWN5Rm9ybSkge1xuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBTZXJ2ZXJFcnJvckxvZyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IFBpY2tsaXN0UXVlcnlGaWx0ZXIpOiBQcm9taXNlPFBpY2tsaXN0UXVlcnlSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnBpY2tsaXN0c1Byb3ZpZGVyLmdldEJ5R0lkKGdJZCwgZmlsdGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmYoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub25Nb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZNb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub2ZmTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENhY2hlZENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5cbmltcG9ydCB7IEVycm9yRmlyc3RDYWxsYmFjaywgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHsgTG9hZEludG9Eb2N1bWVudCB9IGZyb20gXCIuLi8uLi9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQgfSBmcm9tIFwiLi4vVHlwZXMvSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50XCI7XG5cbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiwgdGhlbWUgfSA9IHNldHRpbmdzO1xuXG4gICAgaWYgKGdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc05lZWRFbmdpbmUgPSBlbmdpbmVWZXJzaW9uICYmICFnbG9iYWxbZW5naW5lVmVyc2lvbl07XG4gICAgY29uc3QgdXNlU2FtZVJlc291cmNlc0ZvclRoZW1lID1cbiAgICAgICAgZW5naW5lVmVyc2lvbiAhPSB1bmRlZmluZWQgJiZcbiAgICAgICAgKGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChlbmdpbmVWZXJzaW9uLCBcIjQuMjA2LjBcIikgfHwgZW5naW5lVmVyc2lvbiA9PT0gXCJsb2NhbFwiKTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0aGVtZVBvc3RmaXggPSAhdXNlU2FtZVJlc291cmNlc0ZvclRoZW1lICYmIHRoZW1lID8gYC4ke2VuY29kZVVSSUNvbXBvbmVudCh0aGVtZSl9YCA6IFwiXCI7XG4gICAgY29uc3QgdGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gICAgY29uc3QgcGFyYW1zID0geyB2OiByZXNvdXJjZXNWZXJzaW9uLCByZXNvdXJjZVpvbmU6IHNldHRpbmdzLnJlc291cmNlWm9uZSB9O1xuICAgIGlmIChuZWVkTG9hZFN0eWxlc0Zvckdmdikge1xuICAgICAgICB0YXNrcy5wdXNoKGNiID0+XG4gICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy8ke2dmdn0ke3RoZW1lUG9zdGZpeH0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICB0YXNrcy5wdXNoKGNiID0+IExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzLyR7Z2Z2fSR7bWlufS5qc2AsIHBhcmFtcykpLCBjYikpO1xuXG4gICAgaWYgKGlzTmVlZEVuZ2luZSkge1xuICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7dGhlbWVQb3N0Zml4fSR7bWlufS5jc3NgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zY3JpcHQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uanNgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcnVuUGFyYWxsZWwodGFza3MsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRm9ybShcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT5cbik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1FbnRyeVBvaW50ID1cbiAgICAgICAgZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZXh0ZW5kZWRTZXR0aW5ncy5nZnZdID8/IHJlamVjdChgRm9ybSBlbnRyeSBwb2ludCAke2V4dGVuZGVkU2V0dGluZ3MuZ2Z2fSBub3QgZm91bmQuYCk7XG4gICAgZm9ybUVudHJ5UG9pbnQocGFnZUNvbnRlbnQsIGV4dGVuZGVkU2V0dGluZ3MpXG4gICAgICAgIC50aGVuKGZvcm0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHVibGljRm9ybSA9IGZvcm0ucHVibGljRm9ybSB8fCBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm0pO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBwdWJsaWNGb3JtKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydEZvcm1PcHRpb25zIHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjbGllbnRTZXR0aW5ncztcblxuICAgIGlmICghaXNBbGxvd2VkKHNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFzZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChgdjEvbnMvJHtuc30vZHJhZnRzLyR7ZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ2Z2IH0gPSBjbGllbnREcmFmdEluZm87XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uUGFyYW0gPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJlbmdpbmVWZXJzaW9uXCIpO1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbiA9IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uXG4gICAgICAgICAgICAgICAgPyBlbmdpbmVWZXJzaW9uUGFyYW0gfHwgY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb25cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogb3B0aW9ucy5mZWVkYmFja0VuYWJsZWQgPz8gY2xpZW50RHJhZnRJbmZvLmZlZWRiYWNrRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbjogb3B0aW9ucy5hdXRoZW50aWNhdGlvbixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiBleHRlbmRlZFNldHRpbmdzLnRoZW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9hZEVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRFcnJvciB8fCAhZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBkeW5hbWljIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2Z2ICR7Z2Z2fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlbmRlZFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc0FwaTogb3B0aW9ucy50ZW1wbGF0ZXNBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybTogcmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuY29uc3QgQ2FuZHlDbGllbnRFeHBvcnRzOiBDYW5keUdsb2JhbEluamVjdGVkVmFyID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbnRyeVBvaW50OiB7fSxcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cGFydGlhbFJlbmRlcmluZ0ZvcklFOH1cIiksXG4gICAga2Vmb3Jtc1VybDogXCJ7a2Vmb3Jtc1VybH1cIixcbn07XG5cbmdsb2JhbC5DRiA9IENhbmR5Q2xpZW50RXhwb3J0cztcblxuZXhwb3J0IHsgQ2FuZHlDbGllbnRFeHBvcnRzIH07XG4iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogdW5kZWZpbmVkIHwgbnVsbCB8IFQpOiBpbnB1dCBpcyBUIHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOZXZlcihuZXZlckFyZ3VtZW50OiBuZXZlcik6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFuZEdldFN0cmluZyhuZXZlckFyZ3VtZW50OiBuZXZlcik6IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9