@magic-xpa/engine 4.801.0-dev481.243 → 4.801.0-dev481.249

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 (293) hide show
  1. package/esm2020/index.mjs +190 -0
  2. package/{esm2015/magic-xpa-engine.js → esm2020/magic-xpa-engine.mjs} +0 -0
  3. package/esm2020/src/AccessHelper.mjs +3 -0
  4. package/esm2020/src/ClientManager.mjs +403 -0
  5. package/esm2020/src/CommandsProcessorBase.mjs +58 -0
  6. package/esm2020/src/CommandsProcessorManager.mjs +26 -0
  7. package/esm2020/src/CommandsTable.mjs +163 -0
  8. package/{esm2015/src/ConstInterface.js → esm2020/src/ConstInterface.mjs} +0 -0
  9. package/{esm2015/src/CurrentClientVersion.js → esm2020/src/CurrentClientVersion.mjs} +2 -2
  10. package/{esm2015/src/FlowMonitorInterface.js → esm2020/src/FlowMonitorInterface.mjs} +0 -0
  11. package/esm2020/src/GUIManager.mjs +63 -0
  12. package/{esm2015/src/GlobalCommandsManager.js → esm2020/src/GlobalCommandsManager.mjs} +0 -0
  13. package/{esm2015/src/GuiEventsProcessor.js → esm2020/src/GuiEventsProcessor.mjs} +0 -0
  14. package/{esm2015/src/ICommandsTable.js → esm2020/src/ICommandsTable.mjs} +1 -0
  15. package/{esm2015/src/ServerConfig.js → esm2020/src/ServerConfig.mjs} +0 -0
  16. package/{esm2015/src/bridge/IGuiEvent.js → esm2020/src/bridge/IGuiEvent.mjs} +0 -0
  17. package/esm2020/src/bridge/MagicBridge.mjs +41 -0
  18. package/{esm2015/src/commands/ClientOriginatedCommandTaskTag.js → esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs} +0 -0
  19. package/{esm2015/src/commands/ClientToServer/AddUserLocateDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs} +0 -0
  20. package/{esm2015/src/commands/ClientToServer/AddUserRangeDataviewCommand.js → esm2020/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs} +0 -0
  21. package/{esm2015/src/commands/ClientToServer/AddUserSortDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs} +0 -0
  22. package/{esm2015/src/commands/ClientToServer/BrowserEscEventCommand.js → esm2020/src/commands/ClientToServer/BrowserEscEventCommand.mjs} +0 -0
  23. package/{esm2015/src/commands/ClientToServer/ClientOriginatedCommand.js → esm2020/src/commands/ClientToServer/ClientOriginatedCommand.mjs} +0 -0
  24. package/{esm2015/src/commands/ClientToServer/ClientOriginatedCommandSerializer.js → esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs} +0 -0
  25. package/{esm2015/src/commands/ClientToServer/ColumnSortEventCommand.js → esm2020/src/commands/ClientToServer/ColumnSortEventCommand.mjs} +0 -0
  26. package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +278 -0
  27. package/{esm2015/src/commands/ClientToServer/CommandSerializationHelper.js → esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs} +0 -0
  28. package/{esm2015/src/commands/ClientToServer/ComputeEventCommand.js → esm2020/src/commands/ClientToServer/ComputeEventCommand.mjs} +0 -0
  29. package/{esm2015/src/commands/ClientToServer/ContextTerminationEventCommand.js → esm2020/src/commands/ClientToServer/ContextTerminationEventCommand.mjs} +0 -0
  30. package/{esm2015/src/commands/ClientToServer/ContextTimeoutResetCommand.js → esm2020/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs} +0 -0
  31. package/{esm2015/src/commands/ClientToServer/ControlItemsRefreshCommand.js → esm2020/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs} +0 -0
  32. package/{esm2015/src/commands/ClientToServer/DataViewOutputCommand.js → esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs} +0 -0
  33. package/{esm2015/src/commands/ClientToServer/DataviewCommand.js → esm2020/src/commands/ClientToServer/DataviewCommand.mjs} +0 -0
  34. package/{esm2015/src/commands/ClientToServer/EvaluateCommand.js → esm2020/src/commands/ClientToServer/EvaluateCommand.mjs} +0 -0
  35. package/{esm2015/src/commands/ClientToServer/EventCommand.js → esm2020/src/commands/ClientToServer/EventCommand.mjs} +0 -0
  36. package/{esm2015/src/commands/ClientToServer/ExecOperCommand.js → esm2020/src/commands/ClientToServer/ExecOperCommand.mjs} +0 -0
  37. package/{esm2015/src/commands/ClientToServer/FetchDataControlValuesEventCommand.js → esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs} +0 -0
  38. package/{esm2015/src/commands/ClientToServer/GlobalParamsQueryCommand.js → esm2020/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs} +0 -0
  39. package/{esm2015/src/commands/ClientToServer/ICommandTaskTag.js → esm2020/src/commands/ClientToServer/ICommandTaskTag.mjs} +1 -0
  40. package/{esm2015/src/commands/ClientToServer/IndexChangeEventCommand.js → esm2020/src/commands/ClientToServer/IndexChangeEventCommand.mjs} +0 -0
  41. package/{esm2015/src/commands/ClientToServer/IniputForceWriteCommand.js → esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs} +0 -0
  42. package/{esm2015/src/commands/ClientToServer/NonReversibleExitEventCommand.js → esm2020/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs} +0 -0
  43. package/{esm2015/src/commands/ClientToServer/QueryCommand.js → esm2020/src/commands/ClientToServer/QueryCommand.mjs} +0 -0
  44. package/{esm2015/src/commands/ClientToServer/RecomputeCommand.js → esm2020/src/commands/ClientToServer/RecomputeCommand.mjs} +0 -0
  45. package/{esm2015/src/commands/ClientToServer/RefreshEventCommand.js → esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs} +0 -0
  46. package/{esm2015/src/commands/ClientToServer/RefreshScreenEventCommand.js → esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs} +0 -0
  47. package/{esm2015/src/commands/ClientToServer/RollbackEventCommand.js → esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs} +0 -0
  48. package/{esm2015/src/commands/ClientToServer/SelectProgramCommand.js → esm2020/src/commands/ClientToServer/SelectProgramCommand.mjs} +0 -0
  49. package/{esm2015/src/commands/ClientToServer/SetTransactionStateDataviewCommand.js → esm2020/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs} +0 -0
  50. package/{esm2015/src/commands/ClientToServer/SubformOpenEventCommand.js → esm2020/src/commands/ClientToServer/SubformOpenEventCommand.mjs} +0 -0
  51. package/{esm2015/src/commands/ClientToServer/SubformRefreshEventCommand.js → esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs} +0 -0
  52. package/{esm2015/src/commands/ClientToServer/TransactionCommand.js → esm2020/src/commands/ClientToServer/TransactionCommand.mjs} +0 -0
  53. package/{esm2015/src/commands/ClientToServer/UnloadCommand.js → esm2020/src/commands/ClientToServer/UnloadCommand.mjs} +0 -0
  54. package/{esm2015/src/commands/ClientToServer/WriteMessageToServerLogCommand.js → esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs} +0 -0
  55. package/esm2020/src/commands/DataViewCommandBase.mjs +10 -0
  56. package/{esm2015/src/commands/IClientCommand.js → esm2020/src/commands/IClientCommand.mjs} +1 -0
  57. package/esm2020/src/commands/IClientTargetedCommand.mjs +9 -0
  58. package/{esm2015/src/commands/IClientToServerCommandInfo.js → esm2020/src/commands/IClientToServerCommandInfo.mjs} +1 -0
  59. package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +65 -0
  60. package/esm2020/src/commands/ServerToClient/AddLocateCommand.mjs +22 -0
  61. package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
  62. package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
  63. package/{esm2015/src/commands/ServerToClient/ClientRefreshCommand.js → esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs} +14 -17
  64. package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +27 -0
  65. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
  66. package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +222 -0
  67. package/esm2020/src/commands/ServerToClient/ResetLocateCommand.mjs +15 -0
  68. package/esm2020/src/commands/ServerToClient/ResetRangeCommand.mjs +15 -0
  69. package/esm2020/src/commands/ServerToClient/ResetSortCommand.mjs +15 -0
  70. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +37 -0
  71. package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +85 -0
  72. package/{esm2015/src/commands/ServerToClient/XMLBasedCommandBuilder.js → esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs} +0 -0
  73. package/{esm2015/src/communications/IConnectionStateManager.js → esm2020/src/communications/IConnectionStateManager.mjs} +1 -0
  74. package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +17 -0
  75. package/{esm2015/src/data/DataSourceIdKey.js → esm2020/src/data/DataSourceIdKey.mjs} +0 -0
  76. package/esm2020/src/data/DataView.mjs +1634 -0
  77. package/{esm2015/src/data/DataViewBase.js → esm2020/src/data/DataViewBase.mjs} +0 -0
  78. package/esm2020/src/data/DataviewManager.mjs +28 -0
  79. package/esm2020/src/data/DataviewManagerBase.mjs +15 -0
  80. package/{esm2015/src/data/DvCache.js → esm2020/src/data/DvCache.mjs} +0 -0
  81. package/esm2020/src/data/Field.mjs +645 -0
  82. package/esm2020/src/data/FieldBase.mjs +18 -0
  83. package/{esm2015/src/data/FieldsTable.js → esm2020/src/data/FieldsTable.mjs} +0 -0
  84. package/{esm2015/src/data/IRecordsTable.js → esm2020/src/data/IRecordsTable.mjs} +1 -0
  85. package/{esm2015/src/data/Key.js → esm2020/src/data/Key.mjs} +0 -0
  86. package/{esm2015/src/data/Record.js → esm2020/src/data/Record.mjs} +0 -0
  87. package/{esm2015/src/data/RecordOutOfDataViewException.js → esm2020/src/data/RecordOutOfDataViewException.mjs} +0 -0
  88. package/{esm2015/src/data/RecordsTable.js → esm2020/src/data/RecordsTable.mjs} +0 -0
  89. package/esm2020/src/data/TaskTransactionManager.mjs +103 -0
  90. package/{esm2015/src/data/XMLBasedDcValuesBuilder.js → esm2020/src/data/XMLBasedDcValuesBuilder.mjs} +0 -0
  91. package/{esm2015/src/enums.js → esm2020/src/enums.mjs} +0 -0
  92. package/esm2020/src/env/EnvVariablesTable.mjs +340 -0
  93. package/esm2020/src/env/Environment.mjs +554 -0
  94. package/{esm2015/src/env/ILanguageData.js → esm2020/src/env/ILanguageData.mjs} +1 -0
  95. package/esm2020/src/env/LanguageData.mjs +222 -0
  96. package/esm2020/src/env/MirrorString.mjs +66 -0
  97. package/{esm2015/src/event/ActionManager.js → esm2020/src/event/ActionManager.mjs} +0 -0
  98. package/esm2020/src/event/Event.mjs +1436 -0
  99. package/esm2020/src/event/EventHandler.mjs +773 -0
  100. package/{esm2015/src/event/EventHandlerPosition.js → esm2020/src/event/EventHandlerPosition.mjs} +0 -0
  101. package/esm2020/src/event/EventsManager.mjs +2983 -0
  102. package/{esm2015/src/event/IEventsManager.js → esm2020/src/event/IEventsManager.mjs} +0 -0
  103. package/{esm2015/src/event/RunTimeEvent.js → esm2020/src/event/RunTimeEvent.mjs} +0 -0
  104. package/{esm2015/src/event/RunTimeEventBase.js → esm2020/src/event/RunTimeEventBase.mjs} +0 -0
  105. package/{esm2015/src/event/UserEventsTable.js → esm2020/src/event/UserEventsTable.mjs} +0 -0
  106. package/{esm2015/src/exp/ExpTable.js → esm2020/src/exp/ExpTable.mjs} +0 -0
  107. package/esm2020/src/exp/Expression.mjs +200 -0
  108. package/{esm2015/src/exp/ExpressionDict.js → esm2020/src/exp/ExpressionDict.mjs} +0 -0
  109. package/esm2020/src/exp/ExpressionEvaluator.mjs +4373 -0
  110. package/{esm2015/src/exp/ExpressionLocalJpn.js → esm2020/src/exp/ExpressionLocalJpn.mjs} +0 -0
  111. package/esm2020/src/exp/GlobalParamsTable.mjs +85 -0
  112. package/esm2020/src/exp/YesNoExp.mjs +41 -0
  113. package/{esm2015/src/gui/CreatedFormVector.js → esm2020/src/gui/CreatedFormVector.mjs} +0 -0
  114. package/esm2020/src/gui/FormsTable.mjs +66 -0
  115. package/esm2020/src/gui/MgControl.mjs +357 -0
  116. package/esm2020/src/gui/MgForm.mjs +1195 -0
  117. package/esm2020/src/http/HttpManager.mjs +97 -0
  118. package/esm2020/src/http/client/HttpClientAsync.mjs +67 -0
  119. package/esm2020/src/http/client/HttpClientBase.mjs +148 -0
  120. package/{esm2015/src/http/client/HttpClientEvents.js → esm2020/src/http/client/HttpClientEvents.mjs} +0 -0
  121. package/esm2020/src/http/client/HttpClientSync.mjs +42 -0
  122. package/{esm2015/src/http/client/HttpUtility.js → esm2020/src/http/client/HttpUtility.mjs} +0 -0
  123. package/{esm2015/src/http/client/ICommunicationsFailureHandler.js → esm2020/src/http/client/ICommunicationsFailureHandler.mjs} +1 -0
  124. package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
  125. package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
  126. package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
  127. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +872 -0
  128. package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
  129. package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +24 -0
  130. package/{esm2015/src/remote/RemoteDataViewCommandFactory.js → esm2020/src/remote/RemoteDataViewCommandFactory.mjs} +0 -0
  131. package/esm2020/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +16 -0
  132. package/esm2020/src/remote/RemoteDataviewManager.mjs +17 -0
  133. package/esm2020/src/remote/RemoteInitDataViewCommand.mjs +11 -0
  134. package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
  135. package/esm2020/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +13 -0
  136. package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
  137. package/{esm2015/src/remote/ServerError.js → esm2020/src/remote/ServerError.mjs} +0 -0
  138. package/{esm2015/src/remote/SetTransactionStateRemoteDataViewCommand.js → esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs} +8 -11
  139. package/esm2020/src/rt/Argument.mjs +274 -0
  140. package/esm2020/src/rt/ArgumentsList.mjs +103 -0
  141. package/esm2020/src/rt/Boundary.mjs +158 -0
  142. package/{esm2015/src/rt/CompMainPrgTable.js → esm2020/src/rt/CompMainPrgTable.mjs} +0 -0
  143. package/esm2020/src/rt/DataviewHeaderBase.mjs +96 -0
  144. package/{esm2015/src/rt/DataviewHeaderFactory.js → esm2020/src/rt/DataviewHeaderFactory.mjs} +0 -0
  145. package/{esm2015/src/rt/DataviewHeaders.js → esm2020/src/rt/DataviewHeaders.mjs} +0 -0
  146. package/{esm2015/src/rt/DataviewHeadersSaxHandler.js → esm2020/src/rt/DataviewHeadersSaxHandler.mjs} +0 -0
  147. package/{esm2015/src/rt/ExecutionStack.js → esm2020/src/rt/ExecutionStack.mjs} +0 -0
  148. package/{esm2015/src/rt/ExecutionStackEntry.js → esm2020/src/rt/ExecutionStackEntry.mjs} +0 -0
  149. package/{esm2015/src/rt/HandlersTable.js → esm2020/src/rt/HandlersTable.mjs} +0 -0
  150. package/{esm2015/src/rt/IDataSourceViewDefinition.js → esm2020/src/rt/IDataSourceViewDefinition.mjs} +1 -0
  151. package/{esm2015/src/rt/IDataviewHeader.js → esm2020/src/rt/IDataviewHeader.mjs} +1 -0
  152. package/{esm2015/src/rt/IResultValue.js → esm2020/src/rt/IResultValue.mjs} +1 -0
  153. package/{esm2015/src/rt/LastFocusedManager.js → esm2020/src/rt/LastFocusedManager.mjs} +0 -0
  154. package/esm2020/src/rt/Operation.mjs +745 -0
  155. package/{esm2015/src/rt/OperationTable.js → esm2020/src/rt/OperationTable.mjs} +0 -0
  156. package/esm2020/src/rt/Recompute.mjs +355 -0
  157. package/{esm2015/src/rt/RecomputeTable.js → esm2020/src/rt/RecomputeTable.mjs} +0 -0
  158. package/esm2020/src/rt/RemoteDataviewHeader.mjs +105 -0
  159. package/{esm2015/src/rt/ResultValue.js → esm2020/src/rt/ResultValue.mjs} +0 -0
  160. package/esm2020/src/rt/TableCache.mjs +177 -0
  161. package/esm2020/src/rt/TableCacheManager.mjs +67 -0
  162. package/{esm2015/src/rt/Transaction.js → esm2020/src/rt/Transaction.mjs} +0 -0
  163. package/{esm2015/src/security/UserDetails.js → esm2020/src/security/UserDetails.mjs} +0 -0
  164. package/{esm2015/src/tasks/IMGDataCollection.js → esm2020/src/tasks/IMGDataCollection.mjs} +1 -0
  165. package/esm2020/src/tasks/MGData.mjs +552 -0
  166. package/esm2020/src/tasks/MGDataCollection.mjs +259 -0
  167. package/{esm2015/src/tasks/MenusDeserializer.js → esm2020/src/tasks/MenusDeserializer.mjs} +0 -0
  168. package/{esm2015/src/tasks/RCTimer.js → esm2020/src/tasks/RCTimer.mjs} +0 -0
  169. package/{esm2015/src/tasks/RemoteTaskService.js → esm2020/src/tasks/RemoteTaskService.mjs} +0 -0
  170. package/esm2020/src/tasks/Task.mjs +2501 -0
  171. package/{esm2015/src/tasks/TaskBase.js → esm2020/src/tasks/TaskBase.mjs} +22 -1
  172. package/esm2020/src/tasks/TaskServiceBase.mjs +25 -0
  173. package/esm2020/src/tasks/TasksTable.mjs +80 -0
  174. package/{esm2015/src/tasks/sort/Sort.js → esm2020/src/tasks/sort/Sort.mjs} +0 -0
  175. package/{esm2015/src/tasks/sort/SortCollection.js → esm2020/src/tasks/sort/SortCollection.mjs} +0 -0
  176. package/{esm2015/src/util/ConstUtils.js → esm2020/src/util/ConstUtils.mjs} +0 -0
  177. package/esm2020/src/util/FlowMonitorQueue.mjs +361 -0
  178. package/{esm2015/src/util/HeapSort.js → esm2020/src/util/HeapSort.mjs} +0 -0
  179. package/{esm2015/src/util/IMirrorXML.js → esm2020/src/util/IMirrorXML.mjs} +2 -1
  180. package/{esm2015/src/util/IServerConfig.js → esm2020/src/util/IServerConfig.mjs} +1 -0
  181. package/{esm2015/src/util/MgBlockingQueue.js → esm2020/src/util/MgBlockingQueue.mjs} +1 -0
  182. package/esm2020/src/util/MgPriorityBlockingQueue.mjs +76 -0
  183. package/{esm2015/src/util/MgPriorityQueue.js → esm2020/src/util/MgPriorityQueue.mjs} +0 -0
  184. package/esm2020/src/util/ParamParseResult.mjs +8 -0
  185. package/esm2020/src/util/PrmMap.mjs +151 -0
  186. package/{esm2015/src/util/Process.js → esm2020/src/util/Process.mjs} +0 -0
  187. package/{esm2015/src/util/ReturnResult.js → esm2020/src/util/ReturnResult.mjs} +0 -0
  188. package/{esm2015/src/util/ReturnResultBase.js → esm2020/src/util/ReturnResultBase.mjs} +0 -0
  189. package/{esm2015/src/util/Scrambler.js → esm2020/src/util/Scrambler.mjs} +0 -0
  190. package/{esm2015/src/util/UniqueIDUtils.js → esm2020/src/util/UniqueIDUtils.mjs} +0 -0
  191. package/{esm2015/src/util/cookie.service.js → esm2020/src/util/cookie.service.mjs} +0 -0
  192. package/fesm2015/{magic-xpa-engine.js → magic-xpa-engine.mjs} +102 -5
  193. package/fesm2015/magic-xpa-engine.mjs.map +1 -0
  194. package/fesm2020/magic-xpa-engine.mjs +30705 -0
  195. package/fesm2020/magic-xpa-engine.mjs.map +1 -0
  196. package/index.d.ts +2 -0
  197. package/package.json +27 -13
  198. package/src/AccessHelper.d.ts +1 -1
  199. package/src/CommandsProcessorBase.d.ts +3 -3
  200. package/src/commands/DataViewCommandBase.d.ts +2 -2
  201. package/src/commands/IClientTargetedCommand.d.ts +1 -1
  202. package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +1 -1
  203. package/src/data/FieldBase.d.ts +3 -3
  204. package/src/env/EnvVariablesTable.d.ts +2 -15
  205. package/src/env/MirrorString.d.ts +15 -0
  206. package/src/exp/GlobalParamsTable.d.ts +2 -1
  207. package/src/http/client/HttpClientBase.d.ts +2 -2
  208. package/src/rt/DataviewHeaderBase.d.ts +1 -1
  209. package/src/tasks/TaskBase.d.ts +7 -7
  210. package/src/util/IMirrorXML.d.ts +1 -1
  211. package/src/util/ParamParseResult.d.ts +6 -0
  212. package/src/util/PrmMap.d.ts +0 -6
  213. package/bundles/magic-xpa-engine.umd.js +0 -37983
  214. package/bundles/magic-xpa-engine.umd.js.map +0 -1
  215. package/bundles/magic-xpa-engine.umd.min.js +0 -16
  216. package/bundles/magic-xpa-engine.umd.min.js.map +0 -1
  217. package/esm2015/index.js +0 -188
  218. package/esm2015/src/AccessHelper.js +0 -3
  219. package/esm2015/src/ClientManager.js +0 -412
  220. package/esm2015/src/CommandsProcessorBase.js +0 -54
  221. package/esm2015/src/CommandsProcessorManager.js +0 -31
  222. package/esm2015/src/CommandsTable.js +0 -166
  223. package/esm2015/src/GUIManager.js +0 -72
  224. package/esm2015/src/bridge/MagicBridge.js +0 -44
  225. package/esm2015/src/commands/ClientToServer/CommandFactory.js +0 -283
  226. package/esm2015/src/commands/DataViewCommandBase.js +0 -6
  227. package/esm2015/src/commands/IClientTargetedCommand.js +0 -6
  228. package/esm2015/src/commands/ServerToClient/AbortCommand.js +0 -68
  229. package/esm2015/src/commands/ServerToClient/AddLocateCommand.js +0 -25
  230. package/esm2015/src/commands/ServerToClient/AddRangeCommand.js +0 -65
  231. package/esm2015/src/commands/ServerToClient/AddSortCommand.js +0 -36
  232. package/esm2015/src/commands/ServerToClient/ClientTargetedCommandBase.js +0 -24
  233. package/esm2015/src/commands/ServerToClient/EnhancedVerifyCommand.js +0 -48
  234. package/esm2015/src/commands/ServerToClient/OpenURLCommand.js +0 -225
  235. package/esm2015/src/commands/ServerToClient/ResetLocateCommand.js +0 -18
  236. package/esm2015/src/commands/ServerToClient/ResetRangeCommand.js +0 -18
  237. package/esm2015/src/commands/ServerToClient/ResetSortCommand.js +0 -18
  238. package/esm2015/src/commands/ServerToClient/ResultCommand.js +0 -40
  239. package/esm2015/src/commands/ServerToClient/VerifyCommand.js +0 -88
  240. package/esm2015/src/communications/InteractiveCommunicationsFailureHandler.js +0 -20
  241. package/esm2015/src/data/DataView.js +0 -1692
  242. package/esm2015/src/data/DataviewManager.js +0 -31
  243. package/esm2015/src/data/DataviewManagerBase.js +0 -18
  244. package/esm2015/src/data/Field.js +0 -671
  245. package/esm2015/src/data/FieldBase.js +0 -9
  246. package/esm2015/src/data/TaskTransactionManager.js +0 -110
  247. package/esm2015/src/env/EnvVariablesTable.js +0 -408
  248. package/esm2015/src/env/Environment.js +0 -557
  249. package/esm2015/src/env/LanguageData.js +0 -229
  250. package/esm2015/src/event/Event.js +0 -1441
  251. package/esm2015/src/event/EventHandler.js +0 -786
  252. package/esm2015/src/event/EventsManager.js +0 -3106
  253. package/esm2015/src/exp/Expression.js +0 -209
  254. package/esm2015/src/exp/ExpressionEvaluator.js +0 -4440
  255. package/esm2015/src/exp/GlobalParamsTable.js +0 -84
  256. package/esm2015/src/exp/YesNoExp.js +0 -44
  257. package/esm2015/src/gui/FormsTable.js +0 -73
  258. package/esm2015/src/gui/MgControl.js +0 -424
  259. package/esm2015/src/gui/MgForm.js +0 -1291
  260. package/esm2015/src/http/HttpManager.js +0 -100
  261. package/esm2015/src/http/client/HttpClientAsync.js +0 -72
  262. package/esm2015/src/http/client/HttpClientBase.js +0 -147
  263. package/esm2015/src/http/client/HttpClientSync.js +0 -47
  264. package/esm2015/src/remote/AddUserLocateRemoteDataViewCommand.js +0 -21
  265. package/esm2015/src/remote/AddUserRangeRemoteDataViewCommand.js +0 -21
  266. package/esm2015/src/remote/AddUserSortRemoteDataViewCommand.js +0 -21
  267. package/esm2015/src/remote/RemoteCommandsProcessor.js +0 -901
  268. package/esm2015/src/remote/RemoteControlItemsRefreshCommand.js +0 -28
  269. package/esm2015/src/remote/RemoteDataViewCommandBase.js +0 -27
  270. package/esm2015/src/remote/RemoteDataViewCommandUpdateNonModifiable.js +0 -19
  271. package/esm2015/src/remote/RemoteDataviewManager.js +0 -23
  272. package/esm2015/src/remote/RemoteInitDataViewCommand.js +0 -14
  273. package/esm2015/src/remote/ResetUserLocateRemoteDataviewCommand.js +0 -20
  274. package/esm2015/src/remote/ResetUserRangeRemoteDataviewCommand.js +0 -16
  275. package/esm2015/src/remote/ResetUserSortRemoteDataviewCommand.js +0 -19
  276. package/esm2015/src/rt/Argument.js +0 -281
  277. package/esm2015/src/rt/ArgumentsList.js +0 -108
  278. package/esm2015/src/rt/Boundary.js +0 -161
  279. package/esm2015/src/rt/DataviewHeaderBase.js +0 -96
  280. package/esm2015/src/rt/Operation.js +0 -772
  281. package/esm2015/src/rt/Recompute.js +0 -372
  282. package/esm2015/src/rt/RemoteDataviewHeader.js +0 -114
  283. package/esm2015/src/rt/TableCache.js +0 -182
  284. package/esm2015/src/rt/TableCacheManager.js +0 -70
  285. package/esm2015/src/tasks/MGData.js +0 -561
  286. package/esm2015/src/tasks/MGDataCollection.js +0 -270
  287. package/esm2015/src/tasks/Task.js +0 -2601
  288. package/esm2015/src/tasks/TaskServiceBase.js +0 -30
  289. package/esm2015/src/tasks/TasksTable.js +0 -87
  290. package/esm2015/src/util/FlowMonitorQueue.js +0 -364
  291. package/esm2015/src/util/MgPriorityBlockingQueue.js +0 -79
  292. package/esm2015/src/util/PrmMap.js +0 -157
  293. package/fesm2015/magic-xpa-engine.js.map +0 -1
@@ -0,0 +1,259 @@
1
+ import { ApplicationException, Debug, List } from "@magic-xpa/mscorelib";
2
+ import { InternalInterface, XMLConstants } from "@magic-xpa/utils";
3
+ import { Commands } from "@magic-xpa/gui";
4
+ import { FlowMonitorQueue } from "../util/FlowMonitorQueue";
5
+ import { LastFocusedManager } from "../rt/LastFocusedManager";
6
+ import { CommandsProcessorBase_SendingInstruction, CommandsProcessorBase_SessionStage } from "../CommandsProcessorBase";
7
+ import { CommandsProcessorManager } from "../CommandsProcessorManager";
8
+ import { AccessHelper } from "../AccessHelper";
9
+ import { ConstInterface } from "../ConstInterface";
10
+ export class MGDataCollection {
11
+ constructor() {
12
+ this._mgDataTab = new List();
13
+ this._iteratorMgdIdx = 0;
14
+ this._iteratorTaskIdx = 0;
15
+ this.currMgdID = 0;
16
+ this.StartupMgData = null;
17
+ this._lastRouteSentToServer = "";
18
+ }
19
+ GetTaskByID(id) {
20
+ let task = null;
21
+ for (let i = 0; i < this.getSize() && task == null; i++) {
22
+ let mgd = this.getMGData(i);
23
+ if (mgd == null)
24
+ continue;
25
+ task = mgd.getTask(id);
26
+ }
27
+ return task;
28
+ }
29
+ static get Instance() {
30
+ if (MGDataCollection._instance == null) {
31
+ if (MGDataCollection._instance == null)
32
+ MGDataCollection._instance = new MGDataCollection();
33
+ }
34
+ return MGDataCollection._instance;
35
+ }
36
+ async addMGData(mgd, idx, isStartup) {
37
+ if (idx < 0 || idx > this.getSize())
38
+ throw new ApplicationException("Illegal MGData requested");
39
+ if (isStartup)
40
+ this.StartupMgData = mgd;
41
+ if (idx === this.getSize())
42
+ this._mgDataTab.push(mgd);
43
+ else {
44
+ let oldMgd = this.getMGData(idx);
45
+ if (oldMgd != null && !oldMgd.IsAborting) {
46
+ await oldMgd.getFirstTask().stop();
47
+ oldMgd.abort();
48
+ }
49
+ this._mgDataTab.set_Item(idx, mgd);
50
+ }
51
+ }
52
+ getMGData(idx) {
53
+ let mgd = null;
54
+ if (idx >= 0 && idx < this.getSize()) {
55
+ mgd = this._mgDataTab.get_Item(idx);
56
+ }
57
+ return mgd;
58
+ }
59
+ getAvailableIdx() {
60
+ let i;
61
+ for (i = 0; i < this._mgDataTab.length; i = i + 1) {
62
+ if (this._mgDataTab.get_Item(i) === null)
63
+ break;
64
+ }
65
+ return i;
66
+ }
67
+ getMgDataIdx(mgd) {
68
+ return this._mgDataTab.indexOf(mgd);
69
+ }
70
+ deleteMGDataTree(index) {
71
+ let mgd, childMgd;
72
+ let i;
73
+ if (index < 0 || index >= this.getSize())
74
+ throw new ApplicationException("in deleteMGData() illegal index: " + index);
75
+ mgd = this.getMGData(index);
76
+ if (mgd != null) {
77
+ if (index > 0 && mgd.getParentMGdata() != null) {
78
+ this._mgDataTab.set_Item(index, null);
79
+ }
80
+ LastFocusedManager.Instance.clean(index);
81
+ for (i = 0; i < this.getSize(); i++) {
82
+ childMgd = this.getMGData(i);
83
+ if (childMgd != null && childMgd.getParentMGdata() === mgd)
84
+ this.deleteMGDataTree(i);
85
+ }
86
+ }
87
+ }
88
+ getCurrMGData() {
89
+ return this.getMGData(this.currMgdID);
90
+ }
91
+ GetMainProgByCtlIdx(contextIDOrCtlIdx, ctlIdx) {
92
+ if (arguments.length === 2)
93
+ return this.GetMainProgByCtlIdx_0(ctlIdx);
94
+ else
95
+ return this.GetMainProgByCtlIdx_1(contextIDOrCtlIdx);
96
+ }
97
+ GetMainProgByCtlIdx_0(ctlIdx) {
98
+ let task = null;
99
+ for (let i = 0; i < this.getSize() && task == null; i++) {
100
+ let mgd = this.getMGData(i);
101
+ if (mgd == null)
102
+ continue;
103
+ task = mgd.getMainProg(ctlIdx);
104
+ }
105
+ return task;
106
+ }
107
+ GetMainProgByCtlIdx_1(ctlIdx) {
108
+ return this.GetMainProgByCtlIdx(-1, ctlIdx);
109
+ }
110
+ startTasksIteration() {
111
+ this._iteratorMgdIdx = 0;
112
+ this._iteratorTaskIdx = 0;
113
+ }
114
+ getNextTask() {
115
+ let task;
116
+ let mgd = this.getMGData(this._iteratorMgdIdx);
117
+ if (mgd == null)
118
+ return null;
119
+ task = mgd.getTask(this._iteratorTaskIdx);
120
+ if (task == null) {
121
+ do {
122
+ this._iteratorMgdIdx++;
123
+ } while (this._iteratorMgdIdx < this.getSize() && this.getMGData(this._iteratorMgdIdx) == null);
124
+ this._iteratorTaskIdx = 0;
125
+ return this.getNextTask();
126
+ }
127
+ this._iteratorTaskIdx++;
128
+ return task;
129
+ }
130
+ async buildXML(message, serializeTasks) {
131
+ let lastRoute = Commands.getLastRoute();
132
+ if (lastRoute !== this._lastRouteSentToServer) {
133
+ message.Append(XMLConstants.START_TAG + ConstInterface.MG_TAG_LAST_ROUTE);
134
+ message.Append(" " + ConstInterface.MG_ATTR_ENV_VALUE + "=\"" + lastRoute + "\"");
135
+ message.Append(XMLConstants.TAG_TERM);
136
+ this._lastRouteSentToServer = lastRoute;
137
+ }
138
+ for (let i = 0; i < this.getSize(); i = i + 1) {
139
+ let mgd = this.getMGData(i);
140
+ if (mgd !== null && !mgd.IsAborting) {
141
+ await mgd.buildXML(message, serializeTasks);
142
+ }
143
+ }
144
+ FlowMonitorQueue.Instance.buildXML(message);
145
+ }
146
+ RemoveServerCommands() {
147
+ for (let i = 0; i < this.getSize(); i = i + 1) {
148
+ let mgd = this.getMGData(i);
149
+ if (mgd !== null)
150
+ mgd.CmdsToServer.clear();
151
+ }
152
+ }
153
+ getSize() {
154
+ return this._mgDataTab.length;
155
+ }
156
+ async processRecovery() {
157
+ for (let i = 0; i < this.getSize(); i = i + 1) {
158
+ let mgd = this.getMGData(i);
159
+ if (mgd !== null) {
160
+ for (let j = 0; j < mgd.getTasksCount(); j = j + 1) {
161
+ let task = mgd.getTask(j);
162
+ if (task !== null)
163
+ await task.DataView.processRecovery();
164
+ }
165
+ }
166
+ }
167
+ }
168
+ getTriggeredTasks(triggeringTask) {
169
+ let list = new List();
170
+ let task;
171
+ let tag = triggeringTask.getTaskTag();
172
+ this.startTasksIteration();
173
+ while ((task = this.getNextTask()) !== null) {
174
+ if (tag === task.PreviouslyActiveTaskId)
175
+ list.push(task);
176
+ }
177
+ return list;
178
+ }
179
+ GetTasks(p) {
180
+ let taskList = new List();
181
+ this._mgDataTab.forEach(mgd => {
182
+ if (mgd !== null && !mgd.IsAborting) {
183
+ for (let i = 0; i < mgd.getTasksCount(); i = i + 1) {
184
+ let task = mgd.getTask(i);
185
+ if (task !== null && p(task)) {
186
+ taskList.push(task);
187
+ }
188
+ }
189
+ }
190
+ });
191
+ return taskList;
192
+ }
193
+ getTaskIdById(taskId) {
194
+ let task = this.GetTaskByID(taskId);
195
+ let tag = taskId;
196
+ if (task != null)
197
+ tag = task.getTaskTag();
198
+ return tag;
199
+ }
200
+ GetTopMostForms() {
201
+ let task;
202
+ let forms = new List();
203
+ this.startTasksIteration();
204
+ while ((task = this.getNextTask()) != null) {
205
+ let form = task.getForm();
206
+ if (!task.isAborting() && form != null && !form.isSubForm())
207
+ forms.push(form);
208
+ }
209
+ return forms;
210
+ }
211
+ GetMGDataForStartupProgram() {
212
+ Debug.Assert(this._mgDataTab.length > 0, "The main program must be processed before invoking this method.");
213
+ let mainProgByCtlIdx = this.GetMainProgByCtlIdx(0);
214
+ Debug.Assert(mainProgByCtlIdx !== null, "The main program must be processed before invoking this method.");
215
+ Debug.Assert(mainProgByCtlIdx.getMgdID() === 0, "Main program is expected to be on MGData 0. Is this an error?");
216
+ return this._mgDataTab.get_Item(0);
217
+ }
218
+ async execRequestWithSubformRecordCycle(cmdsToServer, cmdToServer, exp) {
219
+ this.cleanDoSubformPrefixSuffix();
220
+ cmdsToServer.Add(cmdToServer);
221
+ if (!(MGDataCollection.Instance.StartupMgData.getFirstTask().InEndTask && MGDataCollection.Instance.StartupMgData.getFirstTask().ClosingFormUI))
222
+ await CommandsProcessorManager.GetCommandsProcessor().Execute(CommandsProcessorBase_SendingInstruction.TASKS_AND_COMMANDS, CommandsProcessorBase_SessionStage.NORMAL, exp);
223
+ await this.execAllSubformRecordCycle();
224
+ }
225
+ cleanDoSubformPrefixSuffix() {
226
+ for (let i = 0; i < this.getSize(); i++) {
227
+ let mgd = this.getMGData(i);
228
+ if (mgd === null || mgd.IsAborting)
229
+ continue;
230
+ let tasksCount = mgd.getTasksCount();
231
+ for (let j = 0; j < tasksCount; j++) {
232
+ let task = mgd.getTask(j);
233
+ task.DoSubformPrefixSuffix = false;
234
+ }
235
+ }
236
+ }
237
+ async execAllSubformRecordCycle() {
238
+ for (let i = 0; i < this.getSize(); i = i + 1) {
239
+ let mgd = this.getMGData(i);
240
+ if (mgd === null || mgd.IsAborting)
241
+ continue;
242
+ let tasksCount = mgd.getTasksCount();
243
+ for (let j = 0; j < tasksCount; j = j + 1) {
244
+ let task = mgd.getTask(j);
245
+ if (task.IsSubForm && task.DoSubformPrefixSuffix) {
246
+ task.PerformParentRecordPrefix = false;
247
+ AccessHelper.eventsManager.pushNewExecStacks();
248
+ await AccessHelper.eventsManager.handleInternalEventWithTaskAndSubformRefresh(task, InternalInterface.MG_ACT_REC_PREFIX, true);
249
+ if (!AccessHelper.eventsManager.GetStopExecutionFlag())
250
+ await AccessHelper.eventsManager.handleInternalEventWithTask(task, InternalInterface.MG_ACT_REC_SUFFIX);
251
+ AccessHelper.eventsManager.popNewExecStacks();
252
+ task.PerformParentRecordPrefix = true;
253
+ }
254
+ }
255
+ }
256
+ }
257
+ }
258
+ MGDataCollection._instance = null;
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUdEYXRhQ29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdGFza3MvTUdEYXRhQ29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFDLFFBQVEsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUsxRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUUsa0NBQWtDLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUd0SCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBTWpELE1BQU0sT0FBTyxnQkFBZ0I7SUFlM0I7UUFiUSxlQUFVLEdBQWlCLElBQUksSUFBSSxFQUFVLENBQUM7UUFHOUMsb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFDNUIscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBQ3JDLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFFckIsMkJBQXNCLEdBQVcsRUFBRSxDQUFDO0lBTTVDLENBQUM7SUFNRCxXQUFXLENBQUMsRUFBVTtRQUNwQixJQUFJLElBQUksR0FBUyxJQUFJLENBQUM7UUFFdEIsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUs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QUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pELElBQUksSUFBSSxHQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7b0JBR2hELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7b0JBQ3ZDLFlBQVksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDL0MsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDLDRDQUE0QyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFL0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUU7d0JBQ3BELE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFFMUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO2lCQUN2QzthQUNGO1NBQ0Y7SUFDSCxDQUFDOztBQWxiYywwQkFBUyxHQUFxQixJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FwcGxpY2F0aW9uRXhjZXB0aW9uLCBEZWJ1ZywgTGlzdCwgU3RyaW5nQnVpbGRlcn0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7SW50ZXJuYWxJbnRlcmZhY2UsIFhNTENvbnN0YW50c30gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtDb21tYW5kcywgSVRhc2ssIE1nRm9ybUJhc2V9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge01HRGF0YX0gZnJvbSBcIi4vTUdEYXRhXCI7XHJcbmltcG9ydCB7Rmxvd01vbml0b3JRdWV1ZX0gZnJvbSBcIi4uL3V0aWwvRmxvd01vbml0b3JRdWV1ZVwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuL1Rhc2tcIlxyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tIFwiLi4vZGF0YS9EYXRhVmlld1wiXHJcbmltcG9ydCB7SU1HRGF0YUNvbGxlY3Rpb259IGZyb20gXCIuL0lNR0RhdGFDb2xsZWN0aW9uXCI7XHJcbmltcG9ydCB7Q29tbWFuZHNUYWJsZX0gZnJvbSBcIi4uL0NvbW1hbmRzVGFibGVcIjtcclxuaW1wb3J0IHtMYXN0Rm9jdXNlZE1hbmFnZXJ9IGZyb20gXCIuLi9ydC9MYXN0Rm9jdXNlZE1hbmFnZXJcIjtcclxuaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2VuZGluZ0luc3RydWN0aW9uLCBDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2Vzc2lvblN0YWdlfSBmcm9tIFwiLi4vQ29tbWFuZHNQcm9jZXNzb3JCYXNlXCI7XHJcbmltcG9ydCB7SUNsaWVudENvbW1hbmR9IGZyb20gXCIuLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZFwiO1xyXG5pbXBvcnQge0V4cHJlc3Npb259IGZyb20gXCIuLi9leHAvRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yTWFuYWdlcn0gZnJvbSBcIi4uL0NvbW1hbmRzUHJvY2Vzc29yTWFuYWdlclwiO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tIFwiLi4vQ29uc3RJbnRlcmZhY2VcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgdGhpcyBjbGFzcyBoYW5kbGVzIGEgdGFibGUgb2YgTUdEYXRhIG9iamVjdHNcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIE1HRGF0YUNvbGxlY3Rpb24gaW1wbGVtZW50cyBJTUdEYXRhQ29sbGVjdGlvbiB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBNR0RhdGFDb2xsZWN0aW9uID0gbnVsbDsgICAgICAvLyBzaW5nbGV0b25cclxuICBwcml2YXRlIF9tZ0RhdGFUYWI6IExpc3Q8TUdEYXRhPiA9IG5ldyBMaXN0PE1HRGF0YT4oKTtcclxuXHJcbiAgLy8gdGhlIGN1cnJlbnQgTUdEQVRBXHJcbiAgcHJpdmF0ZSBfaXRlcmF0b3JNZ2RJZHg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfaXRlcmF0b3JUYXNrSWR4OiBudW1iZXIgPSAwO1xyXG4gIGN1cnJNZ2RJRDogbnVtYmVyID0gMDtcclxuICBTdGFydHVwTWdEYXRhOiBNR0RhdGEgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9sYXN0Um91dGVTZW50VG9TZXJ2ZXI6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2luZ2xldG9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZWFyY2hlcyBhbGwgdGhlIE1HRGF0YSBvYmplY3RzIHRpbGwgaXQgZmluZHMgdGhlIHRhc2sgd2l0aCB0aGUgZ2l2ZW4gaWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj50aGUgaWQgb2YgdGhlIHJlcXVlc3RlZCB0YXNrPC9wYXJhbT5cclxuICBHZXRUYXNrQnlJRChpZDogc3RyaW5nKTogSVRhc2sge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSBudWxsO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmdldFNpemUoKSAmJiB0YXNrID09IG51bGw7IGkrKykge1xyXG4gICAgICBsZXQgbWdkOiBNR0RhdGEgPSB0aGlzLmdldE1HRGF0YShpKTtcclxuXHJcbiAgICAgIGlmIChtZ2QgPT0gbnVsbClcclxuICAgICAgLy8gdGhlIHdpbmRvdyBjb25uZWN0ZWQgdG8gdGhlIE1HRGF0YSB3YXMgY2xvc2VkXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICB0YXNrID0gbWdkLmdldFRhc2soaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0YXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzaW5nbGV0b25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogTUdEYXRhQ29sbGVjdGlvbiB7XHJcbiAgICBpZiAoTUdEYXRhQ29sbGVjdGlvbi5faW5zdGFuY2UgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChNR0RhdGFDb2xsZWN0aW9uLl9pbnN0YW5jZSA9PSBudWxsKVxyXG4gICAgICAgICAgTUdEYXRhQ29sbGVjdGlvbi5faW5zdGFuY2UgPSBuZXcgTUdEYXRhQ29sbGVjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBNR0RhdGFDb2xsZWN0aW9uLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgTUdEYXRhIG9iamVjdCB0byB0aGUgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdkXCI+dGhlIE1HRGF0YSBvYmplY3QgdG8gYWRkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBpbmRleCB3aXRoaW4gdGhlIHRhYmxlIGZvciB0aGUgbmV3IE1HRGF0YTwvcGFyYW0+XHJcbiAgYXN5bmMgYWRkTUdEYXRhKG1nZDogTUdEYXRhLCBpZHg6IG51bWJlciwgaXNTdGFydHVwOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoaWR4IDwgMCB8fCBpZHggPiB0aGlzLmdldFNpemUoKSlcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiSWxsZWdhbCBNR0RhdGEgcmVxdWVzdGVkXCIpO1xyXG5cclxuICAgIGlmIChpc1N0YXJ0dXApXHJcbiAgICAgIHRoaXMuU3RhcnR1cE1nRGF0YSA9IG1nZDtcclxuXHJcbiAgICBpZiAoaWR4ID09PSB0aGlzLmdldFNpemUoKSlcclxuICAgICAgdGhpcy5fbWdEYXRhVGFiLnB1c2gobWdkKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgb2xkTWdkOiBNR0RhdGEgPSB0aGlzLmdldE1HRGF0YShpZHgpO1xyXG5cclxuICAgICAgaWYgKG9sZE1nZCAhPSBudWxsICYmICFvbGRNZ2QuSXNBYm9ydGluZykge1xyXG4gICAgICAgIGF3YWl0IG9sZE1nZC5nZXRGaXJzdFRhc2soKS5zdG9wKCk7XHJcbiAgICAgICAgb2xkTWdkLmFib3J0KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX21nRGF0YVRhYi5zZXRfSXRlbShpZHgsIG1nZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBNR0RhdGEgb2JqZWN0IGJ5IGl0cyBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TUdEYXRhKGlkeDogbnVtYmVyKTogTUdEYXRhIHtcclxuICAgIGxldCBtZ2Q6IE1HRGF0YSA9IG51bGw7XHJcblxyXG4gICAgaWYgKGlkeCA+PSAwICYmIGlkeCA8IHRoaXMuZ2V0U2l6ZSgpKSB7XHJcbiAgICAgIG1nZCA9IHRoaXMuX21nRGF0YVRhYi5nZXRfSXRlbShpZHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtZ2Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhdmFpbGFibGUgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEF2YWlsYWJsZUlkeCgpOiBudW1iZXIge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbWdEYXRhVGFiLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGlmICh0aGlzLl9tZ0RhdGFUYWIuZ2V0X0l0ZW0oaSkgPT09IG51bGwpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgaW5kZXggb2YgTUdEYXRhIGluIE1HRGF0YVRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1nZFwiPnRvIGZpbmQgaW50byB0YWJsZTwvcGFyYW0+XHJcbiAgZ2V0TWdEYXRhSWR4KG1nZDogTUdEYXRhKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tZ0RhdGFUYWIuaW5kZXhPZihtZ2QpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZyZWUgbWVtb3J5IGZyb20gdW5uZWVkZWQgTUdEYXRhIGFuZCBpdHMgZGVzY2VuZGFudCBNR0RzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImluZGV4XCI+bnVtYmVyIG9mIE1HRGF0YS93aW5kb3cgdG8gYmUgZGVsZXRlZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBkZWxldGVNR0RhdGFUcmVlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBtZ2Q6IE1HRGF0YSwgY2hpbGRNZ2Q7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5nZXRTaXplKCkpXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIGRlbGV0ZU1HRGF0YSgpIGlsbGVnYWwgaW5kZXg6IFwiICsgaW5kZXgpO1xyXG5cclxuICAgIG1nZCA9IHRoaXMuZ2V0TUdEYXRhKGluZGV4KTtcclxuICAgIGlmIChtZ2QgIT0gbnVsbCkge1xyXG4gICAgICAvLyBUT0RPOiB3aGVuIGNsb3NpbmcgYSBmcmFtZXNldCB3ZSBzaG91bGQgY2xlYXIgdGhlIE1HRHMgb2YgdGhlIGZyYW1lc1xyXG4gICAgICAvLyBmcm9tIHRoZSBNR0RUYWJcclxuICAgICAgaWYgKGluZGV4ID4gMCAmJiBtZ2QuZ2V0UGFyZW50TUdkYXRhKCkgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX21nRGF0YVRhYi5zZXRfSXRlbShpbmRleCwgbnVsbCk7XHJcbiAgICAgIH1cclxuICAgICAgTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmNsZWFuKGluZGV4KTtcclxuXHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdldFNpemUoKTsgaSsrKSB7XHJcbiAgICAgICAgY2hpbGRNZ2QgPSB0aGlzLmdldE1HRGF0YShpKTtcclxuICAgICAgICBpZiAoY2hpbGRNZ2QgIT0gbnVsbCAmJiBjaGlsZE1nZC5nZXRQYXJlbnRNR2RhdGEoKSA9PT0gbWdkKVxyXG4gICAgICAgICAgdGhpcy5kZWxldGVNR0RhdGFUcmVlKGkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBjdXJyZW50IE1HRGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBNR0RhdGEgb2JqZWN0PC9yZXR1cm5zPlxyXG4gIGdldEN1cnJNR0RhdGEoKTogTUdEYXRhIHtcclxuICAgIHJldHVybiB0aGlzLmdldE1HRGF0YSh0aGlzLmN1cnJNZ2RJRCk7XHJcbiAgfVxyXG5cclxuICBHZXRNYWluUHJvZ0J5Q3RsSWR4KGNvbnRleHRJRE9yQ3RsSWR4OiBhbnksIGN0bElkeD86IG51bWJlcik6IFRhc2sge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpXHJcbiAgICAgIHJldHVybiB0aGlzLkdldE1haW5Qcm9nQnlDdGxJZHhfMChjdGxJZHgpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5HZXRNYWluUHJvZ0J5Q3RsSWR4XzEoY29udGV4dElET3JDdGxJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNlYXJjaGVzIGFsbCB0aGUgTUdEYXRhIG9iamVjdHMgdGlsbCBpdCBmaW5kcyBhIG1haW4gcHJvZ3JhbSB3aXRoIHRoZSBnaXZlbiBjdGwgaWR4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbnRleHRJRFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdGxJZHhcIj50aGUgaWR4IG9mIHRoZSByZXF1ZXN0ZWQgY29tcG9uZW50PC9wYXJhbT5cclxuICBwcml2YXRlIEdldE1haW5Qcm9nQnlDdGxJZHhfMCggY3RsSWR4OiBudW1iZXIpOiBUYXNrIHtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5nZXRTaXplKCkgJiYgdGFzayA9PSBudWxsOyBpKyspIHtcclxuICAgICAgbGV0IG1nZDogTUdEYXRhID0gdGhpcy5nZXRNR0RhdGEoaSk7XHJcblxyXG4gICAgICBpZiAobWdkID09IG51bGwpXHJcbiAgICAgICAgLy8gdGhlIHdpbmRvdyBjb25uZWN0ZWQgdG8gdGhlIE1HRGF0YSB3YXMgY2xvc2VkXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICB0YXNrID0gbWdkLmdldE1haW5Qcm9nKGN0bElkeCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEdldE1haW5Qcm9nQnlDdGxJZHhfMShjdGxJZHg6IG51bWJlcik6IFRhc2sge1xyXG4gICAgcmV0dXJuIHRoaXMuR2V0TWFpblByb2dCeUN0bElkeCgtMSwgY3RsSWR4KTsgICAgLy8gVE9ETyAoLTEpOiBSQyBpcyB1bmF3YXJlIHRvIGNvbnRleHQgaWRzIGF0IHRoZSBtb21lbnRcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzdGFydCB0aGUgdGFza3MgaXRlcmF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXJ0VGFza3NJdGVyYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pdGVyYXRvck1nZElkeCA9IDA7XHJcbiAgICB0aGlzLl9pdGVyYXRvclRhc2tJZHggPSAwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgbmV4dCB0YXNrIHVzaW5nIHRoZSB0YXNrcyBpdGVyYXRvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TmV4dFRhc2soKTogSVRhc2sge1xyXG4gICAgbGV0IHRhc2s6IFRhc2s7XHJcblxyXG4gICAgbGV0IG1nZDogTUdEYXRhID0gdGhpcy5nZXRNR0RhdGEodGhpcy5faXRlcmF0b3JNZ2RJZHgpO1xyXG4gICAgaWYgKG1nZCA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICB0YXNrID0gbWdkLmdldFRhc2sodGhpcy5faXRlcmF0b3JUYXNrSWR4KTtcclxuXHJcbiAgICBpZiAodGFzayA9PSBudWxsKSB7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICB0aGlzLl9pdGVyYXRvck1nZElkeCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlICh0aGlzLl9pdGVyYXRvck1nZElkeCA8IHRoaXMuZ2V0U2l6ZSgpICYmIHRoaXMuZ2V0TUdEYXRhKHRoaXMuX2l0ZXJhdG9yTWdkSWR4KSA9PSBudWxsKTtcclxuICAgICAgdGhpcy5faXRlcmF0b3JUYXNrSWR4ID0gMDtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV4dFRhc2soKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pdGVyYXRvclRhc2tJZHgrKztcclxuICAgIHJldHVybiB0YXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGJ1aWxkIFhNTCBzdHJpbmcgb2YgdGhlIE1HRGF0YVRBQkxFIG9iamVjdCxcclxuICAvLy8gICBBTEwgTUdEYXRhIGluIHRoZSB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWVzc2FnZVwiPmEgbWVzc2FnZSBiZWluZyBwcmVwYXJlZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNlcmlhbGl6ZVRhc2tzXCI+aWYgdHJ1ZSwgdGFza3MgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIHdpbGwgYWxzbyBiZSBzZXJpYWxpemVkLjwvcGFyYW0+XHJcbiAgYXN5bmMgYnVpbGRYTUwobWVzc2FnZTogU3RyaW5nQnVpbGRlciwgc2VyaWFsaXplVGFza3M6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBsYXN0Um91dGU6IHN0cmluZyA9IENvbW1hbmRzLmdldExhc3RSb3V0ZSgpO1xyXG4gICAgLy8gb3B0aW1pemF0aW9uOiBEbyBub3Qgc2VuZCB0aGUgbGFzdFJvdXRlLCBpZiBpdCBpcyB0aGUgc2FtZSB3aGljaCB3YXMgbGFzdCBzZW50IHRvIHRoZSBzZXJ2ZXJcclxuICAgIGlmIChsYXN0Um91dGUgIT09IHRoaXMuX2xhc3RSb3V0ZVNlbnRUb1NlcnZlcikge1xyXG4gICAgICBtZXNzYWdlLkFwcGVuZChYTUxDb25zdGFudHMuU1RBUlRfVEFHICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0xBU1RfUk9VVEUpO1xyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU5WX1ZBTFVFICsgXCI9XFxcIlwiICsgbGFzdFJvdXRlICsgXCJcXFwiXCIpO1xyXG4gICAgICBtZXNzYWdlLkFwcGVuZChYTUxDb25zdGFudHMuVEFHX1RFUk0pO1xyXG5cclxuICAgICAgdGhpcy5fbGFzdFJvdXRlU2VudFRvU2VydmVyID0gbGFzdFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBtZ2Q6IE1HRGF0YSA9IHRoaXMuZ2V0TUdEYXRhKGkpO1xyXG5cclxuICAgICAgaWYgKG1nZCAhPT0gbnVsbCAmJiAhbWdkLklzQWJvcnRpbmcpIHtcclxuICAgICAgICBhd2FpdCBtZ2QuYnVpbGRYTUwobWVzc2FnZSwgc2VyaWFsaXplVGFza3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZS5idWlsZFhNTChtZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gUmVtb3ZlcyBhbGwgdGhlIHBlbmRpbmcgc2VydmVyIGNvbW1hbmRzIDwvc3VtbWFyeT5cclxuICBSZW1vdmVTZXJ2ZXJDb21tYW5kcygpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBtZ2Q6IE1HRGF0YSA9IHRoaXMuZ2V0TUdEYXRhKGkpO1xyXG5cclxuICAgICAgaWYgKG1nZCAhPT0gbnVsbClcclxuICAgICAgICAoPENvbW1hbmRzVGFibGU+bWdkLkNtZHNUb1NlcnZlcikuY2xlYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgc2l6ZSBvZiBNR0RhdGEgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gc2l6ZSBvZiB0YWJsZTwvcmV0dXJucz5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdEYXRhVGFiLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwZXJmb3JtIGFueSBkYXRhIGVycm9yIHJlY292ZXJ5IGFjdGlvbiBvbiBhbGwgZGF0YXZpZXdzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBwcm9jZXNzUmVjb3ZlcnkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgbWdkOiBNR0RhdGEgPSB0aGlzLmdldE1HRGF0YShpKTtcclxuXHJcbiAgICAgIGlmIChtZ2QgIT09IG51bGwpIHtcclxuICAgICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgbWdkLmdldFRhc2tzQ291bnQoKTsgaiA9IGogKyAxKSB7XHJcbiAgICAgICAgICBsZXQgdGFzazogVGFzayA9IG1nZC5nZXRUYXNrKGopO1xyXG4gICAgICAgICAgaWYgKHRhc2sgIT09IG51bGwpXHJcbiAgICAgICAgICAgIGF3YWl0ICg8RGF0YVZpZXc+dGFzay5EYXRhVmlldykucHJvY2Vzc1JlY292ZXJ5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZmluZCBhbGwgdGFza3Mgd2hpY2ggd2VyZSB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRyaWdnZXJpbmdUYXNrXCI+dGhlIHRhc2sgd2hvIHRyaWdnZXJlZCBhbGwgb3RoZXIgdGFza3MuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHZlY3RvciBjb250YWluaW5nIGFsbCB0YXNrcyB3aGljaCB3ZXJlIHRyaWdnZXJlZCBieSB0aGUgcGFyYW1ldGVyIHRhc2s8L3JldHVybnM+XHJcbiAgZ2V0VHJpZ2dlcmVkVGFza3ModHJpZ2dlcmluZ1Rhc2s6IFRhc2spOiBMaXN0PFRhc2s+IHtcclxuICAgIGxldCBsaXN0OiBMaXN0PFRhc2s+ID0gbmV3IExpc3Q8VGFzaz4oKTtcclxuICAgIGxldCB0YXNrOiBUYXNrO1xyXG4gICAgbGV0IHRhZzogc3RyaW5nID0gdHJpZ2dlcmluZ1Rhc2suZ2V0VGFza1RhZygpO1xyXG5cclxuICAgIHRoaXMuc3RhcnRUYXNrc0l0ZXJhdGlvbigpO1xyXG5cclxuICAgIHdoaWxlICgodGFzayA9IDxUYXNrPnRoaXMuZ2V0TmV4dFRhc2soKSkgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHRhZyA9PT0gdGFzay5QcmV2aW91c2x5QWN0aXZlVGFza0lkKVxyXG4gICAgICAgIGxpc3QucHVzaCh0YXNrKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyB0YXNrIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBwcmVkaWNhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0VGFza3MocDogKG9iajogVGFzaykgPT4gYm9vbGVhbik6IExpc3Q8VGFzaz4ge1xyXG4gICAgbGV0IHRhc2tMaXN0OiBMaXN0PFRhc2s+ID0gbmV3IExpc3Q8VGFzaz4oKTtcclxuXHJcbiAgICB0aGlzLl9tZ0RhdGFUYWIuZm9yRWFjaChtZ2QgPT4ge1xyXG4gICAgICBpZiAobWdkICE9PSBudWxsICYmICFtZ2QuSXNBYm9ydGluZykge1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBtZ2QuZ2V0VGFza3NDb3VudCgpOyBpID0gaSArIDEpIHtcclxuICAgICAgICAgIGxldCB0YXNrOiBUYXNrID0gbWdkLmdldFRhc2soaSk7XHJcbiAgICAgICAgICBpZiAodGFzayAhPT0gbnVsbCAmJiBwKHRhc2spKSB7XHJcbiAgICAgICAgICAgIHRhc2tMaXN0LnB1c2godGFzayk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGFza0xpc3Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBpZCBvZiBhIHRhc2sgYWNjb3JkaW5nIHRvIGl0cyBvcmlnaW5hbCBpZFxyXG4gIC8vLyAgIGl0IHdpbGwgdXN1YWxseSByZXR1cm4gdGhlIHNhbWUgaWQgYXMgc2VudCB0byBpdCwgYnV0IGZvciBzdWJmb3JtIGFmdGVyIGVycm9yIGFuZCByZXRyeSBpdCB3aWxsXHJcbiAgLy8vICAgY29udmVydCB0aGUgb3JpZ2luYWwgaWQgdG8gdGhlIGN1cnJlbnQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tJZFwiPi0gb3JpZ2luYWwgdGFzayBpZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgY3VycmVudCB0YXNraWQgZm9yIHRoaXMgdGFzazwvcmV0dXJucz5cclxuICBnZXRUYXNrSWRCeUlkKHRhc2tJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vIFFDUiAjOTgwNDU0IC0gdGhlIHRhc2sgaWQgbWF5IGNoYW5nZSBkdXJpbmcgdGhlIHRhc2sncyBsaWZldGltZSwgc28gdGFza0lkIG1pZ2h0XHJcbiAgICAvLyBiZSBob2xkaW5nIHRoZSBvbGQgb25lIC0gZmluZCB0aGUgdGFzayBhbmQgcmVmZXRjaCBpdHMgY3VycmVudCBJRC5cclxuICAgIGxldCB0YXNrOiBJVGFzayA9IHRoaXMuR2V0VGFza0J5SUQodGFza0lkKTtcclxuICAgIGxldCB0YWc6IHN0cmluZyA9IHRhc2tJZDtcclxuXHJcbiAgICBpZiAodGFzayAhPSBudWxsKVxyXG4gICAgICB0YWcgPSB0YXNrLmdldFRhc2tUYWcoKTtcclxuXHJcbiAgICByZXR1cm4gdGFnO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBhbGwgdG9wIGxldmVsIGZvcm1zIHRoYXQgZXhpc3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldFRvcE1vc3RGb3JtcygpOiBMaXN0PE1nRm9ybUJhc2U+IHtcclxuICAgIGxldCB0YXNrOiBUYXNrO1xyXG4gICAgbGV0IGZvcm1zID0gbmV3IExpc3Q8TWdGb3JtQmFzZT4oKTtcclxuXHJcbiAgICAvLyBtb3ZlIG9uIHRoZSB0YXNrcyBhbmQgYWRkIHRoZSBmb3JtcyB0byB0aGUgYXJyYXlMaXN0XHJcbiAgICB0aGlzLnN0YXJ0VGFza3NJdGVyYXRpb24oKTtcclxuXHJcbiAgICB3aGlsZSAoKHRhc2sgPSA8VGFzaz50aGlzLmdldE5leHRUYXNrKCkpICE9IG51bGwpIHtcclxuICAgICAgbGV0IGZvcm06IE1nRm9ybUJhc2UgPSB0YXNrLmdldEZvcm0oKTtcclxuXHJcbiAgICAgIGlmICghdGFzay5pc0Fib3J0aW5nKCkgJiYgZm9ybSAhPSBudWxsICYmICFmb3JtLmlzU3ViRm9ybSgpKVxyXG4gICAgICAgIGZvcm1zLnB1c2goZm9ybSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldHMgdGhlIE1HRGF0YSB0aGF0IGhvbGRzL3Nob3VsZCBob2xkIHRoZSBzdGFydHVwIHByb2dyYW0uXHJcbiAgLy8vIFRoZSBtZXRob2QgdGFrZXMgaW50byBjb25zaWRlcmF0aW9uIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIHVzZXMgTURJIG9yIG5vdC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0TUdEYXRhRm9yU3RhcnR1cFByb2dyYW0oKTogTUdEYXRhIHtcclxuICAgIERlYnVnLkFzc2VydCh0aGlzLl9tZ0RhdGFUYWIubGVuZ3RoID4gMCwgXCJUaGUgbWFpbiBwcm9ncmFtIG11c3QgYmUgcHJvY2Vzc2VkIGJlZm9yZSBpbnZva2luZyB0aGlzIG1ldGhvZC5cIik7XHJcblxyXG4gICAgbGV0IG1haW5Qcm9nQnlDdGxJZHg6IFRhc2sgPSB0aGlzLkdldE1haW5Qcm9nQnlDdGxJZHgoMCk7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQobWFpblByb2dCeUN0bElkeCAhPT0gbnVsbCwgXCJUaGUgbWFpbiBwcm9ncmFtIG11c3QgYmUgcHJvY2Vzc2VkIGJlZm9yZSBpbnZva2luZyB0aGlzIG1ldGhvZC5cIik7XHJcblxyXG4gICAgRGVidWcuQXNzZXJ0KG1haW5Qcm9nQnlDdGxJZHguZ2V0TWdkSUQoKSA9PT0gMCwgXCJNYWluIHByb2dyYW0gaXMgZXhwZWN0ZWQgdG8gYmUgb24gTUdEYXRhIDAuIElzIHRoaXMgYW4gZXJyb3I/XCIpO1xyXG5cclxuICAgIC8vIGlmIHRoZSBtYWluIHByb2dyYW0gZG9lcyBub3QgaGF2ZSBNREkgZnJhbWUsIHRoZSBzdGFydHVwIE1HRGF0YSBpbmRleCBpcyAwLlxyXG4gICAgcmV0dXJuIHRoaXMuX21nRGF0YVRhYi5nZXRfSXRlbSgwKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBBZGQgY29tbWFuZCwgZXhlY3V0ZSByZXF1ZXN0IGFuZCBkbyByZWNvcmQgY3ljbGUgZm9yIHN1YmZvcm1zIHRoYXQgdGhlIHNlcnZlciBzZW50IHRoZWlyIG5ldyBkYXRhdmlld1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY21kc1RvU2VydmVyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjbWRUb1NlcnZlclwiPmFkZGl0aW9uYWwgY29tbWFuZCB0byB0aGUgU2VydmVyPC9wYXJhbT5cclxuICBhc3luYyBleGVjUmVxdWVzdFdpdGhTdWJmb3JtUmVjb3JkQ3ljbGUoY21kc1RvU2VydmVyOiBDb21tYW5kc1RhYmxlLCBjbWRUb1NlcnZlcjogSUNsaWVudENvbW1hbmQsIGV4cDogRXhwcmVzc2lvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jbGVhbkRvU3ViZm9ybVByZWZpeFN1ZmZpeCgpO1xyXG4gICAgY21kc1RvU2VydmVyLkFkZChjbWRUb1NlcnZlcik7XHJcblxyXG4gICAgLy8gQXZvaWQgaW1tZWRpYXRlIGV4ZWN1dGlvbiBvZiBzZXJ2ZXIgb3BlcmF0aW9uIGR1cmluZyBicm93c2VyIGNsb3NlIHRvIGFsbG93IGNsb3Npbmcgb2YgY29udGV4dCBsYXRlciBieSBzZW5kaW5nIEJyb3dzZXJFc2MgY29tbWFuZCB0byBzZXJ2ZXIuXHJcbiAgICBpZighKE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuU3RhcnR1cE1nRGF0YS5nZXRGaXJzdFRhc2soKS5JbkVuZFRhc2sgJiYgTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLkNsb3NpbmdGb3JtVUkpKVxyXG4gICAgICBhd2FpdCBDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXIuR2V0Q29tbWFuZHNQcm9jZXNzb3IoKS5FeGVjdXRlKENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24uVEFTS1NfQU5EX0NPTU1BTkRTLCBDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2Vzc2lvblN0YWdlLk5PUk1BTCwgZXhwKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmV4ZWNBbGxTdWJmb3JtUmVjb3JkQ3ljbGUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQ2xlYW4gZmxhZyBmb3IgU3ViZm9ybSByZWNvcmQgY3ljbGUgPC9zdW1tYXJ5PlxyXG4gIGNsZWFuRG9TdWJmb3JtUHJlZml4U3VmZml4KCk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuZ2V0U2l6ZSgpOyBpKyspIHtcclxuICAgICAgbGV0IG1nZDogTUdEYXRhID0gdGhpcy5nZXRNR0RhdGEoaSk7XHJcblxyXG4gICAgICBpZiAobWdkID09PSBudWxsIHx8IG1nZC5Jc0Fib3J0aW5nKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgbGV0IHRhc2tzQ291bnQ6IG51bWJlciA9IG1nZC5nZXRUYXNrc0NvdW50KCk7XHJcbiAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0YXNrc0NvdW50OyBqKyspIHtcclxuICAgICAgICBsZXQgdGFzazogVGFzayA9IG1nZC5nZXRUYXNrKGopO1xyXG4gICAgICAgIHRhc2suRG9TdWJmb3JtUHJlZml4U3VmZml4ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEV4ZWN1dGUgUmVjb3JkIGN5Y2xlIGZvciBhbGwgc3ViZm9ybXMgdGhhdCB0aGVpciBmbGFnIGlzIG9uIDwvc3VtbWFyeT5cclxuICBhc3luYyBleGVjQWxsU3ViZm9ybVJlY29yZEN5Y2xlKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBtZ2Q6IE1HRGF0YSA9IHRoaXMuZ2V0TUdEYXRhKGkpO1xyXG5cclxuICAgICAgaWYgKG1nZCA9PT0gbnVsbCB8fCBtZ2QuSXNBYm9ydGluZylcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCB0YXNrc0NvdW50OiBudW1iZXIgPSBtZ2QuZ2V0VGFza3NDb3VudCgpO1xyXG4gICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdGFza3NDb3VudDsgaiA9IGogKyAxKSB7XHJcbiAgICAgICAgbGV0IHRhc2s6IFRhc2sgPSBtZ2QuZ2V0VGFzayhqKTtcclxuICAgICAgICBpZiAodGFzay5Jc1N1YkZvcm0gJiYgdGFzay5Eb1N1YmZvcm1QcmVmaXhTdWZmaXgpIHtcclxuICAgICAgICAgIC8vIEluIHRoZSByZWNvcmQgcHJlZml4IG9mIHRoZSBjdXJyZW50IHRhc2sgKGNvbW1vbkhhbmRsZXJCZWZvcmUpIHdlIGV4ZWN1dGUgcmVjb3JkIHByZWZpeCBvZiBhbGwgZmF0aGVycy5cclxuICAgICAgICAgIC8vIEJ1dCB3aGVuIHdlIHJldHVybiBmcm9tIHRoZSBzZXJ2ZXIgd2UgZG8gbm90IG5lZWQgaXQuIFNvIHdlIHByZXZlbnQgZmF0aGVyIHJlY29yZCBwcmVmaXggZXhlY3V0aW9uLlxyXG4gICAgICAgICAgdGFzay5QZXJmb3JtUGFyZW50UmVjb3JkUHJlZml4ID0gZmFsc2U7XHJcbiAgICAgICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wdXNoTmV3RXhlY1N0YWNrcygpO1xyXG4gICAgICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhUYXNrQW5kU3ViZm9ybVJlZnJlc2godGFzaywgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVgsIHRydWUpO1xyXG5cclxuICAgICAgICAgIGlmICghQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuR2V0U3RvcEV4ZWN1dGlvbkZsYWcoKSlcclxuICAgICAgICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhUYXNrKHRhc2ssIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfU1VGRklYKTtcclxuXHJcbiAgICAgICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wb3BOZXdFeGVjU3RhY2tzKCk7XHJcbiAgICAgICAgICB0YXNrLlBlcmZvcm1QYXJlbnRSZWNvcmRQcmVmaXggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19