@magic-xpa/engine 4.1100.0-dev4110.99 → 4.1101.0-dev4111.271

Sign up to get free protection for your applications and to get access to all the features.
Files changed (492) hide show
  1. package/README.md +7 -7
  2. package/{esm2020 → esm2022}/index.mjs +188 -188
  3. package/{esm2020 → esm2022}/magic-xpa-engine.mjs +1 -1
  4. package/esm2022/src/AccessHelper.mjs +15 -0
  5. package/esm2022/src/ClientManager.mjs +421 -0
  6. package/esm2022/src/CommandsProcessorBase.mjs +56 -0
  7. package/{esm2020 → esm2022}/src/CommandsProcessorManager.mjs +25 -25
  8. package/esm2022/src/CommandsTable.mjs +162 -0
  9. package/esm2022/src/ConstInterface.mjs +517 -0
  10. package/{esm2020 → esm2022}/src/CurrentClientVersion.mjs +2 -2
  11. package/esm2022/src/FlowMonitorInterface.mjs +16 -0
  12. package/esm2022/src/GUIManager.mjs +62 -0
  13. package/esm2022/src/GlobalCommandsManager.mjs +34 -0
  14. package/esm2022/src/GuiEventsProcessor.mjs +156 -0
  15. package/{esm2020 → esm2022}/src/ICommandsTable.mjs +1 -1
  16. package/esm2022/src/ServerConfig.mjs +122 -0
  17. package/{esm2020 → esm2022}/src/bridge/IGuiEvent.mjs +19 -19
  18. package/esm2022/src/bridge/MagicBridge.mjs +41 -0
  19. package/esm2022/src/commands/ClientOriginatedCommandTaskTag.mjs +12 -0
  20. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs +8 -8
  21. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs +9 -9
  22. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs +9 -9
  23. package/esm2022/src/commands/ClientToServer/BrowserEscEventCommand.mjs +26 -0
  24. package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommand.mjs +14 -14
  25. package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +59 -59
  26. package/esm2022/src/commands/ClientToServer/ColumnSortEventCommand.mjs +29 -0
  27. package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +261 -0
  28. package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +67 -0
  29. package/esm2022/src/commands/ClientToServer/ComputeEventCommand.mjs +26 -0
  30. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +24 -21
  31. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +23 -20
  32. package/{esm2020 → esm2022}/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs +8 -8
  33. package/esm2022/src/commands/ClientToServer/DataViewOutputCommand.mjs +13 -0
  34. package/{esm2020 → esm2022}/src/commands/ClientToServer/DataviewCommand.mjs +44 -44
  35. package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +40 -0
  36. package/{esm2020 → esm2022}/src/commands/ClientToServer/EventCommand.mjs +43 -40
  37. package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +70 -0
  38. package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +25 -0
  39. package/{esm2020 → esm2022}/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs +10 -10
  40. package/{esm2020 → esm2022}/src/commands/ClientToServer/ICommandTaskTag.mjs +1 -1
  41. package/esm2022/src/commands/ClientToServer/IndexChangeEventCommand.mjs +24 -0
  42. package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +26 -0
  43. package/{esm2020 → esm2022}/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +26 -23
  44. package/{esm2020 → esm2022}/src/commands/ClientToServer/QueryCommand.mjs +20 -20
  45. package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +30 -0
  46. package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +30 -0
  47. package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +27 -0
  48. package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +43 -0
  49. package/esm2022/src/commands/ClientToServer/SelectProgramCommand.mjs +19 -0
  50. package/{esm2020 → esm2022}/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +9 -9
  51. package/esm2022/src/commands/ClientToServer/SubformOpenEventCommand.mjs +24 -0
  52. package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +27 -0
  53. package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +34 -0
  54. package/{esm2020 → esm2022}/src/commands/ClientToServer/UnloadCommand.mjs +18 -15
  55. package/esm2022/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +18 -0
  56. package/esm2022/src/commands/DataViewCommandBase.mjs +8 -0
  57. package/{esm2020 → esm2022}/src/commands/IClientCommand.mjs +1 -1
  58. package/esm2022/src/commands/IClientTargetedCommand.mjs +13 -0
  59. package/{esm2020 → esm2022}/src/commands/IClientToServerCommandInfo.mjs +2 -2
  60. package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +65 -0
  61. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddLocateCommand.mjs +21 -21
  62. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddRangeCommand.mjs +62 -62
  63. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddSortCommand.mjs +33 -33
  64. package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +25 -0
  65. package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +24 -0
  66. package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
  67. package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +221 -0
  68. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetLocateCommand.mjs +14 -14
  69. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetRangeCommand.mjs +14 -14
  70. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetSortCommand.mjs +14 -14
  71. package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +37 -0
  72. package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +83 -0
  73. package/{esm2020 → esm2022}/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +132 -132
  74. package/{esm2020 → esm2022}/src/communications/IConnectionStateManager.mjs +1 -1
  75. package/esm2022/src/communications/InteractiveCommunicationsFailureHandler.mjs +15 -0
  76. package/{esm2020 → esm2022}/src/data/DataSourceIdKey.mjs +2 -2
  77. package/esm2022/src/data/DataView.mjs +1613 -0
  78. package/{esm2020 → esm2022}/src/data/DataViewBase.mjs +3 -3
  79. package/esm2022/src/data/DataviewManager.mjs +28 -0
  80. package/esm2022/src/data/DataviewManagerBase.mjs +15 -0
  81. package/esm2022/src/data/DvCache.mjs +67 -0
  82. package/esm2022/src/data/Field.mjs +646 -0
  83. package/esm2022/src/data/FieldBase.mjs +15 -0
  84. package/esm2022/src/data/FieldsTable.mjs +103 -0
  85. package/{esm2020 → esm2022}/src/data/IRecordsTable.mjs +1 -1
  86. package/{esm2020 → esm2022}/src/data/Key.mjs +88 -88
  87. package/esm2022/src/data/Record.mjs +880 -0
  88. package/{esm2020 → esm2022}/src/data/RecordOutOfDataViewException.mjs +15 -15
  89. package/esm2022/src/data/RecordsTable.mjs +267 -0
  90. package/{esm2020 → esm2022}/src/data/TaskTransactionManager.mjs +107 -103
  91. package/{esm2020 → esm2022}/src/data/XMLBasedDcValuesBuilder.mjs +74 -74
  92. package/{esm2020 → esm2022}/src/enums.mjs +23 -23
  93. package/esm2022/src/env/EnvVariablesTable.mjs +340 -0
  94. package/esm2022/src/env/Environment.mjs +487 -0
  95. package/{esm2020 → esm2022}/src/env/ILanguageData.mjs +1 -1
  96. package/esm2022/src/env/LanguageData.mjs +227 -0
  97. package/{esm2020 → esm2022}/src/env/MirrorString.mjs +65 -65
  98. package/esm2022/src/event/ActionManager.mjs +91 -0
  99. package/esm2022/src/event/Event.mjs +1333 -0
  100. package/esm2022/src/event/EventHandler.mjs +766 -0
  101. package/esm2022/src/event/EventHandlerPosition.mjs +204 -0
  102. package/esm2022/src/event/EventsManager.mjs +2988 -0
  103. package/{esm2020 → esm2022}/src/event/IEventsManager.mjs +6 -6
  104. package/esm2022/src/event/RunTimeEvent.mjs +399 -0
  105. package/{esm2020 → esm2022}/src/event/RunTimeEventBase.mjs +3 -3
  106. package/esm2022/src/event/UserEventsTable.mjs +47 -0
  107. package/esm2022/src/exp/ExpTable.mjs +57 -0
  108. package/esm2022/src/exp/Expression.mjs +200 -0
  109. package/esm2022/src/exp/ExpressionDict.mjs +727 -0
  110. package/esm2022/src/exp/ExpressionEvaluator.mjs +4206 -0
  111. package/esm2022/src/exp/ExpressionLocalJpn.mjs +314 -0
  112. package/{esm2020 → esm2022}/src/exp/GlobalParamsTable.mjs +85 -85
  113. package/esm2022/src/exp/YesNoExp.mjs +36 -0
  114. package/esm2022/src/gui/CreatedFormVector.mjs +23 -0
  115. package/esm2022/src/gui/FormsTable.mjs +66 -0
  116. package/esm2022/src/gui/MgControl.mjs +363 -0
  117. package/esm2022/src/gui/MgForm.mjs +1224 -0
  118. package/esm2022/src/http/HttpManager.mjs +97 -0
  119. package/esm2022/src/http/client/HttpClientAsync.mjs +68 -0
  120. package/{esm2020 → esm2022}/src/http/client/HttpClientBase.mjs +132 -132
  121. package/esm2022/src/http/client/HttpClientEvents.mjs +39 -0
  122. package/esm2022/src/http/client/HttpClientSync.mjs +42 -0
  123. package/esm2022/src/http/client/HttpUtility.mjs +84 -0
  124. package/{esm2020 → esm2022}/src/http/client/ICommunicationsFailureHandler.mjs +1 -1
  125. package/{esm2020 → esm2022}/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -18
  126. package/{esm2020 → esm2022}/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -18
  127. package/{esm2020 → esm2022}/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -18
  128. package/esm2022/src/remote/RemoteCommandsProcessor.mjs +883 -0
  129. package/{esm2020 → esm2022}/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -25
  130. package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandBase.mjs +24 -24
  131. package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandFactory.mjs +60 -60
  132. package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +15 -15
  133. package/{esm2020 → esm2022}/src/remote/RemoteDataviewManager.mjs +17 -17
  134. package/{esm2020 → esm2022}/src/remote/RemoteInitDataViewCommand.mjs +10 -10
  135. package/{esm2020 → esm2022}/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +16 -16
  136. package/{esm2020 → esm2022}/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +12 -12
  137. package/{esm2020 → esm2022}/src/remote/ResetUserSortRemoteDataviewCommand.mjs +15 -15
  138. package/esm2022/src/remote/ServerError.mjs +40 -0
  139. package/{esm2020 → esm2022}/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +19 -19
  140. package/esm2022/src/rt/Argument.mjs +265 -0
  141. package/esm2022/src/rt/ArgumentsList.mjs +103 -0
  142. package/esm2022/src/rt/Boundary.mjs +152 -0
  143. package/esm2022/src/rt/CompMainPrgTable.mjs +63 -0
  144. package/esm2022/src/rt/DataviewHeaderBase.mjs +98 -0
  145. package/{esm2020 → esm2022}/src/rt/DataviewHeaderFactory.mjs +6 -6
  146. package/esm2022/src/rt/DataviewHeaders.mjs +53 -0
  147. package/{esm2020 → esm2022}/src/rt/DataviewHeadersSaxHandler.mjs +38 -38
  148. package/{esm2020 → esm2022}/src/rt/ExecutionStack.mjs +94 -94
  149. package/{esm2020 → esm2022}/src/rt/ExecutionStackEntry.mjs +17 -17
  150. package/{esm2020 → esm2022}/src/rt/HandlersTable.mjs +96 -96
  151. package/{esm2020 → esm2022}/src/rt/IDataSourceViewDefinition.mjs +1 -1
  152. package/{esm2020 → esm2022}/src/rt/IDataviewHeader.mjs +1 -1
  153. package/{esm2020 → esm2022}/src/rt/IResultValue.mjs +1 -1
  154. package/esm2022/src/rt/LastFocusedManager.mjs +65 -0
  155. package/esm2022/src/rt/Operation.mjs +735 -0
  156. package/esm2022/src/rt/OperationTable.mjs +67 -0
  157. package/esm2022/src/rt/Recompute.mjs +355 -0
  158. package/{esm2020 → esm2022}/src/rt/RecomputeTable.mjs +62 -62
  159. package/{esm2020 → esm2022}/src/rt/RemoteDataviewHeader.mjs +108 -108
  160. package/esm2022/src/rt/ResultValue.mjs +10 -0
  161. package/esm2022/src/rt/TableCache.mjs +177 -0
  162. package/esm2022/src/rt/TableCacheManager.mjs +67 -0
  163. package/esm2022/src/rt/Transaction.mjs +53 -0
  164. package/esm2022/src/security/UserDetails.mjs +71 -0
  165. package/{esm2020 → esm2022}/src/tasks/IMGDataCollection.mjs +1 -1
  166. package/esm2022/src/tasks/MGData.mjs +552 -0
  167. package/esm2022/src/tasks/MGDataCollection.mjs +252 -0
  168. package/esm2022/src/tasks/RCTimer.mjs +63 -0
  169. package/{esm2020 → esm2022}/src/tasks/RemoteTaskService.mjs +44 -44
  170. package/esm2022/src/tasks/Task.mjs +2499 -0
  171. package/esm2022/src/tasks/TaskBase.mjs +83 -0
  172. package/{esm2020 → esm2022}/src/tasks/TaskServiceBase.mjs +24 -24
  173. package/esm2022/src/tasks/TasksTable.mjs +80 -0
  174. package/esm2022/src/tasks/sort/Sort.mjs +5 -0
  175. package/{esm2020 → esm2022}/src/tasks/sort/SortCollection.mjs +67 -67
  176. package/{esm2020 → esm2022}/src/util/ConstUtils.mjs +13 -13
  177. package/esm2022/src/util/FlowMonitorQueue.mjs +451 -0
  178. package/{esm2020 → esm2022}/src/util/HeapSort.mjs +69 -69
  179. package/{esm2020 → esm2022}/src/util/IMirrorXML.mjs +1 -1
  180. package/{esm2020 → esm2022}/src/util/IServerConfig.mjs +1 -1
  181. package/{esm2020 → esm2022}/src/util/MgBlockingQueue.mjs +1 -1
  182. package/esm2022/src/util/MgPriorityBlockingQueue.mjs +74 -0
  183. package/esm2022/src/util/MgPriorityQueue.mjs +66 -0
  184. package/{esm2020 → esm2022}/src/util/ParamParseResult.mjs +7 -7
  185. package/esm2022/src/util/PrmMap.mjs +152 -0
  186. package/esm2022/src/util/ReturnResult.mjs +46 -0
  187. package/esm2022/src/util/ReturnResultBase.mjs +18 -0
  188. package/esm2022/src/util/Scrambler.mjs +89 -0
  189. package/esm2022/src/util/UniqueIDUtils.mjs +13 -0
  190. package/{esm2020 → esm2022}/src/util/cookie.service.mjs +92 -92
  191. package/{fesm2020 → fesm2022}/magic-xpa-engine.mjs +29888 -29690
  192. package/fesm2022/magic-xpa-engine.mjs.map +1 -0
  193. package/index.d.ts +187 -187
  194. package/package.json +8 -14
  195. package/src/AccessHelper.d.ts +20 -20
  196. package/src/ClientManager.d.ts +35 -32
  197. package/src/CommandsProcessorBase.d.ts +23 -23
  198. package/src/CommandsProcessorManager.d.ts +6 -6
  199. package/src/CommandsTable.d.ts +22 -22
  200. package/src/ConstInterface.d.ts +516 -515
  201. package/src/CurrentClientVersion.d.ts +1 -1
  202. package/src/FlowMonitorInterface.d.ts +15 -15
  203. package/src/GUIManager.d.ts +17 -17
  204. package/src/GlobalCommandsManager.d.ts +17 -17
  205. package/src/GuiEventsProcessor.d.ts +24 -24
  206. package/src/ICommandsTable.d.ts +9 -9
  207. package/src/ServerConfig.d.ts +35 -34
  208. package/src/bridge/IGuiEvent.d.ts +19 -19
  209. package/src/bridge/MagicBridge.d.ts +16 -16
  210. package/src/commands/ClientOriginatedCommandTaskTag.d.ts +8 -8
  211. package/src/commands/ClientToServer/AddUserLocateDataViewCommand.d.ts +4 -4
  212. package/src/commands/ClientToServer/AddUserRangeDataviewCommand.d.ts +6 -6
  213. package/src/commands/ClientToServer/AddUserSortDataViewCommand.d.ts +6 -6
  214. package/src/commands/ClientToServer/BrowserEscEventCommand.d.ts +9 -8
  215. package/src/commands/ClientToServer/ClientOriginatedCommand.d.ts +8 -8
  216. package/src/commands/ClientToServer/ClientOriginatedCommandSerializer.d.ts +6 -6
  217. package/src/commands/ClientToServer/ColumnSortEventCommand.d.ts +11 -10
  218. package/src/commands/ClientToServer/CommandFactory.d.ts +64 -64
  219. package/src/commands/ClientToServer/CommandSerializationHelper.d.ts +20 -20
  220. package/src/commands/ClientToServer/ComputeEventCommand.d.ts +9 -8
  221. package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +8 -7
  222. package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +8 -7
  223. package/src/commands/ClientToServer/ControlItemsRefreshCommand.d.ts +6 -6
  224. package/src/commands/ClientToServer/DataViewOutputCommand.d.ts +9 -9
  225. package/src/commands/ClientToServer/DataviewCommand.d.ts +32 -32
  226. package/src/commands/ClientToServer/EvaluateCommand.d.ts +16 -15
  227. package/src/commands/ClientToServer/EventCommand.d.ts +16 -15
  228. package/src/commands/ClientToServer/ExecOperCommand.d.ts +24 -23
  229. package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +9 -8
  230. package/src/commands/ClientToServer/GlobalParamsQueryCommand.d.ts +5 -5
  231. package/src/commands/ClientToServer/ICommandTaskTag.d.ts +3 -3
  232. package/src/commands/ClientToServer/IndexChangeEventCommand.d.ts +9 -8
  233. package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +11 -10
  234. package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +9 -8
  235. package/src/commands/ClientToServer/QueryCommand.d.ts +8 -8
  236. package/src/commands/ClientToServer/RecomputeCommand.d.ts +12 -11
  237. package/src/commands/ClientToServer/RefreshEventCommand.d.ts +13 -12
  238. package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +11 -10
  239. package/src/commands/ClientToServer/RollbackEventCommand.d.ts +15 -14
  240. package/src/commands/ClientToServer/SelectProgramCommand.d.ts +7 -6
  241. package/src/commands/ClientToServer/SetTransactionStateDataviewCommand.d.ts +5 -5
  242. package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +9 -8
  243. package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +10 -9
  244. package/src/commands/ClientToServer/TransactionCommand.d.ts +14 -12
  245. package/src/commands/ClientToServer/UnloadCommand.d.ts +8 -7
  246. package/src/commands/ClientToServer/WriteMessageToServerLogCommand.d.ts +6 -6
  247. package/src/commands/DataViewCommandBase.d.ts +6 -6
  248. package/src/commands/IClientCommand.d.ts +2 -2
  249. package/src/commands/IClientTargetedCommand.d.ts +12 -12
  250. package/src/commands/IClientToServerCommandInfo.d.ts +4 -3
  251. package/src/commands/ServerToClient/AbortCommand.d.ts +11 -11
  252. package/src/commands/ServerToClient/AddLocateCommand.d.ts +6 -6
  253. package/src/commands/ServerToClient/AddRangeCommand.d.ts +10 -10
  254. package/src/commands/ServerToClient/AddSortCommand.d.ts +9 -9
  255. package/src/commands/ServerToClient/ClientRefreshCommand.d.ts +7 -7
  256. package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +12 -12
  257. package/src/commands/ServerToClient/EnhancedVerifyCommand.d.ts +13 -13
  258. package/src/commands/ServerToClient/OpenURLCommand.d.ts +21 -21
  259. package/src/commands/ServerToClient/ResetLocateCommand.d.ts +6 -6
  260. package/src/commands/ServerToClient/ResetRangeCommand.d.ts +6 -6
  261. package/src/commands/ServerToClient/ResetSortCommand.d.ts +6 -6
  262. package/src/commands/ServerToClient/ResultCommand.d.ts +10 -10
  263. package/src/commands/ServerToClient/VerifyCommand.d.ts +17 -17
  264. package/src/commands/ServerToClient/XMLBasedCommandBuilder.d.ts +11 -11
  265. package/src/communications/IConnectionStateManager.d.ts +4 -4
  266. package/src/communications/InteractiveCommunicationsFailureHandler.d.ts +6 -6
  267. package/src/data/DataSourceIdKey.d.ts +2 -2
  268. package/src/data/DataView.d.ts +162 -162
  269. package/src/data/DataViewBase.d.ts +12 -12
  270. package/src/data/DataviewManager.d.ts +14 -14
  271. package/src/data/DataviewManagerBase.d.ts +11 -11
  272. package/src/data/DvCache.d.ts +15 -15
  273. package/src/data/Field.d.ts +103 -103
  274. package/src/data/FieldBase.d.ts +23 -23
  275. package/src/data/FieldsTable.d.ts +27 -27
  276. package/src/data/IRecordsTable.d.ts +7 -7
  277. package/src/data/Key.d.ts +15 -15
  278. package/src/data/Record.d.ts +157 -156
  279. package/src/data/RecordOutOfDataViewException.d.ts +10 -10
  280. package/src/data/RecordsTable.d.ts +38 -38
  281. package/src/data/TaskTransactionManager.d.ts +17 -17
  282. package/src/data/XMLBasedDcValuesBuilder.d.ts +11 -11
  283. package/src/enums.d.ts +21 -21
  284. package/src/env/EnvVariablesTable.d.ts +17 -17
  285. package/src/env/Environment.d.ts +118 -118
  286. package/src/env/ILanguageData.d.ts +3 -3
  287. package/src/env/LanguageData.d.ts +20 -20
  288. package/src/env/MirrorString.d.ts +15 -15
  289. package/src/event/ActionManager.d.ts +14 -14
  290. package/src/event/Event.d.ts +79 -79
  291. package/src/event/EventHandler.d.ts +66 -66
  292. package/src/event/EventHandlerPosition.d.ts +25 -25
  293. package/src/event/EventsManager.d.ts +205 -204
  294. package/src/event/IEventsManager.d.ts +77 -77
  295. package/src/event/RunTimeEvent.d.ts +126 -123
  296. package/src/event/RunTimeEventBase.d.ts +5 -5
  297. package/src/event/UserEventsTable.d.ts +11 -11
  298. package/src/exp/ExpTable.d.ts +11 -11
  299. package/src/exp/Expression.d.ts +37 -37
  300. package/src/exp/ExpressionDict.d.ts +12 -12
  301. package/src/exp/ExpressionEvaluator.d.ts +198 -198
  302. package/src/exp/ExpressionLocalJpn.d.ts +18 -18
  303. package/src/exp/GlobalParamsTable.d.ts +19 -19
  304. package/src/exp/YesNoExp.d.ts +9 -9
  305. package/src/gui/CreatedFormVector.d.ts +10 -10
  306. package/src/gui/FormsTable.d.ts +15 -15
  307. package/src/gui/MgControl.d.ts +60 -60
  308. package/src/gui/MgForm.d.ts +96 -93
  309. package/src/http/HttpManager.d.ts +25 -25
  310. package/src/http/client/HttpClientAsync.d.ts +16 -16
  311. package/src/http/client/HttpClientBase.d.ts +30 -30
  312. package/src/http/client/HttpClientEvents.d.ts +18 -18
  313. package/src/http/client/HttpClientSync.d.ts +17 -17
  314. package/src/http/client/HttpUtility.d.ts +10 -10
  315. package/src/http/client/ICommunicationsFailureHandler.d.ts +5 -5
  316. package/src/remote/AddUserLocateRemoteDataViewCommand.d.ts +8 -8
  317. package/src/remote/AddUserRangeRemoteDataViewCommand.d.ts +8 -8
  318. package/src/remote/AddUserSortRemoteDataViewCommand.d.ts +8 -8
  319. package/src/remote/RemoteCommandsProcessor.d.ts +51 -51
  320. package/src/remote/RemoteControlItemsRefreshCommand.d.ts +8 -8
  321. package/src/remote/RemoteDataViewCommandBase.d.ts +10 -10
  322. package/src/remote/RemoteDataViewCommandFactory.d.ts +6 -6
  323. package/src/remote/RemoteDataViewCommandUpdateNonModifiable.d.ts +8 -8
  324. package/src/remote/RemoteDataviewManager.d.ts +9 -9
  325. package/src/remote/RemoteInitDataViewCommand.d.ts +7 -7
  326. package/src/remote/ResetUserLocateRemoteDataviewCommand.d.ts +7 -7
  327. package/src/remote/ResetUserRangeRemoteDataviewCommand.d.ts +7 -7
  328. package/src/remote/ResetUserSortRemoteDataviewCommand.d.ts +7 -7
  329. package/src/remote/ServerError.d.ts +16 -16
  330. package/src/remote/SetTransactionStateRemoteDataViewCommand.d.ts +8 -8
  331. package/src/rt/Argument.d.ts +36 -36
  332. package/src/rt/ArgumentsList.d.ts +24 -24
  333. package/src/rt/Boundary.d.ts +27 -27
  334. package/src/rt/CompMainPrgTable.d.ts +10 -10
  335. package/src/rt/DataviewHeaderBase.d.ts +34 -34
  336. package/src/rt/DataviewHeaderFactory.d.ts +5 -5
  337. package/src/rt/DataviewHeaders.d.ts +12 -12
  338. package/src/rt/DataviewHeadersSaxHandler.d.ts +10 -10
  339. package/src/rt/ExecutionStack.d.ts +22 -22
  340. package/src/rt/ExecutionStackEntry.d.ts +7 -7
  341. package/src/rt/HandlersTable.d.ts +19 -19
  342. package/src/rt/IDataSourceViewDefinition.d.ts +6 -6
  343. package/src/rt/IDataviewHeader.d.ts +10 -10
  344. package/src/rt/IResultValue.d.ts +4 -4
  345. package/src/rt/LastFocusedManager.d.ts +23 -23
  346. package/src/rt/Operation.d.ts +97 -97
  347. package/src/rt/OperationTable.d.ts +15 -15
  348. package/src/rt/Recompute.d.ts +41 -41
  349. package/src/rt/RecomputeTable.d.ts +9 -9
  350. package/src/rt/RemoteDataviewHeader.d.ts +14 -14
  351. package/src/rt/ResultValue.d.ts +7 -7
  352. package/src/rt/TableCache.d.ts +29 -29
  353. package/src/rt/TableCacheManager.d.ts +10 -10
  354. package/src/rt/Transaction.d.ts +23 -23
  355. package/src/security/UserDetails.d.ts +16 -16
  356. package/src/tasks/IMGDataCollection.d.ts +26 -26
  357. package/src/tasks/MGData.d.ts +63 -63
  358. package/src/tasks/MGDataCollection.d.ts +42 -42
  359. package/src/tasks/RCTimer.d.ts +13 -13
  360. package/src/tasks/RemoteTaskService.d.ts +16 -16
  361. package/src/tasks/Task.d.ts +312 -312
  362. package/src/tasks/TaskBase.d.ts +123 -123
  363. package/src/tasks/TaskServiceBase.d.ts +16 -16
  364. package/src/tasks/TasksTable.d.ts +21 -21
  365. package/src/tasks/sort/Sort.d.ts +4 -4
  366. package/src/tasks/sort/SortCollection.d.ts +11 -11
  367. package/src/util/ConstUtils.d.ts +3 -3
  368. package/src/util/FlowMonitorQueue.d.ts +70 -70
  369. package/src/util/HeapSort.d.ts +6 -6
  370. package/src/util/IMirrorXML.d.ts +6 -6
  371. package/src/util/IServerConfig.d.ts +11 -11
  372. package/src/util/MgBlockingQueue.d.ts +5 -5
  373. package/src/util/MgPriorityBlockingQueue.d.ts +17 -17
  374. package/src/util/MgPriorityQueue.d.ts +13 -13
  375. package/src/util/ParamParseResult.d.ts +6 -6
  376. package/src/util/PrmMap.d.ts +28 -28
  377. package/src/util/ReturnResult.d.ts +18 -18
  378. package/src/util/ReturnResultBase.d.ts +11 -11
  379. package/src/util/Scrambler.d.ts +10 -10
  380. package/src/util/UniqueIDUtils.d.ts +4 -4
  381. package/src/util/cookie.service.d.ts +8 -8
  382. package/esm2020/src/AccessHelper.mjs +0 -9
  383. package/esm2020/src/ClientManager.mjs +0 -399
  384. package/esm2020/src/CommandsProcessorBase.mjs +0 -58
  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/bridge/MagicBridge.mjs +0 -41
  393. package/esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs +0 -11
  394. package/esm2020/src/commands/ClientToServer/BrowserEscEventCommand.mjs +0 -23
  395. package/esm2020/src/commands/ClientToServer/ColumnSortEventCommand.mjs +0 -26
  396. package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +0 -260
  397. package/esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -69
  398. package/esm2020/src/commands/ClientToServer/ComputeEventCommand.mjs +0 -23
  399. package/esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
  400. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +0 -36
  401. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +0 -67
  402. package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -22
  403. package/esm2020/src/commands/ClientToServer/IndexChangeEventCommand.mjs +0 -21
  404. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +0 -23
  405. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +0 -27
  406. package/esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs +0 -27
  407. package/esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +0 -24
  408. package/esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs +0 -39
  409. package/esm2020/src/commands/ClientToServer/SelectProgramCommand.mjs +0 -15
  410. package/esm2020/src/commands/ClientToServer/SubformOpenEventCommand.mjs +0 -21
  411. package/esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +0 -24
  412. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +0 -28
  413. package/esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +0 -18
  414. package/esm2020/src/commands/DataViewCommandBase.mjs +0 -10
  415. package/esm2020/src/commands/IClientTargetedCommand.mjs +0 -9
  416. package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +0 -65
  417. package/esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs +0 -25
  418. package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +0 -27
  419. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +0 -45
  420. package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +0 -221
  421. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +0 -37
  422. package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +0 -83
  423. package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +0 -17
  424. package/esm2020/src/data/DataView.mjs +0 -1610
  425. package/esm2020/src/data/DataviewManager.mjs +0 -28
  426. package/esm2020/src/data/DataviewManagerBase.mjs +0 -15
  427. package/esm2020/src/data/DvCache.mjs +0 -67
  428. package/esm2020/src/data/Field.mjs +0 -646
  429. package/esm2020/src/data/FieldBase.mjs +0 -18
  430. package/esm2020/src/data/FieldsTable.mjs +0 -103
  431. package/esm2020/src/data/Record.mjs +0 -846
  432. package/esm2020/src/data/RecordsTable.mjs +0 -267
  433. package/esm2020/src/env/EnvVariablesTable.mjs +0 -340
  434. package/esm2020/src/env/Environment.mjs +0 -489
  435. package/esm2020/src/env/LanguageData.mjs +0 -226
  436. package/esm2020/src/event/ActionManager.mjs +0 -91
  437. package/esm2020/src/event/Event.mjs +0 -1333
  438. package/esm2020/src/event/EventHandler.mjs +0 -766
  439. package/esm2020/src/event/EventHandlerPosition.mjs +0 -204
  440. package/esm2020/src/event/EventsManager.mjs +0 -2975
  441. package/esm2020/src/event/RunTimeEvent.mjs +0 -392
  442. package/esm2020/src/event/UserEventsTable.mjs +0 -47
  443. package/esm2020/src/exp/ExpTable.mjs +0 -59
  444. package/esm2020/src/exp/Expression.mjs +0 -200
  445. package/esm2020/src/exp/ExpressionDict.mjs +0 -727
  446. package/esm2020/src/exp/ExpressionEvaluator.mjs +0 -4208
  447. package/esm2020/src/exp/ExpressionLocalJpn.mjs +0 -314
  448. package/esm2020/src/exp/YesNoExp.mjs +0 -36
  449. package/esm2020/src/gui/CreatedFormVector.mjs +0 -23
  450. package/esm2020/src/gui/FormsTable.mjs +0 -66
  451. package/esm2020/src/gui/MgControl.mjs +0 -353
  452. package/esm2020/src/gui/MgForm.mjs +0 -1181
  453. package/esm2020/src/http/HttpManager.mjs +0 -97
  454. package/esm2020/src/http/client/HttpClientAsync.mjs +0 -67
  455. package/esm2020/src/http/client/HttpClientEvents.mjs +0 -39
  456. package/esm2020/src/http/client/HttpClientSync.mjs +0 -42
  457. package/esm2020/src/http/client/HttpUtility.mjs +0 -84
  458. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +0 -880
  459. package/esm2020/src/remote/ServerError.mjs +0 -40
  460. package/esm2020/src/rt/Argument.mjs +0 -265
  461. package/esm2020/src/rt/ArgumentsList.mjs +0 -103
  462. package/esm2020/src/rt/Boundary.mjs +0 -152
  463. package/esm2020/src/rt/CompMainPrgTable.mjs +0 -65
  464. package/esm2020/src/rt/DataviewHeaderBase.mjs +0 -96
  465. package/esm2020/src/rt/DataviewHeaders.mjs +0 -53
  466. package/esm2020/src/rt/LastFocusedManager.mjs +0 -67
  467. package/esm2020/src/rt/Operation.mjs +0 -735
  468. package/esm2020/src/rt/OperationTable.mjs +0 -67
  469. package/esm2020/src/rt/Recompute.mjs +0 -355
  470. package/esm2020/src/rt/ResultValue.mjs +0 -12
  471. package/esm2020/src/rt/TableCache.mjs +0 -177
  472. package/esm2020/src/rt/TableCacheManager.mjs +0 -67
  473. package/esm2020/src/rt/Transaction.mjs +0 -53
  474. package/esm2020/src/security/UserDetails.mjs +0 -71
  475. package/esm2020/src/tasks/MGData.mjs +0 -552
  476. package/esm2020/src/tasks/MGDataCollection.mjs +0 -252
  477. package/esm2020/src/tasks/RCTimer.mjs +0 -63
  478. package/esm2020/src/tasks/Task.mjs +0 -2496
  479. package/esm2020/src/tasks/TaskBase.mjs +0 -87
  480. package/esm2020/src/tasks/TasksTable.mjs +0 -80
  481. package/esm2020/src/tasks/sort/Sort.mjs +0 -7
  482. package/esm2020/src/util/FlowMonitorQueue.mjs +0 -453
  483. package/esm2020/src/util/MgPriorityBlockingQueue.mjs +0 -74
  484. package/esm2020/src/util/MgPriorityQueue.mjs +0 -66
  485. package/esm2020/src/util/PrmMap.mjs +0 -151
  486. package/esm2020/src/util/ReturnResult.mjs +0 -46
  487. package/esm2020/src/util/ReturnResultBase.mjs +0 -18
  488. package/esm2020/src/util/Scrambler.mjs +0 -89
  489. package/esm2020/src/util/UniqueIDUtils.mjs +0 -12
  490. package/fesm2015/magic-xpa-engine.mjs +0 -30837
  491. package/fesm2015/magic-xpa-engine.mjs.map +0 -1
  492. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2V2ZW50L0V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsSUFBSSxFQUNKLFNBQVMsRUFDVCxLQUFLLEVBRUwsT0FBTyxFQUNQLE9BQU8sRUFDUCxZQUFZLEVBQ1osUUFBUSxFQUNSLGFBQWEsRUFDZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sSUFBSSxFQUNKLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxXQUFXLEVBRVgsK0JBQStCLEVBQ2hDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUsvQyxNQUFNLE9BQU8sS0FBSztJQUlSLE1BQU0sQ0FBQyxjQUFjLEdBQVcsQ0FBQyxDQUFDO0lBQzFDLEdBQUcsR0FBZSxJQUFJLENBQUM7SUFDdkIsVUFBVSxHQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDdkMsTUFBTSxHQUFpQixJQUFJLENBQUM7SUFFNUIsV0FBVyxHQUFXLElBQUksQ0FBQztJQUMzQixXQUFXLEdBQVcsSUFBSSxDQUFDO0lBQzNCLFVBQVUsR0FBYSxJQUFJLENBQUM7SUFDNUIsV0FBVyxHQUFXLENBQUMsQ0FBQztJQUNoQixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBRS9CLFFBQVEsR0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ2xDLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsS0FBSyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdEIsb0JBQW9CLEdBQVcsSUFBSSxDQUFDO0lBQ3BDLDRCQUE0QixHQUFXLENBQUMsQ0FBQztJQUN6QyxZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQ2xDLFdBQVcsR0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBRXJDLGFBQWEsR0FBVyxDQUFDLENBQUM7SUFDMUIsVUFBVSxHQUFXLElBQUksQ0FBQztJQUMxQixPQUFPLEdBQVUsSUFBSSxDQUFDO0lBQ3RCLGNBQWMsR0FBVyxJQUFJLENBQUM7SUFHOUI7UUFDRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUtPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBS1MsYUFBYSxDQUFDLEdBQVU7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBUUQsUUFBUSxDQUFDLFNBQW9CLEVBQUUsT0FBaUI7UUFDOUMsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksVUFBVSxHQUFXLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUMxRyxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUVuRSxJQUFJLEdBQUcsR0FBVyxTQUFTLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELFNBQVMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV2RyxJQUFJLFlBQVksR0FBaUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV6SCxJQUFJLFlBQVksR0FBcUIsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3ZELFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBRS9CLFNBQVMsQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWpDLElBQUksU0FBUyxLQUFLLElBQUk7Z0JBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3pDOztZQUNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsMENBQTBDLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsU0FBb0I7UUFDM0MsSUFBSSxPQUFPLEdBQVcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdDLFFBQVEsT0FBTyxFQUFFO1lBQ2YsS0FBSyxZQUFZLENBQUMsNkJBQTZCO2dCQUM3QyxJQUFJLFNBQVMsR0FBVyxTQUFTLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUVyQyxJQUFJLFVBQVUsR0FBVyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDeEksU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkcsTUFBTTtZQUNSO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7SUFPTyxZQUFZLENBQUMsWUFBMEIsRUFBRSxPQUFpQixFQUFFLFlBQThCO1FBQ2hHLElBQUksUUFBUSxHQUFjLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDbEQsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDekIsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RCxJQUFJLFNBQVMsR0FBVyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLFFBQVEsR0FBVyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdEQsUUFBUSxTQUFTLEVBQUU7Z0JBQ2pCLEtBQUssY0FBYyxDQUFDLGlCQUFpQjtvQkFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLE1BQU07Z0JBRVIsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO29CQUNsQyxRQUFRLEdBQWMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxNQUFNO2dCQUVSLEtBQUssY0FBYyxDQUFDLHFCQUFxQjtvQkFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNoRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGVBQWU7b0JBQ2pDLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNyQyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGVBQWU7b0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDM0MsTUFBTTtnQkFDUixLQUFLLFlBQVksQ0FBQyxXQUFXO29CQUUzQixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGtCQUFrQjtvQkFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBYyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsWUFBWTtvQkFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGNBQWM7b0JBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDL0MsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxjQUFjO29CQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzlDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsaUJBQWlCO29CQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztvQkFDNUIsTUFBTTtnQkFDUixLQUFLLFlBQVksQ0FBQyxhQUFhO29CQUM3QixJQUFJLFFBQVEsR0FBVyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFFOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0IsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxhQUFhO29CQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztvQkFDNUIsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxZQUFZO29CQUM5QixZQUFZLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztvQkFDOUIsTUFBTTtnQkFFUixLQUFLLFlBQVksQ0FBQyxZQUFZO29CQUM1QixJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3RDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsNkJBQTZCO29CQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsK0JBQStCO29CQUNqRCxNQUFNO2dCQUNSO29CQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnRkFBZ0YsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUN4SixNQUFNO2FBQ1Q7U0FDRjtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsaUJBQWlCO1lBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFPTyxZQUFZLENBQUMsT0FBaUIsRUFBRSxTQUFpQjtRQUN2RCxJQUFJLEtBQUssR0FBVyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2QsSUFBSSxRQUFRLEdBQVcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEQsSUFBSSxPQUFPLEtBQUssSUFBSTtnQkFDbEIsUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTFELElBQUksTUFBTSxHQUF1QixZQUFZLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVoRixJQUFJLEtBQUssR0FBVyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbEUsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO2dCQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7b0JBQ3pCLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyx1REFBdUQsR0FBRyxRQUFRO3dCQUMvRix1QkFBdUIsR0FBRyxLQUFLLENBQUMsQ0FBQztpQkFDcEM7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQzFCO2lCQUVJO2dCQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO2dCQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7YUFDckI7U0FDRjtJQUNILENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxTQUFpQjtRQUM1QyxJQUFJLE9BQU8sR0FBb0MsSUFBSSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3RyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFRTyxtQkFBbUIsQ0FBQyxnQkFBa0M7SUFDOUQsQ0FBQztJQUtELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtZQUMxRSxJQUFJLE1BQU0sR0FBdUIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNGLElBQUksTUFBTSxLQUFLLElBQUk7Z0JBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFdkQsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUk7Z0JBQ3ZCLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLDhFQUE4RSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBRXZKO0lBQ0gsQ0FBQztJQUtELE1BQU0sQ0FBQyxHQUFVO1FBQ2YsSUFBSSxNQUFNLEdBQVksS0FBSyxDQUFDO1FBRzVCLElBQUksSUFBSSxLQUFLLEdBQUc7WUFDZCxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBRVgsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDakMsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNsQixLQUFLLGNBQWMsQ0FBQyxpQkFBaUI7b0JBQ25DLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLE1BQU07Z0JBRVIsS0FBSyxjQUFjLENBQUMsbUJBQW1CO29CQUNyQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDcEQsTUFBTTtnQkFFUixLQUFLLGNBQWMsQ0FBQyxnQkFBZ0I7b0JBQ2xDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMxQyxNQUFNO2dCQUVSLEtBQUssY0FBYyxDQUFDLHFCQUFxQixDQUFDO2dCQUMxQyxLQUFLLGNBQWMsQ0FBQyxpQkFBaUI7b0JBQ25DLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxNQUFNO2dCQUVSLEtBQUssY0FBYyxDQUFDLGVBQWU7b0JBQ2pDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4QyxNQUFNO2dCQUVSLEtBQUssY0FBYyxDQUFDLG9CQUFvQjtvQkFDdEMsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEtBQUssR0FBRyxDQUFDLDhCQUE4QixFQUFFLEVBQUU7d0JBQzlFLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDOzRCQUMvRSxNQUFNLEdBQUcsSUFBSSxDQUFDO3FCQUNqQjtvQkFDRCxNQUFNO2dCQUVSO29CQUNFLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ2YsTUFBTTthQUNUO1NBQ0Y7UUFHRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGlCQUFpQixFQUFFO1lBQ3JHLElBQUksS0FBSyxHQUFXLElBQUksQ0FBQztZQUN6QixJQUFJLEtBQUssR0FBVyxJQUFJLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxlQUFlLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsZUFBZTtnQkFDL0YsTUFBTSxHQUFHLEtBQUssQ0FBQztpQkFDWixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGlCQUFpQixFQUFFO2dCQUN4RCxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDeEIsS0FBSyxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUM7YUFDdkM7aUJBQU07Z0JBQ0wsS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZCLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsVUFBVSxDQUFDO2FBQ3hDO1lBQ0QsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJO2dCQUNsQyxNQUFNLEdBQUcsS0FBSyxDQUFDOztnQkFFZixNQUFNLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7U0FDOUI7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLG1CQUFtQixJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGlCQUFpQixFQUFFO1lBQzlHLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNsSixNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ2pCO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxlQUFlLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsZUFBZSxFQUFFO1lBRXhHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUlyQixNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBS0QsS0FBSyxDQUFDLGFBQWE7UUFFakIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRTtZQUN4RSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3BFLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJO2dCQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQU1ELFdBQVcsQ0FBQyxJQUFZO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBSTFCLElBQUksSUFBSSxLQUFLLGlCQUFpQixDQUFDLFVBQVUsSUFBSSxJQUFJLEtBQUssaUJBQWlCLENBQUMsZUFBZTtZQUNyRixrQkFBa0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFNRCxhQUFhLENBQUMsTUFBa0I7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMscUJBQXFCLENBQUM7UUFDbEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDcEIsQ0FBQztJQUtELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUtPLGNBQWM7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ2pGLENBQUM7SUFNRCxTQUFTLENBQUMsWUFBMEI7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQU1ELGVBQWUsQ0FBQyxZQUEwQjtRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBS0QsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBS0QsT0FBTyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQU1ELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLG1CQUFtQjtZQUNuRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ3hCLENBQUM7SUFLRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxpQkFBaUI7WUFDakQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQU1ELEtBQUssQ0FBQyxlQUFlO1FBRW5CLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMscUJBQXFCO1lBQ3JELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssY0FBYyxDQUFDLHFCQUFxQixDQUFDO1lBQ3BILE9BQU8sSUFBSSxDQUFDO1FBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxlQUFlO1lBQy9DLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqSCxPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsK0JBQStCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckksQ0FBQztJQU1ELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUlELFdBQVcsQ0FBQyxXQUFxQjtRQUMvQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzdCO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFLTyxhQUFhO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBTU8sYUFBYSxDQUFDLFdBQW9CO1FBQ3hDLElBQUksS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUN2QixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDbEIsS0FBSyxjQUFjLENBQUMsbUJBQW1CO2dCQUNyQyxRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQzFCLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO3dCQUN2QyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDckcsTUFBTTtvQkFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjt3QkFDdkMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUM7d0JBQ3JHLE1BQU07b0JBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7d0JBQ3RDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDO3dCQUNuRyxNQUFNO29CQUVSLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO3dCQUN0QyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDbkcsTUFBTTtvQkFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjt3QkFDdkMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDO3dCQUMzRyxNQUFNO29CQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO3dCQUN2QyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUM7d0JBQzNHLE1BQU07b0JBRVIsS0FBSyxpQkFBaUIsQ0FBQyx3QkFBd0I7d0JBQzdDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLDJCQUEyQixHQUFHLEdBQUcsQ0FBQzt3QkFDdkgsTUFBTTtvQkFFUixLQUFLLGlCQUFpQixDQUFDLGVBQWU7d0JBQ3BDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQzt3QkFDckcsTUFBTTtvQkFFUjt3QkFDRSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsR0FBRyxHQUFHLENBQUM7d0JBQ3JILE1BQU07aUJBQ1Q7Z0JBQ0QsS0FBSyxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzdELE1BQU07WUFFUixLQUFLLGNBQWMsQ0FBQyxpQkFBaUI7Z0JBQ25DLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztnQkFDakgsS0FBSyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN0QyxNQUFNO1lBRVIsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO2dCQUNsQyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsMEJBQTBCLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLHVCQUF1QixHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JLLE1BQU07WUFFUixLQUFLLGNBQWMsQ0FBQyxxQkFBcUI7Z0JBQ3ZDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLDRCQUE0QixHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1SSxNQUFNO1lBRVIsS0FBSyxjQUFjLENBQUMsZUFBZTtnQkFDakMsS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNuTSxNQUFNO1lBRVIsS0FBSyxjQUFjLENBQUMsb0JBQW9CO2dCQUN0QyxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLDBCQUEwQixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztnQkFDdkosTUFBTTtTQUNUO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBTU0sTUFBTSxDQUFDLHlCQUF5QixDQUFDLGlCQUF5QjtRQUMvRCxJQUFJLFdBQW1CLENBQUM7UUFDeEIsUUFBUSxpQkFBaUIsRUFBRTtZQUN6QixLQUFLLGlCQUFpQixDQUFDLFlBQVk7Z0JBQ2pDLFdBQVcsR0FBRyxhQUFhLENBQUM7Z0JBQzVCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLE9BQU8sQ0FBQztnQkFDdEIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsc0JBQXNCO2dCQUMzQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxtQkFBbUI7Z0JBQ3hDLFdBQVcsR0FBRyxjQUFjLENBQUM7Z0JBQzdCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHdCQUF3QjtnQkFDN0MsV0FBVyxHQUFHLG1CQUFtQixDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxzQkFBc0I7Z0JBQzNDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztnQkFDaEMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUNyQyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUMxQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxhQUFhLENBQUM7Z0JBQzVCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDM0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsWUFBWSxDQUFDO2dCQUMzQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxxQkFBcUI7Z0JBQzFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztnQkFDaEMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsWUFBWSxDQUFDO2dCQUMzQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxXQUFXLENBQUM7Z0JBQzFCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGNBQWMsQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO2dCQUN0QyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxXQUFXLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxXQUFXLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxXQUFXLEdBQUcsY0FBYyxDQUFDO2dCQUM3QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxXQUFXLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxjQUFjO2dCQUNuQyxXQUFXLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxXQUFXLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxtQkFBbUI7Z0JBQ3hDLFdBQVcsR0FBRyxjQUFjLENBQUM7Z0JBQzdCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsV0FBVyxHQUFHLGNBQWMsQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMscUJBQXFCO2dCQUMxQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsWUFBWTtnQkFDakMsV0FBVyxHQUFHLE9BQU8sQ0FBQztnQkFDdEIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMscUJBQXFCO2dCQUMxQyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ2xDLE1BQU07WUFHUixLQUFLLGlCQUFpQixDQUFDLHFCQUFxQjtnQkFDMUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDO2dCQUMvQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxZQUFZLENBQUM7Z0JBQzNCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGVBQWU7Z0JBQ3BDLFdBQVcsR0FBRyxhQUFhLENBQUM7Z0JBQzVCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHdCQUF3QjtnQkFDN0MsV0FBVyxHQUFHLG1CQUFtQixDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxnQkFBZ0I7Z0JBQ3JDLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsbUJBQW1CO2dCQUN4QyxXQUFXLEdBQUcsY0FBYyxDQUFDO2dCQUM3QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxjQUFjO2dCQUNuQyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztnQkFDbEMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUM5QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDL0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMscUJBQXFCO2dCQUMxQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDM0MsV0FBVyxHQUFHLGlCQUFpQixDQUFDO2dCQUNoQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxVQUFVO2dCQUMvQixXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxnQkFBZ0I7Z0JBQ3JDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLFdBQVc7Z0JBQ2hDLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGVBQWU7Z0JBQ3BDLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBQ3pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGdCQUFnQjtnQkFDckMsV0FBVyxHQUFHLFdBQVcsQ0FBQztnQkFDMUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMscUJBQXFCO2dCQUMxQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHdCQUF3QjtnQkFDN0MsV0FBVyxHQUFHLG1CQUFtQixDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxtQkFBbUI7Z0JBQ3hDLFdBQVcsR0FBRyxjQUFjLENBQUM7Z0JBQzdCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsV0FBVyxHQUFHLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsdUJBQXVCO2dCQUM1QyxXQUFXLEdBQUcsa0JBQWtCLENBQUM7Z0JBQ2pDLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGNBQWM7Z0JBQ25DLFdBQVcsR0FBRyxhQUFhLENBQUM7Z0JBQzVCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHFCQUFxQjtnQkFDMUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDO2dCQUMvQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxPQUFPLENBQUM7Z0JBQ3RCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDM0MsV0FBVyxHQUFHLGlCQUFpQixDQUFDO2dCQUNoQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxxQkFBcUI7Z0JBQzFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDL0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO2dCQUN0QyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUMxQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBQ3pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLFVBQVUsQ0FBQztnQkFDekIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsVUFBVSxDQUFDO2dCQUN6QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxTQUFTLENBQUM7Z0JBQ3hCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDM0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO2dCQUN0QyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUMxQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxhQUFhLENBQUM7Z0JBQzVCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDM0MsV0FBVyxHQUFHLGlCQUFpQixDQUFDO2dCQUNoQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxxQkFBcUI7Z0JBQzFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDL0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsV0FBVztnQkFDaEMsV0FBVyxHQUFHLE1BQU0sQ0FBQztnQkFDckIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxlQUFlLENBQUM7Z0JBQzlCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHVCQUF1QjtnQkFDNUMsV0FBVyxHQUFHLGtCQUFrQixDQUFDO2dCQUNqQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxzQkFBc0I7Z0JBQzNDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztnQkFDaEMsTUFBTTtZQUdSLEtBQUssaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUNyQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLFlBQVk7Z0JBQ2pDLFdBQVcsR0FBRyxPQUFPLENBQUM7Z0JBQ3RCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGlCQUFpQjtnQkFDdEMsV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDM0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUM5QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxlQUFlLENBQUM7Z0JBQzlCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHVCQUF1QjtnQkFDNUMsV0FBVyxHQUFHLGtCQUFrQixDQUFDO2dCQUNqQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxnQkFBZ0I7Z0JBQ3JDLFdBQVcsR0FBRyxXQUFXLENBQUM7Z0JBQzFCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHVCQUF1QjtnQkFDNUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxXQUFXO2dCQUNoQyxXQUFXLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxtQkFBbUI7Z0JBQ3hDLFdBQVcsR0FBRyxjQUFjLENBQUM7Z0JBQzdCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsV0FBVyxHQUFHLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUNyQyxXQUFXLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxXQUFXLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxlQUFlLENBQUM7Z0JBQzlCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUM5QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyx1QkFBdUI7Z0JBQzVDLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztnQkFDakMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZ0JBQWdCO2dCQUNyQyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUMxQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxhQUFhLENBQUM7Z0JBQzVCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGlCQUFpQjtnQkFDdEMsV0FBVyxHQUFHLGlCQUFpQixDQUFDO2dCQUNoQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLFlBQVk7Z0JBQ2pDLFdBQVcsR0FBRyxPQUFPLENBQUM7Z0JBQ3RCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGlCQUFpQjtnQkFDdEMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHFCQUFxQjtnQkFDMUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO2dCQUNuQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQztnQkFDbkMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsc0JBQXNCO2dCQUMzQyxXQUFXLEdBQUcsd0JBQXdCLENBQUM7Z0JBQ3ZDLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ2xDLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG9CQUFvQjtnQkFDekMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMscUJBQXFCO2dCQUMxQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG9CQUFvQjtnQkFDekMsV0FBVyxHQUFHLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZUFBZTtnQkFDcEMsV0FBVyxHQUFHLFVBQVUsQ0FBQztnQkFDekIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsWUFBWTtnQkFDakMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMscUJBQXFCO2dCQUMxQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG9CQUFvQjtnQkFDekMsV0FBVyxHQUFHLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO2dCQUN0QyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHVCQUF1QjtnQkFDNUMsV0FBVyxHQUFHLGtCQUFrQixDQUFDO2dCQUNqQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxZQUFZLENBQUM7Z0JBQzNCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsV0FBVyxHQUFHLGNBQWMsQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUM5QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxXQUFXLENBQUM7Z0JBQzFCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLFdBQVcsQ0FBQztnQkFDMUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUMxQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBQ3pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO2dCQUN0QyxXQUFXLEdBQUcsVUFBVSxDQUFDO2dCQUN6QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxXQUFXLENBQUM7Z0JBQzFCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGFBQWE7Z0JBQ2xDLFdBQVcsR0FBRyxRQUFRLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLFNBQVM7Z0JBQzlCLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLFdBQVc7Z0JBQ2hDLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHVCQUF1QjtnQkFDNUMsV0FBVyxHQUFHLGtCQUFrQixDQUFDO2dCQUNqQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxzQkFBc0I7Z0JBQzNDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztnQkFDaEMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsd0JBQXdCO2dCQUM3QyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ2xDLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLFVBQVU7Z0JBQy9CLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxPQUFPLENBQUM7Z0JBQ3RCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGlCQUFpQjtnQkFDdEMsV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDM0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUM5QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxlQUFlLENBQUM7Z0JBQzlCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUM5QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxjQUFjLENBQUM7Z0JBQzdCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGlCQUFpQixDQUFDO2dCQUNoQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxjQUFjLENBQUM7Z0JBQzdCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsdUJBQXVCO2dCQUM1QyxXQUFXLEdBQUcsa0JBQWtCLENBQUM7Z0JBQ2pDLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG9CQUFvQjtnQkFDekMsV0FBVyxHQUFHLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZUFBZTtnQkFDcEMsV0FBVyxHQUFHLFVBQVUsQ0FBQztnQkFDekIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZUFBZTtnQkFDcEMsV0FBVyxHQUFHLFVBQVUsQ0FBQztnQkFDekIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO2dCQUN0QyxXQUFXLEdBQUcsWUFBWSxDQUFDO2dCQUMzQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxnQkFBZ0I7Z0JBQ3JDLFdBQVcsR0FBRyxlQUFlLENBQUM7Z0JBQzlCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGdCQUFnQjtnQkFDckMsV0FBVyxHQUFHLGtCQUFrQixDQUFDO2dCQUNqQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyx3QkFBd0I7Z0JBQzdDLFdBQVcsR0FBRyxjQUFjLENBQUM7Z0JBQzdCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHFCQUFxQjtnQkFDMUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDO2dCQUMvQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsV0FBVyxHQUFHLGNBQWMsQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMscUJBQXFCO2dCQUMxQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHVCQUF1QjtnQkFDNUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsdUJBQXVCO2dCQUM1QyxXQUFXLEdBQUcsa0JBQWtCLENBQUM7Z0JBQ2pDLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHFCQUFxQjtnQkFDMUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsWUFBWTtnQkFDakMsV0FBVyxHQUFHLE9BQU8sQ0FBQztnQkFDdEIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsYUFBYTtnQkFDbEMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxZQUFZLENBQUM7Z0JBQzNCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDL0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsbUJBQW1CO2dCQUN4QyxXQUFXLEdBQUcsY0FBYyxDQUFDO2dCQUM3QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxlQUFlLENBQUM7Z0JBQzlCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGlCQUFpQjtnQkFDdEMsV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDM0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsdUJBQXVCO2dCQUM1QyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyx3QkFBd0I7Z0JBQzdDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDL0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsbUJBQW1CO2dCQUN4QyxXQUFXLEdBQUcsY0FBYyxDQUFDO2dCQUM3QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxhQUFhO2dCQUNsQyxXQUFXLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxZQUFZLENBQUM7Z0JBQzNCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGNBQWM7Z0JBQ25DLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGVBQWU7Z0JBQ3BDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLGFBQWEsQ0FBQztnQkFDNUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxzQkFBc0I7Z0JBQzNDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztnQkFDaEMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsdUJBQXVCO2dCQUM1QyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLFdBQVc7Z0JBQ2hDLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsV0FBVyxHQUFHLGNBQWMsQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsbUJBQW1CO2dCQUN4QyxXQUFXLEdBQUcsY0FBYyxDQUFDO2dCQUM3QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyx3QkFBd0I7Z0JBQzdDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztnQkFDbEMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsYUFBYTtnQkFDbEMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsbUJBQW1CO2dCQUN4QyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGVBQWU7Z0JBQ3BDLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBQ3pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDM0MsV0FBVyxHQUFHLGlCQUFpQixDQUFDO2dCQUNoQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxVQUFVO2dCQUMvQixXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxZQUFZO2dCQUNqQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxlQUFlO2dCQUNwQyxXQUFXLEdBQUcsY0FBYyxDQUFDO2dCQUM3QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxlQUFlO2dCQUNwQyxXQUFXLEdBQUcsVUFBVSxDQUFDO2dCQUN6QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO1lBQzVDLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7WUFDNUMsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQztZQUM1QyxLQUFLLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO1lBQzVDLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7WUFDNUMsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQztZQUM1QyxLQUFLLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO1lBQzVDLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7WUFDNUMsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQztZQUM1QyxLQUFLLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO1lBQzdDLEtBQUssaUJBQWlCLENBQUMscUJBQXFCLENBQUM7WUFDN0MsS0FBSyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQztZQUM3QyxLQUFLLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO1lBQzdDLEtBQUssaUJBQWlCLENBQUMscUJBQXFCLENBQUM7WUFDN0MsS0FBSyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQztZQUM3QyxLQUFLLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO1lBQzdDLEtBQUssaUJBQWlCLENBQUMscUJBQXFCLENBQUM7WUFDN0MsS0FBSyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQztZQUM3QyxLQUFLLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDO1lBQzdDLEtBQUssaUJBQWlCLENBQUMscUJBQXFCO2dCQUMxQyxXQUFXLEdBQUcsY0FBYyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hHLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZUFBZTtnQkFDcEMsV0FBVyxHQUFHLFVBQVUsQ0FBQztnQkFDekIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsdUJBQXVCO2dCQUM1QyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDM0MsV0FBVyxHQUFHLGlCQUFpQixDQUFDO2dCQUNoQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxhQUFhLENBQUM7Z0JBQzVCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDM0MsV0FBVyxHQUFHLGNBQWMsQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsd0JBQXdCO2dCQUM3QyxXQUFXLEdBQUcsV0FBVyxDQUFDO2dCQUMxQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyx3QkFBd0I7Z0JBQzdDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztnQkFDbEMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsVUFBVTtnQkFDL0IsV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDM0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsY0FBYztnQkFDbkMsV0FBVyxHQUFHLG1CQUFtQixDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxjQUFjO2dCQUNuQyxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUM5QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxXQUFXO2dCQUNoQyxXQUFXLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxzQkFBc0I7Z0JBQzNDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztnQkFDaEMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUM5QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3pDLFdBQVcsR0FBRyxlQUFlLENBQUM7Z0JBQzlCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHdCQUF3QjtnQkFDN0MsV0FBVyxHQUFHLG1CQUFtQixDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxZQUFZLENBQUM7Z0JBQzNCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGFBQWE7Z0JBQ2xDLFdBQVcsR0FBRyxRQUFRLENBQUM7Z0JBQ3ZCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGdCQUFnQjtnQkFDckMsV0FBVyxHQUFHLE9BQU8sQ0FBQztnQkFDdEIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsb0JBQW9CO2dCQUN6QyxXQUFXLEdBQUcsVUFBVSxDQUFDO2dCQUN6QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGVBQWU7Z0JBQ3BDLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBQ3pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHFCQUFxQjtnQkFDMUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDO2dCQUMvQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDL0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO2dCQUN0QyxXQUFXLEdBQUcsWUFBWSxDQUFDO2dCQUMzQixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyw2QkFBNkI7Z0JBQ2xELFdBQVcsR0FBRyx3QkFBd0IsQ0FBQztnQkFDdkMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsd0JBQXdCO2dCQUM3QyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ2xDLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHlCQUF5QjtnQkFDOUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO2dCQUNuQyxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxtQkFBbUI7Z0JBQ3hDLFdBQVcsR0FBRyxjQUFjLENBQUM7Z0JBQzdCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHdCQUF3QjtnQkFDN0MsV0FBVyxHQUFHLG1CQUFtQixDQUFDO2dCQUNsQyxNQUFNO1lBQ1IsS0FBSyxpQkFBaUIsQ0FBQyx5QkFBeUI7Z0JBQzlDLFdBQVcsR0FBRyw2QkFBNkIsQ0FBQztnQkFDNUMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsc0JBQXNCO2dCQUMzQyxXQUFXLEdBQUcsT0FBTyxDQUFDO2dCQUN0QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxlQUFlO2dCQUNwQyxXQUFXLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyx5QkFBeUI7Z0JBQzlDLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBQ3pCLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG9CQUFvQjtnQkFDekMsV0FBVyxHQUFHLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsc0JBQXNCO2dCQUMzQyxXQUFXLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ2hDLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsV0FBVyxHQUFHLGNBQWMsQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsY0FBYztnQkFDbkMsV0FBVyxHQUFHLFNBQVMsQ0FBQztnQkFDeEIsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsaUJBQWlCO2dCQUN0QyxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUM5QixNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztnQkFDbEMsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZ0NBQWdDO2dCQUNyRCxXQUFXLEdBQUcsMkJBQTJCLENBQUM7Z0JBQzFDLE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsV0FBVyxHQUFHLGNBQWMsQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsdUJBQXVCO2dCQUM1QyxXQUFXLEdBQUcsa0JBQWtCLENBQUM7Z0JBQ2pDLE1BQU07WUFFUjtnQkFDRSxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixNQUFNO1NBRVQ7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBTUQsZ0JBQWdCO1FBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUk7WUFDdkIsT0FBTyxjQUFjLENBQUMsb0JBQW9CLENBQUM7UUFFN0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFLRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFNRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFNTyxxQkFBcUI7UUFDM0IsSUFBSSxHQUFHLEdBQWlCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEdBQUcsS0FBSyxJQUFJO1lBQ2QsT0FBTyxFQUFFLENBQUM7UUFDWixPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBT08sY0FBYztRQUNwQixJQUFJLElBQUksR0FBYSxJQUFJLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUM3QixLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNmLE1BQU0sSUFBSSxJQUFJLENBQUM7aUJBQ1osSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztnQkFFMUIsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxHQUFHLENBQUM7U0FDakI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBUU8sYUFBYSxDQUFDLFFBQWdCO1FBQ3BDLElBQUksUUFBUSxHQUFXLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFZLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztRQUdoQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsUUFBMEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDN0MsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO29CQUN4QixNQUFNLEdBQUcsRUFBRSxDQUFDO29CQUNaLE1BQU07Z0JBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxDQUFDO2dCQUNsQyxLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLEtBQUssZ0JBQWdCLENBQUMsT0FBTztvQkFDM0IsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7b0JBQ3RCLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDbkQsUUFBUSxHQUFHLE1BQU0sQ0FBQztvQkFHbEIsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsSUFBdUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUUsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLElBQXVCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxJQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBRSxLQUFLLGdCQUFnQixDQUFDLElBQUksRUFBRTt3QkFDblEsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBRXZCOzRCQUVFLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQzs0QkFDdkIsSUFBSSxJQUFJLENBQUMsQ0FBQzs0QkFHVixJQUFJLEdBQUcsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQzs0QkFDN0MsTUFBTSxJQUFJLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQW9CLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOzRCQUNsSCxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO3lCQUMzQjs2QkFFSTs0QkFDSCxNQUFNLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQzs0QkFDekIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3lCQUMzRDtxQkFDRjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFFdkI7NEJBRUUsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDOzRCQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBR3RDLElBQUksR0FBRyxHQUFrQixJQUFJLGFBQWEsRUFBRSxDQUFDOzRCQUM3QyxNQUFNLElBQUksV0FBVyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBb0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBQ25ILE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQ3pCOzZCQUFNOzRCQUNMLE1BQU0sR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ25ELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQzFFO3FCQUNGO29CQUVELE1BQU07Z0JBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7Z0JBQzlCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUMzQixLQUFLLGdCQUFnQixDQUFDLElBQUk7b0JBRXhCLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQ2hELE1BQU0sR0FBRyxRQUFRLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDekUsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3FCQUMzRDt5QkFBTTt3QkFDTCxNQUFNLEdBQUcsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDakcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDL0U7b0JBQ0QsTUFBTTtnQkFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU87b0JBQzNCLE1BQU0sR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUN0QixNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQzFELE1BQU07YUFDVDtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxNQUFNLENBQUM7U0FDbkI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBUUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBR0QsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLGNBQWMsQ0FBQyxtQkFBbUI7WUFDekQsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksaUJBQWlCLENBQUMsa0JBQWtCO2dCQUM3RCxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksaUJBQWlCLENBQUMsa0JBQWtCO2dCQUM5RCxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksaUJBQWlCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksY0FBYyxDQUFDLG1CQUFtQjtZQUN6RCxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksaUJBQWlCLENBQUMsZUFBZSxDQUFDO0lBQ2hFLENBQUM7SUFPTSxpQkFBaUIsQ0FBQyxNQUFxQjtRQUM1QyxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDbEIsS0FBSyxjQUFjLENBQUMsbUJBQW1CO2dCQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFDbkUsTUFBTTtZQUVSLEtBQUssY0FBYyxDQUFDLGlCQUFpQjtnQkFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNO1lBRVIsS0FBSyxjQUFjLENBQUMsZUFBZTtnQkFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDckMsTUFBTTtZQUVSLEtBQUssY0FBYyxDQUFDLG9CQUFvQjtnQkFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDekMsTUFBTTtZQUVSLEtBQUssY0FBYyxDQUFDLGdCQUFnQjtnQkFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDckMsTUFBTTtZQUVSLEtBQUssY0FBYyxDQUFDLHFCQUFxQjtnQkFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNO1lBRVI7Z0JBQ0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBS00sa0JBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUM7SUFDbEUsQ0FBQztJQUtNLDhCQUE4QjtRQUNuQyxJQUFJLFNBQVMsR0FBVyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3RDLFFBQVEsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMxQixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtnQkFDdkMsU0FBUyxHQUFHLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDcEQsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxTQUFTLEdBQUcsY0FBYyxDQUFDLHdCQUF3QixDQUFDO2dCQUNwRCxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxpQkFBaUI7Z0JBQ3RDLFNBQVMsR0FBRyxjQUFjLENBQUMsdUJBQXVCLENBQUM7Z0JBQ25ELE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLGlCQUFpQjtnQkFDdEMsU0FBUyxHQUFHLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDbkQsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsa0JBQWtCO2dCQUN2QyxTQUFTLEdBQUcsY0FBYyxDQUFDLHdCQUF3QixDQUFDO2dCQUNwRCxNQUFNO1lBRVIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQ3ZDLFNBQVMsR0FBRyxjQUFjLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3BELE1BQU07WUFFUixLQUFLLGlCQUFpQixDQUFDLHdCQUF3QjtnQkFDN0MsU0FBUyxHQUFHLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQztnQkFDMUQsTUFBTTtZQUVSLEtBQUssaUJBQWlCLENBQUMsZUFBZTtnQkFDcEMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDakQsTUFBTTtTQUNUO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQU1NLFlBQVk7UUFFakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDOUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7WUFDeEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFLTSxrQkFBa0I7UUFDdkIsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3RCLEtBQUssY0FBYyxDQUFDLG1CQUFtQjtnQkFDckMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO2dCQUM5QixNQUFNO1lBQ1IsS0FBSyxjQUFjLENBQUMsaUJBQWlCO2dCQUNuQyxTQUFTLEdBQUcsZUFBZSxDQUFDO2dCQUM1QixNQUFNO1lBQ1IsS0FBSyxjQUFjLENBQUMscUJBQXFCO2dCQUN2QyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixLQUFLLGNBQWMsQ0FBQyxnQkFBZ0I7Z0JBQ2xDLFNBQVMsR0FBRyxjQUFjLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLGNBQWMsQ0FBQyxlQUFlO2dCQUNqQyxTQUFTLEdBQUcsYUFBYSxDQUFDO2dCQUMxQixNQUFNO1lBRVI7Z0JBQ0UsU0FBUyxHQUFHLEVBQUUsQ0FBQztnQkFDZixNQUFNO1NBQ1Q7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBS0Qsc0JBQXNCLENBQUMsSUFBWTtRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksaUJBQWlCLEdBQVcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUtELHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBSUQsOEJBQThCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDO0lBQzNDLENBQUM7SUFLRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFPRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQXBwbGljYXRpb25FeGNlcHRpb24sXHJcbiAgQ2hhcixcclxuICBIYXNoVXRpbHMsXHJcbiAgSW50MzIsXHJcbiAgTGlzdCxcclxuICBOTnVtYmVyLFxyXG4gIE5TdHJpbmcsXHJcbiAgTnVtYmVyU3R5bGVzLFxyXG4gIFJlZlBhcmFtLFxyXG4gIFN0cmluZ0J1aWxkZXJcclxufSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7XHJcbiAgQmFzZTY0LFxyXG4gIEZvcmNlRXhpdCxcclxuICBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgTWlzYyxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0clV0aWwsXHJcbiAgWE1MQ29uc3RhbnRzLFxyXG4gIFhtbFBhcnNlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIERpc3BsYXlDb252ZXJ0b3IsXHJcbiAgS2V5Ym9hcmRJdGVtLFxyXG4gIE1vZGlmaWVycyxcclxuICBSZWNvcmRVdGlscyxcclxuICBUYXNrRGVmaW5pdGlvbklkLFxyXG4gIFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXJcclxufSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuLi9leHAvRXhwcmVzc2lvbic7XHJcbmltcG9ydCB7IENvbnN0SW50ZXJmYWNlIH0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBUYXNrQmFzZSB9IGZyb20gJy4uL3Rhc2tzL1Rhc2tCYXNlJztcclxuaW1wb3J0IHsgTGFzdEZvY3VzZWRNYW5hZ2VyIH0gZnJvbSAnLi4vcnQvTGFzdEZvY3VzZWRNYW5hZ2VyJztcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgdGhpcyBjbGFzcyByZXByZXNlbnQgdGhlIGV2ZW50IGVudGl0eVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRXZlbnQge1xyXG4gIC8vIEFUVEVOVElPTiAhXHJcbiAgLy8gYW55IGNoYW5nZSB0byB0aGUgbWVtYmVyIHZhcmlhYmxlcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgY2hhbmdlIHRvIHRoZSBDVE9SIHRoYXRcclxuICAvLyBnZXRzIG9uZSBhcmd1bWVudCBvZiB0aGUgdHlwZSAnRXZlbnQnLlxyXG4gIHByaXZhdGUgc3RhdGljIF9sYXN0VGltZXN0YW1wOiBudW1iZXIgPSAwOyAvLyBsYXN0IHRpbWVzdGFtcFxyXG4gIEV4cDogRXhwcmVzc2lvbiA9IG51bGw7IC8vIGZvciBleHByZXNzaW9uIGV2ZW50cyAtIHRoZSBleHByZXNzaW9uIG51bWJlclxyXG4gIF9mb3JjZUV4aXQ6IEZvcmNlRXhpdCA9IEZvcmNlRXhpdC5Ob25lOyAvLyBUaGUg4oCcZm9yY2UgZXhpdD9pcyBvbmUgb2Y6IFJlY29yZCwgQ29udHJvbCwgTm9uZS4gVGhpcyBhdHRyaWJ1dGUgaXMgcmVsZXZhbnQgb25seSBmb3IgZXZlbnRzIGluIHRoZSDigJx1c2VyIGV2ZW50cz90YWJsZS5cclxuICBrYmRJdG06IEtleWJvYXJkSXRlbSA9IG51bGw7IC8vIGZvciBzeXN0ZW0gZXZlbnRzXHJcblxyXG4gIF9wYXJhbUF0dHJzOiBzdHJpbmcgPSBudWxsO1xyXG4gIF9wYXJhbU51bGxzOiBzdHJpbmcgPSBudWxsO1xyXG4gIF9wYXJhbVZhbHM6IHN0cmluZ1tdID0gbnVsbDtcclxuICBfcGFyYW1ldGVyczogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9yZXR1cm5FeHA6IG51bWJlciA9IDA7XHJcbiAgLyogZXhwcmVzc2lvbiBudW1iZXIgdG8gc3BlY2lmeSB0aGUgRnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgKi9cclxuICBfc2Vjb25kczogbnVtYmVyID0gSW50MzIuTWluVmFsdWU7IC8vIGZvciB0aW1lciBldmVudHNcclxuICBfdGltZXN0YW1wOiBudW1iZXIgPSAwO1xyXG4gIF90eXBlOiBzdHJpbmcgPSBDaGFyLk1pblZhbHVlOyAvLyBTeXN0ZW18SW50ZXJuYWx8VGltZXJ8RXhwcmVzc2lvbnxVc2VyfE5vbmVcclxuICBwcml2YXRlIF91c2VyRGVmaW5lZEZ1bmNOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3VzZXJEZWZpbmVkRnVuY05hbWVIYXNoQ29kZTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF91c2VyRXZ0RGVzYzogc3RyaW5nID0gJyc7XHJcbiAgX3VzZXJFdnRJZHg6IG51bWJlciA9IEludDMyLk1pblZhbHVlOyAvLyB0aGUgaW5kZXggb2YgdGhlIHVzZXIgZXZlbnQgaW4gdGhlIHRhc2tzIHVzZXIgZXZlbnRzIHRhYmxlXHJcblxyXG4gIEludGVybmFsRXZlbnQ6IG51bWJlciA9IDA7IC8vIGludGVybmFsIGV2ZW50IGNvZGVcclxuICBQdWJsaWNOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIFVzZXJFdnQ6IEV2ZW50ID0gbnVsbDtcclxuICBVc2VyRXZ0VGFza1RhZzogc3RyaW5nID0gbnVsbDtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8wKCk6IHZvaWQge1xyXG4gICAgdGhpcy5JbnRlcm5hbEV2ZW50ID0gSW50MzIuTWluVmFsdWU7XHJcbiAgICB0aGlzLnNldFRpbWVzdGFtcCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvcHkgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yXzEoZXZ0OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdHlwZSA9IGV2dC5fdHlwZTtcclxuICAgIHRoaXMua2JkSXRtID0gZXZ0LmtiZEl0bTtcclxuICAgIHRoaXMuSW50ZXJuYWxFdmVudCA9IGV2dC5JbnRlcm5hbEV2ZW50O1xyXG4gICAgdGhpcy5fc2Vjb25kcyA9IGV2dC5fc2Vjb25kcztcclxuICAgIHRoaXMuRXhwID0gZXZ0LkV4cDtcclxuICAgIHRoaXMuX2ZvcmNlRXhpdCA9IGV2dC5fZm9yY2VFeGl0O1xyXG4gICAgdGhpcy5Vc2VyRXZ0ID0gZXZ0LlVzZXJFdnQ7XHJcbiAgICB0aGlzLlVzZXJFdnRUYXNrVGFnID0gZXZ0LlVzZXJFdnRUYXNrVGFnO1xyXG4gICAgdGhpcy5fdXNlckV2dElkeCA9IGV2dC5fdXNlckV2dElkeDtcclxuICAgIHRoaXMuX3RpbWVzdGFtcCA9IDA7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IEZvcmNlRXhpdCgpOiBGb3JjZUV4aXQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlRXhpdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBOZWVkIHBhcnQgaW5wdXQgU3RyaW5nIHRvIHJlbGV2YW50IGZvciB0aGUgY2xhc3MgZGF0YS5cclxuICAvLy8gICBpbmRleCBvZiBlbmQgPGV2ZW50IC4uLj4gdGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInhtbFBhcnNlclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+PC9wYXJhbT5cclxuICBmaWxsRGF0YSh4bWxQYXJzZXI6IFhtbFBhcnNlciwgdGFza1JlZjogVGFza0Jhc2UpOiB2b2lkIHtcclxuICAgIGxldCB1c2VyVmFsdWU6IHN0cmluZztcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSB4bWxQYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgeG1sUGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgeG1sUGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IHN0cmluZyA9IHhtbFBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHhtbFBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19FVkVOVCkgKyBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQubGVuZ3RoKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMoeG1sUGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuXHJcbiAgICAgIGxldCByZWZVc2VyVmFsdWU6IFJlZlBhcmFtPHN0cmluZz4gPSBuZXcgUmVmUGFyYW0odXNlclZhbHVlKTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvciwgdGFza1JlZiwgcmVmVXNlclZhbHVlKTtcclxuICAgICAgdXNlclZhbHVlID0gcmVmVXNlclZhbHVlLnZhbHVlO1xyXG5cclxuICAgICAgeG1sUGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRS5sZW5ndGgpOyAvLyB0byBkZWxldGUgXCI+XCIgdG9vXHJcblxyXG4gICAgICB0aGlzLkluaXRJbm5lck9iamVjdHMoeG1sUGFyc2VyKTtcclxuXHJcbiAgICAgIGlmICh1c2VyVmFsdWUgIT09IG51bGwpXHJcbiAgICAgICAgdGhpcy5Jbml0VXNlckRhdGEodGFza1JlZiwgdXNlclZhbHVlKTtcclxuICAgIH0gZWxzZVxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coJ2luIEV2ZW50LkZpbGxEYXRhKCkgb3V0IG9mIHN0cmluZyBib3VuZHMnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgSW5pdElubmVyT2JqZWN0cyh4bWxQYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IG5leHRUYWc6IHN0cmluZyA9IHhtbFBhcnNlci5nZXROZXh0VGFnKCk7XHJcbiAgICBzd2l0Y2ggKG5leHRUYWcpIHtcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX1RBU0tERUZJTklUSU9OSURfRU5UUlk6XHJcbiAgICAgICAgbGV0IHhtbEJ1ZmZlcjogc3RyaW5nID0geG1sUGFyc2VyLlJlYWRUb0VuZE9mQ3VycmVudEVsZW1lbnQoKTtcclxuICAgICAgICB0aGlzLkluaXRUYXNrRGVmaW5pdGlvbklkKHhtbEJ1ZmZlcik7XHJcblxyXG4gICAgICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSB4bWxQYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgeG1sUGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICB4bWxQYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyAoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRSkubGVuZ3RoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIGluaXRpYWxpemF0aW9uIG9mIHByaXZhdGUgZWxlbWVudHMgYnkgZm91bmQgdG9rZW5zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRva2Vuc1ZlY3RvclwiPmZvdW5kIHRva2Vucywgd2hpY2ggY29uc2lzdCBhdHRyaWJ1dGUvdmFsdWUgb2YgZXZlcnkgZm91bmRlbGVtZW50PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tSZWZcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+LCB0YXNrUmVmOiBUYXNrQmFzZSwgcmVmVXNlclZhbHVlOiBSZWZQYXJhbTxzdHJpbmc+KTogdm9pZCB7XHJcbiAgICBsZXQgbW9kaWZpZXI6IE1vZGlmaWVycyA9IE1vZGlmaWVycy5NT0RJRklFUl9OT05FO1xyXG4gICAgbGV0IGtleUNvZGU6IG51bWJlciA9IC0xO1xyXG4gICAgcmVmVXNlclZhbHVlLnZhbHVlID0gbnVsbDtcclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRVZFTlRUWVBFOlxyXG4gICAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8gU3lzdGVtfEludGVybmFsfFVzZXJ8VGltZXJ8RXhwcmVzc2lvbnxSZWNvbXB1dGVcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTU9ESUZJRVI6XHJcbiAgICAgICAgICBtb2RpZmllciA9IDxNb2RpZmllcnM+dmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBBbHR8Q3RybHxTaGlmdHxOb25lXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lOVEVSTkFMRVZFTlQ6XHJcbiAgICAgICAgICB0aGlzLkludGVybmFsRXZlbnQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9LRVlDT0RFOlxyXG4gICAgICAgICAga2V5Q29kZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NFQ09ORFM6XHJcbiAgICAgICAgICB0aGlzLl9zZWNvbmRzID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0VYUDpcclxuICAgICAgICAgIC8vIGZvciBleHByZXNzaW9uIGV2ZW50cyAtIHRoZSBleHByZXNzaW9uIG51bWJlclxyXG4gICAgICAgICAgdGhpcy5FeHAgPSB0YXNrUmVmLmdldEV4cEJ5SWQoWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0ZPUkNFX0VYSVQ6XHJcbiAgICAgICAgICB0aGlzLl9mb3JjZUV4aXQgPSA8Rm9yY2VFeGl0PnZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFU0M6XHJcbiAgICAgICAgICB0aGlzLl91c2VyRXZ0RGVzYyA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUFVCTElDOlxyXG4gICAgICAgICAgdGhpcy5QdWJsaWNOYW1lID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9QQVJBTVM6XHJcbiAgICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUEFSX0FUVFJTOlxyXG4gICAgICAgICAgdGhpcy5fcGFyYW1BdHRycyA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9WQUxVRTpcclxuICAgICAgICAgIGxldCBwYXJhbVN0cjogc3RyaW5nID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIHRoaXMuX3BhcmFtVmFscyA9IG5ldyBBcnJheSh0aGlzLl9wYXJhbWV0ZXJzKTtcclxuICAgICAgICAgIC8vIHB1dCB0aGUgcGFyYW1WYWxzIGluIHBsYWNlXHJcbiAgICAgICAgICB0aGlzLnBhcnNlUGFyYW1WYWwocGFyYW1TdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX05VTExTOlxyXG4gICAgICAgICAgdGhpcy5fcGFyYW1OdWxscyA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1VTRVI6XHJcbiAgICAgICAgICByZWZVc2VyVmFsdWUudmFsdWUgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vIFVTRVIgZXZlbnRcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX05BTUU6XHJcbiAgICAgICAgICB0aGlzLnNldFVzZXJEZWZpbmVkRnVuY05hbWUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNSX0RFRl9GVUNfUkVUX0VYUF9JRDpcclxuICAgICAgICAgIHRoaXMuX3JldHVybkV4cCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNSX0RFRl9GVUNfUkVUX0VYUF9BVFRSOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdCgnVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gRXZlbnQgY2xhc3MuIEluc2VydCBjYXNlIHRvIEV2ZW50LmluaXRFbGVtZW50cyBmb3IgezB9JywgYXR0cmlidXRlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNKVxyXG4gICAgICB0aGlzLmtiZEl0bSA9IG5ldyBLZXlib2FyZEl0ZW0oa2V5Q29kZSwgbW9kaWZpZXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBQZXJmb3JtIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGZyb20gdGhlIFwidXNlclwiIGF0dHJpYnV0ZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlU3RyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrUmVmXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIEluaXRVc2VyRGF0YSh0YXNrUmVmOiBUYXNrQmFzZSwgdXNlclZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBjb21tYTogbnVtYmVyID0gdXNlclZhbHVlLmluZGV4T2YoJywnKTtcclxuICAgIGlmIChjb21tYSA+IC0xKSB7XHJcbiAgICAgIGxldCB1ZVRhc2tJZDogc3RyaW5nID0gdXNlclZhbHVlLnN1YnN0cigwLCBjb21tYSk7XHJcbiAgICAgIGlmICh0YXNrUmVmICE9PSBudWxsKVxyXG4gICAgICAgIHVlVGFza0lkID0gdGFza1JlZi5UYXNrU2VydmljZS5HZXRFdmVudFRhc2tJZCh1ZVRhc2tJZCk7XHJcblxyXG4gICAgICBsZXQgdWVUYXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5BY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0VGFza0J5SUQodWVUYXNrSWQpO1xyXG5cclxuICAgICAgbGV0IHVlSWR4OiBudW1iZXIgPSBYbWxQYXJzZXIuZ2V0SW50KHVzZXJWYWx1ZS5zdWJzdHIoY29tbWEgKyAxKSk7XHJcblxyXG4gICAgICBpZiAodWVUYXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5Vc2VyRXZ0ID0gdWVUYXNrLmdldFVzZXJFdmVudCh1ZUlkeCk7XHJcbiAgICAgICAgaWYgKHRoaXMuVXNlckV2dCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKCdpbiBFdmVudC5maWxsRGF0YSgpOiB1c2VyIGV2ZW50IG5vdCBmb3VuZC4gdGFzayBpZCA9ICcgKyB1ZVRhc2tJZCArXHJcbiAgICAgICAgICAgICcsIHVzZXIgZXZlbnQgaW5kZXggPSAnICsgdWVJZHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLlVzZXJFdnRUYXNrVGFnID0gdWVUYXNrSWQ7XHJcbiAgICAgICAgdGhpcy5fdXNlckV2dElkeCA9IHVlSWR4O1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoZSB0YXNrIGhhc24ndCBiZWVuIGZvdW5kLCBpdCBub3QgcGFyc2VkLCB5ZXRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5Vc2VyRXZ0VGFza1RhZyA9IHVlVGFza0lkO1xyXG4gICAgICAgIHRoaXMuX3VzZXJFdnRJZHggPSB1ZUlkeDtcclxuICAgICAgICB0aGlzLlVzZXJFdnQgPSBudWxsOyAvLyBjYW4gbm90IGJlIGluaXRpYWxpemVkIG9uIHRoaXMgc3RlcFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEluaXRUYXNrRGVmaW5pdGlvbklkKHhtbEJ1ZmZlcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgaGFuZGxlcjogVGFza0RlZmluaXRpb25JZFRhYmxlU2F4SGFuZGxlciA9IG5ldyBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyKHRoaXMuU2V0VGFza0RlZmluaXRpb25JZCk7XHJcbiAgICBoYW5kbGVyLnBhcnNlKHhtbEJ1ZmZlcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNhbGxiYWNrIGZvciB0aGUgc2F4IHBhcnNlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFza0RlZmluaXRpb25JZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwieG1sSWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRlZmF1bHRUYWdMaXN0XCI+PC9wYXJhbT5cclxuICBwcml2YXRlIFNldFRhc2tEZWZpbml0aW9uSWQodGFza0RlZmluaXRpb25JZDogVGFza0RlZmluaXRpb25JZCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbmQgdGFzayBmb3IgVXNlciBFdmVudCBpZiBpdCB3YXMgbm90IGZvdW5kIGR1cmluZyBwYXJzaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBmaW5kVXNlckV2ZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUiAmJiB0aGlzLlVzZXJFdnQgPT09IG51bGwpIHtcclxuICAgICAgbGV0IHVlVGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldFRhc2tCeUlEKHRoaXMuVXNlckV2dFRhc2tUYWcpO1xyXG4gICAgICBpZiAodWVUYXNrICE9PSBudWxsKVxyXG4gICAgICAgIHRoaXMuVXNlckV2dCA9IHVlVGFzay5nZXRVc2VyRXZlbnQodGhpcy5fdXNlckV2dElkeCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5Vc2VyRXZ0ID09PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihOU3RyaW5nLkZvcm1hdCgnaW4gRXZlbnQuZmluZFVzZXJFdmVudCgpOiB1c2VyIGV2ZW50IG5vdCBmb3VuZC4gdGFzayBpZCA9IHswfSBkb2VzblxcJ3QgZXhpc3QnLCB0aGlzLlVzZXJFdnRUYXNrVGFnKSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbXBhcmUgdGhpcyBldmVudCB0byBhbm90aGVyIC0gcmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBldmVudHMgYXJlIGlkZW50aWNhbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZXF1YWxzKGV2dDogRXZlbnQpOiBib29sZWFuIHtcclxuICAgIGxldCBiRXF1YWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBjb21wYXJlIHJlZmVyZW5jZXNcclxuICAgIGlmICh0aGlzID09PSBldnQpXHJcbiAgICAgIGJFcXVhbCA9IHRydWU7XHJcbiAgICAvLyBkbyBzaGFsbG93IGNvbXBhcmlzaW9uXHJcbiAgICBlbHNlIGlmICh0aGlzLl90eXBlID09PSBldnQuX3R5cGUpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1NZU1RFTTpcclxuICAgICAgICAgIGJFcXVhbCA9IHRoaXMua2JkSXRtLmVxdWFscyhldnQua2JkSXRtKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUw6XHJcbiAgICAgICAgICBiRXF1YWwgPSAodGhpcy5JbnRlcm5hbEV2ZW50ID09PSBldnQuSW50ZXJuYWxFdmVudCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1RJTUVSOlxyXG4gICAgICAgICAgYkVxdWFsID0gKHRoaXMuX3NlY29uZHMgPT09IGV2dC5fc2Vjb25kcyk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0VYUFJFU1NJT046XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1BVQkxJQzpcclxuICAgICAgICAgIGJFcXVhbCA9ICh0aGlzLkV4cCA9PT0gZXZ0LkV4cCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVI6XHJcbiAgICAgICAgICBiRXF1YWwgPSAodGhpcy5Vc2VyRXZ0ID09PSBldnQuVXNlckV2dCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVJfRlVOQzpcclxuICAgICAgICAgIGlmICh0aGlzLl91c2VyRGVmaW5lZEZ1bmNOYW1lSGFzaENvZGUgPT09IGV2dC5nZXRVc2VyRGVmaW5lZEZ1bmNOYW1lSGFzaENvZGUoKSkge1xyXG4gICAgICAgICAgICBpZiAoTlN0cmluZy5FcXVhbHMoZXZ0LmdldFVzZXJEZWZpbmVkRnVuY05hbWUoKSwgdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZSwgdHJ1ZSkpXHJcbiAgICAgICAgICAgICAgYkVxdWFsID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYkVxdWFsID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciBpbnRlcm5hbCBldmVudHMsIGNvbXBhcmUgdGhlIGludGVybmFsIG5hbWVzXHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9QVUJMSUMgfHwgZXZ0Ll90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1BVQkxJQykge1xyXG4gICAgICBsZXQgbmFtZTE6IFN0cmluZyA9IG51bGw7XHJcbiAgICAgIGxldCBuYW1lMjogU3RyaW5nID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUiAmJiBldnQuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUilcclxuICAgICAgICBiRXF1YWwgPSBmYWxzZTtcclxuICAgICAgZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9QVUJMSUMpIHtcclxuICAgICAgICBuYW1lMSA9IHRoaXMuUHVibGljTmFtZTtcclxuICAgICAgICBuYW1lMiA9IGV2dC5nZXRVc2VyRXZlbnQoKS5QdWJsaWNOYW1lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5hbWUxID0gZXZ0LlB1YmxpY05hbWU7XHJcbiAgICAgICAgbmFtZTIgPSB0aGlzLmdldFVzZXJFdmVudCgpLlB1YmxpY05hbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5hbWUxID09PSBudWxsIHx8IG5hbWUyID09PSBudWxsKVxyXG4gICAgICAgIGJFcXVhbCA9IGZhbHNlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgYkVxdWFsID0gKG5hbWUxID09PSBuYW1lMik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUwgJiYgZXZ0Ll90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1NZU1RFTSkge1xyXG4gICAgICBpZiAoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkgIT09IG51bGwgJiYgKEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldE1hdGNoaW5nQWN0aW9uKGV2dC5nZXRLYmRJdG0oKSkpID09PSB0aGlzLmdldEludGVybmFsQ29kZSgpKVxyXG4gICAgICAgIGJFcXVhbCA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUiAmJiBldnQuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUikge1xyXG4gICAgICAvLyBiZWZvcmUgdXNpbmcgdGhlIHVzZXIgZXZlbnQsIGNoZWNrIHRoYXQgaXQgaXMgdmFsaWRcclxuICAgICAgdGhpcy5maW5kVXNlckV2ZW50KCk7XHJcblxyXG4gICAgICAvLyBpZiBvbmUgZXZlbnQgb2YgdGhlIHR3byBpcyBhIHVzZXIgZXZlbnQgYW5kIHRoZSBvdGhlciBpc24ndCB0aGVuXHJcbiAgICAgIC8vIGNvbXBhcmUgdGhlIHRyaWdnZXIgb2YgdGhlIHVzZXIgZXZlbnQgdG8gdGhlIG5vbi11c2VyIGV2ZW50XHJcbiAgICAgIGJFcXVhbCA9IHRoaXMuVXNlckV2dC5lcXVhbHMoZXZ0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBiRXF1YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBpbnRlcm5hbCBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhc3luYyBzZXRQdWJsaWNOYW1lKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gRm9yIGEgcnVudGltZSBpbnRlcm5hbCBldmVudCAtIGNhbGN1bGF0ZSB0aGUgaW50ZXJuYWwgbmFtZS5cclxuICAgIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1BVQkxJQyAmJiB0aGlzLkV4cCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLlB1YmxpY05hbWUgPSAoYXdhaXQgdGhpcy5FeHAuZXZhbHVhdGVXaXRoUmVzTGVuZ3RoKDI1NSkpLm1nVmFsO1xyXG4gICAgICBpZiAodGhpcy5QdWJsaWNOYW1lICE9PSBudWxsKVxyXG4gICAgICAgIHRoaXMuUHVibGljTmFtZSA9IFN0clV0aWwucnRyaW0odGhpcy5QdWJsaWNOYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYW4gSW50ZXJuYWwgZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29kZVwiPnRoZSBjb2RlIG9mIHRoZSBpbnRlcm5hbCBldmVudCA8L3BhcmFtPlxyXG4gIHNldEludGVybmFsKGNvZGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fdHlwZSA9IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUw7XHJcbiAgICB0aGlzLkludGVybmFsRXZlbnQgPSBjb2RlO1xyXG5cclxuICAgIC8vIE1HX0FDVF9ISVQvTUdfQUNUX0NUUkxfSElUIGFyZSBjYXVzZWQgYnkgbW91c2UgY2xpY2suIEluIHRoaXMgY2FzZVxyXG4gICAgLy8gdGltZSBvZiBsYXN0IHVzZXIgYWN0aW9uIGZvciBJRExFIGZ1bmN0aW9uIHNob3VsZCBiZSByZS1ldmFsdWF0ZWQuXHJcbiAgICBpZiAoY29kZSA9PT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0hJVCB8fCBjb2RlID09PSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9ISVQpXHJcbiAgICAgIExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5MYXN0QWN0aW9uVGltZSA9IE1pc2MuZ2V0U3lzdGVtTWlsbGlzZWNvbmRzKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGFuIEV4cHJlc3Npb24gZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwUmVmXCI+YSByZWZlcmVuY2UgdG8gdGhlIGV4cHJlc3Npb24gb2JqZWN0IDwvcGFyYW0+XHJcbiAgc2V0RXhwcmVzc2lvbihleHBSZWY6IEV4cHJlc3Npb24pOiB2b2lkIHtcclxuICAgIHRoaXMuX3R5cGUgPSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0VYUFJFU1NJT047XHJcbiAgICB0aGlzLkV4cCA9IGV4cFJlZjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgRXhwcmVzc2lvbiBvZiB0aGUgZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEV4cHJlc3Npb24oKTogRXhwcmVzc2lvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5FeHA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IFVzZXJFdmVudCBkZXNjcmlwdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBnZXRVc3JFdm50RGVzYygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICh0aGlzLlVzZXJFdnQgIT09IG51bGwpID8gdGhpcy5Vc2VyRXZ0Ll91c2VyRXZ0RGVzYyA6IHRoaXMuX3VzZXJFdnREZXNjO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhIFN5c3RlbSBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJrZXlib2FyZEl0ZW1cIj50aGUga2V5Ym9hcmQgaXRlbSBvYmplY3QgPC9wYXJhbT5cclxuICBzZXRTeXN0ZW0oa2V5Ym9hcmRJdGVtOiBLZXlib2FyZEl0ZW0pOiB2b2lkIHtcclxuICAgIHRoaXMuX3R5cGUgPSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1NZU1RFTTtcclxuICAgIHRoaXMua2JkSXRtID0ga2V5Ym9hcmRJdGVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhIFN5c3RlbSBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJrZXlib2FyZEl0ZW1cIj50aGUga2V5Ym9hcmQgaXRlbSBvYmplY3QgPC9wYXJhbT5cclxuICBzZXRLZXlib2FyZEl0ZW0oa2V5Ym9hcmRJdGVtOiBLZXlib2FyZEl0ZW0pOiB2b2lkIHtcclxuICAgIHRoaXMua2JkSXRtID0ga2V5Ym9hcmRJdGVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0eXBlIHJldHVybnMgU3lzdGVtfEludGVybmFsfFVzZXJ8VGltZXJ8RXhwcmVzc2lvbnxSZWNvbXB1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFR5cGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90eXBlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0eXBlIHJlY2VpdmVzIFN5c3RlbXxJbnRlcm5hbHxVc2VyfFRpbWVyfEV4cHJlc3Npb258UmVjb21wdXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRUeXBlKGFUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3R5cGUgPSBhVHlwZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgaW50ZXJuYWwgZXZlbnQgY29kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBpbnQgaXMgdGhlIGludGVybmFsIGV2ZW50IGNvZGUgPC9yZXR1cm5zPlxyXG4gIGdldEludGVybmFsQ29kZSgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUwpXHJcbiAgICAgIHJldHVybiB0aGlzLkludGVybmFsRXZlbnQ7XHJcbiAgICByZXR1cm4gSW50MzIuTWluVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBrZXlib2FyZCBpdGVtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRLYmRJdG0oKTogS2V5Ym9hcmRJdGVtIHtcclxuICAgIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1NZU1RFTSlcclxuICAgICAgcmV0dXJuIHRoaXMua2JkSXRtO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBrZXlib2FyZCBpdGVtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRLYmRJdG1BbHdheXMoKTogS2V5Ym9hcmRJdGVtIHtcclxuICAgIHJldHVybiB0aGlzLmtiZEl0bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgZm9yIG5vbiBkYXRhIGV2ZW50cyBvciBkYXRhIGV2ZW50cyB3aGljaCB0aGVpciBleHByZXNzaW9uXHJcbiAgLy8vICAgZXZhbHVhdGVzIHRvIHRydWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIGRhdGFFdmVudElzVHJ1ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuXHJcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9FWFBSRVNTSU9OICYmXHJcbiAgICAgICEodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSICYmIHRoaXMuZ2V0VXNlckV2ZW50VHlwZSgpID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0VYUFJFU1NJT04pKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIGlmICh0aGlzLl90eXBlICE9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIpXHJcbiAgICAgIHJldHVybiBEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbihhd2FpdCB0aGlzLkV4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiwgMCkpO1xyXG4gICAgcmV0dXJuIERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKGF3YWl0IHRoaXMuVXNlckV2dC5nZXRFeHByZXNzaW9uKCkuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4sIDApKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IG51bWJlciBvZiBzZWNvbmRzIChmb3IgdGltZXIgZXZlbnRzKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0U2Vjb25kcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlY29uZHM7XHJcbiAgfVxyXG5cclxuICBnZXRCcmtMZXZlbCgpOiBzdHJpbmc7XHJcbiAgZ2V0QnJrTGV2ZWwoZmxvd01vbml0b3I6IGJvb2xlYW4pOiBzdHJpbmc7XHJcbiAgZ2V0QnJrTGV2ZWwoZmxvd01vbml0b3I/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEJya0xldmVsXzAoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdldEJya0xldmVsXzEoZmxvd01vbml0b3IpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgYnJlYWsgbGV2ZWwgb2YgRXZlbnQgbm90IGZvciBGbG93IE1vbml0b3JpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZ2V0QnJrTGV2ZWxfMCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QnJrTGV2ZWwoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgYnJlYWsgbGV2ZWwgb2YgRXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxvd01vbml0b3JcIj5pcyBpdCBuZWVkZWQgZm9yIEZsb3cgTW9uaXRvcmluZyB1c2FnZSA8L3BhcmFtPlxyXG4gIHByaXZhdGUgZ2V0QnJrTGV2ZWxfMShmbG93TW9uaXRvcjogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbGV2ZWw6IHN0cmluZyA9ICcnO1xyXG4gICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTDpcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuSW50ZXJuYWxFdmVudCkge1xyXG4gICAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFTS19QUkVGSVg6XHJcbiAgICAgICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfVEFTS19QUkVGSVhfRk0gOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfVEFTS19QUkVGSVg7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfU1VGRklYOlxyXG4gICAgICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1RBU0tfU1VGRklYX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1RBU0tfU1VGRklYO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYOlxyXG4gICAgICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1JFQ19QUkVGSVhfRk0gOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfUkVDX1BSRUZJWDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfU1VGRklYX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1JFQ19TVUZGSVg7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfUFJFRklYOlxyXG4gICAgICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0NUUkxfUFJFRklYX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0NUUkxfUFJFRklYICsgJ18nO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1NVRkZJWDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9DVFJMX1NVRkZJWF9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9DVFJMX1NVRkZJWCArICdfJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9WRVJJRklDQVRJT046XHJcbiAgICAgICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfQ1RSTF9WRVJJRklDQVRJT05fRk0gOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfQ1RSTF9WRVJJRklDQVRJT04gKyAnXyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFOlxyXG4gICAgICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1ZBUklBQkxFX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1ZBUklBQkxFICsgJ18nO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0hBTkRMRVJfSU5URVJOQUxfRk0gOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9JTlRFUk5BTCArICdfJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldmVsICs9IEV2ZW50LmdldEludGVybmFsRXZ0RGVzY3JpcHRpb24odGhpcy5JbnRlcm5hbEV2ZW50KTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU06XHJcbiAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9IQU5ETEVSX1NZU1RFTV9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9IQU5ETEVSX1NZU1RFTSArICdfJztcclxuICAgICAgICBsZXZlbCArPSB0aGlzLmdldEtleWJvYXJkSXRlbVN0cmluZygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1RJTUVSOlxyXG4gICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9USU1FUl9GTSArICcgJyArIHRoaXMuc2Vjb25kczJTdHJpbmcoKSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9IQU5ETEVSX1RJTUVSICsgJ18nICsgdGhpcy5zZWNvbmRzMlN0cmluZygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0VYUFJFU1NJT046XHJcbiAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9IQU5ETEVSX0VYUFJFU1NJT05fRk0gOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9FWFBSRVNTSU9OICsgJ18nICsgdGhpcy5FeHAuZ2V0SWQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSOlxyXG4gICAgICAgIGxldmVsID0gKGZsb3dNb25pdG9yID8gKENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9IQU5ETEVSX1VTRVJfRk0gKyAnOiAnKSA6IChDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9VU0VSICsgJ18nKSkgKyAodGhpcy5Vc2VyRXZ0ICE9IG51bGwgPyB0aGlzLlVzZXJFdnQuX3VzZXJFdnREZXNjIDogdGhpcy5fdXNlckV2dERlc2MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVJfRlVOQzpcclxuICAgICAgICBsZXZlbCA9IChmbG93TW9uaXRvciA/IChDb25zdEludGVyZmFjZS5CUktfTEVWRUxfVVNFUl9GVU5DVElPTl9GTSArICc6JykgOiAoQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1VTRVJfRlVOQ1RJT04gKyAnXycpKSArIHRoaXMuX3VzZXJEZWZpbmVkRnVuY05hbWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBkZXNjcmlwdGlvbiBvZiB0aGUgaW50ZXJuYWwgZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gZGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50IDwvcmV0dXJucz5cclxuICBwdWJsaWMgc3RhdGljIGdldEludGVybmFsRXZ0RGVzY3JpcHRpb24oaW50ZXJuYWxFdmVudENvZGU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIHN3aXRjaCAoaW50ZXJuYWxFdmVudENvZGUpIHtcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQUJPVVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQWJvdXQgTWFnaWMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQUNUSU9OX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQWN0aW9uIExpc3QnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQUREX0hZUEVSTElOSzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQUxJR05fTEVGVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdMZWZ0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FMSUdOX1JJR0hUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1JpZ2h0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FQUExfUFJPUEVSVElFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQVBQTElDQVRJT05TOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0FwcGxpY2F0aW9ucyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9BUFBMSUNBVElPTlNfTElTVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdBcHBsaWNhdGlvbnMgTGlzdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9BVFRBQ0hfVE9fVEFCTEU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQXR0YWNoIHRvIFRhYmxlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FVVEhPUklaRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdBdXRob3JpemUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0JFR0ZMRDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdCZWdpbiBGaWVsZCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfQkVHRk9STTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdCZWdpbiBGb3JtJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9CRUdMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0JlZ2luIExpbmUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0JFR05YVExJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQmVnaW4gTmV4dCBMaW5lJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9CRUdQQUdFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0JlZ2luIFBhZ2UnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0JFR0xJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQmVnaW4gUm93JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9CRUdQQUdFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0JlZ2luIFNjcmVlbic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfQkVHVEJMOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0JlZ2luIHRhYmxlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0JPVFRPTTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdCb3R0b20nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQlVMTEVUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0J1bGxldCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9CVVRUT046XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQnV0dG9uIFByZXNzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NBTkNFTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDYW5jZWwnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRfUVVJVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdRdWl0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NFTlRFUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDZW50ZXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0hFQ0tfU1lOVEFYOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NoZWNrIFN5bnRheCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DSEVDS19UT19FTkQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ2hlY2sgdG8gRW5kJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NMRUFSX1RFTVBMQVRFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NsZWFyIFRlbXBsYXRlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NMRUFSX1ZBTFVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NsZWFyIFZhbHVlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NMT1NFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0Nsb3NlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FDVF9DTE9TRV9BUFBMOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0Nsb3NlIEFwcGxpY2F0aW9uJztcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DT01NVU5JQ0FUSU9OUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb21tdW5pY2F0aW9ucyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DT01QT05FTlRTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvbXBvbmVudHMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9ISVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ29udHJvbCBIaXQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ09OVFJPTF9OQU1FX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ29udHJvbCBOYW1lIExpc3QnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0xJUF9DT1BZOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvcHknO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ09QWV9MQVlPVVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ29weSBMYXlvdXQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ09QWV9TVUJUUkVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvcHkgU3VidHJlZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DUkVMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NyZWF0ZSBMaW5lJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NSRUxJTkVfQUJPVkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ3JlYXRlIExpbmUgQWJvdmUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1JFQVRFX1BBUkVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDcmVhdGUgUGFyZW50JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUT19DUkVBVEU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ3JlYXRlIFJlY29yZHMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1JFQVRFX1NVQlRBU0s6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ3JlYXRlIFN1YnRhc2snO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1JPU1NfUkVGRVJFTkNFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0Nyb3NzIFJlZmVyZW5jZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ3V0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RCX1RBQkxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfREJNUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEQk1TJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RERl9NQUtFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0RERiBNYWtlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RBVEFCQVNFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEYXRhYmFzZXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfREVGQVVMVF9MQVlPVVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRGVmYXVsdCBMYXlvdXQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfREVGSU5FX0VYUFJFU1NJT046XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRGVmaW5lIEV4cHJlc3Npb24nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0RFTENVUkNIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0N1cnJlbnQgQ2hhcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfREVMUFJWQ0g6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUHJldmlvdXMgQ2hhcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ERUxFVEVfSFlQRVJMSU5LOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0RlbGV0ZSBIeXBlcmxpbmsnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfREVMTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEZWxldGUgTGluZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ERUxFVEVfU1VCVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEZWxldGUgU3VidHJlZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVF9DT1BZRkxEOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0RpdHRvJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RJU1BMQVlfUkVGUkVTSDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdEaXNwbGF5IFJlZnJlc2gnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURJVF9NQUlOX0ZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRWRpdCBNYWluIEZvcm0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0VOREZMRDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFbmQgRmllbGQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0VOREZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRW5kIEZvcm0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0VORExJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRW5kIExpbmUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0VORFBBR0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRW5kIFBhZ2UnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0VORExJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRW5kIFJvdyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfRU5EUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFbmQgU2NyZWVuJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9FTkRUQkw6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRW5kIFRhYmxlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VOVklST05NRU5UOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0Vudmlyb25tZW50JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYRUNVVEVfUFJPR1JBTTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFeGVjdXRlIFByb2dyYW0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRVhFQ1VURV9SRVBPUlQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRXhlY3V0ZSBSZXBvcnQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRVhJVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFeGl0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYSVRfU1lTVEVNOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0V4aXQgU3lzdGVtJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYUE9SVF9JTVBPUlQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRXhwb3J0L0ltcG9ydCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FWFBSRVNTSU9OX1JVTEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0V4cHJlc3Npb24gcnVsZXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRVhURVJOQUxfRURJVE9SOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0V4dGVybmFsIEVkaXRvcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRVhUX0VWRU5UOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0V4dGVybmFsIEV2ZW50JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0ZPUk1TOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0Zvcm1zJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0ZST01fVkFMVUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnRnJvbSBWYWx1ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9GVU5DVElPTl9MSVNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0Z1bmN0aW9uIExpc3QnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfR0VORVJBVEVfRk9STTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdHZW5lcmF0ZSBGb3JtJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0dFTkVSQVRFX1BST0dSQU06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnR2VuZXJhdGUgUHJvZ3JhbSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9HT19UT19UT1A6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnR28gdG8gVG9wJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0hfQ0VOVEVSX09GX0ZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0hUTUxfU1RZTEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0hUTUwgU3R5bGVzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0hFTFA6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnSGVscCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9IRUxQX1NDUkVFTlM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnSGVscCBTY3JlZW5zJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0hPUklaX0NFTlRFUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdIb3Jpei4gQ2VudGVyJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0lfT19GSUxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdUYWJsZXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSU5ERU5UOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0luZGVudCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9JTlNFUlRfT0JKRUNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0luc2VydCBPYmplY3QnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSlVNUF9UT19ST1c6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnSnVtcCB0byBSb3cnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfS0VZQk9BUkRfTElTVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdLZXlib2FyZCBMaXN0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0tFWUJPQVJEX01BUFBJTkc6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnS2V5Ym9hcmQgTWFwcGluZyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9MQU5HVUFHRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnbGFuZ3VhZ2VzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUT19TRUFSQ0g6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTG9jYXRlIE5leHQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRPX0xPQ0FURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdMb2NhdGUgYSBSZWNvcmQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTE9HSUNBTFBOQU1FUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTE9HT046XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTG9nb24nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNJTkdfSEVMUDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdIZWxwIFRvcGljcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTUFSS05YVENIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01hcmsgTmV4dCBDaGFyJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01BUktfTkVYVF9MSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01hcmsgTmV4dCBMaW5lIE1MRSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTUFSS1BSVkNIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01hcmsgUHJldmlvdXMgQ2hhcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTUFSS1BSVkxJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTWFyayBQcmV2aW91cyBMaW5lIE1MRSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NQVJLX1NVQlRSRUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9NQVJLVE9CRUc6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTWFyayBUbyBCZWdpbm5pbmcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX01BUktUT0VORDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNYXJrIFRvIEVuZCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NQVhJTVVNX0hFSUdIVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdNYXhpbXVtIEhlaWdodCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NQVhJTVVNX1dJRFRIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01heGltdW0gV2lkdGgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTUVOVV9CQVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTWVudSBCYXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTUVOVVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01JTklNVU1fSEVJR0hUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01pbmltdW0gSGVpZ2h0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01JTklNVU1fV0lEVEg6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTWluaW11bSBXaWR0aCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVE9fTU9ESUZZOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01vZGlmeSBSZWNvcmRzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01PTklUT1JfREVCVUdHRVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTW9uaXRvci9EZWJ1Z2dlcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NT1ZFX0VOVFJZOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01vdmUgRW50cnknO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTU9WRV9TVUJUUkVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ01vdmUgU3VidHJlZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9OVUxMX1NFVFRJTkdTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ05VTEwgU2V0dGluZ3MnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX05YVENIQVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTmV4dCBDaGFyJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9OWFRMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ05leHQgTGluZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTlhUUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdOZXh0IFBhZ2UnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX05YVExJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTmV4dCBSb3cnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX05YVFBBR0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTmV4dCBTY3JlZW4nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX05YVFRBQjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdOZXh0IFRhYic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTlhUV09SRDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdOZXh0IFdvcmQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTk9STUFMOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ05vcm1hbCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9PSzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdPSyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9PTEUyOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ09MRTInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfT1BFTl9BUFBMSUNBVElPTjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdPcGVuIEFwcGxpY2F0aW9uJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX09WRVJXUklURV9FTlRSWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdPdmVyd3JpdGUgRW50cnknO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfT1ZFUldSSVRFX1NVQlRSRUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnT3ZlcndyaXRlIFN1YnRyZWUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUFBEOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1BQRCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9QQUdFX0ZPT1RFUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQYWdlIEZvb3Rlcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9QQUdFX0hFQURFUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQYWdlIEhlYWRlcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DTElQX1BBU1RFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1Bhc3RlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BBU1RFX0xJTks6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUGFzdGUgTGluayc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9QQVNURV9TVUJUUkVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1Bhc3RlIFN1YnRyZWUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX1BSVkNIQVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUHJldmlvdXMgQ2hhcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfUFJWTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQcmV2aW91cyBMaW5lJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9QUlZQQUdFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByZXZpb3VzIFBhZ2UnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX1BSVkxJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUHJldmlvdXMgUm93JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9QUlZQQUdFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByZXZpb3VzIFNjcmVlbic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfUFJWVEFCOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByZXZpb3VzIFRhYic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfUFJWV09SRDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQcmV2aW91cyBXb3JkJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BSSU5UX0FUVFJJQlVURVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUHJpbnQgQXR0cmlidXRlcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9QUklOVEVSX1NFVFVQOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByaW50ZXIgU2V0dXAnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUFJJTlRFUlM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUHJpbnRlcnMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUFJPR1JBTVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUHJvZ3JhbXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUFJPUEVSVElFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQcm9wZXJ0aWVzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUT19RVUVSWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdRdWVyeSBSZWNvcmRzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUT19SQU5HRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdSYW5nZSBvZiBSZWNvcmRzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUX1JFRlJFU0hfUkVDT1JEOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1JlY29yZCBGbHVzaCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRURJUkVDVF9GSUxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdSZWRpcmVjdCBGaWxlcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRURSQVdfTEFZT1VUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRVBFQVRfRU5UUlk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUmVwZWF0IEVudHJ5JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFUEVBVF9TVUJUUkVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1JlcGVhdCBTdWJ0cmVlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFUE9SVF9HRU5FUkFUT1I6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFU1RPUkVfREVGQVVMVFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUmVzdG9yZSBEZWZhdWx0cyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRVRVUk5fVE9fVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUklHSFQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnUmlnaHQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUklHSFRTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SSUdIVFNfTElTVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdSaWdodHMgTGlzdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TUUxfQVNTSVNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NRTCBBc3Npc3QnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1FMX0NPTFVNTlM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU1FMIENvbHVtbnMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1FMX0NPTU1BTkQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU1FMIENvbW1hbmQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1FMX0ZMSVBfREVTQzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTUUwgRmxpcCBEZXNjLic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TUUxfS0VZV09SRFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU1FMIEtleXdvcmRzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NRTF9PUEVSQVRPUlM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU1FMIE9wZXJhdG9ycyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TUUxfVEFCTEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NRTCBUYWJsZXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1FMX1dIRVJFX0NMQVVTRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRfUkVGUkVTSF9TQ1JFRU46XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU2NyZWVuIFJlZnJlc2gnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0VDUkVUX05BTUVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NlY3JldCBOYW1lcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TRUxFQ1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU2VsZWN0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9NQVJLQUxMOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NlbGVjdCBBbGwnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0VSVkVSUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0VSVklDRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUX0VEVF9OVUxMOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NldCB0byBOVUxMJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NIRUxMX1RPX09TOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1NoZWxsIHRvIE9TJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NIT1dfRVhQUkVTU0lPTjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTaG93IEV4cHJlc3Npb24nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0hPV19GVUxMX0xBWU9VVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0hSSU5LX1RSRUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NPUlQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU29ydCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TT1JUX1JFQ09SRFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU29ydCBSZWNvcmRzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBQkxFX0xPQ0FURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdUYWJsZSBMb2NhdGUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFCTEVfTE9DQVRFX05FWFQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVGFibGUgTG9jYXRlIE5leHQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFCTEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQVNLX0NPTlRST0w6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfRVZFTlRTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UT19WQUxVRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdUbyBWYWx1ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UT09MS0lUX1JVTlRJTUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVG9vbGtpdC9SdW50aW1lJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RPUDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdUb3AnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVFlQRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9VTkRPOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1VuZG8gRWRpdGluZyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VTklOREVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdVbmluZGVudCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VUERBVEVfTElOSzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMjpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMzpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fNDpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fNTpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fNjpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fNzpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fODpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fOTpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTA6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzExOlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xMjpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTM6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzE0OlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xNTpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTY6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzE3OlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xODpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTk6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzIwOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1VzZXIgQWN0aW9uICcgKyAoaW50ZXJuYWxFdmVudENvZGUgLSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMSArIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9HUk9VUFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfSURTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1VzZXIgSURzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZfQ0VOVEVSX09GX0ZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ2VudGVyIG9mIEZvcm0nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVkVSVElDQUxfQ0VOVEVSOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ZlcnRpY2FsIENlbnRlcic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WSUVXX0JZX0tFWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdWaWV3IGJ5IEtleSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVF9SRUZSRVNIX1ZJRVc6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVmlldyBSZWZyZXNoJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZJUlRVQUxfVkFSSUFCTEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ZhcmlhYmxlcyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WSVNVQUxfQ09OTkVDVElPTjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdWaXN1YWwgQ29ubmVjdGlvbic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ISVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnV2luZG93IEhpdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9XSU5NT1ZFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1dpbmRvdyBSZXBvc2l0aW9uJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1dJTlNJWkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnV2luZG93IFJlc2l6ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9aT09NOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1pvb20nO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTE9DS0lOR19ERVRBSUxTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0xvY2tpbmcgRGV0YWlscyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9MT0NLSU5HX0FCT1JUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0xvY2tpbmcgQWJvcnQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTE9DS0lOR19SRVRSWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdMb2NraW5nIFJldHJ5JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NIRUNLX09CSkVDVF9MSVNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NoZWNrIE9iamVjdCBMaXN0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJTX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnVXNlcnMgTGlzdCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NT0RFTFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnTW9kZWxzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1dFQl9DTElDSzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDbGljayc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9XRUJfT05fREJMSUNLOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0RibENsaWNrJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0JST1dTRVJfRVNDOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0VzYyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ST0xMQkFDSzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdSb2xsYmFjayc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FTVBUWV9EQVRBVklFVzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFbXB0eSBEYXRhdmlldyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX01PRElGWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb250cm9sIE1vZGlmeSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9QUklOVF9EQVRBOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1ByaW50IERhdGEnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUE9TVF9SRUZSRVNIX0JZX1BBUkVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdQb3N0IFJlZnJlc2ggYnkgUGFyZW50JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NXSVRDSF9UT19PRkZMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1N3aXRjaCBUbyBPZmZsaW5lJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VOQVZBSUxBQkxFX1NFUlZFUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdVbmF2YWlsYWJsZSBTZXJ2ZXInO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ09OVEVYVF9NRU5VOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvbnRleHQgTWVudSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FTlRFUl9ST1dfRURJVElORzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdFbnRlciBSb3cgRWRpdGluZyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX05PX1BST0dfRVhFX1JJR0hUUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdObyBQcm9ncmFtIEV4ZWN1dGlvbiBSaWdodHMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfV0VCQ0xJRU5UX1JPVVRFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1JvdXRlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NPTF9TT1JUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvbHVtbiBTb3J0JztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JPV19EQVRBX0NVUlJfUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdHZXQgUm93cyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TVUJGT1JNX0NMT1NFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1N1YmZvcm0gQ2xvc2UnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1VCRk9STV9SRUZSRVNIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1N1YmZvcm0gUmVmcmVzaCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TVUJGT1JNX09QRU46XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnU3ViZm9ybSBPcGVuJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NPTVBVVEU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnQ29tcHV0ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DQUNIRV9ORVhUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0dldCBOZXh0IERhdGEnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0FDSEVfUFJFVjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdHZXQgUHJldmlvdXMgRGF0YSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9GRVRDSF9EQVRBX0NPTlRST0xfVkFMVUVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0ZldGNoIGRhdGEgY29udHJvbCB2YWx1ZXMnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSU5ERVhfQ0hBTkdFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0luZGV4IENoYW5nZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9EVU1QX0VOVklST05NRU5UOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0R1bXAgRW52aXJvbm1lbnQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVzY3JpcHRpb247XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHR5cGUgb2YgVXNlciBFdmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0eXBlIG9mIHVzZXIgZXZlbnQgPC9yZXR1cm5zPlxyXG4gIGdldFVzZXJFdmVudFR5cGUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLlVzZXJFdnQgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX05PVElOSVRFRDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5Vc2VyRXZ0LmdldFR5cGUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgc2Vjb25kcyBvZiB0aGUgdXNlciBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0U2Vjb25kc09mVXNlckV2ZW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5Vc2VyRXZ0LmdldFNlY29uZHMoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIHVzZXIgZXZlbnQgb2JqZWN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSB1c2VyIGV2ZW50IG9iamVjdCA8L3JldHVybnM+XHJcbiAgZ2V0VXNlckV2ZW50KCk6IEV2ZW50IHtcclxuICAgIHJldHVybiB0aGlzLlVzZXJFdnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGtleWJvYXJkIGl0ZW0gKCBmb3Igc3lzdGVtIGV2ZW50ICkgaW4gZm9ybSBvZiBzdHJpbmdcclxuICAvLy8gICBmb3Igc3lzdGVtIGV2ZW50cyBPTkxZXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGdldEtleWJvYXJkSXRlbVN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGtiaTogS2V5Ym9hcmRJdGVtID0gdGhpcy5nZXRLYmRJdG0oKTtcclxuICAgIGlmIChrYmkgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIHJldHVybiBrYmkuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbnNlcnQgdGhlIHNlY29uZHMgdG8gdGhlIHBpY3R1cmUgXCJISDpNTTpTU1wiIGZvciBTVE9SQUdFX0FUVFJfVElNRVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBmb3JtYXRlZCBzdHJpbmcgb2Ygc2Vjb25kc1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzZWNvbmRzMlN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRpbWU6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4oMyk7XHJcbiAgICBsZXQgYnVmZmVyOiBzdHJpbmcgPSAnJztcclxuICAgIHRpbWVbMF0gPSBNYXRoLmZsb29yKHRoaXMuX3NlY29uZHMgLyAzNjAwKTtcclxuICAgIHRpbWVbMV0gPSBNYXRoLmZsb29yKCh0aGlzLl9zZWNvbmRzIC0gdGltZVswXSAqIDM2MDApIC8gNjApO1xyXG4gICAgdGltZVsyXSA9IHRoaXMuX3NlY29uZHMgJSA2MDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aW1lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aW1lW2ldID09PSAwKVxyXG4gICAgICAgIGJ1ZmZlciArPSAnMDAnO1xyXG4gICAgICBlbHNlIGlmICh0aW1lW2ldIDwgMTApXHJcbiAgICAgICAgYnVmZmVyICs9ICgnMCcgKyB0aW1lW2ldKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGJ1ZmZlciArPSB0aW1lW2ldO1xyXG4gICAgICAvLyBkb24ndCBpbnNlcnQgZGVsaW1pdGVyIGFmdGVyIHRoZSBsYXN0IGNhc2VcclxuICAgICAgaWYgKGkgPCB0aW1lLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgYnVmZmVyICs9ICc6JztcclxuICAgIH1cclxuICAgIHJldHVybiBidWZmZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIHRoZSBwYXJhbWV0ZXJzIHZhbHVlcyBmcm9tIHRoZSB2YWx1ZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsdWVTdHJcIj5pbmRleCBvZiB0aGUgcGFyYW0gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBwYXJhbWV0ZXIgdmFsdWUgPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgcGFyc2VQYXJhbVZhbCh2YWx1ZVN0cjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCBzdGFydE9mczogbnVtYmVyID0gMCwgZW5kT2ZzID0gMCwgbkxlbiwgajtcclxuICAgIGxldCBzTGVuOiBzdHJpbmcsIHNWYWx1ZSA9IG51bGw7XHJcblxyXG4gICAgLy8gZmluZCB0aGUgdmFsdWUgbG9jYXRpb25cclxuICAgIGZvciAoaiA9IDA7IGogPCB0aGlzLl9wYXJhbWV0ZXJzOyBqKyspIHtcclxuICAgICAgc3dpdGNoICg8U3RvcmFnZUF0dHJpYnV0ZT50aGlzLl9wYXJhbUF0dHJzW2pdKSB7XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlNLSVA6XHJcbiAgICAgICAgICBzVmFsdWUgPSAnJztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5NRU1POlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgICAgZW5kT2ZzID0gc3RhcnRPZnMgKyA0O1xyXG4gICAgICAgICAgc0xlbiA9IHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKTtcclxuICAgICAgICAgIG5MZW4gPSBOTnVtYmVyLlBhcnNlKHNMZW4sIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpO1xyXG4gICAgICAgICAgc3RhcnRPZnMgPSBlbmRPZnM7XHJcblxyXG4gICAgICAgICAgLy8gUUNSIDE2OTkgZGVjb2RlIHRoZSBwYXJhbWV0ZXIgZnJvbSBiYXNlNjQgaWYgbmVlZGVkXHJcbiAgICAgICAgICBpZiAoQWNjZXNzSGVscGVyLmVudmlyb25tZW50LkdldERlYnVnTGV2ZWwoKSA+IDEgfHwgKDxTdG9yYWdlQXR0cmlidXRlPnRoaXMuX3BhcmFtQXR0cnNbal0pID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8ICg8U3RvcmFnZUF0dHJpYnV0ZT50aGlzLl9wYXJhbUF0dHJzW2pdKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8ICg8U3RvcmFnZUF0dHJpYnV0ZT50aGlzLl9wYXJhbUF0dHJzW2pdKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PKSB7XHJcbiAgICAgICAgICAgIGlmICgobkxlbiAmIDB4ODAwMCkgPiAwKVxyXG4gICAgICAgICAgICAvLyBwYXJzZSBzcGFubmVkIHJlY29yZCBlbmNvZGVkIHRvIEhleFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgbGVuIG9mIHRoZSBwYXJhbWV0ZXIgZGF0YVxyXG4gICAgICAgICAgICAgIG5MZW4gPSAobkxlbiAmIDB4N0ZGRik7XHJcbiAgICAgICAgICAgICAgbkxlbiAqPSAyO1xyXG5cclxuICAgICAgICAgICAgICAvLyBwYXJzZSB0aGUgU3RyaW5nXHJcbiAgICAgICAgICAgICAgbGV0IHJlczogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgICAgICAgICAgZW5kT2ZzICs9IFJlY29yZFV0aWxzLmdldFNwYW5uZWRGaWVsZCh2YWx1ZVN0ciwgbkxlbiwgc3RhcnRPZnMsIDxTdG9yYWdlQXR0cmlidXRlPnRoaXMuX3BhcmFtQXR0cnNbal0sIHJlcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdmFsdWVTdHIgPSByZXMuVG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBub24gc3Bhbm5lZCBwYXJhbXNcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZW5kT2ZzID0gc3RhcnRPZnMgKyBuTGVuO1xyXG4gICAgICAgICAgICAgIHNWYWx1ZSA9IHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKChuTGVuICYgMHg4MDAwKSA+IDApXHJcbiAgICAgICAgICAgIC8vIHBhcnNlIHNwYW5uZWQgcmVjb3JkIGVuY29kZWQgdG8gSGV4XHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBsZW4gb2YgdGhlIHBhcmFtZXRlciBkYXRhXHJcbiAgICAgICAgICAgICAgbkxlbiA9IChuTGVuICYgMHg3RkZGKTtcclxuICAgICAgICAgICAgICBuTGVuID0gTWF0aC5mbG9vcigobkxlbiArIDIpIC8gMykgKiA0O1xyXG5cclxuICAgICAgICAgICAgICAvLyBwYXJzZSB0aGUgU3RyaW5nXHJcbiAgICAgICAgICAgICAgbGV0IHJlczogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgICAgICAgICAgZW5kT2ZzICs9IFJlY29yZFV0aWxzLmdldFNwYW5uZWRGaWVsZCh2YWx1ZVN0ciwgbkxlbiwgc3RhcnRPZnMsIDxTdG9yYWdlQXR0cmlidXRlPnRoaXMuX3BhcmFtQXR0cnNbal0sIHJlcywgZmFsc2UpO1xyXG4gICAgICAgICAgICAgIHNWYWx1ZSA9IHJlcy5Ub1N0cmluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVuZE9mcyA9IHN0YXJ0T2ZzICsgTWF0aC5mbG9vcigobkxlbiArIDIpIC8gMykgKiA0O1xyXG4gICAgICAgICAgICAgIHNWYWx1ZSA9IEJhc2U2NC5kZWNvZGUodmFsdWVTdHIuc3Vic3RyKHN0YXJ0T2ZzLCAoZW5kT2ZzKSAtIChzdGFydE9mcykpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgIC8vIFFDUiAxNjk5IGRlY29kZSB0aGUgcGFyYW1ldGVyIGZyb20gYmFzZTY0IGlmIG5lZWRlZFxyXG4gICAgICAgICAgaWYgKEFjY2Vzc0hlbHBlci5lbnZpcm9ubWVudC5HZXREZWJ1Z0xldmVsKCkgPiAxKSB7XHJcbiAgICAgICAgICAgIGVuZE9mcyA9IHN0YXJ0T2ZzICsgQWNjZXNzSGVscGVyLmVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpICogMjtcclxuICAgICAgICAgICAgc1ZhbHVlID0gdmFsdWVTdHIuc3Vic3RyKHN0YXJ0T2ZzLCAoZW5kT2ZzKSAtIChzdGFydE9mcykpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZW5kT2ZzID0gc3RhcnRPZnMgKyAoTWF0aC5mbG9vcigoQWNjZXNzSGVscGVyLmVudmlyb25tZW50LkdldFNpZ25pZmljYW50TnVtU2l6ZSgpICsgMikgLyAzKSAqIDQpO1xyXG4gICAgICAgICAgICBzVmFsdWUgPSBCYXNlNjQuZGVjb2RlVG9IZXgodmFsdWVTdHIuc3Vic3RyKHN0YXJ0T2ZzLCAoZW5kT2ZzKSAtIChzdGFydE9mcykpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICAgIGVuZE9mcyA9IHN0YXJ0T2ZzICsgMTtcclxuICAgICAgICAgIHNWYWx1ZSA9IHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3BhcmFtVmFsc1tqXSA9IHNWYWx1ZTtcclxuICAgICAgc3RhcnRPZnMgPSBlbmRPZnM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW5kT2ZzO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBudW1iZXIgb2YgcGFyYW1zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IG51bWJlciBvZiBwYXJhbXMgPC9yZXR1cm5zPlxyXG4gIGdldFBhcmFtTnVtKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1ldGVycztcclxuICB9XHJcblxyXG5cclxuICBpc0NvbnRyb2xIZWFkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCkgPT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCAmJlxyXG4gICAgICAodGhpcy5nZXRJbnRlcm5hbENvZGUoKSA9PSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9QUkVGSVggfHxcclxuICAgICAgICB0aGlzLmdldEludGVybmFsQ29kZSgpID09IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1NVRkZJWCB8fFxyXG4gICAgICAgIHRoaXMuZ2V0SW50ZXJuYWxDb2RlKCkgPT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfVkVSSUZJQ0FUSU9OKTtcclxuICB9XHJcblxyXG4gIGlzVmFyaWFibGVIZWFkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKCkgPT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCAmJlxyXG4gICAgICB0aGlzLmdldEludGVybmFsQ29kZSgpID09IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WQVJJQUJMRTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQXBwZW5kcyB0aGUgZXZlbnQncyBkZXNjcmlwdGlvbiB0byB0aGUgZ2l2ZW4gU3RyaW5nQnVpbGRlci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnVmZmVyXCI+VGhlIGJ1ZmZlciB0byB3aGljaCB0aGUgZGVzY3JpcHRpb24gc2hvdWxkIGJlIGFwcGVuZGVkLjwvcGFyYW0+XHJcbiAgcHVibGljIEFwcGVuZERlc2NyaXB0aW9uKGJ1ZmZlcjogU3RyaW5nQnVpbGRlcik6IHZvaWQge1xyXG4gICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKEV2ZW50LmdldEludGVybmFsRXZ0RGVzY3JpcHRpb24odGhpcy5JbnRlcm5hbEV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5nZXRLZXlib2FyZEl0ZW1TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUjpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKHRoaXMuZ2V0VXNyRXZudERlc2MoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUl9GVU5DOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVElNRVI6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZCh0aGlzLnNlY29uZHMyU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0VYUFJFU1NJT046XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZCgnSUQgJyArIHRoaXMuRXhwLmdldElkKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoJ3Vua25vd24gZXZlbnQgdHlwZSAnKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZXR1cm5zIHdoZXRoZXIgdGhlIGludGVybmFsIGV2ZW50IGNvZGUgaXMgYmV0d2VlbiAxMDAxICYgMTAwOFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGlzTmV3SW50ZXJuYWxFdmVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkludGVybmFsRXZlbnQgPj0gMTAwMSAmJiB0aGlzLkludGVybmFsRXZlbnQgPD0gMTAwODtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IHRoZSBkZXNjcmlwdGlvbiBmb3IgbmV3IGludGVybmFsIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0TmV3SW50ZXJuYWxFdmVudERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZXZlbnREZXNjOiBzdHJpbmcgPSBOU3RyaW5nLkVtcHR5O1xyXG4gICAgc3dpdGNoICh0aGlzLkludGVybmFsRXZlbnQpIHtcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFTS19QUkVGSVg6XHJcbiAgICAgICAgZXZlbnREZXNjID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1RBU0tfUFJFRklYX0ZNO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFTS19TVUZGSVg6XHJcbiAgICAgICAgZXZlbnREZXNjID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1RBU0tfU1VGRklYX0ZNO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWDpcclxuICAgICAgICBldmVudERlc2MgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfUkVDX1BSRUZJWF9GTTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19TVUZGSVg6XHJcbiAgICAgICAgZXZlbnREZXNjID0gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1JFQ19TVUZGSVhfRk07XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICBldmVudERlc2MgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfQ1RSTF9QUkVGSVhfRk07XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1NVRkZJWDpcclxuICAgICAgICBldmVudERlc2MgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfQ1RSTF9TVUZGSVhfRk07XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1ZFUklGSUNBVElPTjpcclxuICAgICAgICBldmVudERlc2MgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfQ1RSTF9WRVJJRklDQVRJT05fRk07XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WQVJJQUJMRTpcclxuICAgICAgICBldmVudERlc2MgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfVkFSSUFCTEVfRk07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50RGVzYztcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybiB0aGUgZGVzY3JpcHRpb24gZm9yIG5ldyBpbnRlcm5hbCBldmVudHMgb3IgcmV0dXJuIHRoZSB0eXBlIGluIHN0cmluZyBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBnZXRFdmVudFR5cGUoKTogc3RyaW5nIHtcclxuICAgIC8vIEZvciB0aGUgbmV3IGludGVybmFsIGV2ZW50cywgdGhlcmUgaXMgbm8gdHlwZSBzbyBpbnN0ZWFkIGdldCB0aGUgZGVzY3JpcHRpb25cclxuICAgIHJldHVybiB0aGlzLmlzTmV3SW50ZXJuYWxFdmVudCgpXHJcbiAgICAgID8gTlN0cmluZy5UcmltRW5kKHRoaXMuZ2V0TmV3SW50ZXJuYWxFdmVudERlc2NyaXB0aW9uKCkpXHJcbiAgICAgIDogdGhpcy5nZXRFdmVudFR5cGVTdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJuIHRoZSB0eXBlIG9mIGV2ZW50IGluIHN0cmluZyBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBnZXRFdmVudFR5cGVTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIGxldCBldmVudFR5cGU6IHN0cmluZztcclxuICAgIHN3aXRjaCAodGhpcy5nZXRUeXBlKCkpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMOlxyXG4gICAgICAgIGV2ZW50VHlwZSA9ICdJbnRlcm5hbCBFdmVudDonO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNOlxyXG4gICAgICAgIGV2ZW50VHlwZSA9ICdTeXN0ZW0gRXZlbnQ6JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0VYUFJFU1NJT046XHJcbiAgICAgICAgZXZlbnRUeXBlID0gJ0V4cHJlc3Npb24gRXZlbnQ6JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1RJTUVSOlxyXG4gICAgICAgIGV2ZW50VHlwZSA9ICdUaW1lciBFdmVudDonO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUjpcclxuICAgICAgICBldmVudFR5cGUgPSAnVXNlciBFdmVudDonO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBldmVudFR5cGUgPSAnJztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXZlbnRUeXBlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHVzZXIgZGVmaW5lZCBmdW5jdGlvbidzIG5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFVzZXJEZWZpbmVkRnVuY05hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl91c2VyRGVmaW5lZEZ1bmNOYW1lID0gbmFtZTtcclxuICAgIGxldCBmdW5jdGlvbk5hbWVVcHBlcjogc3RyaW5nID0gdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlID0gSGFzaFV0aWxzLkdldEhhc2hDb2RlKGZ1bmN0aW9uTmFtZVVwcGVyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB1c2VyIGRlZmluZWQgZnVuY3Rpb24ncyBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRVc2VyRGVmaW5lZEZ1bmNOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZTtcclxuICB9XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHVzZXIgZGVmaW5lZCBmdW5jdGlvbidzIG5hbWUncyBoYXNoIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRVc2VyRGVmaW5lZEZ1bmNOYW1lSGFzaENvZGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl91c2VyRGVmaW5lZEZ1bmNOYW1lSGFzaENvZGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdXNlciBkZWZpbmVkIGZ1bmN0aW9uJ3MgcmV0dXJuIGV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFVzZXJEZWZpbmVkRnVuY1JldEV4cCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldHVybkV4cDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHNldFRpbWVzdGFtcCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RpbWVzdGFtcCA9IEV2ZW50Ll9sYXN0VGltZXN0YW1wKys7XHJcbiAgfVxyXG5cclxuICBnZXRUaW1lc3RhbXAoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90aW1lc3RhbXA7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRm9ybWF0KCd7e0V2ZW50OiB7MH19fScsIHRoaXMuZ2V0QnJrTGV2ZWwoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==