@magic-xpa/engine 4.1100.0-dev4110.26 → 4.1100.0-dev4110.260

Sign up to get free protection for your applications and to get access to all the features.
Files changed (491) hide show
  1. package/{esm2020 → esm2022}/index.mjs +188 -188
  2. package/{esm2020 → esm2022}/magic-xpa-engine.mjs +1 -1
  3. package/esm2022/src/AccessHelper.mjs +15 -0
  4. package/esm2022/src/ClientManager.mjs +418 -0
  5. package/esm2022/src/CommandsProcessorBase.mjs +56 -0
  6. package/{esm2020 → esm2022}/src/CommandsProcessorManager.mjs +25 -25
  7. package/esm2022/src/CommandsTable.mjs +162 -0
  8. package/esm2022/src/ConstInterface.mjs +517 -0
  9. package/{esm2020 → esm2022}/src/CurrentClientVersion.mjs +2 -2
  10. package/esm2022/src/FlowMonitorInterface.mjs +16 -0
  11. package/esm2022/src/GUIManager.mjs +62 -0
  12. package/esm2022/src/GlobalCommandsManager.mjs +34 -0
  13. package/esm2022/src/GuiEventsProcessor.mjs +156 -0
  14. package/{esm2020 → esm2022}/src/ICommandsTable.mjs +1 -1
  15. package/esm2022/src/ServerConfig.mjs +122 -0
  16. package/{esm2020 → esm2022}/src/bridge/IGuiEvent.mjs +19 -19
  17. package/esm2022/src/bridge/MagicBridge.mjs +41 -0
  18. package/esm2022/src/commands/ClientOriginatedCommandTaskTag.mjs +12 -0
  19. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs +8 -8
  20. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs +9 -9
  21. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs +9 -9
  22. package/esm2022/src/commands/ClientToServer/BrowserEscEventCommand.mjs +26 -0
  23. package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommand.mjs +14 -14
  24. package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +59 -59
  25. package/esm2022/src/commands/ClientToServer/ColumnSortEventCommand.mjs +29 -0
  26. package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +261 -0
  27. package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +67 -0
  28. package/esm2022/src/commands/ClientToServer/ComputeEventCommand.mjs +26 -0
  29. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +24 -21
  30. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +23 -20
  31. package/{esm2020 → esm2022}/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs +8 -8
  32. package/esm2022/src/commands/ClientToServer/DataViewOutputCommand.mjs +13 -0
  33. package/{esm2020 → esm2022}/src/commands/ClientToServer/DataviewCommand.mjs +44 -44
  34. package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +40 -0
  35. package/{esm2020 → esm2022}/src/commands/ClientToServer/EventCommand.mjs +43 -40
  36. package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +70 -0
  37. package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +25 -0
  38. package/{esm2020 → esm2022}/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs +10 -10
  39. package/{esm2020 → esm2022}/src/commands/ClientToServer/ICommandTaskTag.mjs +1 -1
  40. package/esm2022/src/commands/ClientToServer/IndexChangeEventCommand.mjs +24 -0
  41. package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +26 -0
  42. package/{esm2020 → esm2022}/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +26 -23
  43. package/{esm2020 → esm2022}/src/commands/ClientToServer/QueryCommand.mjs +20 -20
  44. package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +30 -0
  45. package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +30 -0
  46. package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +27 -0
  47. package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +43 -0
  48. package/esm2022/src/commands/ClientToServer/SelectProgramCommand.mjs +19 -0
  49. package/{esm2020 → esm2022}/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +9 -9
  50. package/esm2022/src/commands/ClientToServer/SubformOpenEventCommand.mjs +24 -0
  51. package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +27 -0
  52. package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +34 -0
  53. package/{esm2020 → esm2022}/src/commands/ClientToServer/UnloadCommand.mjs +18 -15
  54. package/esm2022/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +18 -0
  55. package/esm2022/src/commands/DataViewCommandBase.mjs +8 -0
  56. package/{esm2020 → esm2022}/src/commands/IClientCommand.mjs +1 -1
  57. package/esm2022/src/commands/IClientTargetedCommand.mjs +13 -0
  58. package/{esm2020 → esm2022}/src/commands/IClientToServerCommandInfo.mjs +2 -2
  59. package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +65 -0
  60. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddLocateCommand.mjs +21 -21
  61. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddRangeCommand.mjs +62 -62
  62. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddSortCommand.mjs +33 -33
  63. package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +25 -0
  64. package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +24 -0
  65. package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
  66. package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +221 -0
  67. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetLocateCommand.mjs +14 -14
  68. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetRangeCommand.mjs +14 -14
  69. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetSortCommand.mjs +14 -14
  70. package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +37 -0
  71. package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +83 -0
  72. package/{esm2020 → esm2022}/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +132 -132
  73. package/{esm2020 → esm2022}/src/communications/IConnectionStateManager.mjs +1 -1
  74. package/esm2022/src/communications/InteractiveCommunicationsFailureHandler.mjs +15 -0
  75. package/{esm2020 → esm2022}/src/data/DataSourceIdKey.mjs +2 -2
  76. package/esm2022/src/data/DataView.mjs +1613 -0
  77. package/{esm2020 → esm2022}/src/data/DataViewBase.mjs +3 -3
  78. package/esm2022/src/data/DataviewManager.mjs +28 -0
  79. package/esm2022/src/data/DataviewManagerBase.mjs +15 -0
  80. package/esm2022/src/data/DvCache.mjs +67 -0
  81. package/esm2022/src/data/Field.mjs +646 -0
  82. package/esm2022/src/data/FieldBase.mjs +15 -0
  83. package/esm2022/src/data/FieldsTable.mjs +103 -0
  84. package/{esm2020 → esm2022}/src/data/IRecordsTable.mjs +1 -1
  85. package/{esm2020 → esm2022}/src/data/Key.mjs +88 -88
  86. package/esm2022/src/data/Record.mjs +880 -0
  87. package/{esm2020 → esm2022}/src/data/RecordOutOfDataViewException.mjs +15 -15
  88. package/esm2022/src/data/RecordsTable.mjs +267 -0
  89. package/{esm2020 → esm2022}/src/data/TaskTransactionManager.mjs +107 -103
  90. package/{esm2020 → esm2022}/src/data/XMLBasedDcValuesBuilder.mjs +74 -74
  91. package/{esm2020 → esm2022}/src/enums.mjs +23 -23
  92. package/esm2022/src/env/EnvVariablesTable.mjs +340 -0
  93. package/esm2022/src/env/Environment.mjs +487 -0
  94. package/{esm2020 → esm2022}/src/env/ILanguageData.mjs +1 -1
  95. package/esm2022/src/env/LanguageData.mjs +227 -0
  96. package/{esm2020 → esm2022}/src/env/MirrorString.mjs +65 -65
  97. package/esm2022/src/event/ActionManager.mjs +91 -0
  98. package/esm2022/src/event/Event.mjs +1333 -0
  99. package/esm2022/src/event/EventHandler.mjs +766 -0
  100. package/esm2022/src/event/EventHandlerPosition.mjs +204 -0
  101. package/esm2022/src/event/EventsManager.mjs +2988 -0
  102. package/{esm2020 → esm2022}/src/event/IEventsManager.mjs +6 -6
  103. package/esm2022/src/event/RunTimeEvent.mjs +399 -0
  104. package/{esm2020 → esm2022}/src/event/RunTimeEventBase.mjs +3 -3
  105. package/esm2022/src/event/UserEventsTable.mjs +47 -0
  106. package/esm2022/src/exp/ExpTable.mjs +57 -0
  107. package/esm2022/src/exp/Expression.mjs +200 -0
  108. package/esm2022/src/exp/ExpressionDict.mjs +727 -0
  109. package/esm2022/src/exp/ExpressionEvaluator.mjs +4206 -0
  110. package/esm2022/src/exp/ExpressionLocalJpn.mjs +314 -0
  111. package/{esm2020 → esm2022}/src/exp/GlobalParamsTable.mjs +85 -85
  112. package/esm2022/src/exp/YesNoExp.mjs +36 -0
  113. package/esm2022/src/gui/CreatedFormVector.mjs +23 -0
  114. package/esm2022/src/gui/FormsTable.mjs +66 -0
  115. package/esm2022/src/gui/MgControl.mjs +363 -0
  116. package/esm2022/src/gui/MgForm.mjs +1224 -0
  117. package/esm2022/src/http/HttpManager.mjs +97 -0
  118. package/esm2022/src/http/client/HttpClientAsync.mjs +68 -0
  119. package/{esm2020 → esm2022}/src/http/client/HttpClientBase.mjs +132 -132
  120. package/esm2022/src/http/client/HttpClientEvents.mjs +39 -0
  121. package/esm2022/src/http/client/HttpClientSync.mjs +42 -0
  122. package/esm2022/src/http/client/HttpUtility.mjs +84 -0
  123. package/{esm2020 → esm2022}/src/http/client/ICommunicationsFailureHandler.mjs +1 -1
  124. package/{esm2020 → esm2022}/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -18
  125. package/{esm2020 → esm2022}/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -18
  126. package/{esm2020 → esm2022}/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -18
  127. package/esm2022/src/remote/RemoteCommandsProcessor.mjs +883 -0
  128. package/{esm2020 → esm2022}/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -25
  129. package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandBase.mjs +24 -24
  130. package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandFactory.mjs +60 -60
  131. package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +15 -15
  132. package/{esm2020 → esm2022}/src/remote/RemoteDataviewManager.mjs +17 -17
  133. package/{esm2020 → esm2022}/src/remote/RemoteInitDataViewCommand.mjs +10 -10
  134. package/{esm2020 → esm2022}/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +16 -16
  135. package/{esm2020 → esm2022}/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +12 -12
  136. package/{esm2020 → esm2022}/src/remote/ResetUserSortRemoteDataviewCommand.mjs +15 -15
  137. package/esm2022/src/remote/ServerError.mjs +40 -0
  138. package/{esm2020 → esm2022}/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +19 -19
  139. package/esm2022/src/rt/Argument.mjs +265 -0
  140. package/esm2022/src/rt/ArgumentsList.mjs +103 -0
  141. package/esm2022/src/rt/Boundary.mjs +152 -0
  142. package/esm2022/src/rt/CompMainPrgTable.mjs +63 -0
  143. package/esm2022/src/rt/DataviewHeaderBase.mjs +98 -0
  144. package/{esm2020 → esm2022}/src/rt/DataviewHeaderFactory.mjs +6 -6
  145. package/esm2022/src/rt/DataviewHeaders.mjs +53 -0
  146. package/{esm2020 → esm2022}/src/rt/DataviewHeadersSaxHandler.mjs +38 -38
  147. package/{esm2020 → esm2022}/src/rt/ExecutionStack.mjs +94 -94
  148. package/{esm2020 → esm2022}/src/rt/ExecutionStackEntry.mjs +17 -17
  149. package/{esm2020 → esm2022}/src/rt/HandlersTable.mjs +96 -96
  150. package/{esm2020 → esm2022}/src/rt/IDataSourceViewDefinition.mjs +1 -1
  151. package/{esm2020 → esm2022}/src/rt/IDataviewHeader.mjs +1 -1
  152. package/{esm2020 → esm2022}/src/rt/IResultValue.mjs +1 -1
  153. package/esm2022/src/rt/LastFocusedManager.mjs +65 -0
  154. package/esm2022/src/rt/Operation.mjs +735 -0
  155. package/esm2022/src/rt/OperationTable.mjs +67 -0
  156. package/esm2022/src/rt/Recompute.mjs +355 -0
  157. package/{esm2020 → esm2022}/src/rt/RecomputeTable.mjs +62 -62
  158. package/{esm2020 → esm2022}/src/rt/RemoteDataviewHeader.mjs +108 -108
  159. package/esm2022/src/rt/ResultValue.mjs +10 -0
  160. package/esm2022/src/rt/TableCache.mjs +177 -0
  161. package/esm2022/src/rt/TableCacheManager.mjs +67 -0
  162. package/esm2022/src/rt/Transaction.mjs +53 -0
  163. package/esm2022/src/security/UserDetails.mjs +71 -0
  164. package/{esm2020 → esm2022}/src/tasks/IMGDataCollection.mjs +1 -1
  165. package/esm2022/src/tasks/MGData.mjs +552 -0
  166. package/esm2022/src/tasks/MGDataCollection.mjs +252 -0
  167. package/esm2022/src/tasks/RCTimer.mjs +63 -0
  168. package/{esm2020 → esm2022}/src/tasks/RemoteTaskService.mjs +44 -44
  169. package/esm2022/src/tasks/Task.mjs +2499 -0
  170. package/esm2022/src/tasks/TaskBase.mjs +83 -0
  171. package/{esm2020 → esm2022}/src/tasks/TaskServiceBase.mjs +24 -24
  172. package/esm2022/src/tasks/TasksTable.mjs +80 -0
  173. package/esm2022/src/tasks/sort/Sort.mjs +5 -0
  174. package/{esm2020 → esm2022}/src/tasks/sort/SortCollection.mjs +67 -67
  175. package/{esm2020 → esm2022}/src/util/ConstUtils.mjs +13 -13
  176. package/esm2022/src/util/FlowMonitorQueue.mjs +451 -0
  177. package/{esm2020 → esm2022}/src/util/HeapSort.mjs +69 -69
  178. package/{esm2020 → esm2022}/src/util/IMirrorXML.mjs +1 -1
  179. package/{esm2020 → esm2022}/src/util/IServerConfig.mjs +1 -1
  180. package/{esm2020 → esm2022}/src/util/MgBlockingQueue.mjs +1 -1
  181. package/esm2022/src/util/MgPriorityBlockingQueue.mjs +74 -0
  182. package/esm2022/src/util/MgPriorityQueue.mjs +66 -0
  183. package/{esm2020 → esm2022}/src/util/ParamParseResult.mjs +7 -7
  184. package/esm2022/src/util/PrmMap.mjs +152 -0
  185. package/esm2022/src/util/ReturnResult.mjs +46 -0
  186. package/esm2022/src/util/ReturnResultBase.mjs +18 -0
  187. package/esm2022/src/util/Scrambler.mjs +89 -0
  188. package/esm2022/src/util/UniqueIDUtils.mjs +13 -0
  189. package/{esm2020 → esm2022}/src/util/cookie.service.mjs +91 -91
  190. package/{fesm2020 → fesm2022}/magic-xpa-engine.mjs +29885 -29693
  191. package/fesm2022/magic-xpa-engine.mjs.map +1 -0
  192. package/index.d.ts +187 -187
  193. package/package.json +8 -14
  194. package/src/AccessHelper.d.ts +20 -20
  195. package/src/ClientManager.d.ts +35 -32
  196. package/src/CommandsProcessorBase.d.ts +23 -23
  197. package/src/CommandsProcessorManager.d.ts +6 -6
  198. package/src/CommandsTable.d.ts +22 -22
  199. package/src/ConstInterface.d.ts +516 -515
  200. package/src/CurrentClientVersion.d.ts +1 -1
  201. package/src/FlowMonitorInterface.d.ts +15 -15
  202. package/src/GUIManager.d.ts +17 -17
  203. package/src/GlobalCommandsManager.d.ts +17 -17
  204. package/src/GuiEventsProcessor.d.ts +24 -24
  205. package/src/ICommandsTable.d.ts +9 -9
  206. package/src/ServerConfig.d.ts +35 -34
  207. package/src/bridge/IGuiEvent.d.ts +19 -19
  208. package/src/bridge/MagicBridge.d.ts +16 -16
  209. package/src/commands/ClientOriginatedCommandTaskTag.d.ts +8 -8
  210. package/src/commands/ClientToServer/AddUserLocateDataViewCommand.d.ts +4 -4
  211. package/src/commands/ClientToServer/AddUserRangeDataviewCommand.d.ts +6 -6
  212. package/src/commands/ClientToServer/AddUserSortDataViewCommand.d.ts +6 -6
  213. package/src/commands/ClientToServer/BrowserEscEventCommand.d.ts +9 -8
  214. package/src/commands/ClientToServer/ClientOriginatedCommand.d.ts +8 -8
  215. package/src/commands/ClientToServer/ClientOriginatedCommandSerializer.d.ts +6 -6
  216. package/src/commands/ClientToServer/ColumnSortEventCommand.d.ts +11 -10
  217. package/src/commands/ClientToServer/CommandFactory.d.ts +64 -64
  218. package/src/commands/ClientToServer/CommandSerializationHelper.d.ts +20 -20
  219. package/src/commands/ClientToServer/ComputeEventCommand.d.ts +9 -8
  220. package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +8 -7
  221. package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +8 -7
  222. package/src/commands/ClientToServer/ControlItemsRefreshCommand.d.ts +6 -6
  223. package/src/commands/ClientToServer/DataViewOutputCommand.d.ts +9 -9
  224. package/src/commands/ClientToServer/DataviewCommand.d.ts +32 -32
  225. package/src/commands/ClientToServer/EvaluateCommand.d.ts +16 -15
  226. package/src/commands/ClientToServer/EventCommand.d.ts +16 -15
  227. package/src/commands/ClientToServer/ExecOperCommand.d.ts +24 -23
  228. package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +9 -8
  229. package/src/commands/ClientToServer/GlobalParamsQueryCommand.d.ts +5 -5
  230. package/src/commands/ClientToServer/ICommandTaskTag.d.ts +3 -3
  231. package/src/commands/ClientToServer/IndexChangeEventCommand.d.ts +9 -8
  232. package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +11 -10
  233. package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +9 -8
  234. package/src/commands/ClientToServer/QueryCommand.d.ts +8 -8
  235. package/src/commands/ClientToServer/RecomputeCommand.d.ts +12 -11
  236. package/src/commands/ClientToServer/RefreshEventCommand.d.ts +13 -12
  237. package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +11 -10
  238. package/src/commands/ClientToServer/RollbackEventCommand.d.ts +15 -14
  239. package/src/commands/ClientToServer/SelectProgramCommand.d.ts +7 -6
  240. package/src/commands/ClientToServer/SetTransactionStateDataviewCommand.d.ts +5 -5
  241. package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +9 -8
  242. package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +10 -9
  243. package/src/commands/ClientToServer/TransactionCommand.d.ts +14 -12
  244. package/src/commands/ClientToServer/UnloadCommand.d.ts +8 -7
  245. package/src/commands/ClientToServer/WriteMessageToServerLogCommand.d.ts +6 -6
  246. package/src/commands/DataViewCommandBase.d.ts +6 -6
  247. package/src/commands/IClientCommand.d.ts +2 -2
  248. package/src/commands/IClientTargetedCommand.d.ts +12 -12
  249. package/src/commands/IClientToServerCommandInfo.d.ts +4 -3
  250. package/src/commands/ServerToClient/AbortCommand.d.ts +11 -11
  251. package/src/commands/ServerToClient/AddLocateCommand.d.ts +6 -6
  252. package/src/commands/ServerToClient/AddRangeCommand.d.ts +10 -10
  253. package/src/commands/ServerToClient/AddSortCommand.d.ts +9 -9
  254. package/src/commands/ServerToClient/ClientRefreshCommand.d.ts +7 -7
  255. package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +12 -12
  256. package/src/commands/ServerToClient/EnhancedVerifyCommand.d.ts +13 -13
  257. package/src/commands/ServerToClient/OpenURLCommand.d.ts +21 -21
  258. package/src/commands/ServerToClient/ResetLocateCommand.d.ts +6 -6
  259. package/src/commands/ServerToClient/ResetRangeCommand.d.ts +6 -6
  260. package/src/commands/ServerToClient/ResetSortCommand.d.ts +6 -6
  261. package/src/commands/ServerToClient/ResultCommand.d.ts +10 -10
  262. package/src/commands/ServerToClient/VerifyCommand.d.ts +17 -17
  263. package/src/commands/ServerToClient/XMLBasedCommandBuilder.d.ts +11 -11
  264. package/src/communications/IConnectionStateManager.d.ts +4 -4
  265. package/src/communications/InteractiveCommunicationsFailureHandler.d.ts +6 -6
  266. package/src/data/DataSourceIdKey.d.ts +2 -2
  267. package/src/data/DataView.d.ts +162 -162
  268. package/src/data/DataViewBase.d.ts +12 -12
  269. package/src/data/DataviewManager.d.ts +14 -14
  270. package/src/data/DataviewManagerBase.d.ts +11 -11
  271. package/src/data/DvCache.d.ts +15 -15
  272. package/src/data/Field.d.ts +103 -103
  273. package/src/data/FieldBase.d.ts +23 -23
  274. package/src/data/FieldsTable.d.ts +27 -27
  275. package/src/data/IRecordsTable.d.ts +7 -7
  276. package/src/data/Key.d.ts +15 -15
  277. package/src/data/Record.d.ts +157 -156
  278. package/src/data/RecordOutOfDataViewException.d.ts +10 -10
  279. package/src/data/RecordsTable.d.ts +38 -38
  280. package/src/data/TaskTransactionManager.d.ts +17 -17
  281. package/src/data/XMLBasedDcValuesBuilder.d.ts +11 -11
  282. package/src/enums.d.ts +21 -21
  283. package/src/env/EnvVariablesTable.d.ts +17 -17
  284. package/src/env/Environment.d.ts +118 -118
  285. package/src/env/ILanguageData.d.ts +3 -3
  286. package/src/env/LanguageData.d.ts +20 -20
  287. package/src/env/MirrorString.d.ts +15 -15
  288. package/src/event/ActionManager.d.ts +14 -14
  289. package/src/event/Event.d.ts +79 -79
  290. package/src/event/EventHandler.d.ts +66 -66
  291. package/src/event/EventHandlerPosition.d.ts +25 -25
  292. package/src/event/EventsManager.d.ts +205 -204
  293. package/src/event/IEventsManager.d.ts +77 -77
  294. package/src/event/RunTimeEvent.d.ts +126 -123
  295. package/src/event/RunTimeEventBase.d.ts +5 -5
  296. package/src/event/UserEventsTable.d.ts +11 -11
  297. package/src/exp/ExpTable.d.ts +11 -11
  298. package/src/exp/Expression.d.ts +37 -37
  299. package/src/exp/ExpressionDict.d.ts +12 -12
  300. package/src/exp/ExpressionEvaluator.d.ts +198 -198
  301. package/src/exp/ExpressionLocalJpn.d.ts +18 -18
  302. package/src/exp/GlobalParamsTable.d.ts +19 -19
  303. package/src/exp/YesNoExp.d.ts +9 -9
  304. package/src/gui/CreatedFormVector.d.ts +10 -10
  305. package/src/gui/FormsTable.d.ts +15 -15
  306. package/src/gui/MgControl.d.ts +60 -60
  307. package/src/gui/MgForm.d.ts +96 -93
  308. package/src/http/HttpManager.d.ts +25 -25
  309. package/src/http/client/HttpClientAsync.d.ts +16 -16
  310. package/src/http/client/HttpClientBase.d.ts +30 -30
  311. package/src/http/client/HttpClientEvents.d.ts +18 -18
  312. package/src/http/client/HttpClientSync.d.ts +17 -17
  313. package/src/http/client/HttpUtility.d.ts +10 -10
  314. package/src/http/client/ICommunicationsFailureHandler.d.ts +5 -5
  315. package/src/remote/AddUserLocateRemoteDataViewCommand.d.ts +8 -8
  316. package/src/remote/AddUserRangeRemoteDataViewCommand.d.ts +8 -8
  317. package/src/remote/AddUserSortRemoteDataViewCommand.d.ts +8 -8
  318. package/src/remote/RemoteCommandsProcessor.d.ts +51 -51
  319. package/src/remote/RemoteControlItemsRefreshCommand.d.ts +8 -8
  320. package/src/remote/RemoteDataViewCommandBase.d.ts +10 -10
  321. package/src/remote/RemoteDataViewCommandFactory.d.ts +6 -6
  322. package/src/remote/RemoteDataViewCommandUpdateNonModifiable.d.ts +8 -8
  323. package/src/remote/RemoteDataviewManager.d.ts +9 -9
  324. package/src/remote/RemoteInitDataViewCommand.d.ts +7 -7
  325. package/src/remote/ResetUserLocateRemoteDataviewCommand.d.ts +7 -7
  326. package/src/remote/ResetUserRangeRemoteDataviewCommand.d.ts +7 -7
  327. package/src/remote/ResetUserSortRemoteDataviewCommand.d.ts +7 -7
  328. package/src/remote/ServerError.d.ts +16 -16
  329. package/src/remote/SetTransactionStateRemoteDataViewCommand.d.ts +8 -8
  330. package/src/rt/Argument.d.ts +36 -36
  331. package/src/rt/ArgumentsList.d.ts +24 -24
  332. package/src/rt/Boundary.d.ts +27 -27
  333. package/src/rt/CompMainPrgTable.d.ts +10 -10
  334. package/src/rt/DataviewHeaderBase.d.ts +34 -34
  335. package/src/rt/DataviewHeaderFactory.d.ts +5 -5
  336. package/src/rt/DataviewHeaders.d.ts +12 -12
  337. package/src/rt/DataviewHeadersSaxHandler.d.ts +10 -10
  338. package/src/rt/ExecutionStack.d.ts +22 -22
  339. package/src/rt/ExecutionStackEntry.d.ts +7 -7
  340. package/src/rt/HandlersTable.d.ts +19 -19
  341. package/src/rt/IDataSourceViewDefinition.d.ts +6 -6
  342. package/src/rt/IDataviewHeader.d.ts +10 -10
  343. package/src/rt/IResultValue.d.ts +4 -4
  344. package/src/rt/LastFocusedManager.d.ts +23 -23
  345. package/src/rt/Operation.d.ts +97 -97
  346. package/src/rt/OperationTable.d.ts +15 -15
  347. package/src/rt/Recompute.d.ts +41 -41
  348. package/src/rt/RecomputeTable.d.ts +9 -9
  349. package/src/rt/RemoteDataviewHeader.d.ts +14 -14
  350. package/src/rt/ResultValue.d.ts +7 -7
  351. package/src/rt/TableCache.d.ts +29 -29
  352. package/src/rt/TableCacheManager.d.ts +10 -10
  353. package/src/rt/Transaction.d.ts +23 -23
  354. package/src/security/UserDetails.d.ts +16 -16
  355. package/src/tasks/IMGDataCollection.d.ts +26 -26
  356. package/src/tasks/MGData.d.ts +63 -63
  357. package/src/tasks/MGDataCollection.d.ts +42 -42
  358. package/src/tasks/RCTimer.d.ts +13 -13
  359. package/src/tasks/RemoteTaskService.d.ts +16 -16
  360. package/src/tasks/Task.d.ts +312 -312
  361. package/src/tasks/TaskBase.d.ts +123 -123
  362. package/src/tasks/TaskServiceBase.d.ts +16 -16
  363. package/src/tasks/TasksTable.d.ts +21 -21
  364. package/src/tasks/sort/Sort.d.ts +4 -4
  365. package/src/tasks/sort/SortCollection.d.ts +11 -11
  366. package/src/util/ConstUtils.d.ts +3 -3
  367. package/src/util/FlowMonitorQueue.d.ts +70 -70
  368. package/src/util/HeapSort.d.ts +6 -6
  369. package/src/util/IMirrorXML.d.ts +6 -6
  370. package/src/util/IServerConfig.d.ts +11 -11
  371. package/src/util/MgBlockingQueue.d.ts +5 -5
  372. package/src/util/MgPriorityBlockingQueue.d.ts +17 -17
  373. package/src/util/MgPriorityQueue.d.ts +13 -13
  374. package/src/util/ParamParseResult.d.ts +6 -6
  375. package/src/util/PrmMap.d.ts +28 -28
  376. package/src/util/ReturnResult.d.ts +18 -18
  377. package/src/util/ReturnResultBase.d.ts +11 -11
  378. package/src/util/Scrambler.d.ts +10 -10
  379. package/src/util/UniqueIDUtils.d.ts +4 -4
  380. package/src/util/cookie.service.d.ts +8 -8
  381. package/esm2020/src/AccessHelper.mjs +0 -9
  382. package/esm2020/src/ClientManager.mjs +0 -399
  383. package/esm2020/src/CommandsProcessorBase.mjs +0 -58
  384. package/esm2020/src/CommandsTable.mjs +0 -162
  385. package/esm2020/src/ConstInterface.mjs +0 -516
  386. package/esm2020/src/FlowMonitorInterface.mjs +0 -16
  387. package/esm2020/src/GUIManager.mjs +0 -62
  388. package/esm2020/src/GlobalCommandsManager.mjs +0 -34
  389. package/esm2020/src/GuiEventsProcessor.mjs +0 -154
  390. package/esm2020/src/ServerConfig.mjs +0 -117
  391. package/esm2020/src/bridge/MagicBridge.mjs +0 -41
  392. package/esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs +0 -11
  393. package/esm2020/src/commands/ClientToServer/BrowserEscEventCommand.mjs +0 -23
  394. package/esm2020/src/commands/ClientToServer/ColumnSortEventCommand.mjs +0 -26
  395. package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +0 -260
  396. package/esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -69
  397. package/esm2020/src/commands/ClientToServer/ComputeEventCommand.mjs +0 -23
  398. package/esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
  399. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +0 -36
  400. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +0 -67
  401. package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -22
  402. package/esm2020/src/commands/ClientToServer/IndexChangeEventCommand.mjs +0 -21
  403. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +0 -23
  404. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +0 -27
  405. package/esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs +0 -27
  406. package/esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +0 -24
  407. package/esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs +0 -39
  408. package/esm2020/src/commands/ClientToServer/SelectProgramCommand.mjs +0 -15
  409. package/esm2020/src/commands/ClientToServer/SubformOpenEventCommand.mjs +0 -21
  410. package/esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +0 -24
  411. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +0 -28
  412. package/esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +0 -18
  413. package/esm2020/src/commands/DataViewCommandBase.mjs +0 -10
  414. package/esm2020/src/commands/IClientTargetedCommand.mjs +0 -9
  415. package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +0 -65
  416. package/esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs +0 -25
  417. package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +0 -27
  418. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +0 -45
  419. package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +0 -221
  420. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +0 -37
  421. package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +0 -83
  422. package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +0 -17
  423. package/esm2020/src/data/DataView.mjs +0 -1610
  424. package/esm2020/src/data/DataviewManager.mjs +0 -28
  425. package/esm2020/src/data/DataviewManagerBase.mjs +0 -15
  426. package/esm2020/src/data/DvCache.mjs +0 -67
  427. package/esm2020/src/data/Field.mjs +0 -646
  428. package/esm2020/src/data/FieldBase.mjs +0 -18
  429. package/esm2020/src/data/FieldsTable.mjs +0 -103
  430. package/esm2020/src/data/Record.mjs +0 -846
  431. package/esm2020/src/data/RecordsTable.mjs +0 -267
  432. package/esm2020/src/env/EnvVariablesTable.mjs +0 -340
  433. package/esm2020/src/env/Environment.mjs +0 -489
  434. package/esm2020/src/env/LanguageData.mjs +0 -226
  435. package/esm2020/src/event/ActionManager.mjs +0 -91
  436. package/esm2020/src/event/Event.mjs +0 -1333
  437. package/esm2020/src/event/EventHandler.mjs +0 -766
  438. package/esm2020/src/event/EventHandlerPosition.mjs +0 -204
  439. package/esm2020/src/event/EventsManager.mjs +0 -2975
  440. package/esm2020/src/event/RunTimeEvent.mjs +0 -392
  441. package/esm2020/src/event/UserEventsTable.mjs +0 -47
  442. package/esm2020/src/exp/ExpTable.mjs +0 -59
  443. package/esm2020/src/exp/Expression.mjs +0 -200
  444. package/esm2020/src/exp/ExpressionDict.mjs +0 -727
  445. package/esm2020/src/exp/ExpressionEvaluator.mjs +0 -4212
  446. package/esm2020/src/exp/ExpressionLocalJpn.mjs +0 -314
  447. package/esm2020/src/exp/YesNoExp.mjs +0 -36
  448. package/esm2020/src/gui/CreatedFormVector.mjs +0 -23
  449. package/esm2020/src/gui/FormsTable.mjs +0 -66
  450. package/esm2020/src/gui/MgControl.mjs +0 -353
  451. package/esm2020/src/gui/MgForm.mjs +0 -1181
  452. package/esm2020/src/http/HttpManager.mjs +0 -97
  453. package/esm2020/src/http/client/HttpClientAsync.mjs +0 -67
  454. package/esm2020/src/http/client/HttpClientEvents.mjs +0 -39
  455. package/esm2020/src/http/client/HttpClientSync.mjs +0 -42
  456. package/esm2020/src/http/client/HttpUtility.mjs +0 -84
  457. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +0 -880
  458. package/esm2020/src/remote/ServerError.mjs +0 -40
  459. package/esm2020/src/rt/Argument.mjs +0 -265
  460. package/esm2020/src/rt/ArgumentsList.mjs +0 -103
  461. package/esm2020/src/rt/Boundary.mjs +0 -152
  462. package/esm2020/src/rt/CompMainPrgTable.mjs +0 -65
  463. package/esm2020/src/rt/DataviewHeaderBase.mjs +0 -96
  464. package/esm2020/src/rt/DataviewHeaders.mjs +0 -53
  465. package/esm2020/src/rt/LastFocusedManager.mjs +0 -67
  466. package/esm2020/src/rt/Operation.mjs +0 -735
  467. package/esm2020/src/rt/OperationTable.mjs +0 -67
  468. package/esm2020/src/rt/Recompute.mjs +0 -355
  469. package/esm2020/src/rt/ResultValue.mjs +0 -12
  470. package/esm2020/src/rt/TableCache.mjs +0 -177
  471. package/esm2020/src/rt/TableCacheManager.mjs +0 -67
  472. package/esm2020/src/rt/Transaction.mjs +0 -53
  473. package/esm2020/src/security/UserDetails.mjs +0 -71
  474. package/esm2020/src/tasks/MGData.mjs +0 -552
  475. package/esm2020/src/tasks/MGDataCollection.mjs +0 -252
  476. package/esm2020/src/tasks/RCTimer.mjs +0 -63
  477. package/esm2020/src/tasks/Task.mjs +0 -2495
  478. package/esm2020/src/tasks/TaskBase.mjs +0 -87
  479. package/esm2020/src/tasks/TasksTable.mjs +0 -80
  480. package/esm2020/src/tasks/sort/Sort.mjs +0 -7
  481. package/esm2020/src/util/FlowMonitorQueue.mjs +0 -453
  482. package/esm2020/src/util/MgPriorityBlockingQueue.mjs +0 -74
  483. package/esm2020/src/util/MgPriorityQueue.mjs +0 -66
  484. package/esm2020/src/util/PrmMap.mjs +0 -151
  485. package/esm2020/src/util/ReturnResult.mjs +0 -46
  486. package/esm2020/src/util/ReturnResultBase.mjs +0 -18
  487. package/esm2020/src/util/Scrambler.mjs +0 -89
  488. package/esm2020/src/util/UniqueIDUtils.mjs +0 -12
  489. package/fesm2015/magic-xpa-engine.mjs +0 -30835
  490. package/fesm2015/magic-xpa-engine.mjs.map +0 -1
  491. package/fesm2020/magic-xpa-engine.mjs.map +0 -1
@@ -0,0 +1,340 @@
1
+ import { CommandsProcessorBase_SendingInstruction } from "../CommandsProcessorBase";
2
+ import { MirrorPrmMap } from "../util/PrmMap";
3
+ import { NNumber, NString, StringBuilder } from "@magic-xpa/mscorelib";
4
+ import { DisplayConvertor } from "@magic-xpa/gui";
5
+ import { ConstInterface } from "../ConstInterface";
6
+ import { CommandFactory } from "../commands/ClientToServer/CommandFactory";
7
+ import { RemoteCommandsProcessor } from "../remote/RemoteCommandsProcessor";
8
+ import { Environment } from "./Environment";
9
+ import { LastFocusedManager } from "../rt/LastFocusedManager";
10
+ import { AccessHelper } from "../AccessHelper";
11
+ import { MirrorString } from "./MirrorString";
12
+ export class EnvParamsTable extends MirrorPrmMap {
13
+ static Instance = new EnvParamsTable();
14
+ constructor() {
15
+ super(MirrorString);
16
+ this.mirroredID = ConstInterface.MG_TAG_ENV_PARAM;
17
+ }
18
+ get(s) {
19
+ let valName = null;
20
+ let ret = null;
21
+ if (s.charAt(0) !== '[') {
22
+ valName = s;
23
+ s = NString.Insert(s, 0, ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS);
24
+ }
25
+ else if (s.startsWith(ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS))
26
+ valName = s.substr(ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS.length);
27
+ if (!s.startsWith(ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS))
28
+ s = s.toUpperCase();
29
+ if (valName !== null)
30
+ ret = this.getFromEnvironment(valName);
31
+ if (ret !== null)
32
+ return ret;
33
+ try {
34
+ let resultObject = super.getvalue(s);
35
+ if (resultObject !== null) {
36
+ ret = resultObject.ToString();
37
+ if (valName !== null) {
38
+ ret = this.getProcessedValue(valName, ret);
39
+ }
40
+ }
41
+ }
42
+ catch (ex_BE) {
43
+ }
44
+ return ret;
45
+ }
46
+ getln(section, number) {
47
+ section = section.toUpperCase().trim();
48
+ let sectionFound = false;
49
+ let keys = this.values.Keys;
50
+ for (let i = 0; i < keys.length; i++) {
51
+ let key = keys[i];
52
+ if (key.startsWith(section)) {
53
+ sectionFound = true;
54
+ if (number > 1)
55
+ number--;
56
+ else
57
+ return key.substr(section.length) + "=" + this.values.get_Item(key);
58
+ }
59
+ else if (sectionFound)
60
+ break;
61
+ }
62
+ return null;
63
+ }
64
+ getFromEnvironment(valName) {
65
+ switch (valName.toLowerCase()) {
66
+ case ConstInterface.MG_ATTR_DECIMAL_SEPARATOR:
67
+ return Environment.Instance.GetDecimal();
68
+ case ConstInterface.MG_ATTR_DATE:
69
+ return DisplayConvertor.Instance.getDateChar().toString();
70
+ case ConstInterface.MG_ATTR_TIME:
71
+ return Environment.Instance.GetTime();
72
+ case ConstInterface.MG_ATTR_OWNER:
73
+ return Environment.Instance.getOwner();
74
+ case ConstInterface.MG_ATTR_DATEMODE:
75
+ return Environment.Instance.GetDateMode(LastFocusedManager.Instance.getCurrTask().getCompIdx());
76
+ case ConstInterface.MG_ATTR_CENTURY:
77
+ return Environment.Instance.GetCentury(LastFocusedManager.Instance.getCurrTask().getCompIdx()).toString();
78
+ case ConstInterface.MG_ATTR_IDLETIME:
79
+ return Environment.Instance.getIdleTime(LastFocusedManager.Instance.getCurrTask().getCompIdx()).toString();
80
+ case ConstInterface.MG_ATTR_UPD_IN_QUERY:
81
+ return Environment.Instance.allowUpdateInQueryMode(LastFocusedManager.Instance.getCurrTask().getCompIdx()).toString();
82
+ case ConstInterface.MG_ATTR_CRE_IN_MODIFY:
83
+ return Environment.Instance.allowCreateInModifyMode(LastFocusedManager.Instance.getCurrTask().getCompIdx()).toString();
84
+ case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_TIMEOUT:
85
+ return Environment.Instance.getContextInactivityTimeout().toString();
86
+ case ConstInterface.MG_ATTR_CONTEXT_UNLOAD_TIMEOUT:
87
+ return Environment.Instance.getContextUnloadTimeout().toString();
88
+ case ConstInterface.MG_ATTR_TERMINAL:
89
+ return Environment.Instance.getTerminal().toString();
90
+ case ConstInterface.MG_ATTR_WEBCLIENT_REINIT_SESSION:
91
+ return Environment.Instance.getWebClientReinitSession();
92
+ }
93
+ return null;
94
+ }
95
+ getProcessedValue(valName, val) {
96
+ switch (valName.toLowerCase()) {
97
+ case ConstInterface.MG_ATTR_HTTP_TIMEOUT:
98
+ case ConstInterface.MG_ATTR_RTF_BUFFER_SIZE:
99
+ case ConstInterface.MG_ATTR_RANGE_POP_TIME:
100
+ case ConstInterface.MG_ATTR_TEMP_POP_TIME:
101
+ case ConstInterface.MG_ATTR_BATCH_PAINT_TIME:
102
+ return NNumber.Parse(val).toString();
103
+ case ConstInterface.MG_ATTR_USE_SIGNED_BROWSER_CLIENT:
104
+ case ConstInterface.MG_ATTR_CLOSE_PRINTED_TABLES_IN_SUBTASKS:
105
+ case ConstInterface.MG_ATTR_GENERIC_TEXT_PRINTING:
106
+ case ConstInterface.MG_ATTR_HIGH_RESOLUTION_PRINT:
107
+ case ConstInterface.MG_ATTR_MERGE_TRIM:
108
+ case ConstInterface.MG_ATTR_ORIGINAL_IMAGE_LOAD:
109
+ case ConstInterface.MG_ATTR_PRINT_DATA_TRIM:
110
+ case ConstInterface.MG_ATTR_PSCRIPT_PRINT_NT:
111
+ case ConstInterface.MG_ATTR_SPECIAL_CONV_ADD_SLASH:
112
+ case ConstInterface.MG_ATTR_SPECIAL_FULL_EXPAND_PRINT:
113
+ case ConstInterface.MG_ATTR_SPECIAL_FULL_TEXT:
114
+ case ConstInterface.MG_ATTR_SPECIAL_LAST_LINE_PRINT:
115
+ case ConstInterface.MG_ATTR_SPECIAL_PRINTER_OEM:
116
+ case ConstInterface.MG_ATTR_EMBED_FONTS:
117
+ case ConstInterface.MG_ATTR_CENTER_SCREEN_IN_ONLINE:
118
+ case ConstInterface.MG_ATTR_REPOSITION_AFTER_MODIFY:
119
+ case ConstInterface.MG_ATTR_ISAM_TRANSACTION:
120
+ return (val[0] === 'Y' || val[0] === '1') ? "Y" : "N";
121
+ case ConstInterface.MG_ATTR_TIME_SEPARATOR:
122
+ case ConstInterface.MG_ATTR_IOTIMING:
123
+ case ConstInterface.MG_ATTR_THOUSAND_SEPARATOR:
124
+ return val[0].toString();
125
+ default:
126
+ return val;
127
+ }
128
+ }
129
+ async set(s, updateIni) {
130
+ let allOK = true;
131
+ let sendToServer = false;
132
+ let name, val;
133
+ let i;
134
+ let serverVal = s;
135
+ let offsets = new Array(s.length + 1);
136
+ let offsetsChars = new Array(s.length + 1);
137
+ offsets[0] = 0;
138
+ offsetsChars[0] = 's';
139
+ let nextOffset = 1;
140
+ for (i = 1; i < s.length; i++) {
141
+ if ((s[i] === '=' || s[i] === ',') && s[i - 1] !== '\\') {
142
+ offsets[nextOffset] = i + 1;
143
+ offsetsChars[nextOffset] = s[i];
144
+ nextOffset++;
145
+ }
146
+ if (s[i] === '*') {
147
+ s = NString.Remove(s, i, 1);
148
+ break;
149
+ }
150
+ if (s[i] === '\\') {
151
+ s = NString.Remove(s, i, 1);
152
+ }
153
+ }
154
+ offsets[nextOffset] = s.length + 1;
155
+ offsetsChars[nextOffset] = '\0';
156
+ nextOffset++;
157
+ for (i = 0; i < nextOffset - 1; i++) {
158
+ name = s.substr(offsets[i], offsets[i + 1] - offsets[i] - 1);
159
+ if (s[offsets[i + 1] - 1] === '=') {
160
+ i++;
161
+ let valInit = i;
162
+ let allowedSeparators = this.getAllowedSeparators(name);
163
+ for (let sep = 0; sep < allowedSeparators; sep++) {
164
+ if (offsetsChars[i + 1] === ',')
165
+ i++;
166
+ else
167
+ break;
168
+ }
169
+ val = s.substr(offsets[valInit], offsets[i + 1] - offsets[valInit] - 1);
170
+ }
171
+ else
172
+ val = null;
173
+ if (this.isReservedLogicalName(name)) {
174
+ allOK = false;
175
+ continue;
176
+ }
177
+ if (name[0] !== '[')
178
+ name = NString.Insert(name, 0, ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS);
179
+ if (!name.startsWith(ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS))
180
+ name = name.toUpperCase();
181
+ name = name.trim();
182
+ val = val.trim();
183
+ sendToServer = true;
184
+ if (!NString.IsNullOrEmpty(val) ||
185
+ name.startsWith(ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS)) {
186
+ super.setValue(name, new MirrorString(val), !updateIni);
187
+ this.checkSetInEnvironment(name, val);
188
+ }
189
+ else
190
+ super.remove(name);
191
+ }
192
+ if (updateIni && sendToServer) {
193
+ let cmd = CommandFactory.CreateIniputForceWriteCommand(serverVal);
194
+ AccessHelper.mgDataTable.getMGData(0).CmdsToServer.Add(cmd);
195
+ await RemoteCommandsProcessor.GetInstance().Execute(CommandsProcessorBase_SendingInstruction.ONLY_COMMANDS);
196
+ }
197
+ return allOK;
198
+ }
199
+ isReservedLogicalName(name) {
200
+ if (!name.startsWith("[")) {
201
+ name = NString.Insert(name, 0, ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS);
202
+ if (this.values.ContainsKey(name) && this.values.get_Item(name).isReserved())
203
+ return true;
204
+ }
205
+ return false;
206
+ }
207
+ getAllowedSeparators(name) {
208
+ if (name.charAt(0) !== '[')
209
+ return 0;
210
+ let section = name.substr(1, name.indexOf(']') - 1);
211
+ let param = name.substr(name.indexOf(']') + 1);
212
+ switch (section.toUpperCase()) {
213
+ case ConstInterface.INI_SECTION_MAGIC_ENV:
214
+ if (param.toUpperCase() === ConstInterface.MG_ATTR_LANGUAGE.toUpperCase())
215
+ return 999;
216
+ else
217
+ return 0;
218
+ case ConstInterface.INI_SECTION_MAGIC_SYSTEMS:
219
+ return 8;
220
+ case ConstInterface.INI_SECTION_MAGIC_DBMS:
221
+ return 13;
222
+ case ConstInterface.INI_SECTION_MAGIC_SERVERS:
223
+ return 6;
224
+ case ConstInterface.INI_SECTION_MAGIC_COMMS:
225
+ return 2;
226
+ case ConstInterface.INI_SECTION_MAGIC_PRINTERS:
227
+ return 3;
228
+ case ConstInterface.INI_SECTION_MAGIC_SYSTEM_MENU:
229
+ return 11;
230
+ case ConstInterface.INI_SECTION_MAGIC_DATABASES:
231
+ return 21;
232
+ case ConstInterface.INI_SECTION_MAGIC_LANGUAGE:
233
+ return 1;
234
+ case ConstInterface.INI_SECTION_MAGIC_SERVICES:
235
+ return 8;
236
+ case ConstInterface.INI_SECTION_TOOLS_MENU:
237
+ return 7;
238
+ default:
239
+ return 0;
240
+ }
241
+ }
242
+ checkSetInEnvironment(name, val) {
243
+ if (name.startsWith(ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS)) {
244
+ name = name.substr(ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS.length);
245
+ switch (name.toLowerCase()) {
246
+ case ConstInterface.MG_ATTR_DECIMAL_SEPARATOR:
247
+ Environment.Instance.setDecimalSeparator(val[0]);
248
+ break;
249
+ case ConstInterface.MG_ATTR_DATE:
250
+ DisplayConvertor.Instance.setDateChar(val[0].charCodeAt(0));
251
+ break;
252
+ case ConstInterface.MG_ATTR_TIME:
253
+ Environment.Instance.setTimeSeparator(val[0]);
254
+ break;
255
+ case ConstInterface.MG_ATTR_OWNER:
256
+ Environment.Instance.setOwner(val);
257
+ break;
258
+ case ConstInterface.MG_ATTR_DATEMODE:
259
+ Environment.Instance.setDateMode(LastFocusedManager.Instance.getCurrTask().getCompIdx(), val[0]);
260
+ break;
261
+ case ConstInterface.MG_ATTR_CENTURY:
262
+ Environment.Instance.setCentury(LastFocusedManager.Instance.getCurrTask().getCompIdx(), NNumber.Parse(val));
263
+ break;
264
+ case ConstInterface.MG_ATTR_IDLETIME:
265
+ Environment.Instance.setIdleTime(LastFocusedManager.Instance.getCurrTask().getCompIdx(), NNumber.Parse(val));
266
+ break;
267
+ case ConstInterface.MG_ATTR_UPD_IN_QUERY_LOWER:
268
+ Environment.Instance.setAllowUpdateInQueryMode(LastFocusedManager.Instance.getCurrTask().getCompIdx(), val[0] === '1');
269
+ break;
270
+ case ConstInterface.MG_ATTR_CRE_IN_MODIFY_LOWER:
271
+ Environment.Instance.setAllowCreateInModifyMode(LastFocusedManager.Instance.getCurrTask().getCompIdx(), val[0] === '1');
272
+ break;
273
+ case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_TIMEOUT_LOWER:
274
+ Environment.Instance.setContextInactivityTimeout(NNumber.Parse(val));
275
+ break;
276
+ case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_WARNING_TIME_LOWER:
277
+ Environment.Instance.setContextInactivityWarningTime(NNumber.Parse(val));
278
+ break;
279
+ case ConstInterface.MG_ATTR_CONTEXT_UNLOAD_TIMEOUT_LOWER:
280
+ Environment.Instance.setContextUnloadTimeout(NNumber.Parse(val));
281
+ break;
282
+ case ConstInterface.MG_ATTR_TERMINAL:
283
+ Environment.Instance.setTerminal(NNumber.Parse(val));
284
+ break;
285
+ }
286
+ }
287
+ }
288
+ translate(logicalName) {
289
+ let stringBuilder = new StringBuilder(logicalName);
290
+ this.log(stringBuilder);
291
+ return stringBuilder.ToString();
292
+ }
293
+ log(stringBldr) {
294
+ let finished;
295
+ do {
296
+ let offset = 0;
297
+ finished = true;
298
+ while (offset < stringBldr.Length && stringBldr.get_Item(offset) > '\0') {
299
+ if (stringBldr.get_Item(offset) === '%') {
300
+ let oldLength = stringBldr.Length;
301
+ offset = this.log_trans(stringBldr, offset);
302
+ if (oldLength !== stringBldr.Length)
303
+ finished = false;
304
+ }
305
+ else
306
+ offset = offset + 1;
307
+ }
308
+ } while (!finished);
309
+ }
310
+ log_trans(stringBldr, offset) {
311
+ let ignoreTrans = false;
312
+ let startSym = offset;
313
+ let endSym = offset + 1;
314
+ while (endSym < stringBldr.Length) {
315
+ if (stringBldr.get_Item(endSym) === '%')
316
+ break;
317
+ endSym++;
318
+ }
319
+ if (endSym >= stringBldr.Length) {
320
+ offset = endSym;
321
+ ignoreTrans = true;
322
+ }
323
+ else if (stringBldr.get_Item(endSym) !== '%')
324
+ offset++;
325
+ if (!ignoreTrans) {
326
+ let sym = ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS +
327
+ stringBldr.ToString(startSym + 1, endSym - startSym - 1);
328
+ let trans = this.get(sym);
329
+ if (trans === null) {
330
+ stringBldr.Replace(stringBldr.ToString(offset, endSym + 1 - offset), "", offset, endSym + 1 - offset);
331
+ offset += 1;
332
+ }
333
+ else {
334
+ stringBldr.Replace(stringBldr.ToString(startSym, endSym + 1 - startSym), trans, startSym, endSym + 1 - startSym);
335
+ }
336
+ }
337
+ return offset;
338
+ }
339
+ }
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW52VmFyaWFibGVzVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2Vudi9FbnZWYXJpYWJsZXNUYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLNUMsTUFBTSxPQUFPLGNBQWUsU0FBUSxZQUEwQjtJQUU1RCxNQUFNLENBQUMsUUFBUSxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDO0lBSXZEO1FBQ0UsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDO0lBQ3BELENBQUM7SUFLRCxHQUFHLENBQUMsQ0FBUztRQUNYLElBQUksT0FBTyxHQUFXLElBQUksQ0FBQztRQUMzQixJQUFJLEdBQUcsR0FB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RSxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RyxNQUFNLElBQUksQ0FBQyxDQUFDO2FBQ2I7aUJBQ0k7Z0JBQ0gsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQ3RGLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7YUFDMUI7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb259IGZyb20gXCIuLi9Db21tYW5kc1Byb2Nlc3NvckJhc2VcIjtcclxuaW1wb3J0IHtNaXJyb3JQcm1NYXB9IGZyb20gXCIuLi91dGlsL1BybU1hcFwiO1xyXG5pbXBvcnQge05OdW1iZXIsIE5TdHJpbmcsIFN0cmluZ0J1aWxkZXJ9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5cclxuaW1wb3J0IHtEaXNwbGF5Q29udmVydG9yfSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7SUNsaWVudENvbW1hbmR9IGZyb20gXCIuLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZFwiO1xyXG5pbXBvcnQge0NvbW1hbmRGYWN0b3J5fSBmcm9tIFwiLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvQ29tbWFuZEZhY3RvcnlcIjtcclxuaW1wb3J0IHtSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvcn0gZnJvbSBcIi4uL3JlbW90ZS9SZW1vdGVDb21tYW5kc1Byb2Nlc3NvclwiO1xyXG5pbXBvcnQge0Vudmlyb25tZW50fSBmcm9tIFwiLi9FbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQge0xhc3RGb2N1c2VkTWFuYWdlcn0gZnJvbSBcIi4uL3J0L0xhc3RGb2N1c2VkTWFuYWdlclwiO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5pbXBvcnQge01pcnJvclN0cmluZ30gZnJvbSBcIi4vTWlycm9yU3RyaW5nXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIG1hbmFnZXIgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFbnZQYXJhbXNUYWJsZSBleHRlbmRzIE1pcnJvclBybU1hcDxNaXJyb3JTdHJpbmc+IHtcclxuXHJcbiAgc3RhdGljIEluc3RhbmNlOiBFbnZQYXJhbXNUYWJsZSA9IG5ldyBFbnZQYXJhbXNUYWJsZSgpO1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoTWlycm9yU3RyaW5nKTtcclxuICAgIHRoaXMubWlycm9yZWRJRCA9IENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU07XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkIGZyb20gdGhlIGVudmlyb25tZW50LlxyXG4gIC8vIFZlcmlmeSB0aGUgc2VjdGlvbiBuYW1lIGV4aXN0cyBiZWZvcmUgZ2V0dGluZyB0aGUgdmFsdWUgZnJvbSB0aGUgYmFzZSBjbGFzcy5cclxuICAvLyBSZXR1cm4gbnVsbCBpZiB0aGUgdmFsdWUgZG9lcyBub3QgZXhpc3QuXHJcbiAgZ2V0KHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGxldCByZXQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgLy8gSWYgc2VjdGlvbiBpcyBub3QgZGVmaW5lZCwgYWRkIHRoZSBkZWZhdWx0IHNlY3Rpb25cclxuICAgIGlmIChzLmNoYXJBdCgwKSAhPT0gJ1snKSB7XHJcbiAgICAgIHZhbE5hbWUgPSBzO1xyXG4gICAgICBzID0gTlN0cmluZy5JbnNlcnQocywgMCwgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfRU5WX0JSQUNLRVRTKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB3ZSBkbyBoYXZlIHRoZSBzZWN0aW9uIG5hbWUsYWFuZCBpdCBpcyBNQUdJQ19FTlYsIHdlIG5lZWQgdGhlIHZhcmlhYmxlJ3MgbmFtZVxyXG4gICAgZWxzZSBpZiAocy5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUykpXHJcbiAgICAgIHZhbE5hbWUgPSBzLnN1YnN0cihDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMubGVuZ3RoKTtcclxuXHJcbiAgICAvLyBpZiBpdCBpcyBub3QgYSBsb2dpY2FsIG5hbWUsIGl0IGlzIGNhc2UgaW5zZW5zaXRpdmVcclxuICAgIGlmICghcy5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX0xPR0lDQUxfTkFNRVNfQlJBQ0tFVFMpKVxyXG4gICAgICBzID0gcy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgLy8gY2hlY2sgdGhlIHZhbHVlJ3MgbmFtZSB0byBzZWUgaWYgd2UgbmVlZCB0byBnZXQgaXQgZnJvbSB0aGUgcnVudGltZSBlbnZpcm9ubWVudFxyXG4gICAgaWYgKHZhbE5hbWUgIT09IG51bGwpXHJcbiAgICAgIHJldCA9IHRoaXMuZ2V0RnJvbUVudmlyb25tZW50KHZhbE5hbWUpO1xyXG5cclxuICAgIGlmIChyZXQgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiByZXQ7XHJcblxyXG4gICAgLy8gdmFsdWUgbm90IGluIHJ1bnRpbWUgZW52aXJvbm1lbnQgLSBnZXQgaXQgZnJvbSB0aGUgdGFibGVcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCByZXN1bHRPYmplY3Q6IE1pcnJvclN0cmluZyA9IHN1cGVyLmdldHZhbHVlKHMpO1xyXG5cclxuICAgICAgaWYgKHJlc3VsdE9iamVjdCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldCA9IHJlc3VsdE9iamVjdC5Ub1N0cmluZygpO1xyXG5cclxuICAgICAgICAvLyBJZiBpdCBtYXkgYmUgYSB2YXJpYWJsZSB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNlcnZlcidzIGNvbnRleHQvY29tcG9uZW50LCBwcm9jZXNzIGl0XHJcbiAgICAgICAgaWYgKHZhbE5hbWUgIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldCA9IHRoaXMuZ2V0UHJvY2Vzc2VkVmFsdWUodmFsTmFtZSwgcmV0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleF9CRSkge1xyXG4gICAgICAvLyBpZiBzdHJpbmcgbm90IGluIGRpY3Rpb25hcnlcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBwbGFjZSBcIm51bWJlclwiIGluIHNlY3Rpb24gXCJzZWN0aW9uXCJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2VjdGlvblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1iZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0bG4oc2VjdGlvbjogc3RyaW5nLCBudW1iZXI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBzZWN0aW9uID0gc2VjdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTtcclxuICAgIGxldCBzZWN0aW9uRm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBsZXQga2V5czogc3RyaW5nW10gPSB0aGlzLnZhbHVlcy5LZXlzO1xyXG5cclxuICAgIC8vIExvb3Agb3ZlciBrZXlzLCBmaW5kIHRob3NlIHRoYXQgc3RhcnQgd2l0aCBvdXIgc2VjdGlvbiBuYW1lXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGtleTogc3RyaW5nID0ga2V5c1tpXTtcclxuXHJcbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChzZWN0aW9uKSkge1xyXG4gICAgICAgIHNlY3Rpb25Gb3VuZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChudW1iZXIgPiAxKVxyXG4gICAgICAgICAgbnVtYmVyLS07XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIC8vIGZvdW5kIHdoYXQgd2UgbmVlZGVkLCBidWlsZCB0aGUgXCJuYW1lPXZhbHVlXCIgc3RyaW5nXHJcbiAgICAgICAgICByZXR1cm4ga2V5LnN1YnN0cihzZWN0aW9uLmxlbmd0aCkgKyBcIj1cIiArIHRoaXMudmFsdWVzLmdldF9JdGVtKGtleSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgd2UgZ290IHRvIHRoZSByaWdodCBzZWN0aW9uIGFuZCBwYXNzZWQgaXQsIG5vIG5lZWQgdG8gY29udGludWUgbG9va2luZ1xyXG4gICAgICBlbHNlIGlmIChzZWN0aW9uRm91bmQpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJ5IGFuZCBnZXQgdGhlIGVudiB2YXJpYWJsZSdzIHZhbHVlIGZyb20gdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldEZyb21FbnZpcm9ubWVudCh2YWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh2YWxOYW1lLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFQ0lNQUxfU0VQQVJBVE9SOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREZWNpbWFsKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFOlxyXG4gICAgICAgIHJldHVybiBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldERhdGVDaGFyKCkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJTUU6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLkdldFRpbWUoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09XTkVSOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRPd25lcigpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREFURU1PREU6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLkdldERhdGVNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5UVVJZOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXRDZW50dXJ5KExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lETEVUSU1FOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRJZGxlVGltZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VUERfSU5fUVVFUlk6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmFsbG93VXBkYXRlSW5RdWVyeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ1JFX0lOX01PRElGWTpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVQ6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmdldENvbnRleHRJbmFjdGl2aXR5VGltZW91dCgpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX1VOTE9BRF9USU1FT1VUOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRDb250ZXh0VW5sb2FkVGltZW91dCgpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URVJNSU5BTDpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0VGVybWluYWwoKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfV0VCQ0xJRU5UX1JFSU5JVF9TRVNTSU9OOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRXZWJDbGllbnRSZWluaXRTZXNzaW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUaGUgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSdzIHZhbHVlLCB0byByZXR1cm4gaXQgaW4gdGhlIHJpZ2h0XHJcbiAgLy8vICAgZm9ybWF0IGZvciBjb250ZXh0L2NvbXBvbmVudCB2YWx1ZXMgdGhhdCBhcmUgbm90IHVzZWQgYnkgdGhlIGNsaWVudC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldFByb2Nlc3NlZFZhbHVlKHZhbE5hbWU6IHN0cmluZywgdmFsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIC8vIFRoZSBsaXN0IG9mIHZhcmlhYmxlcyBpcyBzaW1pbGFyIHRvIHRoYXQgaW4gdGhlIHNlcnZlciwgaW4gZW52X2NvbXAuY3BwLCBFTlY6OmVudl92YWxfdG9fc3RyXHJcbiAgICBzd2l0Y2ggKHZhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xyXG5cclxuICAgICAgLy8gdmFyaWFibGUgaXMgaW50ZWdlclxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSFRUUF9USU1FT1VUOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUlRGX0JVRkZFUl9TSVpFOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUkFOR0VfUE9QX1RJTUU6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URU1QX1BPUF9USU1FOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQkFUQ0hfUEFJTlRfVElNRTpcclxuICAgICAgICByZXR1cm4gTk51bWJlci5QYXJzZSh2YWwpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAvLyB2YXJpYWJsZSBpcyBib29sZWFuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VfU0lHTkVEX0JST1dTRVJfQ0xJRU5UOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0xPU0VfUFJJTlRFRF9UQUJMRVNfSU5fU1VCVEFTS1M6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9HRU5FUklDX1RFWFRfUFJJTlRJTkc6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ISUdIX1JFU09MVVRJT05fUFJJTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9NRVJHRV9UUklNOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfT1JJR0lOQUxfSU1BR0VfTE9BRDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BSSU5UX0RBVEFfVFJJTTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BTQ1JJUFRfUFJJTlRfTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0NPTlZfQUREX1NMQVNIOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9GVUxMX0VYUEFORF9QUklOVDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfRlVMTF9URVhUOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9MQVNUX0xJTkVfUFJJTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1BSSU5URVJfT0VNOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU1CRURfRk9OVFM6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5URVJfU0NSRUVOX0lOX09OTElORTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFUE9TSVRJT05fQUZURVJfTU9ESUZZOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSVNBTV9UUkFOU0FDVElPTjpcclxuICAgICAgICByZXR1cm4gKHZhbFswXSA9PT0gJ1knIHx8IHZhbFswXSA9PT0gJzEnKSA/IFwiWVwiIDogXCJOXCI7XHJcblxyXG4gICAgICAvLyB2YXJpYWJsZSBpcyBhIGNoYXJhY3RlclxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElNRV9TRVBBUkFUT1I6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JT1RJTUlORzpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RIT1VTQU5EX1NFUEFSQVRPUjpcclxuICAgICAgICByZXR1cm4gdmFsWzBdLnRvU3RyaW5nKCk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIHZhcmlhYmxlOlxyXG4gIC8vLyAgIDEuIHBhcnNlIHRoZSBzdHJpbmdcclxuICAvLy8gICAyLiBjcmVhdGUgdGhlIHBhcmFtL3ZhbHVlIGNvdXBsZXNcclxuICAvLy8gICAzLiBmb3IgZWFjaCBjb3VwbGU6XHJcbiAgLy8vICAgM2EuIHZlcmlmeSB0aGUgc2VjdGlvbiBuYW1lIGV4aXN0c1xyXG4gIC8vLyAgIDNiLiB2ZXJpZnkgdGhlIHZhcmlhYmxlIGlzIG5vdCB1bm1vZGlmaWVhYmxlXHJcbiAgLy8vICAgM2MuIHNldCB0aGUgdmFyaWFibGUgaW4gdGhlIGJhc2UgY2xhc3NcclxuICAvLy8gICAzZC4gY2hlY2sgYW5kIGNoYW5nZSB0aGUgZW52aXJvbm1lbnQgZGF0YSBpZiBuZWVkZWRcclxuICAvLy8gICA0LiBJZiByZXF1aXJlZCwgc2VuZCB0aGUgZGF0YSB0byB0aGUgc2VydmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlSW5pXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBhc3luYyBzZXQoczogc3RyaW5nLCB1cGRhdGVJbmk6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBhbGxPSzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgc2VuZFRvU2VydmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgbmFtZTogc3RyaW5nLCB2YWw7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHNlcnZlclZhbDogc3RyaW5nID0gcztcclxuXHJcbiAgICAvLyBTdHJpbmcgcGFyc2luZzogZXZlcnkgbnVtYmVyIGluICdvZmZzZXRzJyBzaG93cyB0aGUgb2Zmc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBuYW1lIG9yIHZhbHVlXHJcbiAgICAvLyAxc3Qgb2Zmc2V0IGlzIGFsd2F5cyAwXHJcbiAgICBsZXQgb2Zmc2V0czogbnVtYmVyW10gPSBuZXcgQXJyYXkocy5sZW5ndGggKyAxKTtcclxuICAgIGxldCBvZmZzZXRzQ2hhcnM6IHN0cmluZ1tdID0gbmV3IEFycmF5KHMubGVuZ3RoICsgMSk7XHJcblxyXG4gICAgb2Zmc2V0c1swXSA9IDA7XHJcbiAgICBvZmZzZXRzQ2hhcnNbMF0gPSAncyc7XHJcbiAgICBsZXQgbmV4dE9mZnNldDogbnVtYmVyID0gMTtcclxuXHJcbiAgICAvLyBMb29wIG92ZXIgc3RyaW5nLCBmaW5kIGFsbCB0aGUgJz0nLCAnLCcgYW5kICcqJyB0aGF0IGFyZSBub3QgcHJlY2VlZGVkIGJ5IGEgJ1xcJy5cclxuICAgIGZvciAoaSA9IDE7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICgoc1tpXSA9PT0gJz0nIHx8IHNbaV0gPT09ICcsJykgJiYgc1tpIC0gMV0gIT09ICdcXFxcJykge1xyXG4gICAgICAgIG9mZnNldHNbbmV4dE9mZnNldF0gPSBpICsgMTtcclxuICAgICAgICBvZmZzZXRzQ2hhcnNbbmV4dE9mZnNldF0gPSBzW2ldO1xyXG4gICAgICAgIG5leHRPZmZzZXQrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc1tpXSA9PT0gJyonKSB7XHJcbiAgICAgICAgcyA9IE5TdHJpbmcuUmVtb3ZlKHMsIGksIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzW2ldID09PSAnXFxcXCcpIHtcclxuICAgICAgICBzID0gTlN0cmluZy5SZW1vdmUocywgaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgdGhlIGZpbmFsIG9mZnNldCBmb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nXHJcbiAgICBvZmZzZXRzW25leHRPZmZzZXRdID0gcy5sZW5ndGggKyAxO1xyXG4gICAgb2Zmc2V0c0NoYXJzW25leHRPZmZzZXRdID0gJ1xcMCc7XHJcbiAgICBuZXh0T2Zmc2V0Kys7XHJcblxyXG4gICAgLy8gZ28gb3ZlciB0aGUgY2FsY3VsYXRlZCBvZmZzZXRzLiB0aGUgbGFzdCBvbmUgaXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzbyBpdCBpcyBpZ25vcmVkXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dE9mZnNldCAtIDE7IGkrKykge1xyXG4gICAgICAvLyBnZXQgdGhlIHZhcmlhYmxlIG5hbWVcclxuICAgICAgbmFtZSA9IHMuc3Vic3RyKG9mZnNldHNbaV0sIG9mZnNldHNbaSArIDFdIC0gb2Zmc2V0c1tpXSAtIDEpO1xyXG5cclxuICAgICAgLy8gaXMgdGhlcmUgYSB2YWx1ZSwgb3IgaXMgaXQgYW4gZW1wdHkgdmFyaWFibGU/XHJcbiAgICAgIGlmIChzW29mZnNldHNbaSArIDFdIC0gMV0gPT09ICc9Jykge1xyXG4gICAgICAgIGkrKztcclxuICAgICAgICBsZXQgdmFsSW5pdDogbnVtYmVyID0gaTtcclxuICAgICAgICBsZXQgYWxsb3dlZFNlcGFyYXRvcnM6IG51bWJlciA9IHRoaXMuZ2V0QWxsb3dlZFNlcGFyYXRvcnMobmFtZSk7XHJcbiAgICAgICAgZm9yIChsZXQgc2VwOiBudW1iZXIgPSAwOyBzZXAgPCBhbGxvd2VkU2VwYXJhdG9yczsgc2VwKyspIHtcclxuICAgICAgICAgIGlmIChvZmZzZXRzQ2hhcnNbaSArIDFdID09PSAnLCcpXHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdldCB0aGUgdmFsdWVcclxuICAgICAgICB2YWwgPSBzLnN1YnN0cihvZmZzZXRzW3ZhbEluaXRdLCBvZmZzZXRzW2kgKyAxXSAtIG9mZnNldHNbdmFsSW5pdF0gLSAxKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdmFsID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIGlzIGl0IGEgcmVzZXJ2ZWQgdmFyaWFibGU/XHJcbiAgICAgIGlmICh0aGlzLmlzUmVzZXJ2ZWRMb2dpY2FsTmFtZShuYW1lKSkge1xyXG4gICAgICAgIGFsbE9LID0gZmFsc2U7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gc2VjdGlvbiBuYW1lLCBhZGQgdGhlIGRlZmF1bHQgb25lXHJcbiAgICAgIGlmIChuYW1lWzBdICE9PSAnWycpXHJcbiAgICAgICAgbmFtZSA9IE5TdHJpbmcuSW5zZXJ0KG5hbWUsIDAsIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUyk7XHJcblxyXG4gICAgICAvLyBJZiBpdCdzIG5vdCBhIGxvZ2ljYWwgbmFtZSwgaXQgaXMgY2FzZSBpbnNlbnNpdGl2ZVxyXG4gICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9MT0dJQ0FMX05BTUVTX0JSQUNLRVRTKSlcclxuICAgICAgICBuYW1lID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBuYW1lID0gbmFtZS50cmltKCk7XHJcbiAgICAgIHZhbCA9IHZhbC50cmltKCk7XHJcbiAgICAgIHNlbmRUb1NlcnZlciA9IHRydWU7XHJcbiAgICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHZhbCkgfHxcclxuICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUykpIHtcclxuICAgICAgICAvLyBJZiB3ZSdyZSBnb2luZyB0byBzZW5kIGl0IHRvIHRoZSBzZXJ2ZXIgTk9XLCB3ZSBkb24ndCBuZWVkIGl0IGluIHRoZSBjaGFuZ2VzIGxpc3RcclxuICAgICAgICBzdXBlci5zZXRWYWx1ZShuYW1lLCBuZXcgTWlycm9yU3RyaW5nKHZhbCksICF1cGRhdGVJbmkpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tTZXRJbkVudmlyb25tZW50KG5hbWUsIHZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHN1cGVyLnJlbW92ZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBzaG91bGQgdXBkYXRlIHRoZSBpbmkgZmlsZSwgYW5kIHdlIGhhdmUgbW9kaWZpZWQgdmFyaWFibGVzLCB1cGRhdGUgdGhlIHNlcnZlci5cclxuICAgIGlmICh1cGRhdGVJbmkgJiYgc2VuZFRvU2VydmVyKSB7XHJcbiAgICAgIGxldCBjbWQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlSW5pcHV0Rm9yY2VXcml0ZUNvbW1hbmQoc2VydmVyVmFsKTtcclxuICAgICAgQWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLmdldE1HRGF0YSgwKS5DbWRzVG9TZXJ2ZXIuQWRkKGNtZCk7XHJcblxyXG4gICAgICAvLyBleGVjdXRlIGNsaWVudCB0byBzZXJ2ZXIgY29tbWFuZHNcclxuICAgICAgYXdhaXQgUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuR2V0SW5zdGFuY2UoKS5FeGVjdXRlKENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24uT05MWV9DT01NQU5EUyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWxsT0s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2tzIGlmIHRoZSB2YXJpYWJsZSBpcyBhIHJlc2VydmVkIGxvZ2ljYWwgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+IGVudiB2YXJpYWJsZSBuYW1lIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIGl0IGlzIHJlc2VydmVkIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGlzUmVzZXJ2ZWRMb2dpY2FsTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcbiAgICAvLyBSZXNlcnZlZCBsb2dpY2FsIG5hbWVzIG1heSBiZSBhY2Nlc3NlZCB3aXRob3V0IGEgc2VjdGlvbiBuYW1lLCBidXQgYXJlIHN0b3JlZCBhcyBsb2dpY2FsIG5hbWVzLFxyXG4gICAgLy8gc28gaWYgd2UgZG9uJ3QgaGF2ZSBhIHNlY3Rpb24gbmFtZSwgaW5zZXJ0IHRoZSBsb2dpY2FsIHNlY3Rpb24gYW5kIHNlYXJjaCB0aGUgdGFibGVcclxuICAgIGlmICghbmFtZS5zdGFydHNXaXRoKFwiW1wiKSkge1xyXG4gICAgICBuYW1lID0gTlN0cmluZy5JbnNlcnQobmFtZSwgMCwgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUyk7XHJcbiAgICAgIGlmICh0aGlzLnZhbHVlcy5Db250YWluc0tleShuYW1lKSAmJiB0aGlzLnZhbHVlcy5nZXRfSXRlbShuYW1lKS5pc1Jlc2VydmVkKCkpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlcGVyYXRvcnMgYWxsb3dlZCBmb3IgZW50cmllcyBvZiB0aGlzIHNlY3Rpb24uIG51bWJlciBhcmUgYmFzZWQgb25cclxuICAvLy8gICBkYXRhIGluIGVudl9rZXJuLmNwcDogZW52X2RlZl9wYXJzZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0QWxsb3dlZFNlcGFyYXRvcnMobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmIChuYW1lLmNoYXJBdCgwKSAhPT0gJ1snKVxyXG4gICAgICByZXR1cm4gMDtcclxuXHJcbiAgICBsZXQgc2VjdGlvbjogc3RyaW5nID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5pbmRleE9mKCddJykgLyonXScqLyAtIDEpO1xyXG4gICAgbGV0IHBhcmFtOiBzdHJpbmcgPSBuYW1lLnN1YnN0cihuYW1lLmluZGV4T2YoJ10nKSAvKiddJyovICsgMSk7XHJcblxyXG4gICAgc3dpdGNoIChzZWN0aW9uLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlY6XHJcbiAgICAgICAgaWYgKHBhcmFtLnRvVXBwZXJDYXNlKCkgPT09IENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTEFOR1VBR0UudG9VcHBlckNhc2UoKSlcclxuICAgICAgICAgIHJldHVybiA5OTk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfU1lTVEVNUzpcclxuICAgICAgICByZXR1cm4gODtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19EQk1TOlxyXG4gICAgICAgIHJldHVybiAxMztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19TRVJWRVJTOlxyXG4gICAgICAgIHJldHVybiA2O1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0NPTU1TOlxyXG4gICAgICAgIHJldHVybiAyO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1BSSU5URVJTOlxyXG4gICAgICAgIHJldHVybiAzO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1NZU1RFTV9NRU5VOlxyXG4gICAgICAgIHJldHVybiAxMTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19EQVRBQkFTRVM6XHJcbiAgICAgICAgcmV0dXJuIDIxO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0xBTkdVQUdFOlxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1NFUlZJQ0VTOlxyXG4gICAgICAgIHJldHVybiA4O1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX1RPT0xTX01FTlU6XHJcbiAgICAgICAgcmV0dXJuIDc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2sgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGNoYW5nZSBhZmZlY3RzIHRoZSBlbnZpcm9ubWVudCB2YWx1ZXMsXHJcbiAgLy8vICAgYW5kIGNoYW5nZSB0aGUgZW52aXJvbm1lbnQgZGF0YSBhY2NvcmRpbmdseVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjaGVja1NldEluRW52aXJvbm1lbnQobmFtZTogc3RyaW5nLCB2YWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKG5hbWUuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMpKSB7XHJcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cihDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMubGVuZ3RoKTtcclxuXHJcbiAgICAgIHN3aXRjaCAobmFtZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFQ0lNQUxfU0VQQVJBVE9SOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0RGVjaW1hbFNlcGFyYXRvcih2YWxbMF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RBVEU6XHJcbiAgICAgICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLnNldERhdGVDaGFyKHZhbFswXS5jaGFyQ29kZUF0KDApKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USU1FOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0VGltZVNlcGFyYXRvcih2YWxbMF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09XTkVSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0T3duZXIodmFsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFTU9ERTpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldERhdGVNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSwgdmFsWzBdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DRU5UVVJZOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0Q2VudHVyeShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksIE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSURMRVRJTUU6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRJZGxlVGltZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksIE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVBEX0lOX1FVRVJZX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0QWxsb3dVcGRhdGVJblF1ZXJ5TW9kZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksXHJcbiAgICAgICAgICAgIHZhbFswXSA9PT0gJzEnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DUkVfSU5fTU9ESUZZX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0QWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpLFxyXG4gICAgICAgICAgICB2YWxbMF0gPT09ICcxJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVRfTE9XRVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQoTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX0lOQUNUSVZJVFlfV0FSTklOR19USU1FX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0Q29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZShOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfVU5MT0FEX1RJTUVPVVRfTE9XRVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRDb250ZXh0VW5sb2FkVGltZW91dChOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RFUk1JTkFMOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0VGVybWluYWwoTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdHJhbnNsYXRlIGxvZ2ljYWwgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj5pbmRleCBvZiB0aGUgbG9naWNhbCBuYW1lPC9wYXJhbT5cclxuICB0cmFuc2xhdGUobG9naWNhbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGxvZ2ljYWxOYW1lKTtcclxuICAgIHRoaXMubG9nKHN0cmluZ0J1aWxkZXIpO1xyXG4gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJpbmdCbGRyXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGxvZyhzdHJpbmdCbGRyOiBTdHJpbmdCdWlsZGVyKTogdm9pZCB7XHJcbiAgICBsZXQgZmluaXNoZWQ6IGJvb2xlYW47XHJcbiAgICBkbyB7XHJcbiAgICAgIGxldCBvZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcclxuICAgICAgd2hpbGUgKG9mZnNldCA8IHN0cmluZ0JsZHIuTGVuZ3RoICYmIHN0cmluZ0JsZHIuZ2V0X0l0ZW0ob2Zmc2V0KSA+ICdcXDAnLyonXHUwMDAwJyovKSB7XHJcblxyXG4gICAgICAgIC8vICckJyB3YXMgZGVmaW5lIHRoZSBsb2dpY2FsIG5hbWUsIG5vdCB1c2VkIGFueSBtb3JlXHJcbiAgICAgICAgaWYgKHN0cmluZ0JsZHIuZ2V0X0l0ZW0ob2Zmc2V0KSA9PT0gJyUnKSB7XHJcbiAgICAgICAgICBsZXQgb2xkTGVuZ3RoOiBudW1iZXIgPSBzdHJpbmdCbGRyLkxlbmd0aDtcclxuICAgICAgICAgIG9mZnNldCA9IHRoaXMubG9nX3RyYW5zKHN0cmluZ0JsZHIsIG9mZnNldCk7XHJcbiAgICAgICAgICBpZiAob2xkTGVuZ3RoICE9PSBzdHJpbmdCbGRyLkxlbmd0aClcclxuICAgICAgICAgICAgZmluaXNoZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2hpbGUgKCFmaW5pc2hlZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+PC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyaW5nQmxkclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvZmZzZXRcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgbG9nX3RyYW5zKHN0cmluZ0JsZHI6IFN0cmluZ0J1aWxkZXIsIG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBpZ25vcmVUcmFuczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHN0YXJ0U3ltOiBudW1iZXIgPSBvZmZzZXQ7XHJcbiAgICBsZXQgZW5kU3ltOiBudW1iZXIgPSBvZmZzZXQgKyAxO1xyXG5cclxuICAgIC8vIGZpbmQgdGhlIGVuZCBvZiB0aGUgc3ltYm9sXHJcbiAgICB3aGlsZSAoZW5kU3ltIDwgc3RyaW5nQmxkci5MZW5ndGgpIHtcclxuICAgICAgaWYgKHN0cmluZ0JsZHIuZ2V0X0l0ZW0oZW5kU3ltKSA9PT0gJyUnKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBlbmRTeW0rKztcclxuICAgIH1cclxuXHJcbiAgICAvLyBhZGQgMSB0byB0aGUgbGVuIHRvIGdldCB0byB0aGUgZW5kIG9mIHRoZSBzeW1ib2wgb3IgaWYgbm8gZW5kIHN5bWJvbCB3YXMgZm91bmQgYWRkXHJcbiAgICBpZiAoZW5kU3ltID49IHN0cmluZ0JsZHIuTGVuZ3RoKSB7XHJcbiAgICAgIG9mZnNldCA9IGVuZFN5bTtcclxuICAgICAgaWdub3JlVHJhbnMgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoc3RyaW5nQmxkci5nZXRfSXRlbShlbmRTeW0pICE9PSAnJScpXHJcbiAgICAgIG9mZnNldCsrO1xyXG5cclxuICAgIGlmICghaWdub3JlVHJhbnMpIHtcclxuICAgICAgbGV0IHN5bTogc3RyaW5nID0gQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUyArXHJcbiAgICAgICAgc3RyaW5nQmxkci5Ub1N0cmluZyhzdGFydFN5bSArIDEsIGVuZFN5bSAtIHN0YXJ0U3ltIC0gMSk7XHJcbiAgICAgIGxldCB0cmFuczogc3RyaW5nID0gdGhpcy5nZXQoc3ltKTtcclxuXHJcbiAgICAgIC8vIHNldCB0aGUgb2Zmc2V0IHRvIHRoZSBuZXh0IGNoYXIgYWZ0ZXIgdGhlIGVuZGluZyAlIG9mIHRoZSBuYW1lXHJcbiAgICAgIGlmICh0cmFucyA9PT0gbnVsbCkge1xyXG4gICAgICAgIHN0cmluZ0JsZHIuUmVwbGFjZShzdHJpbmdCbGRyLlRvU3RyaW5nKG9mZnNldCwgZW5kU3ltICsgMSAtIG9mZnNldCksIFwiXCIsIG9mZnNldCwgZW5kU3ltICsgMSAtIG9mZnNldCk7XHJcbiAgICAgICAgb2Zmc2V0ICs9IDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3RyaW5nQmxkci5SZXBsYWNlKHN0cmluZ0JsZHIuVG9TdHJpbmcoc3RhcnRTeW0sIGVuZFN5bSArIDEgLSBzdGFydFN5bSksIHRyYW5zLCBzdGFydFN5bSxcclxuICAgICAgICAgIGVuZFN5bSArIDEgLSBzdGFydFN5bSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==