@kontur.candy/tools 2.128.0 → 2.130.2

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 (245) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/distr/Common/AsyncUtils.js +1 -30
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +9 -42
  4. package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -33
  5. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +0 -4
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +0 -4
  7. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -29
  8. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +0 -4
  9. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -35
  10. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -35
  11. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -37
  12. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -29
  13. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -34
  14. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -28
  15. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +0 -4
  16. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -33
  17. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -29
  18. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +1 -6
  19. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +0 -4
  20. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +0 -4
  21. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +9 -41
  22. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -5
  23. package/distr/Common/CandyApiClient/IsBuffer.js +1 -29
  24. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +0 -4
  25. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +0 -4
  26. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +0 -4
  27. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +0 -4
  28. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +0 -4
  29. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +1 -6
  30. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +0 -4
  31. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +0 -4
  32. package/distr/Common/CandyApiClient/Types/DraftFullId.js +0 -4
  33. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +0 -4
  34. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +1 -6
  35. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +0 -4
  36. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +0 -4
  37. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +1 -6
  38. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +0 -4
  39. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +0 -4
  40. package/distr/Common/CandyApiClient/Types/Guid.js +0 -4
  41. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +1 -6
  42. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +0 -4
  43. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +0 -4
  44. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +1 -6
  45. package/distr/Common/CommonConstants/SectionNames.js +1 -28
  46. package/distr/Common/Comparers.js +8 -30
  47. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -29
  48. package/distr/Common/EndPoints.js +1 -34
  49. package/distr/Common/Errors.js +3 -71
  50. package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -30
  51. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +0 -4
  52. package/distr/Common/Funcs.js +1 -29
  53. package/distr/Common/GFV.js +0 -4
  54. package/distr/Common/Hooks/UseLocalStorage.js +42 -0
  55. package/distr/Common/HttpClient/AuthenticationMode.js +1 -32
  56. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +12 -0
  57. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -29
  58. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +0 -4
  59. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -30
  60. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +3 -31
  61. package/distr/Common/HttpClient/HttpClient.js +1 -57
  62. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +0 -4
  63. package/distr/Common/HttpClient/IHttpClient.js +0 -4
  64. package/distr/Common/IndentString.js +18 -0
  65. package/distr/Common/IntRangeUtils.js +1 -31
  66. package/distr/Common/IterableUtils.js +18 -38
  67. package/distr/Common/KCLangRuntimeUtils.js +3 -38
  68. package/distr/Common/ModelPath/BuildIterationSequence.js +3 -31
  69. package/distr/Common/ModelPath/EachCurrentCollision.js +1 -6
  70. package/distr/Common/ModelPath/IEquatable.js +0 -4
  71. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +30 -0
  72. package/distr/Common/ModelPath/Map/Map2.js +143 -0
  73. package/distr/Common/ModelPath/Map/ModelPathMap.js +30 -0
  74. package/distr/Common/ModelPath/ModelPath.js +182 -207
  75. package/distr/Common/ModelPath/ModelPathBuilder.js +11 -40
  76. package/distr/Common/ModelPath/PathMatcher.js +8 -37
  77. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +40 -0
  78. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +40 -0
  79. package/distr/Common/ModelPath/Set/ModelPathSet.js +40 -0
  80. package/distr/Common/ModelPath/Set/Set2.js +60 -0
  81. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -34
  82. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +0 -4
  83. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -29
  84. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -34
  85. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -38
  86. package/distr/Common/NidusClient/INidusClient.js +1 -30
  87. package/distr/Common/NidusClient/NidusClientContext.js +1 -38
  88. package/distr/Common/NidusClient/NidusClientImpl.js +1 -34
  89. package/distr/Common/PathConstants.js +3 -31
  90. package/distr/Common/TypingUtils.js +6 -50
  91. package/distr/Common/UUID.js +1 -30
  92. package/distr/Common/UseAsyncEffect.js +1 -31
  93. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +3 -36
  94. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +1 -29
  95. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -30
  96. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +3 -36
  97. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +3 -36
  98. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -29
  99. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -34
  100. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -28
  101. package/distr/Tools/src/BuildTasks/FSTask.js +3 -30
  102. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -32
  103. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -37
  104. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -34
  105. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +3 -31
  106. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -29
  107. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -31
  108. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +3 -36
  109. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +3 -37
  110. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -37
  111. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +2 -34
  112. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +1 -5
  113. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +1 -5
  114. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +3 -33
  115. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +1 -28
  116. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +3 -30
  117. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -34
  118. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +1 -45
  119. package/distr/Tools/src/BuildTasks/ReadFormSource.js +3 -39
  120. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +3 -33
  121. package/distr/Tools/src/BuildTasks/Version.js +1 -32
  122. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +3 -31
  123. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +1 -30
  124. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +1 -28
  125. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +3 -33
  126. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -34
  127. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -29
  128. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +6 -37
  129. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +6 -47
  130. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +26 -43
  131. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +6 -40
  132. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +6 -38
  133. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +6 -37
  134. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +6 -39
  135. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +6 -37
  136. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +6 -39
  137. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +3 -36
  138. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +3 -36
  139. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +12 -37
  140. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +3 -31
  141. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +3 -31
  142. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +4 -36
  143. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +3 -31
  144. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +0 -4
  145. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +0 -4
  146. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +2 -42
  147. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +3 -36
  148. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -29
  149. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +0 -4
  150. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -30
  151. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +1 -29
  152. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -29
  153. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -30
  154. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +0 -4
  155. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -28
  156. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +3 -31
  157. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -28
  158. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +3 -31
  159. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +6 -40
  160. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -30
  161. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -29
  162. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -34
  163. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +6 -37
  164. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +1 -29
  165. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -28
  166. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -30
  167. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -28
  168. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +3 -32
  169. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -32
  170. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -29
  171. package/distr/Tools/src/CandyCLI.js +3 -31
  172. package/distr/Tools/src/CheckNodeJsVersion.js +3 -33
  173. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -35
  174. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -34
  175. package/distr/Tools/src/Commons/ErrorUntyped.js +0 -4
  176. package/distr/Tools/src/Commons/EventObject.js +2 -44
  177. package/distr/Tools/src/Commons/ExecUtils.js +1 -29
  178. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -29
  179. package/distr/Tools/src/Commons/FormGlobsUtils.js +3 -36
  180. package/distr/Tools/src/Commons/FsUtils.js +3 -34
  181. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -32
  182. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +2 -33
  183. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -34
  184. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -34
  185. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +0 -4
  186. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -34
  187. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -34
  188. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -34
  189. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -34
  190. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -36
  191. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -34
  192. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -34
  193. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -34
  194. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -34
  195. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +0 -4
  196. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -34
  197. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -34
  198. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +3 -57
  199. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -28
  200. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +3 -36
  201. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +1 -34
  202. package/distr/Tools/src/Commons/Locks/Lock.js +3 -36
  203. package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -34
  204. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +3 -36
  205. package/distr/Tools/src/Commons/Logging/ELKLogger.js +3 -33
  206. package/distr/Tools/src/Commons/Logging/ILogger.js +1 -36
  207. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +1 -41
  208. package/distr/Tools/src/Commons/Logging/Logger.js +3 -36
  209. package/distr/Tools/src/Commons/Logging/StaticLogger.js +1 -38
  210. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -30
  211. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +6 -53
  212. package/distr/Tools/src/Commons/PathPattern.js +1 -34
  213. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -34
  214. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +0 -4
  215. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +3 -89
  216. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +3 -36
  217. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +1 -34
  218. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +3 -36
  219. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +3 -36
  220. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -28
  221. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +1 -34
  222. package/distr/Tools/src/Commons/TimingUtils.js +1 -29
  223. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +3 -44
  224. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +7 -33
  225. package/distr/Tools/src/GenerateReadMe.js +1 -31
  226. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  227. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  228. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  229. package/distr/Tools/src/Options/CandyToolOptions.js +1 -28
  230. package/distr/Tools/src/ReadFarmConfig.js +3 -31
  231. package/distr/Tools/src/SelfUpdate.js +4 -36
  232. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1077 -474
  233. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  234. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +350 -360
  235. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  236. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +1 -5
  237. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1 -5
  238. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +1 -5
  239. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +1 -5
  240. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1 -5
  241. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +1 -5
  242. package/package.json +3 -2
  243. package/distr/Common/ModelPath/AbsoluteModelPathSet.js +0 -95
  244. package/distr/Common/ModelPath/ModelPathMap.js +0 -160
  245. package/distr/Common/ModelPath/ModelPathSet.js +0 -99
@@ -7,15 +7,6 @@ exports.HttpError = exports.HttpClientResponse = exports.HttpClientRequestWrappe
7
7
 
8
8
  var _Errors = require("../Errors");
9
9
 
10
- (function () {
11
- var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
12
- enterModule && enterModule(module);
13
- })();
14
-
15
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
16
- return a;
17
- };
18
-
19
10
  function trimTrailingSlash(url) {
20
11
  return url.slice(-1) === "/" ? url.slice(0, -1) : url;
21
12
  }
@@ -40,12 +31,6 @@ class HttpClientResponse {
40
31
  return responseData;
41
32
  }
42
33
 
43
- // @ts-ignore
44
- __reactstandin__regenerateByEval(key, code) {
45
- // @ts-ignore
46
- this[key] = eval(code);
47
- }
48
-
49
34
  }
50
35
 
51
36
  exports.HttpClientResponse = HttpClientResponse;
@@ -146,12 +131,6 @@ class HttpClientRequestWrapper {
146
131
  return new HttpClientRequestWrapper(fn);
147
132
  }
148
133
 
149
- // @ts-ignore
150
- __reactstandin__regenerateByEval(key, code) {
151
- // @ts-ignore
152
- this[key] = eval(code);
153
- }
154
-
155
134
  }
156
135
 
157
136
  exports.HttpClientRequestWrapper = HttpClientRequestWrapper;
@@ -357,12 +336,6 @@ class HttpClient {
357
336
  return fetchWithOptions;
358
337
  }
359
338
 
360
- // @ts-ignore
361
- __reactstandin__regenerateByEval(key, code) {
362
- // @ts-ignore
363
- this[key] = eval(code);
364
- }
365
-
366
339
  }
367
340
 
368
341
  exports.HttpClient = HttpClient;
@@ -375,36 +348,7 @@ class HttpError extends Error {
375
348
  this.statusCode = statusCode;
376
349
  }
377
350
 
378
- // @ts-ignore
379
- __reactstandin__regenerateByEval(key, code) {
380
- // @ts-ignore
381
- this[key] = eval(code);
382
- }
383
-
384
351
  }
385
352
 
386
353
  exports.HttpError = HttpError;
387
- ;
388
-
389
- (function () {
390
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
391
-
392
- if (!reactHotLoader) {
393
- return;
394
- }
395
-
396
- reactHotLoader.register(trimTrailingSlash, "trimTrailingSlash", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
397
- reactHotLoader.register(trimLeadingSlash, "trimLeadingSlash", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
398
- reactHotLoader.register(HttpClientResponse, "HttpClientResponse", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
399
- reactHotLoader.register(HttpClientRequestWrapper, "HttpClientRequestWrapper", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
400
- reactHotLoader.register(HttpClient, "HttpClient", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
401
- reactHotLoader.register(HttpError, "HttpError", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\HttpClient\\HttpClient.ts");
402
- })();
403
-
404
- ;
405
-
406
- (function () {
407
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
408
- leaveModule && leaveModule(module);
409
- })();
410
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwibmFtZXMiOlsidHJpbVRyYWlsaW5nU2xhc2giLCJ1cmwiLCJzbGljZSIsInRyaW1MZWFkaW5nU2xhc2giLCJIdHRwQ2xpZW50UmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsImZldGNoUmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2VEYXRhIiwiSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIiwiZXhlY3V0ZSIsImV4ZWN1dGVSZXF1ZXN0IiwiYWNjZXB0Q29kZXMiLCJxdWVyeVBhcmFtcyIsInNpZ25hbCIsImJvZHlGYWN0b3J5IiwiY29udGVudFR5cGUiLCJ0aGVuIiwiYXJncyIsInJlc3VsdFByb21pc2UiLCJyZXN1bHQiLCJjcmVhdGVDb25maWciLCJ3aXRoQWJvcnRTaWduYWwiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJib2R5IiwidW5kZWZpbmVkIiwid2l0aEpzb25Cb2R5Iiwic2VyaWFsaXphYmxlQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aXRoUXVlcnlQYXJhbXMiLCJ3aXRoUmF3Qm9keSIsImFjY2VwdENvZGUiLCJjb2RlIiwicHVzaCIsImNyZWF0ZSIsImZuIiwiSHR0cENsaWVudCIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJhdXRoZW50aWNhdGlvblByb3ZpZGVyIiwiZGVmYXVsdFF1ZXJ5UGFyYW1zIiwiZGVmYXVsdFBhcmFtcyIsImdldCIsIm1ldGhvZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImNvbmZpZyIsImZldGNoVXJsIiwicmVxdWVzdCIsImFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzcG9uc2UiLCJjaGVja1N0YXR1cyIsIm9wdGlvbnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJlcnJvclRleHQiLCJ0ZXh0Iiwic2VydmVyUmVzcG9uc2UiLCJwYXJzZSIsImUiLCJIdHRwRXJyb3IiLCJNZXNzYWdlIiwibWVzc2FnZSIsIkVycm9yIiwicG9zdFN5bmMiLCJkYXRhIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJtYWtlUGFyYW1WYWx1ZVN0cmluZyIsInBhcmFtIiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMyIiwibWFwIiwia2V5IiwidG9TdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiZmlsdGVyIiwieCIsImpvaW4iLCJjcmVhdGVGZXRjaEltcGwiLCJmZXRjaFdpdGhPcHRpb25zIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdEluaXQiLCJjYWNoZSIsImNyZWRlbnRpYWxzIiwiaW50ZWdyaXR5Iiwia2VlcGFsaXZlIiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJyZWZlcnJlclBvbGljeSIsInN0YXR1c0NvZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0FBWUEsU0FBU0EsaUJBQVQsQ0FBMkJDLEdBQTNCLEVBQWdEO0FBQzVDLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQUMsQ0FBWCxNQUFrQixHQUFsQixHQUF3QkQsR0FBRyxDQUFDQyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQUMsQ0FBZCxDQUF4QixHQUEyQ0QsR0FBbEQ7QUFDSDs7QUFFRCxTQUFTRSxnQkFBVCxDQUEwQkYsR0FBMUIsRUFBK0M7QUFDM0MsU0FBT0EsR0FBRyxDQUFDLENBQUQsQ0FBSCxLQUFXLEdBQVgsR0FBaUJBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQVYsQ0FBakIsR0FBZ0NELEdBQXZDO0FBQ0g7O0FBWU0sTUFB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VlU7QUFXM0JDLFVBQUFBLFNBQVMsRUFBRU4sS0FBSyxDQUFDTSxTQVhVO0FBWTNCN0QsVUFBQUEsTUFBTSxFQUFFdUQsS0FBSyxDQUFDdkQsTUFaYTtBQWEzQjhELFVBQUFBLElBQUksRUFBRVAsS0FBSyxDQUFDTyxJQWJlO0FBYzNCQyxVQUFBQSxRQUFRLEVBQUVSLEtBQUssQ0FBQ1EsUUFkVztBQWUzQkMsVUFBQUEsUUFBUSxFQUFFVCxLQUFLLENBQUNTLFFBZlc7QUFnQjNCQyxVQUFBQSxjQUFjLEVBQUVWLEtBQUssQ0FBQ1U7QUFoQkssU0FBL0I7QUFrQkFSLFFBQUFBLFdBQVcsR0FBRyxLQUFLN0Qsc0JBQUwsQ0FBNEI2RCxXQUE1QixDQUFkO0FBQ0EsZUFBTyxLQUFLL0QsU0FBTCxDQUFlWSxRQUFmLEVBQXlCbUQsV0FBekIsQ0FBUDtBQUNIO0FBQ0osS0FqQ0Q7O0FBa0NBLFdBQU9ILGdCQUFQO0FBQ0g7O0FBMUwwQztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBOzs7O0FBNkx4QyxNQUFNMUIsU0FBTixTQUF3QkcsS0FBeEIsQ0FBOEI7QUFHMUJ4RSxFQUFBQSxXQUFXLENBQUN1RSxPQUFELEVBQWtCb0MsVUFBbEIsRUFBc0M7QUFDcEQsVUFBTXBDLE9BQU47QUFEb0QsU0FGeENvQyxVQUV3QztBQUVwRCxTQUFLQyxJQUFMLEdBQVksV0FBWjtBQUNBLFNBQUtELFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0g7O0FBUGdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7Ozs7Ozs7Ozs7OzswQkE5VDVCaEgsaUI7MEJBSUFHLGdCOzBCQWNJQyxrQjswQkFvQkFNLHdCOzBCQTJGQTZCLFU7MEJBNkxBbUMsUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciB9IGZyb20gXCIuLi9FcnJvcnNcIjtcblxuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQge1xuICAgIEh0dHBTdGF0dXNDb2RlLFxuICAgIElIdHRwQ2xpZW50LFxuICAgIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIsXG4gICAgSUh0dHBDbGllbnRSZXNwb25zZSxcbiAgICBRdWVyeVBhcmFtc09iamVjdCxcbn0gZnJvbSBcIi4vSUh0dHBDbGllbnRcIjtcbmltcG9ydCB7IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyIH0gZnJvbSBcIi4vSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJcIjtcblxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmZ1bmN0aW9uIHRyaW1MZWFkaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmxbMF0gPT09IFwiL1wiID8gdXJsLnNsaWNlKDEpIDogdXJsO1xufVxuXG50eXBlIEJvZHlGYWN0b3J5ID0gKCkgPT4gQm9keUluaXQgfCBudWxsO1xuXG5pbnRlcmZhY2UgSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnIHtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdO1xuICAgIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdDtcbiAgICBjb250ZW50VHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVzcG9uc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZmV0Y2hSZXNwb25zZTogUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5mZXRjaFJlc3BvbnNlID0gZmV0Y2hSZXNwb25zZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXR1cygpOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoUmVzcG9uc2UuanNvbigpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICB9XG59XG5cbnR5cGUgUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uID0gKGNvbmZpZzogSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnKSA9PiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZSB8IFJlc3BvbnNlPjtcblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0ZVJlcXVlc3Q6IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdID0gW107XG4gICAgcHJpdmF0ZSBxdWVyeVBhcmFtczogUXVlcnlQYXJhbXNPYmplY3QgPSB7fTtcbiAgICBwcml2YXRlIHNpZ25hbDogdW5kZWZpbmVkIHwgQWJvcnRTaWduYWw7XG4gICAgcHJpdmF0ZSBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIHByaXZhdGUgY29udGVudFR5cGU/OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZXhlY3V0ZTogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3QgPSBleGVjdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWJvcnRTaWduYWwoc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLnNpZ25hbCA9IHNpZ25hbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb250ZW50VHlwZShjb250ZW50VHlwZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhCb2R5RnJvbUJ1ZmZlcihib2R5OiBmYWxzZSB8IEJ1ZmZlciB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSA9PT0gZmFsc2UgfHwgYm9keSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEpzb25Cb2R5KHNlcmlhbGl6YWJsZUJvZHk6IHVua25vd24gfCB7fSB8IHVua25vd25bXSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQm9keSAhPT0gZmFsc2UgJiYgc2VyaWFsaXphYmxlQm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBKU09OLnN0cmluZ2lmeShzZXJpYWxpemFibGVCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCB8IGZhbHNlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChxdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJhd0JvZHkoYm9keTogQnVmZmVyIHwgc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKGJvZHkgIT09IGZhbHNlICYmIGJvZHkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlGYWN0b3J5ID0gKCkgPT4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMganNvbjxUPigpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcztcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qc29uPFQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdENvZGUoY29kZTogSHR0cFN0YXR1c0NvZGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hY2NlcHRDb2Rlcy5wdXNoKGNvZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGhlbjogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U+W1widGhlblwiXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdCh0aGlzLmNyZWF0ZUNvbmZpZygpKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIdHRwQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXNwb25zZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0UHJvbWlzZS50aGVuKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbmZpZygpOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIGJvZHlGYWN0b3J5OiB0aGlzLmJvZHlGYWN0b3J5LFxuICAgICAgICAgICAgYWNjZXB0Q29kZXM6IHRoaXMuYWNjZXB0Q29kZXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnRUeXBlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGZuOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pOiBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcihmbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudCBpbXBsZW1lbnRzIElIdHRwQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZldGNoSW1wbDogRmV0Y2g7XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyOiBIdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyLFxuICAgICAgICBkZWZhdWx0UXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdFxuICAgICkge1xuICAgICAgICB0aGlzLmZldGNoSW1wbCA9IGZldGNoSW1wbDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA9PSB1bmRlZmluZWQgPyBiYXNlVXJsIDogdHJpbVRyYWlsaW5nU2xhc2goYmFzZVVybCk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IGRlZmF1bHRRdWVyeVBhcmFtcztcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyID0gYXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIkdFVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBPU1RcIikodXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHV0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBVVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaCh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJQQVRDSFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiREVMRVRFXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXRob2QobWV0aG9kOiBcIkdFVFwiIHwgXCJQT1NUXCIgfCBcIlBVVFwiIHwgXCJQQVRDSFwiIHwgXCJERUxFVEVcIik6ICh1cmw6IHN0cmluZykgPT4gSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiAodXJsOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIuY3JlYXRlKGFzeW5jIGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybCh1cmwsIGNvbmZpZy5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyh7IG1ldGhvZDogbWV0aG9kIH0sIGNvbmZpZy5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNpZ25hbCA9IGNvbmZpZy5zaWduYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuYm9keUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibWV0aG9kXCIsIFwiQm9keSBpcyBub3QgYWxsb3dlZCBmb3IgR0VUIHJlcXVlc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IGNvbmZpZy5ib2R5RmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrU3RhdHVzKHJlc3BvbnNlLCBjb25maWcuYWNjZXB0Q29kZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKG9wdGlvbnM6IFJlcXVlc3RJbml0LCBjb250ZW50VHlwZT86IHVuZGVmaW5lZCB8IHN0cmluZyk6IFJlcXVlc3RJbml0IHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBjb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIlByYWdtYVwiXSA9IFwibm8tY2FjaGVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSBwYXRoO1xuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5iYXNlVXJsICsgXCIvXCIgKyB0cmltTGVhZGluZ1NsYXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0UGFyYW1zID0geyAuLi50aGlzLmRlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcyB9O1xuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhcIj9cIikgJiYgcGFyYW1zICE9IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhyZXN1bHRQYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcihgUGFzc2luZyBzZWFyY2ggcGFyYW1zIGluIHVybCBhbmQgdmlhIHBhcmFtcyBvYmplY3QgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHRoaXMuY3JlYXRlUXVlcnlTdHJpbmcocmVzdWx0UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSwgYWNjZXB0Q29kZXM/OiBIdHRwU3RhdHVzQ29kZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB8fCAoYWNjZXB0Q29kZXMgPz8gW10pLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJSZXNwb25zZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc2VydmVyUmVzcG9uc2UgPSBKU09OLnBhcnNlKGVycm9yVGV4dCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgc2VydmVyUmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VydmVyUmVzcG9uc2UgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyUmVzcG9uc2UuTWVzc2FnZSA/PyBzZXJ2ZXJSZXNwb25zZS5tZXNzYWdlID8/IHNlcnZlclJlc3BvbnNlLkVycm9yLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zdGF0dXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcihlcnJvclRleHQsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcG9zdFN5bmModXJsOiBzdHJpbmcsIHBhcmFtczogdW5kZWZpbmVkIHwgUXVlcnlQYXJhbXNPYmplY3QsIGRhdGE6IHt9KTogSHR0cFN0YXR1c0NvZGUge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHJlcXVlc3Qub3BlbihcIlBPU1RcIiwgdGhpcy51cmwodXJsLCBwYXJhbXMpLCBmYWxzZSk7XG4gICAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOFwiKTtcbiAgICAgICAgcmVxdWVzdC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Quc3RhdHVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZVBhcmFtVmFsdWVTdHJpbmcocGFyYW06IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtlbmNvZGVVUklDb21wb25lbnQocGFyYW0pfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVF1ZXJ5U3RyaW5nKHBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHBhcmFtcyA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtczIgPSBwYXJhbXM7XG4gICAgICAgIGxldCByZXN1bHQgPSBPYmplY3Qua2V5cyhwYXJhbXMpXG4gICAgICAgICAgICAubWFwKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXMyW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIGl0ZW0udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4ICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC5qb2luKFwiJlwiKTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ID8gXCI/XCIgKyByZXN1bHQgOiBcIlwiO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVGZXRjaEltcGwoKTogRmV0Y2gge1xuICAgICAgICBjb25zdCBmZXRjaFdpdGhPcHRpb25zID0gKGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdD86IFJlcXVlc3RJbml0KTogUHJvbWlzZTxSZXNwb25zZT4gPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZldGNoVXJsID0gdGhpcy51cmwoaW5wdXQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgaW5pdCA9IGluaXQgPz8ge307XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzID0gaW5pdC5oZWFkZXJzID8/IHt9O1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVyc1tcIkNhY2hlLUNvbnRyb2xcIl0gPSBcIm5vLWNhY2hlLCBuby1zdG9yZVwiO1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVyc1tcIlByYWdtYVwiXSA9IFwibm8tY2FjaGVcIjtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJFeHBpcmVzXCJdID0gXCIwXCI7XG4gICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihpbml0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaEltcGwoZmV0Y2hVcmwsIGluaXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKGlucHV0LnVybCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdEluaXQ6IFJlcXVlc3RJbml0ID0ge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJDYWNoZS1Db250cm9sXCJdOiBcIm5vLWNhY2hlLCBuby1zdG9yZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1wiUHJhZ21hXCJdOiBcIm5vLWNhY2hlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJFeHBpcmVzXCJdOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmlucHV0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbDogaW5wdXQuc2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZTogaW5wdXQuY2FjaGUsXG4gICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBpbnB1dC5jcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdyaXR5OiBpbnB1dC5pbnRlZ3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGtlZXBhbGl2ZTogaW5wdXQua2VlcGFsaXZlLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IGlucHV0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogaW5wdXQubW9kZSxcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IGlucHV0LnJlZGlyZWN0LFxuICAgICAgICAgICAgICAgICAgICByZWZlcnJlcjogaW5wdXQucmVmZXJyZXIsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVycmVyUG9saWN5OiBpbnB1dC5yZWZlcnJlclBvbGljeSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlcXVlc3RJbml0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKHJlcXVlc3RJbml0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaEltcGwoZmV0Y2hVcmwsIHJlcXVlc3RJbml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZldGNoV2l0aE9wdGlvbnM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHR0cEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGF0dXNDb2RlOiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgfVxufVxuIl19
354
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwibmFtZXMiOlsidHJpbVRyYWlsaW5nU2xhc2giLCJ1cmwiLCJzbGljZSIsInRyaW1MZWFkaW5nU2xhc2giLCJIdHRwQ2xpZW50UmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsImZldGNoUmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2VEYXRhIiwiSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIiwiZXhlY3V0ZSIsImV4ZWN1dGVSZXF1ZXN0IiwiYWNjZXB0Q29kZXMiLCJxdWVyeVBhcmFtcyIsInNpZ25hbCIsImJvZHlGYWN0b3J5IiwiY29udGVudFR5cGUiLCJ0aGVuIiwiYXJncyIsInJlc3VsdFByb21pc2UiLCJyZXN1bHQiLCJjcmVhdGVDb25maWciLCJ3aXRoQWJvcnRTaWduYWwiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJib2R5IiwidW5kZWZpbmVkIiwid2l0aEpzb25Cb2R5Iiwic2VyaWFsaXphYmxlQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aXRoUXVlcnlQYXJhbXMiLCJ3aXRoUmF3Qm9keSIsImFjY2VwdENvZGUiLCJjb2RlIiwicHVzaCIsImNyZWF0ZSIsImZuIiwiSHR0cENsaWVudCIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJhdXRoZW50aWNhdGlvblByb3ZpZGVyIiwiZGVmYXVsdFF1ZXJ5UGFyYW1zIiwiZGVmYXVsdFBhcmFtcyIsImdldCIsIm1ldGhvZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImNvbmZpZyIsImZldGNoVXJsIiwicmVxdWVzdCIsImFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzcG9uc2UiLCJjaGVja1N0YXR1cyIsIm9wdGlvbnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJlcnJvclRleHQiLCJ0ZXh0Iiwic2VydmVyUmVzcG9uc2UiLCJwYXJzZSIsImUiLCJIdHRwRXJyb3IiLCJNZXNzYWdlIiwibWVzc2FnZSIsIkVycm9yIiwicG9zdFN5bmMiLCJkYXRhIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJtYWtlUGFyYW1WYWx1ZVN0cmluZyIsInBhcmFtIiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMyIiwibWFwIiwia2V5IiwidG9TdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiZmlsdGVyIiwieCIsImpvaW4iLCJjcmVhdGVGZXRjaEltcGwiLCJmZXRjaFdpdGhPcHRpb25zIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdEluaXQiLCJjYWNoZSIsImNyZWRlbnRpYWxzIiwiaW50ZWdyaXR5Iiwia2VlcGFsaXZlIiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJyZWZlcnJlclBvbGljeSIsInN0YXR1c0NvZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBWUEsU0FBU0EsaUJBQVQsQ0FBMkJDLEdBQTNCLEVBQWdEO0FBQzVDLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQUMsQ0FBWCxNQUFrQixHQUFsQixHQUF3QkQsR0FBRyxDQUFDQyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQUMsQ0FBZCxDQUF4QixHQUEyQ0QsR0FBbEQ7QUFDSDs7QUFFRCxTQUFTRSxnQkFBVCxDQUEwQkYsR0FBMUIsRUFBK0M7QUFDM0MsU0FBT0EsR0FBRyxDQUFDLENBQUQsQ0FBSCxLQUFXLEdBQVgsR0FBaUJBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQVYsQ0FBakIsR0FBZ0NELEdBQXZDO0FBQ0g7O0FBWU0sTUFBTUcsa0JBQU4s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LEVBQUV1RCxLQUFLLENBQUN2RCxNQVphO0FBYTNCOEQsVUFBQUEsSUFBSSxFQUFFUCxLQUFLLENBQUNPLElBYmU7QUFjM0JDLFVBQUFBLFFBQVEsRUFBRVIsS0FBSyxDQUFDUSxRQWRXO0FBZTNCQyxVQUFBQSxRQUFRLEVBQUVULEtBQUssQ0FBQ1MsUUFmVztBQWdCM0JDLFVBQUFBLGNBQWMsRUFBRVYsS0FBSyxDQUFDVTtBQWhCSyxTQUEvQjtBQWtCQVIsUUFBQUEsV0FBVyxHQUFHLEtBQUs3RCxzQkFBTCxDQUE0QjZELFdBQTVCLENBQWQ7QUFDQSxlQUFPLEtBQUsvRCxTQUFMLENBQWVZLFFBQWYsRUFBeUJtRCxXQUF6QixDQUFQO0FBQ0g7QUFDSixLQWpDRDs7QUFrQ0EsV0FBT0gsZ0JBQVA7QUFDSDs7QUExTDBDOzs7O0FBNkx4QyxNQUFNMUIsU0FBTixTQUF3QkcsS0FBeEIsQ0FBOEI7QUFHMUJ4RSxFQUFBQSxXQUFXLENBQUN1RSxPQUFELEVBQWtCb0MsVUFBbEIsRUFBc0M7QUFDcEQsVUFBTXBDLE9BQU47QUFEb0QsU0FGeENvQyxVQUV3QztBQUVwRCxTQUFLQyxJQUFMLEdBQVksV0FBWjtBQUNBLFNBQUtELFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0g7O0FBUGdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIE5vdFN1cHBvcnRlZEVycm9yIH0gZnJvbSBcIi4uL0Vycm9yc1wiO1xuXG5pbXBvcnQgeyBGZXRjaCB9IGZyb20gXCIuL0ZldGNoSW1wbGVtZW50YXRpb24vRmV0Y2hcIjtcbmltcG9ydCB7XG4gICAgSHR0cFN0YXR1c0NvZGUsXG4gICAgSUh0dHBDbGllbnQsXG4gICAgSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcixcbiAgICBJSHR0cENsaWVudFJlc3BvbnNlLFxuICAgIFF1ZXJ5UGFyYW1zT2JqZWN0LFxufSBmcm9tIFwiLi9JSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi9IdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlclwiO1xuXG5mdW5jdGlvbiB0cmltVHJhaWxpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zbGljZSgtMSkgPT09IFwiL1wiID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbn1cblxuZnVuY3Rpb24gdHJpbUxlYWRpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybFswXSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMSkgOiB1cmw7XG59XG5cbnR5cGUgQm9keUZhY3RvcnkgPSAoKSA9PiBCb2R5SW5pdCB8IG51bGw7XG5cbmludGVyZmFjZSBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAgIGJvZHlGYWN0b3J5PzogQm9keUZhY3Rvcnk7XG4gICAgYWNjZXB0Q29kZXM6IEh0dHBTdGF0dXNDb2RlW107XG4gICAgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zT2JqZWN0O1xuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudFJlc3BvbnNlIGltcGxlbWVudHMgSUh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmZXRjaFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihmZXRjaFJlc3BvbnNlOiBSZXNwb25zZSkge1xuICAgICAgICB0aGlzLmZldGNoUmVzcG9uc2UgPSBmZXRjaFJlc3BvbnNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhdHVzKCk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSZXNwb25zZS5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGpzb248VD4oKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2hSZXNwb25zZS5qc29uKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhO1xuICAgIH1cbn1cblxudHlwZSBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24gPSAoY29uZmlnOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcpID0+IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlIHwgUmVzcG9uc2U+O1xuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIGltcGxlbWVudHMgSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRlUmVxdWVzdDogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWNjZXB0Q29kZXM6IEh0dHBTdGF0dXNDb2RlW10gPSBbXTtcbiAgICBwcml2YXRlIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuICAgIHByaXZhdGUgc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbDtcbiAgICBwcml2YXRlIGJvZHlGYWN0b3J5PzogQm9keUZhY3Rvcnk7XG4gICAgcHJpdmF0ZSBjb250ZW50VHlwZT86IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihleGVjdXRlOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5leGVjdXRlUmVxdWVzdCA9IGV4ZWN1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBYm9ydFNpZ25hbChzaWduYWw6IHVuZGVmaW5lZCB8IEFib3J0U2lnbmFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuc2lnbmFsID0gc2lnbmFsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEJvZHlGcm9tQnVmZmVyKGJvZHk6IGZhbHNlIHwgQnVmZmVyIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChib2R5ID09PSBmYWxzZSB8fCBib2R5ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5RmFjdG9yeSA9ICgpID0+IGJvZHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSnNvbkJvZHkoc2VyaWFsaXphYmxlQm9keTogdW5rbm93biB8IHt9IHwgdW5rbm93bltdIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChzZXJpYWxpemFibGVCb2R5ICE9PSBmYWxzZSAmJiBzZXJpYWxpemFibGVCb2R5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5ib2R5RmFjdG9yeSA9ICgpID0+IEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6YWJsZUJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zT2JqZWN0IHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgLi4ucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmF3Qm9keShib2R5OiBCdWZmZXIgfCBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSAhPT0gZmFsc2UgJiYgYm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzO1xuICAgICAgICByZXR1cm4gcmVzdWx0Lmpzb248VD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWNjZXB0Q29kZShjb2RlOiBIdHRwU3RhdHVzQ29kZSk6IHRoaXMge1xuICAgICAgICB0aGlzLmFjY2VwdENvZGVzLnB1c2goY29kZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkb25seSB0aGVuOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZT5bXCJ0aGVuXCJdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVSZXF1ZXN0KHRoaXMuY3JlYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEh0dHBDbGllbnRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSHR0cENsaWVudFJlc3BvbnNlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJldHVybiByZXN1bHRQcm9taXNlLnRoZW4oLi4uYXJncyk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZmlnKCk6IElIdHRwQ2xpZW50UmVxdWVzdENvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxuICAgICAgICAgICAgYm9keUZhY3Rvcnk6IHRoaXMuYm9keUZhY3RvcnksXG4gICAgICAgICAgICBhY2NlcHRDb2RlczogdGhpcy5hY2NlcHRDb2RlcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHRoaXMuY29udGVudFR5cGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoZm46IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbik6IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiBuZXcgSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyKGZuKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50IGltcGxlbWVudHMgSUh0dHBDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hJbXBsOiBGZXRjaDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0ID0ge307XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHVuZGVmaW5lZCB8IHN0cmluZyxcbiAgICAgICAgYXV0aGVudGljYXRpb25Qcm92aWRlcjogSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIsXG4gICAgICAgIGRlZmF1bHRRdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0XG4gICAgKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hJbXBsID0gZmV0Y2hJbXBsO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID09IHVuZGVmaW5lZCA/IGJhc2VVcmwgOiB0cmltVHJhaWxpbmdTbGFzaChiYXNlVXJsKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UGFyYW1zID0gZGVmYXVsdFF1ZXJ5UGFyYW1zO1xuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgPSBhdXRoZW50aWNhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiR0VUXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3QodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiUE9TVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwdXQodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiUFVUXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhdGNoKHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBBVENIXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZSh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJERUxFVEVcIikodXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ldGhvZChtZXRob2Q6IFwiR0VUXCIgfCBcIlBPU1RcIiB8IFwiUFVUXCIgfCBcIlBBVENIXCIgfCBcIkRFTEVURVwiKTogKHVybDogc3RyaW5nKSA9PiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuICh1cmw6IHN0cmluZykgPT5cbiAgICAgICAgICAgIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlci5jcmVhdGUoYXN5bmMgY29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKHVybCwgY29uZmlnLnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKHsgbWV0aG9kOiBtZXRob2QgfSwgY29uZmlnLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsID0gY29uZmlnLnNpZ25hbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5ib2R5RmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtZXRob2RcIiwgXCJCb2R5IGlzIG5vdCBhbGxvd2VkIGZvciBHRVQgcmVxdWVzdHNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gY29uZmlnLmJvZHlGYWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGwoZmV0Y2hVcmwsIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tTdGF0dXMocmVzcG9uc2UsIGNvbmZpZy5hY2NlcHRDb2Rlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmREZWZhdWx0UmVxdWVzdEhlYWRlcnMob3B0aW9uczogUmVxdWVzdEluaXQsIGNvbnRlbnRUeXBlPzogdW5kZWZpbmVkIHwgc3RyaW5nKTogUmVxdWVzdEluaXQge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IGNvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gXCJuby1jYWNoZSwgbm8tc3RvcmVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiUHJhZ21hXCJdID0gXCJuby1jYWNoZVwiO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJFeHBpcmVzXCJdID0gXCIwXCI7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHVuZGVmaW5lZCB8IFF1ZXJ5UGFyYW1zT2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHBhdGg7XG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmJhc2VVcmwgKyBcIi9cIiArIHRyaW1MZWFkaW5nU2xhc2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRQYXJhbXMgPSB7IC4uLnRoaXMuZGVmYXVsdFBhcmFtcywgLi4ucGFyYW1zIH07XG4gICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiP1wiKSAmJiBwYXJhbXMgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKHJlc3VsdFBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKGBQYXNzaW5nIHNlYXJjaCBwYXJhbXMgaW4gdXJsIGFuZCB2aWEgcGFyYW1zIG9iamVjdCBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgdGhpcy5jcmVhdGVRdWVyeVN0cmluZyhyZXN1bHRQYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlLCBhY2NlcHRDb2Rlcz86IEh0dHBTdGF0dXNDb2RlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCEocmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHx8IChhY2NlcHRDb2RlcyA/PyBbXSkuaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgbGV0IHNlcnZlclJlc3BvbnNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZSA9IEpTT04ucGFyc2UoZXJyb3JUZXh0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXJ2ZXJSZXNwb25zZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZS5NZXNzYWdlID8/IHNlcnZlclJlc3BvbnNlLm1lc3NhZ2UgPz8gc2VydmVyUmVzcG9uc2UuRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKGVycm9yVGV4dCwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0U3luYyh1cmw6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCwgZGF0YToge30pOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5vcGVuKFwiUE9TVFwiLCB0aGlzLnVybCh1cmwsIHBhcmFtcyksIGZhbHNlKTtcbiAgICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04XCIpO1xuICAgICAgICByZXF1ZXN0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICByZXR1cm4gcmVxdWVzdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlUGFyYW1WYWx1ZVN0cmluZyhwYXJhbTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUXVlcnlTdHJpbmcocGFyYW1zPzogUXVlcnlQYXJhbXNPYmplY3QpOiBzdHJpbmcge1xuICAgICAgICBpZiAocGFyYW1zID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zMiA9IHBhcmFtcztcbiAgICAgICAgbGV0IHJlc3VsdCA9IE9iamVjdC5rZXlzKHBhcmFtcylcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtczJba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgaXRlbS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHggPT4geCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgPyBcIj9cIiArIHJlc3VsdCA6IFwiXCI7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZldGNoSW1wbCgpOiBGZXRjaCB7XG4gICAgICAgIGNvbnN0IGZldGNoV2l0aE9wdGlvbnMgPSAoaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0PzogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybChpbnB1dCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBpbml0ID0gaW5pdCA/PyB7fTtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnMgPSBpbml0LmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiUHJhZ21hXCJdID0gXCJuby1jYWNoZVwiO1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVyc1tcIkV4cGlyZXNcIl0gPSBcIjBcIjtcbiAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKGluaXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoSW1wbChmZXRjaFVybCwgaW5pdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZldGNoVXJsID0gdGhpcy51cmwoaW5wdXQudXJsLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0SW5pdDogUmVxdWVzdEluaXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIkNhY2hlLUNvbnRyb2xcIl06IFwibm8tY2FjaGUsIG5vLXN0b3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJQcmFnbWFcIl06IFwibm8tY2FjaGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIkV4cGlyZXNcIl06IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaW5wdXQuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBpbnB1dC5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlOiBpbnB1dC5jYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IGlucHV0LmNyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IGlucHV0LmludGVncml0eSxcbiAgICAgICAgICAgICAgICAgICAga2VlcGFsaXZlOiBpbnB1dC5rZWVwYWxpdmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogaW5wdXQubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBpbnB1dC5tb2RlLFxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogaW5wdXQucmVkaXJlY3QsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVycmVyOiBpbnB1dC5yZWZlcnJlcixcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IGlucHV0LnJlZmVycmVyUG9saWN5LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxdWVzdEluaXQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIocmVxdWVzdEluaXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoSW1wbChmZXRjaFVybCwgcmVxdWVzdEluaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmV0Y2hXaXRoT3B0aW9ucztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlcikge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJIdHRwRXJyb3JcIjtcbiAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcbiAgICB9XG59XG4iXX0=
@@ -3,8 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
8
- return a;
9
- };
10
6
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXX0=
@@ -3,8 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
-
7
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
8
- return a;
9
- };
10
6
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXX0=
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.indent = indent;
7
+
8
+ function indent(str, count) {
9
+ const indentStr = new Array(count * 2).fill(" ").join("");
10
+ return str.split("\n").map(x => {
11
+ if (x === "") {
12
+ return x;
13
+ }
14
+
15
+ return indentStr + x;
16
+ }).join("\n");
17
+ }
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JbmRlbnRTdHJpbmcudHMiXSwibmFtZXMiOlsiaW5kZW50Iiwic3RyIiwiY291bnQiLCJpbmRlbnRTdHIiLCJBcnJheSIsImZpbGwiLCJqb2luIiwic3BsaXQiLCJtYXAiLCJ4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQU8sU0FBU0EsTUFBVCxDQUFnQkMsR0FBaEIsRUFBNkJDLEtBQTdCLEVBQW9EO0FBQ3ZELFFBQU1DLFNBQVMsR0FBRyxJQUFJQyxLQUFKLENBQVVGLEtBQUssR0FBRyxDQUFsQixFQUFxQkcsSUFBckIsQ0FBMEIsR0FBMUIsRUFBK0JDLElBQS9CLENBQW9DLEVBQXBDLENBQWxCO0FBQ0EsU0FBT0wsR0FBRyxDQUNMTSxLQURFLENBQ0ksSUFESixFQUVGQyxHQUZFLENBRUVDLENBQUMsSUFBSTtBQUNOLFFBQUlBLENBQUMsS0FBSyxFQUFWLEVBQWM7QUFDVixhQUFPQSxDQUFQO0FBQ0g7O0FBQ0QsV0FBT04sU0FBUyxHQUFHTSxDQUFuQjtBQUNILEdBUEUsRUFRRkgsSUFSRSxDQVFHLElBUkgsQ0FBUDtBQVNIIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGluZGVudChzdHI6IHN0cmluZywgY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZW50U3RyID0gbmV3IEFycmF5KGNvdW50ICogMikuZmlsbChcIiBcIikuam9pbihcIlwiKTtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAubWFwKHggPT4ge1xuICAgICAgICAgICAgaWYgKHggPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbmRlbnRTdHIgKyB4O1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIlxcblwiKTtcbn1cbiJdfQ==
@@ -7,15 +7,6 @@ exports.clamp = clamp;
7
7
  exports.clampUInt = clampUInt;
8
8
  exports.sign = sign;
9
9
 
10
- (function () {
11
- var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
12
- enterModule && enterModule(module);
13
- })();
14
-
15
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
16
- return a;
17
- };
18
-
19
10
  function clamp(value, min, max) {
20
11
  if (value > max) {
21
12
  return max;
@@ -45,25 +36,4 @@ function sign(value) {
45
36
 
46
37
  return 0;
47
38
  }
48
-
49
- ;
50
-
51
- (function () {
52
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
53
-
54
- if (!reactHotLoader) {
55
- return;
56
- }
57
-
58
- reactHotLoader.register(clamp, "clamp", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IntRangeUtils.ts");
59
- reactHotLoader.register(clampUInt, "clampUInt", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IntRangeUtils.ts");
60
- reactHotLoader.register(sign, "sign", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IntRangeUtils.ts");
61
- })();
62
-
63
- ;
64
-
65
- (function () {
66
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
67
- leaveModule && leaveModule(module);
68
- })();
69
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JbnRSYW5nZVV0aWxzLnRzIl0sIm5hbWVzIjpbImNsYW1wIiwidmFsdWUiLCJtaW4iLCJtYXgiLCJjbGFtcFVJbnQiLCJyZXN1bHQiLCJzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZTyxTQUFTQSxLQUFULENBQWVDLEtBQWYsRUFBOEJDLEdBQTlCLEVBQTJDQyxHQUEzQyxFQUFnRTtBQUNuRSxNQUFJRixLQUFLLEdBQUdFLEdBQVosRUFBaUI7QUFDYixXQUFPQSxHQUFQO0FBQ0g7O0FBQ0QsTUFBSUYsS0FBSyxHQUFHQyxHQUFaLEVBQWlCO0FBQ2IsV0FBT0EsR0FBUDtBQUNIOztBQUNELFNBQU9ELEtBQVA7QUFDSDs7QUFFTSxTQUFTRyxTQUFULENBQ0hILEtBREcsRUFFSEMsR0FGRyxFQUdIQyxHQUhHLEVBSW9CO0FBQ3ZCLFFBQU1FLE1BQWMsR0FBR0wsS0FBSyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYUMsR0FBYixDQUE1QixDQUR1QixDQUV2Qjs7QUFDQSxTQUFPRSxNQUFQO0FBQ0g7O0FBRU0sU0FBU0MsSUFBVCxDQUFjTCxLQUFkLEVBQXlDO0FBQzVDLE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQUMsQ0FBUjtBQUNIOztBQUNELE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQVA7QUFDSDs7QUFDRCxTQUFPLENBQVA7QUFDSDs7Ozs7Ozs7Ozs7MEJBNUJlRCxLOzBCQVVBSSxTOzBCQVVBRSxJIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBMZW5ndGg8VCBleHRlbmRzIHVua25vd25bXT4gPSBUIGV4dGVuZHMgeyBsZW5ndGg6IGluZmVyIEwgfSA/IChMIGV4dGVuZHMgbnVtYmVyID8gTCA6IG5ldmVyKSA6IG5ldmVyO1xuXG50eXBlIEJ1aWxkVHVwbGU8TCBleHRlbmRzIG51bWJlciwgVCBleHRlbmRzIHVua25vd25bXSA9IFtdPiA9IFQgZXh0ZW5kcyB7IGxlbmd0aDogTCB9XG4gICAgPyBUXG4gICAgOiBCdWlsZFR1cGxlPEwsIFsuLi5ULCB1bmtub3duXT47XG5cbnR5cGUgQWRkPEEgZXh0ZW5kcyBudW1iZXIsIEIgZXh0ZW5kcyBudW1iZXI+ID0gTGVuZ3RoPFsuLi5CdWlsZFR1cGxlPEE+LCAuLi5CdWlsZFR1cGxlPEI+XT47XG5cbmV4cG9ydCB0eXBlIEludFJhbmdlPFRNaW4gZXh0ZW5kcyBudW1iZXIsIFRNYXggZXh0ZW5kcyBudW1iZXI+ID0gVE1pbiBleHRlbmRzIFRNYXhcbiAgICA/IFRNaW5cbiAgICA6IFRNaW4gfCBJbnRSYW5nZTxBZGQ8VE1pbiwgMT4sIFRNYXg+O1xuXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gICAgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wVUludDxUTGVmdCBleHRlbmRzIG51bWJlciwgVFJpZ2h0IGV4dGVuZHMgbnVtYmVyPihcbiAgICB2YWx1ZTogbnVtYmVyLFxuICAgIG1pbjogVExlZnQsXG4gICAgbWF4OiBUUmlnaHRcbik6IEludFJhbmdlPFRMZWZ0LCBUUmlnaHQ+IHtcbiAgICBjb25zdCByZXN1bHQ6IG51bWJlciA9IGNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduKHZhbHVlOiBudW1iZXIpOiAtMSB8IDAgfCAxIHtcbiAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID4gMCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JbnRSYW5nZVV0aWxzLnRzIl0sIm5hbWVzIjpbImNsYW1wIiwidmFsdWUiLCJtaW4iLCJtYXgiLCJjbGFtcFVJbnQiLCJyZXN1bHQiLCJzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZTyxTQUFTQSxLQUFULENBQWVDLEtBQWYsRUFBOEJDLEdBQTlCLEVBQTJDQyxHQUEzQyxFQUFnRTtBQUNuRSxNQUFJRixLQUFLLEdBQUdFLEdBQVosRUFBaUI7QUFDYixXQUFPQSxHQUFQO0FBQ0g7O0FBQ0QsTUFBSUYsS0FBSyxHQUFHQyxHQUFaLEVBQWlCO0FBQ2IsV0FBT0EsR0FBUDtBQUNIOztBQUNELFNBQU9ELEtBQVA7QUFDSDs7QUFFTSxTQUFTRyxTQUFULENBQ0hILEtBREcsRUFFSEMsR0FGRyxFQUdIQyxHQUhHLEVBSW9CO0FBQ3ZCLFFBQU1FLE1BQWMsR0FBR0wsS0FBSyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYUMsR0FBYixDQUE1QixDQUR1QixDQUV2Qjs7QUFDQSxTQUFPRSxNQUFQO0FBQ0g7O0FBRU0sU0FBU0MsSUFBVCxDQUFjTCxLQUFkLEVBQXlDO0FBQzVDLE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQUMsQ0FBUjtBQUNIOztBQUNELE1BQUlBLEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDWCxXQUFPLENBQVA7QUFDSDs7QUFDRCxTQUFPLENBQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgTGVuZ3RoPFQgZXh0ZW5kcyB1bmtub3duW10+ID0gVCBleHRlbmRzIHsgbGVuZ3RoOiBpbmZlciBMIH0gPyAoTCBleHRlbmRzIG51bWJlciA/IEwgOiBuZXZlcikgOiBuZXZlcjtcblxudHlwZSBCdWlsZFR1cGxlPEwgZXh0ZW5kcyBudW1iZXIsIFQgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSBUIGV4dGVuZHMgeyBsZW5ndGg6IEwgfVxuICAgID8gVFxuICAgIDogQnVpbGRUdXBsZTxMLCBbLi4uVCwgdW5rbm93bl0+O1xuXG50eXBlIEFkZDxBIGV4dGVuZHMgbnVtYmVyLCBCIGV4dGVuZHMgbnVtYmVyPiA9IExlbmd0aDxbLi4uQnVpbGRUdXBsZTxBPiwgLi4uQnVpbGRUdXBsZTxCPl0+O1xuXG5leHBvcnQgdHlwZSBJbnRSYW5nZTxUTWluIGV4dGVuZHMgbnVtYmVyLCBUTWF4IGV4dGVuZHMgbnVtYmVyPiA9IFRNaW4gZXh0ZW5kcyBUTWF4XG4gICAgPyBUTWluXG4gICAgOiBUTWluIHwgSW50UmFuZ2U8QWRkPFRNaW4sIDE+LCBUTWF4PjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA8IG1pbikge1xuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFVJbnQ8VExlZnQgZXh0ZW5kcyBudW1iZXIsIFRSaWdodCBleHRlbmRzIG51bWJlcj4oXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBtaW46IFRMZWZ0LFxuICAgIG1heDogVFJpZ2h0XG4pOiBJbnRSYW5nZTxUTGVmdCwgVFJpZ2h0PiB7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXIgPSBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbih2YWx1ZTogbnVtYmVyKTogLTEgfCAwIHwgMSB7XG4gICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuIl19
@@ -17,15 +17,6 @@ var _TypingUtils = require("./TypingUtils");
17
17
 
18
18
  var _Errors = require("./Errors");
19
19
 
20
- (function () {
21
- var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;
22
- enterModule && enterModule(module);
23
- })();
24
-
25
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
26
- return a;
27
- };
28
-
29
20
  function* reverseArray(array) {
30
21
  for (let i = array.length - 1; i >= 0; i--) {
31
22
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -102,6 +93,23 @@ class IterUtils {
102
93
  return true;
103
94
  }
104
95
 
96
+ static groupBy(iterable, selectKey) {
97
+ const result = new Map();
98
+
99
+ for (const item of iterable) {
100
+ const key = selectKey(item);
101
+ const keyList = result.get(key);
102
+
103
+ if (keyList == undefined) {
104
+ result.set(key, [item]);
105
+ } else {
106
+ keyList.push(item);
107
+ }
108
+ }
109
+
110
+ return result;
111
+ }
112
+
105
113
  static sortBy(items, selector) {
106
114
  const result = [...items];
107
115
  result.sort((aItem, bItem) => {
@@ -320,32 +328,4 @@ class IterUtils {
320
328
  exports.IterUtils = IterUtils;
321
329
  IterUtils.count = count;
322
330
  IterUtils.concat = concat;
323
- ;
324
-
325
- (function () {
326
- var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;
327
-
328
- if (!reactHotLoader) {
329
- return;
330
- }
331
-
332
- reactHotLoader.register(reverseArray, "reverseArray", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
333
- reactHotLoader.register(toAsyncIterator, "toAsyncIterator", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
334
- reactHotLoader.register(findLast, "findLast", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
335
- reactHotLoader.register(concat, "concat", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
336
- reactHotLoader.register(iterateValues, "iterateValues", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
337
- reactHotLoader.register(iterateKeys, "iterateKeys", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
338
- reactHotLoader.register(iterateEntries, "iterateEntries", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
339
- reactHotLoader.register(count, "count", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
340
- reactHotLoader.register(EmptySingleElement, "EmptySingleElement", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
341
- reactHotLoader.register(NoValueMarker, "NoValueMarker", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
342
- reactHotLoader.register(IterUtils, "IterUtils", "C:\\buildAgent\\work\\8df8f1edd755969c\\Common\\IterableUtils.ts");
343
- })();
344
-
345
- ;
346
-
347
- (function () {
348
- var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;
349
- leaveModule && leaveModule(module);
350
- })();
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzLnRzIl0sIm5hbWVzIjpbInJldmVyc2VBcnJheSIsImFycmF5IiwiaSIsImxlbmd0aCIsInRvQXN5bmNJdGVyYXRvciIsImdlbmVyYXRvciIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwiZmluZExhc3QiLCJpdGVtcyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIml0ZW0iLCJjb25jYXQiLCJpdGVyYWJsZXMiLCJpdGVyYWJsZUl0ZW0iLCJpdGVyYXRlVmFsdWVzIiwib2JqIiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaXRlcmF0ZUtleXMiLCJpdGVyYXRlRW50cmllcyIsImNvdW50IiwiX2l0ZW0iLCJFbXB0eVNpbmdsZUVsZW1lbnQiLCJTeW1ib2wiLCJmb3IiLCJOb1ZhbHVlTWFya2VyIiwiSXRlclV0aWxzIiwiaXNFbXB0eSIsIml0ZXJhYmxlIiwic29ydEJ5Iiwic2VsZWN0b3IiLCJzb3J0IiwiYUl0ZW0iLCJiSXRlbSIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJsYXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibGFzdEl0ZW0iLCJmaXJzdCIsImZpcnN0SXRlbSIsInNpbmdsZSIsInNpbmdsZUFzc2VydE1lc3NhZ2UiLCJFcnJvciIsInNpbmdsZUVsZW1lbnQiLCJpbmRleCIsInNraXBMYXN0Iiwic2tpcENvdW50IiwicHJldkl0ZW1zIiwiZmlsbCIsInJlc3VsdEl0ZW0iLCJjdXJyZW50SW5kZXgiLCJtaW5CeSIsImNvbXBhcmVGdW5jIiwibWluVmFsdWUiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1pbkJ5T3JVbmRlZmluZWQiLCJ1bmRlZmluZWQiLCJyYW5nZSIsImluU3RhcnRPckNvdW50IiwiaW5JdGVtQ291bnQiLCJzdGFydCIsIml0ZW1Db3VudCIsImludGVyc3BlcnNlIiwiaW50ZXJzcGVyc2VGbiIsImZsYXRNYXAiLCJ4IiwiemlwIiwiaXRlcmF0b3JzIiwibWFwIiwiaXQiLCJJdGVyYXRvciIsImhhc1VuZG9uZUl0ZXJhdG9ycyIsInJlc3VsdEVudHJ5IiwiaXRlcmF0b3IiLCJwdXNoIiwicmVzdWx0VmFsdWUiLCJuZXh0IiwiZG9uZSIsInZhbHVlIiwiZGlzdGluY3RCeSIsImlkU2VsZWN0b3IiLCJzZXQiLCJTZXQiLCJpZCIsImhhcyIsImFkZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7Ozs7Ozs7Ozs7O0FBRU8sVUFBVUEsWUFBVixDQUEwQkMsS0FBMUIsRUFBb0U7QUFDdkUsT0FBSyxJQUFJQyxDQUFDLEdBQUdELEtBQUssQ0FBQ0UsTUFBTixHQUFlLENBQTVCLEVBQStCRCxDQUFDLElBQUksQ0FBcEMsRUFBdUNBLENBQUMsRUFBeEMsRUFBNEM7QUFDeEM7QUFDQSxVQUFNRCxLQUFLLENBQUNDLENBQUQsQ0FBWDtBQUNIO0FBQ0o7O0FBRU0sU0FBU0UsZUFBVCxDQUE0QkMsU0FBNUIsRUFBMEY7QUFDN0YsU0FBT0MsYUFBYSxDQUFDQyxJQUFkLENBQW1CRixTQUFTLEVBQTVCLENBQVA7QUFDSDs7QUFFTSxTQUFTRyxRQUFULENBQXFCQyxLQUFyQixFQUF5Q0MsU0FBekMsRUFBeUY7QUFDNUYsTUFBSUMsTUFBSjs7QUFDQSxPQUFLLE1BQU1DLElBQVgsSUFBbUJILEtBQW5CLEVBQTBCO0FBQ3RCLFFBQUlDLFNBQVMsQ0FBQ0UsSUFBRCxDQUFiLEVBQXFCO0FBQ2pCRCxNQUFBQSxNQUFNLEdBQUdDLElBQVQ7QUFDSDtBQUNKOztBQUNELFNBQU9ELE1BQVA7QUFDSDs7QUFFTSxVQUFVRSxNQUFWLENBQW9CLEdBQUdDLFNBQXZCLEVBQTJFO0FBQzlFLE9BQUssTUFBTUMsWUFBWCxJQUEyQkQsU0FBM0IsRUFBc0M7QUFDbEMsV0FBT0MsWUFBUDtBQUNIO0FBQ0o7O0FBRU0sVUFBVUMsYUFBVixDQUFpRUMsR0FBakUsRUFBeUc7QUFDNUcsT0FBSyxNQUFNQyxHQUFYLElBQWtCRCxHQUFsQixFQUF1QjtBQUNu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QUlELFdBQVcsQ0FBQ0UsSUFBaEIsRUFBc0I7QUFDbEJMLFlBQUFBLFdBQVcsQ0FBQ0UsSUFBWixDQUFpQmxCLFNBQWpCO0FBQ0FXLFlBQUFBLFNBQVMsQ0FBQ3hFLENBQUQsQ0FBVCxHQUFlNEIsYUFBZjtBQUNILFdBSEQsTUFHTztBQUNIaUQsWUFBQUEsV0FBVyxDQUFDRSxJQUFaLENBQWlCQyxXQUFXLENBQUNHLEtBQTdCO0FBQ0FQLFlBQUFBLGtCQUFrQixHQUFHLElBQXJCO0FBQ0g7QUFDSjtBQUNKOztBQUNELFVBQUlBLGtCQUFKLEVBQXdCO0FBQ3BCLGNBQU1DLFdBQU47QUFDSDtBQUNKO0FBQ0o7O0FBRXdCLFVBQVZPLFVBQVUsQ0FBSTdFLEtBQUosRUFBd0I4RSxVQUF4QixFQUFzRTtBQUMzRixVQUFNQyxHQUFHLEdBQUcsSUFBSUMsR0FBSixFQUFaOztBQUNBLFNBQUssTUFBTTdFLElBQVgsSUFBbUJILEtBQW5CLEVBQTBCO0FBQ3RCLFlBQU1pRixFQUFFLEdBQUdILFVBQVUsQ0FBQzNFLElBQUQsQ0FBckI7O0FBQ0EsVUFBSSxDQUFDNEUsR0FBRyxDQUFDRyxHQUFKLENBQVFELEVBQVIsQ0FBTCxFQUFrQjtBQUNkRixRQUFBQSxHQUFHLENBQUNJLEdBQUosQ0FBUUYsRUFBUjtBQUNBLGNBQU05RSxJQUFOO0FBQ0g7QUFDSjtBQUNKOztBQTFNa0I7OztBQUFWbUIsUyxDQUNLTixLLEdBQVFBLEs7QUFEYk0sUyxDQUVLbEIsTSxHQUFTQSxNOzs7Ozs7Ozs7OzBCQXZFVmIsWTswQkFPREksZTswQkFJQUksUTswQkFVQ0ssTTswQkFNQUcsYTswQkFXQU8sVzswQkFXQUMsYzswQkFTREMsSzswQkFRVkUsa0I7MEJBQ0FHLGE7MEJBRU9DLFMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNaW5MZW5ndGhBcnJheSwgcmVqZWN0IH0gZnJvbSBcIi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IENvbXBhcmVGdW5jIH0gZnJvbSBcIi4vQ29tcGFyZXJzXCI7XG5pbXBvcnQgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9IGZyb20gXCIuL0Vycm9yc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24qIHJldmVyc2VBcnJheTxUPihhcnJheTogcmVhZG9ubHkgVFtdKTogSXRlcmFibGVJdGVyYXRvcjxUPiB7XG4gICAgZm9yIChsZXQgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIHlpZWxkIGFycmF5W2ldITtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0FzeW5jSXRlcmF0b3I8VD4oZ2VuZXJhdG9yOiAoKSA9PiBBc3luY0dlbmVyYXRvcjxUPik6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxUPiB7XG4gICAgcmV0dXJuIEFzeW5jSXRlcmF0b3IuZnJvbShnZW5lcmF0b3IoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTGFzdDxUPihpdGVtczogSXRlcmFibGU8VD4sIGNvbmRpdGlvbjogKGl0ZW06IFQpID0+IGJvb2xlYW4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVzdWx0OiBUIHwgdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICBpZiAoY29uZGl0aW9uKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBpdGVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY29uY2F0PFQ+KC4uLml0ZXJhYmxlczogQXJyYXk8SXRlcmFibGU8VD4+KTogSXRlcmFibGVJdGVyYXRvcjxUPiB7XG4gICAgZm9yIChjb25zdCBpdGVyYWJsZUl0ZW0gb2YgaXRlcmFibGVzKSB7XG4gICAgICAgIHlpZWxkKiBpdGVyYWJsZUl0ZW07XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJhdGVWYWx1ZXM8VEsgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgfCBudW1iZXIsIFRWPihvYmo6IHsgW2tleSBpbiBUS106IFRWIH0pOiBJdGVyYWJsZTxUVj4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgeWllbGQgb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlS2V5czxUTz4ob2JqOiBSZWFkb25seTxUTz4pOiBJdGVyYWJsZTxFeHRyYWN0PGtleW9mIFRPLCBzdHJpbmc+PjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlS2V5czxUVj4ob2JqOiBSZWFkb25seTx7IFtrZXk6IHN0cmluZ106IFRWIH0+KTogSXRlcmFibGU8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlS2V5cyhvYmo6IFJlYWRvbmx5PHt9Pik6IEl0ZXJhYmxlPHN0cmluZz47XG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJhdGVLZXlzPFRLIGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sIHwgbnVtYmVyPihvYmo6IHsgW2tleSBpbiBUS106IHVua25vd24gfSk6IEl0ZXJhYmxlPFRLPiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB5aWVsZCBrZXk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllczxUTz4ob2JqOiBSZWFkb25seTxUTz4pOiBJdGVyYWJsZTxbRXh0cmFjdDxrZXlvZiBUTywgc3RyaW5nPiwgVE9ba2V5b2YgVE9dXT47XG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUVudHJpZXM8VFY+KG9iajogUmVhZG9ubHk8eyBba2V5OiBzdHJpbmddOiBUViB9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIFRWXT47XG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUVudHJpZXMob2JqOiBSZWFkb25seTx7fT4pOiBJdGVyYWJsZTxbc3RyaW5nLCB1bmtub3duXT47XG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJhdGVFbnRyaWVzPFRWPihvYmo6IFJlYWRvbmx5PHsgW2tleTogc3RyaW5nXTogVFYgfT4pOiBJdGVyYWJsZTxbc3RyaW5nLCBUVl0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICB5aWVsZCBba2V5LCBvYmpba2V5XSFdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY291bnQ8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+KTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBmb3IgKGNvbnN0IF9pdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIHJlc3VsdCsrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBFbXB0eVNpbmdsZUVsZW1lbnQgPSBTeW1ib2wuZm9yKFwiRW1wdHlTaW5nbGVFbGVtZW50XCIpO1xuY29uc3QgTm9WYWx1ZU1hcmtlciA9IFN5bWJvbC5mb3IoXCJOb1ZhbHVlTWFya2VyXCIpO1xuXG5leHBvcnQgY2xhc3MgSXRlclV0aWxzIHtcbiAgICBwdWJsaWMgc3RhdGljIGNvdW50ID0gY291bnQ7XG4gICAgcHVibGljIHN0YXRpYyBjb25jYXQgPSBjb25jYXQ7XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzRW1wdHk8VD4oaXRlcmFibGU6IEl0ZXJhYmxlPFQ+KTogYm9vbGVhbiB7XG4gICAgICAgIGZvciAoY29uc3QgX2l0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNvcnRCeTxUPihpdGVtczogcmVhZG9ubHkgVFtdLCBzZWxlY3RvcjogKGl0ZW06IFQpID0+IHN0cmluZyk6IFRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5pdGVtc107XG4gICAgICAgIHJlc3VsdC5zb3J0KChhSXRlbSwgYkl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRWYWx1ZSA9IHNlbGVjdG9yKGFJdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0VmFsdWUgPSBzZWxlY3RvcihiSXRlbSk7XG4gICAgICAgICAgICBpZiAobGVmdFZhbHVlID09PSByaWdodFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnRWYWx1ZSA8IHJpZ2h0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IE1pbkxlbmd0aEFycmF5PFQsIDE+KTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXN0SXRlbTogVCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBsYXN0SXRlbSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IE1pbkxlbmd0aEFycmF5PFQsIDE+KTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQ7XG4gICAgcHVibGljIHN0YXRpYyBmaXJzdDxUPihpdGVtczogSXRlcmFibGU8VD4gfCByZWFkb25seSBUW10pOiB1bmRlZmluZWQgfCBUIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpcnN0SXRlbTogVCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBmaXJzdEl0ZW0gPSBpdGVtO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0SXRlbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNpbmdsZTxUPihpdGVtczogcmVhZG9ubHkgVFtdIHwgSXRlcmFibGU8VD4sIHNpbmdsZUFzc2VydE1lc3NhZ2U/OiBzdHJpbmcpOiBUIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBc3NlcnRNZXNzYWdlID8/IGBTZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSBzaW5nbGUgZWxlbWVudCwgYnV0IGdvdCAke2l0ZW1zLmxlbmd0aH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtc1swXSA/PyByZWplY3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBzaW5nbGVFbGVtZW50OiBUIHwgdHlwZW9mIEVtcHR5U2luZ2xlRWxlbWVudCA9IEVtcHR5U2luZ2xlRWxlbWVudDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgICAgIGlmIChzaW5nbGVFbGVtZW50ICE9PSBFbXB0eVNpbmdsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlQXNzZXJ0TWVzc2FnZSA/PyBgU2VxdWVuY2UgbXVzdCBjb250YWluIGV4YWN0bHkgc2luZ2xlIGVsZW1lbnQsIGJ1dCBnb3QgYXQgbGVhc3QgMmBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2luZ2xlRWxlbWVudCA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2luZ2xlRWxlbWVudCA9PT0gRW1wdHlTaW5nbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNpbmdsZUFzc2VydE1lc3NhZ2UgPz8gXCJTZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSBzaW5nbGUgZWxlbWVudCwgYnV0IGdvdCAwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNpbmdsZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljICppdGVyYXRlRW50cmllczxUPihpdGVtczogcmVhZG9ubHkgVFtdIHwgVFtdIHwgSXRlcmFibGU8VD4pOiBJdGVyYWJsZTxbbnVtYmVyLCBUXT4ge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIHlpZWxkIFtpbmRleCwgaXRlbV07XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyAqc2tpcExhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+LCBza2lwQ291bnQ6IG51bWJlcik6IEl0ZXJhYmxlPFQ+IHtcbiAgICAgICAgaWYgKHNraXBDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgeWllbGQqIGl0ZW1zO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZJdGVtczogQXJyYXk8VCB8IHR5cGVvZiBFbXB0eVNpbmdsZUVsZW1lbnQ+ID0gbmV3IEFycmF5KHNraXBDb3VudCkuZmlsbChFbXB0eVNpbmdsZUVsZW1lbnQpO1xuICAgICAgICBsZXQgcmVzdWx0SXRlbTogVCB8IHR5cGVvZiBFbXB0eVNpbmdsZUVsZW1lbnQgPSBFbXB0eVNpbmdsZUVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Ig0JIg0L7QsdGJ0LXQvCwg0YHRgtGA0L7QutCwINCy0YvRiNC1INCz0LDRgNCw0L3RgtC40YDRg9C10YIg0LTQu9C40L3RgyDQvNCw0YHRgdC40LLQsFxuICAgICAgICAgICAgcmVzdWx0SXRlbSA9IHByZXZJdGVtc1tjdXJyZW50SW5kZXhdO1xuICAgICAgICAgICAgcHJldkl0ZW1zW2N1cnJlbnRJbmRleF0gPSBpdGVtO1xuICAgICAgICAgICAgY3VycmVudEluZGV4ID0gKGN1cnJlbnRJbmRleCArIDEpICUgc2tpcENvdW50O1xuICAgICAgICAgICAgaWYgKHJlc3VsdEl0ZW0gIT0gRW1wdHlTaW5nbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0SXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWluQnk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSB8IFRbXSB8IEl0ZXJhYmxlPFQ+LCBjb21wYXJlRnVuYzogQ29tcGFyZUZ1bmM8VD4pOiBUIHtcbiAgICAgICAgbGV0IG1pblZhbHVlOiB0eXBlb2YgTm9WYWx1ZU1hcmtlciB8IFQgPSBOb1ZhbHVlTWFya2VyO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUZ1bmMoaXRlbSwgbWluVmFsdWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIml0ZW1zXCIsIFwiSXRlbXMgc2hvdWxkIGJlIG5vdCBlbXB0eSBsaXN0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1pbkJ5T3JVbmRlZmluZWQ8VD4oXG4gICAgICAgIGl0ZW1zOiByZWFkb25seSBUW10gfCBUW10gfCBJdGVyYWJsZTxUPixcbiAgICAgICAgY29tcGFyZUZ1bmM6IENvbXBhcmVGdW5jPFQ+XG4gICAgKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBtaW5WYWx1ZTogdHlwZW9mIE5vVmFsdWVNYXJrZXIgfCBUID0gTm9WYWx1ZU1hcmtlcjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVGdW5jKGl0ZW0sIG1pblZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5WYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJhbmdlKGl0ZW1Db3VudDogbnVtYmVyKTogSXRlcmFibGU8bnVtYmVyPjtcbiAgICBwdWJsaWMgc3RhdGljIHJhbmdlKHN0YXJ0OiBudW1iZXIsIGl0ZW1Db3VudDogbnVtYmVyKTogSXRlcmFibGU8bnVtYmVyPjtcbiAgICBwdWJsaWMgc3RhdGljICpyYW5nZShpblN0YXJ0T3JDb3VudDogbnVtYmVyLCBpbkl0ZW1Db3VudD86IG51bWJlcik6IEl0ZXJhYmxlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluSXRlbUNvdW50ID09PSB1bmRlZmluZWQgPyAwIDogaW5TdGFydE9yQ291bnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1Db3VudCA9IGluSXRlbUNvdW50ID09PSB1bmRlZmluZWQgPyBpblN0YXJ0T3JDb3VudCA6IGluSXRlbUNvdW50O1xuICAgICAgICBpZiAoaXRlbUNvdW50IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiaXRlbUNvdW50XCIsIFwiaXRlbUNvdW50IG11c3QgYmUgYSBub24gbmVnYXRpdmUgbnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgaXRlbUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHlpZWxkIGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSDQktGB0YLQsNCy0LvRj9C10YIg0LzQtdC20LTRgyDRjdC70LXQvNC10L3RgtCw0LzQuCDQvNCw0YHRgdC40LLQsCDQt9Cw0LTQsNC90L3Ri9C5INGN0LvQtdC80LXQvdGCINC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC90L7QstGL0Lkg0LzQsNGB0YHQuNCyXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpbnRlcnNwZXJzZTxUSSwgVFM+KGl0ZW1zOiBUSVtdLCBpdGVtOiBUUyk6IEFycmF5PFRJIHwgVFM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJzcGVyc2VGbihpdGVtcywgKCkgPT4gaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkg0JLRgdGC0LDQstC70Y/QtdGCINC80LXQttC00YMg0Y3Qu9C10LzQtdC90YLQsNC80Lgg0LzQsNGB0YHQuNCy0LAg0Y3Qu9C10LzQtdC90YIsINGB0L7Qt9C00LDQstCw0LXQvNGL0Lkg0YTRg9C90LrRhtC40LXQuSwg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0L3QvtCy0YvQuSDQvNCw0YHRgdC40LJcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGludGVyc3BlcnNlRm48VEksIFRTPihpdGVtczogVElbXSwgaXRlbTogKG5leHRJdGVtOiBUSSwgaW5kZXg6IG51bWJlcikgPT4gVFMpOiBBcnJheTxUSSB8IFRTPiB7XG4gICAgICAgIHJldHVybiBpdGVtcy5mbGF0TWFwKCh4LCBpbmRleCkgPT4gKGluZGV4ID09PSAwID8gW3hdIDogW2l0ZW0oeCwgaW5kZXgpLCB4XSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgemlwPFQxLCBUMj4oaXRlbXMxOiBJdGVyYWJsZTxUMT4sIGl0ZW1zMjogSXRlcmFibGU8VDI+KTogSXRlcmFibGU8W1QxIHwgdW5kZWZpbmVkLCBUMiB8IHVuZGVmaW5lZF0+O1xuICAgIHB1YmxpYyBzdGF0aWMgKnppcCguLi5pdGVyYWJsZXM6IEFycmF5PEl0ZXJhYmxlPHVua25vd24+Pik6IEl0ZXJhYmxlPHVua25vd25bXT4ge1xuICAgICAgICBjb25zdCBpdGVyYXRvcnM6IEFycmF5PEl0ZXJhdG9yPHVua25vd24+IHwgdHlwZW9mIE5vVmFsdWVNYXJrZXI+ID0gaXRlcmFibGVzLm1hcChpdCA9PiBJdGVyYXRvci5mcm9tKGl0KSk7XG4gICAgICAgIGxldCBoYXNVbmRvbmVJdGVyYXRvcnMgPSB0cnVlO1xuICAgICAgICB3aGlsZSAoaGFzVW5kb25lSXRlcmF0b3JzKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRFbnRyeSA9IFtdO1xuICAgICAgICAgICAgaGFzVW5kb25lSXRlcmF0b3JzID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBpdGVyYXRvcl0gb2YgdGhpcy5pdGVyYXRlRW50cmllcyhpdGVyYXRvcnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdEVudHJ5LnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRWYWx1ZSA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFZhbHVlLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEVudHJ5LnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yc1tpXSA9IE5vVmFsdWVNYXJrZXI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRFbnRyeS5wdXNoKHJlc3VsdFZhbHVlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc1VuZG9uZUl0ZXJhdG9ycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzVW5kb25lSXRlcmF0b3JzKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0RW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljICpkaXN0aW5jdEJ5PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiwgaWRTZWxlY3RvcjogKGl0ZW06IFQpID0+IHN0cmluZyk6IEl0ZXJhYmxlPFQ+IHtcbiAgICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBpZFNlbGVjdG9yKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKCFzZXQuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgIHNldC5hZGQoaWQpO1xuICAgICAgICAgICAgICAgIHlpZWxkIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
331
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzLnRzIl0sIm5hbWVzIjpbInJldmVyc2VBcnJheSIsImFycmF5IiwiaSIsImxlbmd0aCIsInRvQXN5bmNJdGVyYXRvciIsImdlbmVyYXRvciIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwiZmluZExhc3QiLCJpdGVtcyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIml0ZW0iLCJjb25jYXQiLCJpdGVyYWJsZXMiLCJpdGVyYWJsZUl0ZW0iLCJpdGVyYXRlVmFsdWVzIiwib2JqIiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaXRlcmF0ZUtleXMiLCJpdGVyYXRlRW50cmllcyIsImNvdW50IiwiX2l0ZW0iLCJFbXB0eVNpbmdsZUVsZW1lbnQiLCJTeW1ib2wiLCJmb3IiLCJOb1ZhbHVlTWFya2VyIiwiSXRlclV0aWxzIiwiaXNFbXB0eSIsIml0ZXJhYmxlIiwiZ3JvdXBCeSIsInNlbGVjdEtleSIsIk1hcCIsImtleUxpc3QiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiLCJwdXNoIiwic29ydEJ5Iiwic2VsZWN0b3IiLCJzb3J0IiwiYUl0ZW0iLCJiSXRlbSIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJsYXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibGFzdEl0ZW0iLCJmaXJzdCIsImZpcnN0SXRlbSIsInNpbmdsZSIsInNpbmdsZUFzc2VydE1lc3NhZ2UiLCJFcnJvciIsInNpbmdsZUVsZW1lbnQiLCJpbmRleCIsInNraXBMYXN0Iiwic2tpcENvdW50IiwicHJldkl0ZW1zIiwiZmlsbCIsInJlc3VsdEl0ZW0iLCJjdXJyZW50SW5kZXgiLCJtaW5CeSIsImNvbXBhcmVGdW5jIiwibWluVmFsdWUiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1pbkJ5T3JVbmRlZmluZWQiLCJyYW5nZSIsImluU3RhcnRPckNvdW50IiwiaW5JdGVtQ291bnQiLCJzdGFydCIsIml0ZW1Db3VudCIsImludGVyc3BlcnNlIiwiaW50ZXJzcGVyc2VGbiIsImZsYXRNYXAiLCJ4IiwiemlwIiwiaXRlcmF0b3JzIiwibWFwIiwiaXQiLCJJdGVyYXRvciIsImhhc1VuZG9uZUl0ZXJhdG9ycyIsInJlc3VsdEVudHJ5IiwiaXRlcmF0b3IiLCJyZXN1bHRWYWx1ZSIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJkaXN0aW5jdEJ5IiwiaWRTZWxlY3RvciIsIlNldCIsImlkIiwiaGFzIiwiYWRkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFFTyxVQUFVQSxZQUFWLENBQTBCQyxLQUExQixFQUFvRTtBQUN2RSxPQUFLLElBQUlDLENBQUMsR0FBR0QsS0FBSyxDQUFDRSxNQUFOLEdBQWUsQ0FBNUIsRUFBK0JELENBQUMsSUFBSSxDQUFwQyxFQUF1Q0EsQ0FBQyxFQUF4QyxFQUE0QztBQUN4QztBQUNBLFVBQU1ELEtBQUssQ0FBQ0MsQ0FBRCxDQUFYO0FBQ0g7QUFDSjs7QUFFTSxTQUFTRSxlQUFULENBQTRCQyxTQUE1QixFQUEwRjtBQUM3RixTQUFPQyxhQUFhLENBQUNDLElBQWQsQ0FBbUJGLFNBQVMsRUFBNUIsQ0FBUDtBQUNIOztBQUVNLFNBQVNHLFFBQVQsQ0FBcUJDLEtBQXJCLEVBQXlDQyxTQUF6QyxFQUF5RjtBQUM1RixNQUFJQyxNQUFKOztBQUNBLE9BQUssTUFBTUMsSUFBWCxJQUFtQkgsS0FBbkIsRUFBMEI7QUFDdEIsUUFBSUMsU0FBUyxDQUFDRSxJQUFELENBQWIsRUFBcUI7QUFDakJELE1BQUFBLE1BQU0sR0FBR0MsSUFBVDtBQUNIO0FBQ0o7O0FBQ0QsU0FBT0QsTUFBUDtBQUNIOztBQUVNLFVBQVVFLE1BQVYsQ0FBb0IsR0FBR0MsU0FBdkIsRUFBMkU7QUFDOUUsT0FBSyxNQUFNQyxZQUFYLElBQTJCRCxTQUEzQixFQUFzQztBQUNsQyxXQUFPQyxZQUFQO0FBQ0g7QUFDSjs7QUFFTSxVQUFVQyxhQUFWLENBQWlFQyxHQUFqRSxFQUF5RztBQUM1RyxPQUFL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QUFFLEdBQUdGLFVBQVUsQ0FBQ2pGLElBQUQsQ0FBckI7O0FBQ0EsVUFBSSxDQUFDNEIsR0FBRyxDQUFDd0QsR0FBSixDQUFRRCxFQUFSLENBQUwsRUFBa0I7QUFDZHZELFFBQUFBLEdBQUcsQ0FBQ3lELEdBQUosQ0FBUUYsRUFBUjtBQUNBLGNBQU1uRixJQUFOO0FBQ0g7QUFDSjtBQUNKOztBQXpOa0I7OztBQUFWbUIsUyxDQUNLTixLLEdBQVFBLEs7QUFEYk0sUyxDQUVLbEIsTSxHQUFTQSxNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWluTGVuZ3RoQXJyYXksIHJlamVjdCB9IGZyb20gXCIuL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBDb21wYXJlRnVuYyB9IGZyb20gXCIuL0NvbXBhcmVyc1wiO1xuaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSBmcm9tIFwiLi9FcnJvcnNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uKiByZXZlcnNlQXJyYXk8VD4oYXJyYXk6IHJlYWRvbmx5IFRbXSk6IEl0ZXJhYmxlSXRlcmF0b3I8VD4ge1xuICAgIGZvciAobGV0IGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICB5aWVsZCBhcnJheVtpXSE7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Bc3luY0l0ZXJhdG9yPFQ+KGdlbmVyYXRvcjogKCkgPT4gQXN5bmNHZW5lcmF0b3I8VD4pOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4ge1xuICAgIHJldHVybiBBc3luY0l0ZXJhdG9yLmZyb20oZ2VuZXJhdG9yKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZExhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+LCBjb25kaXRpb246IChpdGVtOiBUKSA9PiBib29sZWFuKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogVCB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gaXRlbTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24qIGNvbmNhdDxUPiguLi5pdGVyYWJsZXM6IEFycmF5PEl0ZXJhYmxlPFQ+Pik6IEl0ZXJhYmxlSXRlcmF0b3I8VD4ge1xuICAgIGZvciAoY29uc3QgaXRlcmFibGVJdGVtIG9mIGl0ZXJhYmxlcykge1xuICAgICAgICB5aWVsZCogaXRlcmFibGVJdGVtO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyYXRlVmFsdWVzPFRLIGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sIHwgbnVtYmVyLCBUVj4ob2JqOiB7IFtrZXkgaW4gVEtdOiBUViB9KTogSXRlcmFibGU8VFY+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHlpZWxkIG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUtleXM8VE8+KG9iajogUmVhZG9ubHk8VE8+KTogSXRlcmFibGU8RXh0cmFjdDxrZXlvZiBUTywgc3RyaW5nPj47XG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUtleXM8VFY+KG9iajogUmVhZG9ubHk8eyBba2V5OiBzdHJpbmddOiBUViB9Pik6IEl0ZXJhYmxlPHN0cmluZz47XG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUtleXMob2JqOiBSZWFkb25seTx7fT4pOiBJdGVyYWJsZTxzdHJpbmc+O1xuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyYXRlS2V5czxUSyBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCB8IG51bWJlcj4ob2JqOiB7IFtrZXkgaW4gVEtdOiB1bmtub3duIH0pOiBJdGVyYWJsZTxUSz4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgeWllbGQga2V5O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUVudHJpZXM8VE8+KG9iajogUmVhZG9ubHk8VE8+KTogSXRlcmFibGU8W0V4dHJhY3Q8a2V5b2YgVE8sIHN0cmluZz4sIFRPW2tleW9mIFRPXV0+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVFbnRyaWVzPFRWPihvYmo6IFJlYWRvbmx5PHsgW2tleTogc3RyaW5nXTogVFYgfT4pOiBJdGVyYWJsZTxbc3RyaW5nLCBUVl0+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVFbnRyaWVzKG9iajogUmVhZG9ubHk8e30+KTogSXRlcmFibGU8W3N0cmluZywgdW5rbm93bl0+O1xuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyYXRlRW50cmllczxUVj4ob2JqOiBSZWFkb25seTx7IFtrZXk6IHN0cmluZ106IFRWIH0+KTogSXRlcmFibGU8W3N0cmluZywgVFZdPiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgeWllbGQgW2tleSwgb2JqW2tleV0hXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPik6IG51bWJlciB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgZm9yIChjb25zdCBfaXRlbSBvZiBpdGVtcykge1xuICAgICAgICByZXN1bHQrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgRW1wdHlTaW5nbGVFbGVtZW50ID0gU3ltYm9sLmZvcihcIkVtcHR5U2luZ2xlRWxlbWVudFwiKTtcbmNvbnN0IE5vVmFsdWVNYXJrZXIgPSBTeW1ib2wuZm9yKFwiTm9WYWx1ZU1hcmtlclwiKTtcblxuZXhwb3J0IGNsYXNzIEl0ZXJVdGlscyB7XG4gICAgcHVibGljIHN0YXRpYyBjb3VudCA9IGNvdW50O1xuICAgIHB1YmxpYyBzdGF0aWMgY29uY2F0ID0gY29uY2F0O1xuXG4gICAgcHVibGljIHN0YXRpYyBpc0VtcHR5PFQ+KGl0ZXJhYmxlOiBJdGVyYWJsZTxUPik6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGNvbnN0IF9pdGVtIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBncm91cEJ5PFQsIFRLZXk+KGl0ZXJhYmxlOiBJdGVyYWJsZTxUPiwgc2VsZWN0S2V5OiAoaXRlbTogVCkgPT4gVEtleSk6IE1hcDxUS2V5LCBUW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxUS2V5LCBUW10+KCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2VsZWN0S2V5KGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qga2V5TGlzdCA9IHJlc3VsdC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChrZXlMaXN0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCBbaXRlbV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXlMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNvcnRCeTxUPihpdGVtczogcmVhZG9ubHkgVFtdLCBzZWxlY3RvcjogKGl0ZW06IFQpID0+IHN0cmluZyk6IFRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5pdGVtc107XG4gICAgICAgIHJlc3VsdC5zb3J0KChhSXRlbSwgYkl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRWYWx1ZSA9IHNlbGVjdG9yKGFJdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0VmFsdWUgPSBzZWxlY3RvcihiSXRlbSk7XG4gICAgICAgICAgICBpZiAobGVmdFZhbHVlID09PSByaWdodFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnRWYWx1ZSA8IHJpZ2h0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IE1pbkxlbmd0aEFycmF5PFQsIDE+KTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXN0SXRlbTogVCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBsYXN0SXRlbSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IFtULCAuLi51bmtub3duW11dKTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBNaW5MZW5ndGhBcnJheTxULCAxPik6IFQ7XG4gICAgcHVibGljIHN0YXRpYyBmaXJzdDxUPihpdGVtczogSXRlcmFibGU8VD4gfCByZWFkb25seSBUW10pOiB1bmRlZmluZWQgfCBUO1xuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zWzBdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaXJzdEl0ZW06IFQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgZmlyc3RJdGVtID0gaXRlbTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdEl0ZW07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzaW5nbGU8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSB8IEl0ZXJhYmxlPFQ+LCBzaW5nbGVBc3NlcnRNZXNzYWdlPzogc3RyaW5nKTogVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQXNzZXJ0TWVzc2FnZSA/PyBgU2VxdWVuY2UgbXVzdCBjb250YWluIGV4YWN0bHkgc2luZ2xlIGVsZW1lbnQsIGJ1dCBnb3QgJHtpdGVtcy5sZW5ndGh9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbXNbMF0gPz8gcmVqZWN0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgc2luZ2xlRWxlbWVudDogVCB8IHR5cGVvZiBFbXB0eVNpbmdsZUVsZW1lbnQgPSBFbXB0eVNpbmdsZUVsZW1lbnQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2luZ2xlRWxlbWVudCAhPT0gRW1wdHlTaW5nbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZUFzc2VydE1lc3NhZ2UgPz8gYFNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHNpbmdsZSBlbGVtZW50LCBidXQgZ290IGF0IGxlYXN0IDJgXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNpbmdsZUVsZW1lbnQgPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNpbmdsZUVsZW1lbnQgPT09IEVtcHR5U2luZ2xlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzaW5nbGVBc3NlcnRNZXNzYWdlID8/IFwiU2VxdWVuY2UgbXVzdCBjb250YWluIGV4YWN0bHkgc2luZ2xlIGVsZW1lbnQsIGJ1dCBnb3QgMFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzaW5nbGVFbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyAqaXRlcmF0ZUVudHJpZXM8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSB8IFRbXSB8IEl0ZXJhYmxlPFQ+KTogSXRlcmFibGU8W251bWJlciwgVF0+IHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICB5aWVsZCBbaW5kZXgsIGl0ZW1dO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgKnNraXBMYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiwgc2tpcENvdW50OiBudW1iZXIpOiBJdGVyYWJsZTxUPiB7XG4gICAgICAgIGlmIChza2lwQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHlpZWxkKiBpdGVtcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2SXRlbXM6IEFycmF5PFQgfCB0eXBlb2YgRW1wdHlTaW5nbGVFbGVtZW50PiA9IG5ldyBBcnJheShza2lwQ291bnQpLmZpbGwoRW1wdHlTaW5nbGVFbGVtZW50KTtcbiAgICAgICAgbGV0IHJlc3VsdEl0ZW06IFQgfCB0eXBlb2YgRW1wdHlTaW5nbGVFbGVtZW50ID0gRW1wdHlTaW5nbGVFbGVtZW50O1xuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yINCSINC+0LHRidC10LwsINGB0YLRgNC+0LrQsCDQstGL0YjQtSDQs9Cw0YDQsNC90YLQuNGA0YPQtdGCINC00LvQuNC90YMg0LzQsNGB0YHQuNCy0LBcbiAgICAgICAgICAgIHJlc3VsdEl0ZW0gPSBwcmV2SXRlbXNbY3VycmVudEluZGV4XTtcbiAgICAgICAgICAgIHByZXZJdGVtc1tjdXJyZW50SW5kZXhdID0gaXRlbTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIHNraXBDb3VudDtcbiAgICAgICAgICAgIGlmIChyZXN1bHRJdGVtICE9IEVtcHR5U2luZ2xlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdEl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1pbkJ5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10gfCBUW10gfCBJdGVyYWJsZTxUPiwgY29tcGFyZUZ1bmM6IENvbXBhcmVGdW5jPFQ+KTogVCB7XG4gICAgICAgIGxldCBtaW5WYWx1ZTogdHlwZW9mIE5vVmFsdWVNYXJrZXIgfCBUID0gTm9WYWx1ZU1hcmtlcjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVGdW5jKGl0ZW0sIG1pblZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJpdGVtc1wiLCBcIkl0ZW1zIHNob3VsZCBiZSBub3QgZW1wdHkgbGlzdFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBtaW5CeU9yVW5kZWZpbmVkPFQ+KFxuICAgICAgICBpdGVtczogcmVhZG9ubHkgVFtdIHwgVFtdIHwgSXRlcmFibGU8VD4sXG4gICAgICAgIGNvbXBhcmVGdW5jOiBDb21wYXJlRnVuYzxUPlxuICAgICk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgbWluVmFsdWU6IHR5cGVvZiBOb1ZhbHVlTWFya2VyIHwgVCA9IE5vVmFsdWVNYXJrZXI7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlRnVuYyhpdGVtLCBtaW5WYWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByYW5nZShpdGVtQ291bnQ6IG51bWJlcik6IEl0ZXJhYmxlPG51bWJlcj47XG4gICAgcHVibGljIHN0YXRpYyByYW5nZShzdGFydDogbnVtYmVyLCBpdGVtQ291bnQ6IG51bWJlcik6IEl0ZXJhYmxlPG51bWJlcj47XG4gICAgcHVibGljIHN0YXRpYyAqcmFuZ2UoaW5TdGFydE9yQ291bnQ6IG51bWJlciwgaW5JdGVtQ291bnQ/OiBudW1iZXIpOiBJdGVyYWJsZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbkl0ZW1Db3VudCA9PT0gdW5kZWZpbmVkID8gMCA6IGluU3RhcnRPckNvdW50O1xuICAgICAgICBjb25zdCBpdGVtQ291bnQgPSBpbkl0ZW1Db3VudCA9PT0gdW5kZWZpbmVkID8gaW5TdGFydE9yQ291bnQgOiBpbkl0ZW1Db3VudDtcbiAgICAgICAgaWYgKGl0ZW1Db3VudCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIml0ZW1Db3VudFwiLCBcIml0ZW1Db3VudCBtdXN0IGJlIGEgbm9uIG5lZ2F0aXZlIG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGl0ZW1Db3VudDsgaSsrKSB7XG4gICAgICAgICAgICB5aWVsZCBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkg0JLRgdGC0LDQstC70Y/QtdGCINC80LXQttC00YMg0Y3Qu9C10LzQtdC90YLQsNC80Lgg0LzQsNGB0YHQuNCy0LAg0LfQsNC00LDQvdC90YvQuSDRjdC70LXQvNC10L3RgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDQvdC+0LLRi9C5INC80LDRgdGB0LjQslxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJzcGVyc2U8VEksIFRTPihpdGVtczogVElbXSwgaXRlbTogVFMpOiBBcnJheTxUSSB8IFRTPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVyc3BlcnNlRm4oaXRlbXMsICgpID0+IGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCS0YHRgtCw0LLQu9GP0LXRgiDQvNC10LbQtNGDINGN0LvQtdC80LXQvdGC0LDQvNC4INC80LDRgdGB0LjQstCwINGN0LvQtdC80LXQvdGCLCDRgdC+0LfQtNCw0LLQsNC10LzRi9C5INGE0YPQvdC60YbQuNC10LksINC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC90L7QstGL0Lkg0LzQsNGB0YHQuNCyXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpbnRlcnNwZXJzZUZuPFRJLCBUUz4oaXRlbXM6IFRJW10sIGl0ZW06IChuZXh0SXRlbTogVEksIGluZGV4OiBudW1iZXIpID0+IFRTKTogQXJyYXk8VEkgfCBUUz4ge1xuICAgICAgICByZXR1cm4gaXRlbXMuZmxhdE1hcCgoeCwgaW5kZXgpID0+IChpbmRleCA9PT0gMCA/IFt4XSA6IFtpdGVtKHgsIGluZGV4KSwgeF0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHppcDxUMSwgVDI+KGl0ZW1zMTogSXRlcmFibGU8VDE+LCBpdGVtczI6IEl0ZXJhYmxlPFQyPik6IEl0ZXJhYmxlPFtUMSB8IHVuZGVmaW5lZCwgVDIgfCB1bmRlZmluZWRdPjtcbiAgICBwdWJsaWMgc3RhdGljICp6aXAoLi4uaXRlcmFibGVzOiBBcnJheTxJdGVyYWJsZTx1bmtub3duPj4pOiBJdGVyYWJsZTx1bmtub3duW10+IHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3JzOiBBcnJheTxJdGVyYXRvcjx1bmtub3duPiB8IHR5cGVvZiBOb1ZhbHVlTWFya2VyPiA9IGl0ZXJhYmxlcy5tYXAoaXQgPT4gSXRlcmF0b3IuZnJvbShpdCkpO1xuICAgICAgICBsZXQgaGFzVW5kb25lSXRlcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKGhhc1VuZG9uZUl0ZXJhdG9ycykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0RW50cnkgPSBbXTtcbiAgICAgICAgICAgIGhhc1VuZG9uZUl0ZXJhdG9ycyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgaXRlcmF0b3JdIG9mIHRoaXMuaXRlcmF0ZUVudHJpZXMoaXRlcmF0b3JzKSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRFbnRyeS5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0VmFsdWUgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRWYWx1ZS5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRFbnRyeS5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcnNbaV0gPSBOb1ZhbHVlTWFya2VyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cnkucHVzaChyZXN1bHRWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNVbmRvbmVJdGVyYXRvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc1VuZG9uZUl0ZXJhdG9ycykge1xuICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdEVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyAqZGlzdGluY3RCeTxUPihpdGVtczogSXRlcmFibGU8VD4sIGlkU2VsZWN0b3I6IChpdGVtOiBUKSA9PiBzdHJpbmcpOiBJdGVyYWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaWRTZWxlY3RvcihpdGVtKTtcbiAgICAgICAgICAgIGlmICghc2V0LmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICBzZXQuYWRkKGlkKTtcbiAgICAgICAgICAgICAgICB5aWVsZCBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19