@magic-xpa/engine 4.1100.0-dev4110.20 → 4.1100.0-dev4110.202

Sign up to get free protection for your applications and to get access to all the features.
Files changed (515) 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 +409 -0
  5. package/esm2022/src/CommandsProcessorBase.mjs +56 -0
  6. package/esm2022/src/CommandsProcessorManager.mjs +26 -0
  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 +157 -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/{esm2020 → esm2022}/src/bridge/MagicBridge.mjs +40 -40
  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/{esm2020 → esm2022}/src/commands/ClientToServer/BrowserEscEventCommand.mjs +23 -23
  23. package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommand.mjs +14 -14
  24. package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +60 -0
  25. package/{esm2020 → esm2022}/src/commands/ClientToServer/ColumnSortEventCommand.mjs +26 -26
  26. package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +260 -0
  27. package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +67 -0
  28. package/{esm2020 → esm2022}/src/commands/ClientToServer/ComputeEventCommand.mjs +23 -23
  29. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +20 -20
  30. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +19 -19
  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 +37 -0
  35. package/esm2022/src/commands/ClientToServer/EventCommand.mjs +40 -0
  36. package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +67 -0
  37. package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +22 -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/{esm2020 → esm2022}/src/commands/ClientToServer/IndexChangeEventCommand.mjs +21 -21
  41. package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +23 -0
  42. package/{esm2020 → esm2022}/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +23 -23
  43. package/{esm2020 → esm2022}/src/commands/ClientToServer/QueryCommand.mjs +20 -20
  44. package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +27 -0
  45. package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +27 -0
  46. package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +24 -0
  47. package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +40 -0
  48. package/{esm2020 → esm2022}/src/commands/ClientToServer/SelectProgramCommand.mjs +14 -14
  49. package/{esm2020 → esm2022}/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +9 -9
  50. package/{esm2020 → esm2022}/src/commands/ClientToServer/SubformOpenEventCommand.mjs +21 -21
  51. package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +24 -0
  52. package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +30 -0
  53. package/{esm2020 → esm2022}/src/commands/ClientToServer/UnloadCommand.mjs +14 -14
  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 +1 -1
  59. package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +65 -0
  60. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddLocateCommand.mjs +21 -21
  61. package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
  62. package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
  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/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +132 -0
  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/esm2022/src/data/Key.mjs +88 -0
  86. package/esm2022/src/data/Record.mjs +866 -0
  87. package/{esm2020 → esm2022}/src/data/RecordOutOfDataViewException.mjs +15 -15
  88. package/esm2022/src/data/RecordsTable.mjs +267 -0
  89. package/esm2022/src/data/TaskTransactionManager.mjs +103 -0
  90. package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +74 -0
  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/esm2022/src/env/MirrorString.mjs +65 -0
  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/esm2022/src/exp/GlobalParamsTable.mjs +85 -0
  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 +1181 -0
  117. package/esm2022/src/http/HttpManager.mjs +97 -0
  118. package/esm2022/src/http/client/HttpClientAsync.mjs +68 -0
  119. package/esm2022/src/http/client/HttpClientBase.mjs +132 -0
  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/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
  125. package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
  126. package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
  127. package/esm2022/src/remote/RemoteCommandsProcessor.mjs +882 -0
  128. package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
  129. package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +24 -0
  130. package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +61 -0
  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/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
  135. package/{esm2020 → esm2022}/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +12 -12
  136. package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
  137. package/esm2022/src/remote/ServerError.mjs +40 -0
  138. package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +20 -0
  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/{esm2020 → esm2022}/src/rt/DataviewHeaderBase.mjs +98 -96
  144. package/{esm2020 → esm2022}/src/rt/DataviewHeaderFactory.mjs +6 -6
  145. package/esm2022/src/rt/DataviewHeaders.mjs +53 -0
  146. package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +38 -0
  147. package/esm2022/src/rt/ExecutionStack.mjs +94 -0
  148. package/{esm2020 → esm2022}/src/rt/ExecutionStackEntry.mjs +17 -17
  149. package/esm2022/src/rt/HandlersTable.mjs +96 -0
  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/esm2022/src/rt/RecomputeTable.mjs +63 -0
  158. package/esm2022/src/rt/RemoteDataviewHeader.mjs +108 -0
  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/esm2022/src/tasks/RemoteTaskService.mjs +45 -0
  169. package/esm2022/src/tasks/Task.mjs +2498 -0
  170. package/esm2022/src/tasks/TaskBase.mjs +83 -0
  171. package/esm2022/src/tasks/TaskServiceBase.mjs +25 -0
  172. package/esm2022/src/tasks/TasksTable.mjs +80 -0
  173. package/esm2022/src/tasks/sort/Sort.mjs +5 -0
  174. package/esm2022/src/tasks/sort/SortCollection.mjs +67 -0
  175. package/esm2022/src/util/ConstUtils.mjs +14 -0
  176. package/esm2022/src/util/FlowMonitorQueue.mjs +451 -0
  177. package/esm2022/src/util/HeapSort.mjs +70 -0
  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/esm2022/src/util/cookie.service.mjs +92 -0
  190. package/{fesm2020 → fesm2022}/magic-xpa-engine.mjs +29750 -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 +34 -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 +8 -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 +10 -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 +8 -8
  220. package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +7 -7
  221. package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +7 -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 +15 -15
  226. package/src/commands/ClientToServer/EventCommand.d.ts +15 -15
  227. package/src/commands/ClientToServer/ExecOperCommand.d.ts +23 -23
  228. package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +8 -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 +8 -8
  232. package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +10 -10
  233. package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +8 -8
  234. package/src/commands/ClientToServer/QueryCommand.d.ts +8 -8
  235. package/src/commands/ClientToServer/RecomputeCommand.d.ts +11 -11
  236. package/src/commands/ClientToServer/RefreshEventCommand.d.ts +12 -12
  237. package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +10 -10
  238. package/src/commands/ClientToServer/RollbackEventCommand.d.ts +14 -14
  239. package/src/commands/ClientToServer/SelectProgramCommand.d.ts +6 -6
  240. package/src/commands/ClientToServer/SetTransactionStateDataviewCommand.d.ts +5 -5
  241. package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +8 -8
  242. package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +9 -9
  243. package/src/commands/ClientToServer/TransactionCommand.d.ts +12 -12
  244. package/src/commands/ClientToServer/UnloadCommand.d.ts +7 -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 +3 -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 +156 -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 +93 -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/CommandsProcessorManager.mjs +0 -26
  385. package/esm2020/src/CommandsTable.mjs +0 -162
  386. package/esm2020/src/ConstInterface.mjs +0 -516
  387. package/esm2020/src/FlowMonitorInterface.mjs +0 -16
  388. package/esm2020/src/GUIManager.mjs +0 -62
  389. package/esm2020/src/GlobalCommandsManager.mjs +0 -34
  390. package/esm2020/src/GuiEventsProcessor.mjs +0 -154
  391. package/esm2020/src/ServerConfig.mjs +0 -117
  392. package/esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs +0 -11
  393. package/esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +0 -60
  394. package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +0 -260
  395. package/esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -69
  396. package/esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
  397. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +0 -36
  398. package/esm2020/src/commands/ClientToServer/EventCommand.mjs +0 -40
  399. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +0 -67
  400. package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -22
  401. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +0 -23
  402. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +0 -27
  403. package/esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs +0 -27
  404. package/esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +0 -24
  405. package/esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs +0 -39
  406. package/esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +0 -24
  407. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +0 -28
  408. package/esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +0 -18
  409. package/esm2020/src/commands/DataViewCommandBase.mjs +0 -10
  410. package/esm2020/src/commands/IClientTargetedCommand.mjs +0 -9
  411. package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +0 -65
  412. package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +0 -62
  413. package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +0 -33
  414. package/esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs +0 -25
  415. package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +0 -27
  416. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +0 -45
  417. package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +0 -221
  418. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +0 -37
  419. package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +0 -83
  420. package/esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +0 -132
  421. package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +0 -17
  422. package/esm2020/src/data/DataView.mjs +0 -1610
  423. package/esm2020/src/data/DataviewManager.mjs +0 -28
  424. package/esm2020/src/data/DataviewManagerBase.mjs +0 -15
  425. package/esm2020/src/data/DvCache.mjs +0 -67
  426. package/esm2020/src/data/Field.mjs +0 -646
  427. package/esm2020/src/data/FieldBase.mjs +0 -18
  428. package/esm2020/src/data/FieldsTable.mjs +0 -103
  429. package/esm2020/src/data/Key.mjs +0 -88
  430. package/esm2020/src/data/Record.mjs +0 -846
  431. package/esm2020/src/data/RecordsTable.mjs +0 -267
  432. package/esm2020/src/data/TaskTransactionManager.mjs +0 -103
  433. package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +0 -74
  434. package/esm2020/src/env/EnvVariablesTable.mjs +0 -340
  435. package/esm2020/src/env/Environment.mjs +0 -489
  436. package/esm2020/src/env/LanguageData.mjs +0 -226
  437. package/esm2020/src/env/MirrorString.mjs +0 -65
  438. package/esm2020/src/event/ActionManager.mjs +0 -91
  439. package/esm2020/src/event/Event.mjs +0 -1333
  440. package/esm2020/src/event/EventHandler.mjs +0 -766
  441. package/esm2020/src/event/EventHandlerPosition.mjs +0 -204
  442. package/esm2020/src/event/EventsManager.mjs +0 -2975
  443. package/esm2020/src/event/RunTimeEvent.mjs +0 -392
  444. package/esm2020/src/event/UserEventsTable.mjs +0 -47
  445. package/esm2020/src/exp/ExpTable.mjs +0 -59
  446. package/esm2020/src/exp/Expression.mjs +0 -200
  447. package/esm2020/src/exp/ExpressionDict.mjs +0 -727
  448. package/esm2020/src/exp/ExpressionEvaluator.mjs +0 -4212
  449. package/esm2020/src/exp/ExpressionLocalJpn.mjs +0 -314
  450. package/esm2020/src/exp/GlobalParamsTable.mjs +0 -85
  451. package/esm2020/src/exp/YesNoExp.mjs +0 -36
  452. package/esm2020/src/gui/CreatedFormVector.mjs +0 -23
  453. package/esm2020/src/gui/FormsTable.mjs +0 -66
  454. package/esm2020/src/gui/MgControl.mjs +0 -353
  455. package/esm2020/src/gui/MgForm.mjs +0 -1181
  456. package/esm2020/src/http/HttpManager.mjs +0 -97
  457. package/esm2020/src/http/client/HttpClientAsync.mjs +0 -67
  458. package/esm2020/src/http/client/HttpClientBase.mjs +0 -132
  459. package/esm2020/src/http/client/HttpClientEvents.mjs +0 -39
  460. package/esm2020/src/http/client/HttpClientSync.mjs +0 -42
  461. package/esm2020/src/http/client/HttpUtility.mjs +0 -84
  462. package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +0 -18
  463. package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +0 -18
  464. package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +0 -18
  465. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +0 -880
  466. package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +0 -25
  467. package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +0 -24
  468. package/esm2020/src/remote/RemoteDataViewCommandFactory.mjs +0 -61
  469. package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +0 -17
  470. package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +0 -16
  471. package/esm2020/src/remote/ServerError.mjs +0 -40
  472. package/esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +0 -20
  473. package/esm2020/src/rt/Argument.mjs +0 -265
  474. package/esm2020/src/rt/ArgumentsList.mjs +0 -103
  475. package/esm2020/src/rt/Boundary.mjs +0 -152
  476. package/esm2020/src/rt/CompMainPrgTable.mjs +0 -65
  477. package/esm2020/src/rt/DataviewHeaders.mjs +0 -53
  478. package/esm2020/src/rt/DataviewHeadersSaxHandler.mjs +0 -38
  479. package/esm2020/src/rt/ExecutionStack.mjs +0 -94
  480. package/esm2020/src/rt/HandlersTable.mjs +0 -96
  481. package/esm2020/src/rt/LastFocusedManager.mjs +0 -67
  482. package/esm2020/src/rt/Operation.mjs +0 -735
  483. package/esm2020/src/rt/OperationTable.mjs +0 -67
  484. package/esm2020/src/rt/Recompute.mjs +0 -355
  485. package/esm2020/src/rt/RecomputeTable.mjs +0 -63
  486. package/esm2020/src/rt/RemoteDataviewHeader.mjs +0 -108
  487. package/esm2020/src/rt/ResultValue.mjs +0 -12
  488. package/esm2020/src/rt/TableCache.mjs +0 -177
  489. package/esm2020/src/rt/TableCacheManager.mjs +0 -67
  490. package/esm2020/src/rt/Transaction.mjs +0 -53
  491. package/esm2020/src/security/UserDetails.mjs +0 -71
  492. package/esm2020/src/tasks/MGData.mjs +0 -552
  493. package/esm2020/src/tasks/MGDataCollection.mjs +0 -252
  494. package/esm2020/src/tasks/RCTimer.mjs +0 -63
  495. package/esm2020/src/tasks/RemoteTaskService.mjs +0 -45
  496. package/esm2020/src/tasks/Task.mjs +0 -2495
  497. package/esm2020/src/tasks/TaskBase.mjs +0 -87
  498. package/esm2020/src/tasks/TaskServiceBase.mjs +0 -25
  499. package/esm2020/src/tasks/TasksTable.mjs +0 -80
  500. package/esm2020/src/tasks/sort/Sort.mjs +0 -7
  501. package/esm2020/src/tasks/sort/SortCollection.mjs +0 -67
  502. package/esm2020/src/util/ConstUtils.mjs +0 -14
  503. package/esm2020/src/util/FlowMonitorQueue.mjs +0 -453
  504. package/esm2020/src/util/HeapSort.mjs +0 -70
  505. package/esm2020/src/util/MgPriorityBlockingQueue.mjs +0 -74
  506. package/esm2020/src/util/MgPriorityQueue.mjs +0 -66
  507. package/esm2020/src/util/PrmMap.mjs +0 -151
  508. package/esm2020/src/util/ReturnResult.mjs +0 -46
  509. package/esm2020/src/util/ReturnResultBase.mjs +0 -18
  510. package/esm2020/src/util/Scrambler.mjs +0 -89
  511. package/esm2020/src/util/UniqueIDUtils.mjs +0 -12
  512. package/esm2020/src/util/cookie.service.mjs +0 -92
  513. package/fesm2015/magic-xpa-engine.mjs +0 -30835
  514. package/fesm2015/magic-xpa-engine.mjs.map +0 -1
  515. package/fesm2020/magic-xpa-engine.mjs.map +0 -1
@@ -0,0 +1,1333 @@
1
+ import { ApplicationException, Char, HashUtils, Int32, NNumber, NString, NumberStyles, RefParam, StringBuilder } from '@magic-xpa/mscorelib';
2
+ import { Base64, ForceExit, InternalInterface, Logger, Misc, StorageAttribute, StrUtil, XMLConstants, XmlParser } from '@magic-xpa/utils';
3
+ import { DisplayConvertor, KeyboardItem, Modifiers, RecordUtils, TaskDefinitionIdTableSaxHandler } from '@magic-xpa/gui';
4
+ import { ConstInterface } from '../ConstInterface';
5
+ import { LastFocusedManager } from '../rt/LastFocusedManager';
6
+ import { AccessHelper } from '../AccessHelper';
7
+ export class Event {
8
+ static _lastTimestamp = 0;
9
+ Exp = null;
10
+ _forceExit = ForceExit.None;
11
+ kbdItm = null;
12
+ _paramAttrs = null;
13
+ _paramNulls = null;
14
+ _paramVals = null;
15
+ _parameters = 0;
16
+ _returnExp = 0;
17
+ _seconds = Int32.MinValue;
18
+ _timestamp = 0;
19
+ _type = Char.MinValue;
20
+ _userDefinedFuncName = null;
21
+ _userDefinedFuncNameHashCode = 0;
22
+ _userEvtDesc = '';
23
+ _userEvtIdx = Int32.MinValue;
24
+ InternalEvent = 0;
25
+ PublicName = null;
26
+ UserEvt = null;
27
+ UserEvtTaskTag = null;
28
+ constructor() {
29
+ this.constructor_0();
30
+ }
31
+ constructor_0() {
32
+ this.InternalEvent = Int32.MinValue;
33
+ this.setTimestamp();
34
+ }
35
+ constructor_1(evt) {
36
+ this._type = evt._type;
37
+ this.kbdItm = evt.kbdItm;
38
+ this.InternalEvent = evt.InternalEvent;
39
+ this._seconds = evt._seconds;
40
+ this.Exp = evt.Exp;
41
+ this._forceExit = evt._forceExit;
42
+ this.UserEvt = evt.UserEvt;
43
+ this.UserEvtTaskTag = evt.UserEvtTaskTag;
44
+ this._userEvtIdx = evt._userEvtIdx;
45
+ this._timestamp = 0;
46
+ }
47
+ get ForceExit() {
48
+ return this._forceExit;
49
+ }
50
+ fillData(xmlParser, taskRef) {
51
+ let userValue;
52
+ let endContext = xmlParser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, xmlParser.getCurrIndex());
53
+ if (endContext !== -1 && endContext < xmlParser.getXMLdata().length) {
54
+ let tag = xmlParser.getXMLsubstring(endContext);
55
+ xmlParser.add2CurrIndex(tag.indexOf(ConstInterface.MG_TAG_EVENT) + ConstInterface.MG_TAG_EVENT.length);
56
+ let tokensVector = XmlParser.getTokens(xmlParser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
57
+ let refUserValue = new RefParam(userValue);
58
+ this.initElements(tokensVector, taskRef, refUserValue);
59
+ userValue = refUserValue.value;
60
+ xmlParser.setCurrIndex(endContext + XMLConstants.TAG_CLOSE.length);
61
+ this.InitInnerObjects(xmlParser);
62
+ if (userValue !== null)
63
+ this.InitUserData(taskRef, userValue);
64
+ }
65
+ else
66
+ Logger.Instance.WriteExceptionToLogWithMsg('in Event.FillData() out of string bounds');
67
+ }
68
+ InitInnerObjects(xmlParser) {
69
+ let nextTag = xmlParser.getNextTag();
70
+ switch (nextTag) {
71
+ case XMLConstants.MG_TAG_TASKDEFINITIONID_ENTRY:
72
+ let xmlBuffer = xmlParser.ReadToEndOfCurrentElement();
73
+ this.InitTaskDefinitionId(xmlBuffer);
74
+ let endContext = xmlParser.getXMLdata().indexOf(ConstInterface.MG_TAG_EVENT + XMLConstants.TAG_CLOSE, xmlParser.getCurrIndex());
75
+ xmlParser.setCurrIndex(endContext + (ConstInterface.MG_TAG_EVENT + XMLConstants.TAG_CLOSE).length);
76
+ break;
77
+ default:
78
+ break;
79
+ }
80
+ }
81
+ initElements(tokensVector, taskRef, refUserValue) {
82
+ let modifier = Modifiers.MODIFIER_NONE;
83
+ let keyCode = -1;
84
+ refUserValue.value = null;
85
+ for (let j = 0; j < tokensVector.length; j += 2) {
86
+ let attribute = (tokensVector.get_Item(j));
87
+ let valueStr = (tokensVector.get_Item(j + 1));
88
+ switch (attribute) {
89
+ case ConstInterface.MG_ATTR_EVENTTYPE:
90
+ this._type = valueStr[0];
91
+ break;
92
+ case ConstInterface.MG_ATTR_MODIFIER:
93
+ modifier = valueStr[0];
94
+ break;
95
+ case ConstInterface.MG_ATTR_INTERNALEVENT:
96
+ this.InternalEvent = XmlParser.getInt(valueStr);
97
+ break;
98
+ case ConstInterface.MG_ATTR_KEYCODE:
99
+ keyCode = XmlParser.getInt(valueStr);
100
+ break;
101
+ case ConstInterface.MG_ATTR_SECONDS:
102
+ this._seconds = XmlParser.getInt(valueStr);
103
+ break;
104
+ case XMLConstants.MG_ATTR_EXP:
105
+ this.Exp = taskRef.getExpById(XmlParser.getInt(valueStr));
106
+ break;
107
+ case ConstInterface.MG_ATTR_FORCE_EXIT:
108
+ this._forceExit = valueStr[0];
109
+ break;
110
+ case ConstInterface.MG_ATTR_DESC:
111
+ this._userEvtDesc = XmlParser.unescape(valueStr);
112
+ break;
113
+ case ConstInterface.MG_ATTR_PUBLIC:
114
+ this.PublicName = XmlParser.unescape(valueStr);
115
+ break;
116
+ case ConstInterface.MG_ATTR_PARAMS:
117
+ this._parameters = XmlParser.getInt(valueStr);
118
+ break;
119
+ case ConstInterface.MG_ATTR_PAR_ATTRS:
120
+ this._paramAttrs = valueStr;
121
+ break;
122
+ case XMLConstants.MG_ATTR_VALUE:
123
+ let paramStr = XmlParser.unescape(valueStr);
124
+ this._paramVals = new Array(this._parameters);
125
+ this.parseParamVal(paramStr);
126
+ break;
127
+ case ConstInterface.MG_ATTR_NULLS:
128
+ this._paramNulls = valueStr;
129
+ break;
130
+ case ConstInterface.MG_ATTR_USER:
131
+ refUserValue.value = valueStr;
132
+ break;
133
+ case XMLConstants.MG_ATTR_NAME:
134
+ this.setUserDefinedFuncName(valueStr);
135
+ break;
136
+ case ConstInterface.MG_TAG_USR_DEF_FUC_RET_EXP_ID:
137
+ this._returnExp = XmlParser.getInt(valueStr);
138
+ break;
139
+ case ConstInterface.MG_TAG_USR_DEF_FUC_RET_EXP_ATTR:
140
+ break;
141
+ default:
142
+ Logger.Instance.WriteExceptionToLogWithMsg(NString.Format('There is no such tag in Event class. Insert case to Event.initElements for {0}', attribute));
143
+ break;
144
+ }
145
+ }
146
+ if (this._type === ConstInterface.EVENT_TYPE_SYSTEM)
147
+ this.kbdItm = new KeyboardItem(keyCode, modifier);
148
+ }
149
+ InitUserData(taskRef, userValue) {
150
+ let comma = userValue.indexOf(',');
151
+ if (comma > -1) {
152
+ let ueTaskId = userValue.substr(0, comma);
153
+ if (taskRef !== null)
154
+ ueTaskId = taskRef.TaskService.GetEventTaskId(ueTaskId);
155
+ let ueTask = AccessHelper.mgDataTable.GetTaskByID(ueTaskId);
156
+ let ueIdx = XmlParser.getInt(userValue.substr(comma + 1));
157
+ if (ueTask !== null) {
158
+ this.UserEvt = ueTask.getUserEvent(ueIdx);
159
+ if (this.UserEvt === null) {
160
+ throw new ApplicationException('in Event.fillData(): user event not found. task id = ' + ueTaskId +
161
+ ', user event index = ' + ueIdx);
162
+ }
163
+ this.UserEvtTaskTag = ueTaskId;
164
+ this._userEvtIdx = ueIdx;
165
+ }
166
+ else {
167
+ this.UserEvtTaskTag = ueTaskId;
168
+ this._userEvtIdx = ueIdx;
169
+ this.UserEvt = null;
170
+ }
171
+ }
172
+ }
173
+ InitTaskDefinitionId(xmlBuffer) {
174
+ let handler = new TaskDefinitionIdTableSaxHandler(this.SetTaskDefinitionId);
175
+ handler.parse(xmlBuffer);
176
+ }
177
+ SetTaskDefinitionId(taskDefinitionId) {
178
+ }
179
+ findUserEvent() {
180
+ if (this._type === ConstInterface.EVENT_TYPE_USER && this.UserEvt === null) {
181
+ let ueTask = AccessHelper.mgDataTable.GetTaskByID(this.UserEvtTaskTag);
182
+ if (ueTask !== null)
183
+ this.UserEvt = ueTask.getUserEvent(this._userEvtIdx);
184
+ if (this.UserEvt === null)
185
+ throw new ApplicationException(NString.Format('in Event.findUserEvent(): user event not found. task id = {0} doesn\'t exist', this.UserEvtTaskTag));
186
+ }
187
+ }
188
+ equals(evt) {
189
+ let bEqual = false;
190
+ if (this === evt)
191
+ bEqual = true;
192
+ else if (this._type === evt._type) {
193
+ switch (this._type) {
194
+ case ConstInterface.EVENT_TYPE_SYSTEM:
195
+ bEqual = this.kbdItm.equals(evt.kbdItm);
196
+ break;
197
+ case ConstInterface.EVENT_TYPE_INTERNAL:
198
+ bEqual = (this.InternalEvent === evt.InternalEvent);
199
+ break;
200
+ case ConstInterface.EVENT_TYPE_TIMER:
201
+ bEqual = (this._seconds === evt._seconds);
202
+ break;
203
+ case ConstInterface.EVENT_TYPE_EXPRESSION:
204
+ case ConstInterface.EVENT_TYPE_PUBLIC:
205
+ bEqual = (this.Exp === evt.Exp);
206
+ break;
207
+ case ConstInterface.EVENT_TYPE_USER:
208
+ bEqual = (this.UserEvt === evt.UserEvt);
209
+ break;
210
+ case ConstInterface.EVENT_TYPE_USER_FUNC:
211
+ if (this._userDefinedFuncNameHashCode === evt.getUserDefinedFuncNameHashCode()) {
212
+ if (NString.Equals(evt.getUserDefinedFuncName(), this._userDefinedFuncName, true))
213
+ bEqual = true;
214
+ }
215
+ break;
216
+ default:
217
+ bEqual = false;
218
+ break;
219
+ }
220
+ }
221
+ if (this._type === ConstInterface.EVENT_TYPE_PUBLIC || evt._type === ConstInterface.EVENT_TYPE_PUBLIC) {
222
+ let name1 = null;
223
+ let name2 = null;
224
+ if (this._type !== ConstInterface.EVENT_TYPE_USER && evt._type !== ConstInterface.EVENT_TYPE_USER)
225
+ bEqual = false;
226
+ else if (this._type === ConstInterface.EVENT_TYPE_PUBLIC) {
227
+ name1 = this.PublicName;
228
+ name2 = evt.getUserEvent().PublicName;
229
+ }
230
+ else {
231
+ name1 = evt.PublicName;
232
+ name2 = this.getUserEvent().PublicName;
233
+ }
234
+ if (name1 === null || name2 === null)
235
+ bEqual = false;
236
+ else
237
+ bEqual = (name1 === name2);
238
+ }
239
+ else if (this._type === ConstInterface.EVENT_TYPE_INTERNAL && evt._type === ConstInterface.EVENT_TYPE_SYSTEM) {
240
+ if (LastFocusedManager.Instance.getCurrTask() !== null && (AccessHelper.eventsManager.getMatchingAction(evt.getKbdItm())) === this.getInternalCode())
241
+ bEqual = true;
242
+ }
243
+ else if (this._type === ConstInterface.EVENT_TYPE_USER && evt._type !== ConstInterface.EVENT_TYPE_USER) {
244
+ this.findUserEvent();
245
+ bEqual = this.UserEvt.equals(evt);
246
+ }
247
+ return bEqual;
248
+ }
249
+ async setPublicName() {
250
+ if (this._type === ConstInterface.EVENT_TYPE_PUBLIC && this.Exp !== null) {
251
+ this.PublicName = (await this.Exp.evaluateWithResLength(255)).mgVal;
252
+ if (this.PublicName !== null)
253
+ this.PublicName = StrUtil.rtrim(this.PublicName);
254
+ }
255
+ }
256
+ setInternal(code) {
257
+ this._type = ConstInterface.EVENT_TYPE_INTERNAL;
258
+ this.InternalEvent = code;
259
+ if (code === InternalInterface.MG_ACT_HIT || code === InternalInterface.MG_ACT_CTRL_HIT)
260
+ LastFocusedManager.Instance.LastActionTime = Misc.getSystemMilliseconds();
261
+ }
262
+ setExpression(expRef) {
263
+ this._type = ConstInterface.EVENT_TYPE_EXPRESSION;
264
+ this.Exp = expRef;
265
+ }
266
+ getExpression() {
267
+ return this.Exp;
268
+ }
269
+ getUsrEvntDesc() {
270
+ return (this.UserEvt !== null) ? this.UserEvt._userEvtDesc : this._userEvtDesc;
271
+ }
272
+ setSystem(keyboardItem) {
273
+ this._type = ConstInterface.EVENT_TYPE_SYSTEM;
274
+ this.kbdItm = keyboardItem;
275
+ }
276
+ setKeyboardItem(keyboardItem) {
277
+ this.kbdItm = keyboardItem;
278
+ }
279
+ getType() {
280
+ return this._type;
281
+ }
282
+ setType(aType) {
283
+ this._type = aType;
284
+ }
285
+ getInternalCode() {
286
+ if (this._type === ConstInterface.EVENT_TYPE_INTERNAL)
287
+ return this.InternalEvent;
288
+ return Int32.MinValue;
289
+ }
290
+ getKbdItm() {
291
+ if (this._type === ConstInterface.EVENT_TYPE_SYSTEM)
292
+ return this.kbdItm;
293
+ return null;
294
+ }
295
+ getKbdItmAlways() {
296
+ return this.kbdItm;
297
+ }
298
+ async dataEventIsTrue() {
299
+ if (this._type !== ConstInterface.EVENT_TYPE_EXPRESSION &&
300
+ !(this._type === ConstInterface.EVENT_TYPE_USER && this.getUserEventType() === ConstInterface.EVENT_TYPE_EXPRESSION))
301
+ return true;
302
+ if (this._type !== ConstInterface.EVENT_TYPE_USER)
303
+ return DisplayConvertor.toBoolean(await this.Exp.evaluateWithResultTypeAndLength(StorageAttribute.BOOLEAN, 0));
304
+ return DisplayConvertor.toBoolean(await this.UserEvt.getExpression().evaluateWithResultTypeAndLength(StorageAttribute.BOOLEAN, 0));
305
+ }
306
+ getSeconds() {
307
+ return this._seconds;
308
+ }
309
+ getBrkLevel(flowMonitor) {
310
+ if (arguments.length === 0) {
311
+ return this.getBrkLevel_0();
312
+ }
313
+ return this.getBrkLevel_1(flowMonitor);
314
+ }
315
+ getBrkLevel_0() {
316
+ return this.getBrkLevel(false);
317
+ }
318
+ getBrkLevel_1(flowMonitor) {
319
+ let level = '';
320
+ switch (this._type) {
321
+ case ConstInterface.EVENT_TYPE_INTERNAL:
322
+ switch (this.InternalEvent) {
323
+ case InternalInterface.MG_ACT_TASK_PREFIX:
324
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_TASK_PREFIX_FM : ConstInterface.BRK_LEVEL_TASK_PREFIX;
325
+ break;
326
+ case InternalInterface.MG_ACT_TASK_SUFFIX:
327
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_TASK_SUFFIX_FM : ConstInterface.BRK_LEVEL_TASK_SUFFIX;
328
+ break;
329
+ case InternalInterface.MG_ACT_REC_PREFIX:
330
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_REC_PREFIX_FM : ConstInterface.BRK_LEVEL_REC_PREFIX;
331
+ break;
332
+ case InternalInterface.MG_ACT_REC_SUFFIX:
333
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_REC_SUFFIX_FM : ConstInterface.BRK_LEVEL_REC_SUFFIX;
334
+ break;
335
+ case InternalInterface.MG_ACT_CTRL_PREFIX:
336
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_CTRL_PREFIX_FM : ConstInterface.BRK_LEVEL_CTRL_PREFIX + '_';
337
+ break;
338
+ case InternalInterface.MG_ACT_CTRL_SUFFIX:
339
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_CTRL_SUFFIX_FM : ConstInterface.BRK_LEVEL_CTRL_SUFFIX + '_';
340
+ break;
341
+ case InternalInterface.MG_ACT_CTRL_VERIFICATION:
342
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_CTRL_VERIFICATION_FM : ConstInterface.BRK_LEVEL_CTRL_VERIFICATION + '_';
343
+ break;
344
+ case InternalInterface.MG_ACT_VARIABLE:
345
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_VARIABLE_FM : ConstInterface.BRK_LEVEL_VARIABLE + '_';
346
+ break;
347
+ default:
348
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_HANDLER_INTERNAL_FM : ConstInterface.BRK_LEVEL_HANDLER_INTERNAL + '_';
349
+ break;
350
+ }
351
+ level += Event.getInternalEvtDescription(this.InternalEvent);
352
+ break;
353
+ case ConstInterface.EVENT_TYPE_SYSTEM:
354
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_HANDLER_SYSTEM_FM : ConstInterface.BRK_LEVEL_HANDLER_SYSTEM + '_';
355
+ level += this.getKeyboardItemString();
356
+ break;
357
+ case ConstInterface.EVENT_TYPE_TIMER:
358
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_HANDLER_TIMER_FM + ' ' + this.seconds2String() : ConstInterface.BRK_LEVEL_HANDLER_TIMER + '_' + this.seconds2String();
359
+ break;
360
+ case ConstInterface.EVENT_TYPE_EXPRESSION:
361
+ level = flowMonitor ? ConstInterface.BRK_LEVEL_HANDLER_EXPRESSION_FM : ConstInterface.BRK_LEVEL_HANDLER_EXPRESSION + '_' + this.Exp.getId();
362
+ break;
363
+ case ConstInterface.EVENT_TYPE_USER:
364
+ level = (flowMonitor ? (ConstInterface.BRK_LEVEL_HANDLER_USER_FM + ': ') : (ConstInterface.BRK_LEVEL_HANDLER_USER + '_')) + (this.UserEvt != null ? this.UserEvt._userEvtDesc : this._userEvtDesc);
365
+ break;
366
+ case ConstInterface.EVENT_TYPE_USER_FUNC:
367
+ level = (flowMonitor ? (ConstInterface.BRK_LEVEL_USER_FUNCTION_FM + ':') : (ConstInterface.BRK_LEVEL_USER_FUNCTION + '_')) + this._userDefinedFuncName;
368
+ break;
369
+ }
370
+ return level;
371
+ }
372
+ static getInternalEvtDescription(internalEventCode) {
373
+ let description;
374
+ switch (internalEventCode) {
375
+ case InternalInterface.MG_ACT_ABOUT:
376
+ description = 'About Magic';
377
+ break;
378
+ case InternalInterface.MG_ACT_ACTION_LIST:
379
+ description = 'Action List';
380
+ break;
381
+ case InternalInterface.MG_ACT_ADD_HYPERLINK:
382
+ description = '';
383
+ break;
384
+ case InternalInterface.MG_ACT_ALIGN_LEFT:
385
+ description = 'Left';
386
+ break;
387
+ case InternalInterface.MG_ACT_ALIGN_RIGHT:
388
+ description = 'Right';
389
+ break;
390
+ case InternalInterface.MG_ACT_APPL_PROPERTIES:
391
+ description = '';
392
+ break;
393
+ case InternalInterface.MG_ACT_APPLICATIONS:
394
+ description = 'Applications';
395
+ break;
396
+ case InternalInterface.MG_ACT_APPLICATIONS_LIST:
397
+ description = 'Applications List';
398
+ break;
399
+ case InternalInterface.MG_ACT_ATTACH_TO_TABLE:
400
+ description = 'Attach to Table';
401
+ break;
402
+ case InternalInterface.MG_ACT_AUTHORIZE:
403
+ description = 'Authorize';
404
+ break;
405
+ case InternalInterface.MG_ACT_EDT_BEGFLD:
406
+ description = 'Begin Field';
407
+ break;
408
+ case InternalInterface.MG_ACT_EDT_BEGFORM:
409
+ description = 'Begin Form';
410
+ break;
411
+ case InternalInterface.MG_ACT_EDT_BEGLINE:
412
+ description = 'Begin Line';
413
+ break;
414
+ case InternalInterface.MG_ACT_EDT_BEGNXTLINE:
415
+ description = 'Begin Next Line';
416
+ break;
417
+ case InternalInterface.MG_ACT_EDT_BEGPAGE:
418
+ description = 'Begin Page';
419
+ break;
420
+ case InternalInterface.MG_ACT_TBL_BEGLINE:
421
+ description = 'Begin Row';
422
+ break;
423
+ case InternalInterface.MG_ACT_TBL_BEGPAGE:
424
+ description = 'Begin Screen';
425
+ break;
426
+ case InternalInterface.MG_ACT_TBL_BEGTBL:
427
+ description = 'Begin table';
428
+ break;
429
+ case InternalInterface.MG_ACT_BOTTOM:
430
+ description = 'Bottom';
431
+ break;
432
+ case InternalInterface.MG_ACT_BULLET:
433
+ description = 'Bullet';
434
+ break;
435
+ case InternalInterface.MG_ACT_BUTTON:
436
+ description = 'Button Press';
437
+ break;
438
+ case InternalInterface.MG_ACT_CANCEL:
439
+ description = 'Cancel';
440
+ break;
441
+ case InternalInterface.MG_ACT_RT_QUIT:
442
+ description = 'Quit';
443
+ break;
444
+ case InternalInterface.MG_ACT_CENTER:
445
+ description = 'Center';
446
+ break;
447
+ case InternalInterface.MG_ACT_CHECK_SYNTAX:
448
+ description = 'Check Syntax';
449
+ break;
450
+ case InternalInterface.MG_ACT_CHECK_TO_END:
451
+ description = 'Check to End';
452
+ break;
453
+ case InternalInterface.MG_ACT_CLEAR_TEMPLATE:
454
+ description = 'Clear Template';
455
+ break;
456
+ case InternalInterface.MG_ACT_CLEAR_VALUE:
457
+ description = 'Clear Value';
458
+ break;
459
+ case InternalInterface.MG_ACT_CLOSE:
460
+ description = 'Close';
461
+ break;
462
+ case InternalInterface.MG_ACT_ACT_CLOSE_APPL:
463
+ description = 'Close Application';
464
+ break;
465
+ case InternalInterface.MG_ACT_COMMUNICATIONS:
466
+ description = 'Communications';
467
+ break;
468
+ case InternalInterface.MG_ACT_COMPONENTS:
469
+ description = 'Components';
470
+ break;
471
+ case InternalInterface.MG_ACT_CTRL_HIT:
472
+ description = 'Control Hit';
473
+ break;
474
+ case InternalInterface.MG_ACT_CONTROL_NAME_LIST:
475
+ description = 'Control Name List';
476
+ break;
477
+ case InternalInterface.MG_ACT_CLIP_COPY:
478
+ description = 'Copy';
479
+ break;
480
+ case InternalInterface.MG_ACT_COPY_LAYOUT:
481
+ description = 'Copy Layout';
482
+ break;
483
+ case InternalInterface.MG_ACT_COPY_SUBTREE:
484
+ description = 'Copy Subtree';
485
+ break;
486
+ case InternalInterface.MG_ACT_CRELINE:
487
+ description = 'Create Line';
488
+ break;
489
+ case InternalInterface.MG_ACT_CRELINE_ABOVE:
490
+ description = 'Create Line Above';
491
+ break;
492
+ case InternalInterface.MG_ACT_CREATE_PARENT:
493
+ description = 'Create Parent';
494
+ break;
495
+ case InternalInterface.MG_ACT_RTO_CREATE:
496
+ description = 'Create Records';
497
+ break;
498
+ case InternalInterface.MG_ACT_CREATE_SUBTASK:
499
+ description = 'Create Subtask';
500
+ break;
501
+ case InternalInterface.MG_ACT_CROSS_REFERENCE:
502
+ description = 'Cross Reference';
503
+ break;
504
+ case InternalInterface.MG_ACT_CUT:
505
+ description = 'Cut';
506
+ break;
507
+ case InternalInterface.MG_ACT_DB_TABLES:
508
+ description = '';
509
+ break;
510
+ case InternalInterface.MG_ACT_DBMS:
511
+ description = 'DBMS';
512
+ break;
513
+ case InternalInterface.MG_ACT_DDF_MAKE:
514
+ description = 'DDF Make';
515
+ break;
516
+ case InternalInterface.MG_ACT_DATABASES:
517
+ description = 'Databases';
518
+ break;
519
+ case InternalInterface.MG_ACT_DEFAULT_LAYOUT:
520
+ description = 'Default Layout';
521
+ break;
522
+ case InternalInterface.MG_ACT_DEFINE_EXPRESSION:
523
+ description = 'Define Expression';
524
+ break;
525
+ case InternalInterface.MG_ACT_EDT_DELCURCH:
526
+ description = 'Current Char';
527
+ break;
528
+ case InternalInterface.MG_ACT_EDT_DELPRVCH:
529
+ description = 'Previous Char';
530
+ break;
531
+ case InternalInterface.MG_ACT_DELETE_HYPERLINK:
532
+ description = 'Delete Hyperlink';
533
+ break;
534
+ case InternalInterface.MG_ACT_DELLINE:
535
+ description = 'Delete Line';
536
+ break;
537
+ case InternalInterface.MG_ACT_DELETE_SUBTREE:
538
+ description = 'Delete Subtree';
539
+ break;
540
+ case InternalInterface.MG_ACT_RT_COPYFLD:
541
+ description = 'Ditto';
542
+ break;
543
+ case InternalInterface.MG_ACT_DISPLAY_REFRESH:
544
+ description = 'Display Refresh';
545
+ break;
546
+ case InternalInterface.MG_ACT_EDIT_MAIN_FORM:
547
+ description = 'Edit Main Form';
548
+ break;
549
+ case InternalInterface.MG_ACT_EDT_ENDFLD:
550
+ description = 'End Field';
551
+ break;
552
+ case InternalInterface.MG_ACT_EDT_ENDFORM:
553
+ description = 'End Form';
554
+ break;
555
+ case InternalInterface.MG_ACT_EDT_ENDLINE:
556
+ description = 'End Line';
557
+ break;
558
+ case InternalInterface.MG_ACT_EDT_ENDPAGE:
559
+ description = 'End Page';
560
+ break;
561
+ case InternalInterface.MG_ACT_TBL_ENDLINE:
562
+ description = 'End Row';
563
+ break;
564
+ case InternalInterface.MG_ACT_TBL_ENDPAGE:
565
+ description = 'End Screen';
566
+ break;
567
+ case InternalInterface.MG_ACT_TBL_ENDTBL:
568
+ description = 'End Table';
569
+ break;
570
+ case InternalInterface.MG_ACT_ENVIRONMENT:
571
+ description = 'Environment';
572
+ break;
573
+ case InternalInterface.MG_ACT_EXECUTE_PROGRAM:
574
+ description = 'Execute Program';
575
+ break;
576
+ case InternalInterface.MG_ACT_EXECUTE_REPORT:
577
+ description = 'Execute Report';
578
+ break;
579
+ case InternalInterface.MG_ACT_EXIT:
580
+ description = 'Exit';
581
+ break;
582
+ case InternalInterface.MG_ACT_EXIT_SYSTEM:
583
+ description = 'Exit System';
584
+ break;
585
+ case InternalInterface.MG_ACT_EXPORT_IMPORT:
586
+ description = 'Export/Import';
587
+ break;
588
+ case InternalInterface.MG_ACT_EXPRESSION_RULES:
589
+ description = 'Expression rules';
590
+ break;
591
+ case InternalInterface.MG_ACT_EXTERNAL_EDITOR:
592
+ description = 'External Editor';
593
+ break;
594
+ case InternalInterface.MG_ACT_EXT_EVENT:
595
+ description = 'External Event';
596
+ break;
597
+ case InternalInterface.MG_ACT_FORMS:
598
+ description = 'Forms';
599
+ break;
600
+ case InternalInterface.MG_ACT_FROM_VALUE:
601
+ description = 'From Value';
602
+ break;
603
+ case InternalInterface.MG_ACT_FUNCTION_LIST:
604
+ description = 'Function List';
605
+ break;
606
+ case InternalInterface.MG_ACT_GENERATE_FORM:
607
+ description = 'Generate Form';
608
+ break;
609
+ case InternalInterface.MG_ACT_GENERATE_PROGRAM:
610
+ description = 'Generate Program';
611
+ break;
612
+ case InternalInterface.MG_ACT_GO_TO_TOP:
613
+ description = 'Go to Top';
614
+ break;
615
+ case InternalInterface.MG_ACT_H_CENTER_OF_FORM:
616
+ description = '';
617
+ break;
618
+ case InternalInterface.MG_ACT_HTML_STYLES:
619
+ description = 'HTML Styles';
620
+ break;
621
+ case InternalInterface.MG_ACT_HELP:
622
+ description = 'Help';
623
+ break;
624
+ case InternalInterface.MG_ACT_HELP_SCREENS:
625
+ description = 'Help Screens';
626
+ break;
627
+ case InternalInterface.MG_ACT_HORIZ_CENTER:
628
+ description = 'Horiz. Center';
629
+ break;
630
+ case InternalInterface.MG_ACT_I_O_FILES:
631
+ description = 'Tables';
632
+ break;
633
+ case InternalInterface.MG_ACT_INDENT:
634
+ description = 'Indent';
635
+ break;
636
+ case InternalInterface.MG_ACT_INSERT_OBJECT:
637
+ description = 'Insert Object';
638
+ break;
639
+ case InternalInterface.MG_ACT_JUMP_TO_ROW:
640
+ description = 'Jump to Row';
641
+ break;
642
+ case InternalInterface.MG_ACT_KEYBOARD_LIST:
643
+ description = 'Keyboard List';
644
+ break;
645
+ case InternalInterface.MG_ACT_KEYBOARD_MAPPING:
646
+ description = 'Keyboard Mapping';
647
+ break;
648
+ case InternalInterface.MG_ACT_LANGUAGES:
649
+ description = 'languages';
650
+ break;
651
+ case InternalInterface.MG_ACT_RTO_SEARCH:
652
+ description = 'Locate Next';
653
+ break;
654
+ case InternalInterface.MG_ACT_RTO_LOCATE:
655
+ description = 'Locate a Record';
656
+ break;
657
+ case InternalInterface.MG_ACT_LOGICALPNAMES:
658
+ description = '';
659
+ break;
660
+ case InternalInterface.MG_ACT_LOGON:
661
+ description = 'Logon';
662
+ break;
663
+ case InternalInterface.MG_ACT_USING_HELP:
664
+ description = 'Help Topics';
665
+ break;
666
+ case InternalInterface.MG_ACT_EDT_MARKNXTCH:
667
+ description = 'Mark Next Char';
668
+ break;
669
+ case InternalInterface.MG_ACT_MARK_NEXT_LINE:
670
+ description = 'Mark Next Line MLE';
671
+ break;
672
+ case InternalInterface.MG_ACT_EDT_MARKPRVCH:
673
+ description = 'Mark Previous Char';
674
+ break;
675
+ case InternalInterface.MG_ACT_EDT_MARKPRVLINE:
676
+ description = 'Mark Previous Line MLE';
677
+ break;
678
+ case InternalInterface.MG_ACT_MARK_SUBTREE:
679
+ description = '';
680
+ break;
681
+ case InternalInterface.MG_ACT_EDT_MARKTOBEG:
682
+ description = 'Mark To Beginning';
683
+ break;
684
+ case InternalInterface.MG_ACT_EDT_MARKTOEND:
685
+ description = 'Mark To End';
686
+ break;
687
+ case InternalInterface.MG_ACT_MAXIMUM_HEIGHT:
688
+ description = 'Maximum Height';
689
+ break;
690
+ case InternalInterface.MG_ACT_MAXIMUM_WIDTH:
691
+ description = 'Maximum Width';
692
+ break;
693
+ case InternalInterface.MG_ACT_MENU_BAR:
694
+ description = 'Menu Bar';
695
+ break;
696
+ case InternalInterface.MG_ACT_MENUS:
697
+ description = '';
698
+ break;
699
+ case InternalInterface.MG_ACT_MINIMUM_HEIGHT:
700
+ description = 'Minimum Height';
701
+ break;
702
+ case InternalInterface.MG_ACT_MINIMUM_WIDTH:
703
+ description = 'Minimum Width';
704
+ break;
705
+ case InternalInterface.MG_ACT_RTO_MODIFY:
706
+ description = 'Modify Records';
707
+ break;
708
+ case InternalInterface.MG_ACT_MONITOR_DEBUGGER:
709
+ description = 'Monitor/Debugger';
710
+ break;
711
+ case InternalInterface.MG_ACT_MOVE_ENTRY:
712
+ description = 'Move Entry';
713
+ break;
714
+ case InternalInterface.MG_ACT_MOVE_SUBTREE:
715
+ description = 'Move Subtree';
716
+ break;
717
+ case InternalInterface.MG_ACT_NULL_SETTINGS:
718
+ description = 'NULL Settings';
719
+ break;
720
+ case InternalInterface.MG_ACT_EDT_NXTCHAR:
721
+ description = 'Next Char';
722
+ break;
723
+ case InternalInterface.MG_ACT_EDT_NXTLINE:
724
+ description = 'Next Line';
725
+ break;
726
+ case InternalInterface.MG_ACT_EDT_NXTPAGE:
727
+ description = 'Next Page';
728
+ break;
729
+ case InternalInterface.MG_ACT_TBL_NXTLINE:
730
+ description = 'Next Row';
731
+ break;
732
+ case InternalInterface.MG_ACT_TBL_NXTPAGE:
733
+ description = 'Next Screen';
734
+ break;
735
+ case InternalInterface.MG_ACT_EDT_NXTTAB:
736
+ description = 'Next Tab';
737
+ break;
738
+ case InternalInterface.MG_ACT_EDT_NXTWORD:
739
+ description = 'Next Word';
740
+ break;
741
+ case InternalInterface.MG_ACT_NORMAL:
742
+ description = 'Normal';
743
+ break;
744
+ case InternalInterface.MG_ACT_OK:
745
+ description = 'OK';
746
+ break;
747
+ case InternalInterface.MG_ACT_OLE2:
748
+ description = 'OLE2';
749
+ break;
750
+ case InternalInterface.MG_ACT_OPEN_APPLICATION:
751
+ description = 'Open Application';
752
+ break;
753
+ case InternalInterface.MG_ACT_OVERWRITE_ENTRY:
754
+ description = 'Overwrite Entry';
755
+ break;
756
+ case InternalInterface.MG_ACT_OVERWRITE_SUBTREE:
757
+ description = 'Overwrite Subtree';
758
+ break;
759
+ case InternalInterface.MG_ACT_PPD:
760
+ description = 'PPD';
761
+ break;
762
+ case InternalInterface.MG_ACT_PAGE_FOOTER:
763
+ description = 'Page Footer';
764
+ break;
765
+ case InternalInterface.MG_ACT_PAGE_HEADER:
766
+ description = 'Page Header';
767
+ break;
768
+ case InternalInterface.MG_ACT_CLIP_PASTE:
769
+ description = 'Paste';
770
+ break;
771
+ case InternalInterface.MG_ACT_PASTE_LINK:
772
+ description = 'Paste Link';
773
+ break;
774
+ case InternalInterface.MG_ACT_PASTE_SUBTREE:
775
+ description = 'Paste Subtree';
776
+ break;
777
+ case InternalInterface.MG_ACT_EDT_PRVCHAR:
778
+ description = 'Previous Char';
779
+ break;
780
+ case InternalInterface.MG_ACT_EDT_PRVLINE:
781
+ description = 'Previous Line';
782
+ break;
783
+ case InternalInterface.MG_ACT_EDT_PRVPAGE:
784
+ description = 'Previous Page';
785
+ break;
786
+ case InternalInterface.MG_ACT_TBL_PRVLINE:
787
+ description = 'Previous Row';
788
+ break;
789
+ case InternalInterface.MG_ACT_TBL_PRVPAGE:
790
+ description = 'Previous Screen';
791
+ break;
792
+ case InternalInterface.MG_ACT_EDT_PRVTAB:
793
+ description = 'Previous Tab';
794
+ break;
795
+ case InternalInterface.MG_ACT_EDT_PRVWORD:
796
+ description = 'Previous Word';
797
+ break;
798
+ case InternalInterface.MG_ACT_PRINT_ATTRIBUTES:
799
+ description = 'Print Attributes';
800
+ break;
801
+ case InternalInterface.MG_ACT_PRINTER_SETUP:
802
+ description = 'Printer Setup';
803
+ break;
804
+ case InternalInterface.MG_ACT_PRINTERS:
805
+ description = 'Printers';
806
+ break;
807
+ case InternalInterface.MG_ACT_PROGRAMS:
808
+ description = 'Programs';
809
+ break;
810
+ case InternalInterface.MG_ACT_PROPERTIES:
811
+ description = 'Properties';
812
+ break;
813
+ case InternalInterface.MG_ACT_RTO_QUERY:
814
+ description = 'Query Records';
815
+ break;
816
+ case InternalInterface.MG_ACT_RTO_RANGE:
817
+ description = 'Range of Records';
818
+ break;
819
+ case InternalInterface.MG_ACT_RT_REFRESH_RECORD:
820
+ description = 'Record Flush';
821
+ break;
822
+ case InternalInterface.MG_ACT_REDIRECT_FILES:
823
+ description = 'Redirect Files';
824
+ break;
825
+ case InternalInterface.MG_ACT_REDRAW_LAYOUT:
826
+ description = '';
827
+ break;
828
+ case InternalInterface.MG_ACT_REPEAT_ENTRY:
829
+ description = 'Repeat Entry';
830
+ break;
831
+ case InternalInterface.MG_ACT_REPEAT_SUBTREE:
832
+ description = 'Repeat Subtree';
833
+ break;
834
+ case InternalInterface.MG_ACT_REPORT_GENERATOR:
835
+ description = '';
836
+ break;
837
+ case InternalInterface.MG_ACT_RESTORE_DEFAULTS:
838
+ description = 'Restore Defaults';
839
+ break;
840
+ case InternalInterface.MG_ACT_RETURN_TO_TREE:
841
+ description = '';
842
+ break;
843
+ case InternalInterface.MG_ACT_RIGHT:
844
+ description = 'Right';
845
+ break;
846
+ case InternalInterface.MG_ACT_RIGHTS:
847
+ description = '';
848
+ break;
849
+ case InternalInterface.MG_ACT_RIGHTS_LIST:
850
+ description = 'Rights List';
851
+ break;
852
+ case InternalInterface.MG_ACT_SQL_ASSIST:
853
+ description = 'SQL Assist';
854
+ break;
855
+ case InternalInterface.MG_ACT_SQL_COLUMNS:
856
+ description = 'SQL Columns';
857
+ break;
858
+ case InternalInterface.MG_ACT_SQL_COMMAND:
859
+ description = 'SQL Command';
860
+ break;
861
+ case InternalInterface.MG_ACT_SQL_FLIP_DESC:
862
+ description = 'SQL Flip Desc.';
863
+ break;
864
+ case InternalInterface.MG_ACT_SQL_KEYWORDS:
865
+ description = 'SQL Keywords';
866
+ break;
867
+ case InternalInterface.MG_ACT_SQL_OPERATORS:
868
+ description = 'SQL Operators';
869
+ break;
870
+ case InternalInterface.MG_ACT_SQL_TABLES:
871
+ description = 'SQL Tables';
872
+ break;
873
+ case InternalInterface.MG_ACT_SQL_WHERE_CLAUSE:
874
+ description = '';
875
+ break;
876
+ case InternalInterface.MG_ACT_RT_REFRESH_SCREEN:
877
+ description = 'Screen Refresh';
878
+ break;
879
+ case InternalInterface.MG_ACT_SECRET_NAMES:
880
+ description = 'Secret Names';
881
+ break;
882
+ case InternalInterface.MG_ACT_SELECT:
883
+ description = 'Select';
884
+ break;
885
+ case InternalInterface.MG_ACT_EDT_MARKALL:
886
+ description = 'Select All';
887
+ break;
888
+ case InternalInterface.MG_ACT_SERVERS:
889
+ description = '';
890
+ break;
891
+ case InternalInterface.MG_ACT_SERVICES:
892
+ description = '';
893
+ break;
894
+ case InternalInterface.MG_ACT_RT_EDT_NULL:
895
+ description = 'Set to NULL';
896
+ break;
897
+ case InternalInterface.MG_ACT_SHELL_TO_OS:
898
+ description = 'Shell to OS';
899
+ break;
900
+ case InternalInterface.MG_ACT_SHOW_EXPRESSION:
901
+ description = 'Show Expression';
902
+ break;
903
+ case InternalInterface.MG_ACT_SHOW_FULL_LAYOUT:
904
+ description = '';
905
+ break;
906
+ case InternalInterface.MG_ACT_SHRINK_TREE:
907
+ description = '';
908
+ break;
909
+ case InternalInterface.MG_ACT_SORT:
910
+ description = 'Sort';
911
+ break;
912
+ case InternalInterface.MG_ACT_SORT_RECORDS:
913
+ description = 'Sort Records';
914
+ break;
915
+ case InternalInterface.MG_ACT_TABLE_LOCATE:
916
+ description = 'Table Locate';
917
+ break;
918
+ case InternalInterface.MG_ACT_TABLE_LOCATE_NEXT:
919
+ description = 'Table Locate Next';
920
+ break;
921
+ case InternalInterface.MG_ACT_TABLES:
922
+ description = '';
923
+ break;
924
+ case InternalInterface.MG_ACT_TASK_CONTROL:
925
+ description = '';
926
+ break;
927
+ case InternalInterface.MG_ACT_TASK_EVENTS:
928
+ description = '';
929
+ break;
930
+ case InternalInterface.MG_ACT_TO_VALUE:
931
+ description = 'To Value';
932
+ break;
933
+ case InternalInterface.MG_ACT_TOOLKIT_RUNTIME:
934
+ description = 'Toolkit/Runtime';
935
+ break;
936
+ case InternalInterface.MG_ACT_TOP:
937
+ description = 'Top';
938
+ break;
939
+ case InternalInterface.MG_ACT_TYPES:
940
+ description = '';
941
+ break;
942
+ case InternalInterface.MG_ACT_EDT_UNDO:
943
+ description = 'Undo Editing';
944
+ break;
945
+ case InternalInterface.MG_ACT_UNINDENT:
946
+ description = 'Unindent';
947
+ break;
948
+ case InternalInterface.MG_ACT_UPDATE_LINK:
949
+ description = '';
950
+ break;
951
+ case InternalInterface.MG_ACT_USER_ACTION_1:
952
+ case InternalInterface.MG_ACT_USER_ACTION_2:
953
+ case InternalInterface.MG_ACT_USER_ACTION_3:
954
+ case InternalInterface.MG_ACT_USER_ACTION_4:
955
+ case InternalInterface.MG_ACT_USER_ACTION_5:
956
+ case InternalInterface.MG_ACT_USER_ACTION_6:
957
+ case InternalInterface.MG_ACT_USER_ACTION_7:
958
+ case InternalInterface.MG_ACT_USER_ACTION_8:
959
+ case InternalInterface.MG_ACT_USER_ACTION_9:
960
+ case InternalInterface.MG_ACT_USER_ACTION_10:
961
+ case InternalInterface.MG_ACT_USER_ACTION_11:
962
+ case InternalInterface.MG_ACT_USER_ACTION_12:
963
+ case InternalInterface.MG_ACT_USER_ACTION_13:
964
+ case InternalInterface.MG_ACT_USER_ACTION_14:
965
+ case InternalInterface.MG_ACT_USER_ACTION_15:
966
+ case InternalInterface.MG_ACT_USER_ACTION_16:
967
+ case InternalInterface.MG_ACT_USER_ACTION_17:
968
+ case InternalInterface.MG_ACT_USER_ACTION_18:
969
+ case InternalInterface.MG_ACT_USER_ACTION_19:
970
+ case InternalInterface.MG_ACT_USER_ACTION_20:
971
+ description = 'User Action ' + (internalEventCode - InternalInterface.MG_ACT_USER_ACTION_1 + 1);
972
+ break;
973
+ case InternalInterface.MG_ACT_USER_GROUPS:
974
+ description = '';
975
+ break;
976
+ case InternalInterface.MG_ACT_USER_IDS:
977
+ description = 'User IDs';
978
+ break;
979
+ case InternalInterface.MG_ACT_V_CENTER_OF_FORM:
980
+ description = 'Center of Form';
981
+ break;
982
+ case InternalInterface.MG_ACT_VERTICAL_CENTER:
983
+ description = 'Vertical Center';
984
+ break;
985
+ case InternalInterface.MG_ACT_VIEW_BY_KEY:
986
+ description = 'View by Key';
987
+ break;
988
+ case InternalInterface.MG_ACT_RT_REFRESH_VIEW:
989
+ description = 'View Refresh';
990
+ break;
991
+ case InternalInterface.MG_ACT_VIRTUAL_VARIABLES:
992
+ description = 'Variables';
993
+ break;
994
+ case InternalInterface.MG_ACT_VISUAL_CONNECTION:
995
+ description = 'Visual Connection';
996
+ break;
997
+ case InternalInterface.MG_ACT_HIT:
998
+ description = 'Window Hit';
999
+ break;
1000
+ case InternalInterface.MG_ACT_WINMOVE:
1001
+ description = 'Window Reposition';
1002
+ break;
1003
+ case InternalInterface.MG_ACT_WINSIZE:
1004
+ description = 'Window Resize';
1005
+ break;
1006
+ case InternalInterface.MG_ACT_ZOOM:
1007
+ description = 'Zoom';
1008
+ break;
1009
+ case InternalInterface.MG_ACT_LOCKING_DETAILS:
1010
+ description = 'Locking Details';
1011
+ break;
1012
+ case InternalInterface.MG_ACT_LOCKING_ABORT:
1013
+ description = 'Locking Abort';
1014
+ break;
1015
+ case InternalInterface.MG_ACT_LOCKING_RETRY:
1016
+ description = 'Locking Retry';
1017
+ break;
1018
+ case InternalInterface.MG_ACT_CHECK_OBJECT_LIST:
1019
+ description = 'Check Object List';
1020
+ break;
1021
+ case InternalInterface.MG_ACT_USERS_LIST:
1022
+ description = 'Users List';
1023
+ break;
1024
+ case InternalInterface.MG_ACT_MODELS:
1025
+ description = 'Models';
1026
+ break;
1027
+ case InternalInterface.MG_ACT_WEB_CLICK:
1028
+ description = 'Click';
1029
+ break;
1030
+ case InternalInterface.MG_ACT_WEB_ON_DBLICK:
1031
+ description = 'DblClick';
1032
+ break;
1033
+ case InternalInterface.MG_ACT_BROWSER_ESC:
1034
+ description = 'Esc';
1035
+ break;
1036
+ case InternalInterface.MG_ACT_ROLLBACK:
1037
+ description = 'Rollback';
1038
+ break;
1039
+ case InternalInterface.MG_ACT_EMPTY_DATAVIEW:
1040
+ description = 'Empty Dataview';
1041
+ break;
1042
+ case InternalInterface.MG_ACT_CTRL_MODIFY:
1043
+ description = 'Control Modify';
1044
+ break;
1045
+ case InternalInterface.MG_ACT_PRINT_DATA:
1046
+ description = 'Print Data';
1047
+ break;
1048
+ case InternalInterface.MG_ACT_POST_REFRESH_BY_PARENT:
1049
+ description = 'Post Refresh by Parent';
1050
+ break;
1051
+ case InternalInterface.MG_ACT_SWITCH_TO_OFFLINE:
1052
+ description = 'Switch To Offline';
1053
+ break;
1054
+ case InternalInterface.MG_ACT_UNAVAILABLE_SERVER:
1055
+ description = 'Unavailable Server';
1056
+ break;
1057
+ case InternalInterface.MG_ACT_CONTEXT_MENU:
1058
+ description = 'Context Menu';
1059
+ break;
1060
+ case InternalInterface.MG_ACT_ENTER_ROW_EDITING:
1061
+ description = 'Enter Row Editing';
1062
+ break;
1063
+ case InternalInterface.MG_ACT_NO_PROG_EXE_RIGHTS:
1064
+ description = 'No Program Execution Rights';
1065
+ break;
1066
+ case InternalInterface.MG_ACT_WEBCLIENT_ROUTE:
1067
+ description = 'Route';
1068
+ break;
1069
+ case InternalInterface.MG_ACT_COL_SORT:
1070
+ description = 'Column Sort';
1071
+ break;
1072
+ case InternalInterface.MG_ACT_ROW_DATA_CURR_PAGE:
1073
+ description = 'Get Rows';
1074
+ break;
1075
+ case InternalInterface.MG_ACT_SUBFORM_CLOSE:
1076
+ description = 'Subform Close';
1077
+ break;
1078
+ case InternalInterface.MG_ACT_SUBFORM_REFRESH:
1079
+ description = 'Subform Refresh';
1080
+ break;
1081
+ case InternalInterface.MG_ACT_SUBFORM_OPEN:
1082
+ description = 'Subform Open';
1083
+ break;
1084
+ case InternalInterface.MG_ACT_COMPUTE:
1085
+ description = 'Compute';
1086
+ break;
1087
+ case InternalInterface.MG_ACT_CACHE_NEXT:
1088
+ description = 'Get Next Data';
1089
+ break;
1090
+ case InternalInterface.MG_ACT_CACHE_PREV:
1091
+ description = 'Get Previous Data';
1092
+ break;
1093
+ case InternalInterface.MG_ACT_FETCH_DATA_CONTROL_VALUES:
1094
+ description = 'Fetch data control values';
1095
+ break;
1096
+ case InternalInterface.MG_ACT_INDEX_CHANGE:
1097
+ description = 'Index Change';
1098
+ break;
1099
+ case InternalInterface.MG_ACT_DUMP_ENVIRONMENT:
1100
+ description = 'Dump Environment';
1101
+ break;
1102
+ default:
1103
+ description = '';
1104
+ break;
1105
+ }
1106
+ return description;
1107
+ }
1108
+ getUserEventType() {
1109
+ if (this.UserEvt === null)
1110
+ return ConstInterface.EVENT_TYPE_NOTINITED;
1111
+ return this.UserEvt.getType();
1112
+ }
1113
+ getSecondsOfUserEvent() {
1114
+ return this.UserEvt.getSeconds();
1115
+ }
1116
+ getUserEvent() {
1117
+ return this.UserEvt;
1118
+ }
1119
+ getKeyboardItemString() {
1120
+ let kbi = this.getKbdItm();
1121
+ if (kbi === null)
1122
+ return '';
1123
+ return kbi.ToString();
1124
+ }
1125
+ seconds2String() {
1126
+ let time = new Array(3);
1127
+ let buffer = '';
1128
+ time[0] = Math.floor(this._seconds / 3600);
1129
+ time[1] = Math.floor((this._seconds - time[0] * 3600) / 60);
1130
+ time[2] = this._seconds % 60;
1131
+ for (let i = 0; i < time.length; i++) {
1132
+ if (time[i] === 0)
1133
+ buffer += '00';
1134
+ else if (time[i] < 10)
1135
+ buffer += ('0' + time[i]);
1136
+ else
1137
+ buffer += time[i];
1138
+ if (i < time.length - 1)
1139
+ buffer += ':';
1140
+ }
1141
+ return buffer;
1142
+ }
1143
+ parseParamVal(valueStr) {
1144
+ let startOfs = 0, endOfs = 0, nLen, j;
1145
+ let sLen, sValue = null;
1146
+ for (j = 0; j < this._parameters; j++) {
1147
+ switch (this._paramAttrs[j]) {
1148
+ case StorageAttribute.SKIP:
1149
+ sValue = '';
1150
+ break;
1151
+ case StorageAttribute.ALPHA:
1152
+ case StorageAttribute.BLOB_VECTOR:
1153
+ case StorageAttribute.BLOB:
1154
+ case StorageAttribute.MEMO:
1155
+ case StorageAttribute.UNICODE:
1156
+ endOfs = startOfs + 4;
1157
+ sLen = valueStr.substr(startOfs, (endOfs) - (startOfs));
1158
+ nLen = NNumber.Parse(sLen, NumberStyles.HexNumber);
1159
+ startOfs = endOfs;
1160
+ if (AccessHelper.environment.GetDebugLevel() > 1 || this._paramAttrs[j] === StorageAttribute.ALPHA || this._paramAttrs[j] === StorageAttribute.UNICODE || this._paramAttrs[j] === StorageAttribute.MEMO) {
1161
+ if ((nLen & 0x8000) > 0) {
1162
+ nLen = (nLen & 0x7FFF);
1163
+ nLen *= 2;
1164
+ let res = new StringBuilder();
1165
+ endOfs += RecordUtils.getSpannedField(valueStr, nLen, startOfs, this._paramAttrs[j], res, true);
1166
+ valueStr = res.ToString();
1167
+ }
1168
+ else {
1169
+ endOfs = startOfs + nLen;
1170
+ sValue = valueStr.substr(startOfs, (endOfs) - (startOfs));
1171
+ }
1172
+ }
1173
+ else {
1174
+ if ((nLen & 0x8000) > 0) {
1175
+ nLen = (nLen & 0x7FFF);
1176
+ nLen = Math.floor((nLen + 2) / 3) * 4;
1177
+ let res = new StringBuilder();
1178
+ endOfs += RecordUtils.getSpannedField(valueStr, nLen, startOfs, this._paramAttrs[j], res, false);
1179
+ sValue = res.ToString();
1180
+ }
1181
+ else {
1182
+ endOfs = startOfs + Math.floor((nLen + 2) / 3) * 4;
1183
+ sValue = Base64.decode(valueStr.substr(startOfs, (endOfs) - (startOfs)));
1184
+ }
1185
+ }
1186
+ break;
1187
+ case StorageAttribute.NUMERIC:
1188
+ case StorageAttribute.DATE:
1189
+ case StorageAttribute.TIME:
1190
+ if (AccessHelper.environment.GetDebugLevel() > 1) {
1191
+ endOfs = startOfs + AccessHelper.environment.GetSignificantNumSize() * 2;
1192
+ sValue = valueStr.substr(startOfs, (endOfs) - (startOfs));
1193
+ }
1194
+ else {
1195
+ endOfs = startOfs + (Math.floor((AccessHelper.environment.GetSignificantNumSize() + 2) / 3) * 4);
1196
+ sValue = Base64.decodeToHex(valueStr.substr(startOfs, (endOfs) - (startOfs)));
1197
+ }
1198
+ break;
1199
+ case StorageAttribute.BOOLEAN:
1200
+ endOfs = startOfs + 1;
1201
+ sValue = valueStr.substr(startOfs, (endOfs) - (startOfs));
1202
+ break;
1203
+ }
1204
+ this._paramVals[j] = sValue;
1205
+ startOfs = endOfs;
1206
+ }
1207
+ return endOfs;
1208
+ }
1209
+ getParamNum() {
1210
+ return this._parameters;
1211
+ }
1212
+ isControlHeader() {
1213
+ return this.getType() == ConstInterface.EVENT_TYPE_INTERNAL &&
1214
+ (this.getInternalCode() == InternalInterface.MG_ACT_CTRL_PREFIX ||
1215
+ this.getInternalCode() == InternalInterface.MG_ACT_CTRL_SUFFIX ||
1216
+ this.getInternalCode() == InternalInterface.MG_ACT_CTRL_VERIFICATION);
1217
+ }
1218
+ isVariableHeader() {
1219
+ return this.getType() == ConstInterface.EVENT_TYPE_INTERNAL &&
1220
+ this.getInternalCode() == InternalInterface.MG_ACT_VARIABLE;
1221
+ }
1222
+ AppendDescription(buffer) {
1223
+ switch (this._type) {
1224
+ case ConstInterface.EVENT_TYPE_INTERNAL:
1225
+ buffer.Append(Event.getInternalEvtDescription(this.InternalEvent));
1226
+ break;
1227
+ case ConstInterface.EVENT_TYPE_SYSTEM:
1228
+ buffer.Append(this.getKeyboardItemString());
1229
+ break;
1230
+ case ConstInterface.EVENT_TYPE_USER:
1231
+ buffer.Append(this.getUsrEvntDesc());
1232
+ break;
1233
+ case ConstInterface.EVENT_TYPE_USER_FUNC:
1234
+ buffer.Append(this._userDefinedFuncName);
1235
+ break;
1236
+ case ConstInterface.EVENT_TYPE_TIMER:
1237
+ buffer.Append(this.seconds2String());
1238
+ break;
1239
+ case ConstInterface.EVENT_TYPE_EXPRESSION:
1240
+ buffer.Append('ID ' + this.Exp.getId().toString());
1241
+ break;
1242
+ default:
1243
+ buffer.Append('unknown event type ');
1244
+ break;
1245
+ }
1246
+ }
1247
+ isNewInternalEvent() {
1248
+ return this.InternalEvent >= 1001 && this.InternalEvent <= 1008;
1249
+ }
1250
+ getNewInternalEventDescription() {
1251
+ let eventDesc = NString.Empty;
1252
+ switch (this.InternalEvent) {
1253
+ case InternalInterface.MG_ACT_TASK_PREFIX:
1254
+ eventDesc = ConstInterface.BRK_LEVEL_TASK_PREFIX_FM;
1255
+ break;
1256
+ case InternalInterface.MG_ACT_TASK_SUFFIX:
1257
+ eventDesc = ConstInterface.BRK_LEVEL_TASK_SUFFIX_FM;
1258
+ break;
1259
+ case InternalInterface.MG_ACT_REC_PREFIX:
1260
+ eventDesc = ConstInterface.BRK_LEVEL_REC_PREFIX_FM;
1261
+ break;
1262
+ case InternalInterface.MG_ACT_REC_SUFFIX:
1263
+ eventDesc = ConstInterface.BRK_LEVEL_REC_SUFFIX_FM;
1264
+ break;
1265
+ case InternalInterface.MG_ACT_CTRL_PREFIX:
1266
+ eventDesc = ConstInterface.BRK_LEVEL_CTRL_PREFIX_FM;
1267
+ break;
1268
+ case InternalInterface.MG_ACT_CTRL_SUFFIX:
1269
+ eventDesc = ConstInterface.BRK_LEVEL_CTRL_SUFFIX_FM;
1270
+ break;
1271
+ case InternalInterface.MG_ACT_CTRL_VERIFICATION:
1272
+ eventDesc = ConstInterface.BRK_LEVEL_CTRL_VERIFICATION_FM;
1273
+ break;
1274
+ case InternalInterface.MG_ACT_VARIABLE:
1275
+ eventDesc = ConstInterface.BRK_LEVEL_VARIABLE_FM;
1276
+ break;
1277
+ }
1278
+ return eventDesc;
1279
+ }
1280
+ getEventType() {
1281
+ return this.isNewInternalEvent()
1282
+ ? NString.TrimEnd(this.getNewInternalEventDescription())
1283
+ : this.getEventTypeString();
1284
+ }
1285
+ getEventTypeString() {
1286
+ let eventType;
1287
+ switch (this.getType()) {
1288
+ case ConstInterface.EVENT_TYPE_INTERNAL:
1289
+ eventType = 'Internal Event:';
1290
+ break;
1291
+ case ConstInterface.EVENT_TYPE_SYSTEM:
1292
+ eventType = 'System Event:';
1293
+ break;
1294
+ case ConstInterface.EVENT_TYPE_EXPRESSION:
1295
+ eventType = 'Expression Event:';
1296
+ break;
1297
+ case ConstInterface.EVENT_TYPE_TIMER:
1298
+ eventType = 'Timer Event:';
1299
+ break;
1300
+ case ConstInterface.EVENT_TYPE_USER:
1301
+ eventType = 'User Event:';
1302
+ break;
1303
+ default:
1304
+ eventType = '';
1305
+ break;
1306
+ }
1307
+ return eventType;
1308
+ }
1309
+ setUserDefinedFuncName(name) {
1310
+ this._userDefinedFuncName = name;
1311
+ let functionNameUpper = this._userDefinedFuncName.toUpperCase();
1312
+ this._userDefinedFuncNameHashCode = HashUtils.GetHashCode(functionNameUpper);
1313
+ }
1314
+ getUserDefinedFuncName() {
1315
+ return this._userDefinedFuncName;
1316
+ }
1317
+ getUserDefinedFuncNameHashCode() {
1318
+ return this._userDefinedFuncNameHashCode;
1319
+ }
1320
+ getUserDefinedFuncRetExp() {
1321
+ return this._returnExp;
1322
+ }
1323
+ setTimestamp() {
1324
+ this._timestamp = Event._lastTimestamp++;
1325
+ }
1326
+ getTimestamp() {
1327
+ return this._timestamp;
1328
+ }
1329
+ toString() {
1330
+ return NString.Format('{{Event: {0}}}', this.getBrkLevel());
1331
+ }
1332
+ }
1333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2V2ZW50L0V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsSUFBSSxFQUNKLFNBQVMsRUFDVCxLQUFLLEVBRUwsT0FBTyxFQUNQLE9BQU8sRUFDUCxZQUFZLEVBQ1osUUFBUSxFQUNSLGFBQWEsRUFDZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sSUFBSSxFQUNKLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxXQUFXLEVBRVgsK0JBQStCLEVBQ2hDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUsvQyxNQUFNLE9BQU8sS0FBSztJQUlSLE1BQU0sQ0FBQyxjQUFjLEdBQVcsQ0FBQyxDQUFDO0lBQzFDLEdBQUcsR0FBZSxJQUFJLENBQUM7SUFDdkIsVUFBVSxHQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDdkMsTUFBTSxHQUFpQixJQUFJLENBQUM7SUFFNUIsV0FBVyxHQUFXLElBQUksQ0FBQztJQUMzQixXQUFXLEdBQVcsSUFBSSxDQUFDO0lBQzNCLFVBQVUsR0FBYSxJQUFJLENBQUM7SUFDNUIsV0FBVyxHQUFXLENBQUMsQ0FBQztJQUNoQixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBRS9CLFFBQVEsR0FB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QyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uRXhjZXB0aW9uLFxyXG4gIENoYXIsXHJcbiAgSGFzaFV0aWxzLFxyXG4gIEludDMyLFxyXG4gIExpc3QsXHJcbiAgTk51bWJlcixcclxuICBOU3RyaW5nLFxyXG4gIE51bWJlclN0eWxlcyxcclxuICBSZWZQYXJhbSxcclxuICBTdHJpbmdCdWlsZGVyXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1xyXG4gIEJhc2U2NCxcclxuICBGb3JjZUV4aXQsXHJcbiAgSW50ZXJuYWxJbnRlcmZhY2UsXHJcbiAgTG9nZ2VyLFxyXG4gIE1pc2MsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdHJVdGlsLFxyXG4gIFhNTENvbnN0YW50cyxcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtcclxuICBEaXNwbGF5Q29udmVydG9yLFxyXG4gIEtleWJvYXJkSXRlbSxcclxuICBNb2RpZmllcnMsXHJcbiAgUmVjb3JkVXRpbHMsXHJcbiAgVGFza0RlZmluaXRpb25JZCxcclxuICBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwL0V4cHJlc3Npb24nO1xyXG5pbXBvcnQgeyBDb25zdEludGVyZmFjZSB9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVGFza0Jhc2UgfSBmcm9tICcuLi90YXNrcy9UYXNrQmFzZSc7XHJcbmltcG9ydCB7IExhc3RGb2N1c2VkTWFuYWdlciB9IGZyb20gJy4uL3J0L0xhc3RGb2N1c2VkTWFuYWdlcic7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gJy4uL0FjY2Vzc0hlbHBlcic7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHRoaXMgY2xhc3MgcmVwcmVzZW50IHRoZSBldmVudCBlbnRpdHlcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEV2ZW50IHtcclxuICAvLyBBVFRFTlRJT04gIVxyXG4gIC8vIGFueSBjaGFuZ2UgdG8gdGhlIG1lbWJlciB2YXJpYWJsZXMgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGNoYW5nZSB0byB0aGUgQ1RPUiB0aGF0XHJcbiAgLy8gZ2V0cyBvbmUgYXJndW1lbnQgb2YgdGhlIHR5cGUgJ0V2ZW50Jy5cclxuICBwcml2YXRlIHN0YXRpYyBfbGFzdFRpbWVzdGFtcDogbnVtYmVyID0gMDsgLy8gbGFzdCB0aW1lc3RhbXBcclxuICBFeHA6IEV4cHJlc3Npb24gPSBudWxsOyAvLyBmb3IgZXhwcmVzc2lvbiBldmVudHMgLSB0aGUgZXhwcmVzc2lvbiBudW1iZXJcclxuICBfZm9yY2VFeGl0OiBGb3JjZUV4aXQgPSBGb3JjZUV4aXQuTm9uZTsgLy8gVGhlIOKAnGZvcmNlIGV4aXQ/aXMgb25lIG9mOiBSZWNvcmQsIENvbnRyb2wsIE5vbmUuIFRoaXMgYXR0cmlidXRlIGlzIHJlbGV2YW50IG9ubHkgZm9yIGV2ZW50cyBpbiB0aGUg4oCcdXNlciBldmVudHM/dGFibGUuXHJcbiAga2JkSXRtOiBLZXlib2FyZEl0ZW0gPSBudWxsOyAvLyBmb3Igc3lzdGVtIGV2ZW50c1xyXG5cclxuICBfcGFyYW1BdHRyczogc3RyaW5nID0gbnVsbDtcclxuICBfcGFyYW1OdWxsczogc3RyaW5nID0gbnVsbDtcclxuICBfcGFyYW1WYWxzOiBzdHJpbmdbXSA9IG51bGw7XHJcbiAgX3BhcmFtZXRlcnM6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfcmV0dXJuRXhwOiBudW1iZXIgPSAwO1xyXG4gIC8qIGV4cHJlc3Npb24gbnVtYmVyIHRvIHNwZWNpZnkgdGhlIEZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlICovXHJcbiAgX3NlY29uZHM6IG51bWJlciA9IEludDMyLk1pblZhbHVlOyAvLyBmb3IgdGltZXIgZXZlbnRzXHJcbiAgX3RpbWVzdGFtcDogbnVtYmVyID0gMDtcclxuICBfdHlwZTogc3RyaW5nID0gQ2hhci5NaW5WYWx1ZTsgLy8gU3lzdGVtfEludGVybmFsfFRpbWVyfEV4cHJlc3Npb258VXNlcnxOb25lXHJcbiAgcHJpdmF0ZSBfdXNlckRlZmluZWRGdW5jTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF91c2VyRGVmaW5lZEZ1bmNOYW1lSGFzaENvZGU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdXNlckV2dERlc2M6IHN0cmluZyA9ICcnO1xyXG4gIF91c2VyRXZ0SWR4OiBudW1iZXIgPSBJbnQzMi5NaW5WYWx1ZTsgLy8gdGhlIGluZGV4IG9mIHRoZSB1c2VyIGV2ZW50IGluIHRoZSB0YXNrcyB1c2VyIGV2ZW50cyB0YWJsZVxyXG5cclxuICBJbnRlcm5hbEV2ZW50OiBudW1iZXIgPSAwOyAvLyBpbnRlcm5hbCBldmVudCBjb2RlXHJcbiAgUHVibGljTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBVc2VyRXZ0OiBFdmVudCA9IG51bGw7XHJcbiAgVXNlckV2dFRhc2tUYWc6IHN0cmluZyA9IG51bGw7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuSW50ZXJuYWxFdmVudCA9IEludDMyLk1pblZhbHVlO1xyXG4gICAgdGhpcy5zZXRUaW1lc3RhbXAoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb3B5IENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcl8xKGV2dDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX3R5cGUgPSBldnQuX3R5cGU7XHJcbiAgICB0aGlzLmtiZEl0bSA9IGV2dC5rYmRJdG07XHJcbiAgICB0aGlzLkludGVybmFsRXZlbnQgPSBldnQuSW50ZXJuYWxFdmVudDtcclxuICAgIHRoaXMuX3NlY29uZHMgPSBldnQuX3NlY29uZHM7XHJcbiAgICB0aGlzLkV4cCA9IGV2dC5FeHA7XHJcbiAgICB0aGlzLl9mb3JjZUV4aXQgPSBldnQuX2ZvcmNlRXhpdDtcclxuICAgIHRoaXMuVXNlckV2dCA9IGV2dC5Vc2VyRXZ0O1xyXG4gICAgdGhpcy5Vc2VyRXZ0VGFza1RhZyA9IGV2dC5Vc2VyRXZ0VGFza1RhZztcclxuICAgIHRoaXMuX3VzZXJFdnRJZHggPSBldnQuX3VzZXJFdnRJZHg7XHJcbiAgICB0aGlzLl90aW1lc3RhbXAgPSAwO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldCBGb3JjZUV4aXQoKTogRm9yY2VFeGl0IHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JjZUV4aXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTmVlZCBwYXJ0IGlucHV0IFN0cmluZyB0byByZWxldmFudCBmb3IgdGhlIGNsYXNzIGRhdGEuXHJcbiAgLy8vICAgaW5kZXggb2YgZW5kIDxldmVudCAuLi4+IHRhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ4bWxQYXJzZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPjwvcGFyYW0+XHJcbiAgZmlsbERhdGEoeG1sUGFyc2VyOiBYbWxQYXJzZXIsIHRhc2tSZWY6IFRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICBsZXQgdXNlclZhbHVlOiBzdHJpbmc7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0geG1sUGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHhtbFBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBzdHJpbmcgPSB4bWxQYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICB4bWxQYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5ULmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHhtbFBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcblxyXG4gICAgICBsZXQgcmVmVXNlclZhbHVlOiBSZWZQYXJhbTxzdHJpbmc+ID0gbmV3IFJlZlBhcmFtKHVzZXJWYWx1ZSk7XHJcblxyXG4gICAgICB0aGlzLmluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3IsIHRhc2tSZWYsIHJlZlVzZXJWYWx1ZSk7XHJcbiAgICAgIHVzZXJWYWx1ZSA9IHJlZlVzZXJWYWx1ZS52YWx1ZTtcclxuXHJcbiAgICAgIHhtbFBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UubGVuZ3RoKTsgLy8gdG8gZGVsZXRlIFwiPlwiIHRvb1xyXG5cclxuICAgICAgdGhpcy5Jbml0SW5uZXJPYmplY3RzKHhtbFBhcnNlcik7XHJcblxyXG4gICAgICBpZiAodXNlclZhbHVlICE9PSBudWxsKVxyXG4gICAgICAgIHRoaXMuSW5pdFVzZXJEYXRhKHRhc2tSZWYsIHVzZXJWYWx1ZSk7XHJcbiAgICB9IGVsc2VcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdpbiBFdmVudC5GaWxsRGF0YSgpIG91dCBvZiBzdHJpbmcgYm91bmRzJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEluaXRJbm5lck9iamVjdHMoeG1sUGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIGxldCBuZXh0VGFnOiBzdHJpbmcgPSB4bWxQYXJzZXIuZ2V0TmV4dFRhZygpO1xyXG4gICAgc3dpdGNoIChuZXh0VGFnKSB7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19UQVNLREVGSU5JVElPTklEX0VOVFJZOlxyXG4gICAgICAgIGxldCB4bWxCdWZmZXI6IHN0cmluZyA9IHhtbFBhcnNlci5SZWFkVG9FbmRPZkN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgICAgdGhpcy5Jbml0VGFza0RlZmluaXRpb25JZCh4bWxCdWZmZXIpO1xyXG5cclxuICAgICAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0geG1sUGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19FVkVOVCArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgeG1sUGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgKENvbnN0SW50ZXJmYWNlLk1HX1RBR19FVkVOVCArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UpLmxlbmd0aCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWFrZSBpbml0aWFsaXphdGlvbiBvZiBwcml2YXRlIGVsZW1lbnRzIGJ5IGZvdW5kIHRva2Vuc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b2tlbnNWZWN0b3JcIj5mb3VuZCB0b2tlbnMsIHdoaWNoIGNvbnNpc3QgYXR0cmlidXRlL3ZhbHVlIG9mIGV2ZXJ5IGZvdW5kZWxlbWVudDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiwgdGFza1JlZjogVGFza0Jhc2UsIHJlZlVzZXJWYWx1ZTogUmVmUGFyYW08c3RyaW5nPik6IHZvaWQge1xyXG4gICAgbGV0IG1vZGlmaWVyOiBNb2RpZmllcnMgPSBNb2RpZmllcnMuTU9ESUZJRVJfTk9ORTtcclxuICAgIGxldCBrZXlDb2RlOiBudW1iZXIgPSAtMTtcclxuICAgIHJlZlVzZXJWYWx1ZS52YWx1ZSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdG9rZW5zVmVjdG9yLmxlbmd0aDsgaiArPSAyKSB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaikpO1xyXG4gICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaiArIDEpKTtcclxuXHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VWRU5UVFlQRTpcclxuICAgICAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vIFN5c3RlbXxJbnRlcm5hbHxVc2VyfFRpbWVyfEV4cHJlc3Npb258UmVjb21wdXRlXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX01PRElGSUVSOlxyXG4gICAgICAgICAgbW9kaWZpZXIgPSA8TW9kaWZpZXJzPnZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8gQWx0fEN0cmx8U2hpZnR8Tm9uZVxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JTlRFUk5BTEVWRU5UOlxyXG4gICAgICAgICAgdGhpcy5JbnRlcm5hbEV2ZW50ID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfS0VZQ09ERTpcclxuICAgICAgICAgIGtleUNvZGUgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TRUNPTkRTOlxyXG4gICAgICAgICAgdGhpcy5fc2Vjb25kcyA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9FWFA6XHJcbiAgICAgICAgICAvLyBmb3IgZXhwcmVzc2lvbiBldmVudHMgLSB0aGUgZXhwcmVzc2lvbiBudW1iZXJcclxuICAgICAgICAgIHRoaXMuRXhwID0gdGFza1JlZi5nZXRFeHBCeUlkKFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9GT1JDRV9FWElUOlxyXG4gICAgICAgICAgdGhpcy5fZm9yY2VFeGl0ID0gPEZvcmNlRXhpdD52YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERVNDOlxyXG4gICAgICAgICAgdGhpcy5fdXNlckV2dERlc2MgPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BVQkxJQzpcclxuICAgICAgICAgIHRoaXMuUHVibGljTmFtZSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUEFSQU1TOlxyXG4gICAgICAgICAgdGhpcy5fcGFyYW1ldGVycyA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BBUl9BVFRSUzpcclxuICAgICAgICAgIHRoaXMuX3BhcmFtQXR0cnMgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVkFMVUU6XHJcbiAgICAgICAgICBsZXQgcGFyYW1TdHI6IHN0cmluZyA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICB0aGlzLl9wYXJhbVZhbHMgPSBuZXcgQXJyYXkodGhpcy5fcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAvLyBwdXQgdGhlIHBhcmFtVmFscyBpbiBwbGFjZVxyXG4gICAgICAgICAgdGhpcy5wYXJzZVBhcmFtVmFsKHBhcmFtU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9OVUxMUzpcclxuICAgICAgICAgIHRoaXMuX3BhcmFtTnVsbHMgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSOlxyXG4gICAgICAgICAgcmVmVXNlclZhbHVlLnZhbHVlID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBVU0VSIGV2ZW50XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9OQU1FOlxyXG4gICAgICAgICAgdGhpcy5zZXRVc2VyRGVmaW5lZEZ1bmNOYW1lKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1VTUl9ERUZfRlVDX1JFVF9FWFBfSUQ6XHJcbiAgICAgICAgICB0aGlzLl9yZXR1cm5FeHAgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1VTUl9ERUZfRlVDX1JFVF9FWFBfQVRUUjpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoJ1RoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIEV2ZW50IGNsYXNzLiBJbnNlcnQgY2FzZSB0byBFdmVudC5pbml0RWxlbWVudHMgZm9yIHswfScsIGF0dHJpYnV0ZSkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1NZU1RFTSlcclxuICAgICAgdGhpcy5rYmRJdG0gPSBuZXcgS2V5Ym9hcmRJdGVtKGtleUNvZGUsIG1vZGlmaWVyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUGVyZm9ybSB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tIHRoZSBcInVzZXJcIiBhdHRyaWJ1dGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFza1JlZlwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBJbml0VXNlckRhdGEodGFza1JlZjogVGFza0Jhc2UsIHVzZXJWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgY29tbWE6IG51bWJlciA9IHVzZXJWYWx1ZS5pbmRleE9mKCcsJyk7XHJcbiAgICBpZiAoY29tbWEgPiAtMSkge1xyXG4gICAgICBsZXQgdWVUYXNrSWQ6IHN0cmluZyA9IHVzZXJWYWx1ZS5zdWJzdHIoMCwgY29tbWEpO1xyXG4gICAgICBpZiAodGFza1JlZiAhPT0gbnVsbClcclxuICAgICAgICB1ZVRhc2tJZCA9IHRhc2tSZWYuVGFza1NlcnZpY2UuR2V0RXZlbnRUYXNrSWQodWVUYXNrSWQpO1xyXG5cclxuICAgICAgbGV0IHVlVGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldFRhc2tCeUlEKHVlVGFza0lkKTtcclxuXHJcbiAgICAgIGxldCB1ZUlkeDogbnVtYmVyID0gWG1sUGFyc2VyLmdldEludCh1c2VyVmFsdWUuc3Vic3RyKGNvbW1hICsgMSkpO1xyXG5cclxuICAgICAgaWYgKHVlVGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuVXNlckV2dCA9IHVlVGFzay5nZXRVc2VyRXZlbnQodWVJZHgpO1xyXG4gICAgICAgIGlmICh0aGlzLlVzZXJFdnQgPT09IG51bGwpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbignaW4gRXZlbnQuZmlsbERhdGEoKTogdXNlciBldmVudCBub3QgZm91bmQuIHRhc2sgaWQgPSAnICsgdWVUYXNrSWQgK1xyXG4gICAgICAgICAgICAnLCB1c2VyIGV2ZW50IGluZGV4ID0gJyArIHVlSWR4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5Vc2VyRXZ0VGFza1RhZyA9IHVlVGFza0lkO1xyXG4gICAgICAgIHRoaXMuX3VzZXJFdnRJZHggPSB1ZUlkeDtcclxuICAgICAgfVxyXG4gICAgICAvLyB0aGUgdGFzayBoYXNuJ3QgYmVlbiBmb3VuZCwgaXQgbm90IHBhcnNlZCwgeWV0XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuVXNlckV2dFRhc2tUYWcgPSB1ZVRhc2tJZDtcclxuICAgICAgICB0aGlzLl91c2VyRXZ0SWR4ID0gdWVJZHg7XHJcbiAgICAgICAgdGhpcy5Vc2VyRXZ0ID0gbnVsbDsgLy8gY2FuIG5vdCBiZSBpbml0aWFsaXplZCBvbiB0aGlzIHN0ZXBcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBJbml0VGFza0RlZmluaXRpb25JZCh4bWxCdWZmZXI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGhhbmRsZXI6IFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIgPSBuZXcgVGFza0RlZmluaXRpb25JZFRhYmxlU2F4SGFuZGxlcih0aGlzLlNldFRhc2tEZWZpbml0aW9uSWQpO1xyXG4gICAgaGFuZGxlci5wYXJzZSh4bWxCdWZmZXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjYWxsYmFjayBmb3IgdGhlIHNheCBwYXJzZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRhc2tEZWZpbml0aW9uSWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInhtbElkXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWZhdWx0VGFnTGlzdFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBTZXRUYXNrRGVmaW5pdGlvbklkKHRhc2tEZWZpbml0aW9uSWQ6IFRhc2tEZWZpbml0aW9uSWQpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaW5kIHRhc2sgZm9yIFVzZXIgRXZlbnQgaWYgaXQgd2FzIG5vdCBmb3VuZCBkdXJpbmcgcGFyc2luZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmluZFVzZXJFdmVudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIgJiYgdGhpcy5Vc2VyRXZ0ID09PSBudWxsKSB7XHJcbiAgICAgIGxldCB1ZVRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh0aGlzLlVzZXJFdnRUYXNrVGFnKTtcclxuICAgICAgaWYgKHVlVGFzayAhPT0gbnVsbClcclxuICAgICAgICB0aGlzLlVzZXJFdnQgPSB1ZVRhc2suZ2V0VXNlckV2ZW50KHRoaXMuX3VzZXJFdnRJZHgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuVXNlckV2dCA9PT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oTlN0cmluZy5Gb3JtYXQoJ2luIEV2ZW50LmZpbmRVc2VyRXZlbnQoKTogdXNlciBldmVudCBub3QgZm91bmQuIHRhc2sgaWQgPSB7MH0gZG9lc25cXCd0IGV4aXN0JywgdGhpcy5Vc2VyRXZ0VGFza1RhZykpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb21wYXJlIHRoaXMgZXZlbnQgdG8gYW5vdGhlciAtIHJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZXZlbnRzIGFyZSBpZGVudGljYWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGVxdWFscyhldnQ6IEV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYkVxdWFsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gY29tcGFyZSByZWZlcmVuY2VzXHJcbiAgICBpZiAodGhpcyA9PT0gZXZ0KVxyXG4gICAgICBiRXF1YWwgPSB0cnVlO1xyXG4gICAgLy8gZG8gc2hhbGxvdyBjb21wYXJpc2lvblxyXG4gICAgZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gZXZ0Ll90eXBlKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU06XHJcbiAgICAgICAgICBiRXF1YWwgPSB0aGlzLmtiZEl0bS5lcXVhbHMoZXZ0LmtiZEl0bSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMOlxyXG4gICAgICAgICAgYkVxdWFsID0gKHRoaXMuSW50ZXJuYWxFdmVudCA9PT0gZXZ0LkludGVybmFsRXZlbnQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9USU1FUjpcclxuICAgICAgICAgIGJFcXVhbCA9ICh0aGlzLl9zZWNvbmRzID09PSBldnQuX3NlY29uZHMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9FWFBSRVNTSU9OOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9QVUJMSUM6XHJcbiAgICAgICAgICBiRXF1YWwgPSAodGhpcy5FeHAgPT09IGV2dC5FeHApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSOlxyXG4gICAgICAgICAgYkVxdWFsID0gKHRoaXMuVXNlckV2dCA9PT0gZXZ0LlVzZXJFdnQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSX0ZVTkM6XHJcbiAgICAgICAgICBpZiAodGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlID09PSBldnQuZ2V0VXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlKCkpIHtcclxuICAgICAgICAgICAgaWYgKE5TdHJpbmcuRXF1YWxzKGV2dC5nZXRVc2VyRGVmaW5lZEZ1bmNOYW1lKCksIHRoaXMuX3VzZXJEZWZpbmVkRnVuY05hbWUsIHRydWUpKVxyXG4gICAgICAgICAgICAgIGJFcXVhbCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3IgaW50ZXJuYWwgZXZlbnRzLCBjb21wYXJlIHRoZSBpbnRlcm5hbCBuYW1lc1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfUFVCTElDIHx8IGV2dC5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9QVUJMSUMpIHtcclxuICAgICAgbGV0IG5hbWUxOiBTdHJpbmcgPSBudWxsO1xyXG4gICAgICBsZXQgbmFtZTI6IFN0cmluZyA9IG51bGw7XHJcbiAgICAgIGlmICh0aGlzLl90eXBlICE9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIgJiYgZXZ0Ll90eXBlICE9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIpXHJcbiAgICAgICAgYkVxdWFsID0gZmFsc2U7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfUFVCTElDKSB7XHJcbiAgICAgICAgbmFtZTEgPSB0aGlzLlB1YmxpY05hbWU7XHJcbiAgICAgICAgbmFtZTIgPSBldnQuZ2V0VXNlckV2ZW50KCkuUHVibGljTmFtZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuYW1lMSA9IGV2dC5QdWJsaWNOYW1lO1xyXG4gICAgICAgIG5hbWUyID0gdGhpcy5nZXRVc2VyRXZlbnQoKS5QdWJsaWNOYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuYW1lMSA9PT0gbnVsbCB8fCBuYW1lMiA9PT0gbnVsbClcclxuICAgICAgICBiRXF1YWwgPSBmYWxzZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGJFcXVhbCA9IChuYW1lMSA9PT0gbmFtZTIpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMICYmIGV2dC5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU0pIHtcclxuICAgICAgaWYgKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpICE9PSBudWxsICYmIChBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRNYXRjaGluZ0FjdGlvbihldnQuZ2V0S2JkSXRtKCkpKSA9PT0gdGhpcy5nZXRJbnRlcm5hbENvZGUoKSlcclxuICAgICAgICBiRXF1YWwgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIgJiYgZXZ0Ll90eXBlICE9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIpIHtcclxuICAgICAgLy8gYmVmb3JlIHVzaW5nIHRoZSB1c2VyIGV2ZW50LCBjaGVjayB0aGF0IGl0IGlzIHZhbGlkXHJcbiAgICAgIHRoaXMuZmluZFVzZXJFdmVudCgpO1xyXG5cclxuICAgICAgLy8gaWYgb25lIGV2ZW50IG9mIHRoZSB0d28gaXMgYSB1c2VyIGV2ZW50IGFuZCB0aGUgb3RoZXIgaXNuJ3QgdGhlblxyXG4gICAgICAvLyBjb21wYXJlIHRoZSB0cmlnZ2VyIG9mIHRoZSB1c2VyIGV2ZW50IHRvIHRoZSBub24tdXNlciBldmVudFxyXG4gICAgICBiRXF1YWwgPSB0aGlzLlVzZXJFdnQuZXF1YWxzKGV2dCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYkVxdWFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgaW50ZXJuYWwgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgc2V0UHVibGljTmFtZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIEZvciBhIHJ1bnRpbWUgaW50ZXJuYWwgZXZlbnQgLSBjYWxjdWxhdGUgdGhlIGludGVybmFsIG5hbWUuXHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9QVUJMSUMgJiYgdGhpcy5FeHAgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5QdWJsaWNOYW1lID0gKGF3YWl0IHRoaXMuRXhwLmV2YWx1YXRlV2l0aFJlc0xlbmd0aCgyNTUpKS5tZ1ZhbDtcclxuICAgICAgaWYgKHRoaXMuUHVibGljTmFtZSAhPT0gbnVsbClcclxuICAgICAgICB0aGlzLlB1YmxpY05hbWUgPSBTdHJVdGlsLnJ0cmltKHRoaXMuUHVibGljTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGFuIEludGVybmFsIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvZGVcIj50aGUgY29kZSBvZiB0aGUgaW50ZXJuYWwgZXZlbnQgPC9wYXJhbT5cclxuICBzZXRJbnRlcm5hbChjb2RlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX3R5cGUgPSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMO1xyXG4gICAgdGhpcy5JbnRlcm5hbEV2ZW50ID0gY29kZTtcclxuXHJcbiAgICAvLyBNR19BQ1RfSElUL01HX0FDVF9DVFJMX0hJVCBhcmUgY2F1c2VkIGJ5IG1vdXNlIGNsaWNrLiBJbiB0aGlzIGNhc2VcclxuICAgIC8vIHRpbWUgb2YgbGFzdCB1c2VyIGFjdGlvbiBmb3IgSURMRSBmdW5jdGlvbiBzaG91bGQgYmUgcmUtZXZhbHVhdGVkLlxyXG4gICAgaWYgKGNvZGUgPT09IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ISVQgfHwgY29kZSA9PT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfSElUKVxyXG4gICAgICBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuTGFzdEFjdGlvblRpbWUgPSBNaXNjLmdldFN5c3RlbU1pbGxpc2Vjb25kcygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhbiBFeHByZXNzaW9uIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cFJlZlwiPmEgcmVmZXJlbmNlIHRvIHRoZSBleHByZXNzaW9uIG9iamVjdCA8L3BhcmFtPlxyXG4gIHNldEV4cHJlc3Npb24oZXhwUmVmOiBFeHByZXNzaW9uKTogdm9pZCB7XHJcbiAgICB0aGlzLl90eXBlID0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9FWFBSRVNTSU9OO1xyXG4gICAgdGhpcy5FeHAgPSBleHBSZWY7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IEV4cHJlc3Npb24gb2YgdGhlIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuRXhwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBVc2VyRXZlbnQgZGVzY3JpcHRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZ2V0VXNyRXZudERlc2MoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAodGhpcy5Vc2VyRXZ0ICE9PSBudWxsKSA/IHRoaXMuVXNlckV2dC5fdXNlckV2dERlc2MgOiB0aGlzLl91c2VyRXZ0RGVzYztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSBTeXN0ZW0gZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwia2V5Ym9hcmRJdGVtXCI+dGhlIGtleWJvYXJkIGl0ZW0gb2JqZWN0IDwvcGFyYW0+XHJcbiAgc2V0U3lzdGVtKGtleWJvYXJkSXRlbTogS2V5Ym9hcmRJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLl90eXBlID0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU07XHJcbiAgICB0aGlzLmtiZEl0bSA9IGtleWJvYXJkSXRlbTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSBTeXN0ZW0gZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwia2V5Ym9hcmRJdGVtXCI+dGhlIGtleWJvYXJkIGl0ZW0gb2JqZWN0IDwvcGFyYW0+XHJcbiAgc2V0S2V5Ym9hcmRJdGVtKGtleWJvYXJkSXRlbTogS2V5Ym9hcmRJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLmtiZEl0bSA9IGtleWJvYXJkSXRlbTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdHlwZSByZXR1cm5zIFN5c3RlbXxJbnRlcm5hbHxVc2VyfFRpbWVyfEV4cHJlc3Npb258UmVjb21wdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdHlwZSByZWNlaXZlcyBTeXN0ZW18SW50ZXJuYWx8VXNlcnxUaW1lcnxFeHByZXNzaW9ufFJlY29tcHV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0VHlwZShhVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl90eXBlID0gYVR5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGludGVybmFsIGV2ZW50IGNvZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gaW50IGlzIHRoZSBpbnRlcm5hbCBldmVudCBjb2RlIDwvcmV0dXJucz5cclxuICBnZXRJbnRlcm5hbENvZGUoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMKVxyXG4gICAgICByZXR1cm4gdGhpcy5JbnRlcm5hbEV2ZW50O1xyXG4gICAgcmV0dXJuIEludDMyLk1pblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUga2V5Ym9hcmQgaXRlbVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0S2JkSXRtKCk6IEtleWJvYXJkSXRlbSB7XHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU0pXHJcbiAgICAgIHJldHVybiB0aGlzLmtiZEl0bTtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUga2V5Ym9hcmQgaXRlbVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0S2JkSXRtQWx3YXlzKCk6IEtleWJvYXJkSXRlbSB7XHJcbiAgICByZXR1cm4gdGhpcy5rYmRJdG07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGZvciBub24gZGF0YSBldmVudHMgb3IgZGF0YSBldmVudHMgd2hpY2ggdGhlaXIgZXhwcmVzc2lvblxyXG4gIC8vLyAgIGV2YWx1YXRlcyB0byB0cnVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBkYXRhRXZlbnRJc1RydWUoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcblxyXG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfRVhQUkVTU0lPTiAmJlxyXG4gICAgICAhKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUiAmJiB0aGlzLmdldFVzZXJFdmVudFR5cGUoKSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9FWFBSRVNTSU9OKSlcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSKVxyXG4gICAgICByZXR1cm4gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4oYXdhaXQgdGhpcy5FeHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4sIDApKTtcclxuICAgIHJldHVybiBEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbihhd2FpdCB0aGlzLlVzZXJFdnQuZ2V0RXhwcmVzc2lvbigpLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOLCAwKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBudW1iZXIgb2Ygc2Vjb25kcyAoZm9yIHRpbWVyIGV2ZW50cylcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFNlY29uZHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWNvbmRzO1xyXG4gIH1cclxuXHJcbiAgZ2V0QnJrTGV2ZWwoKTogc3RyaW5nO1xyXG4gIGdldEJya0xldmVsKGZsb3dNb25pdG9yOiBib29sZWFuKTogc3RyaW5nO1xyXG4gIGdldEJya0xldmVsKGZsb3dNb25pdG9yPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRCcmtMZXZlbF8wKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5nZXRCcmtMZXZlbF8xKGZsb3dNb25pdG9yKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGJyZWFrIGxldmVsIG9mIEV2ZW50IG5vdCBmb3IgRmxvdyBNb25pdG9yaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGdldEJya0xldmVsXzAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldEJya0xldmVsKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGJyZWFrIGxldmVsIG9mIEV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZsb3dNb25pdG9yXCI+aXMgaXQgbmVlZGVkIGZvciBGbG93IE1vbml0b3JpbmcgdXNhZ2UgPC9wYXJhbT5cclxuICBwcml2YXRlIGdldEJya0xldmVsXzEoZmxvd01vbml0b3I6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IGxldmVsOiBzdHJpbmcgPSAnJztcclxuICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUw6XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLkludGVybmFsRXZlbnQpIHtcclxuICAgICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfUFJFRklYOlxyXG4gICAgICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1RBU0tfUFJFRklYX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1RBU0tfUFJFRklYO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQVNLX1NVRkZJWDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9UQVNLX1NVRkZJWF9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9UQVNLX1NVRkZJWDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfUFJFRklYX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1JFQ19QUkVGSVg7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19TVUZGSVg6XHJcbiAgICAgICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfUkVDX1NVRkZJWF9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfU1VGRklYO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9DVFJMX1BSRUZJWF9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9DVFJMX1BSRUZJWCArICdfJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9TVUZGSVg6XHJcbiAgICAgICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfQ1RSTF9TVUZGSVhfRk0gOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfQ1RSTF9TVUZGSVggKyAnXyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfVkVSSUZJQ0FUSU9OOlxyXG4gICAgICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0NUUkxfVkVSSUZJQ0FUSU9OX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0NUUkxfVkVSSUZJQ0FUSU9OICsgJ18nO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WQVJJQUJMRTpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9WQVJJQUJMRV9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9WQVJJQUJMRSArICdfJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9IQU5ETEVSX0lOVEVSTkFMX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0hBTkRMRVJfSU5URVJOQUwgKyAnXyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXZlbCArPSBFdmVudC5nZXRJbnRlcm5hbEV2dERlc2NyaXB0aW9uKHRoaXMuSW50ZXJuYWxFdmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNOlxyXG4gICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9TWVNURU1fRk0gOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9TWVNURU0gKyAnXyc7XHJcbiAgICAgICAgbGV2ZWwgKz0gdGhpcy5nZXRLZXlib2FyZEl0ZW1TdHJpbmcoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9USU1FUjpcclxuICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0hBTkRMRVJfVElNRVJfRk0gKyAnICcgKyB0aGlzLnNlY29uZHMyU3RyaW5nKCkgOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9USU1FUiArICdfJyArIHRoaXMuc2Vjb25kczJTdHJpbmcoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9FWFBSRVNTSU9OOlxyXG4gICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9FWFBSRVNTSU9OX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0hBTkRMRVJfRVhQUkVTU0lPTiArICdfJyArIHRoaXMuRXhwLmdldElkKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUjpcclxuICAgICAgICBsZXZlbCA9IChmbG93TW9uaXRvciA/IChDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9VU0VSX0ZNICsgJzogJykgOiAoQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0hBTkRMRVJfVVNFUiArICdfJykpICsgKHRoaXMuVXNlckV2dCAhPSBudWxsID8gdGhpcy5Vc2VyRXZ0Ll91c2VyRXZ0RGVzYyA6IHRoaXMuX3VzZXJFdnREZXNjKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSX0ZVTkM6XHJcbiAgICAgICAgbGV2ZWwgPSAoZmxvd01vbml0b3IgPyAoQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1VTRVJfRlVOQ1RJT05fRk0gKyAnOicpIDogKENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9VU0VSX0ZVTkNUSU9OICsgJ18nKSkgKyB0aGlzLl91c2VyRGVmaW5lZEZ1bmNOYW1lO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsZXZlbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgZGVzY3JpcHRpb24gb2YgdGhlIGludGVybmFsIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IGRlc2NyaXB0aW9uIG9mIHRoZSBldmVudCA8L3JldHVybnM+XHJcbiAgcHVibGljIHN0YXRpYyBnZXRJbnRlcm5hbEV2dERlc2NyaXB0aW9uKGludGVybmFsRXZlbnRDb2RlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICBzd2l0Y2ggKGludGVybmFsRXZlbnRDb2RlKSB7XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FCT1VUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0Fib3V0IE1hZ2ljJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FDVElPTl9MSVNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0FjdGlvbiBMaXN0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FERF9IWVBFUkxJTks6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FMSUdOX0xFRlQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTGVmdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9BTElHTl9SSUdIVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdSaWdodCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9BUFBMX1BST1BFUlRJRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FQUExJQ0FUSU9OUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdBcHBsaWNhdGlvbnMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQVBQTElDQVRJT05TX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQXBwbGljYXRpb25zIExpc3QnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQVRUQUNIX1RPX1RBQkxFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0F0dGFjaCB0byBUYWJsZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9BVVRIT1JJWkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQXV0aG9yaXplJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9CRUdGTEQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQmVnaW4gRmllbGQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0JFR0ZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQmVnaW4gRm9ybSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfQkVHTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdCZWdpbiBMaW5lJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9CRUdOWFRMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0JlZ2luIE5leHQgTGluZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfQkVHUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdCZWdpbiBQYWdlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9CRUdMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0JlZ2luIFJvdyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfQkVHUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdCZWdpbiBTY3JlZW4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0JFR1RCTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdCZWdpbiB0YWJsZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9CT1RUT006XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQm90dG9tJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0JVTExFVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdCdWxsZXQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQlVUVE9OOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0J1dHRvbiBQcmVzcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DQU5DRUw6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ2FuY2VsJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUX1FVSVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUXVpdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DRU5URVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ2VudGVyJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NIRUNLX1NZTlRBWDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDaGVjayBTeW50YXgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0hFQ0tfVE9fRU5EOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NoZWNrIHRvIEVuZCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DTEVBUl9URU1QTEFURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDbGVhciBUZW1wbGF0ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DTEVBUl9WQUxVRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDbGVhciBWYWx1ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DTE9TRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDbG9zZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9BQ1RfQ0xPU0VfQVBQTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDbG9zZSBBcHBsaWNhdGlvbic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ09NTVVOSUNBVElPTlM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ29tbXVuaWNhdGlvbnMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ09NUE9ORU5UUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb21wb25lbnRzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfSElUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvbnRyb2wgSGl0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NPTlRST0xfTkFNRV9MSVNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvbnRyb2wgTmFtZSBMaXN0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NMSVBfQ09QWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb3B5JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NPUFlfTEFZT1VUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvcHkgTGF5b3V0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NPUFlfU1VCVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb3B5IFN1YnRyZWUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1JFTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDcmVhdGUgTGluZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DUkVMSU5FX0FCT1ZFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NyZWF0ZSBMaW5lIEFib3ZlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NSRUFURV9QQVJFTlQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ3JlYXRlIFBhcmVudCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVE9fQ1JFQVRFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NyZWF0ZSBSZWNvcmRzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NSRUFURV9TVUJUQVNLOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NyZWF0ZSBTdWJ0YXNrJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NST1NTX1JFRkVSRU5DRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDcm9zcyBSZWZlcmVuY2UnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1VUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0N1dCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9EQl9UQUJMRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RCTVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnREJNUyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9EREZfTUFLRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEREYgTWFrZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9EQVRBQkFTRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRGF0YWJhc2VzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RFRkFVTFRfTEFZT1VUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0RlZmF1bHQgTGF5b3V0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RFRklORV9FWFBSRVNTSU9OOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0RlZmluZSBFeHByZXNzaW9uJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9ERUxDVVJDSDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDdXJyZW50IENoYXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0RFTFBSVkNIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByZXZpb3VzIENoYXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfREVMRVRFX0hZUEVSTElOSzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEZWxldGUgSHlwZXJsaW5rJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RFTExJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRGVsZXRlIExpbmUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfREVMRVRFX1NVQlRSRUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRGVsZXRlIFN1YnRyZWUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRfQ09QWUZMRDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEaXR0byc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ESVNQTEFZX1JFRlJFU0g6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRGlzcGxheSBSZWZyZXNoJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VESVRfTUFJTl9GT1JNOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0VkaXQgTWFpbiBGb3JtJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9FTkRGTEQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRW5kIEZpZWxkJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9FTkRGT1JNOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0VuZCBGb3JtJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9FTkRMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0VuZCBMaW5lJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9FTkRQQUdFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0VuZCBQYWdlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9FTkRMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0VuZCBSb3cnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0VORFBBR0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRW5kIFNjcmVlbic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfRU5EVEJMOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0VuZCBUYWJsZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FTlZJUk9OTUVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFbnZpcm9ubWVudCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FWEVDVVRFX1BST0dSQU06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRXhlY3V0ZSBQcm9ncmFtJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYRUNVVEVfUkVQT1JUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0V4ZWN1dGUgUmVwb3J0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYSVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRXhpdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FWElUX1NZU1RFTTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFeGl0IFN5c3RlbSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FWFBPUlRfSU1QT1JUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0V4cG9ydC9JbXBvcnQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRVhQUkVTU0lPTl9SVUxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFeHByZXNzaW9uIHJ1bGVzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYVEVSTkFMX0VESVRPUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFeHRlcm5hbCBFZGl0b3InO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYVF9FVkVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFeHRlcm5hbCBFdmVudCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9GT1JNUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdGb3Jtcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9GUk9NX1ZBTFVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0Zyb20gVmFsdWUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRlVOQ1RJT05fTElTVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdGdW5jdGlvbiBMaXN0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0dFTkVSQVRFX0ZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnR2VuZXJhdGUgRm9ybSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9HRU5FUkFURV9QUk9HUkFNOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0dlbmVyYXRlIFByb2dyYW0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfR09fVE9fVE9QOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0dvIHRvIFRvcCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9IX0NFTlRFUl9PRl9GT1JNOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9IVE1MX1NUWUxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdIVE1MIFN0eWxlcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9IRUxQOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0hlbHAnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSEVMUF9TQ1JFRU5TOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0hlbHAgU2NyZWVucyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9IT1JJWl9DRU5URVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnSG9yaXouIENlbnRlcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9JX09fRklMRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVGFibGVzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0lOREVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdJbmRlbnQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSU5TRVJUX09CSkVDVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdJbnNlcnQgT2JqZWN0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0pVTVBfVE9fUk9XOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0p1bXAgdG8gUm93JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0tFWUJPQVJEX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnS2V5Ym9hcmQgTGlzdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9LRVlCT0FSRF9NQVBQSU5HOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0tleWJvYXJkIE1hcHBpbmcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTEFOR1VBR0VTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ2xhbmd1YWdlcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVE9fU0VBUkNIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0xvY2F0ZSBOZXh0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUT19MT0NBVEU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTG9jYXRlIGEgUmVjb3JkJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0xPR0lDQUxQTkFNRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0xPR09OOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0xvZ29uJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTSU5HX0hFTFA6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnSGVscCBUb3BpY3MnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX01BUktOWFRDSDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNYXJrIE5leHQgQ2hhcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NQVJLX05FWFRfTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNYXJrIE5leHQgTGluZSBNTEUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX01BUktQUlZDSDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNYXJrIFByZXZpb3VzIENoYXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX01BUktQUlZMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01hcmsgUHJldmlvdXMgTGluZSBNTEUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTUFSS19TVUJUUkVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTUFSS1RPQkVHOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01hcmsgVG8gQmVnaW5uaW5nJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9NQVJLVE9FTkQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTWFyayBUbyBFbmQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTUFYSU1VTV9IRUlHSFQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTWF4aW11bSBIZWlnaHQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTUFYSU1VTV9XSURUSDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNYXhpbXVtIFdpZHRoJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01FTlVfQkFSOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01lbnUgQmFyJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01FTlVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NSU5JTVVNX0hFSUdIVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNaW5pbXVtIEhlaWdodCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NSU5JTVVNX1dJRFRIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01pbmltdW0gV2lkdGgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRPX01PRElGWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNb2RpZnkgUmVjb3Jkcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NT05JVE9SX0RFQlVHR0VSOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01vbml0b3IvRGVidWdnZXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTU9WRV9FTlRSWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNb3ZlIEVudHJ5JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01PVkVfU1VCVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNb3ZlIFN1YnRyZWUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTlVMTF9TRVRUSU5HUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdOVUxMIFNldHRpbmdzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9OWFRDSEFSOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ05leHQgQ2hhcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTlhUTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdOZXh0IExpbmUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX05YVFBBR0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTmV4dCBQYWdlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9OWFRMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ05leHQgUm93JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9OWFRQQUdFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ05leHQgU2NyZWVuJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9OWFRUQUI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTmV4dCBUYWInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX05YVFdPUkQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTmV4dCBXb3JkJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX05PUk1BTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdOb3JtYWwnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfT0s6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnT0snO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfT0xFMjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdPTEUyJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX09QRU5fQVBQTElDQVRJT046XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnT3BlbiBBcHBsaWNhdGlvbic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9PVkVSV1JJVEVfRU5UUlk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnT3ZlcndyaXRlIEVudHJ5JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX09WRVJXUklURV9TVUJUUkVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ092ZXJ3cml0ZSBTdWJ0cmVlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BQRDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQUEQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUEFHRV9GT09URVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUGFnZSBGb290ZXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUEFHRV9IRUFERVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUGFnZSBIZWFkZXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0xJUF9QQVNURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQYXN0ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9QQVNURV9MSU5LOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1Bhc3RlIExpbmsnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUEFTVEVfU1VCVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQYXN0ZSBTdWJ0cmVlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9QUlZDSEFSOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByZXZpb3VzIENoYXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX1BSVkxJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUHJldmlvdXMgTGluZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfUFJWUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQcmV2aW91cyBQYWdlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9QUlZMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByZXZpb3VzIFJvdyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfUFJWUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQcmV2aW91cyBTY3JlZW4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX1BSVlRBQjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQcmV2aW91cyBUYWInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX1BSVldPUkQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUHJldmlvdXMgV29yZCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9QUklOVF9BVFRSSUJVVEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByaW50IEF0dHJpYnV0ZXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUFJJTlRFUl9TRVRVUDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQcmludGVyIFNldHVwJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BSSU5URVJTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByaW50ZXJzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BST0dSQU1TOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1Byb2dyYW1zJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BST1BFUlRJRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUHJvcGVydGllcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVE9fUVVFUlk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUXVlcnkgUmVjb3Jkcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVE9fUkFOR0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUmFuZ2Ugb2YgUmVjb3Jkcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVF9SRUZSRVNIX1JFQ09SRDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdSZWNvcmQgRmx1c2gnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVESVJFQ1RfRklMRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUmVkaXJlY3QgRmlsZXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVEUkFXX0xBWU9VVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVQRUFUX0VOVFJZOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1JlcGVhdCBFbnRyeSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRVBFQVRfU1VCVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdSZXBlYXQgU3VidHJlZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRVBPUlRfR0VORVJBVE9SOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRVNUT1JFX0RFRkFVTFRTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1Jlc3RvcmUgRGVmYXVsdHMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVUVVJOX1RPX1RSRUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JJR0hUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1JpZ2h0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JJR0hUUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUklHSFRTX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUmlnaHRzIExpc3QnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1FMX0FTU0lTVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTUUwgQXNzaXN0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NRTF9DT0xVTU5TOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NRTCBDb2x1bW5zJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NRTF9DT01NQU5EOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NRTCBDb21tYW5kJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NRTF9GTElQX0RFU0M6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU1FMIEZsaXAgRGVzYy4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1FMX0tFWVdPUkRTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NRTCBLZXl3b3Jkcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TUUxfT1BFUkFUT1JTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NRTCBPcGVyYXRvcnMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1FMX1RBQkxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTUUwgVGFibGVzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NRTF9XSEVSRV9DTEFVU0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUX1JFRlJFU0hfU0NSRUVOOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NjcmVlbiBSZWZyZXNoJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NFQ1JFVF9OQU1FUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTZWNyZXQgTmFtZXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0VMRUNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NlbGVjdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTUFSS0FMTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTZWxlY3QgQWxsJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NFUlZFUlM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NFUlZJQ0VTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVF9FRFRfTlVMTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTZXQgdG8gTlVMTCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TSEVMTF9UT19PUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTaGVsbCB0byBPUyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TSE9XX0VYUFJFU1NJT046XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU2hvdyBFeHByZXNzaW9uJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NIT1dfRlVMTF9MQVlPVVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NIUklOS19UUkVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TT1JUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NvcnQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU09SVF9SRUNPUkRTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NvcnQgUmVjb3Jkcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQUJMRV9MT0NBVEU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVGFibGUgTG9jYXRlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBQkxFX0xPQ0FURV9ORVhUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1RhYmxlIExvY2F0ZSBOZXh0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBQkxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFTS19DT05UUk9MOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQVNLX0VWRU5UUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVE9fVkFMVUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVG8gVmFsdWUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVE9PTEtJVF9SVU5USU1FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1Rvb2xraXQvUnVudGltZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UT1A6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVG9wJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RZUEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfVU5ETzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdVbmRvIEVkaXRpbmcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVU5JTkRFTlQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVW5pbmRlbnQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVBEQVRFX0xJTks6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzE6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzI6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzM6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzQ6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzU6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzY6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzc6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzg6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzk6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzEwOlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xMTpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTI6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzEzOlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xNDpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTU6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzE2OlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xNzpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTg6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzE5OlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8yMDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdVc2VyIEFjdGlvbiAnICsgKGludGVybmFsRXZlbnRDb2RlIC0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzEgKyAxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfR1JPVVBTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0lEUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdVc2VyIElEcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WX0NFTlRFUl9PRl9GT1JNOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NlbnRlciBvZiBGb3JtJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZFUlRJQ0FMX0NFTlRFUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdWZXJ0aWNhbCBDZW50ZXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVklFV19CWV9LRVk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVmlldyBieSBLZXknO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRfUkVGUkVTSF9WSUVXOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ZpZXcgUmVmcmVzaCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WSVJUVUFMX1ZBUklBQkxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdWYXJpYWJsZXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVklTVUFMX0NPTk5FQ1RJT046XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVmlzdWFsIENvbm5lY3Rpb24nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSElUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1dpbmRvdyBIaXQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfV0lOTU9WRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdXaW5kb3cgUmVwb3NpdGlvbic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9XSU5TSVpFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1dpbmRvdyBSZXNpemUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfWk9PTTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdab29tJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0xPQ0tJTkdfREVUQUlMUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdMb2NraW5nIERldGFpbHMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTE9DS0lOR19BQk9SVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdMb2NraW5nIEFib3J0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0xPQ0tJTkdfUkVUUlk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTG9ja2luZyBSZXRyeSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DSEVDS19PQkpFQ1RfTElTVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDaGVjayBPYmplY3QgTGlzdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSU19MSVNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1VzZXJzIExpc3QnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTU9ERUxTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01vZGVscyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9XRUJfQ0xJQ0s6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ2xpY2snO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfV0VCX09OX0RCTElDSzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEYmxDbGljayc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9CUk9XU0VSX0VTQzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFc2MnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUk9MTEJBQ0s6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUm9sbGJhY2snO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRU1QVFlfREFUQVZJRVc6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRW1wdHkgRGF0YXZpZXcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9NT0RJRlk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ29udHJvbCBNb2RpZnknO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUFJJTlRfREFUQTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQcmludCBEYXRhJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BPU1RfUkVGUkVTSF9CWV9QQVJFTlQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUG9zdCBSZWZyZXNoIGJ5IFBhcmVudCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TV0lUQ0hfVE9fT0ZGTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTd2l0Y2ggVG8gT2ZmbGluZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VTkFWQUlMQUJMRV9TRVJWRVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVW5hdmFpbGFibGUgU2VydmVyJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NPTlRFWFRfTUVOVTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb250ZXh0IE1lbnUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRU5URVJfUk9XX0VESVRJTkc6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRW50ZXIgUm93IEVkaXRpbmcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9OT19QUk9HX0VYRV9SSUdIVFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTm8gUHJvZ3JhbSBFeGVjdXRpb24gUmlnaHRzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1dFQkNMSUVOVF9ST1VURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdSb3V0ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DT0xfU09SVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb2x1bW4gU29ydCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ST1dfREFUQV9DVVJSX1BBR0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnR2V0IFJvd3MnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1VCRk9STV9DTE9TRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTdWJmb3JtIENsb3NlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NVQkZPUk1fUkVGUkVTSDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTdWJmb3JtIFJlZnJlc2gnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1VCRk9STV9PUEVOOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1N1YmZvcm0gT3Blbic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DT01QVVRFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvbXB1dGUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0FDSEVfTkVYVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdHZXQgTmV4dCBEYXRhJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NBQ0hFX1BSRVY6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnR2V0IFByZXZpb3VzIERhdGEnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRkVUQ0hfREFUQV9DT05UUk9MX1ZBTFVFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdGZXRjaCBkYXRhIGNvbnRyb2wgdmFsdWVzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0lOREVYX0NIQU5HRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdJbmRleCBDaGFuZ2UnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRFVNUF9FTlZJUk9OTUVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEdW1wIEVudmlyb25tZW50JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0eXBlIG9mIFVzZXIgRXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdHlwZSBvZiB1c2VyIGV2ZW50IDwvcmV0dXJucz5cclxuICBnZXRVc2VyRXZlbnRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5Vc2VyRXZ0ID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9OT1RJTklURUQ7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuVXNlckV2dC5nZXRUeXBlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHNlY29uZHMgb2YgdGhlIHVzZXIgZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFNlY29uZHNPZlVzZXJFdmVudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuVXNlckV2dC5nZXRTZWNvbmRzKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSB1c2VyIGV2ZW50IG9iamVjdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdXNlciBldmVudCBvYmplY3QgPC9yZXR1cm5zPlxyXG4gIGdldFVzZXJFdmVudCgpOiBFdmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5Vc2VyRXZ0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBrZXlib2FyZCBpdGVtICggZm9yIHN5c3RlbSBldmVudCApIGluIGZvcm0gb2Ygc3RyaW5nXHJcbiAgLy8vICAgZm9yIHN5c3RlbSBldmVudHMgT05MWVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBnZXRLZXlib2FyZEl0ZW1TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIGxldCBrYmk6IEtleWJvYXJkSXRlbSA9IHRoaXMuZ2V0S2JkSXRtKCk7XHJcbiAgICBpZiAoa2JpID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4ga2JpLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5zZXJ0IHRoZSBzZWNvbmRzIHRvIHRoZSBwaWN0dXJlIFwiSEg6TU06U1NcIiBmb3IgU1RPUkFHRV9BVFRSX1RJTUVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gZm9ybWF0ZWQgc3RyaW5nIG9mIHNlY29uZHNcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc2Vjb25kczJTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIGxldCB0aW1lOiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KDMpO1xyXG4gICAgbGV0IGJ1ZmZlcjogc3RyaW5nID0gJyc7XHJcbiAgICB0aW1lWzBdID0gTWF0aC5mbG9vcih0aGlzLl9zZWNvbmRzIC8gMzYwMCk7XHJcbiAgICB0aW1lWzFdID0gTWF0aC5mbG9vcigodGhpcy5fc2Vjb25kcyAtIHRpbWVbMF0gKiAzNjAwKSAvIDYwKTtcclxuICAgIHRpbWVbMl0gPSB0aGlzLl9zZWNvbmRzICUgNjA7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGltZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGltZVtpXSA9PT0gMClcclxuICAgICAgICBidWZmZXIgKz0gJzAwJztcclxuICAgICAgZWxzZSBpZiAodGltZVtpXSA8IDEwKVxyXG4gICAgICAgIGJ1ZmZlciArPSAoJzAnICsgdGltZVtpXSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBidWZmZXIgKz0gdGltZVtpXTtcclxuICAgICAgLy8gZG9uJ3QgaW5zZXJ0IGRlbGltaXRlciBhZnRlciB0aGUgbGFzdCBjYXNlXHJcbiAgICAgIGlmIChpIDwgdGltZS5sZW5ndGggLSAxKVxyXG4gICAgICAgIGJ1ZmZlciArPSAnOic7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnVmZmVyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZSB0aGUgcGFyYW1ldGVycyB2YWx1ZXMgZnJvbSB0aGUgdmFsdWUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbHVlU3RyXCI+aW5kZXggb2YgdGhlIHBhcmFtIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcGFyYW1ldGVyIHZhbHVlIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHBhcnNlUGFyYW1WYWwodmFsdWVTdHI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhcnRPZnM6IG51bWJlciA9IDAsIGVuZE9mcyA9IDAsIG5MZW4sIGo7XHJcbiAgICBsZXQgc0xlbjogc3RyaW5nLCBzVmFsdWUgPSBudWxsO1xyXG5cclxuICAgIC8vIGZpbmQgdGhlIHZhbHVlIGxvY2F0aW9uXHJcbiAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5fcGFyYW1ldGVyczsgaisrKSB7XHJcbiAgICAgIHN3aXRjaCAoPFN0b3JhZ2VBdHRyaWJ1dGU+dGhpcy5fcGFyYW1BdHRyc1tqXSkge1xyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5TS0lQOlxyXG4gICAgICAgICAgc1ZhbHVlID0gJyc7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTzpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICAgIGVuZE9mcyA9IHN0YXJ0T2ZzICsgNDtcclxuICAgICAgICAgIHNMZW4gPSB2YWx1ZVN0ci5zdWJzdHIoc3RhcnRPZnMsIChlbmRPZnMpIC0gKHN0YXJ0T2ZzKSk7XHJcbiAgICAgICAgICBuTGVuID0gTk51bWJlci5QYXJzZShzTGVuLCBOdW1iZXJTdHlsZXMuSGV4TnVtYmVyKTtcclxuICAgICAgICAgIHN0YXJ0T2ZzID0gZW5kT2ZzO1xyXG5cclxuICAgICAgICAgIC8vIFFDUiAxNjk5IGRlY29kZSB0aGUgcGFyYW1ldGVyIGZyb20gYmFzZTY0IGlmIG5lZWRlZFxyXG4gICAgICAgICAgaWYgKEFjY2Vzc0hlbHBlci5lbnZpcm9ubWVudC5HZXREZWJ1Z0xldmVsKCkgPiAxIHx8ICg8U3RvcmFnZUF0dHJpYnV0ZT50aGlzLl9wYXJhbUF0dHJzW2pdKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCAoPFN0b3JhZ2VBdHRyaWJ1dGU+dGhpcy5fcGFyYW1BdHRyc1tqXSkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fCAoPFN0b3JhZ2VBdHRyaWJ1dGU+dGhpcy5fcGFyYW1BdHRyc1tqXSkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTykge1xyXG4gICAgICAgICAgICBpZiAoKG5MZW4gJiAweDgwMDApID4gMClcclxuICAgICAgICAgICAgLy8gcGFyc2Ugc3Bhbm5lZCByZWNvcmQgZW5jb2RlZCB0byBIZXhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGxlbiBvZiB0aGUgcGFyYW1ldGVyIGRhdGFcclxuICAgICAgICAgICAgICBuTGVuID0gKG5MZW4gJiAweDdGRkYpO1xyXG4gICAgICAgICAgICAgIG5MZW4gKj0gMjtcclxuXHJcbiAgICAgICAgICAgICAgLy8gcGFyc2UgdGhlIFN0cmluZ1xyXG4gICAgICAgICAgICAgIGxldCByZXM6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICAgICAgICAgIGVuZE9mcyArPSBSZWNvcmRVdGlscy5nZXRTcGFubmVkRmllbGQodmFsdWVTdHIsIG5MZW4sIHN0YXJ0T2ZzLCA8U3RvcmFnZUF0dHJpYnV0ZT50aGlzLl9wYXJhbUF0dHJzW2pdLCByZXMsIHRydWUpO1xyXG4gICAgICAgICAgICAgIHZhbHVlU3RyID0gcmVzLlRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gbm9uIHNwYW5uZWQgcGFyYW1zXHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVuZE9mcyA9IHN0YXJ0T2ZzICsgbkxlbjtcclxuICAgICAgICAgICAgICBzVmFsdWUgPSB2YWx1ZVN0ci5zdWJzdHIoc3RhcnRPZnMsIChlbmRPZnMpIC0gKHN0YXJ0T2ZzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICgobkxlbiAmIDB4ODAwMCkgPiAwKVxyXG4gICAgICAgICAgICAvLyBwYXJzZSBzcGFubmVkIHJlY29yZCBlbmNvZGVkIHRvIEhleFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgbGVuIG9mIHRoZSBwYXJhbWV0ZXIgZGF0YVxyXG4gICAgICAgICAgICAgIG5MZW4gPSAobkxlbiAmIDB4N0ZGRik7XHJcbiAgICAgICAgICAgICAgbkxlbiA9IE1hdGguZmxvb3IoKG5MZW4gKyAyKSAvIDMpICogNDtcclxuXHJcbiAgICAgICAgICAgICAgLy8gcGFyc2UgdGhlIFN0cmluZ1xyXG4gICAgICAgICAgICAgIGxldCByZXM6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICAgICAgICAgIGVuZE9mcyArPSBSZWNvcmRVdGlscy5nZXRTcGFubmVkRmllbGQodmFsdWVTdHIsIG5MZW4sIHN0YXJ0T2ZzLCA8U3RvcmFnZUF0dHJpYnV0ZT50aGlzLl9wYXJhbUF0dHJzW2pdLCByZXMsIGZhbHNlKTtcclxuICAgICAgICAgICAgICBzVmFsdWUgPSByZXMuVG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBlbmRPZnMgPSBzdGFydE9mcyArIE1hdGguZmxvb3IoKG5MZW4gKyAyKSAvIDMpICogNDtcclxuICAgICAgICAgICAgICBzVmFsdWUgPSBCYXNlNjQuZGVjb2RlKHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgICAvLyBRQ1IgMTY5OSBkZWNvZGUgdGhlIHBhcmFtZXRlciBmcm9tIGJhc2U2NCBpZiBuZWVkZWRcclxuICAgICAgICAgIGlmIChBY2Nlc3NIZWxwZXIuZW52aXJvbm1lbnQuR2V0RGVidWdMZXZlbCgpID4gMSkge1xyXG4gICAgICAgICAgICBlbmRPZnMgPSBzdGFydE9mcyArIEFjY2Vzc0hlbHBlci5lbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKSAqIDI7XHJcbiAgICAgICAgICAgIHNWYWx1ZSA9IHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVuZE9mcyA9IHN0YXJ0T2ZzICsgKE1hdGguZmxvb3IoKEFjY2Vzc0hlbHBlci5lbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKSArIDIpIC8gMykgKiA0KTtcclxuICAgICAgICAgICAgc1ZhbHVlID0gQmFzZTY0LmRlY29kZVRvSGV4KHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICBlbmRPZnMgPSBzdGFydE9mcyArIDE7XHJcbiAgICAgICAgICBzVmFsdWUgPSB2YWx1ZVN0ci5zdWJzdHIoc3RhcnRPZnMsIChlbmRPZnMpIC0gKHN0YXJ0T2ZzKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wYXJhbVZhbHNbal0gPSBzVmFsdWU7XHJcbiAgICAgIHN0YXJ0T2ZzID0gZW5kT2ZzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVuZE9mcztcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbnVtYmVyIG9mIHBhcmFtc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBudW1iZXIgb2YgcGFyYW1zIDwvcmV0dXJucz5cclxuICBnZXRQYXJhbU51bSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtZXRlcnM7XHJcbiAgfVxyXG5cclxuXHJcbiAgaXNDb250cm9sSGVhZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZSgpID09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUwgJiZcclxuICAgICAgKHRoaXMuZ2V0SW50ZXJuYWxDb2RlKCkgPT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfUFJFRklYIHx8XHJcbiAgICAgICAgdGhpcy5nZXRJbnRlcm5hbENvZGUoKSA9PSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9TVUZGSVggfHxcclxuICAgICAgICB0aGlzLmdldEludGVybmFsQ29kZSgpID09IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1ZFUklGSUNBVElPTik7XHJcbiAgfVxyXG5cclxuICBpc1ZhcmlhYmxlSGVhZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZSgpID09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUwgJiZcclxuICAgICAgdGhpcy5nZXRJbnRlcm5hbENvZGUoKSA9PSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVkFSSUFCTEU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEFwcGVuZHMgdGhlIGV2ZW50J3MgZGVzY3JpcHRpb24gdG8gdGhlIGdpdmVuIFN0cmluZ0J1aWxkZXIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZmZlclwiPlRoZSBidWZmZXIgdG8gd2hpY2ggdGhlIGRlc2NyaXB0aW9uIHNob3VsZCBiZSBhcHBlbmRlZC48L3BhcmFtPlxyXG4gIHB1YmxpYyBBcHBlbmREZXNjcmlwdGlvbihidWZmZXI6IFN0cmluZ0J1aWxkZXIpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUw6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChFdmVudC5nZXRJbnRlcm5hbEV2dERlc2NyaXB0aW9uKHRoaXMuSW50ZXJuYWxFdmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1NZU1RFTTpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKHRoaXMuZ2V0S2V5Ym9hcmRJdGVtU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVI6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZCh0aGlzLmdldFVzckV2bnREZXNjKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVJfRlVOQzpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKHRoaXMuX3VzZXJEZWZpbmVkRnVuY05hbWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1RJTUVSOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5zZWNvbmRzMlN0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9FWFBSRVNTSU9OOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoJ0lEICcgKyB0aGlzLkV4cC5nZXRJZCgpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKCd1bmtub3duIGV2ZW50IHR5cGUgJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJucyB3aGV0aGVyIHRoZSBpbnRlcm5hbCBldmVudCBjb2RlIGlzIGJldHdlZW4gMTAwMSAmIDEwMDhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBpc05ld0ludGVybmFsRXZlbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5JbnRlcm5hbEV2ZW50ID49IDEwMDEgJiYgdGhpcy5JbnRlcm5hbEV2ZW50IDw9IDEwMDg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldCB0aGUgZGVzY3JpcHRpb24gZm9yIG5ldyBpbnRlcm5hbCBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGdldE5ld0ludGVybmFsRXZlbnREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xyXG4gICAgbGV0IGV2ZW50RGVzYzogc3RyaW5nID0gTlN0cmluZy5FbXB0eTtcclxuICAgIHN3aXRjaCAodGhpcy5JbnRlcm5hbEV2ZW50KSB7XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfUFJFRklYOlxyXG4gICAgICAgIGV2ZW50RGVzYyA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9UQVNLX1BSRUZJWF9GTTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfU1VGRklYOlxyXG4gICAgICAgIGV2ZW50RGVzYyA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9UQVNLX1NVRkZJWF9GTTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19QUkVGSVg6XHJcbiAgICAgICAgZXZlbnREZXNjID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1JFQ19QUkVGSVhfRk07XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfU1VGRklYOlxyXG4gICAgICAgIGV2ZW50RGVzYyA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfU1VGRklYX0ZNO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9QUkVGSVg6XHJcbiAgICAgICAgZXZlbnREZXNjID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0NUUkxfUFJFRklYX0ZNO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9TVUZGSVg6XHJcbiAgICAgICAgZXZlbnREZXNjID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0NUUkxfU1VGRklYX0ZNO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9WRVJJRklDQVRJT046XHJcbiAgICAgICAgZXZlbnREZXNjID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0NUUkxfVkVSSUZJQ0FUSU9OX0ZNO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVkFSSUFCTEU6XHJcbiAgICAgICAgZXZlbnREZXNjID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1ZBUklBQkxFX0ZNO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBldmVudERlc2M7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm4gdGhlIGRlc2NyaXB0aW9uIGZvciBuZXcgaW50ZXJuYWwgZXZlbnRzIG9yIHJldHVybiB0aGUgdHlwZSBpbiBzdHJpbmcgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0RXZlbnRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAvLyBGb3IgdGhlIG5ldyBpbnRlcm5hbCBldmVudHMsIHRoZXJlIGlzIG5vIHR5cGUgc28gaW5zdGVhZCBnZXQgdGhlIGRlc2NyaXB0aW9uXHJcbiAgICByZXR1cm4gdGhpcy5pc05ld0ludGVybmFsRXZlbnQoKVxyXG4gICAgICA/IE5TdHJpbmcuVHJpbUVuZCh0aGlzLmdldE5ld0ludGVybmFsRXZlbnREZXNjcmlwdGlvbigpKVxyXG4gICAgICA6IHRoaXMuZ2V0RXZlbnRUeXBlU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybiB0aGUgdHlwZSBvZiBldmVudCBpbiBzdHJpbmcgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0RXZlbnRUeXBlU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZXZlbnRUeXBlOiBzdHJpbmc7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZ2V0VHlwZSgpKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTDpcclxuICAgICAgICBldmVudFR5cGUgPSAnSW50ZXJuYWwgRXZlbnQ6JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1NZU1RFTTpcclxuICAgICAgICBldmVudFR5cGUgPSAnU3lzdGVtIEV2ZW50Oic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9FWFBSRVNTSU9OOlxyXG4gICAgICAgIGV2ZW50VHlwZSA9ICdFeHByZXNzaW9uIEV2ZW50Oic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9USU1FUjpcclxuICAgICAgICBldmVudFR5cGUgPSAnVGltZXIgRXZlbnQ6JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVI6XHJcbiAgICAgICAgZXZlbnRUeXBlID0gJ1VzZXIgRXZlbnQ6JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZXZlbnRUeXBlID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50VHlwZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB1c2VyIGRlZmluZWQgZnVuY3Rpb24ncyBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRVc2VyRGVmaW5lZEZ1bmNOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZSA9IG5hbWU7XHJcbiAgICBsZXQgZnVuY3Rpb25OYW1lVXBwZXI6IHN0cmluZyA9IHRoaXMuX3VzZXJEZWZpbmVkRnVuY05hbWUudG9VcHBlckNhc2UoKTtcclxuICAgIHRoaXMuX3VzZXJEZWZpbmVkRnVuY05hbWVIYXNoQ29kZSA9IEhhc2hVdGlscy5HZXRIYXNoQ29kZShmdW5jdGlvbk5hbWVVcHBlcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdXNlciBkZWZpbmVkIGZ1bmN0aW9uJ3MgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VXNlckRlZmluZWRGdW5jTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJEZWZpbmVkRnVuY05hbWU7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB1c2VyIGRlZmluZWQgZnVuY3Rpb24ncyBuYW1lJ3MgaGFzaCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHVzZXIgZGVmaW5lZCBmdW5jdGlvbidzIHJldHVybiBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRVc2VyRGVmaW5lZEZ1bmNSZXRFeHAoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5FeHA7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzZXRUaW1lc3RhbXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90aW1lc3RhbXAgPSBFdmVudC5fbGFzdFRpbWVzdGFtcCsrO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGltZXN0YW1wKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZXN0YW1wO1xyXG4gIH1cclxuXHJcbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZvcm1hdCgne3tFdmVudDogezB9fX0nLCB0aGlzLmdldEJya0xldmVsKCkpO1xyXG4gIH1cclxufVxyXG4iXX0=