@kontur.candy/tools 2.129.0 → 2.131.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 (249) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +6 -6
  3. package/distr/Common/AsyncUtils.js +1 -30
  4. package/distr/Common/CandyApiClient/CandyApiClient.js +56 -39
  5. package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -33
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +0 -4
  7. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +0 -4
  8. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -29
  9. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +0 -4
  10. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -35
  11. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -35
  12. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -37
  13. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -29
  14. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -34
  15. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -28
  16. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +0 -4
  17. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -33
  18. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -29
  19. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +1 -6
  20. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +0 -4
  21. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +0 -4
  22. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +22 -38
  23. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -5
  24. package/distr/Common/CandyApiClient/IsBuffer.js +1 -29
  25. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +0 -4
  26. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +0 -4
  27. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +0 -4
  28. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +0 -4
  29. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +0 -4
  30. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +1 -6
  31. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +0 -4
  32. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +0 -4
  33. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +11 -0
  34. package/distr/Common/CandyApiClient/Types/DraftFullId.js +0 -4
  35. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +0 -4
  36. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +1 -6
  37. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +0 -4
  38. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +0 -4
  39. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +1 -6
  40. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +0 -4
  41. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +0 -4
  42. package/distr/Common/CandyApiClient/Types/Guid.js +0 -4
  43. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +1 -6
  44. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +0 -4
  45. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +0 -4
  46. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +1 -6
  47. package/distr/Common/CommonConstants/SectionNames.js +1 -28
  48. package/distr/Common/Comparers.js +8 -30
  49. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -29
  50. package/distr/Common/EndPoints.js +1 -34
  51. package/distr/Common/Errors.js +3 -71
  52. package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -30
  53. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +0 -4
  54. package/distr/Common/Funcs.js +1 -29
  55. package/distr/Common/GFV.js +0 -4
  56. package/distr/Common/Hooks/UseLocalStorage.js +42 -0
  57. package/distr/Common/HttpClient/AuthenticationMode.js +1 -32
  58. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +12 -0
  59. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -29
  60. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +0 -4
  61. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -30
  62. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +3 -31
  63. package/distr/Common/HttpClient/HttpClient.js +12 -56
  64. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +0 -4
  65. package/distr/Common/HttpClient/IHttpClient.js +0 -4
  66. package/distr/Common/IndentString.js +18 -0
  67. package/distr/Common/IntRangeUtils.js +1 -31
  68. package/distr/Common/IterableUtils.js +23 -38
  69. package/distr/Common/KCLangRuntimeUtils.js +3 -38
  70. package/distr/Common/ModelPath/BuildIterationSequence.js +3 -31
  71. package/distr/Common/ModelPath/EachCurrentCollision.js +1 -6
  72. package/distr/Common/ModelPath/IEquatable.js +0 -4
  73. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +30 -0
  74. package/distr/Common/ModelPath/Map/Map2.js +103 -0
  75. package/distr/Common/ModelPath/Map/ModelPathMap.js +30 -0
  76. package/distr/Common/ModelPath/ModelPath.js +206 -206
  77. package/distr/Common/ModelPath/ModelPathBuilder.js +11 -40
  78. package/distr/Common/ModelPath/ModelPathHelper.js +13 -0
  79. package/distr/Common/ModelPath/PathMatcher.js +8 -37
  80. package/distr/Common/ModelPath/PathSplitHelper.js +26 -0
  81. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +40 -0
  82. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +40 -0
  83. package/distr/Common/ModelPath/Set/ModelPathSet.js +40 -0
  84. package/distr/Common/ModelPath/Set/Set2.js +60 -0
  85. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -34
  86. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +0 -4
  87. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -29
  88. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -34
  89. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -38
  90. package/distr/Common/NidusClient/INidusClient.js +1 -30
  91. package/distr/Common/NidusClient/NidusClientContext.js +1 -38
  92. package/distr/Common/NidusClient/NidusClientImpl.js +1 -34
  93. package/distr/Common/PathConstants.js +3 -31
  94. package/distr/Common/TypingUtils.js +6 -50
  95. package/distr/Common/UUID.js +1 -30
  96. package/distr/Common/UseAsyncEffect.js +1 -31
  97. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +3 -36
  98. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +1 -29
  99. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -30
  100. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +3 -36
  101. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +3 -36
  102. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -29
  103. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -34
  104. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -28
  105. package/distr/Tools/src/BuildTasks/FSTask.js +3 -30
  106. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -32
  107. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -37
  108. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -34
  109. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +3 -31
  110. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -29
  111. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -31
  112. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +3 -36
  113. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +3 -37
  114. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -37
  115. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +2 -34
  116. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +1 -5
  117. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +1 -5
  118. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +3 -33
  119. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +1 -28
  120. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +3 -30
  121. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -34
  122. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +1 -45
  123. package/distr/Tools/src/BuildTasks/ReadFormSource.js +4 -39
  124. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +3 -33
  125. package/distr/Tools/src/BuildTasks/Version.js +1 -32
  126. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +3 -31
  127. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +1 -30
  128. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +7 -34
  129. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +3 -33
  130. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -34
  131. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -29
  132. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +6 -37
  133. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +6 -47
  134. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +26 -43
  135. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +6 -40
  136. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +6 -38
  137. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +6 -37
  138. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +6 -39
  139. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +6 -37
  140. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +6 -39
  141. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +3 -36
  142. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +3 -36
  143. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +12 -37
  144. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +3 -31
  145. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +5 -35
  146. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +4 -36
  147. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +3 -31
  148. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +0 -4
  149. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +0 -4
  150. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +2 -42
  151. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +3 -36
  152. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -29
  153. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +0 -4
  154. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -30
  155. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +1 -29
  156. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -29
  157. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -30
  158. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +0 -4
  159. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -28
  160. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +3 -31
  161. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -28
  162. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +3 -31
  163. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +6 -40
  164. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -30
  165. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -29
  166. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -34
  167. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +6 -37
  168. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +1 -29
  169. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -28
  170. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -30
  171. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -28
  172. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +3 -32
  173. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -32
  174. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -29
  175. package/distr/Tools/src/CandyCLI.js +3 -31
  176. package/distr/Tools/src/CheckNodeJsVersion.js +3 -33
  177. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -35
  178. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -34
  179. package/distr/Tools/src/Commons/ErrorUntyped.js +0 -4
  180. package/distr/Tools/src/Commons/EventObject.js +2 -44
  181. package/distr/Tools/src/Commons/ExecUtils.js +1 -29
  182. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -29
  183. package/distr/Tools/src/Commons/FormGlobsUtils.js +3 -36
  184. package/distr/Tools/src/Commons/FsUtils.js +3 -34
  185. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -32
  186. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +2 -33
  187. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -34
  188. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -34
  189. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +0 -4
  190. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -34
  191. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -34
  192. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -34
  193. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -34
  194. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -36
  195. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -34
  196. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -34
  197. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -34
  198. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -34
  199. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +0 -4
  200. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -34
  201. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -34
  202. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +3 -57
  203. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -28
  204. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +3 -36
  205. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +1 -34
  206. package/distr/Tools/src/Commons/Locks/Lock.js +3 -36
  207. package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -34
  208. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +3 -36
  209. package/distr/Tools/src/Commons/Logging/ELKLogger.js +3 -33
  210. package/distr/Tools/src/Commons/Logging/ILogger.js +1 -36
  211. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +1 -41
  212. package/distr/Tools/src/Commons/Logging/Logger.js +3 -36
  213. package/distr/Tools/src/Commons/Logging/StaticLogger.js +1 -38
  214. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -30
  215. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +6 -53
  216. package/distr/Tools/src/Commons/PathPattern.js +1 -34
  217. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -34
  218. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +0 -4
  219. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +3 -89
  220. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +3 -36
  221. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +1 -34
  222. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +3 -36
  223. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +3 -36
  224. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -28
  225. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +1 -34
  226. package/distr/Tools/src/Commons/TimingUtils.js +1 -29
  227. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +55 -48
  228. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +8 -36
  229. package/distr/Tools/src/GenerateReadMe.js +1 -31
  230. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  231. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  232. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  233. package/distr/Tools/src/Options/CandyToolOptions.js +1 -28
  234. package/distr/Tools/src/ReadFarmConfig.js +3 -31
  235. package/distr/Tools/src/SelfUpdate.js +4 -36
  236. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1000 -2036
  237. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  238. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +366 -361
  239. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  240. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +1 -5
  241. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1 -5
  242. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +1 -5
  243. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +1 -5
  244. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1 -5
  245. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +1 -5
  246. package/package.json +9 -8
  247. package/distr/Common/ModelPath/AbsoluteModelPathSet.js +0 -95
  248. package/distr/Common/ModelPath/ModelPathMap.js +0 -160
  249. package/distr/Common/ModelPath/ModelPathSet.js +0 -99
@@ -1,2319 +1,1283 @@
1
1
  "use strict";
2
2
 
3
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
4
- return a;
5
- };
6
-
7
- /******/
8
3
  (function () {
9
- // webpackBootstrap
10
-
11
- /******/
12
4
  "use strict";
13
- /******/
14
5
 
15
6
  var __webpack_modules__ = {
16
- /***/
17
- "./Common/Errors.ts":
18
- /*!**************************!*\
19
- !*** ./Common/Errors.ts ***!
20
- \**************************/
21
-
22
- /***/
23
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
24
- __webpack_require__.r(__webpack_exports__);
25
- /* harmony export */
7
+ 730: function (e, r, t) {
8
+ var o, n, i;
26
9
 
10
+ function a(e) {
11
+ return "v1/ns/".concat(e.ns, "/drafts/").concat(e.draftId, "/client-draft-info");
12
+ }
27
13
 
28
- __webpack_require__.d(__webpack_exports__, {
29
- /* harmony export */
30
- "ApplicationError": function () {
31
- return (
32
- /* binding */
33
- ApplicationError
34
- );
35
- },
36
-
37
- /* harmony export */
38
- "NotImplementedError": function () {
39
- return (
40
- /* binding */
41
- NotImplementedError
42
- );
43
- },
44
-
45
- /* harmony export */
46
- "NotSupportedError": function () {
47
- return (
48
- /* binding */
49
- NotSupportedError
50
- );
51
- },
52
-
53
- /* harmony export */
54
- "InvalidProgramStateError": function () {
55
- return (
56
- /* binding */
57
- InvalidProgramStateError
58
- );
59
- },
60
-
61
- /* harmony export */
62
- "InvalidArgumentError": function () {
63
- return (
64
- /* binding */
65
- InvalidArgumentError
66
- );
67
- },
68
-
69
- /* harmony export */
70
- "TypingError": function () {
71
- return (
72
- /* binding */
73
- TypingError
74
- );
14
+ t.d(r, {
15
+ m: function () {
16
+ return a;
75
17
  }
76
- /* harmony export */
77
-
78
- });
79
-
80
- function _typeof(obj) {
81
- "@babel/helpers - typeof";
18
+ }), e = t.hmd(e), (o = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0) && o(e), "undefined" != typeof reactHotLoaderGlobal && reactHotLoaderGlobal.default.signature, (n = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && n.register(a, "getClientDraftInfoUrl", "C:\\BuildAgent\\work\\forms-root\\Common\\CandyApiClient\\ClientDraftInfo\\GetClientDraftInfoUrl.ts"), (i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && i(e);
19
+ },
20
+ 556: function (module, __webpack_exports__, __webpack_require__) {
21
+ function _typeof(e) {
22
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
23
+ return typeof e;
24
+ } : function (e) {
25
+ return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
26
+ }, _typeof(e);
27
+ }
82
28
 
83
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
84
- _typeof = function _typeof(obj) {
85
- return typeof obj;
86
- };
87
- } else {
88
- _typeof = function _typeof(obj) {
89
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
90
- };
91
- }
29
+ var enterModule;
92
30
 
93
- return _typeof(obj);
31
+ function _classCallCheck(e, r) {
32
+ if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function");
94
33
  }
95
34
 
96
- function _classCallCheck(instance, Constructor) {
97
- if (!(instance instanceof Constructor)) {
98
- throw new TypeError("Cannot call a class as a function");
35
+ function _defineProperties(e, r) {
36
+ for (var t = 0; t < r.length; t++) {
37
+ var o = r[t];
38
+ o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, o.key, o);
99
39
  }
100
40
  }
101
41
 
102
- function _inherits(subClass, superClass) {
103
- if (typeof superClass !== "function" && superClass !== null) {
104
- throw new TypeError("Super expression must either be null or a function");
105
- }
42
+ function _createClass(e, r, t) {
43
+ return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), e;
44
+ }
106
45
 
107
- subClass.prototype = Object.create(superClass && superClass.prototype, {
46
+ function _inherits(e, r) {
47
+ if ("function" != typeof r && null !== r) throw new TypeError("Super expression must either be null or a function");
48
+ e.prototype = Object.create(r && r.prototype, {
108
49
  constructor: {
109
- value: subClass,
110
- writable: true,
111
- configurable: true
50
+ value: e,
51
+ writable: !0,
52
+ configurable: !0
112
53
  }
113
- });
114
- if (superClass) _setPrototypeOf(subClass, superClass);
54
+ }), r && _setPrototypeOf(e, r);
115
55
  }
116
56
 
117
- function _createSuper(Derived) {
118
- var hasNativeReflectConstruct = _isNativeReflectConstruct();
57
+ function _createSuper(e) {
58
+ var r = _isNativeReflectConstruct();
119
59
 
120
- return function _createSuperInternal() {
121
- var Super = _getPrototypeOf(Derived),
122
- result;
60
+ return function () {
61
+ var t,
62
+ o = _getPrototypeOf(e);
123
63
 
124
- if (hasNativeReflectConstruct) {
125
- var NewTarget = _getPrototypeOf(this).constructor;
64
+ if (r) {
65
+ var n = _getPrototypeOf(this).constructor;
126
66
 
127
- result = Reflect.construct(Super, arguments, NewTarget);
128
- } else {
129
- result = Super.apply(this, arguments);
130
- }
67
+ t = Reflect.construct(o, arguments, n);
68
+ } else t = o.apply(this, arguments);
131
69
 
132
- return _possibleConstructorReturn(this, result);
70
+ return _possibleConstructorReturn(this, t);
133
71
  };
134
72
  }
135
73
 
136
- function _possibleConstructorReturn(self, call) {
137
- if (call && (_typeof(call) === "object" || typeof call === "function")) {
138
- return call;
139
- }
140
-
141
- return _assertThisInitialized(self);
74
+ function _possibleConstructorReturn(e, r) {
75
+ if (r && ("object" === _typeof(r) || "function" == typeof r)) return r;
76
+ if (void 0 !== r) throw new TypeError("Derived constructors may only return object or undefined");
77
+ return _assertThisInitialized(e);
142
78
  }
143
79
 
144
- function _assertThisInitialized(self) {
145
- if (self === void 0) {
146
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
147
- }
148
-
149
- return self;
80
+ function _assertThisInitialized(e) {
81
+ if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
82
+ return e;
150
83
  }
151
84
 
152
- function _wrapNativeSuper(Class) {
153
- var _cache = typeof Map === "function" ? new Map() : undefined;
154
-
155
- _wrapNativeSuper = function _wrapNativeSuper(Class) {
156
- if (Class === null || !_isNativeFunction(Class)) return Class;
157
-
158
- if (typeof Class !== "function") {
159
- throw new TypeError("Super expression must either be null or a function");
160
- }
161
-
162
- if (typeof _cache !== "undefined") {
163
- if (_cache.has(Class)) return _cache.get(Class);
85
+ function _wrapNativeSuper(e) {
86
+ var r = "function" == typeof Map ? new Map() : void 0;
87
+ return _wrapNativeSuper = function (e) {
88
+ if (null === e || !_isNativeFunction(e)) return e;
89
+ if ("function" != typeof e) throw new TypeError("Super expression must either be null or a function");
164
90
 
165
- _cache.set(Class, Wrapper);
91
+ if (void 0 !== r) {
92
+ if (r.has(e)) return r.get(e);
93
+ r.set(e, t);
166
94
  }
167
95
 
168
- function Wrapper() {
169
- return _construct(Class, arguments, _getPrototypeOf(this).constructor);
96
+ function t() {
97
+ return _construct(e, arguments, _getPrototypeOf(this).constructor);
170
98
  }
171
99
 
172
- Wrapper.prototype = Object.create(Class.prototype, {
100
+ return t.prototype = Object.create(e.prototype, {
173
101
  constructor: {
174
- value: Wrapper,
175
- enumerable: false,
176
- writable: true,
177
- configurable: true
102
+ value: t,
103
+ enumerable: !1,
104
+ writable: !0,
105
+ configurable: !0
178
106
  }
179
- });
180
- return _setPrototypeOf(Wrapper, Class);
181
- };
182
-
183
- return _wrapNativeSuper(Class);
107
+ }), _setPrototypeOf(t, e);
108
+ }, _wrapNativeSuper(e);
184
109
  }
185
110
 
186
- function _construct(Parent, args, Class) {
187
- if (_isNativeReflectConstruct()) {
188
- _construct = Reflect.construct;
189
- } else {
190
- _construct = function _construct(Parent, args, Class) {
191
- var a = [null];
192
- a.push.apply(a, args);
193
- var Constructor = Function.bind.apply(Parent, a);
194
- var instance = new Constructor();
195
- if (Class) _setPrototypeOf(instance, Class.prototype);
196
- return instance;
197
- };
198
- }
199
-
200
- return _construct.apply(null, arguments);
111
+ function _construct(e, r, t) {
112
+ return _construct = _isNativeReflectConstruct() ? Reflect.construct : function (e, r, t) {
113
+ var o = [null];
114
+ o.push.apply(o, r);
115
+ var n = new (Function.bind.apply(e, o))();
116
+ return t && _setPrototypeOf(n, t.prototype), n;
117
+ }, _construct.apply(null, arguments);
201
118
  }
202
119
 
203
120
  function _isNativeReflectConstruct() {
204
- if (typeof Reflect === "undefined" || !Reflect.construct) return false;
205
- if (Reflect.construct.sham) return false;
206
- if (typeof Proxy === "function") return true;
121
+ if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
122
+ if (Reflect.construct.sham) return !1;
123
+ if ("function" == typeof Proxy) return !0;
207
124
 
208
125
  try {
209
- Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
210
- return true;
126
+ return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
211
127
  } catch (e) {
212
- return false;
128
+ return !1;
213
129
  }
214
130
  }
215
131
 
216
- function _isNativeFunction(fn) {
217
- return Function.toString.call(fn).indexOf("[native code]") !== -1;
132
+ function _isNativeFunction(e) {
133
+ return -1 !== Function.toString.call(e).indexOf("[native code]");
218
134
  }
219
135
 
220
- function _setPrototypeOf(o, p) {
221
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
222
- o.__proto__ = p;
223
- return o;
224
- };
225
-
226
- return _setPrototypeOf(o, p);
136
+ function _setPrototypeOf(e, r) {
137
+ return _setPrototypeOf = Object.setPrototypeOf || function (e, r) {
138
+ return e.__proto__ = r, e;
139
+ }, _setPrototypeOf(e, r);
227
140
  }
228
141
 
229
- function _getPrototypeOf(o) {
230
- _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
231
- return o.__proto__ || Object.getPrototypeOf(o);
232
- };
233
- return _getPrototypeOf(o);
142
+ function _getPrototypeOf(e) {
143
+ return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
144
+ return e.__proto__ || Object.getPrototypeOf(e);
145
+ }, _getPrototypeOf(e);
234
146
  }
235
147
 
236
- var ApplicationError = /*#__PURE__*/function (_Error) {
148
+ __webpack_require__.d(__webpack_exports__, {
149
+ nj: function () {
150
+ return NotImplementedError;
151
+ }
152
+ }), module = __webpack_require__.hmd(module), enterModule = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0, enterModule && enterModule(module);
153
+
154
+ var __signature__ = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default.signature : function (e) {
155
+ return e;
156
+ },
157
+ ApplicationError = function (_Error) {
237
158
  _inherits(ApplicationError, _Error);
238
159
 
239
160
  var _super = _createSuper(ApplicationError);
240
161
 
241
- function ApplicationError(message) {
242
- var _this;
243
-
244
- _classCallCheck(this, ApplicationError);
245
-
246
- _this = _super.call(this, message);
247
- _this.name = _this.constructor.name;
248
- return _this;
162
+ function ApplicationError(e) {
163
+ var r;
164
+ return _classCallCheck(this, ApplicationError), (r = _super.call(this, e)).name = r.constructor.name, r;
249
165
  }
250
166
 
251
- return ApplicationError;
252
- }( /*#__PURE__*/_wrapNativeSuper(Error));
253
-
254
- var NotImplementedError = /*#__PURE__*/function (_ApplicationError) {
167
+ return _createClass(ApplicationError, [{
168
+ key: "__reactstandin__regenerateByEval",
169
+ value: function __reactstandin__regenerateByEval(key, code) {
170
+ this[key] = eval(code);
171
+ }
172
+ }]), ApplicationError;
173
+ }(_wrapNativeSuper(Error)),
174
+ NotImplementedError = function (_ApplicationError) {
255
175
  _inherits(NotImplementedError, _ApplicationError);
256
176
 
257
177
  var _super2 = _createSuper(NotImplementedError);
258
178
 
259
179
  function NotImplementedError() {
260
- _classCallCheck(this, NotImplementedError);
261
-
262
- return _super2.call(this, "Operation not implemented");
180
+ return _classCallCheck(this, NotImplementedError), _super2.call(this, "Operation not implemented");
263
181
  }
264
182
 
265
- return NotImplementedError;
266
- }(ApplicationError);
267
-
268
- var NotSupportedError = /*#__PURE__*/function (_ApplicationError2) {
183
+ return _createClass(NotImplementedError, [{
184
+ key: "__reactstandin__regenerateByEval",
185
+ value: function __reactstandin__regenerateByEval(key, code) {
186
+ this[key] = eval(code);
187
+ }
188
+ }]), NotImplementedError;
189
+ }(ApplicationError),
190
+ NotSupportedError = function (_ApplicationError2) {
269
191
  _inherits(NotSupportedError, _ApplicationError2);
270
192
 
271
193
  var _super3 = _createSuper(NotSupportedError);
272
194
 
273
- function NotSupportedError(message) {
274
- _classCallCheck(this, NotSupportedError);
275
-
276
- return _super3.call(this, message !== null && message !== void 0 ? message : "Operation not supported");
195
+ function NotSupportedError(e) {
196
+ return _classCallCheck(this, NotSupportedError), _super3.call(this, null != e ? e : "Operation not supported");
277
197
  }
278
198
 
279
- return NotSupportedError;
280
- }(ApplicationError);
281
-
282
- var InvalidProgramStateError = /*#__PURE__*/function (_ApplicationError3) {
199
+ return _createClass(NotSupportedError, [{
200
+ key: "__reactstandin__regenerateByEval",
201
+ value: function __reactstandin__regenerateByEval(key, code) {
202
+ this[key] = eval(code);
203
+ }
204
+ }]), NotSupportedError;
205
+ }(ApplicationError),
206
+ InvalidProgramStateError = function (_ApplicationError3) {
283
207
  _inherits(InvalidProgramStateError, _ApplicationError3);
284
208
 
285
209
  var _super4 = _createSuper(InvalidProgramStateError);
286
210
 
287
- function InvalidProgramStateError() {
288
- _classCallCheck(this, InvalidProgramStateError);
289
-
290
- return _super4.call(this, "Invalid program state");
211
+ function InvalidProgramStateError(e) {
212
+ return _classCallCheck(this, InvalidProgramStateError), _super4.call(this, "Invalid program state" + (null != e ? ": " + e : ""));
291
213
  }
292
214
 
293
- return InvalidProgramStateError;
294
- }(ApplicationError);
295
-
296
- var InvalidArgumentError = /*#__PURE__*/function (_ApplicationError4) {
215
+ return _createClass(InvalidProgramStateError, [{
216
+ key: "__reactstandin__regenerateByEval",
217
+ value: function __reactstandin__regenerateByEval(key, code) {
218
+ this[key] = eval(code);
219
+ }
220
+ }]), InvalidProgramStateError;
221
+ }(ApplicationError),
222
+ InvalidArgumentError = function (_ApplicationError4) {
297
223
  _inherits(InvalidArgumentError, _ApplicationError4);
298
224
 
299
225
  var _super5 = _createSuper(InvalidArgumentError);
300
226
 
301
- function InvalidArgumentError(argumentName, message) {
302
- _classCallCheck(this, InvalidArgumentError);
303
-
304
- return _super5.call(this, message != undefined ? "".concat(message, " (argument: ").concat(argumentName, ")") : "Invalid argument value: ".concat(argumentName));
227
+ function InvalidArgumentError(e, r) {
228
+ return _classCallCheck(this, InvalidArgumentError), _super5.call(this, null != r ? "".concat(r, " (argument: ").concat(e, ")") : "Invalid argument value: ".concat(e));
305
229
  }
306
230
 
307
- return InvalidArgumentError;
308
- }(ApplicationError);
309
-
310
- var TypingError = /*#__PURE__*/function (_ApplicationError5) {
231
+ return _createClass(InvalidArgumentError, [{
232
+ key: "__reactstandin__regenerateByEval",
233
+ value: function __reactstandin__regenerateByEval(key, code) {
234
+ this[key] = eval(code);
235
+ }
236
+ }]), InvalidArgumentError;
237
+ }(ApplicationError),
238
+ TypingError = function (_ApplicationError5) {
311
239
  _inherits(TypingError, _ApplicationError5);
312
240
 
313
241
  var _super6 = _createSuper(TypingError);
314
242
 
315
243
  function TypingError() {
316
- _classCallCheck(this, TypingError);
317
-
318
- return _super6.call(this, "Invalid typing");
244
+ return _classCallCheck(this, TypingError), _super6.call(this, "Invalid typing");
319
245
  }
320
246
 
321
- return TypingError;
322
- }(ApplicationError);
323
- /***/
247
+ return _createClass(TypingError, [{
248
+ key: "__reactstandin__regenerateByEval",
249
+ value: function __reactstandin__regenerateByEval(key, code) {
250
+ this[key] = eval(code);
251
+ }
252
+ }]), TypingError;
253
+ }(ApplicationError),
254
+ reactHotLoader,
255
+ leaveModule;
324
256
 
257
+ reactHotLoader = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0, reactHotLoader && (reactHotLoader.register(ApplicationError, "ApplicationError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(NotImplementedError, "NotImplementedError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(NotSupportedError, "NotSupportedError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(InvalidProgramStateError, "InvalidProgramStateError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(InvalidArgumentError, "InvalidArgumentError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(TypingError, "TypingError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts")), leaveModule = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0, leaveModule && leaveModule(module);
325
258
  },
259
+ 255: function (e, r, t) {
260
+ var o, n, i;
326
261
 
327
- /***/
328
- "./Common/TypingUtils.ts":
329
- /*!*******************************!*\
330
- !*** ./Common/TypingUtils.ts ***!
331
- \*******************************/
262
+ function a(e) {
263
+ return a = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
264
+ return typeof e;
265
+ } : function (e) {
266
+ return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
267
+ }, a(e);
268
+ }
332
269
 
333
- /***/
334
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
335
- __webpack_require__.r(__webpack_exports__);
336
- /* harmony export */
270
+ function s(e) {
271
+ return null != e;
272
+ }
337
273
 
274
+ function u(e) {
275
+ throw "string" == typeof e || null == e ? new Error(null != e ? e : "Undefined is not allowed") : e;
276
+ }
338
277
 
339
- __webpack_require__.d(__webpack_exports__, {
340
- /* harmony export */
341
- "isNotNullOrUndefined": function () {
342
- return (
343
- /* binding */
344
- isNotNullOrUndefined
345
- );
346
- },
347
-
348
- /* harmony export */
349
- "noop": function () {
350
- return (
351
- /* binding */
352
- noop
353
- );
354
- },
355
-
356
- /* harmony export */
357
- "reject": function () {
358
- return (
359
- /* binding */
360
- reject
361
- );
362
- },
363
-
364
- /* harmony export */
365
- "isLengthGreaterThenOrEqual": function () {
366
- return (
367
- /* binding */
368
- isLengthGreaterThenOrEqual
369
- );
370
- },
371
-
372
- /* harmony export */
373
- "minLengthOrUndefined": function () {
374
- return (
375
- /* binding */
376
- minLengthOrUndefined
377
- );
378
- },
379
-
380
- /* harmony export */
381
- "arrayHasLength": function () {
382
- return (
383
- /* binding */
384
- arrayHasLength
385
- );
386
- },
387
-
388
- /* harmony export */
389
- "arrayIsNotEmpty": function () {
390
- return (
391
- /* binding */
392
- arrayIsNotEmpty
393
- );
394
- },
395
-
396
- /* harmony export */
397
- "arrayHasAtLeastOneItem": function () {
398
- return (
399
- /* binding */
400
- arrayHasAtLeastOneItem
401
- );
402
- },
403
-
404
- /* harmony export */
405
- "ensureArrayIsNotEmpty": function () {
406
- return (
407
- /* binding */
408
- ensureArrayIsNotEmpty
409
- );
410
- },
411
-
412
- /* harmony export */
413
- "ensureArrayHasLength": function () {
414
- return (
415
- /* binding */
416
- ensureArrayHasLength
417
- );
418
- },
419
-
420
- /* harmony export */
421
- "ensureNever": function () {
422
- return (
423
- /* binding */
424
- ensureNever
425
- );
426
- },
427
-
428
- /* harmony export */
429
- "ensureAndGetString": function () {
430
- return (
431
- /* binding */
432
- ensureAndGetString
433
- );
278
+ function l(e, r) {
279
+ return e.length >= r;
280
+ }
281
+
282
+ function c(e, r) {
283
+ return e.length === r;
284
+ }
285
+
286
+ function d(e) {
287
+ return e.length > 0;
288
+ }
289
+
290
+ function f(e) {
291
+ return null == e || "" === e;
292
+ }
293
+
294
+ t.d(r, {
295
+ d1: function () {
296
+ return u;
297
+ }
298
+ }), e = t.hmd(e), (o = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0) && o(e), "undefined" != typeof reactHotLoaderGlobal && reactHotLoaderGlobal.default.signature, (n = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && (n.register(s, "isNotNullOrUndefined", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
299
+ return "object" === a(e) && (null == e ? void 0 : e.message);
300
+ }, "stringifyUnknownError", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
301
+ if (!s(e)) throw new Error("Value must be defined");
302
+ }, "ensureNotNullOrUndefined", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function () {}, "noop", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(u, "reject", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(l, "isLengthGreaterThenOrEqual", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e, r) {
303
+ if (l(e, r)) return e;
304
+ }, "minLengthOrUndefined", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(c, "arrayHasLength", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(d, "arrayIsNotEmpty", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
305
+ return e.length > 0;
306
+ }, "arrayHasAtLeastOneItem", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
307
+ if (!d(e)) throw new Error("Array must be not empty");
308
+ }, "ensureArrayIsNotEmpty", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e, r) {
309
+ if (!c(e, r)) throw new Error("Array should has length ".concat(r));
310
+ }, "ensureArrayHasLength", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e, r) {
311
+ if (!l(e, r)) throw new Error("Array must have minimal length ".concat(r));
312
+ }, "ensureArrayLengthGreaterThenOrEqual", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {}, "ensureNever", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
313
+ return "".concat(e);
314
+ }, "ensureAndGetString", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
315
+ e();
316
+ }, "runAsyncAction", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(f, "isNullOrEmpty", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
317
+ return !f(e);
318
+ }, "isNotNullOrEmpty", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
319
+ return null == e || "" === e.trim();
320
+ }, "isNullOrWhiteSpace", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
321
+ return "/" === e.slice(-1) ? e.slice(0, -1) : e;
322
+ }, "trimLastSlash", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {}, "assertIs", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts")), (i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && i(e);
323
+ },
324
+ 133: function (e, r, t) {
325
+ var o = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== o && o,
326
+ n = ("URLSearchParams" in o),
327
+ i = "Symbol" in o && "iterator" in Symbol,
328
+ a = "FileReader" in o && "Blob" in o && function () {
329
+ try {
330
+ return new Blob(), !0;
331
+ } catch (e) {
332
+ return !1;
434
333
  }
435
- /* harmony export */
334
+ }(),
335
+ s = ("FormData" in o),
336
+ u = ("ArrayBuffer" in o);
436
337
 
437
- });
438
- /***
439
- * Строготипизированная замена для Boolean(...)
440
- * Обычно используется для [...].filter(isNotNullOrUndefined)
441
- */
338
+ if (u) var l = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
339
+ c = ArrayBuffer.isView || function (e) {
340
+ return e && l.indexOf(Object.prototype.toString.call(e)) > -1;
341
+ };
342
+
343
+ function d(e) {
344
+ if ("string" != typeof e && (e = String(e)), /[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e) || "" === e) throw new TypeError('Invalid character in header field name: "' + e + '"');
345
+ return e.toLowerCase();
346
+ }
442
347
 
348
+ function f(e) {
349
+ return "string" != typeof e && (e = String(e)), e;
350
+ }
443
351
 
444
- function isNotNullOrUndefined(input) {
445
- return input != undefined;
352
+ function p(e) {
353
+ var r = {
354
+ next: function () {
355
+ var r = e.shift();
356
+ return {
357
+ done: void 0 === r,
358
+ value: r
359
+ };
360
+ }
361
+ };
362
+ return i && (r[Symbol.iterator] = function () {
363
+ return r;
364
+ }), r;
446
365
  }
447
366
 
448
- function noop() {// noop
367
+ function y(e) {
368
+ this.map = {}, e instanceof y ? e.forEach(function (e, r) {
369
+ this.append(r, e);
370
+ }, this) : Array.isArray(e) ? e.forEach(function (e) {
371
+ this.append(e[0], e[1]);
372
+ }, this) : e && Object.getOwnPropertyNames(e).forEach(function (r) {
373
+ this.append(r, e[r]);
374
+ }, this);
449
375
  }
450
376
 
451
- function reject(message) {
452
- throw new Error(message !== null && message !== void 0 ? message : "Undefined is not allowed");
377
+ function m(e) {
378
+ if (e.bodyUsed) return Promise.reject(new TypeError("Already read"));
379
+ e.bodyUsed = !0;
453
380
  }
454
381
 
455
- function isLengthGreaterThenOrEqual(items, minLength) {
456
- return items.length >= minLength;
382
+ function h(e) {
383
+ return new Promise(function (r, t) {
384
+ e.onload = function () {
385
+ r(e.result);
386
+ }, e.onerror = function () {
387
+ t(e.error);
388
+ };
389
+ });
457
390
  }
458
391
 
459
- function minLengthOrUndefined(items, minLength) {
460
- if (isLengthGreaterThenOrEqual(items, minLength)) {
461
- return items;
392
+ function g(e) {
393
+ var r = new FileReader(),
394
+ t = h(r);
395
+ return r.readAsArrayBuffer(e), t;
396
+ }
397
+
398
+ function _(e) {
399
+ if (e.slice) return e.slice(0);
400
+ var r = new Uint8Array(e.byteLength);
401
+ return r.set(new Uint8Array(e)), r.buffer;
402
+ }
403
+
404
+ function b() {
405
+ return this.bodyUsed = !1, this._initBody = function (e) {
406
+ var r;
407
+ this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : a && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : s && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : n && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : u && a && (r = e) && DataView.prototype.isPrototypeOf(r) ? (this._bodyArrayBuffer = _(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : u && (ArrayBuffer.prototype.isPrototypeOf(e) || c(e)) ? this._bodyArrayBuffer = _(e) : this._bodyText = e = Object.prototype.toString.call(e) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : n && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
408
+ }, a && (this.blob = function () {
409
+ var e = m(this);
410
+ if (e) return e;
411
+ if (this._bodyBlob) return Promise.resolve(this._bodyBlob);
412
+ if (this._bodyArrayBuffer) return Promise.resolve(new Blob([this._bodyArrayBuffer]));
413
+ if (this._bodyFormData) throw new Error("could not read FormData body as blob");
414
+ return Promise.resolve(new Blob([this._bodyText]));
415
+ }, this.arrayBuffer = function () {
416
+ return this._bodyArrayBuffer ? m(this) || (ArrayBuffer.isView(this._bodyArrayBuffer) ? Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength)) : Promise.resolve(this._bodyArrayBuffer)) : this.blob().then(g);
417
+ }), this.text = function () {
418
+ var e,
419
+ r,
420
+ t,
421
+ o = m(this);
422
+ if (o) return o;
423
+ if (this._bodyBlob) return e = this._bodyBlob, t = h(r = new FileReader()), r.readAsText(e), t;
424
+ if (this._bodyArrayBuffer) return Promise.resolve(function (e) {
425
+ for (var r = new Uint8Array(e), t = new Array(r.length), o = 0; o < r.length; o++) t[o] = String.fromCharCode(r[o]);
426
+
427
+ return t.join("");
428
+ }(this._bodyArrayBuffer));
429
+ if (this._bodyFormData) throw new Error("could not read FormData body as text");
430
+ return Promise.resolve(this._bodyText);
431
+ }, s && (this.formData = function () {
432
+ return this.text().then(w);
433
+ }), this.json = function () {
434
+ return this.text().then(JSON.parse);
435
+ }, this;
436
+ }
437
+
438
+ y.prototype.append = function (e, r) {
439
+ e = d(e), r = f(r);
440
+ var t = this.map[e];
441
+ this.map[e] = t ? t + ", " + r : r;
442
+ }, y.prototype.delete = function (e) {
443
+ delete this.map[d(e)];
444
+ }, y.prototype.get = function (e) {
445
+ return e = d(e), this.has(e) ? this.map[e] : null;
446
+ }, y.prototype.has = function (e) {
447
+ return this.map.hasOwnProperty(d(e));
448
+ }, y.prototype.set = function (e, r) {
449
+ this.map[d(e)] = f(r);
450
+ }, y.prototype.forEach = function (e, r) {
451
+ for (var t in this.map) this.map.hasOwnProperty(t) && e.call(r, this.map[t], t, this);
452
+ }, y.prototype.keys = function () {
453
+ var e = [];
454
+ return this.forEach(function (r, t) {
455
+ e.push(t);
456
+ }), p(e);
457
+ }, y.prototype.values = function () {
458
+ var e = [];
459
+ return this.forEach(function (r) {
460
+ e.push(r);
461
+ }), p(e);
462
+ }, y.prototype.entries = function () {
463
+ var e = [];
464
+ return this.forEach(function (r, t) {
465
+ e.push([t, r]);
466
+ }), p(e);
467
+ }, i && (y.prototype[Symbol.iterator] = y.prototype.entries);
468
+ var v = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
469
+
470
+ function E(e, r) {
471
+ if (!(this instanceof E)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
472
+ var t,
473
+ o,
474
+ n = (r = r || {}).body;
475
+
476
+ if (e instanceof E) {
477
+ if (e.bodyUsed) throw new TypeError("Already read");
478
+ this.url = e.url, this.credentials = e.credentials, r.headers || (this.headers = new y(e.headers)), this.method = e.method, this.mode = e.mode, this.signal = e.signal, n || null == e._bodyInit || (n = e._bodyInit, e.bodyUsed = !0);
479
+ } else this.url = String(e);
480
+
481
+ if (this.credentials = r.credentials || this.credentials || "same-origin", !r.headers && this.headers || (this.headers = new y(r.headers)), this.method = (o = (t = r.method || this.method || "GET").toUpperCase(), v.indexOf(o) > -1 ? o : t), this.mode = r.mode || this.mode || null, this.signal = r.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && n) throw new TypeError("Body not allowed for GET or HEAD requests");
482
+
483
+ if (this._initBody(n), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== r.cache && "no-cache" !== r.cache)) {
484
+ var i = /([?&])_=[^&]*/;
485
+ i.test(this.url) ? this.url = this.url.replace(i, "$1_=" + new Date().getTime()) : this.url += (/\?/.test(this.url) ? "&" : "?") + "_=" + new Date().getTime();
462
486
  }
487
+ }
463
488
 
464
- return undefined;
489
+ function w(e) {
490
+ var r = new FormData();
491
+ return e.trim().split("&").forEach(function (e) {
492
+ if (e) {
493
+ var t = e.split("="),
494
+ o = t.shift().replace(/\+/g, " "),
495
+ n = t.join("=").replace(/\+/g, " ");
496
+ r.append(decodeURIComponent(o), decodeURIComponent(n));
497
+ }
498
+ }), r;
465
499
  }
466
500
 
467
- function arrayHasLength(items, length) {
468
- return items.length === length;
501
+ function C(e, r) {
502
+ if (!(this instanceof C)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
503
+ r || (r = {}), this.type = "default", this.status = void 0 === r.status ? 200 : r.status, this.ok = this.status >= 200 && this.status < 300, this.statusText = void 0 === r.statusText ? "" : "" + r.statusText, this.headers = new y(r.headers), this.url = r.url || "", this._initBody(e);
469
504
  }
470
505
 
471
- function arrayIsNotEmpty(items) {
472
- return items.length > 0;
506
+ E.prototype.clone = function () {
507
+ return new E(this, {
508
+ body: this._bodyInit
509
+ });
510
+ }, b.call(E.prototype), b.call(C.prototype), C.prototype.clone = function () {
511
+ return new C(this._bodyInit, {
512
+ status: this.status,
513
+ statusText: this.statusText,
514
+ headers: new y(this.headers),
515
+ url: this.url
516
+ });
517
+ }, C.error = function () {
518
+ var e = new C(null, {
519
+ status: 0,
520
+ statusText: ""
521
+ });
522
+ return e.type = "error", e;
523
+ };
524
+ var k = [301, 302, 303, 307, 308];
525
+
526
+ C.redirect = function (e, r) {
527
+ if (-1 === k.indexOf(r)) throw new RangeError("Invalid status code");
528
+ return new C(null, {
529
+ status: r,
530
+ headers: {
531
+ location: e
532
+ }
533
+ });
534
+ };
535
+
536
+ var A = o.DOMException;
537
+
538
+ try {
539
+ new A();
540
+ } catch (e) {
541
+ (A = function (e, r) {
542
+ this.message = e, this.name = r;
543
+ var t = Error(e);
544
+ this.stack = t.stack;
545
+ }).prototype = Object.create(Error.prototype), A.prototype.constructor = A;
473
546
  }
474
547
 
475
- function arrayHasAtLeastOneItem(items) {
476
- return items.length > 0;
548
+ function P(e, r) {
549
+ return new Promise(function (t, n) {
550
+ var i = new E(e, r);
551
+ if (i.signal && i.signal.aborted) return n(new A("Aborted", "AbortError"));
552
+ var s = new XMLHttpRequest();
553
+
554
+ function l() {
555
+ s.abort();
556
+ }
557
+
558
+ s.onload = function () {
559
+ var e,
560
+ r,
561
+ o = {
562
+ status: s.status,
563
+ statusText: s.statusText,
564
+ headers: (e = s.getAllResponseHeaders() || "", r = new y(), e.replace(/\r?\n[\t ]+/g, " ").split("\r").map(function (e) {
565
+ return 0 === e.indexOf("\n") ? e.substr(1, e.length) : e;
566
+ }).forEach(function (e) {
567
+ var t = e.split(":"),
568
+ o = t.shift().trim();
569
+
570
+ if (o) {
571
+ var n = t.join(":").trim();
572
+ r.append(o, n);
573
+ }
574
+ }), r)
575
+ };
576
+ o.url = "responseURL" in s ? s.responseURL : o.headers.get("X-Request-URL");
577
+ var n = "response" in s ? s.response : s.responseText;
578
+ setTimeout(function () {
579
+ t(new C(n, o));
580
+ }, 0);
581
+ }, s.onerror = function () {
582
+ setTimeout(function () {
583
+ n(new TypeError("Network request failed"));
584
+ }, 0);
585
+ }, s.ontimeout = function () {
586
+ setTimeout(function () {
587
+ n(new TypeError("Network request failed"));
588
+ }, 0);
589
+ }, s.onabort = function () {
590
+ setTimeout(function () {
591
+ n(new A("Aborted", "AbortError"));
592
+ }, 0);
593
+ }, s.open(i.method, function (e) {
594
+ try {
595
+ return "" === e && o.location.href ? o.location.href : e;
596
+ } catch (r) {
597
+ return e;
598
+ }
599
+ }(i.url), !0), "include" === i.credentials ? s.withCredentials = !0 : "omit" === i.credentials && (s.withCredentials = !1), "responseType" in s && (a ? s.responseType = "blob" : u && i.headers.get("Content-Type") && -1 !== i.headers.get("Content-Type").indexOf("application/octet-stream") && (s.responseType = "arraybuffer")), !r || "object" != typeof r.headers || r.headers instanceof y ? i.headers.forEach(function (e, r) {
600
+ s.setRequestHeader(r, e);
601
+ }) : Object.getOwnPropertyNames(r.headers).forEach(function (e) {
602
+ s.setRequestHeader(e, f(r.headers[e]));
603
+ }), i.signal && (i.signal.addEventListener("abort", l), s.onreadystatechange = function () {
604
+ 4 === s.readyState && i.signal.removeEventListener("abort", l);
605
+ }), s.send(void 0 === i._bodyInit ? null : i._bodyInit);
606
+ });
477
607
  }
478
608
 
479
- function ensureArrayIsNotEmpty(items) {
480
- if (!arrayIsNotEmpty(items)) {
481
- throw new Error("Array must be not empty");
609
+ P.polyfill = !0, o.fetch || (o.fetch = P, o.Headers = y, o.Request = E, o.Response = C);
610
+ var O,
611
+ L = t(255),
612
+ B = t(412),
613
+ T = t(730),
614
+ S = t(68),
615
+ I = t(152);
616
+
617
+ function j(e, r) {
618
+ var t = Object.keys(e);
619
+
620
+ if (Object.getOwnPropertySymbols) {
621
+ var o = Object.getOwnPropertySymbols(e);
622
+ r && (o = o.filter(function (r) {
623
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
624
+ })), t.push.apply(t, o);
482
625
  }
626
+
627
+ return t;
483
628
  }
484
629
 
485
- function ensureArrayHasLength(items, length) {
486
- if (!arrayHasLength(items, length)) {
487
- throw new Error("Array should has length ".concat(length));
630
+ function H(e) {
631
+ for (var r = 1; r < arguments.length; r++) {
632
+ var t = null != arguments[r] ? arguments[r] : {};
633
+ r % 2 ? j(Object(t), !0).forEach(function (r) {
634
+ F(e, r, t[r]);
635
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : j(Object(t)).forEach(function (r) {
636
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
637
+ });
488
638
  }
639
+
640
+ return e;
489
641
  }
490
642
 
491
- function ensureNever(neverArgument) {// noop
643
+ function F(e, r, t) {
644
+ return r in e ? Object.defineProperty(e, r, {
645
+ value: t,
646
+ enumerable: !0,
647
+ configurable: !0,
648
+ writable: !0
649
+ }) : e[r] = t, e;
492
650
  }
493
651
 
494
- function ensureAndGetString(neverArgument) {
495
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
496
- return "".concat(neverArgument);
652
+ function U(e, r) {
653
+ (null == r || r > e.length) && (r = e.length);
654
+
655
+ for (var t = 0, o = new Array(r); t < r; t++) o[t] = e[t];
656
+
657
+ return o;
497
658
  }
498
- /***/
499
659
 
500
- },
660
+ function G() {}
501
661
 
502
- /***/
503
- "./Engine/src/Forms/Client/ClientSettings.ts":
504
- /*!***************************************************!*\
505
- !*** ./Engine/src/Forms/Client/ClientSettings.ts ***!
506
- \***************************************************/
662
+ function M(e) {
663
+ return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
664
+ }
507
665
 
508
- /***/
509
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
510
- __webpack_require__.r(__webpack_exports__);
511
- /* harmony export */
666
+ function D() {
667
+ var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
668
+ r = t.g.CF.keformsUrl || "";
669
+ return "".concat(r, "/").concat(e).replace(/([^:])\/{2,}/g, "$1/");
670
+ }
512
671
 
672
+ function x(e, r) {
673
+ if (void 0 === r) return e;
513
674
 
514
- __webpack_require__.d(__webpack_exports__, {
515
- /* harmony export */
516
- "clientSettings": function () {
517
- return (
518
- /* binding */
519
- clientSettings
520
- );
675
+ for (var t = [], o = 0, n = Object.keys(r); o < n.length; o++) {
676
+ var i = n[o],
677
+ a = r[i];
678
+ null != a && t.push("".concat(i, "=").concat(encodeURIComponent(a)));
521
679
  }
522
- /* harmony export */
523
680
 
524
- });
681
+ return 0 === t.length ? e : e + "?" + t.join("&");
682
+ }
683
+
684
+ function N(e) {
685
+ return new RegExp("^(?:".concat(e.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(t.g.location.host);
686
+ }
687
+
688
+ function R(e) {
689
+ return (t.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (e) {
690
+ return e.replace(/\+/g, " ").split("=").map(decodeURIComponent);
691
+ }).find(function (r) {
692
+ return (t = r, o = 1, function (e) {
693
+ if (Array.isArray(e)) return e;
694
+ }(t) || function (e, r) {
695
+ var t = null == e ? null : "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
696
+
697
+ if (null != t) {
698
+ var o,
699
+ n,
700
+ i = [],
701
+ a = !0,
702
+ s = !1;
703
+
704
+ try {
705
+ for (t = t.call(e); !(a = (o = t.next()).done) && (i.push(o.value), !r || i.length !== r); a = !0);
706
+ } catch (e) {
707
+ s = !0, n = e;
708
+ } finally {
709
+ try {
710
+ a || null == t.return || t.return();
711
+ } finally {
712
+ if (s) throw n;
713
+ }
714
+ }
525
715
 
526
- function parseBool(value) {
527
- if (typeof value === "string") {
528
- if (value === "false") {
529
- return false;
530
- }
716
+ return i;
717
+ }
718
+ }(t, o) || function (e, r) {
719
+ if (e) {
720
+ if ("string" == typeof e) return U(e, r);
721
+ var t = Object.prototype.toString.call(e).slice(8, -1);
722
+ return "Object" === t && e.constructor && (t = e.constructor.name), "Map" === t || "Set" === t ? Array.from(e) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? U(e, r) : void 0;
723
+ }
724
+ }(t, o) || function () {
725
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
726
+ }())[0] == e;
727
+ var t, o;
728
+ }) || [])[1];
729
+ }
730
+
731
+ function V(e, r) {
732
+ var t = 0;
733
+ e.forEach(function (o) {
734
+ o(function (o) {
735
+ if (t !== e.length) {
736
+ if (o) return t = e.length, void r(o);
737
+ (t += 1) === e.length && r();
738
+ }
739
+ });
740
+ });
741
+ }
531
742
 
532
- if (value === "true") {
533
- return true;
534
- }
743
+ function q(e, r) {
744
+ var o = e.gfv,
745
+ n = e.engineVersion,
746
+ i = e.resourcesVersion;
747
+ if (t.g.CF.entryPoint[o]) r();else {
748
+ var a = n && !t.g[n],
749
+ s = "true" === R("debug") ? "" : ".min",
750
+ u = [],
751
+ l = {
752
+ v: i,
753
+ resourceZone: e.resourceZone
754
+ };
755
+ u.push(function (e) {
756
+ return B.e.styleSheet(D(x("static/public/styles/".concat(o).concat(s, ".css"), l)), !0, e);
757
+ }), u.push(function (e) {
758
+ return B.e.script(D(x("static/public/scripts/".concat(o).concat(s, ".js"), l)), e);
759
+ }), a && u.push(function (e) {
760
+ return B.e.styleSheet(D(x("static/public/styles/candy_".concat(n).concat(s, ".css"), l)), !1, e);
761
+ }, function (e) {
762
+ return B.e.script(D(x("static/public/scripts/candy_".concat(n).concat(s, ".js"), l)), e);
763
+ }), V(u, r);
764
+ }
765
+ }
535
766
 
536
- return false;
767
+ function Z(e, r, o) {
768
+ var n;
769
+ (null !== (n = t.g.CF.entryPoint[r.gfv]) && void 0 !== n ? n : (0, L.d1)("Form entry point ".concat(r.gfv, " not found.")))(e, r).then(function (e) {
770
+ var r = e.publicForm || (0, I.P)(e);
771
+ o(null, r);
772
+ }).catch(o);
773
+ }
774
+
775
+ function z(e) {
776
+ if (null != e) return t.g[e] && t.g[e].default;
777
+ }
778
+
779
+ function K(e, r) {
780
+ var o,
781
+ n,
782
+ i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : G,
783
+ a = null,
784
+ s = r.ns,
785
+ u = r.draftId;
786
+ if (N(S.Z.konturDomains) ? S.Z.authorized ? u ? s || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
787
+ var l = null !== (o = r.resourceZone) && void 0 !== o ? o : R("resourceZone"),
788
+ c = x(D((0, T.m)({
789
+ ns: s,
790
+ draftId: u
791
+ })), {
792
+ resourceZone: l
793
+ }),
794
+ d = {
795
+ method: "GET"
796
+ };
797
+ if (null == r.authentication || "browser-credentials-include" === r.authentication) d.credentials = "include";else if ("authSid" in r.authentication && null != r.authentication.authSid) {
798
+ var f;
799
+ d.credentials = "omit", d.headers = null !== (f = d.headers) && void 0 !== f ? f : {}, d.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
800
+ } else d.credentials = "omit";
801
+ var p = null !== (n = r.fetch) && void 0 !== n ? n : P;
802
+ p(c, d).then(function (e) {
803
+ return e.json();
804
+ }).then(function (o) {
805
+ var n,
806
+ a,
807
+ s,
808
+ u,
809
+ c = o.gfv,
810
+ d = o.engineVersion,
811
+ f = H(H(H({
812
+ authorized: S.Z.authorized,
813
+ cauldronApiUrl: S.Z.cauldronApiUrl,
814
+ isTestServer: S.Z.isTestServer,
815
+ renderCachingForIE8: S.Z.renderCachingForIE8,
816
+ normalizationOnServer: S.Z.normalizationOnServer,
817
+ normativeUrl: S.Z.normativeUrl,
818
+ resourcesVersion: S.Z.resourcesVersion,
819
+ konturDomains: S.Z.konturDomains
820
+ }, r), {}, {
821
+ abonId: r.abonId,
822
+ orgId: r.orgId,
823
+ userId: r.userId
824
+ }, o), {}, {
825
+ gfv: c,
826
+ isIndividual: o.isIndividual,
827
+ isForeign: o.isForeign,
828
+ engineVersion: d,
829
+ feedbackEnabled: null !== (n = r.feedbackEnabled) && void 0 !== n ? n : o.feedbackEnabled,
830
+ candyTourAvailable: o.candyTourAvailable,
831
+ eventEmitter: r.eventEmitter,
832
+ formInfo: o.formInfo,
833
+ printInfo: o.printInfo,
834
+ regions: o.regions,
835
+ hasTemplates: o.hasTemplates,
836
+ model: r.model,
837
+ isDisabledCleanForm: null !== (a = r.isDisabledCleanForm) && void 0 !== a && a,
838
+ isDisabledCloseButton: null !== (s = r.isDisabledCloseButton) && void 0 !== s && s,
839
+ isDisabledCloseAndSaveButton: null !== (u = r.isDisabledCloseAndSaveButton) && void 0 !== u && u,
840
+ resourceZone: l,
841
+ authentication: r.authentication
842
+ });
843
+ q({
844
+ gfv: f.gfv,
845
+ engineVersion: f.engineVersion,
846
+ resourceZone: f.resourceZone,
847
+ resourcesVersion: f.resourcesVersion,
848
+ theme: f.theme
849
+ }, function (o) {
850
+ if (!o && t.g.CF.entryPoint[c]) {
851
+ var n = z(d);
852
+ Z(e, H(H({}, f), {}, {
853
+ templatesApi: r.templatesApi,
854
+ renderForm: n
855
+ }), i);
856
+ } else i(new Error("dynamic loading is not supported for gfv ".concat(c)));
857
+ });
858
+ }).catch(i);
859
+ }
860
+ }
861
+
862
+ e = t.hmd(e), (O = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0) && O(e), "undefined" != typeof reactHotLoaderGlobal && reactHotLoaderGlobal.default.signature;
863
+ var W,
864
+ $,
865
+ X = {
866
+ start: K,
867
+ entryPoint: {},
868
+ partialRenderingForIE8: M("{partialRenderingForIE8}"),
869
+ keformsUrl: "{keformsUrl}"
870
+ };
871
+ t.g.CF = X, (W = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && (W.register(G, "defaultCallback", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(M, "parseBool", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(D, "url", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(x, "buildUrl", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(N, "isAllowed", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(R, "getParameterByName", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(V, "runParallel", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(function (e, r) {
872
+ try {
873
+ var t,
874
+ o,
875
+ n,
876
+ i,
877
+ a,
878
+ s,
879
+ u,
880
+ l,
881
+ c,
882
+ d,
883
+ f = e.split(".").slice(0, 3).map(function (e) {
884
+ return parseInt(e, 10);
885
+ }),
886
+ p = r.split(".").slice(0, 3).map(function (e) {
887
+ return parseInt(e, 10);
888
+ });
889
+ return (null !== (t = f[0]) && void 0 !== t ? t : 0) > (null !== (o = p[0]) && void 0 !== o ? o : 0) || (null !== (n = f[0]) && void 0 !== n ? n : 0) === (null !== (i = p[0]) && void 0 !== i ? i : 0) && ((null !== (a = f[1]) && void 0 !== a ? a : 0) > (null !== (s = p[1]) && void 0 !== s ? s : 0) || (null !== (u = f[1]) && void 0 !== u ? u : 0) === (null !== (l = p[1]) && void 0 !== l ? l : 0) && (null !== (c = f[2]) && void 0 !== c ? c : 0) >= (null !== (d = p[2]) && void 0 !== d ? d : 0));
890
+ } catch (e) {
891
+ return !1;
537
892
  }
893
+ }, "isEngineVersionGreaterThanOrEqual", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(q, "loadForm", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(Z, "renderForm", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(z, "getEngineEntryPoint", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(K, "start", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(X, "CandyClientExports", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts")), ($ = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && $(e);
894
+ },
895
+ 68: function (e, r, t) {
896
+ var o;
538
897
 
539
- return Boolean(value);
898
+ function n(e) {
899
+ return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
540
900
  }
541
901
 
542
- var clientSettings = {
543
- authorized: parseBool("{authorized}"),
902
+ t.d(r, {
903
+ Z: function () {
904
+ return s;
905
+ }
906
+ }), e = t.hmd(e), (o = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0) && o(e), "undefined" != typeof reactHotLoaderGlobal && reactHotLoaderGlobal.default.signature;
907
+ var i,
908
+ a,
909
+ s = {
910
+ authorized: n("{authorized}"),
544
911
  cauldronApiUrl: "{cauldronApiUrl}",
545
- abonId: "{abonId}",
546
- orgId: "{orgId}",
547
- userId: "{userId}",
548
- isTestServer: parseBool("{isTestServer}"),
549
- renderCachingForIE8: parseBool("{renderCachingForIE8}"),
550
- normalizationOnServer: parseBool("{normalizationOnServer}"),
912
+ isTestServer: n("{isTestServer}"),
913
+ renderCachingForIE8: n("{renderCachingForIE8}"),
914
+ normalizationOnServer: n("{normalizationOnServer}"),
551
915
  normativeUrl: "{normativeUrl}",
552
916
  resourcesVersion: "{resourcesVersion}",
553
917
  konturDomains: "{konturDomains}"
554
918
  };
555
- /***/
919
+ (i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && (i.register(n, "parseBool", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\ClientSettings.ts"), i.register(s, "clientSettings", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\ClientSettings.ts")), (a = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && a(e);
556
920
  },
557
-
558
- /***/
559
- "./Engine/src/Forms/Client/LegacyPublicForm/CreateLegacyPublicForm.ts":
560
- /*!****************************************************************************!*\
561
- !*** ./Engine/src/Forms/Client/LegacyPublicForm/CreateLegacyPublicForm.ts ***!
562
- \****************************************************************************/
563
-
564
- /***/
565
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
566
- __webpack_require__.r(__webpack_exports__);
567
- /* harmony export */
568
-
569
-
921
+ 152: function (module, __webpack_exports__, __webpack_require__) {
570
922
  __webpack_require__.d(__webpack_exports__, {
571
- /* harmony export */
572
- "modelChangeEventPath": function () {
573
- return (
574
- /* binding */
575
- modelChangeEventPath
576
- );
577
- },
578
-
579
- /* harmony export */
580
- "createLegacyPublicForm": function () {
581
- return (
582
- /* binding */
583
- createLegacyPublicForm
584
- );
923
+ P: function () {
924
+ return createLegacyPublicForm;
585
925
  }
586
- /* harmony export */
587
-
588
926
  });
589
- /* harmony import */
590
-
591
-
592
- var _Common_Errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
593
- /*! ../../../../../Common/Errors */
594
- "./Common/Errors.ts");
595
-
596
- function _typeof(obj) {
597
- "@babel/helpers - typeof";
598
927
 
599
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
600
- _typeof = function _typeof(obj) {
601
- return typeof obj;
602
- };
603
- } else {
604
- _typeof = function _typeof(obj) {
605
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
606
- };
607
- }
928
+ var _Common_Errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(556),
929
+ enterModule;
608
930
 
609
- return _typeof(obj);
931
+ function _typeof(e) {
932
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
933
+ return typeof e;
934
+ } : function (e) {
935
+ return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
936
+ }, _typeof(e);
610
937
  }
611
938
 
612
- function _classCallCheck(instance, Constructor) {
613
- if (!(instance instanceof Constructor)) {
614
- throw new TypeError("Cannot call a class as a function");
615
- }
939
+ function _classCallCheck(e, r) {
940
+ if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function");
616
941
  }
617
942
 
618
- function _defineProperties(target, props) {
619
- for (var i = 0; i < props.length; i++) {
620
- var descriptor = props[i];
621
- descriptor.enumerable = descriptor.enumerable || false;
622
- descriptor.configurable = true;
623
- if ("value" in descriptor) descriptor.writable = true;
624
- Object.defineProperty(target, descriptor.key, descriptor);
943
+ function _defineProperties(e, r) {
944
+ for (var t = 0; t < r.length; t++) {
945
+ var o = r[t];
946
+ o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, o.key, o);
625
947
  }
626
948
  }
627
949
 
628
- function _createClass(Constructor, protoProps, staticProps) {
629
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
630
- if (staticProps) _defineProperties(Constructor, staticProps);
631
- return Constructor;
950
+ function _createClass(e, r, t) {
951
+ return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), e;
632
952
  }
633
953
 
634
- function ownKeys(object, enumerableOnly) {
635
- var keys = Object.keys(object);
954
+ function ownKeys(e, r) {
955
+ var t = Object.keys(e);
636
956
 
637
957
  if (Object.getOwnPropertySymbols) {
638
- var symbols = Object.getOwnPropertySymbols(object);
639
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
640
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
641
- });
642
- keys.push.apply(keys, symbols);
958
+ var o = Object.getOwnPropertySymbols(e);
959
+ r && (o = o.filter(function (r) {
960
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
961
+ })), t.push.apply(t, o);
643
962
  }
644
963
 
645
- return keys;
964
+ return t;
646
965
  }
647
966
 
648
- function _objectSpread(target) {
649
- for (var i = 1; i < arguments.length; i++) {
650
- var source = arguments[i] != null ? arguments[i] : {};
651
-
652
- if (i % 2) {
653
- ownKeys(Object(source), true).forEach(function (key) {
654
- _defineProperty(target, key, source[key]);
655
- });
656
- } else if (Object.getOwnPropertyDescriptors) {
657
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
658
- } else {
659
- ownKeys(Object(source)).forEach(function (key) {
660
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
661
- });
662
- }
967
+ function _objectSpread(e) {
968
+ for (var r = 1; r < arguments.length; r++) {
969
+ var t = null != arguments[r] ? arguments[r] : {};
970
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
971
+ _defineProperty(e, r, t[r]);
972
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
973
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
974
+ });
663
975
  }
664
976
 
665
- return target;
977
+ return e;
666
978
  }
667
979
 
668
- function _defineProperty(obj, key, value) {
669
- if (key in obj) {
670
- Object.defineProperty(obj, key, {
671
- value: value,
672
- enumerable: true,
673
- configurable: true,
674
- writable: true
675
- });
676
- } else {
677
- obj[key] = value;
678
- }
679
-
680
- return obj;
980
+ function _defineProperty(e, r, t) {
981
+ return r in e ? Object.defineProperty(e, r, {
982
+ value: t,
983
+ enumerable: !0,
984
+ configurable: !0,
985
+ writable: !0
986
+ }) : e[r] = t, e;
681
987
  }
682
988
 
683
- function modelChangeEventPath(path, fieldName) {
684
- if (fieldName != undefined) {
685
- if (path == undefined) {
686
- throw new Error("Path must be defined");
687
- }
989
+ module = __webpack_require__.hmd(module), enterModule = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0, enterModule && enterModule(module);
688
990
 
689
- return ["model", "change", path, fieldName];
690
- }
991
+ var __signature__ = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default.signature : function (e) {
992
+ return e;
993
+ };
691
994
 
692
- if (path != undefined) {
693
- return ["model", "change", path];
995
+ function modelChangeEventPath(e, r) {
996
+ if (null != r) {
997
+ if (null == e) throw new Error("Path must be defined");
998
+ return ["model", "change", e, r];
694
999
  }
695
1000
 
696
- return ["model", "change"];
1001
+ return null != e ? ["model", "change", e] : ["model", "change"];
697
1002
  }
698
1003
 
699
- function mapChunkValues(chunk) {
700
- return Object.keys(chunk).filter(function (path) {
701
- return chunk[path] && Object.prototype.hasOwnProperty.call(chunk[path], "value");
702
- }).map(function (path) {
703
- var result = chunk[path];
704
-
705
- if (result == undefined) {
706
- return {};
707
- }
708
-
709
- return _defineProperty({}, path, result.value);
1004
+ function mapChunkValues(e) {
1005
+ return Object.keys(e).filter(function (r) {
1006
+ return e[r] && Object.prototype.hasOwnProperty.call(e[r], "value");
1007
+ }).map(function (r) {
1008
+ var t = e[r];
1009
+ return null == t ? {} : _defineProperty({}, r, t.value);
710
1010
  });
711
1011
  }
712
1012
 
713
- function reduceChunkValues(chunks) {
714
- return chunks.reduce(function (result, chunk) {
715
- return _objectSpread(_objectSpread({}, result), chunk);
1013
+ function reduceChunkValues(e) {
1014
+ return e.reduce(function (e, r) {
1015
+ return _objectSpread(_objectSpread({}, e), r);
716
1016
  }, {});
717
1017
  }
718
1018
 
719
- var LegacyPublicForm = /*#__PURE__*/function () {
720
- function LegacyPublicForm(form) {
721
- _classCallCheck(this, LegacyPublicForm);
722
-
723
- this.form = void 0;
724
- this.form = form;
1019
+ var LegacyPublicForm = function () {
1020
+ function LegacyPublicForm(e) {
1021
+ _classCallCheck(this, LegacyPublicForm), this.form = void 0, this.form = e;
725
1022
  }
726
1023
 
727
- _createClass(LegacyPublicForm, [{
1024
+ return _createClass(LegacyPublicForm, [{
1025
+ key: "batchUpdate",
1026
+ value: function (e) {
1027
+ throw new Error("Method not implemented.");
1028
+ }
1029
+ }, {
728
1030
  key: "runCheck",
729
- value: function runCheck() {
1031
+ value: function () {
730
1032
  throw new Error("Method not implemented.");
731
1033
  }
732
1034
  }, {
733
1035
  key: "setErrorLog",
734
- value: function setErrorLog(errorLog) {
1036
+ value: function (e) {
1037
+ throw new Error("Method not implemented.");
1038
+ }
1039
+ }, {
1040
+ key: "__INTERNAL__importFromEmployeeService",
1041
+ value: function () {
735
1042
  throw new Error("Method not implemented.");
736
1043
  }
737
1044
  }, {
738
1045
  key: "getByGId",
739
- value: function getByGId(gId, filter) {
740
- return this.form.picklistsProvider.getByGId(gId, filter);
1046
+ value: function (e, r) {
1047
+ return this.form.picklistsProvider.getDigestApiPicklist(e).query(r);
741
1048
  }
742
1049
  }, {
743
1050
  key: "on",
744
- value: function on(eventName, listener) {
745
- this.form.eventManager.on(["form", eventName], listener);
1051
+ value: function (e, r) {
1052
+ this.form.eventManager.on(["form", e], r);
746
1053
  }
747
1054
  }, {
748
1055
  key: "off",
749
- value: function off(eventName, listener) {
750
- this.form.eventManager.off(["form", eventName], listener);
1056
+ value: function (e, r) {
1057
+ this.form.eventManager.off(["form", e], r);
751
1058
  }
752
1059
  }, {
753
1060
  key: "onModelChange",
754
- value: function onModelChange(path, listener) {
755
- // eslint-disable-next-line no-console
1061
+ value: function (e, r) {
756
1062
  console.error("form.onModelChange() is not supported yet");
757
1063
  }
758
1064
  }, {
759
1065
  key: "offModelChange",
760
- value: function offModelChange(path, listener) {
761
- // eslint-disable-next-line no-console
1066
+ value: function (e, r) {
762
1067
  console.error("form.offModelChange() is not supported yet");
763
1068
  }
764
1069
  }, {
765
1070
  key: "save",
766
- value: function save() {
1071
+ value: function () {
767
1072
  return this.form.changeSet.send();
768
1073
  }
769
1074
  }, {
770
1075
  key: "close",
771
- value: function close() {
772
- this.form.changeSet.stopAutosend();
773
-
774
- if (this.form.unmount) {
775
- this.form.unmount();
776
- }
777
-
778
- return this.form.changeSet.send();
1076
+ value: function () {
1077
+ return this.form.changeSet.stopAutosend(), this.form.unmount && this.form.unmount(), this.form.changeSet.send();
779
1078
  }
780
1079
  }, {
781
1080
  key: "getTourSteps",
782
- value: function getTourSteps() {
1081
+ value: function () {
783
1082
  return [];
784
1083
  }
785
1084
  }, {
786
1085
  key: "validate",
787
- value: function validate() {
788
- var keys = Object.keys(this.form.model.getCachedChunk(this.form.settings.formRoot)); // @ts-ignore Это в старых движках тут такой вызов
789
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
790
-
791
- return this.form.validator.validateAll(keys);
1086
+ value: function () {
1087
+ var e = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
1088
+ return this.form.validator.validateAll(e);
792
1089
  }
793
1090
  }, {
794
1091
  key: "hasErrors",
795
- value: function hasErrors() {
796
- var errorCount = this.form.model.getCached(this.form.settings.formRoot, "errorsCount");
797
- return errorCount != undefined && errorCount > 0;
1092
+ value: function () {
1093
+ var e = this.form.model.get(this.form.settings.formRoot, "errorsCount");
1094
+ return null != e && e > 0;
798
1095
  }
799
1096
  }, {
800
1097
  key: "onErrorsCountChanged",
801
- value: function onErrorsCountChanged(listener) {
802
- this.form.eventManager.on(modelChangeEventPath(this.form.settings.formRoot, "errorsCount"), listener);
1098
+ value: function (e) {
1099
+ this.form.eventManager.on(modelChangeEventPath(this.form.settings.formRoot, "errorsCount"), e);
803
1100
  }
804
1101
  }, {
805
1102
  key: "offErrorsCountChanged",
806
- value: function offErrorsCountChanged(listener) {
807
- this.form.eventManager.off(modelChangeEventPath(this.form.settings.formRoot, "errorsCount"), listener);
1103
+ value: function (e) {
1104
+ this.form.eventManager.off(modelChangeEventPath(this.form.settings.formRoot, "errorsCount"), e);
808
1105
  }
809
1106
  }, {
810
1107
  key: "set",
811
- value: function set(pathOrModelChunk, value) {
812
- if (pathOrModelChunk !== null && typeof pathOrModelChunk !== "string" && _typeof(pathOrModelChunk) === "object" && !Array.isArray(pathOrModelChunk)) {
813
- var innerChunk = Object.keys(pathOrModelChunk).reduce(function (result, path) {
814
- return _objectSpread(_defineProperty({}, path, {
815
- value: pathOrModelChunk[path]
816
- }), result);
1108
+ value: function (e, r) {
1109
+ if (null === e || "string" == typeof e || "object" !== _typeof(e) || Array.isArray(e)) {
1110
+ if ("string" != typeof e) throw new Error("form.set() parameter should be string path or object with path-value pairs");
1111
+ this.form.model.set(e, "value", r);
1112
+ } else {
1113
+ var t = Object.keys(e).reduce(function (r, t) {
1114
+ return _objectSpread(_defineProperty({}, t, {
1115
+ value: e[t]
1116
+ }), r);
817
1117
  }, {});
818
- this.form.model.fill(innerChunk);
819
- return;
1118
+ this.form.model.fill(t);
820
1119
  }
821
-
822
- if (typeof pathOrModelChunk === "string") {
823
- this.form.model.set(pathOrModelChunk, "value", value);
824
- return;
825
- }
826
-
827
- throw new Error("form.set() parameter should be string path or object with path-value pairs");
828
1120
  }
829
1121
  }, {
830
1122
  key: "get",
831
- value: function get(pathOrArray) {
832
- var _this = this;
833
-
834
- if (Array.isArray(pathOrArray)) {
835
- return reduceChunkValues(pathOrArray.map(function (path) {
836
- return mapChunkValues(_this.form.model.getCachedChunk(path));
837
- }) // tslint:disable-next-line:no-any
838
- .reduce(function (result, array) {
839
- return result.concat(array);
840
- }, []));
841
- }
842
-
843
- if (typeof pathOrArray === "string") {
844
- return reduceChunkValues(mapChunkValues(this.form.model.getCachedChunk(pathOrArray)));
845
- }
846
-
847
- if (pathOrArray === undefined) {
848
- return reduceChunkValues(mapChunkValues(this.form.model.getCachedChunk(this.form.settings.formRoot)));
849
- }
850
-
1123
+ value: function (e) {
1124
+ var r = this;
1125
+ if (Array.isArray(e)) return reduceChunkValues(e.map(function (e) {
1126
+ return mapChunkValues(r.form.model.getChunk(e));
1127
+ }).reduce(function (e, r) {
1128
+ return e.concat(r);
1129
+ }, []));
1130
+ if ("string" == typeof e) return reduceChunkValues(mapChunkValues(this.form.model.getChunk(e)));
1131
+ if (void 0 === e) return reduceChunkValues(mapChunkValues(this.form.model.getChunk(this.form.settings.formRoot)));
851
1132
  throw new Error("form.get() parameter should be string path or array of paths");
852
1133
  }
853
1134
  }, {
854
1135
  key: "getValue",
855
- value: function getValue(path) {
856
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
857
- return this.form.model.get(path, "value");
1136
+ value: function (e) {
1137
+ return this.form.model.get(e, "value");
858
1138
  }
859
1139
  }, {
860
1140
  key: "addInstance",
861
- value: function addInstance(path) {
862
- throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.NotImplementedError();
1141
+ value: function (e) {
1142
+ throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
863
1143
  }
864
1144
  }, {
865
1145
  key: "getChildren",
866
- value: function getChildren(path) {
867
- throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.NotImplementedError();
1146
+ value: function (e) {
1147
+ throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
868
1148
  }
869
1149
  }, {
870
1150
  key: "removeInstance",
871
- value: function removeInstance(path, instance) {
872
- throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.NotImplementedError();
1151
+ value: function (e, r) {
1152
+ throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
873
1153
  }
874
- }]);
875
-
876
- return LegacyPublicForm;
877
- }();
1154
+ }, {
1155
+ key: "removeInstances",
1156
+ value: function (e, r) {
1157
+ throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
1158
+ }
1159
+ }, {
1160
+ key: "setAllCheckboxesFor113103",
1161
+ value: function (e) {
1162
+ return Promise.resolve(void 0);
1163
+ }
1164
+ }, {
1165
+ key: "setAutoFieldsToAutoValue",
1166
+ value: function (e) {
1167
+ return Promise.resolve(void 0);
1168
+ }
1169
+ }, {
1170
+ key: "__reactstandin__regenerateByEval",
1171
+ value: function __reactstandin__regenerateByEval(key, code) {
1172
+ this[key] = eval(code);
1173
+ }
1174
+ }]), LegacyPublicForm;
1175
+ }(),
1176
+ reactHotLoader,
1177
+ leaveModule;
878
1178
 
879
- function createLegacyPublicForm(form) {
880
- // @ts-ignore
881
- return new LegacyPublicForm(form);
1179
+ function createLegacyPublicForm(e) {
1180
+ return new LegacyPublicForm(e);
882
1181
  }
883
- /***/
884
1182
 
1183
+ reactHotLoader = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0, reactHotLoader && (reactHotLoader.register(modelChangeEventPath, "modelChangeEventPath", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(mapChunkValues, "mapChunkValues", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(reduceChunkValues, "reduceChunkValues", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(LegacyPublicForm, "LegacyPublicForm", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(createLegacyPublicForm, "createLegacyPublicForm", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts")), leaveModule = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0, leaveModule && leaveModule(module);
885
1184
  },
1185
+ 412: function (e, r, t) {
1186
+ var o;
886
1187
 
887
- /***/
888
- "./Engine/src/Helpers/LoadIntoDocument.ts":
889
- /*!************************************************!*\
890
- !*** ./Engine/src/Helpers/LoadIntoDocument.ts ***!
891
- \************************************************/
892
-
893
- /***/
894
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
895
- __webpack_require__.r(__webpack_exports__);
896
- /* harmony export */
897
-
898
-
899
- __webpack_require__.d(__webpack_exports__, {
900
- /* harmony export */
901
- "LoadIntoDocument": function () {
902
- return (
903
- /* binding */
904
- LoadIntoDocument
905
- );
906
- }
907
- /* harmony export */
908
-
909
- });
910
-
911
- function _classCallCheck(instance, Constructor) {
912
- if (!(instance instanceof Constructor)) {
913
- throw new TypeError("Cannot call a class as a function");
1188
+ function n(e, r) {
1189
+ for (var t = 0; t < r.length; t++) {
1190
+ var o = r[t];
1191
+ o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, o.key, o);
914
1192
  }
915
1193
  }
916
1194
 
917
- function _defineProperties(target, props) {
918
- for (var i = 0; i < props.length; i++) {
919
- var descriptor = props[i];
920
- descriptor.enumerable = descriptor.enumerable || false;
921
- descriptor.configurable = true;
922
- if ("value" in descriptor) descriptor.writable = true;
923
- Object.defineProperty(target, descriptor.key, descriptor);
1195
+ t.d(r, {
1196
+ e: function () {
1197
+ return s;
924
1198
  }
925
- }
926
-
927
- function _createClass(Constructor, protoProps, staticProps) {
928
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
929
- if (staticProps) _defineProperties(Constructor, staticProps);
930
- return Constructor;
931
- } // tslint:disable no-unsafe-any
932
-
933
-
934
- var LoadIntoDocument = /*#__PURE__*/function () {
935
- function LoadIntoDocument() {
936
- _classCallCheck(this, LoadIntoDocument);
1199
+ }), e = t.hmd(e), (o = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0) && o(e), "undefined" != typeof reactHotLoaderGlobal && reactHotLoaderGlobal.default.signature;
1200
+
1201
+ var i,
1202
+ a,
1203
+ s = function () {
1204
+ function e() {
1205
+ !function (e, r) {
1206
+ if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function");
1207
+ }(this, e);
937
1208
  }
938
1209
 
939
- _createClass(LoadIntoDocument, null, [{
1210
+ var r, t;
1211
+ return r = e, t = [{
940
1212
  key: "script",
941
- value: function script(uri, callback) {
942
- var scriptLoaded = false;
943
- var head = document.getElementsByTagName("head")[0] || document.documentElement; // eslint-disable-next-line @typescript-eslint/no-explicit-any
944
-
945
- var script = document.createElement("script");
946
-
947
- function loadHandler() {
948
- if (scriptLoaded) {
949
- return;
950
- }
951
-
952
- if (!script.readyState || script.readyState === "loaded" || script.readyState === "complete") {
953
- scriptLoaded = true;
954
- callback();
955
- }
956
- } // Hang the user callback to be called when the script completes to load.
957
- // NOTE(user): This callback will be called in IE even upon error. In any
958
- // case it is the client's responsibility to verify that the script ran
959
- // successfully.
960
-
961
-
962
- script.onload = loadHandler;
963
- script.onreadystatechange = loadHandler; // Add an error callback.
964
- // NOTE(user): Not supported in IE.
965
-
966
- script.onerror = function () {
967
- if (script.parentNode) {
968
- script.parentNode.removeChild(script);
969
- }
970
-
971
- callback(new Error("Error while loading script."));
972
- }; // Add the script element to the document.
973
- // NOTE(user): Safari never loads the script if we don't set
974
- // the src attribute before appending.
1213
+ value: function (e, r) {
1214
+ var t = !1,
1215
+ o = document.getElementsByTagName("head")[0] || document.documentElement,
1216
+ n = document.createElement("script");
975
1217
 
1218
+ function i() {
1219
+ t || n.readyState && "loaded" !== n.readyState && "complete" !== n.readyState || (t = !0, r());
1220
+ }
976
1221
 
977
- script.src = uri;
978
- script.setAttribute("crossorigin", "use-credentials");
979
- head.appendChild(script);
1222
+ n.onload = i, n.onreadystatechange = i, n.onerror = function () {
1223
+ n.parentNode && n.parentNode.removeChild(n), r(new Error("Error while loading script."));
1224
+ }, n.src = e, n.setAttribute("crossorigin", "use-credentials"), o.appendChild(n);
980
1225
  }
981
1226
  }, {
982
1227
  key: "styleSheet",
983
- value: function styleSheet(uri, ignoreError, callback) {
984
- var _document$getElements;
985
-
986
- var resolve = function resolve() {
987
- return callback(undefined);
988
- };
989
-
990
- var reject = function reject() {
991
- if (ignoreError) {
992
- callback(undefined);
993
- } else {
994
- callback(new Error("Error while loading stylesheet."));
995
- }
996
- };
997
-
998
- var head = (_document$getElements = document.getElementsByTagName("head")[0]) !== null && _document$getElements !== void 0 ? _document$getElements : document.documentElement;
999
- var link = document.createElement("link");
1000
- link.setAttribute("rel", "stylesheet");
1001
- link.setAttribute("type", "text/css");
1002
- link.addEventListener("load", resolve);
1003
- link.addEventListener("error", reject);
1004
- head.appendChild(link);
1005
- link.setAttribute("href", uri);
1228
+ value: function (e, r, t) {
1229
+ var o,
1230
+ n = null !== (o = document.getElementsByTagName("head")[0]) && void 0 !== o ? o : document.documentElement,
1231
+ i = document.createElement("link");
1232
+ i.setAttribute("rel", "stylesheet"), i.setAttribute("type", "text/css"), i.addEventListener("load", function () {
1233
+ return t(void 0);
1234
+ }), i.addEventListener("error", function () {
1235
+ t(r ? void 0 : new Error("Error while loading stylesheet."));
1236
+ }), n.appendChild(i), i.setAttribute("href", e);
1006
1237
  }
1007
- }]);
1008
-
1009
- return LoadIntoDocument;
1238
+ }], null && n(r.prototype, null), t && n(r, t), e;
1010
1239
  }();
1011
- /***/
1012
-
1013
- },
1014
1240
 
1015
- /***/
1016
- "./node_modules/whatwg-fetch/fetch.js":
1017
- /*!********************************************!*\
1018
- !*** ./node_modules/whatwg-fetch/fetch.js ***!
1019
- \********************************************/
1241
+ (i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && i.register(s, "LoadIntoDocument", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Helpers\\LoadIntoDocument.ts"), (a = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && a(e);
1242
+ }
1243
+ },
1244
+ __webpack_module_cache__ = {};
1245
+
1246
+ function __webpack_require__(e) {
1247
+ var r = __webpack_module_cache__[e];
1248
+ if (void 0 !== r) return r.exports;
1249
+ var t = __webpack_module_cache__[e] = {
1250
+ id: e,
1251
+ loaded: !1,
1252
+ exports: {}
1253
+ };
1254
+ return __webpack_modules__[e](t, t.exports, __webpack_require__), t.loaded = !0, t.exports;
1255
+ }
1020
1256
 
1021
- /***/
1022
- function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1023
- __webpack_require__.r(__webpack_exports__);
1024
- /* harmony export */
1257
+ __webpack_require__.d = function (e, r) {
1258
+ for (var t in r) __webpack_require__.o(r, t) && !__webpack_require__.o(e, t) && Object.defineProperty(e, t, {
1259
+ enumerable: !0,
1260
+ get: r[t]
1261
+ });
1262
+ }, __webpack_require__.g = function () {
1263
+ if ("object" == typeof globalThis) return globalThis;
1025
1264
 
1265
+ try {
1266
+ return this || new Function("return this")();
1267
+ } catch (e) {
1268
+ if ("object" == typeof window) return window;
1269
+ }
1270
+ }(), __webpack_require__.hmd = function (e) {
1271
+ return (e = Object.create(e)).children || (e.children = []), Object.defineProperty(e, "exports", {
1272
+ enumerable: !0,
1273
+ set: function () {
1274
+ throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: " + e.id);
1275
+ }
1276
+ }), e;
1277
+ }, __webpack_require__.o = function (e, r) {
1278
+ return Object.prototype.hasOwnProperty.call(e, r);
1279
+ };
1026
1280
 
1027
- __webpack_require__.d(__webpack_exports__, {
1028
- /* harmony export */
1029
- "Headers": function () {
1030
- return (
1031
- /* binding */
1032
- Headers
1033
- );
1034
- },
1035
-
1036
- /* harmony export */
1037
- "Request": function () {
1038
- return (
1039
- /* binding */
1040
- Request
1041
- );
1042
- },
1043
-
1044
- /* harmony export */
1045
- "Response": function () {
1046
- return (
1047
- /* binding */
1048
- Response
1049
- );
1050
- },
1051
-
1052
- /* harmony export */
1053
- "DOMException": function () {
1054
- return (
1055
- /* binding */
1056
- DOMException
1057
- );
1058
- },
1059
-
1060
- /* harmony export */
1061
- "fetch": function () {
1062
- return (
1063
- /* binding */
1064
- fetch
1065
- );
1066
- }
1067
- /* harmony export */
1068
-
1069
- });
1070
-
1071
- function _typeof(obj) {
1072
- "@babel/helpers - typeof";
1073
-
1074
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
1075
- _typeof = function _typeof(obj) {
1076
- return typeof obj;
1077
- };
1078
- } else {
1079
- _typeof = function _typeof(obj) {
1080
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
1081
- };
1082
- }
1083
-
1084
- return _typeof(obj);
1085
- }
1086
-
1087
- var global = typeof globalThis !== 'undefined' && globalThis || typeof self !== 'undefined' && self || typeof global !== 'undefined' && global;
1088
- var support = {
1089
- searchParams: 'URLSearchParams' in global,
1090
- iterable: 'Symbol' in global && 'iterator' in Symbol,
1091
- blob: 'FileReader' in global && 'Blob' in global && function () {
1092
- try {
1093
- new Blob();
1094
- return true;
1095
- } catch (e) {
1096
- return false;
1097
- }
1098
- }(),
1099
- formData: 'FormData' in global,
1100
- arrayBuffer: 'ArrayBuffer' in global
1101
- };
1102
-
1103
- function isDataView(obj) {
1104
- return obj && DataView.prototype.isPrototypeOf(obj);
1105
- }
1106
-
1107
- if (support.arrayBuffer) {
1108
- var viewClasses = ['[object Int8Array]', '[object Uint8Array]', '[object Uint8ClampedArray]', '[object Int16Array]', '[object Uint16Array]', '[object Int32Array]', '[object Uint32Array]', '[object Float32Array]', '[object Float64Array]'];
1109
-
1110
- var isArrayBufferView = ArrayBuffer.isView || function (obj) {
1111
- return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;
1112
- };
1113
- }
1114
-
1115
- function normalizeName(name) {
1116
- if (typeof name !== 'string') {
1117
- name = String(name);
1118
- }
1119
-
1120
- if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {
1121
- throw new TypeError('Invalid character in header field name: "' + name + '"');
1122
- }
1123
-
1124
- return name.toLowerCase();
1125
- }
1126
-
1127
- function normalizeValue(value) {
1128
- if (typeof value !== 'string') {
1129
- value = String(value);
1130
- }
1131
-
1132
- return value;
1133
- } // Build a destructive iterator for the value list
1134
-
1135
-
1136
- function iteratorFor(items) {
1137
- var iterator = {
1138
- next: function next() {
1139
- var value = items.shift();
1140
- return {
1141
- done: value === undefined,
1142
- value: value
1143
- };
1144
- }
1145
- };
1146
-
1147
- if (support.iterable) {
1148
- iterator[Symbol.iterator] = function () {
1149
- return iterator;
1150
- };
1151
- }
1152
-
1153
- return iterator;
1154
- }
1155
-
1156
- function Headers(headers) {
1157
- this.map = {};
1158
-
1159
- if (headers instanceof Headers) {
1160
- headers.forEach(function (value, name) {
1161
- this.append(name, value);
1162
- }, this);
1163
- } else if (Array.isArray(headers)) {
1164
- headers.forEach(function (header) {
1165
- this.append(header[0], header[1]);
1166
- }, this);
1167
- } else if (headers) {
1168
- Object.getOwnPropertyNames(headers).forEach(function (name) {
1169
- this.append(name, headers[name]);
1170
- }, this);
1171
- }
1172
- }
1173
-
1174
- Headers.prototype.append = function (name, value) {
1175
- name = normalizeName(name);
1176
- value = normalizeValue(value);
1177
- var oldValue = this.map[name];
1178
- this.map[name] = oldValue ? oldValue + ', ' + value : value;
1179
- };
1180
-
1181
- Headers.prototype['delete'] = function (name) {
1182
- delete this.map[normalizeName(name)];
1183
- };
1184
-
1185
- Headers.prototype.get = function (name) {
1186
- name = normalizeName(name);
1187
- return this.has(name) ? this.map[name] : null;
1188
- };
1189
-
1190
- Headers.prototype.has = function (name) {
1191
- return this.map.hasOwnProperty(normalizeName(name));
1192
- };
1193
-
1194
- Headers.prototype.set = function (name, value) {
1195
- this.map[normalizeName(name)] = normalizeValue(value);
1196
- };
1197
-
1198
- Headers.prototype.forEach = function (callback, thisArg) {
1199
- for (var name in this.map) {
1200
- if (this.map.hasOwnProperty(name)) {
1201
- callback.call(thisArg, this.map[name], name, this);
1202
- }
1203
- }
1204
- };
1205
-
1206
- Headers.prototype.keys = function () {
1207
- var items = [];
1208
- this.forEach(function (value, name) {
1209
- items.push(name);
1210
- });
1211
- return iteratorFor(items);
1212
- };
1213
-
1214
- Headers.prototype.values = function () {
1215
- var items = [];
1216
- this.forEach(function (value) {
1217
- items.push(value);
1218
- });
1219
- return iteratorFor(items);
1220
- };
1221
-
1222
- Headers.prototype.entries = function () {
1223
- var items = [];
1224
- this.forEach(function (value, name) {
1225
- items.push([name, value]);
1226
- });
1227
- return iteratorFor(items);
1228
- };
1229
-
1230
- if (support.iterable) {
1231
- Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
1232
- }
1233
-
1234
- function consumed(body) {
1235
- if (body.bodyUsed) {
1236
- return Promise.reject(new TypeError('Already read'));
1237
- }
1238
-
1239
- body.bodyUsed = true;
1240
- }
1241
-
1242
- function fileReaderReady(reader) {
1243
- return new Promise(function (resolve, reject) {
1244
- reader.onload = function () {
1245
- resolve(reader.result);
1246
- };
1247
-
1248
- reader.onerror = function () {
1249
- reject(reader.error);
1250
- };
1251
- });
1252
- }
1253
-
1254
- function readBlobAsArrayBuffer(blob) {
1255
- var reader = new FileReader();
1256
- var promise = fileReaderReady(reader);
1257
- reader.readAsArrayBuffer(blob);
1258
- return promise;
1259
- }
1260
-
1261
- function readBlobAsText(blob) {
1262
- var reader = new FileReader();
1263
- var promise = fileReaderReady(reader);
1264
- reader.readAsText(blob);
1265
- return promise;
1266
- }
1267
-
1268
- function readArrayBufferAsText(buf) {
1269
- var view = new Uint8Array(buf);
1270
- var chars = new Array(view.length);
1271
-
1272
- for (var i = 0; i < view.length; i++) {
1273
- chars[i] = String.fromCharCode(view[i]);
1274
- }
1275
-
1276
- return chars.join('');
1277
- }
1278
-
1279
- function bufferClone(buf) {
1280
- if (buf.slice) {
1281
- return buf.slice(0);
1282
- } else {
1283
- var view = new Uint8Array(buf.byteLength);
1284
- view.set(new Uint8Array(buf));
1285
- return view.buffer;
1286
- }
1287
- }
1288
-
1289
- function Body() {
1290
- this.bodyUsed = false;
1291
-
1292
- this._initBody = function (body) {
1293
- /*
1294
- fetch-mock wraps the Response object in an ES6 Proxy to
1295
- provide useful test harness features such as flush. However, on
1296
- ES5 browsers without fetch or Proxy support pollyfills must be used;
1297
- the proxy-pollyfill is unable to proxy an attribute unless it exists
1298
- on the object before the Proxy is created. This change ensures
1299
- Response.bodyUsed exists on the instance, while maintaining the
1300
- semantic of setting Request.bodyUsed in the constructor before
1301
- _initBody is called.
1302
- */
1303
- this.bodyUsed = this.bodyUsed;
1304
- this._bodyInit = body;
1305
-
1306
- if (!body) {
1307
- this._bodyText = '';
1308
- } else if (typeof body === 'string') {
1309
- this._bodyText = body;
1310
- } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
1311
- this._bodyBlob = body;
1312
- } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
1313
- this._bodyFormData = body;
1314
- } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
1315
- this._bodyText = body.toString();
1316
- } else if (support.arrayBuffer && support.blob && isDataView(body)) {
1317
- this._bodyArrayBuffer = bufferClone(body.buffer); // IE 10-11 can't handle a DataView body.
1318
-
1319
- this._bodyInit = new Blob([this._bodyArrayBuffer]);
1320
- } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
1321
- this._bodyArrayBuffer = bufferClone(body);
1322
- } else {
1323
- this._bodyText = body = Object.prototype.toString.call(body);
1324
- }
1325
-
1326
- if (!this.headers.get('content-type')) {
1327
- if (typeof body === 'string') {
1328
- this.headers.set('content-type', 'text/plain;charset=UTF-8');
1329
- } else if (this._bodyBlob && this._bodyBlob.type) {
1330
- this.headers.set('content-type', this._bodyBlob.type);
1331
- } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
1332
- this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
1333
- }
1334
- }
1335
- };
1336
-
1337
- if (support.blob) {
1338
- this.blob = function () {
1339
- var rejected = consumed(this);
1340
-
1341
- if (rejected) {
1342
- return rejected;
1343
- }
1344
-
1345
- if (this._bodyBlob) {
1346
- return Promise.resolve(this._bodyBlob);
1347
- } else if (this._bodyArrayBuffer) {
1348
- return Promise.resolve(new Blob([this._bodyArrayBuffer]));
1349
- } else if (this._bodyFormData) {
1350
- throw new Error('could not read FormData body as blob');
1351
- } else {
1352
- return Promise.resolve(new Blob([this._bodyText]));
1353
- }
1354
- };
1355
-
1356
- this.arrayBuffer = function () {
1357
- if (this._bodyArrayBuffer) {
1358
- var isConsumed = consumed(this);
1359
-
1360
- if (isConsumed) {
1361
- return isConsumed;
1362
- }
1363
-
1364
- if (ArrayBuffer.isView(this._bodyArrayBuffer)) {
1365
- return Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset, this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength));
1366
- } else {
1367
- return Promise.resolve(this._bodyArrayBuffer);
1368
- }
1369
- } else {
1370
- return this.blob().then(readBlobAsArrayBuffer);
1371
- }
1372
- };
1373
- }
1374
-
1375
- this.text = function () {
1376
- var rejected = consumed(this);
1377
-
1378
- if (rejected) {
1379
- return rejected;
1380
- }
1381
-
1382
- if (this._bodyBlob) {
1383
- return readBlobAsText(this._bodyBlob);
1384
- } else if (this._bodyArrayBuffer) {
1385
- return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));
1386
- } else if (this._bodyFormData) {
1387
- throw new Error('could not read FormData body as text');
1388
- } else {
1389
- return Promise.resolve(this._bodyText);
1390
- }
1391
- };
1392
-
1393
- if (support.formData) {
1394
- this.formData = function () {
1395
- return this.text().then(decode);
1396
- };
1397
- }
1398
-
1399
- this.json = function () {
1400
- return this.text().then(JSON.parse);
1401
- };
1402
-
1403
- return this;
1404
- } // HTTP methods whose capitalization should be normalized
1405
-
1406
-
1407
- var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
1408
-
1409
- function normalizeMethod(method) {
1410
- var upcased = method.toUpperCase();
1411
- return methods.indexOf(upcased) > -1 ? upcased : method;
1412
- }
1413
-
1414
- function Request(input, options) {
1415
- if (!(this instanceof Request)) {
1416
- throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
1417
- }
1418
-
1419
- options = options || {};
1420
- var body = options.body;
1421
-
1422
- if (input instanceof Request) {
1423
- if (input.bodyUsed) {
1424
- throw new TypeError('Already read');
1425
- }
1426
-
1427
- this.url = input.url;
1428
- this.credentials = input.credentials;
1429
-
1430
- if (!options.headers) {
1431
- this.headers = new Headers(input.headers);
1432
- }
1433
-
1434
- this.method = input.method;
1435
- this.mode = input.mode;
1436
- this.signal = input.signal;
1437
-
1438
- if (!body && input._bodyInit != null) {
1439
- body = input._bodyInit;
1440
- input.bodyUsed = true;
1441
- }
1442
- } else {
1443
- this.url = String(input);
1444
- }
1445
-
1446
- this.credentials = options.credentials || this.credentials || 'same-origin';
1447
-
1448
- if (options.headers || !this.headers) {
1449
- this.headers = new Headers(options.headers);
1450
- }
1451
-
1452
- this.method = normalizeMethod(options.method || this.method || 'GET');
1453
- this.mode = options.mode || this.mode || null;
1454
- this.signal = options.signal || this.signal;
1455
- this.referrer = null;
1456
-
1457
- if ((this.method === 'GET' || this.method === 'HEAD') && body) {
1458
- throw new TypeError('Body not allowed for GET or HEAD requests');
1459
- }
1460
-
1461
- this._initBody(body);
1462
-
1463
- if (this.method === 'GET' || this.method === 'HEAD') {
1464
- if (options.cache === 'no-store' || options.cache === 'no-cache') {
1465
- // Search for a '_' parameter in the query string
1466
- var reParamSearch = /([?&])_=[^&]*/;
1467
-
1468
- if (reParamSearch.test(this.url)) {
1469
- // If it already exists then set the value with the current time
1470
- this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());
1471
- } else {
1472
- // Otherwise add a new '_' parameter to the end with the current time
1473
- var reQueryString = /\?/;
1474
- this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();
1475
- }
1476
- }
1477
- }
1478
- }
1479
-
1480
- Request.prototype.clone = function () {
1481
- return new Request(this, {
1482
- body: this._bodyInit
1483
- });
1484
- };
1485
-
1486
- function decode(body) {
1487
- var form = new FormData();
1488
- body.trim().split('&').forEach(function (bytes) {
1489
- if (bytes) {
1490
- var split = bytes.split('=');
1491
- var name = split.shift().replace(/\+/g, ' ');
1492
- var value = split.join('=').replace(/\+/g, ' ');
1493
- form.append(decodeURIComponent(name), decodeURIComponent(value));
1494
- }
1495
- });
1496
- return form;
1497
- }
1498
-
1499
- function parseHeaders(rawHeaders) {
1500
- var headers = new Headers(); // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
1501
- // https://tools.ietf.org/html/rfc7230#section-3.2
1502
-
1503
- var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' '); // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill
1504
- // https://github.com/github/fetch/issues/748
1505
- // https://github.com/zloirock/core-js/issues/751
1506
-
1507
- preProcessedHeaders.split('\r').map(function (header) {
1508
- return header.indexOf('\n') === 0 ? header.substr(1, header.length) : header;
1509
- }).forEach(function (line) {
1510
- var parts = line.split(':');
1511
- var key = parts.shift().trim();
1512
-
1513
- if (key) {
1514
- var value = parts.join(':').trim();
1515
- headers.append(key, value);
1516
- }
1517
- });
1518
- return headers;
1519
- }
1520
-
1521
- Body.call(Request.prototype);
1522
-
1523
- function Response(bodyInit, options) {
1524
- if (!(this instanceof Response)) {
1525
- throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
1526
- }
1527
-
1528
- if (!options) {
1529
- options = {};
1530
- }
1531
-
1532
- this.type = 'default';
1533
- this.status = options.status === undefined ? 200 : options.status;
1534
- this.ok = this.status >= 200 && this.status < 300;
1535
- this.statusText = options.statusText === undefined ? '' : '' + options.statusText;
1536
- this.headers = new Headers(options.headers);
1537
- this.url = options.url || '';
1538
-
1539
- this._initBody(bodyInit);
1540
- }
1541
-
1542
- Body.call(Response.prototype);
1543
-
1544
- Response.prototype.clone = function () {
1545
- return new Response(this._bodyInit, {
1546
- status: this.status,
1547
- statusText: this.statusText,
1548
- headers: new Headers(this.headers),
1549
- url: this.url
1550
- });
1551
- };
1552
-
1553
- Response.error = function () {
1554
- var response = new Response(null, {
1555
- status: 0,
1556
- statusText: ''
1557
- });
1558
- response.type = 'error';
1559
- return response;
1560
- };
1561
-
1562
- var redirectStatuses = [301, 302, 303, 307, 308];
1563
-
1564
- Response.redirect = function (url, status) {
1565
- if (redirectStatuses.indexOf(status) === -1) {
1566
- throw new RangeError('Invalid status code');
1567
- }
1568
-
1569
- return new Response(null, {
1570
- status: status,
1571
- headers: {
1572
- location: url
1573
- }
1574
- });
1575
- };
1576
-
1577
- var DOMException = global.DOMException;
1578
-
1579
- try {
1580
- new DOMException();
1581
- } catch (err) {
1582
- DOMException = function DOMException(message, name) {
1583
- this.message = message;
1584
- this.name = name;
1585
- var error = Error(message);
1586
- this.stack = error.stack;
1587
- };
1588
-
1589
- DOMException.prototype = Object.create(Error.prototype);
1590
- DOMException.prototype.constructor = DOMException;
1591
- }
1592
-
1593
- function fetch(input, init) {
1594
- return new Promise(function (resolve, reject) {
1595
- var request = new Request(input, init);
1596
-
1597
- if (request.signal && request.signal.aborted) {
1598
- return reject(new DOMException('Aborted', 'AbortError'));
1599
- }
1600
-
1601
- var xhr = new XMLHttpRequest();
1602
-
1603
- function abortXhr() {
1604
- xhr.abort();
1605
- }
1606
-
1607
- xhr.onload = function () {
1608
- var options = {
1609
- status: xhr.status,
1610
- statusText: xhr.statusText,
1611
- headers: parseHeaders(xhr.getAllResponseHeaders() || '')
1612
- };
1613
- options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');
1614
- var body = 'response' in xhr ? xhr.response : xhr.responseText;
1615
- setTimeout(function () {
1616
- resolve(new Response(body, options));
1617
- }, 0);
1618
- };
1619
-
1620
- xhr.onerror = function () {
1621
- setTimeout(function () {
1622
- reject(new TypeError('Network request failed'));
1623
- }, 0);
1624
- };
1625
-
1626
- xhr.ontimeout = function () {
1627
- setTimeout(function () {
1628
- reject(new TypeError('Network request failed'));
1629
- }, 0);
1630
- };
1631
-
1632
- xhr.onabort = function () {
1633
- setTimeout(function () {
1634
- reject(new DOMException('Aborted', 'AbortError'));
1635
- }, 0);
1636
- };
1637
-
1638
- function fixUrl(url) {
1639
- try {
1640
- return url === '' && global.location.href ? global.location.href : url;
1641
- } catch (e) {
1642
- return url;
1643
- }
1644
- }
1645
-
1646
- xhr.open(request.method, fixUrl(request.url), true);
1647
-
1648
- if (request.credentials === 'include') {
1649
- xhr.withCredentials = true;
1650
- } else if (request.credentials === 'omit') {
1651
- xhr.withCredentials = false;
1652
- }
1653
-
1654
- if ('responseType' in xhr) {
1655
- if (support.blob) {
1656
- xhr.responseType = 'blob';
1657
- } else if (support.arrayBuffer && request.headers.get('Content-Type') && request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1) {
1658
- xhr.responseType = 'arraybuffer';
1659
- }
1660
- }
1661
-
1662
- if (init && _typeof(init.headers) === 'object' && !(init.headers instanceof Headers)) {
1663
- Object.getOwnPropertyNames(init.headers).forEach(function (name) {
1664
- xhr.setRequestHeader(name, normalizeValue(init.headers[name]));
1665
- });
1666
- } else {
1667
- request.headers.forEach(function (value, name) {
1668
- xhr.setRequestHeader(name, value);
1669
- });
1670
- }
1671
-
1672
- if (request.signal) {
1673
- request.signal.addEventListener('abort', abortXhr);
1674
-
1675
- xhr.onreadystatechange = function () {
1676
- // DONE (success or failure)
1677
- if (xhr.readyState === 4) {
1678
- request.signal.removeEventListener('abort', abortXhr);
1679
- }
1680
- };
1681
- }
1682
-
1683
- xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
1684
- });
1685
- }
1686
-
1687
- fetch.polyfill = true;
1688
-
1689
- if (!global.fetch) {
1690
- global.fetch = fetch;
1691
- global.Headers = Headers;
1692
- global.Request = Request;
1693
- global.Response = Response;
1694
- }
1695
- /***/
1696
-
1697
- }
1698
- /******/
1699
-
1700
- };
1701
- /************************************************************************/
1702
-
1703
- /******/
1704
- // The module cache
1705
-
1706
- /******/
1707
-
1708
- var __webpack_module_cache__ = {};
1709
- /******/
1710
-
1711
- /******/
1712
- // The require function
1713
-
1714
- /******/
1715
-
1716
- function __webpack_require__(moduleId) {
1717
- /******/
1718
- // Check if module is in cache
1719
-
1720
- /******/
1721
- var cachedModule = __webpack_module_cache__[moduleId];
1722
- /******/
1723
-
1724
- if (cachedModule !== undefined) {
1725
- /******/
1726
- return cachedModule.exports;
1727
- /******/
1728
- }
1729
- /******/
1730
- // Create a new module (and put it into the cache)
1731
-
1732
- /******/
1733
-
1734
-
1735
- var module = __webpack_module_cache__[moduleId] = {
1736
- /******/
1737
- // no module.id needed
1738
-
1739
- /******/
1740
- // no module.loaded needed
1741
-
1742
- /******/
1743
- exports: {}
1744
- /******/
1745
-
1746
- };
1747
- /******/
1748
-
1749
- /******/
1750
- // Execute the module function
1751
-
1752
- /******/
1753
-
1754
- __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
1755
- /******/
1756
-
1757
- /******/
1758
- // Return the exports of the module
1759
-
1760
- /******/
1761
-
1762
-
1763
- return module.exports;
1764
- /******/
1765
- }
1766
- /******/
1767
-
1768
- /************************************************************************/
1769
-
1770
- /******/
1771
-
1772
- /* webpack/runtime/define property getters */
1773
-
1774
- /******/
1775
-
1776
-
1777
- !function () {
1778
- /******/
1779
- // define getter functions for harmony exports
1780
-
1781
- /******/
1782
- __webpack_require__.d = function (exports, definition) {
1783
- /******/
1784
- for (var key in definition) {
1785
- /******/
1786
- if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
1787
- /******/
1788
- Object.defineProperty(exports, key, {
1789
- enumerable: true,
1790
- get: definition[key]
1791
- });
1792
- /******/
1793
- }
1794
- /******/
1795
-
1796
- }
1797
- /******/
1798
-
1799
- };
1800
- /******/
1801
-
1802
- }();
1803
- /******/
1804
-
1805
- /******/
1806
-
1807
- /* webpack/runtime/global */
1808
-
1809
- /******/
1810
-
1811
- !function () {
1812
- /******/
1813
- __webpack_require__.g = function () {
1814
- /******/
1815
- if (typeof globalThis === 'object') return globalThis;
1816
- /******/
1817
-
1818
- try {
1819
- /******/
1820
- return this || new Function('return this')();
1821
- /******/
1822
- } catch (e) {
1823
- /******/
1824
- if (typeof window === 'object') return window;
1825
- /******/
1826
- }
1827
- /******/
1828
-
1829
- }();
1830
- /******/
1831
-
1832
- }();
1833
- /******/
1834
-
1835
- /******/
1836
-
1837
- /* webpack/runtime/hasOwnProperty shorthand */
1838
-
1839
- /******/
1840
-
1841
- !function () {
1842
- /******/
1843
- __webpack_require__.o = function (obj, prop) {
1844
- return Object.prototype.hasOwnProperty.call(obj, prop);
1845
- };
1846
- /******/
1847
-
1848
- }();
1849
- /******/
1850
-
1851
- /******/
1852
-
1853
- /* webpack/runtime/make namespace object */
1854
-
1855
- /******/
1856
-
1857
- !function () {
1858
- /******/
1859
- // define __esModule on exports
1860
-
1861
- /******/
1862
- __webpack_require__.r = function (exports) {
1863
- /******/
1864
- if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
1865
- /******/
1866
- Object.defineProperty(exports, Symbol.toStringTag, {
1867
- value: 'Module'
1868
- });
1869
- /******/
1870
- }
1871
- /******/
1872
-
1873
-
1874
- Object.defineProperty(exports, '__esModule', {
1875
- value: true
1876
- });
1877
- /******/
1878
- };
1879
- /******/
1880
-
1881
- }();
1882
- /******/
1883
-
1884
- /************************************************************************/
1885
-
1886
- var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
1887
-
1888
- !function () {
1889
- /*!*******************************************!*\
1890
- !*** ./Engine/src/Forms/Client/Client.ts ***!
1891
- \*******************************************/
1892
- __webpack_require__.r(__webpack_exports__);
1893
- /* harmony export */
1894
-
1895
-
1896
- __webpack_require__.d(__webpack_exports__, {
1897
- /* harmony export */
1898
- "isEngineVersionGreaterThanOrEqual": function () {
1899
- return (
1900
- /* binding */
1901
- isEngineVersionGreaterThanOrEqual
1902
- );
1903
- },
1904
-
1905
- /* harmony export */
1906
- "CandyClientExports": function () {
1907
- return (
1908
- /* binding */
1909
- CandyClientExports
1910
- );
1911
- }
1912
- /* harmony export */
1913
-
1914
- });
1915
- /* harmony import */
1916
-
1917
-
1918
- var whatwg_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
1919
- /*! whatwg-fetch */
1920
- "./node_modules/whatwg-fetch/fetch.js");
1921
- /* harmony import */
1922
-
1923
-
1924
- var _Common_TypingUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
1925
- /*! ../../../../Common/TypingUtils */
1926
- "./Common/TypingUtils.ts");
1927
- /* harmony import */
1928
-
1929
-
1930
- var _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(
1931
- /*! ../../Helpers/LoadIntoDocument */
1932
- "./Engine/src/Helpers/LoadIntoDocument.ts");
1933
- /* harmony import */
1934
-
1935
-
1936
- var _ClientSettings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
1937
- /*! ./ClientSettings */
1938
- "./Engine/src/Forms/Client/ClientSettings.ts");
1939
- /* harmony import */
1940
-
1941
-
1942
- var _LegacyPublicForm_CreateLegacyPublicForm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
1943
- /*! ./LegacyPublicForm/CreateLegacyPublicForm */
1944
- "./Engine/src/Forms/Client/LegacyPublicForm/CreateLegacyPublicForm.ts");
1945
-
1946
- function ownKeys(object, enumerableOnly) {
1947
- var keys = Object.keys(object);
1948
-
1949
- if (Object.getOwnPropertySymbols) {
1950
- var symbols = Object.getOwnPropertySymbols(object);
1951
- if (enumerableOnly) symbols = symbols.filter(function (sym) {
1952
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
1953
- });
1954
- keys.push.apply(keys, symbols);
1955
- }
1956
-
1957
- return keys;
1958
- }
1959
-
1960
- function _objectSpread(target) {
1961
- for (var i = 1; i < arguments.length; i++) {
1962
- var source = arguments[i] != null ? arguments[i] : {};
1963
-
1964
- if (i % 2) {
1965
- ownKeys(Object(source), true).forEach(function (key) {
1966
- _defineProperty(target, key, source[key]);
1967
- });
1968
- } else if (Object.getOwnPropertyDescriptors) {
1969
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
1970
- } else {
1971
- ownKeys(Object(source)).forEach(function (key) {
1972
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
1973
- });
1974
- }
1975
- }
1976
-
1977
- return target;
1978
- }
1979
-
1980
- function _defineProperty(obj, key, value) {
1981
- if (key in obj) {
1982
- Object.defineProperty(obj, key, {
1983
- value: value,
1984
- enumerable: true,
1985
- configurable: true,
1986
- writable: true
1987
- });
1988
- } else {
1989
- obj[key] = value;
1990
- }
1991
-
1992
- return obj;
1993
- }
1994
-
1995
- function _slicedToArray(arr, i) {
1996
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
1997
- }
1998
-
1999
- function _nonIterableRest() {
2000
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
2001
- }
2002
-
2003
- function _unsupportedIterableToArray(o, minLen) {
2004
- if (!o) return;
2005
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
2006
- var n = Object.prototype.toString.call(o).slice(8, -1);
2007
- if (n === "Object" && o.constructor) n = o.constructor.name;
2008
- if (n === "Map" || n === "Set") return Array.from(o);
2009
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
2010
- }
2011
-
2012
- function _arrayLikeToArray(arr, len) {
2013
- if (len == null || len > arr.length) len = arr.length;
2014
-
2015
- for (var i = 0, arr2 = new Array(len); i < len; i++) {
2016
- arr2[i] = arr[i];
2017
- }
2018
-
2019
- return arr2;
2020
- }
2021
-
2022
- function _iterableToArrayLimit(arr, i) {
2023
- if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
2024
- var _arr = [];
2025
- var _n = true;
2026
- var _d = false;
2027
- var _e = undefined;
2028
-
2029
- try {
2030
- for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
2031
- _arr.push(_s.value);
2032
-
2033
- if (i && _arr.length === i) break;
2034
- }
2035
- } catch (err) {
2036
- _d = true;
2037
- _e = err;
2038
- } finally {
2039
- try {
2040
- if (!_n && _i["return"] != null) _i["return"]();
2041
- } finally {
2042
- if (_d) throw _e;
2043
- }
2044
- }
2045
-
2046
- return _arr;
2047
- }
2048
-
2049
- function _arrayWithHoles(arr) {
2050
- if (Array.isArray(arr)) return arr;
2051
- }
2052
- /* tslint:disable:no-null-keyword no-any no-unsafe-any */
2053
-
2054
-
2055
- function defaultCallback() {
2056
- /* empty */
2057
- }
2058
-
2059
- function parseBool(value) {
2060
- if (typeof value === "string") {
2061
- if (value === "false") {
2062
- return false;
2063
- }
2064
-
2065
- if (value === "true") {
2066
- return true;
2067
- }
2068
-
2069
- return false;
2070
- }
2071
-
2072
- return Boolean(value);
2073
- }
2074
-
2075
- function url() {
2076
- var relativeUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
2077
- var baseUrl = __webpack_require__.g.CF.keformsUrl || "";
2078
- return "".concat(baseUrl, "/").concat(relativeUrl).replace(/([^:])\/{2,}/g, "$1/");
2079
- }
2080
-
2081
- function buildUrl(path, params) {
2082
- if (params === undefined) {
2083
- return path;
2084
- }
2085
-
2086
- var queryParts = [];
2087
-
2088
- for (var _i = 0, _Object$keys = Object.keys(params); _i < _Object$keys.length; _i++) {
2089
- var _paramName = _Object$keys[_i];
2090
- var paramValue = params[_paramName];
2091
-
2092
- if (paramValue != undefined) {
2093
- queryParts.push("".concat(_paramName, "=").concat(encodeURIComponent(paramValue)));
2094
- }
2095
- }
2096
-
2097
- if (queryParts.length === 0) {
2098
- return path;
2099
- }
2100
-
2101
- return path + "?" + queryParts.join("&");
2102
- }
2103
-
2104
- function isAllowed(domains) {
2105
- return new RegExp("^(?:".concat(domains.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(__webpack_require__.g.location.host);
2106
- }
2107
-
2108
- function getParameterByName(name) {
2109
- return (__webpack_require__.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (param) {
2110
- return param.replace(/\+/g, " ").split("=").map(decodeURIComponent);
2111
- }) // tslint:disable-next-line:triple-equals
2112
- .find(function (_ref) {
2113
- var _ref2 = _slicedToArray(_ref, 1),
2114
- key = _ref2[0];
2115
-
2116
- return key == name;
2117
- }) || [])[1];
2118
- }
2119
-
2120
- function runParallel(tasks, callback) {
2121
- var completed = 0;
2122
- tasks.forEach(function (task) {
2123
- task(function (error) {
2124
- if (completed === tasks.length) {
2125
- return;
2126
- }
2127
-
2128
- if (error) {
2129
- completed = tasks.length;
2130
- callback(error);
2131
- return;
2132
- }
2133
-
2134
- completed += 1;
2135
-
2136
- if (completed === tasks.length) {
2137
- callback();
2138
- }
2139
- });
2140
- });
2141
- }
2142
-
2143
- function isEngineVersionGreaterThanOrEqual(left, right) {
2144
- try {
2145
- var _leftNumbers$, _rightNumbers$, _leftNumbers$2, _rightNumbers$2, _leftNumbers$3, _rightNumbers$3, _leftNumbers$4, _rightNumbers$4, _leftNumbers$5, _rightNumbers$5;
2146
-
2147
- var leftNumbers = left.split(".").slice(0, 3).map(function (x) {
2148
- return parseInt(x, 10);
2149
- });
2150
- var rightNumbers = right.split(".").slice(0, 3).map(function (x) {
2151
- return parseInt(x, 10);
2152
- });
2153
- return ((_leftNumbers$ = leftNumbers[0]) !== null && _leftNumbers$ !== void 0 ? _leftNumbers$ : 0) > ((_rightNumbers$ = rightNumbers[0]) !== null && _rightNumbers$ !== void 0 ? _rightNumbers$ : 0) || ((_leftNumbers$2 = leftNumbers[0]) !== null && _leftNumbers$2 !== void 0 ? _leftNumbers$2 : 0) === ((_rightNumbers$2 = rightNumbers[0]) !== null && _rightNumbers$2 !== void 0 ? _rightNumbers$2 : 0) && (((_leftNumbers$3 = leftNumbers[1]) !== null && _leftNumbers$3 !== void 0 ? _leftNumbers$3 : 0) > ((_rightNumbers$3 = rightNumbers[1]) !== null && _rightNumbers$3 !== void 0 ? _rightNumbers$3 : 0) || ((_leftNumbers$4 = leftNumbers[1]) !== null && _leftNumbers$4 !== void 0 ? _leftNumbers$4 : 0) === ((_rightNumbers$4 = rightNumbers[1]) !== null && _rightNumbers$4 !== void 0 ? _rightNumbers$4 : 0) && ((_leftNumbers$5 = leftNumbers[2]) !== null && _leftNumbers$5 !== void 0 ? _leftNumbers$5 : 0) >= ((_rightNumbers$5 = rightNumbers[2]) !== null && _rightNumbers$5 !== void 0 ? _rightNumbers$5 : 0));
2154
- } catch (_unused) {
2155
- return false;
2156
- }
2157
- }
2158
-
2159
- function loadForm(settings, callback) {
2160
- var gfv = settings.gfv,
2161
- engineVersion = settings.engineVersion,
2162
- resourcesVersion = settings.resourcesVersion,
2163
- theme = settings.theme;
2164
-
2165
- if (__webpack_require__.g.CF.entryPoint[gfv]) {
2166
- callback();
2167
- return;
2168
- }
2169
-
2170
- var isNeedEngine = engineVersion && !__webpack_require__.g[engineVersion];
2171
- var useSameResourcesForTheme = engineVersion != undefined && (isEngineVersionGreaterThanOrEqual(engineVersion, "4.206.0") || engineVersion === "local");
2172
- var noStylesForGfv = false; // engineVersion != undefined && (isEngineVersionGreaterThanOrEqual(engineVersion, "4.214.0") || engineVersion === "local");
2173
-
2174
- var needLoadStylesForGfv = !noStylesForGfv;
2175
- var min = getParameterByName("debug") === "true" ? "" : ".min";
2176
- var themePostfix = !useSameResourcesForTheme && theme ? ".".concat(encodeURIComponent(theme)) : "";
2177
- var tasks = [];
2178
- var params = {
2179
- v: resourcesVersion,
2180
- resourceZone: settings.resourceZone
2181
- };
2182
-
2183
- if (needLoadStylesForGfv) {
2184
- tasks.push(function (cb) {
2185
- return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.styleSheet(url(buildUrl("static/public/styles/".concat(gfv).concat(themePostfix).concat(min, ".css"), params)), true, cb);
2186
- });
2187
- }
2188
-
2189
- tasks.push(function (cb) {
2190
- return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.script(url(buildUrl("static/public/scripts/".concat(gfv).concat(min, ".js"), params)), cb);
2191
- });
2192
-
2193
- if (isNeedEngine) {
2194
- tasks.push(function (cb) {
2195
- return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.styleSheet(url(buildUrl("static/public/styles/candy_".concat(engineVersion).concat(themePostfix).concat(min, ".css"), params)), false, cb);
2196
- }, function (cb) {
2197
- return _Helpers_LoadIntoDocument__WEBPACK_IMPORTED_MODULE_2__.LoadIntoDocument.script(url(buildUrl("static/public/scripts/candy_".concat(engineVersion).concat(min, ".js"), params)), cb);
2198
- });
2199
- }
2200
-
2201
- runParallel(tasks, callback);
2202
- }
2203
-
2204
- function renderForm(pageContent, extendedSettings, callback) {
2205
- var _global$CF$entryPoint;
2206
-
2207
- var formEntryPoint = (_global$CF$entryPoint = __webpack_require__.g.CF.entryPoint[extendedSettings.gfv]) !== null && _global$CF$entryPoint !== void 0 ? _global$CF$entryPoint : (0, _Common_TypingUtils__WEBPACK_IMPORTED_MODULE_1__.reject)("Form entry point ".concat(extendedSettings.gfv, " not found."));
2208
- formEntryPoint(pageContent, extendedSettings).then(function (form) {
2209
- var publicForm = form.publicForm || (0, _LegacyPublicForm_CreateLegacyPublicForm__WEBPACK_IMPORTED_MODULE_4__.createLegacyPublicForm)(form);
2210
- callback(null, publicForm);
2211
- })["catch"](callback);
2212
- }
2213
-
2214
- function getEngineEntryPoint(engineVersion) {
2215
- if (engineVersion == undefined) {
2216
- return undefined;
2217
- } // eslint-disable-next-line @typescript-eslint/no-unsafe-return
2218
-
2219
-
2220
- return __webpack_require__.g[engineVersion] && __webpack_require__.g[engineVersion]["default"];
2221
- }
2222
-
2223
- function start(pageContent, options) {
2224
- var _options$resourceZone, _options$fetch;
2225
-
2226
- var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultCallback;
2227
- var error = null;
2228
- var ns = options.ns,
2229
- draftId = options.draftId;
2230
- var settings = _ClientSettings__WEBPACK_IMPORTED_MODULE_3__.clientSettings;
2231
-
2232
- if (!isAllowed(settings.konturDomains)) {
2233
- error = new Error("domain.untrusted");
2234
- } else if (!settings.authorized) {
2235
- error = new Error("user.unauthenticated");
2236
- } else if (!draftId) {
2237
- error = new Error("options.draftId is required");
2238
- } else if (!ns) {
2239
- error = new Error("options.ns is required");
2240
- }
2241
-
2242
- if (error) {
2243
- callback(error);
2244
- return;
2245
- }
2246
-
2247
- var resourceZone = (_options$resourceZone = options.resourceZone) !== null && _options$resourceZone !== void 0 ? _options$resourceZone : getParameterByName("resourceZone");
2248
- var clientDraftUrl = buildUrl(url("v1/ns/".concat(ns, "/drafts/").concat(draftId, "/client-draft-info")), {
2249
- resourceZone: resourceZone
2250
- });
2251
- var requestOptions = {
2252
- method: "GET"
2253
- };
2254
-
2255
- if (options.authentication == undefined || options.authentication === "browser-credentials-include") {
2256
- requestOptions.credentials = "include";
2257
- } else if ("authSid" in options.authentication && options.authentication.authSid != undefined) {
2258
- var _requestOptions$heade;
2259
-
2260
- requestOptions.credentials = "omit";
2261
- requestOptions.headers = (_requestOptions$heade = requestOptions.headers) !== null && _requestOptions$heade !== void 0 ? _requestOptions$heade : {};
2262
- requestOptions.headers["Authorization"] = "AUTH.SID ".concat(options.authentication.authSid);
2263
- } else {
2264
- requestOptions.credentials = "omit";
2265
- }
2266
-
2267
- var fetchImpl = (_options$fetch = options.fetch) !== null && _options$fetch !== void 0 ? _options$fetch : whatwg_fetch__WEBPACK_IMPORTED_MODULE_0__.fetch;
2268
- fetchImpl(clientDraftUrl, requestOptions).then(function (x) {
2269
- return x.json();
2270
- }).then(function (clientDraftInfo) {
2271
- var _options$feedbackEnab, _options$isDisabledCl, _options$isDisabledCl2, _options$isDisabledCl3;
2272
-
2273
- var gfv = clientDraftInfo.gfv;
2274
- var engineVersionParam = getParameterByName("engineVersion");
2275
- var engineVersion = clientDraftInfo.engineVersion ? engineVersionParam || clientDraftInfo.engineVersion : null;
2276
-
2277
- var extendedSettings = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, settings), options), clientDraftInfo), {}, {
2278
- model: options.model,
2279
- feedbackEnabled: (_options$feedbackEnab = options.feedbackEnabled) !== null && _options$feedbackEnab !== void 0 ? _options$feedbackEnab : clientDraftInfo.feedbackEnabled,
2280
- isDisabledCleanForm: (_options$isDisabledCl = options.isDisabledCleanForm) !== null && _options$isDisabledCl !== void 0 ? _options$isDisabledCl : false,
2281
- isDisabledCloseButton: (_options$isDisabledCl2 = options.isDisabledCloseButton) !== null && _options$isDisabledCl2 !== void 0 ? _options$isDisabledCl2 : false,
2282
- isDisabledCloseAndSaveButton: (_options$isDisabledCl3 = options.isDisabledCloseAndSaveButton) !== null && _options$isDisabledCl3 !== void 0 ? _options$isDisabledCl3 : false,
2283
- resourceZone: resourceZone,
2284
- engineVersion: engineVersion,
2285
- authentication: options.authentication
2286
- });
2287
-
2288
- loadForm({
2289
- gfv: extendedSettings.gfv,
2290
- engineVersion: extendedSettings.engineVersion,
2291
- resourceZone: extendedSettings.resourceZone,
2292
- resourcesVersion: extendedSettings.resourcesVersion,
2293
- theme: extendedSettings.theme
2294
- }, function (loadError) {
2295
- if (loadError || !__webpack_require__.g.CF.entryPoint[gfv]) {
2296
- callback(new Error("dynamic loading is not supported for gfv ".concat(gfv)));
2297
- return;
2298
- }
2299
-
2300
- var render = getEngineEntryPoint(engineVersion);
2301
- renderForm(pageContent, _objectSpread(_objectSpread({}, extendedSettings), {}, {
2302
- templatesApi: options.templatesApi,
2303
- renderForm: render
2304
- }), callback);
2305
- });
2306
- })["catch"](callback);
2307
- }
2308
-
2309
- var CandyClientExports = {
2310
- start: start,
2311
- entryPoint: {},
2312
- partialRenderingForIE8: parseBool("{partialRenderingForIE8}"),
2313
- keformsUrl: "{keformsUrl}"
2314
- };
2315
- __webpack_require__.g.CF = CandyClientExports;
2316
- }();
2317
- /******/
1281
+ var __webpack_exports__ = __webpack_require__(133);
2318
1282
  })();
2319
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0NhbmR5RW5naW5lL0NvbW1vbi9UeXBpbmdVdGlscy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnRTZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6L0NhbmR5RW5naW5lL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovQ2FuZHlFbmdpbmUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6L0NhbmR5RW5naW5lL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIl0sIm5hbWVzIjpbIkFwcGxpY2F0aW9uRXJyb3IiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiTm90U3VwcG9ydGVkRXJyb3IiLCJtZXNzYWdlIiwiSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJUeXBpbmdFcnJvciIsImlucHV0IiwiaXRlbXMiLCJpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbCIsImFycmF5SXNOb3RFbXB0eSIsImFycmF5SGFzTGVuZ3RoIiwidmFsdWUiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwicGFyc2VCb29sIiwiY2F1bGRyb25BcGlVcmwiLCJhYm9uSWQiLCJvcmdJZCIsInVzZXJJZCIsImlzVGVzdFNlcnZlciIsInJlbmRlckNhY2hpbmdGb3JJRTgiLCJub3JtYWxpemF0aW9uT25TZXJ2ZXIiLCJub3JtYXRpdmVVcmwiLCJyZXNvdXJjZXNWZXJzaW9uIiwia29udHVyRG9tYWlucyIsImZpZWxkTmFtZSIsInBhdGgiLCJjaHVuayIsIk9iamVjdCIsInJlc3VsdCIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJmb3JtIiwiY29uc29sZSIsImtleXMiLCJlcnJvckNvdW50IiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJwYXRoT3JNb2RlbENodW5rIiwiQXJyYXkiLCJpbm5lckNodW5rIiwicmVkdWNlQ2h1bmtWYWx1ZXMiLCJtYXBDaHVua1ZhbHVlcyIsInBhdGhPckFycmF5IiwiTG9hZEludG9Eb2N1bWVudCIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsInNjcmlwdCIsImNhbGxiYWNrIiwicmVzb2x2ZSIsInJlamVjdCIsImxpbmsiLCJnbG9iYWwiLCJzdXBwb3J0Iiwic2VhcmNoUGFyYW1zIiwiaXRlcmFibGUiLCJibG9iIiwiZm9ybURhdGEiLCJhcnJheUJ1ZmZlciIsIm9iaiIsIkRhdGFWaWV3Iiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwibmFtZSIsIlN0cmluZyIsIml0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJTeW1ib2wiLCJoZWFkZXJzIiwiaGVhZGVyIiwiSGVhZGVycyIsIm5vcm1hbGl6ZU5hbWUiLCJub3JtYWxpemVWYWx1ZSIsIm9sZFZhbHVlIiwiaXRlcmF0b3JGb3IiLCJib2R5IiwiUHJvbWlzZSIsInJlYWRlciIsInByb21pc2UiLCJmaWxlUmVhZGVyUmVhZHkiLCJ2aWV3IiwiY2hhcnMiLCJpIiwiYnVmIiwiQmxvYiIsIkZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNEYXRhVmlldyIsImJ1ZmZlckNsb25lIiwicmVqZWN0ZWQiLCJjb25zdW1lZCIsImlzQ29uc3VtZWQiLCJyZWFkQmxvYkFzVGV4dCIsInJlYWRBcnJheUJ1ZmZlckFzVGV4dCIsIkpTT04iLCJtZXRob2RzIiwidXBjYXNlZCIsIm1ldGhvZCIsIm9wdGlvbnMiLCJub3JtYWxpemVNZXRob2QiLCJyZVBhcmFtU2VhcmNoIiwicmVRdWVyeVN0cmluZyIsIlJlcXVlc3QiLCJfYm9keUluaXQiLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicHJlUHJvY2Vzc2VkSGVhZGVycyIsInJhd0hlYWRlcnMiLCJwYXJ0cyIsImxpbmUiLCJrZXkiLCJCb2R5IiwiUmVzcG9uc2UiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwidXJsIiwicmVzcG9uc2UiLCJyZWRpcmVjdFN0YXR1c2VzIiwibG9jYXRpb24iLCJET01FeGNlcHRpb24iLCJlcnJvciIsIkVycm9yIiwicmVxdWVzdCIsInhociIsInBhcnNlSGVhZGVycyIsInNldFRpbWVvdXQiLCJmaXhVcmwiLCJpbml0IiwiZmV0Y2giLCJyZWxhdGl2ZVVybCIsImJhc2VVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImRvbWFpbnMiLCJwYXJhbSIsImNvbXBsZXRlZCIsInRhc2tzIiwidGFzayIsImxlZnROdW1iZXJzIiwicGFyc2VJbnQiLCJyaWdodE51bWJlcnMiLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwidGhlbWUiLCJzZXR0aW5ncyIsImlzTmVlZEVuZ2luZSIsInVzZVNhbWVSZXNvdXJjZXNGb3JUaGVtZSIsImlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbCIsIm5vU3R5bGVzRm9yR2Z2IiwibmVlZExvYWRTdHlsZXNGb3JHZnYiLCJtaW4iLCJnZXRQYXJhbWV0ZXJCeU5hbWUiLCJ0aGVtZVBvc3RmaXgiLCJ2IiwicmVzb3VyY2Vab25lIiwiYnVpbGRVcmwiLCJydW5QYXJhbGxlbCIsImZvcm1FbnRyeVBvaW50IiwiZXh0ZW5kZWRTZXR0aW5ncyIsInB1YmxpY0Zvcm0iLCJjcmVhdGVMZWdhY3lQdWJsaWNGb3JtIiwiZGVmYXVsdENhbGxiYWNrIiwibnMiLCJkcmFmdElkIiwiaXNBbGxvd2VkIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImZldGNoSW1wbCIsIngiLCJjbGllbnREcmFmdEluZm8iLCJlbmdpbmVWZXJzaW9uUGFyYW0iLCJtb2RlbCIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwiYXV0aGVudGljYXRpb24iLCJsb2FkRm9ybSIsImxvYWRFcnJvciIsInJlbmRlciIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJyZW5kZXJGb3JtIiwidGVtcGxhdGVzQXBpIiwiQ2FuZHlDbGllbnRFeHBvcnRzIiwic3RhcnQiLCJlbnRyeVBvaW50IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsImtlZm9ybXNVcmwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTyxVQUFNQSxnQkFBYixHQUFBLGFBQUEsVUFBQSxNQUFBLEVBQUE7QUFBQSxRQUFBLFNBQUEsQ0FBQSxnQkFBQSxF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QSxHQUFBLHdCQUFBLENBQUEsUUFBQSxDQUFBO0FBQ0E7O0FBQUEsUUFBQSxZQUFBLEtBQUEsU0FBQSxFQUFBO0FBQ0E7QUFBQSxhQUFBLFlBQUEsQ0FBQSxPQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7O0FBQ0E7OztBQUFBLFFBQUEsTUFBQSxHQUFBLHdCQUFBLENBQUEsUUFBQSxDQUFBLEdBQUE7QUFDQTtBQUFBOztBQUNBO0FBQUE7O0FBQ0E7QUFBQSxNQUFBLE9BQUEsRUFBQTtBQUNBOztBQUpBLEtBQUE7OztBQU1BO0FBQUE7O0FBQ0E7O0FBQUEsSUFBQSxtQkFBQSxDQUFBLFFBQUEsQ0FBQSxDQUFBLE1BQUEsRUFBQSxNQUFBLENBQUEsT0FBQSxFQUFBLG1CQUFBOzs7QUFFQTtBQUFBOztBQUNBOzs7QUFBQSxXQUFBLE1BQUEsQ0FBQSxPQUFBO0FBQ0E7QUFBQTs7Ozs7Ozs7Ozs7Ozs7QUN0QkE7OztBQUNBLElBQUEsbUJBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBQSxPQUFBLEVBQUEsVUFBQSxFQUFBO0FBQ0E7QUFBQSxXQUFBLElBQUEsR0FBQSxJQUFBLFVBQUEsRUFBQTtBQUNBO0FBQUEsWUFBQSxtQkFBQSxDQUFBLENBQUEsQ0FBQSxVQUFBLEVBQUEsR0FBQSxLQUFBLENBQUEsbUJBQUEsQ0FBQSxDQUFBLENBQUEsT0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBO0FBQ0E7QUFBQSxVQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQTtBQUF3QyxZQUFBLFVBQUEsRUFBQSxJQUF4QztBQUF3QyxZQUFBLEdBQUEsRUFBQSxVQUFBLENBQUEsR0FBQTtBQUF4QyxXQUFBO0FBQ0E7QUFBQTtBQUNBOztBQUFBO0FBQ0E7O0FBQUEsS0FOQTs7Ozs7Ozs7Ozs7Ozs7QUNEQSxJQUFBLG1CQUFBLENBQUEsQ0FBQSxHQUFBLFlBQUE7QUFDQTtBQUFBLFVBQUEsT0FBQSxVQUFBLEtBQUEsUUFBQSxFQUFBLE9BQUEsVUFBQTtBQUNBOztBQUFBLFVBQUE7QUFDQTtBQUFBLGVBQUEsUUFBQSxJQUFBLFFBQUEsQ0FBQSxhQUFBLEdBQUE7QUFDQTtBQUFFLE9BRkYsQ0FFRSxPQUFBLENBQUEsRUFBQTtBQUNGO0FBQUEsWUFBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLEVBQUEsT0FBQSxNQUFBO0FBQ0E7QUFBQTtBQUNBOztBQUFDLEtBUEQsRUFBQTs7Ozs7Ozs7Ozs7Ozs7QUNBQSxJQUFBLG1CQUFBLENBQUEsQ0FBQSxHQUFBLFVBQUEsR0FBQSxFQUFBLElBQUEsRUFBQTtBQUE2QyxhQUFBLE1BQUEsQ0FBQSxTQUFBLENBQUEsY0FBQSxDQUFBLElBQUEsQ0FBQSxHQUFBLEVBQUEsSUFBQSxDQUFBO0tBQTdDOzs7Ozs7Ozs7Ozs7OztBQ0FBOzs7QUFDQSxJQUFBLG1CQUFBLENBQUEsQ0FBQSxHQUFBLFVBQUEsT0FBQSxFQUFBO0FBQ0E7QUFBQSxVQUFBLE9BQUEsTUFBQSxLQUFBLFdBQUEsSUFBQSxNQUFBLENBQUEsV0FBQSxFQUFBO0FBQ0E7QUFBQSxRQUFBLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLE1BQUEsQ0FBQSxXQUFBLEVBQUE7QUFBc0QsVUFBQSxLQUFBLEVBQUE7QUFBdEQsU0FBQTtBQUNBO0FBQUE7QUFDQTs7O0FBQUEsTUFBQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxZQUFBLEVBQUE7QUFBK0MsUUFBQSxLQUFBLEVBQUE7QUFBL0MsT0FBQTtBQUNBO0FBQUEsS0FMQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDREE7OztBQW1EQSxhQUFBLGVBQUEsR0FBaUM7QUFDN0I7QUFDSDs7QUFFRCxhQUFBLFNBQUEsQ0FBQSxLQUFBLEVBQTRDO0FBQ3hDLFVBQUksT0FBQSxLQUFBLEtBQUosUUFBQSxFQUErQjtBQUMzQixZQUFJekMsS0FBSyxLQUFULE9BQUEsRUFBdUI7QUFDbkIsaUJBQUEsS0FBQTtBQUNIOztBQUNELFlBQUlBLEtBQUssS0FBVCxNQUFBLEVBQXNCO0FBQ2xCLGlCQUFBLElBQUE7QUFDSDs7QUFDRCxlQUFBLEtBQUE7QUFDSDs7QUFDRCxhQUFPQyxPQUFPLENBQWQsS0FBYyxDQUFkO0FBQ0g7O0FBRUQsYUFBQSxHQUFBLEdBQStDO0FBQUEsVUFBbEN3SCxXQUFrQyxHQUFBLFNBQUEsQ0FBQSxNQUFBLEdBQUEsQ0FBQSxJQUFBLFNBQUEsQ0FBQSxDQUFBLENBQUEsS0FBQSxTQUFBLEdBQUEsU0FBQSxDQUFBLENBQUEsQ0FBQSxHQUFaLEVBQVk7QUFDM0MsVUFBTUMsT0FBTyxHQUFHakYsbUJBQUFBLENBQUFBLENBQUFBLENBQUFBLEVBQUFBLENBQUFBLFVBQUFBLElBQWhCLEVBQUE7QUFFQSxhQUFPLEdBQUEsTUFBQSxDQUFBLE9BQUEsRUFBQSxHQUFBLEVBQUEsTUFBQSxDQUFBLFdBQUEsRUFBQSxPQUFBLENBQUEsZUFBQSxFQUFQLEtBQU8sQ0FBUDtBQUNIOztBQUVELGFBQUEsUUFBQSxDQUFBLElBQUEsRUFBQSxNQUFBLEVBQTZGO0FBQ3pGLFVBQUlrRixNQUFNLEtBQVYsU0FBQSxFQUEwQjtBQUN0QixlQUFBLElBQUE7QUFDSDs7QUFDRCxVQUFNQyxVQUFvQixHQUExQixFQUFBOztBQUNBLFdBQUEsSUFBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLFlBQUEsR0FBd0IxRyxNQUFNLENBQU5BLElBQUFBLENBQXhCLE1BQXdCQSxDQUF4QixFQUFBLEVBQUEsR0FBQSxZQUFBLENBQUEsTUFBQSxFQUFBLEVBQUEsRUFBQSxFQUE2QztBQUF4QyxZQUFNMkcsVUFBUyxHQUFBLFlBQUEsQ0FBZixFQUFlLENBQWY7QUFDRCxZQUFNQyxVQUFVLEdBQUdILE1BQU0sQ0FBekIsVUFBeUIsQ0FBekI7O0FBQ0EsWUFBSUcsVUFBVSxJQUFkLFNBQUEsRUFBNkI7QUFDekJGLFVBQUFBLFVBQVUsQ0FBVkEsSUFBQUEsQ0FBQUEsR0FBQUEsTUFBQUEsQ0FBQUEsVUFBQUEsRUFBQUEsR0FBQUEsRUFBQUEsTUFBQUEsQ0FBZ0NHLGtCQUFrQixDQUFsREgsVUFBa0QsQ0FBbERBLENBQUFBO0FBQ0g7QUFDSjs7QUFDRCxVQUFJQSxVQUFVLENBQVZBLE1BQUFBLEtBQUosQ0FBQSxFQUE2QjtBQUN6QixlQUFBLElBQUE7QUFDSDs7QUFDRCxhQUFPNUcsSUFBSSxHQUFKQSxHQUFBQSxHQUFhNEcsVUFBVSxDQUFWQSxJQUFBQSxDQUFwQixHQUFvQkEsQ0FBcEI7QUFDSDs7QUFFRCxhQUFBLFNBQUEsQ0FBQSxPQUFBLEVBQTZDO0FBQ3pDLGFBQU8sSUFBQSxNQUFBLENBQUEsT0FBQSxNQUFBLENBQWtCSSxPQUFPLENBQVBBLE9BQUFBLENBQUFBLEtBQUFBLEVBQUFBLEtBQUFBLEVBQUFBLE9BQUFBLENBQUFBLEtBQUFBLEVBQWxCLGFBQWtCQSxDQUFsQixFQUFBLElBQUEsQ0FBQSxFQUFBLElBQUEsQ0FDSHZGLG1CQUFBQSxDQUFBQSxDQUFBQSxDQUFBQSxRQUFBQSxDQURKLElBQU8sQ0FBUDtBQUdIOztBQUVELGFBQUEsa0JBQUEsQ0FBQSxJQUFBLEVBQThEO0FBQzFELGFBQ0ksQ0FBQyxtQkFBQSxDQUFBLENBQUEsQ0FBQSxRQUFBLENBQUEsTUFBQSxDQUFBLElBQUEsR0FBQSxPQUFBLENBQUEsV0FBQSxFQUFBLEVBQUEsRUFBQSxLQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsQ0FJUSxVQUFBLEtBQUEsRUFBSztBQUFBLGVBQUl3RixLQUFLLENBQUxBLE9BQUFBLENBQUFBLEtBQUFBLEVBQUFBLEdBQUFBLEVBQUFBLEtBQUFBLENBQUFBLEdBQUFBLEVBQUFBLEdBQUFBLENBQUosa0JBQUlBLENBQUo7QUFKYixPQUFBLEVBS0c7QUFMSCxPQUFBLElBQUEsQ0FNUyxVQUFBLElBQUEsRUFBQTtBQUFBLFlBQUEsS0FBQSxHQUFBLGNBQUEsQ0FBQSxJQUFBLEVBQUEsQ0FBQSxDQUFBO0FBQUEsWUFBRTNCLEdBQUYsR0FBQSxLQUFBLENBQUEsQ0FBQSxDQUFBOztBQUFBLGVBQVdBLEdBQUcsSUFBZCxJQUFBO0FBTlQsT0FBQSxLQUFELEVBQUEsRUFESixDQUNJLENBREo7QUFTSDs7QUFJRCxhQUFBLFdBQUEsQ0FBQSxLQUFBLEVBQUEsUUFBQSxFQUE2RTtBQUN6RSxVQUFJNEIsU0FBUyxHQUFiLENBQUE7QUFFQUMsTUFBQUEsS0FBSyxDQUFMQSxPQUFBQSxDQUFjLFVBQUEsSUFBQSxFQUFRO0FBQ2xCQyxRQUFBQSxJQUFJLENBQUMsVUFBQSxLQUFBLEVBQVM7QUFDVixjQUFJRixTQUFTLEtBQUtDLEtBQUssQ0FBdkIsTUFBQSxFQUFnQztBQUM1QjtBQUNIOztBQUNELGNBQUEsS0FBQSxFQUFXO0FBQ1BELFlBQUFBLFNBQVMsR0FBR0MsS0FBSyxDQUFqQkQsTUFBQUE7QUFDQTdGLFlBQUFBLFFBQVEsQ0FBUkEsS0FBUSxDQUFSQTtBQUVBO0FBQ0g7O0FBQ0Q2RixVQUFBQSxTQUFTLElBQVRBLENBQUFBOztBQUNBLGNBQUlBLFNBQVMsS0FBS0MsS0FBSyxDQUF2QixNQUFBLEVBQWdDO0FBQzVCOUYsWUFBQUEsUUFBUTtBQUNYO0FBYkwrRixTQUFJLENBQUpBO0FBREpELE9BQUFBO0FBaUJIOztBQVVNLGFBQUEsaUNBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxFQUFpRjtBQUNwRixVQUFJO0FBQUEsWUFBQSxhQUFBLEVBQUEsY0FBQSxFQUFBLGNBQUEsRUFBQSxlQUFBLEVBQUEsY0FBQSxFQUFBLGVBQUEsRUFBQSxjQUFBLEVBQUEsZUFBQSxFQUFBLGNBQUEsRUFBQSxlQUFBOztBQUNBLFlBQU1FLFdBQVcsR0FBRyxJQUFJLENBQUosS0FBQSxDQUFBLEdBQUEsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsRUFBQSxHQUFBLENBR1gsVUFBQSxDQUFBLEVBQUM7QUFBQSxpQkFBSUMsUUFBUSxDQUFBLENBQUEsRUFBWixFQUFZLENBQVo7QUFIVixTQUFvQixDQUFwQjtBQUlBLFlBQU1DLFlBQVksR0FBRyxLQUFLLENBQUwsS0FBQSxDQUFBLEdBQUEsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsRUFBQSxHQUFBLENBR1osVUFBQSxDQUFBLEVBQUM7QUFBQSxpQkFBSUQsUUFBUSxDQUFBLENBQUEsRUFBWixFQUFZLENBQVo7QUFIVixTQUFxQixDQUFyQjtBQUlBLGVBQ0ksQ0FBQSxDQUFBLGFBQUEsR0FBQ0QsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxhQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsYUFBQSxHQUFBLENBQUEsS0FBQSxDQUFBLGNBQUEsR0FBeUJFLFlBQVksQ0FBckMsQ0FBcUMsQ0FBckMsTUFBQSxJQUFBLElBQUEsY0FBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGNBQUEsR0FBQSxDQUFBLEtBQ0MsQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLGVBQUEsR0FBMkJFLFlBQVksQ0FBdkMsQ0FBdUMsQ0FBdkMsTUFBQSxJQUFBLElBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGVBQUEsR0FBQSxDQUFBLE1BQ0ksQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsS0FBQSxDQUFBLGVBQUEsR0FBeUJFLFlBQVksQ0FBckMsQ0FBcUMsQ0FBckMsTUFBQSxJQUFBLElBQUEsZUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLGVBQUEsR0FBQSxDQUFBLEtBQ0ksQ0FBQSxDQUFBLGNBQUEsR0FBQ0YsV0FBVyxDQUFaLENBQVksQ0FBWixNQUFBLElBQUEsSUFBQSxjQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsY0FBQSxHQUFBLENBQUEsT0FBQSxDQUFBLGVBQUEsR0FBMkJFLFlBQVksQ0FBdkMsQ0FBdUMsQ0FBdkMsTUFBQSxJQUFBLElB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QUtJZixVQUFBQSxLQUFLLEVBQUVlLGdCQUFnQixDQUFDZjtBQUw1QixTQURJLEVBUUosVUFBQSxTQUFBLEVBQWE7QUFDVCxjQUFJbUMsU0FBUyxJQUFJLENBQUNwSSxtQkFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsRUFBQUEsQ0FBQUEsVUFBQUEsQ0FBbEIsR0FBa0JBLENBQWxCLEVBQTZDO0FBQ3pDSixZQUFBQSxRQUFRLENBQUMsSUFBQSxLQUFBLENBQUEsNENBQUEsTUFBQSxDQUFUQSxHQUFTLENBQUEsQ0FBRCxDQUFSQTtBQUNBO0FBQ0g7O0FBQ0QsY0FBTXlJLE1BQU0sR0FBR0MsbUJBQW1CLENBQWxDLGFBQWtDLENBQWxDO0FBRUFDLFVBQUFBLFVBQVUsQ0FBQSxXQUFBLEVBQUEsYUFBQSxDQUFBLGFBQUEsQ0FBQSxFQUFBLEVBQUEsZ0JBQUEsQ0FBQSxFQUFBLEVBQUEsRUFBQTtBQUlGQyxZQUFBQSxZQUFZLEVBQUV4RixPQUFPLENBSm5CLFlBQUE7QUFLRnVGLFlBQUFBLFVBQVUsRUFBRUY7QUFMVixXQUFBLENBQUEsRUFBVkUsUUFBVSxDQUFWQTtBQWZSSixTQUFRLENBQVJBO0FBdEJSVixPQUFBQSxFQUFBQSxPQUFBQSxFQUFBQSxRQUFBQTtBQWtESDs7QUFFRCxRQUFNZ0Isa0JBQTBDLEdBQUc7QUFDL0NDLE1BQUFBLEtBQUssRUFEMEMsS0FBQTtBQUUvQ0MsTUFBQUEsVUFBVSxFQUZxQyxFQUFBO0FBRy9DQyxNQUFBQSxzQkFBc0IsRUFBRWpMLFNBQVMsQ0FIYywwQkFHZCxDQUhjO0FBSS9Da0wsTUFBQUEsVUFBVSxFQUFFO0FBSm1DLEtBQW5EO0FBT0E3SSxJQUFBQSxtQkFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsRUFBQUEsR0FBQUEsa0JBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCBwcm9ncmFtIHN0YXRlXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGFyZ3VtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgbWVzc2FnZSAhPSB1bmRlZmluZWQgPyBgJHttZXNzYWdlfSAoYXJndW1lbnQ6ICR7YXJndW1lbnROYW1lfSlgIDogYEludmFsaWQgYXJndW1lbnQgdmFsdWU6ICR7YXJndW1lbnROYW1lfWBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBpbmdFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHR5cGluZ1wiKTtcbiAgICB9XG59XG4iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogdW5kZWZpbmVkIHwgbnVsbCB8IFQpOiBpbnB1dCBpcyBUIHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOZXZlcihuZXZlckFyZ3VtZW50OiBuZXZlcik6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFuZEdldFN0cmluZyhuZXZlckFyZ3VtZW50OiBuZXZlcik6IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGFib25JZDogXCJ7YWJvbklkfVwiLFxuICAgIG9yZ0lkOiBcIntvcmdJZH1cIixcbiAgICB1c2VySWQ6IFwie3VzZXJJZH1cIixcbiAgICBpc1Rlc3RTZXJ2ZXI6IHBhcnNlQm9vbChcIntpc1Rlc3RTZXJ2ZXJ9XCIpLFxuICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntyZW5kZXJDYWNoaW5nRm9ySUU4fVwiKSxcbiAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IHBhcnNlQm9vbChcIntub3JtYWxpemF0aW9uT25TZXJ2ZXJ9XCIpLFxuICAgIG5vcm1hdGl2ZVVybDogXCJ7bm9ybWF0aXZlVXJsfVwiLFxuICAgIHJlc291cmNlc1ZlcnNpb246IFwie3Jlc291cmNlc1ZlcnNpb259XCIsXG4gICAga29udHVyRG9tYWluczogXCJ7a29udHVyRG9tYWluc31cIixcbn07XG4iLCJpbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9FcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9Gb3JtUGFydHMvVG91ci9Ub3VyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0FwaS9DYW5keUFwaUNsaWVudC9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbFZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbEhvb2tGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvRXh0ZXJuYWxFdmVudHMvRXh0ZXJuYWxIb29rRnVuY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlNb2RlbENodW5rIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGVsU3RvcmluZy9Nb2RlbENodW5rXCI7XG5pbXBvcnQgdHlwZSB7IFBpY2tsaXN0UXVlcnlGaWx0ZXIsIFBpY2tsaXN0UXVlcnlSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9QaWNrbGlzdHMvUGlja2xpc3RUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgeyBNb2RlbEV2ZW50c0xpc3RlbmVyIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9Nb2RlbEV2ZW50cy9Nb2RlbEV2ZW50XCI7XG5cbmltcG9ydCB7IElMZWdhY3lGb3JtIH0gZnJvbSBcIi4vSUxlZ2FjeUZvcm1cIjtcblxuZXhwb3J0IHR5cGUgTW9kZWxFdmVudFBhdGggPVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHBhdGg/OiBzdHJpbmcsIGZpZWxkTmFtZT86IHN0cmluZyk6IE1vZGVsRXZlbnRQYXRoIHtcbiAgICBpZiAoZmllbGROYW1lICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGF0aCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBiZSBkZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoLCBmaWVsZE5hbWVdO1xuICAgIH1cbiAgICBpZiAocGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGhdO1xuICAgIH1cbiAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl07XG59XG5cbmZ1bmN0aW9uIG1hcENodW5rVmFsdWVzKGNodW5rOiBSZWFkb25seU1vZGVsQ2h1bmspOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2h1bmspXG4gICAgICAgIC5maWx0ZXIocGF0aCA9PiBjaHVua1twYXRoXSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2h1bmtbcGF0aF0sIFwidmFsdWVcIikpXG4gICAgICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaHVua1twYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgW3BhdGhdOiByZXN1bHQudmFsdWUgfTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZUNodW5rVmFsdWVzKGNodW5rczogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pik6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGNodW5rKSA9PiAoe1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgLi4uY2h1bmssXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICk7XG59XG5cbmNsYXNzIExlZ2FjeVB1YmxpY0Zvcm0gaW1wbGVtZW50cyBJUHVibGljRm9ybSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtOiBJTGVnYWN5Rm9ybTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihmb3JtOiBJTGVnYWN5Rm9ybSkge1xuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBTZXJ2ZXJFcnJvckxvZyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IFBpY2tsaXN0UXVlcnlGaWx0ZXIpOiBQcm9taXNlPFBpY2tsaXN0UXVlcnlSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnBpY2tsaXN0c1Byb3ZpZGVyLmdldEJ5R0lkKGdJZCwgZmlsdGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmYoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub25Nb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZNb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub2ZmTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENhY2hlZENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCJ2YXIgZ2xvYmFsID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgaXRlcmFibGU6ICdTeW1ib2wnIGluIGdsb2JhbCAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnbG9iYWxcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICB9XG4gIH1cblxuICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG52YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbFxuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGdsb2JhbC5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbml0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnbG9iYWwuZmV0Y2gpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGdsb2JhbC5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlZmluaXRpb24pIHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9IiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuXG5pbXBvcnQgdHlwZSB7IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlIH0gZnJvbSBcIi4vQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2VcIjtcbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZW5kZXJGb3JtU2V0dGluZ3Mge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gICAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgICAgIGludGVyZmFjZSBHbG9iYWwge1xuICAgICAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRlY2xhcmUgY29uc3QgZ2xvYmFsOiBXaW5kb3c7XG5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvKiBlbXB0eSAqL1xufVxuXG5mdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVybChyZWxhdGl2ZVVybDogc3RyaW5nID0gXCJcIik6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IGdsb2JhbC5DRi5rZWZvcm1zVXJsIHx8IFwiXCI7XG5cbiAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtyZWxhdGl2ZVVybH1gLnJlcGxhY2UoLyhbXjpdKVxcL3syLH0vZywgXCIkMS9cIik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHVuZGVmaW5lZCB8IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBwYXJhbU5hbWUgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gcGFyYW1zW3BhcmFtTmFtZV07XG4gICAgICAgIGlmIChwYXJhbVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnlQYXJ0cy5wdXNoKGAke3BhcmFtTmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHF1ZXJ5UGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aCArIFwiP1wiICsgcXVlcnlQYXJ0cy5qb2luKFwiJlwiKTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkKGRvbWFpbnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86JHtkb21haW5zLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuXCIpLnJlcGxhY2UoL1xcKi9nLCBcIlthLXowLTktLl0rXCIpfSkkYCkudGVzdChcbiAgICAgICAgZ2xvYmFsLmxvY2F0aW9uLmhvc3RcbiAgICApO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoZ2xvYmFsLmxvY2F0aW9uLnNlYXJjaFxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnJlcGxhY2UoL14oXFw/fCN8JikvLCBcIlwiKVxuICAgICAgICAgICAgLnNwbGl0KFwiJlwiKVxuICAgICAgICAgICAgLm1hcChwYXJhbSA9PiBwYXJhbS5yZXBsYWNlKC9cXCsvZywgXCIgXCIpLnNwbGl0KFwiPVwiKS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KSlcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAuZmluZCgoW2tleV0pID0+IGtleSA9PSBuYW1lKSB8fCBbXSlbMV1cbiAgICApO1xufVxuXG50eXBlIFRhc2sgPSAoY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG5mdW5jdGlvbiBydW5QYXJhbGxlbCh0YXNrczogVGFza1tdLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBsZXQgY29tcGxldGVkID0gMDtcblxuICAgIHRhc2tzLmZvckVhY2godGFzayA9PiB7XG4gICAgICAgIHRhc2soZXJyb3IgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdGFza3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gdGFza3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmludGVyZmFjZSBTdGFydEZvcm1TZXR0aW5nIHtcbiAgICBnZnY6IHN0cmluZztcbiAgICBlbmdpbmVWZXJzaW9uPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBsZWZ0TnVtYmVycyA9IGxlZnRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0TnVtYmVycyA9IHJpZ2h0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGxlZnROdW1iZXJzWzBdID8/IDApID4gKHJpZ2h0TnVtYmVyc1swXSA/PyAwKSB8fFxuICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1swXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1swXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICgobGVmdE51bWJlcnNbMV0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzFdID8/IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICgobGVmdE51bWJlcnNbMV0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMV0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChsZWZ0TnVtYmVyc1syXSA/PyAwKSA+PSAocmlnaHROdW1iZXJzWzJdID8/IDApKSkpXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRGb3JtKHNldHRpbmdzOiBTdGFydEZvcm1TZXR0aW5nLCBjYWxsYmFjazogKGVycm9yPzogbnVsbCB8IHVuZGVmaW5lZCB8IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgeyBnZnYsIGVuZ2luZVZlcnNpb24sIHJlc291cmNlc1ZlcnNpb24sIHRoZW1lIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IHVzZVNhbWVSZXNvdXJjZXNGb3JUaGVtZSA9XG4gICAgICAgIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmXG4gICAgICAgIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIwNi4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3Qgbm9TdHlsZXNGb3JHZnYgPSBmYWxzZTsgLy8gZW5naW5lVmVyc2lvbiAhPSB1bmRlZmluZWQgJiYgKGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChlbmdpbmVWZXJzaW9uLCBcIjQuMjE0LjBcIikgfHwgZW5naW5lVmVyc2lvbiA9PT0gXCJsb2NhbFwiKTtcbiAgICBjb25zdCBuZWVkTG9hZFN0eWxlc0ZvckdmdiA9ICFub1N0eWxlc0ZvckdmdjtcbiAgICBjb25zdCBtaW4gPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJkZWJ1Z1wiKSA9PT0gXCJ0cnVlXCIgPyBcIlwiIDogXCIubWluXCI7XG4gICAgY29uc3QgdGhlbWVQb3N0Zml4ID0gIXVzZVNhbWVSZXNvdXJjZXNGb3JUaGVtZSAmJiB0aGVtZSA/IGAuJHtlbmNvZGVVUklDb21wb25lbnQodGhlbWUpfWAgOiBcIlwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHt0aGVtZVBvc3RmaXh9JHttaW59LmNzc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke3RoZW1lUG9zdGZpeH0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyB7XG4gICAgbnM6IHN0cmluZztcbiAgICBkcmFmdElkOiBzdHJpbmc7XG4gICAgZ2Z2Pzogc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG4gICAgZmVlZGJhY2tFbmFibGVkPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbGVhbkZvcm0/OiBib29sZWFuO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICBhdXRoZW50aWNhdGlvbj86IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIgfCB7IGF1dGhTaWQ6IHN0cmluZyB9O1xuICAgIGZldGNoPzogdHlwZW9mIGZldGNoO1xuICAgIG1vZGVsPzogeyBbcGF0aDogc3RyaW5nXTogdW5rbm93biB9O1xufVxuXG5mdW5jdGlvbiBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb246IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmcpOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50IHtcbiAgICBpZiAoZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIGdsb2JhbFtlbmdpbmVWZXJzaW9uXSAmJiBnbG9iYWxbZW5naW5lVmVyc2lvbl0uZGVmYXVsdDtcbn1cblxuZnVuY3Rpb24gc3RhcnQoXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPiA9IGRlZmF1bHRDYWxsYmFja1xuKTogdm9pZCB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBjb25zdCB7IG5zLCBkcmFmdElkIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHNldHRpbmdzID0gY2xpZW50U2V0dGluZ3M7XG5cbiAgICBpZiAoIWlzQWxsb3dlZChzZXR0aW5ncy5rb250dXJEb21haW5zKSkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcImRvbWFpbi51bnRydXN0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghc2V0dGluZ3MuYXV0aG9yaXplZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcInVzZXIudW5hdXRoZW50aWNhdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWRyYWZ0SWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLmRyYWZ0SWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIGlmICghbnMpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLm5zIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVpvbmUgPSBvcHRpb25zLnJlc291cmNlWm9uZSA/PyBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJyZXNvdXJjZVpvbmVcIik7XG4gICAgY29uc3QgY2xpZW50RHJhZnRVcmwgPSBidWlsZFVybCh1cmwoYHYxL25zLyR7bnN9L2RyYWZ0cy8ke2RyYWZ0SWR9L2NsaWVudC1kcmFmdC1pbmZvYCksIHtcbiAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdEluaXQgPSB7IG1ldGhvZDogXCJHRVRcIiB9O1xuICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09PSBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJpbmNsdWRlXCI7XG4gICAgfSBlbHNlIGlmIChcImF1dGhTaWRcIiBpbiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmIG9wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEFVVEguU0lEICR7b3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICB9XG4gICAgY29uc3QgZmV0Y2hJbXBsID0gb3B0aW9ucy5mZXRjaCA/PyBmZXRjaDtcblxuICAgIGZldGNoSW1wbChjbGllbnREcmFmdFVybCwgcmVxdWVzdE9wdGlvbnMpXG4gICAgICAgIC50aGVuKHggPT4geC5qc29uKCkpXG4gICAgICAgIC50aGVuKChjbGllbnREcmFmdEluZm86IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGdmdiB9ID0gY2xpZW50RHJhZnRJbmZvO1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvblBhcmFtID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZW5naW5lVmVyc2lvblwiKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvblxuICAgICAgICAgICAgICAgID8gZW5naW5lVmVyc2lvblBhcmFtIHx8IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsZWFuRm9ybTogb3B0aW9ucy5pc0Rpc2FibGVkQ2xlYW5Gb3JtID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb246IG9wdGlvbnMuYXV0aGVudGljYXRpb24sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
1283
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnRTZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6L0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJBcHBsaWNhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsImNvbnN0cnVjdG9yIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIk5vdFN1cHBvcnRlZEVycm9yIiwiSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIiwidW5kZWZpbmVkIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJhcmd1bWVudE5hbWUiLCJUeXBpbmdFcnJvciIsImlzTm90TnVsbE9yVW5kZWZpbmVkIiwiaW5wdXQiLCJzdHJpbmdpZnlVbmtub3duRXJyb3IiLCJlcnJvciIsImVuc3VyZU5vdE51bGxPclVuZGVmaW5lZCIsIm5vb3AiLCJyZWplY3QiLCJpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbCIsIml0ZW1zIiwibWluTGVuZ3RoIiwibGVuZ3RoIiwibWluTGVuZ3RoT3JVbmRlZmluZWQiLCJhcnJheUhhc0xlbmd0aCIsImFycmF5SXNOb3RFbXB0eSIsImFycmF5SGFzQXRMZWFzdE9uZUl0ZW0iLCJlbnN1cmVBcnJheUlzTm90RW1wdHkiLCJlbnN1cmVBcnJheUhhc0xlbmd0aCIsImVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsIiwiZW5zdXJlTmV2ZXIiLCJuZXZlckFyZ3VtZW50IiwiZW5zdXJlQW5kR2V0U3RyaW5nIiwicnVuQXN5bmNBY3Rpb24iLCJhY3Rpb24iLCJpc051bGxPckVtcHR5IiwiaXNOb3ROdWxsT3JFbXB0eSIsImlzTnVsbE9yV2hpdGVTcGFjZSIsInRyaW0iLCJ0cmltTGFzdFNsYXNoIiwidXJsIiwic2xpY2UiLCJhc3NlcnRJcyIsInZhbHVlIiwiZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsImUiLCJvYmoiLCJEYXRhVmlldyIsInByb3RvdHlwZSIsImlzUHJvdG90eXBlT2YiLCJ2aWV3Q2xhc3NlcyIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpbmRleE9mIiwiT2JqZWN0IiwidG9TdHJpbmciLCJjYWxsIiwibm9ybWFsaXplTmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVyYXRvciIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJIZWFkZXJzIiwiaGVhZGVycyIsInRoaXMiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIm9sZFZhbHVlIiwiZ2V0IiwiaGFzIiwiaGFzT3duUHJvcGVydHkiLCJzZXQiLCJjYWxsYmFjayIsInRoaXNBcmciLCJrZXlzIiwicHVzaCIsInZhbHVlcyIsImVudHJpZXMiLCJjb25zdW1lZCIsImJvZHkiLCJib2R5VXNlZCIsIlByb21pc2UiLCJmaWxlUmVhZGVyUmVhZHkiLCJyZWFkZXIiLCJyZXNvbHZlIiwib25sb2FkIiwicmVzdWx0Iiwib25lcnJvciIsInJlYWRCbG9iQXNBcnJheUJ1ZmZlciIsImJsb2IiLCJGaWxlUmVhZGVyIiwicHJvbWlzZSIsInJlYWRBc0FycmF5QnVmZmVyIiwicmVhZEFzVGV4dCIsImJ1ZiIsInZpZXciLCJVaW50OEFycmF5IiwiY2hhcnMiLCJpIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwiYnl0ZUxlbmd0aCIsImJ1ZmZlciIsIkJvZHkiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJfYm9keUFycmF5QnVmZmVyIiwidHlwZSIsInJlamVjdGVkIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJtZXRob2RzIiwibWV0aG9kIiwidXBjYXNlZCIsInRvVXBwZXJDYXNlIiwiUmVxdWVzdCIsIm9wdGlvbnMiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInNwbGl0IiwiYnl0ZXMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyYXdIZWFkZXJzIiwic3Vic3RyIiwibGluZSIsInBhcnRzIiwia2V5IiwiUmVzcG9uc2UiLCJib2R5SW5pdCIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsInJlc3BvbnNlIiwicmVkaXJlY3RTdGF0dXNlcyIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiRE9NRXhjZXB0aW9uIiwiZXJyIiwic3RhY2siLCJjcmVhdGUiLCJmZXRjaCIsImluaXQiLCJyZXF1ZXN0IiwiYWJvcnRlZCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwiYWJvcnRYaHIiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwic2V0VGltZW91dCIsIm9udGltZW91dCIsIm9uYWJvcnQiLCJocmVmIiwib3BlbiIsImZpeFVybCIsIndpdGhDcmVkZW50aWFscyIsInJlc3BvbnNlVHlwZSIsInNldFJlcXVlc3RIZWFkZXIiLCJhZGRFdmVudExpc3RlbmVyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzZW5kIiwicG9seWZpbGwiLCJkZWZhdWx0Q2FsbGJhY2siLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXRoIiwicGFyYW1zIiwicXVlcnlQYXJ0cyIsInBhcmFtTmFtZSIsInBhcmFtVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJpc0FsbG93ZWQiLCJkb21haW5zIiwiUmVnRXhwIiwiaG9zdCIsImdldFBhcmFtZXRlckJ5TmFtZSIsInNlYXJjaCIsInBhcmFtIiwiZmluZCIsInJ1blBhcmFsbGVsIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwiaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsIiwibGVmdCIsInJpZ2h0IiwibGVmdE51bWJlcnMiLCJwYXJzZUludCIsIngiLCJyaWdodE51bWJlcnMiLCJsb2FkRm9ybSIsInNldHRpbmdzIiwiZ2Z2IiwiZW5naW5lVmVyc2lvbiIsInJlc291cmNlc1ZlcnNpb24iLCJlbnRyeVBvaW50IiwiaXNOZWVkRW5naW5lIiwibWluIiwidiIsInJlc291cmNlWm9uZSIsIkxvYWRJbnRvRG9jdW1lbnQiLCJjYiIsInJlbmRlckZvcm0iLCJwYWdlQ29udGVudCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiY3JlYXRlTGVnYWN5UHVibGljRm9ybSIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJzdGFydCIsImNsaWVudFNldHRpbmdzIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsImZldGNoSW1wbCIsImNsaWVudERyYWZ0SW5mbyIsImF1dGhvcml6ZWQiLCJjYXVsZHJvbkFwaVVybCIsImlzVGVzdFNlcnZlciIsInJlbmRlckNhY2hpbmdGb3JJRTgiLCJub3JtYWxpemF0aW9uT25TZXJ2ZXIiLCJub3JtYXRpdmVVcmwiLCJrb250dXJEb21haW5zIiwiYWJvbklkIiwib3JnSWQiLCJ1c2VySWQiLCJpc0luZGl2aWR1YWwiLCJpc0ZvcmVpZ24iLCJmZWVkYmFja0VuYWJsZWQiLCJjYW5keVRvdXJBdmFpbGFibGUiLCJldmVudEVtaXR0ZXIiLCJmb3JtSW5mbyIsInByaW50SW5mbyIsInJlZ2lvbnMiLCJoYXNUZW1wbGF0ZXMiLCJtb2RlbCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwidGhlbWUiLCJsb2FkRXJyb3IiLCJyZW5kZXIiLCJ0ZW1wbGF0ZXNBcGkiLCJDYW5keUNsaWVudEV4cG9ydHMiLCJwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4IiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJmaWVsZE5hbWUiLCJtYXBDaHVua1ZhbHVlcyIsImNodW5rIiwiZmlsdGVyIiwicmVkdWNlQ2h1bmtWYWx1ZXMiLCJjaHVua3MiLCJyZWR1Y2UiLCJMZWdhY3lQdWJsaWNGb3JtIiwidXBkYXRlUHJvYyIsImVycm9yTG9nIiwiZ0lkIiwicGlja2xpc3RzUHJvdmlkZXIiLCJnZXREaWdlc3RBcGlQaWNrbGlzdCIsInF1ZXJ5IiwiZXZlbnROYW1lIiwibGlzdGVuZXIiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNvbnNvbGUiLCJjaGFuZ2VTZXQiLCJzdG9wQXV0b3NlbmQiLCJ1bm1vdW50IiwiZ2V0Q2h1bmsiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJpbnN0YW5jZSIsImVuYWJsZWQiLCJwYXRoUHJlZml4ZXMiLCJ1cmkiLCJzY3JpcHRMb2FkZWQiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImRvY3VtZW50RWxlbWVudCIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJsb2FkSGFuZGxlciIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaWdub3JlRXJyb3IiLCJsaW5rIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImlkIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImciLCJGdW5jdGlvbiIsIndpbmRvdyIsImhtZCIsImNoaWxkcmVuIiwicHJvcCIsIl9fd2VicGFja19leHBvcnRzX18iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVPLGVBQVNBLENBQVQsQ0FBK0JDLENBQS9CLEVBQStCQTtBQUdsQyxlQUFBLFNBQUEsTUFBQSxDQUFnQkEsQ0FBQUEsQ0FBUUMsRUFBeEIsRUFBQSxVQUFBLEVBQUEsTUFBQSxDQUFxQ0QsQ0FBQUEsQ0FBUUEsT0FBN0MsRUFBQSxvQkFBQSxDQUFBOzs7Ozs7OzJUQUhZRCxDLEVBQUFBLHVCLEVBQUFBLHFHLEdBQUFBLEMsMEZBQUFBLEs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUNGSEcsZ0JBQUFBLEdBQWIsVUFBQSxNQUFBLEVBQUE7QUFBQSxRQUFBLFNBQUEsQ0FBQSxnQkFBQSxFQUFBLE1BQUEsQ0FBQTs7QUFBQSxZQUFBLE1BQUEsR0FBQSxZQUFBLENBQUEsZ0JBQUEsQ0FBQTs7QUFDSSxpQkFBQSxnQkFBQSxDQUFtQkUsQ0FBbkIsRUFBbUJBO0FBQWlCLGNBQUEsQ0FBQTtBQUFBLGlCQUFBLGVBQUEsQ0FBQSxJQUFBLEVBQUEsZ0JBQUEsQ0FBQSxFQUFBLENBQ2hDLENBQUEsR0FBQSxNQUFBLENBQUEsSUFBQSxDQUFB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U0FBOUJBLEVBQXlDO0FBQ3hDOFMsTUFBQUEsVUFBQUEsRUFBQUEsQ0FBWSxDQUQ0QjtBQUV4Q2xSLE1BQUFBLEdBQUFBLEVBQUssWUFBQTtBQUNKLGNBQU0sSUFBSXZGLEtBQUosQ0FBVSw0RkFBNEZpVyxDQUFBQSxDQUFPQyxFQUE3RyxDQUFOO0FBQW1IQTtBQUg1RSxLQUF6Q3ZTLENBTUEsRUFBT3NTLENBQVA7QUFBT0EsR0ZSUkosRUdEQUEsbUJBQUFBLENBQW9CVSxDQUFwQlYsR0FBd0IsVUFBUzNTLENBQVQsRUFBYzZULENBQWQsRUFBY0E7QUFBUSxXQUFPcFQsTUFBQUEsQ0FBT1AsU0FBUE8sQ0FBaUIyQixjQUFqQjNCLENBQWdDRSxJQUFoQ0YsQ0FBcUNULENBQXJDUyxFQUEwQ29ULENBQTFDcFQsQ0FBUDtBQUFpRG9ULEdIQy9GbEI7O0FJRUEsTUFBSW1CLG1CQUFBQSxHQUFzQm5CLG1CQUFBQSxDQUFvQixHQUFwQkEsQ0FBMUI7QUFBOEMsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgcHJvZ3JhbSBzdGF0ZVwiICsgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gXCI6IFwiICsgbWVzc2FnZSA6IFwiXCIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihhcmd1bWVudE5hbWU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gYCR7bWVzc2FnZX0gKGFyZ3VtZW50OiAke2FyZ3VtZW50TmFtZX0pYCA6IGBJbnZhbGlkIGFyZ3VtZW50IHZhbHVlOiAke2FyZ3VtZW50TmFtZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwaW5nRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCB0eXBpbmdcIik7XG4gICAgfVxufVxuIiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iLCJ2YXIgZ2xvYmFsID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgaXRlcmFibGU6ICdTeW1ib2wnIGluIGdsb2JhbCAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnbG9iYWxcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICB9XG4gIH1cblxuICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG52YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbFxuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGdsb2JhbC5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbml0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnbG9iYWwuZmV0Y2gpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGdsb2JhbC5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIiwiLyogdHNsaW50OmRpc2FibGU6bm8tbnVsbC1rZXl3b3JkIG5vLWFueSBuby11bnNhZmUtYW55ICovXG5pbXBvcnQgeyBmZXRjaCB9IGZyb20gXCJ3aGF0d2ctZmV0Y2hcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZW5kZXJGb3JtU2V0dGluZ3Mge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xuICAgIGxvYWRFcnJvcj86IHVua25vd247XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiB9ID0gc2V0dGluZ3M7XG5cbiAgICBpZiAoZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmVlZEVuZ2luZSA9IGVuZ2luZVZlcnNpb24gJiYgIWdsb2JhbFtlbmdpbmVWZXJzaW9uXTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0YXNrczogVGFza1tdID0gW107XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7IHY6IHJlc291cmNlc1ZlcnNpb24sIHJlc291cmNlWm9uZTogc2V0dGluZ3MucmVzb3VyY2Vab25lIH07XG4gICAgaWYgKG5lZWRMb2FkU3R5bGVzRm9yR2Z2KSB7XG4gICAgICAgIHRhc2tzLnB1c2goY2IgPT5cbiAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzLyR7Z2Z2fSR7bWlufS5jc3NgLCBwYXJhbXMpKSwgdHJ1ZSwgY2IpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRhc2tzLnB1c2goY2IgPT4gTG9hZEludG9Eb2N1bWVudC5zY3JpcHQodXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvJHtnZnZ9JHttaW59LmpzYCwgcGFyYW1zKSksIGNiKSk7XG5cbiAgICBpZiAoaXNOZWVkRW5naW5lKSB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmNzc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnNjcmlwdChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7bWlufS5qc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBydW5QYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZW5kZXJGb3JtKFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPlxuKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUVudHJ5UG9pbnQgPVxuICAgICAgICBnbG9iYWwuQ0YuZW50cnlQb2ludFtleHRlbmRlZFNldHRpbmdzLmdmdl0gPz8gcmVqZWN0KGBGb3JtIGVudHJ5IHBvaW50ICR7ZXh0ZW5kZWRTZXR0aW5ncy5nZnZ9IG5vdCBmb3VuZC5gKTtcbiAgICBmb3JtRW50cnlQb2ludChwYWdlQ29udGVudCwgZXh0ZW5kZWRTZXR0aW5ncylcbiAgICAgICAgLnRoZW4oZm9ybSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGb3JtID0gZm9ybS5wdWJsaWNGb3JtIHx8IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybSk7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHB1YmxpY0Zvcm0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Rm9ybU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPEFVT09wdGlvbnM+IHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG4gICAgZXZlbnRFbWl0dGVyPzogTGF5b3V0RXZlbnRzU3RhdGljO1xuICAgIGVtcGxveWVySWQ/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIWlzQWxsb3dlZChjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zKSkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcImRvbWFpbi51bnRydXN0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcInVzZXIudW5hdXRoZW50aWNhdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWRyYWZ0SWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLmRyYWZ0SWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIGlmICghbnMpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLm5zIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVpvbmUgPSBvcHRpb25zLnJlc291cmNlWm9uZSA/PyBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJyZXNvdXJjZVpvbmVcIik7XG4gICAgY29uc3QgY2xpZW50RHJhZnRVcmwgPSBidWlsZFVybCh1cmwoZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKHsgbnM6IG5zLCBkcmFmdElkOiBkcmFmdElkIH0pKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdmdiA9IGNsaWVudERyYWZ0SW5mby5nZnY7XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uID0gY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb247XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWQ6IGNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQsXG4gICAgICAgICAgICAgICAgY2F1bGRyb25BcGlVcmw6IGNsaWVudFNldHRpbmdzLmNhdWxkcm9uQXBpVXJsLFxuICAgICAgICAgICAgICAgIGlzVGVzdFNlcnZlcjogY2xpZW50U2V0dGluZ3MuaXNUZXN0U2VydmVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IGNsaWVudFNldHRpbmdzLnJlbmRlckNhY2hpbmdGb3JJRTgsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBjbGllbnRTZXR0aW5ncy5ub3JtYWxpemF0aW9uT25TZXJ2ZXIsXG4gICAgICAgICAgICAgICAgbm9ybWF0aXZlVXJsOiBjbGllbnRTZXR0aW5ncy5ub3JtYXRpdmVVcmwsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogY2xpZW50U2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICBrb250dXJEb21haW5zOiBjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYWJvbklkOiBvcHRpb25zLmFib25JZCxcbiAgICAgICAgICAgICAgICBvcmdJZDogb3B0aW9ucy5vcmdJZCxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IG9wdGlvbnMudXNlcklkLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBpc0luZGl2aWR1YWw6IGNsaWVudERyYWZ0SW5mby5pc0luZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgaXNGb3JlaWduOiBjbGllbnREcmFmdEluZm8uaXNGb3JlaWduLFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGNhbmR5VG91ckF2YWlsYWJsZTogY2xpZW50RHJhZnRJbmZvLmNhbmR5VG91ckF2YWlsYWJsZSxcbiAgICAgICAgICAgICAgICBldmVudEVtaXR0ZXI6IG9wdGlvbnMuZXZlbnRFbWl0dGVyLFxuICAgICAgICAgICAgICAgIGZvcm1JbmZvOiBjbGllbnREcmFmdEluZm8uZm9ybUluZm8sXG4gICAgICAgICAgICAgICAgcHJpbnRJbmZvOiBjbGllbnREcmFmdEluZm8ucHJpbnRJbmZvLFxuICAgICAgICAgICAgICAgIHJlZ2lvbnM6IGNsaWVudERyYWZ0SW5mby5yZWdpb25zLFxuICAgICAgICAgICAgICAgIGhhc1RlbXBsYXRlczogY2xpZW50RHJhZnRJbmZvLmhhc1RlbXBsYXRlcyxcbiAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb246IG9wdGlvbnMuYXV0aGVudGljYXRpb24sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgY2xpZW50U2V0dGluZ3MgPSB7XG4gICAgYXV0aG9yaXplZDogcGFyc2VCb29sKFwie2F1dGhvcml6ZWR9XCIpLFxuICAgIGNhdWxkcm9uQXBpVXJsOiBcIntjYXVsZHJvbkFwaVVybH1cIixcbiAgICBpc1Rlc3RTZXJ2ZXI6IHBhcnNlQm9vbChcIntpc1Rlc3RTZXJ2ZXJ9XCIpLFxuICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntyZW5kZXJDYWNoaW5nRm9ySUU4fVwiKSxcbiAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IHBhcnNlQm9vbChcIntub3JtYWxpemF0aW9uT25TZXJ2ZXJ9XCIpLFxuICAgIG5vcm1hdGl2ZVVybDogXCJ7bm9ybWF0aXZlVXJsfVwiLFxuICAgIHJlc291cmNlc1ZlcnNpb246IFwie3Jlc291cmNlc1ZlcnNpb259XCIsXG4gICAga29udHVyRG9tYWluczogXCJ7a29udHVyRG9tYWluc31cIixcbn07XG4iLCJpbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9FcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9Gb3JtUGFydHMvVG91ci9Ub3VyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IEVtcGxveWVlIH0gZnJvbSBcIi4uLy4uLy4uL0VtcGxveWVlc0ltcG9ydC9TdGFmZlNlcnZpY2VXaWRnZXQvQ2xpZW50L1R5cGVzXCI7XG5pbXBvcnQgeyBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1Nb2RlbEFjY2Vzc29yXCI7XG5cbmltcG9ydCB7IElMZWdhY3lGb3JtIH0gZnJvbSBcIi4vSUxlZ2FjeUZvcm1cIjtcblxuZXhwb3J0IHR5cGUgTW9kZWxFdmVudFBhdGggPVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHBhdGg/OiBzdHJpbmcsIGZpZWxkTmFtZT86IHN0cmluZyk6IE1vZGVsRXZlbnRQYXRoIHtcbiAgICBpZiAoZmllbGROYW1lICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGF0aCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBiZSBkZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoLCBmaWVsZE5hbWVdO1xuICAgIH1cbiAgICBpZiAocGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGhdO1xuICAgIH1cbiAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl07XG59XG5cbmZ1bmN0aW9uIG1hcENodW5rVmFsdWVzKGNodW5rOiBSZWFkb25seU1vZGVsQ2h1bmspOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2h1bmspXG4gICAgICAgIC5maWx0ZXIocGF0aCA9PiBjaHVua1twYXRoXSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2h1bmtbcGF0aF0sIFwidmFsdWVcIikpXG4gICAgICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaHVua1twYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgW3BhdGhdOiByZXN1bHQudmFsdWUgfTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZUNodW5rVmFsdWVzKGNodW5rczogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pik6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGNodW5rKSA9PiAoe1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgLi4uY2h1bmssXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICk7XG59XG5cbmNsYXNzIExlZ2FjeVB1YmxpY0Zvcm0gaW1wbGVtZW50cyBJUHVibGljRm9ybSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtOiBJTGVnYWN5Rm9ybTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihmb3JtOiBJTGVnYWN5Rm9ybSkge1xuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIH1cblxuICAgIHB1YmxpYyBiYXRjaFVwZGF0ZSh1cGRhdGVQcm9jOiAodXBkYXRlQWNjZXNzb3I6IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvcikgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuQ2hlY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRFcnJvckxvZyhlcnJvckxvZzogUGFydGlhbDxTZXJ2ZXJFcnJvckxvZz4pOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIF9fSU5URVJOQUxfX2ltcG9ydEZyb21FbXBsb3llZVNlcnZpY2UoKTogUHJvbWlzZTxFbXBsb3llZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeUdJZChnSWQ6IHN0cmluZywgZmlsdGVyPzogRGlnZXN0UXVlcnlGaWx0ZXIpOiBQcm9taXNlPFBpY2tsaXN0UXVlcnlSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnBpY2tsaXN0c1Byb3ZpZGVyLmdldERpZ2VzdEFwaVBpY2tsaXN0KGdJZCkucXVlcnkoZmlsdGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmYoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub25Nb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZNb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub2ZmTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgLy8gRm9yIG9sZCBrZXdlYlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpO1xuICAgICAgICAvLyBAdHMtaWdub3JlINCt0YLQviDQsiDRgdGC0LDRgNGL0YUg0LTQstC40LbQutCw0YUg0YLRg9GCINGC0LDQutC+0Lkg0LLRi9C30L7QslxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZGF0b3IudmFsaWRhdGVBbGwoa2V5cyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHRoaXMuZm9ybS5tb2RlbC5nZXQodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpO1xuICAgICAgICByZXR1cm4gZXJyb3JDb3VudCAhPSB1bmRlZmluZWQgJiYgZXJyb3JDb3VudCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24obW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9KTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcsIHZhbHVlOiBNb2RlbFZhbHVlKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChcbiAgICAgICAgcGF0aE9yTW9kZWxDaHVuazogc3RyaW5nIHwgeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIHZhbHVlPzogTW9kZWxWYWx1ZVxuICAgICk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aE9yTW9kZWxDaHVuayAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwYXRoT3JNb2RlbENodW5rKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2h1bmsgPSBPYmplY3Qua2V5cyhwYXRoT3JNb2RlbENodW5rKS5yZWR1Y2U8UmVhZG9ubHlNb2RlbENodW5rPihcbiAgICAgICAgICAgICAgICAocmVzdWx0LCBwYXRoKSA9PiAoeyBbcGF0aF06IHsgdmFsdWU6IHBhdGhPck1vZGVsQ2h1bmtbcGF0aF0gfSwgLi4ucmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuZmlsbChpbm5lckNodW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLnNldChwYXRoT3JNb2RlbENodW5rLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uc2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBvYmplY3Qgd2l0aCBwYXRoLXZhbHVlIHBhaXJzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQocGF0aE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdKTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yQXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMoXG4gICAgICAgICAgICAgICAgcGF0aE9yQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChwYXRoID0+IG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoKSkpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZTxBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+PigocmVzdWx0LCBhcnJheSkgPT4gcmVzdWx0LmNvbmNhdChhcnJheSksIFtdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aE9yQXJyYXkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aE9yQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5nZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIGFycmF5IG9mIHBhdGhzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBNb2RlbFZhbHVlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ubW9kZWwuZ2V0KHBhdGgsIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluc3RhbmNlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoaWxkcmVuKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdXRvRmllbGRzVG9BdXRvVmFsdWUocGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlZmluaXRpb24pIHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG1vZHVsZSk7XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFUyBNb2R1bGVzIG1heSBub3QgYXNzaWduIG1vZHVsZS5leHBvcnRzIG9yIGV4cG9ydHMuKiwgVXNlIEVTTSBleHBvcnQgc3ludGF4LCBpbnN0ZWFkOiAnICsgbW9kdWxlLmlkKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMyk7XG4iXSwic291cmNlUm9vdCI6IiJ9