@kontur.candy/tools 2.210.1-cgroupv2.0 → 2.210.1-cgroupv2.1

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 (625) hide show
  1. package/distr/Common/AsyncUtils.js +18 -0
  2. package/distr/Common/AsyncUtils.js.map +1 -0
  3. package/distr/Common/AutoValidationUtils.js +8 -0
  4. package/distr/Common/AutoValidationUtils.js.map +1 -0
  5. package/distr/Common/CandyApiClient/CandyApiClient.js +578 -0
  6. package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -0
  7. package/distr/Common/CandyApiClient/CandyApiClientContext.js +18 -0
  8. package/distr/Common/CandyApiClient/CandyApiClientContext.js.map +1 -0
  9. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +6 -0
  10. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js.map +1 -0
  11. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +6 -0
  12. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js.map +1 -0
  13. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +12 -0
  14. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js.map +1 -0
  15. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +6 -0
  16. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js.map +1 -0
  17. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +33 -0
  18. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js.map +1 -0
  19. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +35 -0
  20. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js.map +1 -0
  21. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +20 -0
  22. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js.map +1 -0
  23. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +89 -0
  24. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js.map +1 -0
  25. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +42 -0
  26. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js.map +1 -0
  27. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +9 -0
  28. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js.map +1 -0
  29. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +6 -0
  30. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js.map +1 -0
  31. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +18 -0
  32. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js.map +1 -0
  33. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +15 -0
  34. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js.map +1 -0
  35. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +19 -0
  36. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js.map +1 -0
  37. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +6 -0
  38. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js.map +1 -0
  39. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +248 -0
  40. package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -0
  41. package/distr/Common/CandyApiClient/ICandyApiClient.js +6 -0
  42. package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -0
  43. package/distr/Common/CandyApiClient/IsBuffer.js +15 -0
  44. package/distr/Common/CandyApiClient/IsBuffer.js.map +1 -0
  45. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +6 -0
  46. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js.map +1 -0
  47. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +6 -0
  48. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js.map +1 -0
  49. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +6 -0
  50. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js.map +1 -0
  51. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +6 -0
  52. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js.map +1 -0
  53. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +6 -0
  54. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js.map +1 -0
  55. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +24 -0
  56. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js.map +1 -0
  57. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +6 -0
  58. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js.map +1 -0
  59. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +6 -0
  60. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js.map +1 -0
  61. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +9 -0
  62. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js.map +1 -0
  63. package/distr/Common/CandyApiClient/Types/DraftFullId.js +6 -0
  64. package/distr/Common/CandyApiClient/Types/DraftFullId.js.map +1 -0
  65. package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +12 -0
  66. package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js.map +1 -0
  67. package/distr/Common/CandyApiClient/Types/ErrorLog/ResolveInnerPathRequest.js +6 -0
  68. package/distr/Common/CandyApiClient/Types/ErrorLog/ResolveInnerPathRequest.js.map +1 -0
  69. package/distr/Common/CandyApiClient/Types/ErrorLog/ResolvePathResponse.js +6 -0
  70. package/distr/Common/CandyApiClient/Types/ErrorLog/ResolvePathResponse.js.map +1 -0
  71. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +17 -0
  72. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js.map +1 -0
  73. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +13 -0
  74. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js.map +1 -0
  75. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +6 -0
  76. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js.map +1 -0
  77. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +6 -0
  78. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js.map +1 -0
  79. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +15 -0
  80. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js.map +1 -0
  81. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +6 -0
  82. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js.map +1 -0
  83. package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +9 -0
  84. package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js.map +1 -0
  85. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +6 -0
  86. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js.map +1 -0
  87. package/distr/Common/CandyApiClient/Types/Guid.js +6 -0
  88. package/distr/Common/CandyApiClient/Types/Guid.js.map +1 -0
  89. package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +6 -0
  90. package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js.map +1 -0
  91. package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
  92. package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js.map +1 -0
  93. package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +6 -0
  94. package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js.map +1 -0
  95. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +24 -0
  96. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js.map +1 -0
  97. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +6 -0
  98. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js.map +1 -0
  99. package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +6 -0
  100. package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js.map +1 -0
  101. package/distr/Common/CandyApiClient/Types/Print/PrintType.js +12 -0
  102. package/distr/Common/CandyApiClient/Types/Print/PrintType.js.map +1 -0
  103. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js +15 -0
  104. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js.map +1 -0
  105. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js +19 -0
  106. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js.map +1 -0
  107. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js +15 -0
  108. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js.map +1 -0
  109. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js +15 -0
  110. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js.map +1 -0
  111. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js +13 -0
  112. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js.map +1 -0
  113. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js +15 -0
  114. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js.map +1 -0
  115. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js +15 -0
  116. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js.map +1 -0
  117. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js +15 -0
  118. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js.map +1 -0
  119. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js +21 -0
  120. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js.map +1 -0
  121. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js +15 -0
  122. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js.map +1 -0
  123. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js +19 -0
  124. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js.map +1 -0
  125. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js +15 -0
  126. package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js.map +1 -0
  127. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js +6 -0
  128. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js.map +1 -0
  129. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js +26 -0
  130. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js.map +1 -0
  131. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js +6 -0
  132. package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js.map +1 -0
  133. package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js +16 -0
  134. package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js.map +1 -0
  135. package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js +16 -0
  136. package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js.map +1 -0
  137. package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +6 -0
  138. package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js.map +1 -0
  139. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +6 -0
  140. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js.map +1 -0
  141. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +6 -0
  142. package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js.map +1 -0
  143. package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +6 -0
  144. package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js.map +1 -0
  145. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +6 -0
  146. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js.map +1 -0
  147. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +14 -0
  148. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js.map +1 -0
  149. package/distr/Common/CollectionUtils.js +15 -0
  150. package/distr/Common/CollectionUtils.js.map +1 -0
  151. package/distr/Common/CommonConstants/SectionNames.js +11 -0
  152. package/distr/Common/CommonConstants/SectionNames.js.map +1 -0
  153. package/distr/Common/Comparers.js +63 -0
  154. package/distr/Common/Comparers.js.map +1 -0
  155. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +22 -0
  156. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js.map +1 -0
  157. package/distr/Common/EndPoints.js +16 -0
  158. package/distr/Common/EndPoints.js.map +1 -0
  159. package/distr/Common/Enums/ButtonSettingsTypeEnum.js +12 -0
  160. package/distr/Common/Enums/ButtonSettingsTypeEnum.js.map +1 -0
  161. package/distr/Common/Errors.js +44 -0
  162. package/distr/Common/Errors.js.map +1 -0
  163. package/distr/Common/ExtractGFVPath/ExtractGFVPath.js +31 -0
  164. package/distr/Common/ExtractGFVPath/ExtractGFVPath.js.map +1 -0
  165. package/distr/Common/FSPrinterClient/FSPrinterClient.js +153 -0
  166. package/distr/Common/FSPrinterClient/FSPrinterClient.js.map +1 -0
  167. package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js +19 -0
  168. package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js.map +1 -0
  169. package/distr/Common/FSPrinterClient/IFSPrinterClient.js +39 -0
  170. package/distr/Common/FSPrinterClient/IFSPrinterClient.js.map +1 -0
  171. package/distr/Common/FormActionHandlers/ContextualActionNames.js +14 -0
  172. package/distr/Common/FormActionHandlers/ContextualActionNames.js.map +1 -0
  173. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +6 -0
  174. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js.map +1 -0
  175. package/distr/Common/FormPathUtils.js +21 -0
  176. package/distr/Common/FormPathUtils.js.map +1 -0
  177. package/distr/Common/Funcs.js +11 -0
  178. package/distr/Common/Funcs.js.map +1 -0
  179. package/distr/Common/GFV.js +6 -0
  180. package/distr/Common/GFV.js.map +1 -0
  181. package/distr/Common/GetRngSchemaFileExtension.js +26 -0
  182. package/distr/Common/GetRngSchemaFileExtension.js.map +1 -0
  183. package/distr/Common/Hooks/UseLocalStorage.js +35 -0
  184. package/distr/Common/Hooks/UseLocalStorage.js.map +1 -0
  185. package/distr/Common/HttpClient/AuthenticationMode.js +31 -0
  186. package/distr/Common/HttpClient/AuthenticationMode.js.map +1 -0
  187. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +9 -0
  188. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js.map +1 -0
  189. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +9 -0
  190. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js.map +1 -0
  191. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +6 -0
  192. package/distr/Common/HttpClient/FetchImplementation/Fetch.js.map +1 -0
  193. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +8 -0
  194. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js.map +1 -0
  195. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +36 -0
  196. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js.map +1 -0
  197. package/distr/Common/HttpClient/HttpClient.js +313 -0
  198. package/distr/Common/HttpClient/HttpClient.js.map +1 -0
  199. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +6 -0
  200. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js.map +1 -0
  201. package/distr/Common/HttpClient/IHttpClient.js +6 -0
  202. package/distr/Common/HttpClient/IHttpClient.js.map +1 -0
  203. package/distr/Common/IndentString.js +16 -0
  204. package/distr/Common/IndentString.js.map +1 -0
  205. package/distr/Common/IntRangeUtils.js +32 -0
  206. package/distr/Common/IntRangeUtils.js.map +1 -0
  207. package/distr/Common/IterableUtils.js +288 -0
  208. package/distr/Common/IterableUtils.js.map +1 -0
  209. package/distr/Common/KCLangRuntimeUtils.js +266 -0
  210. package/distr/Common/KCLangRuntimeUtils.js.map +1 -0
  211. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +55 -0
  212. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js.map +1 -0
  213. package/distr/Common/ModelPath/BuildIterationSequence.js +41 -0
  214. package/distr/Common/ModelPath/BuildIterationSequence.js.map +1 -0
  215. package/distr/Common/ModelPath/EachCurrentCollision.js +12 -0
  216. package/distr/Common/ModelPath/EachCurrentCollision.js.map +1 -0
  217. package/distr/Common/ModelPath/IEquatable.js +6 -0
  218. package/distr/Common/ModelPath/IEquatable.js.map +1 -0
  219. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +23 -0
  220. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js.map +1 -0
  221. package/distr/Common/ModelPath/Map/Map2.js +99 -0
  222. package/distr/Common/ModelPath/Map/Map2.js.map +1 -0
  223. package/distr/Common/ModelPath/Map/ModelPathMap.js +23 -0
  224. package/distr/Common/ModelPath/Map/ModelPathMap.js.map +1 -0
  225. package/distr/Common/ModelPath/ModelPath.js +476 -0
  226. package/distr/Common/ModelPath/ModelPath.js.map +1 -0
  227. package/distr/Common/ModelPath/ModelPathBuilder.js +42 -0
  228. package/distr/Common/ModelPath/ModelPathBuilder.js.map +1 -0
  229. package/distr/Common/ModelPath/ModelPathHelper.js +34 -0
  230. package/distr/Common/ModelPath/ModelPathHelper.js.map +1 -0
  231. package/distr/Common/ModelPath/PathMatcher.js +95 -0
  232. package/distr/Common/ModelPath/PathMatcher.js.map +1 -0
  233. package/distr/Common/ModelPath/PathSplitHelper.js +21 -0
  234. package/distr/Common/ModelPath/PathSplitHelper.js.map +1 -0
  235. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +31 -0
  236. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js.map +1 -0
  237. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +31 -0
  238. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js.map +1 -0
  239. package/distr/Common/ModelPath/Set/ModelPathSet.js +31 -0
  240. package/distr/Common/ModelPath/Set/ModelPathSet.js.map +1 -0
  241. package/distr/Common/ModelPath/Set/Set2.js +59 -0
  242. package/distr/Common/ModelPath/Set/Set2.js.map +1 -0
  243. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +33 -0
  244. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js.map +1 -0
  245. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +6 -0
  246. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js.map +1 -0
  247. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +11 -0
  248. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js.map +1 -0
  249. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +66 -0
  250. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js.map +1 -0
  251. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +108 -0
  252. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js.map +1 -0
  253. package/distr/Common/NidusClient/INidusClient.js +14 -0
  254. package/distr/Common/NidusClient/INidusClient.js.map +1 -0
  255. package/distr/Common/NidusClient/NidusClientContext.js +34 -0
  256. package/distr/Common/NidusClient/NidusClientContext.js.map +1 -0
  257. package/distr/Common/NidusClient/NidusClientImpl.js +55 -0
  258. package/distr/Common/NidusClient/NidusClientImpl.js.map +1 -0
  259. package/distr/Common/PathConstants.js +11 -0
  260. package/distr/Common/PathConstants.js.map +1 -0
  261. package/distr/Common/PicklistApiClient/IPicklistApiClient.js +6 -0
  262. package/distr/Common/PicklistApiClient/IPicklistApiClient.js.map +1 -0
  263. package/distr/Common/PicklistApiClient/PicklistApiClient.js +31 -0
  264. package/distr/Common/PicklistApiClient/PicklistApiClient.js.map +1 -0
  265. package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js +36 -0
  266. package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js.map +1 -0
  267. package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js +53 -0
  268. package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js.map +1 -0
  269. package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js +37 -0
  270. package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js.map +1 -0
  271. package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js +6 -0
  272. package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js.map +1 -0
  273. package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js +6 -0
  274. package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js.map +1 -0
  275. package/distr/Common/RngSchemeTypes/types.js +6 -0
  276. package/distr/Common/RngSchemeTypes/types.js.map +1 -0
  277. package/distr/Common/StringArrayKey.js +26 -0
  278. package/distr/Common/StringArrayKey.js.map +1 -0
  279. package/distr/Common/TextExtractor/TextExtractorTypes.js +6 -0
  280. package/distr/Common/TextExtractor/TextExtractorTypes.js.map +1 -0
  281. package/distr/Common/TypingUtils.js +118 -0
  282. package/distr/Common/TypingUtils.js.map +1 -0
  283. package/distr/Common/UUID.js +14 -0
  284. package/distr/Common/UUID.js.map +1 -0
  285. package/distr/Common/UseAsyncEffect.js +20 -0
  286. package/distr/Common/UseAsyncEffect.js.map +1 -0
  287. package/distr/Common/UseShowOnce.js +60 -0
  288. package/distr/Common/UseShowOnce.js.map +1 -0
  289. package/distr/Common/UseTypedSelector.js +10 -0
  290. package/distr/Common/UseTypedSelector.js.map +1 -0
  291. package/distr/Common/WellKnownDirectories.js +14 -0
  292. package/distr/Common/WellKnownDirectories.js.map +1 -0
  293. package/distr/Common/hashUtils.js +14 -0
  294. package/distr/Common/hashUtils.js.map +1 -0
  295. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +77 -0
  296. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js.map +1 -0
  297. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +14 -0
  298. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js.map +1 -0
  299. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +22 -0
  300. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js.map +1 -0
  301. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +88 -0
  302. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js.map +1 -0
  303. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +82 -0
  304. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js.map +1 -0
  305. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +10 -0
  306. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js.map +1 -0
  307. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +42 -0
  308. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js.map +1 -0
  309. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +30 -0
  310. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js.map +1 -0
  311. package/distr/Tools/src/BuildTasks/FSTask.js +67 -0
  312. package/distr/Tools/src/BuildTasks/FSTask.js.map +1 -0
  313. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +52 -0
  314. package/distr/Tools/src/BuildTasks/Form/CompileForm.js.map +1 -0
  315. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +44 -0
  316. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js.map +1 -0
  317. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +37 -0
  318. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js.map +1 -0
  319. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +25 -0
  320. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js.map +1 -0
  321. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +31 -0
  322. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js.map +1 -0
  323. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +27 -0
  324. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js.map +1 -0
  325. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +95 -0
  326. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js.map +1 -0
  327. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +126 -0
  328. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js.map +1 -0
  329. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +174 -0
  330. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js.map +1 -0
  331. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +121 -0
  332. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js.map +1 -0
  333. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +45 -0
  334. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js.map +1 -0
  335. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +52 -0
  336. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js.map +1 -0
  337. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +49 -0
  338. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js.map +1 -0
  339. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +19 -0
  340. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js.map +1 -0
  341. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +64 -0
  342. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js.map +1 -0
  343. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +84 -0
  344. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js.map +1 -0
  345. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +174 -0
  346. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js.map +1 -0
  347. package/distr/Tools/src/BuildTasks/ReadFormSource.js +112 -0
  348. package/distr/Tools/src/BuildTasks/ReadFormSource.js.map +1 -0
  349. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +107 -0
  350. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js.map +1 -0
  351. package/distr/Tools/src/BuildTasks/Version.js +41 -0
  352. package/distr/Tools/src/BuildTasks/Version.js.map +1 -0
  353. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +27 -0
  354. package/distr/Tools/src/BuildTasks/WriteFormMeta.js.map +1 -0
  355. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +28 -0
  356. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js.map +1 -0
  357. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +169 -0
  358. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js.map +1 -0
  359. package/distr/Tools/src/CLICommands/BuildForms/ClearSourceMapForProduction.js +24 -0
  360. package/distr/Tools/src/CLICommands/BuildForms/ClearSourceMapForProduction.js.map +1 -0
  361. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +234 -0
  362. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -0
  363. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +36 -0
  364. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js.map +1 -0
  365. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +112 -0
  366. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js.map +1 -0
  367. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +158 -0
  368. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js.map +1 -0
  369. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +94 -0
  370. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js.map +1 -0
  371. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +129 -0
  372. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js.map +1 -0
  373. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerCandyWidgetController.js +45 -0
  374. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerCandyWidgetController.js.map +1 -0
  375. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +76 -0
  376. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js.map +1 -0
  377. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +67 -0
  378. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js.map +1 -0
  379. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +65 -0
  380. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js.map +1 -0
  381. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +117 -0
  382. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js.map +1 -0
  383. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +22 -0
  384. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js.map +1 -0
  385. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +96 -0
  386. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js.map +1 -0
  387. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +231 -0
  388. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js.map +1 -0
  389. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/CandyWidgetDevServer.js +70 -0
  390. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/CandyWidgetDevServer.js.map +1 -0
  391. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +57 -0
  392. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js.map +1 -0
  393. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +67 -0
  394. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js.map +1 -0
  395. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +21 -0
  396. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js.map +1 -0
  397. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +52 -0
  398. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js.map +1 -0
  399. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +80 -0
  400. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js.map +1 -0
  401. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +31 -0
  402. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js.map +1 -0
  403. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +6 -0
  404. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js.map +1 -0
  405. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +6 -0
  406. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js.map +1 -0
  407. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +184 -0
  408. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js.map +1 -0
  409. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +213 -0
  410. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js.map +1 -0
  411. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +28 -0
  412. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js.map +1 -0
  413. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +6 -0
  414. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js.map +1 -0
  415. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +110 -0
  416. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js.map +1 -0
  417. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +50 -0
  418. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js.map +1 -0
  419. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +19 -0
  420. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js.map +1 -0
  421. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +30 -0
  422. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js.map +1 -0
  423. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +6 -0
  424. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js.map +1 -0
  425. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +163 -0
  426. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js.map +1 -0
  427. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +112 -0
  428. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -0
  429. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +34 -0
  430. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js.map +1 -0
  431. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +50 -0
  432. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js.map +1 -0
  433. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +54 -0
  434. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js.map +1 -0
  435. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}./320/232/320/241.candy.js.kclang +0 -0
  436. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.AfterMerge.xslt +11 -0
  437. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.BeforePreload.xslt +11 -0
  438. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.fufPatcher.xslt +11 -0
  439. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/converters/{gfv}.outer.inner.json +1 -0
  440. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js +2 -0
  441. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js.map +1 -0
  442. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/form.json +12 -0
  443. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/addPril1.txt +6 -0
  444. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/presentations.json +8 -0
  445. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/schemas/{gfv}.0.rng.xml +20 -0
  446. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/sugar/index.sugar.xml +10 -0
  447. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +16 -0
  448. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js.map +1 -0
  449. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +23 -0
  450. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js.map +1 -0
  451. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/validations.KC.kclang +0 -0
  452. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +34 -0
  453. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js.map +1 -0
  454. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +117 -0
  455. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js.map +1 -0
  456. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +44 -0
  457. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js.map +1 -0
  458. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +73 -0
  459. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js.map +1 -0
  460. package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +25 -0
  461. package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js.map +1 -0
  462. package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +38 -0
  463. package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js.map +1 -0
  464. package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js +36 -0
  465. package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js.map +1 -0
  466. package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js +50 -0
  467. package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js.map +1 -0
  468. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +144 -0
  469. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js.map +1 -0
  470. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +78 -0
  471. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js.map +1 -0
  472. package/distr/Tools/src/CandyCLI.js +144 -0
  473. package/distr/Tools/src/CandyCLI.js.map +1 -0
  474. package/distr/Tools/src/CheckNodeJsVersion.js +32 -0
  475. package/distr/Tools/src/CheckNodeJsVersion.js.map +1 -0
  476. package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +28 -0
  477. package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js.map +1 -0
  478. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +93 -0
  479. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js.map +1 -0
  480. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +24 -0
  481. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js.map +1 -0
  482. package/distr/Tools/src/Commons/ErrorUntyped.js +6 -0
  483. package/distr/Tools/src/Commons/ErrorUntyped.js.map +1 -0
  484. package/distr/Tools/src/Commons/EventObject.js +74 -0
  485. package/distr/Tools/src/Commons/EventObject.js.map +1 -0
  486. package/distr/Tools/src/Commons/ExecUtils.js +38 -0
  487. package/distr/Tools/src/Commons/ExecUtils.js.map +1 -0
  488. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +21 -0
  489. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js.map +1 -0
  490. package/distr/Tools/src/Commons/FormGlobsUtils.js +137 -0
  491. package/distr/Tools/src/Commons/FormGlobsUtils.js.map +1 -0
  492. package/distr/Tools/src/Commons/FormLocationInfo.js +6 -0
  493. package/distr/Tools/src/Commons/FormLocationInfo.js.map +1 -0
  494. package/distr/Tools/src/Commons/FsUtils.js +35 -0
  495. package/distr/Tools/src/Commons/FsUtils.js.map +1 -0
  496. package/distr/Tools/src/Commons/GetCpuLimits.js +64 -0
  497. package/distr/Tools/src/Commons/GetCpuLimits.js.map +1 -0
  498. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +38 -0
  499. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js.map +1 -0
  500. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +57 -0
  501. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js.map +1 -0
  502. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +15 -0
  503. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js.map +1 -0
  504. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +18 -0
  505. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js.map +1 -0
  506. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +6 -0
  507. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js.map +1 -0
  508. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +14 -0
  509. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js.map +1 -0
  510. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +17 -0
  511. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js.map +1 -0
  512. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +22 -0
  513. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js.map +1 -0
  514. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +20 -0
  515. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js.map +1 -0
  516. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +46 -0
  517. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js.map +1 -0
  518. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +13 -0
  519. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js.map +1 -0
  520. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +18 -0
  521. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js.map +1 -0
  522. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +13 -0
  523. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js.map +1 -0
  524. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +13 -0
  525. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js.map +1 -0
  526. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +6 -0
  527. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js.map +1 -0
  528. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +13 -0
  529. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js.map +1 -0
  530. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +13 -0
  531. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js.map +1 -0
  532. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +113 -0
  533. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js.map +1 -0
  534. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +24 -0
  535. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js.map +1 -0
  536. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +106 -0
  537. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js.map +1 -0
  538. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +22 -0
  539. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js.map +1 -0
  540. package/distr/Tools/src/Commons/Locks/Lock.js +24 -0
  541. package/distr/Tools/src/Commons/Locks/Lock.js.map +1 -0
  542. package/distr/Tools/src/Commons/Locks/LockHandle.js +17 -0
  543. package/distr/Tools/src/Commons/Locks/LockHandle.js.map +1 -0
  544. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +31 -0
  545. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js.map +1 -0
  546. package/distr/Tools/src/Commons/Logging/ELKLogger.js +56 -0
  547. package/distr/Tools/src/Commons/Logging/ELKLogger.js.map +1 -0
  548. package/distr/Tools/src/Commons/Logging/ILogger.js +25 -0
  549. package/distr/Tools/src/Commons/Logging/ILogger.js.map +1 -0
  550. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +61 -0
  551. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js.map +1 -0
  552. package/distr/Tools/src/Commons/Logging/Logger.js +78 -0
  553. package/distr/Tools/src/Commons/Logging/Logger.js.map +1 -0
  554. package/distr/Tools/src/Commons/Logging/StaticLogger.js +37 -0
  555. package/distr/Tools/src/Commons/Logging/StaticLogger.js.map +1 -0
  556. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +2 -0
  557. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js.map +1 -0
  558. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +152 -0
  559. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js.map +1 -0
  560. package/distr/Tools/src/Commons/PathPattern.js +42 -0
  561. package/distr/Tools/src/Commons/PathPattern.js.map +1 -0
  562. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +16 -0
  563. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js.map +1 -0
  564. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +6 -0
  565. package/distr/Tools/src/Commons/TasksCore/BuildTask.js.map +1 -0
  566. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +668 -0
  567. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js.map +1 -0
  568. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +77 -0
  569. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js.map +1 -0
  570. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +20 -0
  571. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js.map +1 -0
  572. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +48 -0
  573. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js.map +1 -0
  574. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +45 -0
  575. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js.map +1 -0
  576. package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js +25 -0
  577. package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js.map +1 -0
  578. package/distr/Tools/src/Commons/TasksCore/Observe.js +35 -0
  579. package/distr/Tools/src/Commons/TasksCore/Observe.js.map +1 -0
  580. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +29 -0
  581. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js.map +1 -0
  582. package/distr/Tools/src/Commons/TimingUtils.js +13 -0
  583. package/distr/Tools/src/Commons/TimingUtils.js.map +1 -0
  584. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +180 -0
  585. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js.map +1 -0
  586. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +145 -0
  587. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js.map +1 -0
  588. package/distr/Tools/src/FormWebpackConfiguration/variables.less +132 -0
  589. package/distr/Tools/src/GenerateReadMe.js +54 -0
  590. package/distr/Tools/src/GenerateReadMe.js.map +1 -0
  591. package/distr/Tools/src/Keys/localhost-key.pem +116 -0
  592. package/distr/Tools/src/Keys/localhost.pem +35 -0
  593. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +2 -0
  594. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +49 -0
  595. package/distr/Tools/src/LocalServerFrontEndDist/favicon-16x16.png +0 -0
  596. package/distr/Tools/src/LocalServerFrontEndDist/favicon-32x32.png +0 -0
  597. package/distr/Tools/src/LocalServerFrontEndDist/favicon.ico +0 -0
  598. package/distr/Tools/src/LocalServerFrontEndDist/index.html +1 -0
  599. package/distr/Tools/src/LocalServerFrontEndDist/index.js +3 -0
  600. package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +60 -0
  601. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -0
  602. package/distr/Tools/src/Options/CandyToolOptions.js +20 -0
  603. package/distr/Tools/src/Options/CandyToolOptions.js.map +1 -0
  604. package/distr/Tools/src/ReadFarmConfig.js +18 -0
  605. package/distr/Tools/src/ReadFarmConfig.js.map +1 -0
  606. package/distr/Tools/src/SelfUpdate.js +121 -0
  607. package/distr/Tools/src/SelfUpdate.js.map +1 -0
  608. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1722 -0
  609. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.LICENSE.txt +1 -0
  610. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -0
  611. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +1076 -0
  612. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -0
  613. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +3328 -0
  614. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js.map +1 -0
  615. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +6517 -0
  616. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js.map +1 -0
  617. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +222 -0
  618. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js.map +1 -0
  619. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +3328 -0
  620. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js.map +1 -0
  621. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +6517 -0
  622. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js.map +1 -0
  623. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +222 -0
  624. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js.map +1 -0
  625. package/package.json +1 -1
@@ -0,0 +1,578 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ServerErrors = exports.CandyResourceZones = exports.CandyApiDraftClient = exports.CandyApiClient = void 0;
7
+ var _TypingUtils = require("../TypingUtils");
8
+ var _HttpClient = require("../HttpClient/HttpClient");
9
+ var _AuthenticationMode = require("../HttpClient/AuthenticationMode");
10
+ var _ModelPath = require("../ModelPath/ModelPath");
11
+ var _FocusTypes = require("./Types/Focus/FocusTypes");
12
+ var _DraftPresentationType = require("./Types/Presentations/DraftPresentationType");
13
+ var _IsBuffer = require("./IsBuffer");
14
+ var _FufSizeTooLargeError = require("./Types/DraftActions/FufSizeTooLargeError");
15
+ const strangeOptions = {
16
+ src: "changeSet",
17
+ dataVersion: "0"
18
+ };
19
+ const CandyResourceZones = exports.CandyResourceZones = {
20
+ TestForms: "candy.resources.test-forms"
21
+ };
22
+ let ServerErrors = exports.ServerErrors = /*#__PURE__*/function (ServerErrors) {
23
+ ServerErrors["FufSizeTooLarge"] = "FufSizeTooLarge";
24
+ ServerErrors["BadRequest"] = "BadRequest";
25
+ ServerErrors["UnknownError"] = "UnknownError";
26
+ return ServerErrors;
27
+ }({});
28
+ function convertPathLoadSpecificationToString(spec) {
29
+ return (spec.skip ? "-" : "") + (spec.pathOrPathPrefix === "*" ? spec.pathOrPathPrefix : spec.pathOrPathPrefix.toLegacyPath());
30
+ }
31
+ class CandyApiClient {
32
+ constructor(fetchImpl, baseUrl, resourceZone, authentication, exceptionLogger) {
33
+ this.httpClient = void 0;
34
+ this.httpClient = new _HttpClient.HttpClient(fetchImpl, baseUrl, (0, _AuthenticationMode.createAuthenticationProvider)(authentication), {
35
+ resourceZone: resourceZone
36
+ }, exceptionLogger);
37
+ }
38
+ forDraft(draftFullId) {
39
+ return new CandyApiDraftClient(this.httpClient, draftFullId);
40
+ }
41
+ async getInfoByInns(draftFullId, inns) {
42
+ const paths = inns.map(inn => `@focus/${inn}`);
43
+ const response = await this.httpClient.post(this.getDraftUrl(draftFullId, "get-inner")).withJsonBody(paths).json();
44
+ const result = {};
45
+ for (const inn of inns) {
46
+ var _response;
47
+ const innServerValue = (_response = response[`@focus/${inn}`]) === null || _response === void 0 ? void 0 : _response.value;
48
+ if (innServerValue == undefined) {
49
+ result[inn] = {
50
+ value: undefined,
51
+ error: "Server does not return inn info",
52
+ errorCode: _FocusTypes.FocusServerErrorCode.NoInnError
53
+ };
54
+ } else {
55
+ var _innServerValue$value, _innServerValue$error, _innServerValue$error2;
56
+ result[inn] = {
57
+ value: (_innServerValue$value = innServerValue.value) !== null && _innServerValue$value !== void 0 ? _innServerValue$value : undefined,
58
+ errorCode: (_innServerValue$error = innServerValue.errorCode) !== null && _innServerValue$error !== void 0 ? _innServerValue$error : undefined,
59
+ error: (_innServerValue$error2 = innServerValue.error) !== null && _innServerValue$error2 !== void 0 ? _innServerValue$error2 : undefined
60
+ };
61
+ }
62
+ }
63
+ return result;
64
+ }
65
+ async getAllGfvs(abortSignal) {
66
+ const body = await this.httpClient.get(`build-server/gfvs`).json();
67
+ return body;
68
+ }
69
+ async createDraftFromDrive(ns, fufDriveUri, abortSignal) {
70
+ return await this.httpClient.post(`v1/ns/${ns}/create-draft-from-drive`).withQueryParams({
71
+ ns: ns,
72
+ fufDriveUri: fufDriveUri
73
+ }).withAbortSignal(abortSignal).json();
74
+ }
75
+ async createEmptyDraft(ns, gfv, abortSignal) {
76
+ return await this.httpClient.post(`v1/ns/${ns}/create-draft`).withQueryParams({
77
+ gfv: gfv
78
+ }).withAbortSignal(abortSignal).json();
79
+ }
80
+ async createDraft(ns, gfv, fufContent) {
81
+ if (gfv == undefined && fufContent != undefined) {
82
+ return await this.httpClient.post(`v1/ns/${ns}/create-draft`).withContentType("application/octet-stream").withBodyFromBuffer(fufContent).json();
83
+ }
84
+ if (gfv != undefined && fufContent == undefined) {
85
+ return await this.httpClient.post(`v1/ns/${ns}/create-draft`).withQueryParams({
86
+ gfv: gfv
87
+ }).withContentType("application/octet-stream").withBodyFromBuffer(Buffer.from([])).json();
88
+ }
89
+ if (gfv == undefined && fufContent == undefined) {
90
+ throw new Error("Cannot create draft: no gfv and no fuf specified");
91
+ }
92
+ return await this.httpClient.post(`v1/ns/${ns}/create-draft`).withQueryParams({
93
+ gfv: gfv
94
+ }).withContentType("application/octet-stream").withBodyFromBuffer(fufContent).json();
95
+ }
96
+ async checkAlive() {
97
+ await this.httpClient.get(`_status/ping`);
98
+ }
99
+ getDraftUrl(draftFullId, draftRelatedUrl) {
100
+ return `v1/ns/${draftFullId.ns}/drafts/${draftFullId.draftId}/${draftRelatedUrl}`;
101
+ }
102
+ async getFeatureFlags() {
103
+ return await this.httpClient.get("v1/features/flags").json();
104
+ }
105
+ }
106
+ exports.CandyApiClient = CandyApiClient;
107
+ class CandyApiDraftClient {
108
+ constructor(httpClient, draftFullId) {
109
+ this.httpClient = void 0;
110
+ this.draftFullId = void 0;
111
+ this.httpClient = httpClient;
112
+ this.draftFullId = draftFullId;
113
+ }
114
+ getHrefToInnerEditor() {
115
+ return this.httpClient.url(`inner-editor/ns/${this.draftFullId.ns}/drafts/${this.draftFullId.draftId}`);
116
+ }
117
+ getHrefDownloadFuf() {
118
+ return this.httpClient.url(this.getDraftUrl("get-fuf"));
119
+ }
120
+ getHrefToConvertationLog() {
121
+ return this.httpClient.url(this.getDraftUrl("conversion"));
122
+ }
123
+ async getInnerFuf() {
124
+ return (await this.httpClient.get(this.getDraftUrl(_DraftPresentationType.DraftPresentationType.innerFuf))).text();
125
+ }
126
+ getHrefToDownloadInnerFuf() {
127
+ return this.getHrefDownloadDraftPresentation(_DraftPresentationType.DraftPresentationType.innerFuf);
128
+ }
129
+ getHrefToDownloadClientInfo() {
130
+ return this.getHrefDownloadDraftPresentation(_DraftPresentationType.DraftPresentationType.clientInfo);
131
+ }
132
+ getHrefToDownloadFormsClientInfo() {
133
+ return this.getHrefDownloadDraftPresentation(_DraftPresentationType.DraftPresentationType.formsClientInfo);
134
+ }
135
+ getHrefDownloadInner() {
136
+ return this.getHrefDownloadDraftPresentation(_DraftPresentationType.DraftPresentationType.inner);
137
+ }
138
+ async getErrorLog() {
139
+ return this.httpClient.get(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.errorLog)).json();
140
+ }
141
+ async getErrorLogWithCheckScenarios(checkScenarios) {
142
+ return this.httpClient.post(this.getDraftUrl("errorlog")).withJsonBody({
143
+ checkScenarios: checkScenarios
144
+ }).json();
145
+ }
146
+ async getTaskById(taskId) {
147
+ var _tasks;
148
+ const tasks = await this.httpClient.post(this.getDraftUrl("get-inner")).withJsonBody([`@task/*`]).json();
149
+ return (_tasks = tasks[`@task/${taskId}`]) === null || _tasks === void 0 ? void 0 : _tasks.value;
150
+ }
151
+ async getFufWithAttachments() {
152
+ const response = await this.httpClient.get(this.getDraftUrl("get-fuf-with-attachments")).json();
153
+ return response;
154
+ }
155
+ async getPartialFuf(rules) {
156
+ const response = await this.httpClient.post(this.getDraftUrl("get-partial-fuf")).withJsonBody(rules).json();
157
+ return response;
158
+ }
159
+ async getAllTasks() {
160
+ const tasks = await this.httpClient.post(this.getDraftUrl("get-inner")).withJsonBody([`@task/*`]).json();
161
+ return Object.values(tasks).map(x => x.value);
162
+ }
163
+ async enqueueTask(taskId, taskInfo) {
164
+ await this.httpClient.post(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.inner)).withQueryParams(strangeOptions).withJsonBody({
165
+ added: [],
166
+ changed: {
167
+ [`@task/${taskId}`]: {
168
+ ...taskInfo,
169
+ id: taskId
170
+ }
171
+ },
172
+ removed: []
173
+ });
174
+ }
175
+ async cancelTask(taskId) {
176
+ await this.httpClient.post(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.inner)).withQueryParams(strangeOptions).withJsonBody({
177
+ added: [],
178
+ changed: {},
179
+ removed: [`@task/${taskId}`]
180
+ });
181
+ }
182
+ getExpertErrorLog() {
183
+ return this.httpClient.get(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.errorlogExpert)).json();
184
+ }
185
+ getHrefToErrorLogPdf(errorLogName, propsName) {
186
+ return this.httpClient.url(this.getDraftUrl("presentations/errorLog/print"), {
187
+ errorLogName: errorLogName,
188
+ propsDriveName: propsName
189
+ });
190
+ }
191
+ async clearDraft() {
192
+ await this.httpClient.post(this.getDraftUrl("clear"));
193
+ }
194
+ async convertDraftFromPrevGfv({
195
+ prevGfvDraftId,
196
+ gfv
197
+ }) {
198
+ await this.httpClient.post(this.getDraftUrl("convert")).withQueryParams({
199
+ id: prevGfvDraftId,
200
+ gfv: gfv
201
+ });
202
+ }
203
+ async sendChangeSet(data, currentDataVersion) {
204
+ const result = await this.httpClient.post(this.getDraftUrl("inner")).withQueryParams({
205
+ dataVersion: currentDataVersion
206
+ }).withJsonBody(data).acceptCode(409);
207
+ const getSuccessResult = async () => {
208
+ var _dataResult$dataVersi;
209
+ const dataResult = await result.json();
210
+ return {
211
+ dataVersion: (_dataResult$dataVersi = dataResult === null || dataResult === void 0 ? void 0 : dataResult.dataVersion) !== null && _dataResult$dataVersi !== void 0 ? _dataResult$dataVersi : (0, _TypingUtils.reject)("Invalid dataVersion after applying change set.")
212
+ };
213
+ };
214
+ return result.status == 200 ? await getSuccessResult() : result.status;
215
+ }
216
+ async sendChangeWithNormalizationSet(data, currentDataVersion, normalizerId) {
217
+ const result = await this.httpClient.post(this.getDraftUrl("inner/patch-with-normalization")).withQueryParams({
218
+ dataVersion: currentDataVersion,
219
+ normalizerId: normalizerId
220
+ }).withJsonBody(data).acceptCode(409);
221
+ return result.status == 200 ? await result.json() : result.status;
222
+ }
223
+ sendChangeSetSync(data, currentDataVersion, normalizerId) {
224
+ const result = this.httpClient.postSync(this.getDraftUrl("inner"), {
225
+ dataVersion: currentDataVersion
226
+ }, data);
227
+ const getSuccessResultSync = () => {
228
+ var _dataResult$dataVersi2;
229
+ const dataResult = result.json();
230
+ return {
231
+ dataVersion: (_dataResult$dataVersi2 = dataResult === null || dataResult === void 0 ? void 0 : dataResult.dataVersion) !== null && _dataResult$dataVersi2 !== void 0 ? _dataResult$dataVersi2 : (0, _TypingUtils.reject)("Invalid dataVersion after applying change set.")
232
+ };
233
+ };
234
+ return result.status == 200 ? getSuccessResultSync() : result.status;
235
+ }
236
+ async getRequisites(requisiteList) {
237
+ return await this.httpClient.post(this.getDraftUrl("get-inner")).withJsonBody(requisiteList).json();
238
+ }
239
+ async getInner(paths) {
240
+ return await this.httpClient.post(this.getDraftUrl("get-inner")).withJsonBody(paths).json();
241
+ }
242
+ getPartialInner(rules, maxInstanceCount) {
243
+ const convertedRules = rules.map(convertPathLoadSpecificationToString);
244
+ return this.httpClient.post(this.getDraftUrl("get-partial-inner")).withQueryParams(maxInstanceCount != undefined && {
245
+ maxInstanceCount: maxInstanceCount.toString()
246
+ }).withJsonBody(convertedRules.length > 0 ? convertedRules : ["*"]).json();
247
+ }
248
+ async getPartialInnerAsJsonTree(rules, maxInstanceCount) {
249
+ const convertedRules = rules.map(convertPathLoadSpecificationToString);
250
+ return this.httpClient.post(this.getDraftUrl("get-partial-inner")).withQueryParams(maxInstanceCount != undefined && {
251
+ maxInstanceCount: maxInstanceCount.toString()
252
+ }).withQueryParams({
253
+ format: "JsonTree"
254
+ }).withJsonBody(convertedRules.length > 0 ? convertedRules : ["*"]).json();
255
+ }
256
+ getRawPartialInnerAsJsonTree(rules, maxInstanceCount) {
257
+ const convertedRules = rules.map(convertPathLoadSpecificationToString);
258
+ return this.httpClient.post(this.getDraftUrl("get-partial-inner2")).withQueryParams(maxInstanceCount != undefined && {
259
+ maxInstanceCount: maxInstanceCount.toString()
260
+ }).withJsonBody(convertedRules.length > 0 ? convertedRules : ["*"]).json();
261
+ }
262
+ getDataVersion() {
263
+ return this.httpClient.get(this.getDraftUrl("inner/get-data-version")).json();
264
+ }
265
+ async getExplanatoryNote() {
266
+ return await this.httpClient.get(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.explanatoryNote)).json();
267
+ }
268
+ async getAttachmentById(attachmentId) {
269
+ var _result$value, _result;
270
+ const result = await this.httpClient.post(this.getDraftUrl("get-inner")).withJsonBody([`@attachment/${attachmentId}`]).json();
271
+ return (_result$value = (_result = result[`@attachment/${attachmentId}`]) === null || _result === void 0 ? void 0 : _result.value) !== null && _result$value !== void 0 ? _result$value : (0, _TypingUtils.reject)();
272
+ }
273
+ async getAllAttachments() {
274
+ const result = await this.httpClient.post(this.getDraftUrl("get-inner")).withJsonBody([`@attachment/*`]).json();
275
+ return Object.values(result).map(x => x.value);
276
+ }
277
+ async removeAttachments(attachmentIds) {
278
+ await this.httpClient.post(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.inner)).withQueryParams(strangeOptions).withJsonBody({
279
+ added: [],
280
+ changed: {},
281
+ removed: attachmentIds.map(id => `@attachment/${id}`)
282
+ });
283
+ }
284
+ async createOrUpdateAttachments(attachments) {
285
+ const changed = {};
286
+ for (const attachment of attachments) {
287
+ changed[`@attachment/${attachment.id}`] = {
288
+ contentUri: attachment.contentUri,
289
+ id: attachment.id,
290
+ meta: attachment.meta
291
+ };
292
+ }
293
+ await this.httpClient.post(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.inner)).withQueryParams(strangeOptions).withJsonBody({
294
+ added: [],
295
+ changed: changed,
296
+ removed: []
297
+ });
298
+ }
299
+ async createDraftAttachment(gfv, path) {
300
+ return await this.httpClient.post(this.getDraftUrl("external/create-attachment-draft")).withQueryParams({
301
+ gfv: gfv,
302
+ path: path
303
+ }).json();
304
+ }
305
+ async openLoadedAttachmentAsDraft(id) {
306
+ const response = await this.httpClient.post(this.getDraftUrl("external/open-loaded-attachment-as-draft")).withQueryParams({
307
+ attachmentId: id
308
+ }).acceptCode(413);
309
+ if (response.status === 413) {
310
+ const errorData = await response.json();
311
+ if (errorData.errorCode === "FufSizeTooLarge") {
312
+ throw new _FufSizeTooLargeError.FufSizeTooLargeError(errorData.message);
313
+ }
314
+ throw new _HttpClient.HttpError(errorData.message, response.status);
315
+ }
316
+ return await response.json();
317
+ }
318
+ async setPresentation(presentationType, content) {
319
+ let request = this.httpClient.put(this.getDraftPresentationUrl(presentationType));
320
+ if (typeof content === "string") {
321
+ request = request.withRawBody(content);
322
+ } else if ((0, _IsBuffer.isBuffer)(content)) {
323
+ request = request.withRawBody(content);
324
+ } else {
325
+ request = request.withJsonBody(content);
326
+ }
327
+ await request;
328
+ }
329
+ async patchPresentation(presentationType, presentationContent) {
330
+ await this.httpClient.patch(this.getDraftPresentationUrl(presentationType)).withJsonBody(presentationContent);
331
+ }
332
+ async getFileProperties(driveUri, ignoreSizeCheck) {
333
+ const response = await this.httpClient.get(`v1/files/get-properties`).withQueryParams({
334
+ driveUri: driveUri,
335
+ ignoreSizeCheck: ignoreSizeCheck !== null && ignoreSizeCheck !== void 0 ? ignoreSizeCheck : false
336
+ }).acceptCode(400).acceptCode(413);
337
+ if (response.status === 400 || response.status === 413 || response.status === 200) {
338
+ return response.json();
339
+ }
340
+ return undefined;
341
+ }
342
+ async prepareAndGetFileProperties(driveUri, gfv) {
343
+ const response = await this.httpClient.get(`v1/files/prepare-and-get-properties`).withQueryParams({
344
+ gfv: gfv,
345
+ driveUri: driveUri
346
+ }).acceptCode(413);
347
+ if (response.status === 400) {
348
+ return undefined;
349
+ }
350
+ if (response.status === 413) {
351
+ const errorData = await response.json();
352
+ if (errorData.errorCode === "FufSizeTooLarge") {
353
+ throw new _FufSizeTooLargeError.FufSizeTooLargeError(errorData.message);
354
+ }
355
+ throw new _HttpClient.HttpError(errorData.message, response.status);
356
+ }
357
+ return await response.json();
358
+ }
359
+ async uploadAndGetFileProperties(driveUris, gfv, abortSignal) {
360
+ try {
361
+ const response = await this.httpClient.post(`v1/files/upload-and-get-properties`).withQueryParams({
362
+ gfv: gfv
363
+ }).withJsonBody(driveUris).withAbortSignal(abortSignal).acceptCode(400).acceptCode(413);
364
+ if (response.status !== 200) {
365
+ const data = await response.json();
366
+ return {
367
+ serverError: data.errorCode,
368
+ invalidSourceDriveContentNames: "",
369
+ sourcesTotalCount: 0
370
+ };
371
+ }
372
+ const data = await response.json();
373
+ return data;
374
+ } catch (e) {
375
+ return {
376
+ serverError: ServerErrors.UnknownError,
377
+ invalidSourceDriveContentNames: "",
378
+ sourcesTotalCount: 0
379
+ };
380
+ }
381
+ }
382
+ async acceptTransferType(fufDriveUri, transferType, abortSignal) {
383
+ try {
384
+ const response = await this.httpClient.post(`v1/ns/${this.draftFullId.ns}/drafts/${this.draftFullId.draftId}/transfer/combine`).withQueryParams({
385
+ fufDriveUri: fufDriveUri,
386
+ typeId: transferType
387
+ }).withAbortSignal(abortSignal).acceptCode(400).acceptCode(413);
388
+ if (response.status !== 200) {
389
+ const data = await response.json();
390
+ return {
391
+ serverError: data.errorCode
392
+ };
393
+ }
394
+ return undefined;
395
+ } catch (e) {
396
+ return {
397
+ serverError: ServerErrors.UnknownError
398
+ };
399
+ }
400
+ }
401
+ async acceptMultipleTransferType(files, abortSignal) {
402
+ try {
403
+ const response = await this.httpClient.post(`v1/ns/${this.draftFullId.ns}/drafts/${this.draftFullId.draftId}/transfer/combine-multiple`).withJsonBody(files).withAbortSignal(abortSignal).acceptCode(400).acceptCode(413);
404
+ if (response.status !== 200) {
405
+ const data = await response.json();
406
+ return {
407
+ serverError: data.errorCode
408
+ };
409
+ }
410
+ return undefined;
411
+ } catch (e) {
412
+ return {
413
+ serverError: ServerErrors.UnknownError
414
+ };
415
+ }
416
+ }
417
+ async setFufByDriveUri(driveUri) {
418
+ await this.httpClient.put(this.getDraftUrl("set-fuf")).withQueryParams({
419
+ driveUri: driveUri
420
+ });
421
+ }
422
+ async combineFufByDriveUri(driveUri, combineMethod, abortSignal) {
423
+ const response = await this.httpClient.post(this.getDraftUrl("transfer/combine-with-fuf")).withQueryParams({
424
+ fufDriveUri: driveUri,
425
+ combineMethod: combineMethod
426
+ }).withAbortSignal(abortSignal);
427
+ if (response.status === 400) {
428
+ return undefined;
429
+ }
430
+ return await response.json();
431
+ }
432
+ async excelsToPartialFufs(gfv, pathToTable, driveUris) {
433
+ try {
434
+ const response = await this.httpClient.post("v1/files/excels-to-partial-fufs").withQueryParams({
435
+ gfv: gfv,
436
+ pathToTable: pathToTable
437
+ }).withJsonBody(driveUris);
438
+ if (response.status === 200) {
439
+ return await response.json();
440
+ }
441
+ return undefined;
442
+ } catch (e) {
443
+ return undefined;
444
+ }
445
+ }
446
+ async importFromPartialFufsByPath(pathToTable, driveUri, combineMethod, combinatorType) {
447
+ try {
448
+ const response = await this.httpClient.post(this.getDraftUrl("transfer/import-from-partial-fufs-by-path")).withQueryParams({
449
+ pathToTable: pathToTable,
450
+ combineMethod: combineMethod,
451
+ combinatorType: combinatorType
452
+ }).withJsonBody(driveUri);
453
+ if (response.status === 200) {
454
+ return await response.json();
455
+ }
456
+ return undefined;
457
+ } catch (e) {
458
+ return undefined;
459
+ }
460
+ }
461
+ async multipleCombineFufByDriveUri(driveUris, combineMethod, args) {
462
+ const response = await this.httpClient.post(this.getDraftUrl("transfer/combine-with-fufs")).withQueryParams({
463
+ combineMethod: combineMethod
464
+ }).withJsonBody({
465
+ driveUris: driveUris,
466
+ arguments: args
467
+ }).acceptCode(400).acceptCode(500);
468
+ if (response.status === 400 || response.status === 500) {
469
+ return undefined;
470
+ }
471
+ return await response.json();
472
+ }
473
+ async importXmls(driveUris, combineMethod, combinatorType, isImportByFuf, args) {
474
+ const response = await this.httpClient.post(this.getDraftUrl("transfer/import-xmls")).withQueryParams({
475
+ combineMethod: combineMethod,
476
+ combinatorType: combinatorType,
477
+ importByFuf: isImportByFuf
478
+ }).withJsonBody({
479
+ FufDriveUris: driveUris,
480
+ arguments: args
481
+ });
482
+ if (response.status === 400) {
483
+ return undefined;
484
+ }
485
+ return await response.json();
486
+ }
487
+ async setDraftSettings(settings) {
488
+ await this.httpClient.patch(this.getDraftUrl("external/set-settings")).withJsonBody(settings);
489
+ }
490
+ async getDraftSettings() {
491
+ const response = await this.httpClient.get(this.getDraftUrl("external/get-settings"));
492
+ return response.json();
493
+ }
494
+ async normalizeByRules(rules) {
495
+ await this.httpClient.post(this.getDraftUrl("test-normalize")).withJsonBody(rules);
496
+ }
497
+ getHrefDownloadDraftPresentation(presentationType) {
498
+ return this.httpClient.url(this.getDraftPresentationUrl(presentationType));
499
+ }
500
+ getDraftUrl(draftRelatedUrl) {
501
+ return `v1/ns/${this.draftFullId.ns}/drafts/${this.draftFullId.draftId}/${draftRelatedUrl}`;
502
+ }
503
+ getDraftPresentationUrl(presentationType) {
504
+ return this.getDraftUrl(`presentations/${presentationType.toString()}`);
505
+ }
506
+ async setMultipleWithNormalization(rules) {
507
+ const uri = this.getDraftUrl("inner/set-multiple-with-normalization");
508
+ const finalRules = rules.map(x => ({
509
+ ...x,
510
+ path: (0, _ModelPath.convertToLegacyPath)(x.path)
511
+ }));
512
+ await this.httpClient.patch(uri).withJsonBody(finalRules);
513
+ }
514
+ async normalizeDirtyMasks() {
515
+ const uri = this.getDraftUrl("inner/normalize-dirty-masks");
516
+ const result = await this.httpClient.post(uri);
517
+ return result.status == 200 ? await result.json() : result.status;
518
+ }
519
+ async searchInstancesByText(text, pathsPrefix, pathsToSearch, maxInstanceCount) {
520
+ const maxInstanceCountParams = maxInstanceCount != undefined ? {
521
+ maxInstanceCount: maxInstanceCount
522
+ } : {};
523
+ const params = {
524
+ searchString: text,
525
+ pathsPrefix: pathsPrefix,
526
+ ...maxInstanceCountParams
527
+ };
528
+ return this.httpClient.post(this.getDraftUrl("inner/search-by-string")).withQueryParams(params).withJsonBody(pathsToSearch).json();
529
+ }
530
+ async queryCollection(request, abortSignal) {
531
+ return this.httpClient.post(this.getDraftUrl("inner/query-collection")).withJsonBody(request).withAbortSignal(abortSignal).json();
532
+ }
533
+ async resolveInnerPath(request, abortSignal) {
534
+ return this.httpClient.post(this.getDraftUrl("inner/resolve-inner-path")).withJsonBody(request).withAbortSignal(abortSignal).json();
535
+ }
536
+ async customNormalize(normalizerId, pathPrefixes, abortSignal) {
537
+ const params = {
538
+ normalizerId: normalizerId
539
+ };
540
+ const result = await this.httpClient.post(this.getDraftUrl("inner/custom-normalize")).withQueryParams(params).withJsonBody(pathPrefixes.map(x => x.toString())).withAbortSignal(abortSignal);
541
+ return result.status == 200 ? await result.json() : result.status;
542
+ }
543
+ async importEmployees(request) {
544
+ await this.httpClient.patch(this.getDraftUrl("staff")).withJsonBody(request);
545
+ }
546
+ async deleteInstances(deletingRules) {
547
+ await this.httpClient.post(this.getDraftUrl("inner/delete-instances")).withJsonBody(deletingRules);
548
+ }
549
+ async runMassAction(actionId, parameters) {
550
+ const queryParams = {
551
+ actionId: actionId
552
+ };
553
+ await this.httpClient.post(this.getDraftUrl("inner/mass-action")).withQueryParams(queryParams).withJsonBody(parameters);
554
+ }
555
+ print(type, body) {
556
+ return this.httpClient.post(this.getDraftUrl(`presentations/inner/print/${type}`)).withJsonBody(body).json();
557
+ }
558
+ async printExcel(pathToTable) {
559
+ try {
560
+ const response = await this.httpClient.post(this.getDraftUrl(`presentations/table/print`)).withQueryParams({
561
+ pathToTable: pathToTable
562
+ });
563
+ if (response.status === 200) {
564
+ const tableExcel = response.json();
565
+ return tableExcel;
566
+ }
567
+ return undefined;
568
+ } catch (e) {
569
+ return undefined;
570
+ }
571
+ }
572
+ async checkByPopd() {
573
+ const response = await this.httpClient.get(`v1/ns/${this.draftFullId.ns}/drafts/${this.draftFullId.draftId}/checkByPopd`);
574
+ return response.json();
575
+ }
576
+ }
577
+ exports.CandyApiDraftClient = CandyApiDraftClient;
578
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVHlwaW5nVXRpbHMiLCJyZXF1aXJlIiwiX0h0dHBDbGllbnQiLCJfQXV0aGVudGljYXRpb25Nb2RlIiwiX01vZGVsUGF0aCIsIl9Gb2N1c1R5cGVzIiwiX0RyYWZ0UHJlc2VudGF0aW9uVHlwZSIsIl9Jc0J1ZmZlciIsIl9GdWZTaXplVG9vTGFyZ2VFcnJvciIsInN0cmFuZ2VPcHRpb25zIiwic3JjIiwiZGF0YVZlcnNpb24iLCJDYW5keVJlc291cmNlWm9uZXMiLCJleHBvcnRzIiwiVGVzdEZvcm1zIiwiU2VydmVyRXJyb3JzIiwiY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nIiwic3BlYyIsInNraXAiLCJwYXRoT3JQYXRoUHJlZml4IiwidG9MZWdhY3lQYXRoIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImV4Y2VwdGlvbkxvZ2dlciIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlciIsImZvckRyYWZ0IiwiZHJhZnRGdWxsSWQiLCJDYW5keUFwaURyYWZ0Q2xpZW50IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJwYXRocyIsIm1hcCIsImlubiIsInJlc3BvbnNlIiwicG9zdCIsImdldERyYWZ0VXJsIiwid2l0aEpzb25Cb2R5IiwianNvbiIsInJlc3VsdCIsIl9yZXNwb25zZSIsImlublNlcnZlclZhbHVlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJlcnJvciIsImVycm9yQ29kZSIsIkZvY3VzU2VydmVyRXJyb3JDb2RlIiwiTm9Jbm5FcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSR2YWx1ZSIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvcjIiLCJnZXRBbGxHZnZzIiwiYWJvcnRTaWduYWwiLCJib2R5IiwiZ2V0IiwiY3JlYXRlRHJhZnRGcm9tRHJpdmUiLCJucyIsImZ1ZkRyaXZlVXJpIiwid2l0aFF1ZXJ5UGFyYW1zIiwid2l0aEFib3J0U2lnbmFsIiwiY3JlYXRlRW1wdHlEcmFmdCIsImdmdiIsImNyZWF0ZURyYWZ0IiwiZnVmQ29udGVudCIsIndpdGhDb250ZW50VHlwZSIsIndpdGhCb2R5RnJvbUJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJFcnJvciIsImNoZWNrQWxpdmUiLCJkcmFmdFJlbGF0ZWRVcmwiLCJkcmFmdElkIiwiZ2V0RmVhdHVyZUZsYWdzIiwiZ2V0SHJlZlRvSW5uZXJFZGl0b3IiLCJ1cmwiLCJnZXRIcmVmRG93bmxvYWRGdWYiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRJbm5lckZ1ZiIsIkRyYWZ0UHJlc2VudGF0aW9uVHlwZSIsImlubmVyRnVmIiwidGV4dCIsImdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYiLCJnZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbiIsImdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbyIsImNsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZEb3dubG9hZElubmVyIiwiaW5uZXIiLCJnZXRFcnJvckxvZyIsImdldERyYWZ0UHJlc2VudGF0aW9uVXJsIiwiZXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0VGFza0J5SWQiLCJ0YXNrSWQiLCJfdGFza3MiLCJ0YXNrcyIsImdldEZ1ZldpdGhBdHRhY2htZW50cyIsImdldFBhcnRpYWxGdWYiLCJydWxlcyIsImdldEFsbFRhc2tzIiwiT2JqZWN0IiwidmFsdWVzIiwieCIsImVucXVldWVUYXNrIiwidGFza0luZm8iLCJhZGRlZCIsImNoYW5nZWQiLCJpZCIsInJlbW92ZWQiLCJjYW5jZWxUYXNrIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJlcnJvcmxvZ0V4cGVydCIsImdldEhyZWZUb0Vycm9yTG9nUGRmIiwiZXJyb3JMb2dOYW1lIiwicHJvcHNOYW1lIiwicHJvcHNEcml2ZU5hbWUiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJwcmV2R2Z2RHJhZnRJZCIsInNlbmRDaGFuZ2VTZXQiLCJkYXRhIiwiY3VycmVudERhdGFWZXJzaW9uIiwiYWNjZXB0Q29kZSIsImdldFN1Y2Nlc3NSZXN1bHQiLCJfZGF0YVJlc3VsdCRkYXRhVmVyc2kiLCJkYXRhUmVzdWx0IiwicmVqZWN0Iiwic3RhdHVzIiwic2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0Iiwibm9ybWFsaXplcklkIiwic2VuZENoYW5nZVNldFN5bmMiLCJwb3N0U3luYyIsImdldFN1Y2Nlc3NSZXN1bHRTeW5jIiwiX2RhdGFSZXN1bHQkZGF0YVZlcnNpMiIsImdldFJlcXVpc2l0ZXMiLCJyZXF1aXNpdGVMaXN0IiwiZ2V0SW5uZXIiLCJnZXRQYXJ0aWFsSW5uZXIiLCJtYXhJbnN0YW5jZUNvdW50IiwiY29udmVydGVkUnVsZXMiLCJ0b1N0cmluZyIsImxlbmd0aCIsImdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJmb3JtYXQiLCJnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0RGF0YVZlcnNpb24iLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsIl9yZXN1bHQkdmFsdWUiLCJfcmVzdWx0IiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJjcmVhdGVEcmFmdEF0dGFjaG1lbnQiLCJwYXRoIiwib3BlbkxvYWRlZEF0dGFjaG1lbnRBc0RyYWZ0IiwiZXJyb3JEYXRhIiwiRnVmU2l6ZVRvb0xhcmdlRXJyb3IiLCJtZXNzYWdlIiwiSHR0cEVycm9yIiwic2V0UHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uVHlwZSIsImNvbnRlbnQiLCJyZXF1ZXN0IiwicHV0Iiwid2l0aFJhd0JvZHkiLCJpc0J1ZmZlciIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsImlnbm9yZVNpemVDaGVjayIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJhY2NlcHRUcmFuc2ZlclR5cGUiLCJ0cmFuc2ZlclR5cGUiLCJ0eXBlSWQiLCJhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZSIsImZpbGVzIiwic2V0RnVmQnlEcml2ZVVyaSIsImNvbWJpbmVGdWZCeURyaXZlVXJpIiwiY29tYmluZU1ldGhvZCIsImV4Y2Vsc1RvUGFydGlhbEZ1ZnMiLCJwYXRoVG9UYWJsZSIsImltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aCIsImNvbWJpbmF0b3JUeXBlIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsImFyZ3MiLCJhcmd1bWVudHMiLCJpbXBvcnRYbWxzIiwiaXNJbXBvcnRCeUZ1ZiIsImltcG9ydEJ5RnVmIiwiRnVmRHJpdmVVcmlzIiwic2V0RHJhZnRTZXR0aW5ncyIsInNldHRpbmdzIiwiZ2V0RHJhZnRTZXR0aW5ncyIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJzZXRNdWx0aXBsZVdpdGhOb3JtYWxpemF0aW9uIiwidXJpIiwiZmluYWxSdWxlcyIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJub3JtYWxpemVEaXJ0eU1hc2tzIiwic2VhcmNoSW5zdGFuY2VzQnlUZXh0IiwicGF0aHNQcmVmaXgiLCJwYXRoc1RvU2VhcmNoIiwibWF4SW5zdGFuY2VDb3VudFBhcmFtcyIsInBhcmFtcyIsInNlYXJjaFN0cmluZyIsInF1ZXJ5Q29sbGVjdGlvbiIsInJlc29sdmVJbm5lclBhdGgiLCJjdXN0b21Ob3JtYWxpemUiLCJwYXRoUHJlZml4ZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJkZWxldGVJbnN0YW5jZXMiLCJkZWxldGluZ1J1bGVzIiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicGFyYW1ldGVycyIsInF1ZXJ5UGFyYW1zIiwicHJpbnQiLCJ0eXBlIiwicHJpbnRFeGNlbCIsInRhYmxlRXhjZWwiLCJjaGVja0J5UG9wZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IEZldGNoIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvRmV0Y2hJbXBsZW1lbnRhdGlvbi9GZXRjaFwiO1xuaW1wb3J0IHsgRXhjZXB0aW9uTG9nZ2VyLCBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcbmltcG9ydCB7IElDb21iaW5lQnlUcmFuc2ZlcnMgfSBmcm9tIFwiLi4vLi4vRW5naW5lL3NyYy9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvTW9kYWxzL1VwbG9hZFNlY3Rpb24vVHlwZXNcIjtcbmltcG9ydCB7IEFic29sdXRlTW9kZWxQYXRoLCBjb252ZXJ0VG9MZWdhY3lQYXRoIH0gZnJvbSBcIi4uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBCYXNlR2V0RnVmUmVzcG9uc2UsXG4gICAgQ2hlY2tTY2VuYXJpb1R5cGUsXG4gICAgRHJhZnRTZXR0aW5ncyxcbiAgICBGdWZXaXRoQXR0YWNobWVudHNSZXNwb25zZSxcbiAgICBJQ2FuZHlBcGlDbGllbnQsXG4gICAgSUNhbmR5QXBpRHJhZnRDbGllbnQsXG4gICAgSUlubmVyQ2hhbmdlUmVzdWx0LFxuICAgIElJbm5lckNoYW5nZVN1Y2Nlc3NSZXN1bHQsXG4gICAgUGF0aExvYWRTcGVjaWZpY2F0aW9uLFxufSBmcm9tIFwiLi9JQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB7IFNlcnZlcklubmVyUmVzcG9uc2UsIFNlcnZlckpzb25SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7XG4gICAgRXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlLFxuICAgIEZpbGVQcm9wZXJ0aWVzLFxuICAgIEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlLFxuICAgIFNlcnZlckVycm9yUmVzcG9uc2UsXG4gICAgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSxcbn0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEZvY3VzU2VydmVyRXJyb3JDb2RlLCBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IEdldEF0dGFjaG1lbnRzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9HZXRBdHRhY2htZW50c1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNTZXJ2ZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgR2V0VGFza3NTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL0dldFRhc2tzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJlcXVpc2l0ZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tIFwiLi9Jc0J1ZmZlclwiO1xuaW1wb3J0IHsgQ29tYmluYXRvclR5cGUsIENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IEZ1ZlNpemVUb29MYXJnZUVycm9yIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0Z1ZlNpemVUb29MYXJnZUVycm9yXCI7XG5pbXBvcnQgeyBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvU3RhZmYvSW1wb3J0RW1wbG95ZWVzUmVxdWVzdFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRUeXBlXCI7XG5pbXBvcnQgeyBQcmludFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgU2VydmVyUmF3UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSYXdSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ2FuZHlQb3BkUHJvdG9jb2wgfSBmcm9tIFwiLi9UeXBlcy9FcnJvckxvZy9DYW5keVBvcGRQcm90b2NvbFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvSW5zdGFuY2VzRGVsZXRpbmcvSW5zdGFuY2VzRGVsZXRpbmdSdWxlXCI7XG5pbXBvcnQgeyBWYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvTWFzc0FjdGlvbnMvVmFsdWVGb3JJbnN0YW5jZXNTZXR0aW5nUnVsZVwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9RdWVyeUNvbGxlY3Rvbi9Jbm5lclF1ZXJ5UmVxdWVzdFwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUXVlcnlDb2xsZWN0b24vSW5uZXJRdWVyeVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBSZXNvbHZlSW5uZXJQYXRoUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1Jlc29sdmVJbm5lclBhdGhSZXF1ZXN0XCI7XG5pbXBvcnQgeyBSZXNvbHZlUGF0aFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvUmVzb2x2ZVBhdGhSZXNwb25zZVwiO1xuXG5jb25zdCBzdHJhbmdlT3B0aW9ucyA9IHsgc3JjOiBcImNoYW5nZVNldFwiLCBkYXRhVmVyc2lvbjogXCIwXCIgfTtcblxuZXhwb3J0IGNvbnN0IENhbmR5UmVzb3VyY2Vab25lcyA9IHtcbiAgICBUZXN0Rm9ybXM6IFwiY2FuZHkucmVzb3VyY2VzLnRlc3QtZm9ybXNcIixcbn07XG5cbmV4cG9ydCBlbnVtIFNlcnZlckVycm9ycyB7XG4gICAgRnVmU2l6ZVRvb0xhcmdlID0gXCJGdWZTaXplVG9vTGFyZ2VcIixcbiAgICBCYWRSZXF1ZXN0ID0gXCJCYWRSZXF1ZXN0XCIsXG4gICAgVW5rbm93bkVycm9yID0gXCJVbmtub3duRXJyb3JcIixcbn1cblxuZnVuY3Rpb24gY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKHNwZWM6IFBhdGhMb2FkU3BlY2lmaWNhdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKHNwZWMuc2tpcCA/IFwiLVwiIDogXCJcIikgK1xuICAgICAgICAoc3BlYy5wYXRoT3JQYXRoUHJlZml4ID09PSBcIipcIiA/IHNwZWMucGF0aE9yUGF0aFByZWZpeCA6IHNwZWMucGF0aE9yUGF0aFByZWZpeC50b0xlZ2FjeVBhdGgoKSlcbiAgICApO1xufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgcmVzb3VyY2Vab25lOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uOiB1bmRlZmluZWQgfCBBdXRoZW50aWNhdGlvbk1vZGUsXG4gICAgICAgIGV4Y2VwdGlvbkxvZ2dlcj86IEV4Y2VwdGlvbkxvZ2dlclxuICAgICkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChcbiAgICAgICAgICAgIGZldGNoSW1wbCxcbiAgICAgICAgICAgIGJhc2VVcmwsXG4gICAgICAgICAgICBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyKGF1dGhlbnRpY2F0aW9uKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGNlcHRpb25Mb2dnZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IENhbmR5QXBpRHJhZnRDbGllbnQodGhpcy5odHRwQ2xpZW50LCBkcmFmdEZ1bGxJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBwYXRocyA9IGlubnMubWFwKGlubiA9PiBgQGZvY3VzLyR7aW5ufWApO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChkcmFmdEZ1bGxJZCwgXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248Rm9jdXNTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBHZXRCeUlublJlc3BvbnNlID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaW5uIG9mIGlubnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlublNlcnZlclZhbHVlID0gcmVzcG9uc2VbYEBmb2N1cy8ke2lubn1gXT8udmFsdWU7XG4gICAgICAgICAgICBpZiAoaW5uU2VydmVyVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlNlcnZlciBkb2VzIG5vdCByZXR1cm4gaW5uIGluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBGb2N1c1NlcnZlckVycm9yQ29kZS5Ob0lubkVycm9yLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5uU2VydmVyVmFsdWUudmFsdWUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IGlublNlcnZlclZhbHVlLmVycm9yQ29kZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBidWlsZC1zZXJ2ZXIvZ2Z2c2ApLmpzb248c3RyaW5nW10+KCk7XG4gICAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0LWZyb20tZHJpdmVgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgICAgICAgIGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRW1wdHlEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGZ1ZkNvbnRlbnQ6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkIHwgc3RyaW5nLCBmdWZDb250ZW50PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgIT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoQnVmZmVyLmZyb20oW10pKVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZHJhZnQ6IG5vIGdmdiBhbmQgbm8gZnVmIHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tBbGl2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgX3N0YXR1cy9waW5nYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHtkcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcInYxL2ZlYXR1cmVzL2ZsYWdzXCIpLmpzb248RmVhdHVyZUZsYWdzUmVzcG9uc2U+KCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlEcmFmdENsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50LCBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcbiAgICAgICAgdGhpcy5kcmFmdEZ1bGxJZCA9IGRyYWZ0RnVsbElkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Jbm5lckVkaXRvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybChgaW5uZXItZWRpdG9yL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImdldC1mdWZcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2coKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImNvbnZlcnNpb25cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbm5lckZ1ZigpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQodGhpcy5nZXREcmFmdFVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXJGdWYpKSkudGV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lckZ1Zik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuY2xpZW50SW5mbyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5mb3Jtc0NsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmVycm9yTG9nKSkuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MoY2hlY2tTY2VuYXJpb3M6IENoZWNrU2NlbmFyaW9UeXBlW10pOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJlcnJvcmxvZ1wiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBjaGVja1NjZW5hcmlvczogY2hlY2tTY2VuYXJpb3MgfSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRUYXNrQnlJZCh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8U2VydmVyVGFzayB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAdGFzay8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRUYXNrc1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gdGFza3NbYEB0YXNrLyR7dGFza0lkfWBdPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RnVmV2l0aEF0dGFjaG1lbnRzKCk6IFByb21pc2U8RnVmV2l0aEF0dGFjaG1lbnRzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQodGhpcy5nZXREcmFmdFVybChcImdldC1mdWYtd2l0aC1hdHRhY2htZW50c1wiKSlcbiAgICAgICAgICAgIC5qc29uPEZ1ZldpdGhBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFBhcnRpYWxGdWYocnVsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxCYXNlR2V0RnVmUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248QmFzZUdldEZ1ZlJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElJbm5lckNoYW5nZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBkYXRhVmVyc2lvbjogY3VycmVudERhdGFWZXJzaW9uIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRhdGEpXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDkpO1xuXG4gICAgICAgIGNvbnN0IGdldFN1Y2Nlc3NSZXN1bHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gYXdhaXQgcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgZ2V0U3VjY2Vzc1Jlc3VsdCgpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0KFxuICAgICAgICBkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsXG4gICAgICAgIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyLFxuICAgICAgICBub3JtYWxpemVySWQ/OiBzdHJpbmdcbiAgICApOiBQcm9taXNlPElJbm5lckNoYW5nZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9wYXRjaC13aXRoLW5vcm1hbGl6YXRpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZGF0YVZlcnNpb246IGN1cnJlbnREYXRhVmVyc2lvbiwgbm9ybWFsaXplcklkOiBub3JtYWxpemVySWQgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRDaGFuZ2VTZXRTeW5jKFxuICAgICAgICBkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsXG4gICAgICAgIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyLFxuICAgICAgICBub3JtYWxpemVySWQ/OiBzdHJpbmdcbiAgICApOiBJSW5uZXJDaGFuZ2VSZXN1bHQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmh0dHBDbGllbnQucG9zdFN5bmModGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpLCB7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSwgZGF0YSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdFN5bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGdldFN1Y2Nlc3NSZXN1bHRTeW5jKCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWlzaXRlTGlzdClcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHVuZGVmaW5lZCB8IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiBQYXRoTG9hZFNwZWNpZmljYXRpb25bXSwgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlcik6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGNvbnZlcnRlZFJ1bGVzLmxlbmd0aCA+IDAgPyBjb252ZXJ0ZWRSdWxlcyA6IFtcIipcIl0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJJbm5lclJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogUGF0aExvYWRTcGVjaWZpY2F0aW9uW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZm9ybWF0OiBcIkpzb25UcmVlXCIgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoY29udmVydGVkUnVsZXMubGVuZ3RoID4gMCA/IGNvbnZlcnRlZFJ1bGVzIDogW1wiKlwiXSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckpzb25SZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmF3UGFydGlhbElubmVyQXNKc29uVHJlZShcbiAgICAgICAgcnVsZXM6IHJlYWRvbmx5IFBhdGhMb2FkU3BlY2lmaWNhdGlvbltdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJSYXdSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXIyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShjb252ZXJ0ZWRSdWxlcy5sZW5ndGggPiAwID8gY29udmVydGVkUnVsZXMgOiBbXCIqXCJdKVxuICAgICAgICAgICAgLmpzb248U2VydmVyUmF3UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFWZXJzaW9uKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9nZXQtZGF0YS12ZXJzaW9uXCIpKS5qc29uPG51bWJlcj4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwbGFuYXRvcnlOb3RlKCk6IFByb21pc2U8Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5leHBsYW5hdG9yeU5vdGUpKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRCeUlkKGF0dGFjaG1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXN1bHRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdPy52YWx1ZSA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQXR0YWNobWVudHMoKTogUHJvbWlzZTxBdHRhY2hJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlc3VsdCkubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBhdHRhY2htZW50SWRzLm1hcChpZCA9PiBgQGF0dGFjaG1lbnQvJHtpZH1gKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiByZWFkb25seSBBdHRhY2hJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIGNoYW5nZWRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudC5pZH1gXSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50VXJpOiBhdHRhY2htZW50LmNvbnRlbnRVcmksXG4gICAgICAgICAgICAgICAgaWQ6IGF0dGFjaG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgbWV0YTogYXR0YWNobWVudC5tZXRhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEF0dGFjaG1lbnQoZ2Z2OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8QXR0YWNoSW5mbz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvY3JlYXRlLWF0dGFjaG1lbnQtZHJhZnRcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIHBhdGg6IHBhdGggfSlcbiAgICAgICAgICAgIC5qc29uPEF0dGFjaEluZm8+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9wZW5Mb2FkZWRBdHRhY2htZW50QXNEcmFmdChpZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvb3Blbi1sb2FkZWQtYXR0YWNobWVudC1hcy1kcmFmdFwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBhdHRhY2htZW50SWQ6IGlkIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248QXR0YWNoSW5mbz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0UHJlc2VudGF0aW9uKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoY29udGVudCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aEpzb25Cb2R5KGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHBhdGNoUHJlc2VudGF0aW9uKFxuICAgICAgICBwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsXG4gICAgICAgIHByZXNlbnRhdGlvbkNvbnRlbnQ6IFByZXNlbnRhdGlvbkNvbnRlbnRcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpLndpdGhKc29uQm9keShwcmVzZW50YXRpb25Db250ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsZVByb3BlcnRpZXMoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGlnbm9yZVNpemVDaGVjaz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICApOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpLCBpZ25vcmVTaXplQ2hlY2s6IGlnbm9yZVNpemVDaGVjayA/PyBmYWxzZSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDEzIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9wcmVwYXJlLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvZmlsZXMvdXBsb2FkLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSwgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLCBzb3VyY2VzVG90YWxDb3VudDogMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4oKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yLFxuICAgICAgICAgICAgICAgIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VzVG90YWxDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0VHJhbnNmZXJUeXBlKFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICB0cmFuc2ZlclR5cGU6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmVgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksIHR5cGVJZDogdHJhbnNmZXJUeXBlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZShcbiAgICAgICAgZmlsZXM6IElDb21iaW5lQnlUcmFuc2ZlcnNbXSxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmUtbXVsdGlwbGVgKVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZmlsZXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRGdWZCeURyaXZlVXJpKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0VXJsKFwic2V0LWZ1ZlwiKSkud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGRyaXZlVXJpLCBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4Y2Vsc1RvUGFydGlhbEZ1ZnMoXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBwYXRoVG9UYWJsZTogc3RyaW5nLFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoXCJ2MS9maWxlcy9leGNlbHMtdG8tcGFydGlhbC1mdWZzXCIpXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2LCBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aChcbiAgICAgICAgcGF0aFRvVGFibGU6IHN0cmluZyxcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmF0b3JUeXBlOiBDb21iaW5hdG9yVHlwZVxuICAgICk6IFByb21pc2U8SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2ltcG9ydC1mcm9tLXBhcnRpYWwtZnVmcy1ieS1wYXRoXCIpKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgICAgICBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3JUeXBlOiBjb21iaW5hdG9yVHlwZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZHJpdmVVcmkpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2QsXG4gICAgICAgIGFyZ3M/OiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZzXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBkcml2ZVVyaXM6IGRyaXZlVXJpcywgYXJndW1lbnRzOiBhcmdzIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg1MDApO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0WG1scyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgY29tYmluYXRvclR5cGU6IENvbWJpbmF0b3JUeXBlLFxuICAgICAgICBpc0ltcG9ydEJ5RnVmOiBib29sZWFuLFxuICAgICAgICBhcmdzPzogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9pbXBvcnQteG1sc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgY29tYmluYXRvclR5cGU6IGNvbWJpbmF0b3JUeXBlLFxuICAgICAgICAgICAgICAgIGltcG9ydEJ5RnVmOiBpc0ltcG9ydEJ5RnVmLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBGdWZEcml2ZVVyaXM6IGRyaXZlVXJpcywgYXJndW1lbnRzOiBhcmdzIH0pO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0RHJhZnRTZXR0aW5ncyhzZXR0aW5nczogRHJhZnRTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godGhpcy5nZXREcmFmdFVybChcImV4dGVybmFsL3NldC1zZXR0aW5nc1wiKSkud2l0aEpzb25Cb2R5KHNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RHJhZnRTZXR0aW5ncygpOiBQcm9taXNlPERyYWZ0U2V0dGluZ3M+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJleHRlcm5hbC9nZXQtc2V0dGluZ3NcIikpO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uPERyYWZ0U2V0dGluZ3M+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5vcm1hbGl6ZUJ5UnVsZXMocnVsZXM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidGVzdC1ub3JtYWxpemVcIikpLndpdGhKc29uQm9keShydWxlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vJHtkcmFmdFJlbGF0ZWRVcmx9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyYWZ0VXJsKGBwcmVzZW50YXRpb25zLyR7cHJlc2VudGF0aW9uVHlwZS50b1N0cmluZygpfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRNdWx0aXBsZVdpdGhOb3JtYWxpemF0aW9uKHJ1bGVzOiBWYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdXJpID0gdGhpcy5nZXREcmFmdFVybChcImlubmVyL3NldC1tdWx0aXBsZS13aXRoLW5vcm1hbGl6YXRpb25cIik7XG4gICAgICAgIGNvbnN0IGZpbmFsUnVsZXMgPSBydWxlcy5tYXAoeCA9PiAoeyAuLi54LCBwYXRoOiBjb252ZXJ0VG9MZWdhY3lQYXRoKHgucGF0aCkgfSkpO1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godXJpKS53aXRoSnNvbkJvZHkoZmluYWxSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5vcm1hbGl6ZURpcnR5TWFza3MoKTogUHJvbWlzZTxJSW5uZXJDaGFuZ2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJpID0gdGhpcy5nZXREcmFmdFVybChcImlubmVyL25vcm1hbGl6ZS1kaXJ0eS1tYXNrc1wiKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodXJpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoc1ByZWZpeDogc3RyaW5nLFxuICAgICAgICBwYXRoc1RvU2VhcmNoOiBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgbWF4SW5zdGFuY2VDb3VudFBhcmFtcyA9IG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkID8geyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50IH0gOiB7fTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBzZWFyY2hTdHJpbmc6IHRleHQsIHBhdGhzUHJlZml4OiBwYXRoc1ByZWZpeCwgLi4ubWF4SW5zdGFuY2VDb3VudFBhcmFtcyB9O1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvc2VhcmNoLWJ5LXN0cmluZ1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoc1RvU2VhcmNoKVxuICAgICAgICAgICAgLmpzb248c3RyaW5nW10+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHF1ZXJ5Q29sbGVjdGlvbihyZXF1ZXN0OiBJbm5lclF1ZXJ5UmVxdWVzdCwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8SW5uZXJRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9xdWVyeS1jb2xsZWN0aW9uXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShyZXF1ZXN0KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPElubmVyUXVlcnlSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVzb2x2ZUlubmVyUGF0aChcbiAgICAgICAgcmVxdWVzdDogUmVzb2x2ZUlubmVyUGF0aFJlcXVlc3QsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFJlc29sdmVQYXRoUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL3Jlc29sdmUtaW5uZXItcGF0aFwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWVzdClcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxSZXNvbHZlUGF0aFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjdXN0b21Ob3JtYWxpemUoXG4gICAgICAgIG5vcm1hbGl6ZXJJZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgcGF0aFByZWZpeGVzOiBBYnNvbHV0ZU1vZGVsUGF0aFtdLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxJSW5uZXJDaGFuZ2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBub3JtYWxpemVySWQ6IG5vcm1hbGl6ZXJJZCB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9jdXN0b20tbm9ybWFsaXplXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhQcmVmaXhlcy5tYXAoeCA9PiB4LnRvU3RyaW5nKCkpKVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEVtcGxveWVlcyhyZXF1ZXN0OiBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0VXJsKFwic3RhZmZcIikpLndpdGhKc29uQm9keShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGVsZXRlSW5zdGFuY2VzKGRlbGV0aW5nUnVsZXM6IEluc3RhbmNlc0RlbGV0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9kZWxldGUtaW5zdGFuY2VzXCIpKS53aXRoSnNvbkJvZHkoZGVsZXRpbmdSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBhY3Rpb25JZDogYWN0aW9uSWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvbWFzcy1hY3Rpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQodHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPFByaW50UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy9pbm5lci9wcmludC8ke3R5cGV9YCkpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGJvZHkpXG4gICAgICAgICAgICAuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmludEV4Y2VsKHBhdGhUb1RhYmxlOiBzdHJpbmcpOiBQcm9taXNlPFByaW50UmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy90YWJsZS9wcmludGApKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUV4Y2VsID0gcmVzcG9uc2UuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZUV4Y2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0J5UG9wZCgpOiBQcm9taXNlPENhbmR5UG9wZFByb3RvY29sPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcbiAgICAgICAgICAgIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vY2hlY2tCeVBvcGRgXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb248Q2FuZHlQb3BkUHJvdG9jb2w+KCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxtQkFBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBMkJBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLHNCQUFBLEdBQUFMLE9BQUE7QUFPQSxJQUFBTSxTQUFBLEdBQUFOLE9BQUE7QUFHQSxJQUFBTyxxQkFBQSxHQUFBUCxPQUFBO0FBY0EsTUFBTVEsY0FBYyxHQUFHO0VBQUVDLEdBQUcsRUFBRSxXQUFXO0VBQUVDLFdBQVcsRUFBRTtBQUFJLENBQUM7QUFFdEQsTUFBTUMsa0JBQWtCLEdBQUFDLE9BQUEsQ0FBQUQsa0JBQUEsR0FBRztFQUM5QkUsU0FBUyxFQUFFO0FB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