@magic-xpa/engine 4.801.0-dev481.242 → 4.801.0-dev481.248

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/esm2020/index.mjs +190 -0
  2. package/{esm2015/magic-xpa-engine.js → esm2020/magic-xpa-engine.mjs} +0 -0
  3. package/esm2020/src/AccessHelper.mjs +3 -0
  4. package/esm2020/src/ClientManager.mjs +403 -0
  5. package/esm2020/src/CommandsProcessorBase.mjs +58 -0
  6. package/esm2020/src/CommandsProcessorManager.mjs +26 -0
  7. package/esm2020/src/CommandsTable.mjs +163 -0
  8. package/{esm2015/src/ConstInterface.js → esm2020/src/ConstInterface.mjs} +0 -0
  9. package/{esm2015/src/CurrentClientVersion.js → esm2020/src/CurrentClientVersion.mjs} +2 -2
  10. package/{esm2015/src/FlowMonitorInterface.js → esm2020/src/FlowMonitorInterface.mjs} +0 -0
  11. package/esm2020/src/GUIManager.mjs +63 -0
  12. package/{esm2015/src/GlobalCommandsManager.js → esm2020/src/GlobalCommandsManager.mjs} +0 -0
  13. package/{esm2015/src/GuiEventsProcessor.js → esm2020/src/GuiEventsProcessor.mjs} +0 -0
  14. package/{esm2015/src/ICommandsTable.js → esm2020/src/ICommandsTable.mjs} +1 -0
  15. package/{esm2015/src/ServerConfig.js → esm2020/src/ServerConfig.mjs} +0 -0
  16. package/{esm2015/src/bridge/IGuiEvent.js → esm2020/src/bridge/IGuiEvent.mjs} +0 -0
  17. package/esm2020/src/bridge/MagicBridge.mjs +41 -0
  18. package/{esm2015/src/commands/ClientOriginatedCommandTaskTag.js → esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs} +0 -0
  19. package/{esm2015/src/commands/ClientToServer/AddUserLocateDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs} +0 -0
  20. package/{esm2015/src/commands/ClientToServer/AddUserRangeDataviewCommand.js → esm2020/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs} +0 -0
  21. package/{esm2015/src/commands/ClientToServer/AddUserSortDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs} +0 -0
  22. package/esm2020/src/commands/ClientToServer/BrowserEscEventCommand.mjs +23 -0
  23. package/{esm2015/src/commands/ClientToServer/ClientOriginatedCommand.js → esm2020/src/commands/ClientToServer/ClientOriginatedCommand.mjs} +0 -0
  24. package/{esm2015/src/commands/ClientToServer/ClientOriginatedCommandSerializer.js → esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs} +0 -0
  25. package/{esm2015/src/commands/ClientToServer/ColumnSortEventCommand.js → esm2020/src/commands/ClientToServer/ColumnSortEventCommand.mjs} +0 -0
  26. package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +278 -0
  27. package/{esm2015/src/commands/ClientToServer/CommandSerializationHelper.js → esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs} +0 -0
  28. package/{esm2015/src/commands/ClientToServer/ComputeEventCommand.js → esm2020/src/commands/ClientToServer/ComputeEventCommand.mjs} +0 -0
  29. package/{esm2015/src/commands/ClientToServer/ContextTerminationEventCommand.js → esm2020/src/commands/ClientToServer/ContextTerminationEventCommand.mjs} +0 -0
  30. package/{esm2015/src/commands/ClientToServer/ContextTimeoutResetCommand.js → esm2020/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs} +0 -0
  31. package/{esm2015/src/commands/ClientToServer/ControlItemsRefreshCommand.js → esm2020/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs} +0 -0
  32. package/{esm2015/src/commands/ClientToServer/DataViewOutputCommand.js → esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs} +0 -0
  33. package/{esm2015/src/commands/ClientToServer/DataviewCommand.js → esm2020/src/commands/ClientToServer/DataviewCommand.mjs} +0 -0
  34. package/{esm2015/src/commands/ClientToServer/EvaluateCommand.js → esm2020/src/commands/ClientToServer/EvaluateCommand.mjs} +0 -0
  35. package/{esm2015/src/commands/ClientToServer/EventCommand.js → esm2020/src/commands/ClientToServer/EventCommand.mjs} +0 -0
  36. package/{esm2015/src/commands/ClientToServer/ExecOperCommand.js → esm2020/src/commands/ClientToServer/ExecOperCommand.mjs} +0 -0
  37. package/{esm2015/src/commands/ClientToServer/FetchDataControlValuesEventCommand.js → esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs} +0 -0
  38. package/{esm2015/src/commands/ClientToServer/GlobalParamsQueryCommand.js → esm2020/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs} +0 -0
  39. package/{esm2015/src/commands/ClientToServer/ICommandTaskTag.js → esm2020/src/commands/ClientToServer/ICommandTaskTag.mjs} +1 -0
  40. package/{esm2015/src/commands/ClientToServer/IndexChangeEventCommand.js → esm2020/src/commands/ClientToServer/IndexChangeEventCommand.mjs} +0 -0
  41. package/{esm2015/src/commands/ClientToServer/IniputForceWriteCommand.js → esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs} +0 -0
  42. package/{esm2015/src/commands/ClientToServer/NonReversibleExitEventCommand.js → esm2020/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs} +0 -0
  43. package/{esm2015/src/commands/ClientToServer/QueryCommand.js → esm2020/src/commands/ClientToServer/QueryCommand.mjs} +0 -0
  44. package/{esm2015/src/commands/ClientToServer/RecomputeCommand.js → esm2020/src/commands/ClientToServer/RecomputeCommand.mjs} +0 -0
  45. package/{esm2015/src/commands/ClientToServer/RefreshEventCommand.js → esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs} +0 -0
  46. package/{esm2015/src/commands/ClientToServer/RefreshScreenEventCommand.js → esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs} +0 -0
  47. package/{esm2015/src/commands/ClientToServer/RollbackEventCommand.js → esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs} +0 -0
  48. package/{esm2015/src/commands/ClientToServer/SelectProgramCommand.js → esm2020/src/commands/ClientToServer/SelectProgramCommand.mjs} +0 -0
  49. package/{esm2015/src/commands/ClientToServer/SetTransactionStateDataviewCommand.js → esm2020/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs} +0 -0
  50. package/{esm2015/src/commands/ClientToServer/SubformOpenEventCommand.js → esm2020/src/commands/ClientToServer/SubformOpenEventCommand.mjs} +0 -0
  51. package/{esm2015/src/commands/ClientToServer/SubformRefreshEventCommand.js → esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs} +0 -0
  52. package/{esm2015/src/commands/ClientToServer/TransactionCommand.js → esm2020/src/commands/ClientToServer/TransactionCommand.mjs} +0 -0
  53. package/{esm2015/src/commands/ClientToServer/UnloadCommand.js → esm2020/src/commands/ClientToServer/UnloadCommand.mjs} +0 -0
  54. package/{esm2015/src/commands/ClientToServer/WriteMessageToServerLogCommand.js → esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs} +0 -0
  55. package/esm2020/src/commands/DataViewCommandBase.mjs +10 -0
  56. package/{esm2015/src/commands/IClientCommand.js → esm2020/src/commands/IClientCommand.mjs} +1 -0
  57. package/esm2020/src/commands/IClientTargetedCommand.mjs +9 -0
  58. package/{esm2015/src/commands/IClientToServerCommandInfo.js → esm2020/src/commands/IClientToServerCommandInfo.mjs} +1 -0
  59. package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +65 -0
  60. package/esm2020/src/commands/ServerToClient/AddLocateCommand.mjs +22 -0
  61. package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
  62. package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
  63. package/{esm2015/src/commands/ServerToClient/ClientRefreshCommand.js → esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs} +14 -17
  64. package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +27 -0
  65. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
  66. package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +222 -0
  67. package/esm2020/src/commands/ServerToClient/ResetLocateCommand.mjs +15 -0
  68. package/esm2020/src/commands/ServerToClient/ResetRangeCommand.mjs +15 -0
  69. package/esm2020/src/commands/ServerToClient/ResetSortCommand.mjs +15 -0
  70. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +37 -0
  71. package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +85 -0
  72. package/{esm2015/src/commands/ServerToClient/XMLBasedCommandBuilder.js → esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs} +0 -0
  73. package/{esm2015/src/communications/IConnectionStateManager.js → esm2020/src/communications/IConnectionStateManager.mjs} +1 -0
  74. package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +17 -0
  75. package/{esm2015/src/data/DataSourceIdKey.js → esm2020/src/data/DataSourceIdKey.mjs} +0 -0
  76. package/esm2020/src/data/DataView.mjs +1634 -0
  77. package/{esm2015/src/data/DataViewBase.js → esm2020/src/data/DataViewBase.mjs} +0 -0
  78. package/esm2020/src/data/DataviewManager.mjs +28 -0
  79. package/esm2020/src/data/DataviewManagerBase.mjs +15 -0
  80. package/{esm2015/src/data/DvCache.js → esm2020/src/data/DvCache.mjs} +0 -0
  81. package/esm2020/src/data/Field.mjs +645 -0
  82. package/esm2020/src/data/FieldBase.mjs +18 -0
  83. package/{esm2015/src/data/FieldsTable.js → esm2020/src/data/FieldsTable.mjs} +0 -0
  84. package/{esm2015/src/data/IRecordsTable.js → esm2020/src/data/IRecordsTable.mjs} +1 -0
  85. package/{esm2015/src/data/Key.js → esm2020/src/data/Key.mjs} +0 -0
  86. package/esm2020/src/data/Record.mjs +846 -0
  87. package/{esm2015/src/data/RecordOutOfDataViewException.js → esm2020/src/data/RecordOutOfDataViewException.mjs} +0 -0
  88. package/{esm2015/src/data/RecordsTable.js → esm2020/src/data/RecordsTable.mjs} +0 -0
  89. package/esm2020/src/data/TaskTransactionManager.mjs +103 -0
  90. package/{esm2015/src/data/XMLBasedDcValuesBuilder.js → esm2020/src/data/XMLBasedDcValuesBuilder.mjs} +0 -0
  91. package/{esm2015/src/enums.js → esm2020/src/enums.mjs} +0 -0
  92. package/esm2020/src/env/EnvVariablesTable.mjs +340 -0
  93. package/esm2020/src/env/Environment.mjs +554 -0
  94. package/{esm2015/src/env/ILanguageData.js → esm2020/src/env/ILanguageData.mjs} +1 -0
  95. package/esm2020/src/env/LanguageData.mjs +222 -0
  96. package/esm2020/src/env/MirrorString.mjs +66 -0
  97. package/{esm2015/src/event/ActionManager.js → esm2020/src/event/ActionManager.mjs} +0 -0
  98. package/esm2020/src/event/Event.mjs +1436 -0
  99. package/esm2020/src/event/EventHandler.mjs +773 -0
  100. package/esm2020/src/event/EventHandlerPosition.mjs +201 -0
  101. package/esm2020/src/event/EventsManager.mjs +2983 -0
  102. package/{esm2015/src/event/IEventsManager.js → esm2020/src/event/IEventsManager.mjs} +0 -0
  103. package/{esm2015/src/event/RunTimeEvent.js → esm2020/src/event/RunTimeEvent.mjs} +0 -0
  104. package/{esm2015/src/event/RunTimeEventBase.js → esm2020/src/event/RunTimeEventBase.mjs} +0 -0
  105. package/{esm2015/src/event/UserEventsTable.js → esm2020/src/event/UserEventsTable.mjs} +0 -0
  106. package/{esm2015/src/exp/ExpTable.js → esm2020/src/exp/ExpTable.mjs} +0 -0
  107. package/esm2020/src/exp/Expression.mjs +200 -0
  108. package/{esm2015/src/exp/ExpressionDict.js → esm2020/src/exp/ExpressionDict.mjs} +0 -0
  109. package/esm2020/src/exp/ExpressionEvaluator.mjs +4373 -0
  110. package/{esm2015/src/exp/ExpressionLocalJpn.js → esm2020/src/exp/ExpressionLocalJpn.mjs} +0 -0
  111. package/esm2020/src/exp/GlobalParamsTable.mjs +85 -0
  112. package/esm2020/src/exp/YesNoExp.mjs +41 -0
  113. package/{esm2015/src/gui/CreatedFormVector.js → esm2020/src/gui/CreatedFormVector.mjs} +0 -0
  114. package/esm2020/src/gui/FormsTable.mjs +66 -0
  115. package/esm2020/src/gui/MgControl.mjs +357 -0
  116. package/esm2020/src/gui/MgForm.mjs +1195 -0
  117. package/esm2020/src/http/HttpManager.mjs +97 -0
  118. package/esm2020/src/http/client/HttpClientAsync.mjs +67 -0
  119. package/esm2020/src/http/client/HttpClientBase.mjs +148 -0
  120. package/{esm2015/src/http/client/HttpClientEvents.js → esm2020/src/http/client/HttpClientEvents.mjs} +0 -0
  121. package/esm2020/src/http/client/HttpClientSync.mjs +42 -0
  122. package/{esm2015/src/http/client/HttpUtility.js → esm2020/src/http/client/HttpUtility.mjs} +0 -0
  123. package/{esm2015/src/http/client/ICommunicationsFailureHandler.js → esm2020/src/http/client/ICommunicationsFailureHandler.mjs} +1 -0
  124. package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
  125. package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
  126. package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
  127. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +872 -0
  128. package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
  129. package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +24 -0
  130. package/{esm2015/src/remote/RemoteDataViewCommandFactory.js → esm2020/src/remote/RemoteDataViewCommandFactory.mjs} +0 -0
  131. package/esm2020/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +16 -0
  132. package/esm2020/src/remote/RemoteDataviewManager.mjs +17 -0
  133. package/esm2020/src/remote/RemoteInitDataViewCommand.mjs +11 -0
  134. package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
  135. package/esm2020/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +13 -0
  136. package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
  137. package/esm2020/src/remote/ServerError.mjs +44 -0
  138. package/{esm2015/src/remote/SetTransactionStateRemoteDataViewCommand.js → esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs} +8 -11
  139. package/esm2020/src/rt/Argument.mjs +274 -0
  140. package/esm2020/src/rt/ArgumentsList.mjs +103 -0
  141. package/esm2020/src/rt/Boundary.mjs +158 -0
  142. package/{esm2015/src/rt/CompMainPrgTable.js → esm2020/src/rt/CompMainPrgTable.mjs} +0 -0
  143. package/esm2020/src/rt/DataviewHeaderBase.mjs +96 -0
  144. package/{esm2015/src/rt/DataviewHeaderFactory.js → esm2020/src/rt/DataviewHeaderFactory.mjs} +0 -0
  145. package/{esm2015/src/rt/DataviewHeaders.js → esm2020/src/rt/DataviewHeaders.mjs} +0 -0
  146. package/esm2020/src/rt/DataviewHeadersSaxHandler.mjs +39 -0
  147. package/{esm2015/src/rt/ExecutionStack.js → esm2020/src/rt/ExecutionStack.mjs} +0 -0
  148. package/{esm2015/src/rt/ExecutionStackEntry.js → esm2020/src/rt/ExecutionStackEntry.mjs} +0 -0
  149. package/{esm2015/src/rt/HandlersTable.js → esm2020/src/rt/HandlersTable.mjs} +0 -0
  150. package/{esm2015/src/rt/IDataSourceViewDefinition.js → esm2020/src/rt/IDataSourceViewDefinition.mjs} +1 -0
  151. package/{esm2015/src/rt/IDataviewHeader.js → esm2020/src/rt/IDataviewHeader.mjs} +1 -0
  152. package/{esm2015/src/rt/IResultValue.js → esm2020/src/rt/IResultValue.mjs} +1 -0
  153. package/{esm2015/src/rt/LastFocusedManager.js → esm2020/src/rt/LastFocusedManager.mjs} +0 -0
  154. package/esm2020/src/rt/Operation.mjs +745 -0
  155. package/{esm2015/src/rt/OperationTable.js → esm2020/src/rt/OperationTable.mjs} +0 -0
  156. package/esm2020/src/rt/Recompute.mjs +355 -0
  157. package/{esm2015/src/rt/RecomputeTable.js → esm2020/src/rt/RecomputeTable.mjs} +0 -0
  158. package/esm2020/src/rt/RemoteDataviewHeader.mjs +105 -0
  159. package/{esm2015/src/rt/ResultValue.js → esm2020/src/rt/ResultValue.mjs} +0 -0
  160. package/esm2020/src/rt/TableCache.mjs +177 -0
  161. package/esm2020/src/rt/TableCacheManager.mjs +67 -0
  162. package/{esm2015/src/rt/Transaction.js → esm2020/src/rt/Transaction.mjs} +0 -0
  163. package/{esm2015/src/security/UserDetails.js → esm2020/src/security/UserDetails.mjs} +0 -0
  164. package/{esm2015/src/tasks/IMGDataCollection.js → esm2020/src/tasks/IMGDataCollection.mjs} +1 -0
  165. package/esm2020/src/tasks/MGData.mjs +552 -0
  166. package/esm2020/src/tasks/MGDataCollection.mjs +259 -0
  167. package/{esm2015/src/tasks/MenusDeserializer.js → esm2020/src/tasks/MenusDeserializer.mjs} +0 -0
  168. package/{esm2015/src/tasks/RCTimer.js → esm2020/src/tasks/RCTimer.mjs} +0 -0
  169. package/{esm2015/src/tasks/RemoteTaskService.js → esm2020/src/tasks/RemoteTaskService.mjs} +0 -0
  170. package/esm2020/src/tasks/Task.mjs +2501 -0
  171. package/{esm2015/src/tasks/TaskBase.js → esm2020/src/tasks/TaskBase.mjs} +22 -1
  172. package/esm2020/src/tasks/TaskServiceBase.mjs +25 -0
  173. package/esm2020/src/tasks/TasksTable.mjs +80 -0
  174. package/{esm2015/src/tasks/sort/Sort.js → esm2020/src/tasks/sort/Sort.mjs} +0 -0
  175. package/{esm2015/src/tasks/sort/SortCollection.js → esm2020/src/tasks/sort/SortCollection.mjs} +0 -0
  176. package/{esm2015/src/util/ConstUtils.js → esm2020/src/util/ConstUtils.mjs} +0 -0
  177. package/esm2020/src/util/FlowMonitorQueue.mjs +361 -0
  178. package/{esm2015/src/util/HeapSort.js → esm2020/src/util/HeapSort.mjs} +0 -0
  179. package/{esm2015/src/util/IMirrorXML.js → esm2020/src/util/IMirrorXML.mjs} +2 -1
  180. package/{esm2015/src/util/IServerConfig.js → esm2020/src/util/IServerConfig.mjs} +1 -0
  181. package/{esm2015/src/util/MgBlockingQueue.js → esm2020/src/util/MgBlockingQueue.mjs} +1 -0
  182. package/esm2020/src/util/MgPriorityBlockingQueue.mjs +76 -0
  183. package/{esm2015/src/util/MgPriorityQueue.js → esm2020/src/util/MgPriorityQueue.mjs} +0 -0
  184. package/esm2020/src/util/ParamParseResult.mjs +8 -0
  185. package/esm2020/src/util/PrmMap.mjs +151 -0
  186. package/{esm2015/src/util/Process.js → esm2020/src/util/Process.mjs} +0 -0
  187. package/{esm2015/src/util/ReturnResult.js → esm2020/src/util/ReturnResult.mjs} +0 -0
  188. package/{esm2015/src/util/ReturnResultBase.js → esm2020/src/util/ReturnResultBase.mjs} +0 -0
  189. package/{esm2015/src/util/Scrambler.js → esm2020/src/util/Scrambler.mjs} +0 -0
  190. package/{esm2015/src/util/UniqueIDUtils.js → esm2020/src/util/UniqueIDUtils.mjs} +0 -0
  191. package/{esm2015/src/util/cookie.service.js → esm2020/src/util/cookie.service.mjs} +0 -0
  192. package/fesm2015/{magic-xpa-engine.js → magic-xpa-engine.mjs} +103 -7
  193. package/fesm2015/magic-xpa-engine.mjs.map +1 -0
  194. package/fesm2020/magic-xpa-engine.mjs +30705 -0
  195. package/fesm2020/magic-xpa-engine.mjs.map +1 -0
  196. package/index.d.ts +2 -0
  197. package/package.json +27 -13
  198. package/src/AccessHelper.d.ts +1 -1
  199. package/src/CommandsProcessorBase.d.ts +3 -3
  200. package/src/commands/DataViewCommandBase.d.ts +2 -2
  201. package/src/commands/IClientTargetedCommand.d.ts +1 -1
  202. package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +1 -1
  203. package/src/data/FieldBase.d.ts +3 -3
  204. package/src/env/EnvVariablesTable.d.ts +2 -15
  205. package/src/env/MirrorString.d.ts +15 -0
  206. package/src/exp/GlobalParamsTable.d.ts +2 -1
  207. package/src/http/client/HttpClientBase.d.ts +2 -2
  208. package/src/rt/DataviewHeaderBase.d.ts +1 -1
  209. package/src/tasks/TaskBase.d.ts +7 -7
  210. package/src/util/IMirrorXML.d.ts +1 -1
  211. package/src/util/ParamParseResult.d.ts +6 -0
  212. package/src/util/PrmMap.d.ts +0 -6
  213. package/bundles/magic-xpa-engine.umd.js +0 -37983
  214. package/bundles/magic-xpa-engine.umd.js.map +0 -1
  215. package/bundles/magic-xpa-engine.umd.min.js +0 -16
  216. package/bundles/magic-xpa-engine.umd.min.js.map +0 -1
  217. package/esm2015/index.js +0 -188
  218. package/esm2015/src/AccessHelper.js +0 -3
  219. package/esm2015/src/ClientManager.js +0 -412
  220. package/esm2015/src/CommandsProcessorBase.js +0 -54
  221. package/esm2015/src/CommandsProcessorManager.js +0 -31
  222. package/esm2015/src/CommandsTable.js +0 -166
  223. package/esm2015/src/GUIManager.js +0 -72
  224. package/esm2015/src/bridge/MagicBridge.js +0 -44
  225. package/esm2015/src/commands/ClientToServer/BrowserEscEventCommand.js +0 -24
  226. package/esm2015/src/commands/ClientToServer/CommandFactory.js +0 -283
  227. package/esm2015/src/commands/DataViewCommandBase.js +0 -6
  228. package/esm2015/src/commands/IClientTargetedCommand.js +0 -6
  229. package/esm2015/src/commands/ServerToClient/AbortCommand.js +0 -68
  230. package/esm2015/src/commands/ServerToClient/AddLocateCommand.js +0 -25
  231. package/esm2015/src/commands/ServerToClient/AddRangeCommand.js +0 -65
  232. package/esm2015/src/commands/ServerToClient/AddSortCommand.js +0 -36
  233. package/esm2015/src/commands/ServerToClient/ClientTargetedCommandBase.js +0 -24
  234. package/esm2015/src/commands/ServerToClient/EnhancedVerifyCommand.js +0 -48
  235. package/esm2015/src/commands/ServerToClient/OpenURLCommand.js +0 -225
  236. package/esm2015/src/commands/ServerToClient/ResetLocateCommand.js +0 -18
  237. package/esm2015/src/commands/ServerToClient/ResetRangeCommand.js +0 -18
  238. package/esm2015/src/commands/ServerToClient/ResetSortCommand.js +0 -18
  239. package/esm2015/src/commands/ServerToClient/ResultCommand.js +0 -40
  240. package/esm2015/src/commands/ServerToClient/VerifyCommand.js +0 -88
  241. package/esm2015/src/communications/InteractiveCommunicationsFailureHandler.js +0 -20
  242. package/esm2015/src/data/DataView.js +0 -1693
  243. package/esm2015/src/data/DataviewManager.js +0 -31
  244. package/esm2015/src/data/DataviewManagerBase.js +0 -18
  245. package/esm2015/src/data/Field.js +0 -672
  246. package/esm2015/src/data/FieldBase.js +0 -9
  247. package/esm2015/src/data/Record.js +0 -847
  248. package/esm2015/src/data/TaskTransactionManager.js +0 -110
  249. package/esm2015/src/env/EnvVariablesTable.js +0 -408
  250. package/esm2015/src/env/Environment.js +0 -557
  251. package/esm2015/src/env/LanguageData.js +0 -230
  252. package/esm2015/src/event/Event.js +0 -1441
  253. package/esm2015/src/event/EventHandler.js +0 -787
  254. package/esm2015/src/event/EventHandlerPosition.js +0 -201
  255. package/esm2015/src/event/EventsManager.js +0 -3107
  256. package/esm2015/src/exp/Expression.js +0 -209
  257. package/esm2015/src/exp/ExpressionEvaluator.js +0 -4441
  258. package/esm2015/src/exp/GlobalParamsTable.js +0 -84
  259. package/esm2015/src/exp/YesNoExp.js +0 -44
  260. package/esm2015/src/gui/FormsTable.js +0 -73
  261. package/esm2015/src/gui/MgControl.js +0 -424
  262. package/esm2015/src/gui/MgForm.js +0 -1292
  263. package/esm2015/src/http/HttpManager.js +0 -100
  264. package/esm2015/src/http/client/HttpClientAsync.js +0 -72
  265. package/esm2015/src/http/client/HttpClientBase.js +0 -148
  266. package/esm2015/src/http/client/HttpClientSync.js +0 -47
  267. package/esm2015/src/remote/AddUserLocateRemoteDataViewCommand.js +0 -21
  268. package/esm2015/src/remote/AddUserRangeRemoteDataViewCommand.js +0 -21
  269. package/esm2015/src/remote/AddUserSortRemoteDataViewCommand.js +0 -21
  270. package/esm2015/src/remote/RemoteCommandsProcessor.js +0 -902
  271. package/esm2015/src/remote/RemoteControlItemsRefreshCommand.js +0 -28
  272. package/esm2015/src/remote/RemoteDataViewCommandBase.js +0 -27
  273. package/esm2015/src/remote/RemoteDataViewCommandUpdateNonModifiable.js +0 -19
  274. package/esm2015/src/remote/RemoteDataviewManager.js +0 -23
  275. package/esm2015/src/remote/RemoteInitDataViewCommand.js +0 -14
  276. package/esm2015/src/remote/ResetUserLocateRemoteDataviewCommand.js +0 -20
  277. package/esm2015/src/remote/ResetUserRangeRemoteDataviewCommand.js +0 -16
  278. package/esm2015/src/remote/ResetUserSortRemoteDataviewCommand.js +0 -19
  279. package/esm2015/src/remote/ServerError.js +0 -45
  280. package/esm2015/src/rt/Argument.js +0 -281
  281. package/esm2015/src/rt/ArgumentsList.js +0 -108
  282. package/esm2015/src/rt/Boundary.js +0 -161
  283. package/esm2015/src/rt/DataviewHeaderBase.js +0 -96
  284. package/esm2015/src/rt/DataviewHeadersSaxHandler.js +0 -40
  285. package/esm2015/src/rt/Operation.js +0 -772
  286. package/esm2015/src/rt/Recompute.js +0 -372
  287. package/esm2015/src/rt/RemoteDataviewHeader.js +0 -114
  288. package/esm2015/src/rt/TableCache.js +0 -182
  289. package/esm2015/src/rt/TableCacheManager.js +0 -70
  290. package/esm2015/src/tasks/MGData.js +0 -561
  291. package/esm2015/src/tasks/MGDataCollection.js +0 -270
  292. package/esm2015/src/tasks/Task.js +0 -2602
  293. package/esm2015/src/tasks/TaskServiceBase.js +0 -30
  294. package/esm2015/src/tasks/TasksTable.js +0 -87
  295. package/esm2015/src/util/FlowMonitorQueue.js +0 -364
  296. package/esm2015/src/util/MgPriorityBlockingQueue.js +0 -79
  297. package/esm2015/src/util/PrmMap.js +0 -157
  298. package/fesm2015/magic-xpa-engine.js.map +0 -1
@@ -1,557 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { DisplayConvertor, Manager } from '@magic-xpa/gui';
3
- import { Debug, Encoding, Hashtable, NotImplementedException, NString } from '@magic-xpa/mscorelib';
4
- import { Constants, Logger, OSEnvironment, UtilDateJpn, UtilStrByteMode, XMLConstants, XmlParser } from '@magic-xpa/utils';
5
- import { CommandsProcessorManager } from '../CommandsProcessorManager';
6
- import { ConstInterface } from '../ConstInterface';
7
- import { ServerConfig } from '../ServerConfig';
8
- import { AccessHelper } from '../AccessHelper';
9
- export class Environment {
10
- constructor() {
11
- this._environments = new Hashtable();
12
- this._contextInactivityTimeout = 0;
13
- this._clientContextInactivityTimeout = 0;
14
- this._contextInactivityWarningTime = 0;
15
- this._toolitipTimeout = 0;
16
- this._contextUnloadTimeout = 0;
17
- this._accessTest = false;
18
- this._canReplaceDecimalSeparator = false;
19
- this._codePage = 0;
20
- this._dateSeparator = '\0';
21
- this._decimalSeparator = '\0';
22
- this._thousandsSeparator = '\0';
23
- this._timeSeparator = '\0';
24
- this._defaultColor = 0;
25
- this._defaultFocusColor = 0;
26
- this._guid = null;
27
- this._controlsPersistencyPath = null;
28
- this._imeAutoOff = false;
29
- this._language = '\0';
30
- this._localAs400Set = false;
31
- this._localExtraGengo = null;
32
- this._localFlags = null;
33
- this._lowHigh = true;
34
- this._owner = null;
35
- this._debugMode = 0;
36
- this._significantNumSize = 0;
37
- this._specialAnsiExpression = false;
38
- this._specialShowStatusBarPanes = false;
39
- this._specialRouteToRootProgOnContextRecreation = false;
40
- this._specialEditLeftAlign = false;
41
- this._specialSwfControlName = false;
42
- this._specialExitCtrl = false;
43
- this._specialTextSizeFactoring = false;
44
- this._specialFlatEditOnClassicTheme = false;
45
- this._specialCancelOnCreate = false;
46
- this._system = null;
47
- this._terminal = 0;
48
- this._userId = null;
49
- this._userInfo = null;
50
- this._forwardSlash = Constants.ForwardSlashWebUsage;
51
- this._dropUserFormats = null;
52
- this._webclientReinitSession = "N";
53
- this._specialValNewPolicy = false;
54
- this.SpecialOldZorder = false;
55
- this.IgnoreReplaceDecimalSeparator = false;
56
- }
57
- get Language() {
58
- return this._language;
59
- }
60
- get SpecialNumpadPlusChar() {
61
- return true;
62
- }
63
- get SpecialRestoreMaximizedForm() {
64
- return false;
65
- }
66
- get SpecialIgnoreBGinModify() {
67
- return false;
68
- }
69
- set ForwardSlashUsage(value) {
70
- this._forwardSlash = value;
71
- }
72
- get ForwardSlashUsage() {
73
- return this._forwardSlash;
74
- }
75
- fillData(tokensVectorOrParser) {
76
- if (arguments[0] instanceof XmlParser) {
77
- this.fillData_0(tokensVectorOrParser);
78
- return;
79
- }
80
- this.fillData_1(tokensVectorOrParser);
81
- }
82
- fillData_0(parser) {
83
- let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
84
- if (endContext !== -1 && endContext < parser.getXMLdata().length) {
85
- let tag = parser.getXMLsubstring(endContext);
86
- parser.add2CurrIndex(tag.indexOf(ConstInterface.MG_TAG_ENV) + ConstInterface.MG_TAG_ENV.length);
87
- let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
88
- this.fillData(tokensVector);
89
- parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
90
- }
91
- else
92
- Logger.Instance.WriteExceptionToLogWithMsg("in Environment.FillData() out of string bounds");
93
- }
94
- fillData_1(tokensVector) {
95
- let attribute;
96
- let valueStr;
97
- let hashKey;
98
- let env;
99
- let utilImeJpn = Manager.UtilImeJpn;
100
- env = new EnvironmentDetails();
101
- for (let j = 0; j < tokensVector.length; j += 2) {
102
- attribute = (tokensVector.get_Item(j));
103
- valueStr = (tokensVector.get_Item(j + 1));
104
- valueStr = XmlParser.unescape(valueStr);
105
- switch (attribute) {
106
- case ConstInterface.MG_ATTR_THOUSANDS:
107
- this._thousandsSeparator = valueStr[0];
108
- break;
109
- case ConstInterface.MG_ATTR_DECIMAL_SEPARATOR:
110
- this._decimalSeparator = valueStr[0];
111
- break;
112
- case ConstInterface.MG_ATTR_WEBCLIENT_REINIT_SESSION:
113
- this._webclientReinitSession = valueStr[0];
114
- break;
115
- case ConstInterface.MG_ATTR_DATE:
116
- this._dateSeparator = valueStr[0];
117
- DisplayConvertor.Instance.setDateChar(this._dateSeparator.charCodeAt(0));
118
- break;
119
- case ConstInterface.MG_ATTR_TIME:
120
- this._timeSeparator = valueStr[0];
121
- break;
122
- case ConstInterface.MG_ATTR_OWNER:
123
- this._owner = valueStr;
124
- break;
125
- case ConstInterface.MG_ATTR_SIGNIFICANT_NUM_SIZE:
126
- this._significantNumSize = XmlParser.getInt(valueStr);
127
- break;
128
- case ConstInterface.MG_ATTR_DEBUG_MODE:
129
- this._debugMode = XmlParser.getInt(valueStr);
130
- break;
131
- case ConstInterface.MG_ATTR_POINT_TRANSLATION:
132
- this._canReplaceDecimalSeparator = XmlParser.getBoolean(valueStr);
133
- break;
134
- case ConstInterface.MG_ATTR_SPECIAL_EXITCTRL:
135
- this._specialExitCtrl = XmlParser.getBoolean(valueStr);
136
- break;
137
- case ConstInterface.MG_ATTR_LOWHIGH:
138
- this._lowHigh = XmlParser.getBoolean(valueStr);
139
- break;
140
- case ConstInterface.MG_ATTR_ACCESS_TEST:
141
- this._accessTest = XmlParser.getBoolean(valueStr);
142
- break;
143
- case ConstInterface.MG_ATTR_SPECIAL_TEXT_SIZE_FACTORING:
144
- this._specialTextSizeFactoring = XmlParser.getBoolean(valueStr);
145
- break;
146
- case ConstInterface.MG_ATTR_SPECIAL_FLAT_EDIT_ON_CLASSIC_THEME:
147
- this._specialFlatEditOnClassicTheme = XmlParser.getBoolean(valueStr);
148
- break;
149
- case ConstInterface.MG_ATTR_ENCODING:
150
- if (valueStr !== " ") {
151
- this._codePage = XmlParser.getInt(valueStr);
152
- UtilStrByteMode.Encoding = this.GetEncoding();
153
- }
154
- break;
155
- case ConstInterface.MG_ATTR_SYSTEM:
156
- this._system = XmlParser.unescape(valueStr);
157
- break;
158
- case ConstInterface.MG_ATTR_COMPONENT:
159
- env.CompIdx = XmlParser.getInt(valueStr);
160
- break;
161
- case ConstInterface.MG_ATTR_DATEMODE:
162
- env.DateMode = valueStr[0];
163
- break;
164
- case ConstInterface.MG_ATTR_CENTURY:
165
- env.Century = XmlParser.getInt(valueStr);
166
- break;
167
- case ConstInterface.MG_ATTR_IDLETIME:
168
- env.IdleTime = XmlParser.getInt(valueStr);
169
- if (env.IdleTime === 0)
170
- env.IdleTime = 1;
171
- break;
172
- case ConstInterface.MG_ATTR_UPD_IN_QUERY:
173
- env.UpdateInQueryMode = XmlParser.getBoolean(valueStr);
174
- break;
175
- case ConstInterface.MG_ATTR_CRE_IN_MODIFY:
176
- env.CreateInModifyMode = XmlParser.getBoolean(valueStr);
177
- break;
178
- case ConstInterface.MG_ATTR_DEFAULT_COLOR:
179
- this._defaultColor = XmlParser.getInt(valueStr);
180
- break;
181
- case ConstInterface.MG_ATTR_DEFAULT_FOCUS_COLOR:
182
- this._defaultFocusColor = XmlParser.getInt(valueStr);
183
- break;
184
- case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_TIMEOUT:
185
- this._contextInactivityTimeout = XmlParser.getInt(valueStr);
186
- break;
187
- case ConstInterface.MG_ATTR_CLIENT_CONTEXT_INACTIVITY_TIMEOUT:
188
- this._clientContextInactivityTimeout = XmlParser.getInt(valueStr);
189
- break;
190
- case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_WARNING_TIME:
191
- this._contextInactivityWarningTime = XmlParser.getInt(valueStr);
192
- break;
193
- case ConstInterface.MG_ATTR_TOOLTIP_TIMEOUT:
194
- this._toolitipTimeout = XmlParser.getInt(valueStr);
195
- break;
196
- case ConstInterface.MG_ATTR_CONTEXT_UNLOAD_TIMEOUT:
197
- this._contextUnloadTimeout = XmlParser.getInt(valueStr);
198
- break;
199
- case ConstInterface.MG_ATTR_IME_AUTO_OFF:
200
- this._imeAutoOff = XmlParser.getBoolean(valueStr);
201
- break;
202
- case ConstInterface.MG_ATTR_LOCAL_AS400SET:
203
- this._localAs400Set = XmlParser.getBoolean(valueStr);
204
- break;
205
- case ConstInterface.MG_ATTR_LOCAL_EXTRA_GENGO:
206
- this._localExtraGengo = valueStr;
207
- UtilDateJpn.getInstance().addExtraGengo(this._localExtraGengo);
208
- break;
209
- case ConstInterface.MG_ATTR_LOCAL_FLAGS:
210
- this._localFlags = valueStr;
211
- break;
212
- case ConstInterface.MG_ATTR_SPEACIAL_ANSI_EXP:
213
- this._specialAnsiExpression = XmlParser.getBoolean(valueStr);
214
- break;
215
- case ConstInterface.MG_ATTR_SPECIAL_SHOW_STATUSBAR_PANES:
216
- this._specialShowStatusBarPanes = XmlParser.getBoolean(valueStr);
217
- break;
218
- case ConstInterface.MG_ATTR_SPECIAL_ROUTE_TO_ROOT_PROG_ON_CONTEXT_RECREATION:
219
- this._specialRouteToRootProgOnContextRecreation = XmlParser.getBoolean(valueStr);
220
- break;
221
- case ConstInterface.MG_ATTR_SPECIAL_SPECIAL_EDIT_LEFT_ALIGN:
222
- this._specialEditLeftAlign = XmlParser.getBoolean(valueStr);
223
- break;
224
- case ConstInterface.MG_ATTR_SPEACIAL_SWF_CONTROL_NAME:
225
- this._specialSwfControlName = XmlParser.getBoolean(valueStr);
226
- break;
227
- case ConstInterface.MG_ATTR_LANGUAGE:
228
- this._language = valueStr[0];
229
- break;
230
- case ConstInterface.MG_ATTR_USERID:
231
- this._userId = valueStr;
232
- break;
233
- case ConstInterface.MG_TAG_USERNAME:
234
- ServerConfig.Instance.setUsername(valueStr);
235
- break;
236
- case ConstInterface.MG_ATTR_TERMINAL:
237
- this._terminal = XmlParser.getInt(valueStr);
238
- break;
239
- case ConstInterface.MG_ATTR_USERINFO:
240
- this._userInfo = valueStr;
241
- break;
242
- case ConstInterface.MG_ATTR_GUID:
243
- this._guid = valueStr;
244
- break;
245
- case ConstInterface.MG_ATTR_CONTROLS_PERSISTENCY_PATH:
246
- this._controlsPersistencyPath = valueStr;
247
- break;
248
- case ConstInterface.MG_ATTR_PROJDIR:
249
- env.ProjDir = valueStr;
250
- break;
251
- case ConstInterface.MG_ATTR_DROP_USERFORMATS:
252
- this._dropUserFormats = valueStr;
253
- break;
254
- case ConstInterface.MG_ATTR_SPECIAL_VAL_NEW_POLICY:
255
- this._specialValNewPolicy = XmlParser.getBoolean(valueStr);
256
- break;
257
- case ConstInterface.MG_ATTR_SPECIAL_CANCEL_ON_CREATE:
258
- this._specialCancelOnCreate = XmlParser.getBoolean(valueStr);
259
- break;
260
- case ConstInterface.MG_ATTR_SPECIAL_LEGACY_TRIM_RANGE:
261
- case ConstInterface.MG_ATTR_SPECIAL_LEGACY_EMPTY_RANGE:
262
- case ConstInterface.MG_ATTR_DEFAULT_DISABLED_COLOR:
263
- case ConstInterface.MG_ATTR_SPECIAL_ANSI_BLOB_CHECK_NULL:
264
- case ConstInterface.MG_ATTR_SPECIAL_TABLE_REDUCE_TITLE_HEIGHT:
265
- case ConstInterface.MG_ATTR_SPECIAL_DOTNET_ALLOW_ZERO_DATE:
266
- case ConstInterface.MG_ATTR_SPECIAL_REUSE_TABLE_EDITOR:
267
- break;
268
- default:
269
- Logger.Instance.WriteExceptionToLogWithMsg("in Environment.fillData(): unknown attribute: " + attribute);
270
- break;
271
- }
272
- }
273
- hashKey = env.CompIdx;
274
- this._environments.set_Item(hashKey, env);
275
- }
276
- fillFromUrl(tagName, parser) {
277
- return __awaiter(this, void 0, void 0, function* () {
278
- let XMLdata = parser.getXMLdata();
279
- let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
280
- if (endContext !== -1 && endContext < XMLdata.length) {
281
- let tagAndAttributes = parser.getXMLsubstring(endContext);
282
- parser.add2CurrIndex(tagAndAttributes.indexOf(tagName) + tagName.length);
283
- let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
284
- Debug.Assert(tokensVector.get_Item(0) === XMLConstants.MG_ATTR_VALUE);
285
- let cachedFileUrl = (tokensVector.get_Item(1));
286
- if (cachedFileUrl.trim() === "")
287
- Logger.Instance.WriteErrorToLog(NString.Format("Empty cached file URL: '{0}'", tagAndAttributes.trim()));
288
- else {
289
- let Content = yield CommandsProcessorManager.GetContent(cachedFileUrl, true);
290
- try {
291
- switch (tagName) {
292
- case ConstInterface.MG_TAG_KBDMAP_URL:
293
- break;
294
- case ConstInterface.MG_TAG_ENV_PARAM_URL:
295
- let innerXmlParser = new XmlParser(Content);
296
- while (AccessHelper.envParamsTable.mirrorFromXML(innerXmlParser.getNextTag(), innerXmlParser)) {
297
- }
298
- break;
299
- }
300
- }
301
- catch (ex) {
302
- switch (tagName) {
303
- case ConstInterface.MG_TAG_KBDMAP_URL:
304
- Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Keyboard Mapping: '{0}'{1}{2}", cachedFileUrl, OSEnvironment.EolSeq, ex.Message));
305
- break;
306
- case ConstInterface.MG_TAG_ENV_PARAM_URL:
307
- Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Env Params Table: '{0}'{1}{2}", cachedFileUrl, OSEnvironment.EolSeq, ex.Message));
308
- }
309
- }
310
- }
311
- endContext = XMLdata.indexOf(XMLConstants.TAG_OPEN, endContext);
312
- if (endContext !== -1)
313
- parser.setCurrIndex(endContext);
314
- }
315
- });
316
- }
317
- getEnvDet(compIdx) {
318
- let environmentDetails = this._environments.get_Item(compIdx);
319
- if (environmentDetails === null)
320
- Logger.Instance.WriteExceptionToLogWithMsg("in Environment.getEnvDet() there is no env");
321
- return environmentDetails;
322
- }
323
- GetDateMode(compIdx) {
324
- return this.getEnvDet(compIdx).DateMode;
325
- }
326
- GetThousands() {
327
- return this._thousandsSeparator;
328
- }
329
- GetDecimal() {
330
- return this._decimalSeparator;
331
- }
332
- setDecimalSeparator(value) {
333
- this._decimalSeparator = value;
334
- }
335
- setThousandsSeparator(value) {
336
- this._thousandsSeparator = value;
337
- }
338
- setDateSeparator(value) {
339
- this._dateSeparator = value;
340
- }
341
- setTimeSeparator(value) {
342
- this._timeSeparator = value;
343
- }
344
- GetDate() {
345
- return this._dateSeparator;
346
- }
347
- getIdleTime(compIdx) {
348
- return this.getEnvDet(compIdx).IdleTime;
349
- }
350
- getOwner() {
351
- return this._owner;
352
- }
353
- GetTime() {
354
- return this._timeSeparator;
355
- }
356
- GetCentury(compIdx) {
357
- return this.getEnvDet(compIdx).Century;
358
- }
359
- allowUpdateInQueryMode(compIdx) {
360
- return this.getEnvDet(compIdx).allowUpdateInQueryMode();
361
- }
362
- allowCreateInModifyMode(compIdx) {
363
- return this.getEnvDet(compIdx).allowCreateInModifyMode();
364
- }
365
- GetSignificantNumSize() {
366
- return this._significantNumSize;
367
- }
368
- setSignificantNumSize(newSize) {
369
- this._significantNumSize = newSize;
370
- }
371
- getCodePage() {
372
- return this._codePage;
373
- }
374
- GetEncoding() {
375
- let encoding;
376
- try {
377
- encoding = Encoding.GetEncoding(this._codePage);
378
- }
379
- catch (exception) {
380
- encoding = null;
381
- }
382
- return encoding;
383
- }
384
- getSystem() {
385
- return this._system;
386
- }
387
- GetDebugLevel() {
388
- return this._debugMode;
389
- }
390
- CanReplaceDecimalSeparator() {
391
- return !this.IgnoreReplaceDecimalSeparator && this._canReplaceDecimalSeparator;
392
- }
393
- getClientContextInactivityTimeout() {
394
- return this._clientContextInactivityTimeout;
395
- }
396
- getContextInactivityTimeout() {
397
- return this._contextInactivityTimeout;
398
- }
399
- getContextInactivityWarningTime() {
400
- return this._contextInactivityWarningTime;
401
- }
402
- getContextUnloadTimeout() {
403
- return this._contextUnloadTimeout;
404
- }
405
- GetTooltipTimeout() {
406
- return this._toolitipTimeout;
407
- }
408
- GetSpecialEditLeftAlign() {
409
- return this._specialEditLeftAlign;
410
- }
411
- getLowHigh() {
412
- return this._lowHigh;
413
- }
414
- GetDefaultColor() {
415
- return this._defaultColor;
416
- }
417
- GetDefaultFocusColor() {
418
- return this._defaultFocusColor;
419
- }
420
- getSpecialExitCtrl() {
421
- return this._specialExitCtrl;
422
- }
423
- GetImeAutoOff() {
424
- return this._imeAutoOff;
425
- }
426
- GetLocalAs400Set() {
427
- return this._localAs400Set;
428
- }
429
- getLocalExtraGengo() {
430
- return this._localExtraGengo;
431
- }
432
- GetLocalFlag(f) {
433
- return this._localFlags !== null && this._localFlags.indexOf(f) >= 0;
434
- }
435
- getSpecialAnsiExpression() {
436
- return this._specialAnsiExpression;
437
- }
438
- getSpecialShowStatusBarPanes() {
439
- return this._specialShowStatusBarPanes;
440
- }
441
- getTerminal() {
442
- return this._terminal;
443
- }
444
- getWebClientReinitSession() {
445
- return this._webclientReinitSession;
446
- }
447
- setWebClientReinitSession(session) {
448
- this._webclientReinitSession = session;
449
- }
450
- getSpecialRouteToRootProgOnContextRecreation() {
451
- return this._specialRouteToRootProgOnContextRecreation;
452
- }
453
- getUserID() {
454
- return this._userId;
455
- }
456
- getUserInfo() {
457
- return this._userInfo;
458
- }
459
- GetGUID() {
460
- return this._guid;
461
- }
462
- GetControlsPersistencyPath() {
463
- return this._controlsPersistencyPath;
464
- }
465
- getProjDir(compIdx) {
466
- return this.getEnvDet(compIdx).ProjDir;
467
- }
468
- GetSpecialEngLogon() {
469
- return false;
470
- }
471
- GetSpecialIgnoreButtonFormat() {
472
- return false;
473
- }
474
- GetSpecialSwfControlNameProperty() {
475
- return this._specialSwfControlName;
476
- }
477
- GetSpecialLogInternalExceptions() {
478
- return true;
479
- }
480
- setOwner(val) {
481
- this._owner = val;
482
- }
483
- setDateMode(compIdx, val) {
484
- this.getEnvDet(compIdx).DateMode = val;
485
- }
486
- setCentury(compIdx, val) {
487
- this.getEnvDet(compIdx).Century = val;
488
- }
489
- setIdleTime(compIdx, val) {
490
- this.getEnvDet(compIdx).IdleTime = val;
491
- }
492
- setAllowUpdateInQueryMode(compIdx, val) {
493
- this.getEnvDet(compIdx).UpdateInQueryMode = val;
494
- }
495
- setAllowCreateInModifyMode(compIdx, val) {
496
- this.getEnvDet(compIdx).CreateInModifyMode = val;
497
- }
498
- setContextInactivityTimeout(val) {
499
- this._contextInactivityTimeout = val;
500
- }
501
- setClientContextInactivityTimeout(val) {
502
- this._clientContextInactivityTimeout = val;
503
- }
504
- setContextInactivityWarningTime(val) {
505
- this._contextInactivityWarningTime = val;
506
- }
507
- setContextUnloadTimeout(val) {
508
- this._contextUnloadTimeout = val;
509
- }
510
- setTerminal(val) {
511
- this._terminal = val;
512
- }
513
- GetDropUserFormats() {
514
- return this._dropUserFormats;
515
- }
516
- GetSpecialTextSizeFactoring() {
517
- return this._specialTextSizeFactoring;
518
- }
519
- GetSpecialFlatEditOnClassicTheme() {
520
- return this._specialFlatEditOnClassicTheme;
521
- }
522
- GetSpecialDisableMouseWheel() {
523
- throw new NotImplementedException();
524
- }
525
- GetSpecialValNewPolicy() {
526
- return this._specialValNewPolicy;
527
- }
528
- GetSpecialCancelOnCreate() {
529
- return this._specialCancelOnCreate;
530
- }
531
- }
532
- Environment.Instance = new Environment();
533
- export class EnvironmentDetails {
534
- constructor() {
535
- this._createInModifyMode = false;
536
- this._updateInQueryMode = false;
537
- this.CompIdx = 0;
538
- this.DateMode = '\0';
539
- this.Century = 0;
540
- this.IdleTime = 0;
541
- this.ProjDir = null;
542
- this.CompIdx = 0;
543
- }
544
- set UpdateInQueryMode(value) {
545
- this._updateInQueryMode = value;
546
- }
547
- set CreateInModifyMode(value) {
548
- this._createInModifyMode = value;
549
- }
550
- allowUpdateInQueryMode() {
551
- return this._updateInQueryMode;
552
- }
553
- allowCreateInModifyMode() {
554
- return this._createInModifyMode;
555
- }
556
- }
557
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2Vudi9FbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLGdCQUFnQixFQUFnQixPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQVEsdUJBQXVCLEVBQUUsT0FBTyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDeEcsT0FBTyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sYUFBYSxFQUNiLFdBQVcsRUFFWCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBSzdDLE1BQU0sT0FBTyxXQUFXO0lBK0N0QjtRQTlDUSxrQkFBYSxHQUEwQyxJQUFJLFNBQVMsRUFBOEIsQ0FBQztRQUNuRyw4QkFBeUIsR0FBVyxDQUFDLENBQUM7UUFDdEMsb0NBQStCLEdBQVcsQ0FBQyxDQUFDO1FBQzVDLGtDQUE2QixHQUFXLENBQUMsQ0FBQztRQUMxQyxxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUFDN0IsMEJBQXFCLEdBQVcsQ0FBQyxDQUFDO1FBQ2xDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGdDQUEyQixHQUFZLEtBQUssQ0FBQztRQUM3QyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFXLElB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QU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDckMsQ0FBQzs7QUEzMUJNLG9CQUFRLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7QUFpMkJuRCxNQUFNLE9BQU8sa0JBQWtCO0lBc0I3QjtRQXJCUSx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBRTVDLFlBQU8sR0FBVyxDQUFDLENBQUM7UUFDcEIsYUFBUSxHQUFXLElBQUksQ0FBQztRQUN4QixZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFVckIsWUFBTyxHQUFXLElBQUksQ0FBQztRQU1yQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBZkQsSUFBSSxpQkFBaUIsQ0FBQyxLQUFjO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksa0JBQWtCLENBQUMsS0FBYztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFjRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUtELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Rpc3BsYXlDb252ZXJ0b3IsIElFbnZpcm9ubWVudCwgTWFuYWdlcn0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQge0RlYnVnLCBFbmNvZGluZywgSGFzaHRhYmxlLCBMaXN0LCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiwgTlN0cmluZ30gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1xyXG4gIENvbnN0YW50cyxcclxuICBMb2dnZXIsXHJcbiAgT1NFbnZpcm9ubWVudCxcclxuICBVdGlsRGF0ZUpwbixcclxuICBVdGlsSW1lSnBuLFxyXG4gIFV0aWxTdHJCeXRlTW9kZSxcclxuICBYTUxDb25zdGFudHMsXHJcbiAgWG1sUGFyc2VyXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7Q29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyfSBmcm9tICcuLi9Db21tYW5kc1Byb2Nlc3Nvck1hbmFnZXInO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tICcuLi9Db25zdEludGVyZmFjZSc7XHJcbmltcG9ydCB7U2VydmVyQ29uZmlnfSBmcm9tICcuLi9TZXJ2ZXJDb25maWcnO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhpcyBjbGFzcyBob2xkcyBzb21lIG9mIHRoZSBNYWdpYyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHdoaWNoIHRoZSBjbGllbnQgbmVlZHNcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50IGltcGxlbWVudHMgSUVudmlyb25tZW50IHtcclxuICBwcml2YXRlIF9lbnZpcm9ubWVudHM6IEhhc2h0YWJsZTxudW1iZXIsIEVudmlyb25tZW50RGV0YWlscz4gPSBuZXcgSGFzaHRhYmxlPG51bWJlciwgRW52aXJvbm1lbnREZXRhaWxzPigpO1xyXG4gIHByaXZhdGUgX2NvbnRleHRJbmFjdGl2aXR5VGltZW91dDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9jbGllbnRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF90b29saXRpcFRpbWVvdXQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY29udGV4dFVubG9hZFRpbWVvdXQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfYWNjZXNzVGVzdDogYm9vbGVhbiA9IGZhbHNlOyAvLyBwcm9wZXJ0eSB0aGF0IGVuYWJsZXMgdGhlIGNvZGUgZm9yIHRlc3QgdG9vbHNcclxuICBwcml2YXRlIF9jYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NvZGVQYWdlOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2RhdGVTZXBhcmF0b3I6IHN0cmluZyA9ICdcXDAnOyAvLyBkYXRlIHNlcGFyYXRvclxyXG4gIHByaXZhdGUgX2RlY2ltYWxTZXBhcmF0b3I6IHN0cmluZyA9ICdcXDAnOyAvLyBkZWNpbWFsIHNlcGFyYXRvclxyXG4gIHByaXZhdGUgX3Rob3VzYW5kc1NlcGFyYXRvcjogc3RyaW5nID0gJ1xcMCc7IC8vIHRob3VzYW5kcyBzZXBhcmF0b3JcclxuICBwcml2YXRlIF90aW1lU2VwYXJhdG9yOiBzdHJpbmcgPSAnXFwwJzsgLy8gdGltZSBzZXBhcmF0b3JcclxuICBwcml2YXRlIF9kZWZhdWx0Q29sb3I6IG51bWJlciA9IDA7IC8vIHNob3VsZCB3ZSBleGl0ICdjdXJyZW50JyBjb250cm9sIHdoZW4gYSBub24tcGFya2FibGUgY29udHJvbCBpcyBjbGlja2VkXHJcbiAgcHJpdmF0ZSBfZGVmYXVsdEZvY3VzQ29sb3I6IG51bWJlciA9IDA7IC8vIGRlZmF1bHQgZm9jdXMgY29sb3JcclxuICBwcml2YXRlIF9ndWlkOiBzdHJpbmcgPSBudWxsOyAvLyBndWlkIG9mIHRoZSBhcHBsaWNhdGlvblxyXG4gIHByaXZhdGUgX2NvbnRyb2xzUGVyc2lzdGVuY3lQYXRoOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2ltZUF1dG9PZmY6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSlBOOiBJTUUgc3VwcG9ydFxyXG4gIHByaXZhdGUgX2xhbmd1YWdlOiBzdHJpbmcgPSAnXFwwJztcclxuICBwcml2YXRlIF9sb2NhbEFzNDAwU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbG9jYWxFeHRyYUdlbmdvOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xvY2FsRmxhZ3M6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbG93SGlnaDogYm9vbGVhbiA9IHRydWU7IC8vIHdoYXQgaXMgdGhlIG9yZGVyIG9mIGJ5dGVzIGluIGV4cHJlc3Npb25zIChMT1dfSElHSCBvciBISUdIX0xPVylcclxuICBwcml2YXRlIF9vd25lcjogc3RyaW5nID0gbnVsbDsgLy8gb3duZXJcclxuICBwcml2YXRlIF9kZWJ1Z01vZGU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc2lnbmlmaWNhbnROdW1TaXplOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxBbnNpRXhwcmVzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxTaG93U3RhdHVzQmFyUGFuZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zcGVjaWFsUm91dGVUb1Jvb3RQcm9nT25Db250ZXh0UmVjcmVhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxFZGl0TGVmdEFsaWduOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbFN3ZkNvbnRyb2xOYW1lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbEV4aXRDdHJsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbFRleHRTaXplRmFjdG9yaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbEZsYXRFZGl0T25DbGFzc2ljVGhlbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zcGVjaWFsQ2FuY2VsT25DcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zeXN0ZW06IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdGVybWluYWw6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdXNlcklkOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3VzZXJJbmZvOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2ZvcndhcmRTbGFzaDogc3RyaW5nID0gQ29uc3RhbnRzLkZvcndhcmRTbGFzaFdlYlVzYWdlOyAvLyByZWZlciB0byBhIGZvcndhcmQgc2xhc2ggYXMgYSByZWxhdGl2ZSB3ZWIgdXJsLlxyXG4gIHByaXZhdGUgX2Ryb3BVc2VyRm9ybWF0czogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfd2ViY2xpZW50UmVpbml0U2Vzc2lvbjogc3RyaW5nID0gXCJOXCI7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbFZhbE5ld1BvbGljeTogYm9vbGVhbiA9IGZhbHNlOyAvLz8/XHJcblxyXG4gIHN0YXRpYyBJbnN0YW5jZTogRW52aXJvbm1lbnQgPSBuZXcgRW52aXJvbm1lbnQoKTtcclxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgZ2V0IExhbmd1YWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNhdmUgc3BlY2lhbCB6b3JkZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFNwZWNpYWxPbGRab3JkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUaGlzIGZsYWcgaXMgb25seSByZWxldmFudCBmb3IgT25saW5lLiBIZW5jZSwgcmV0dXJuIHRydWUgaW4gY2FzZSBvZiBSQyBhcyBpdCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIGdldCBTcGVjaWFsTnVtcGFkUGx1c0NoYXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIElnbm9yZVJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgZ2V0IFNwZWNpYWxSZXN0b3JlTWF4aW1pemVkRm9ybSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgZ2V0IFNwZWNpYWxJZ25vcmVCR2luTW9kaWZ5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pmluc3RydWN0cyBob3cgdG8gcmVmZXIgYSBmb3J3YXJkIHNsYXNoIC0gZWl0aGVyIGFzIGEgcmVsYXRpdmUgd2ViIHVybCwgb3IgYXMgYSBmaWxlIGluIHRoZSBmaWxlIHN5c3RlbS4uPC9zdW1tYXJ5PlxyXG4gIHNldCBGb3J3YXJkU2xhc2hVc2FnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9mb3J3YXJkU2xhc2ggPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBGb3J3YXJkU2xhc2hVc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZvcndhcmRTbGFzaDtcclxuICB9XHJcblxyXG4gIGZpbGxEYXRhKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZDtcclxuICBmaWxsRGF0YSh0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPik6IHZvaWQ7XHJcbiAgZmlsbERhdGEodG9rZW5zVmVjdG9yT3JQYXJzZXI/OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChhcmd1bWVudHNbMF0gaW5zdGFuY2VvZiBYbWxQYXJzZXIpIHtcclxuICAgICAgdGhpcy5maWxsRGF0YV8wKHRva2Vuc1ZlY3Rvck9yUGFyc2VyKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maWxsRGF0YV8xKHRva2Vuc1ZlY3Rvck9yUGFyc2VyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBOZWVkIHBhcnQgaW5wdXQgU3RyaW5nIHRvIHJlbGV2YW50IGZvciB0aGUgY2xhc3MgZGF0YS4gZW5kIDxlbnYgLi4uPiB0YWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBmaWxsRGF0YV8wKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IFN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlYpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VOVi5sZW5ndGgpO1xyXG4gICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIHRoaXMuZmlsbERhdGEodG9rZW5zVmVjdG9yKTtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19URVJNLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIEVudmlyb25tZW50LkZpbGxEYXRhKCkgb3V0IG9mIHN0cmluZyBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWFrZSBpbml0aWFsaXphdGlvbiBvZiBwcml2YXRlIGVsZW1lbnRzIGJ5IGZvdW5kIHRva2Vuc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b2tlbnNWZWN0b3JcIj5mb3VuZCB0b2tlbnMsIHdoaWNoIGNvbnNpc3QgYXR0cmlidXRlL3ZhbHVlIG9mIGV2ZXJ5IGZvdW5kIGVsZW1lbnQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgZmlsbERhdGFfMSh0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nO1xyXG4gICAgbGV0IHZhbHVlU3RyOiBzdHJpbmc7XHJcbiAgICBsZXQgaGFzaEtleTogbnVtYmVyO1xyXG4gICAgbGV0IGVudjogRW52aXJvbm1lbnREZXRhaWxzO1xyXG4gICAgbGV0IHV0aWxJbWVKcG46IFV0aWxJbWVKcG4gPSBNYW5hZ2VyLlV0aWxJbWVKcG47XHJcblxyXG4gICAgZW52ID0gbmV3IEVudmlyb25tZW50RGV0YWlscygpO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgYXR0cmlidXRlID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIHZhbHVlU3RyID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG4gICAgICB2YWx1ZVN0ciA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RIT1VTQU5EUzpcclxuICAgICAgICAgIHRoaXMuX3Rob3VzYW5kc1NlcGFyYXRvciA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFQ0lNQUxfU0VQQVJBVE9SOlxyXG4gICAgICAgICAgdGhpcy5fZGVjaW1hbFNlcGFyYXRvciA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1dFQkNMSUVOVF9SRUlOSVRfU0VTU0lPTjpcclxuICAgICAgICAgIHRoaXMuX3dlYmNsaWVudFJlaW5pdFNlc3Npb24gPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFOlxyXG4gICAgICAgICAgdGhpcy5fZGF0ZVNlcGFyYXRvciA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5zZXREYXRlQ2hhcih0aGlzLl9kYXRlU2VwYXJhdG9yLmNoYXJDb2RlQXQoMCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJTUU6XHJcbiAgICAgICAgICB0aGlzLl90aW1lU2VwYXJhdG9yID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfT1dORVI6XHJcbiAgICAgICAgICB0aGlzLl9vd25lciA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NJR05JRklDQU5UX05VTV9TSVpFOlxyXG4gICAgICAgICAgICB0aGlzLl9zaWduaWZpY2FudE51bVNpemUgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUJVR19NT0RFOlxyXG4gICAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUE9JTlRfVFJBTlNMQVRJT046XHJcbiAgICAgICAgICB0aGlzLl9jYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvciA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0VYSVRDVFJMOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbEV4aXRDdHJsID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xPV0hJR0g6XHJcbiAgICAgICAgICB0aGlzLl9sb3dIaWdoID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0FDQ0VTU19URVNUOlxyXG4gICAgICAgICAgdGhpcy5fYWNjZXNzVGVzdCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1RFWFRfU0laRV9GQUNUT1JJTkc6XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsVGV4dFNpemVGYWN0b3JpbmcgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9GTEFUX0VESVRfT05fQ0xBU1NJQ19USEVNRTpcclxuICAgICAgICAgIHRoaXMuX3NwZWNpYWxGbGF0RWRpdE9uQ2xhc3NpY1RoZW1lID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VOQ09ESU5HOlxyXG4gICAgICAgICAgaWYgKHZhbHVlU3RyICE9PSBcIiBcIikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlUGFnZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgICBVdGlsU3RyQnl0ZU1vZGUuRW5jb2RpbmcgPSB0aGlzLkdldEVuY29kaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1lTVEVNOlxyXG4gICAgICAgICAgdGhpcy5fc3lzdGVtID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT01QT05FTlQ6XHJcbiAgICAgICAgICBlbnYuQ29tcElkeCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RBVEVNT0RFOlxyXG4gICAgICAgICAgZW52LkRhdGVNb2RlID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0VOVFVSWTpcclxuICAgICAgICAgIGVudi5DZW50dXJ5ID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSURMRVRJTUU6XHJcbiAgICAgICAgICBlbnYuSWRsZVRpbWUgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIC8vIGhhbmRsZSB0aGUgZGVmYXVsdCBpZGxlIHRpbWUgdmFsdWVcclxuICAgICAgICAgIGlmIChlbnYuSWRsZVRpbWUgPT09IDApXHJcbiAgICAgICAgICAgIGVudi5JZGxlVGltZSA9IDE7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVBEX0lOX1FVRVJZOlxyXG4gICAgICAgICAgZW52LlVwZGF0ZUluUXVlcnlNb2RlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NSRV9JTl9NT0RJRlk6XHJcbiAgICAgICAgICBlbnYuQ3JlYXRlSW5Nb2RpZnlNb2RlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFRkFVTFRfQ09MT1I6XHJcbiAgICAgICAgICB0aGlzLl9kZWZhdWx0Q29sb3IgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUZBVUxUX0ZPQ1VTX0NPTE9SOlxyXG4gICAgICAgICAgdGhpcy5fZGVmYXVsdEZvY3VzQ29sb3IgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX0lOQUNUSVZJVFlfVElNRU9VVDpcclxuICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmFjdGl2aXR5VGltZW91dCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NMSUVOVF9DT05URVhUX0lOQUNUSVZJVFlfVElNRU9VVDpcclxuICAgICAgICAgIHRoaXMuX2NsaWVudENvbnRleHRJbmFjdGl2aXR5VGltZW91dCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfSU5BQ1RJVklUWV9XQVJOSU5HX1RJTUU6XHJcbiAgICAgICAgICB0aGlzLl9jb250ZXh0SW5hY3Rpdml0eVdhcm5pbmdUaW1lID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVE9PTFRJUF9USU1FT1VUOlxyXG4gICAgICAgICAgdGhpcy5fdG9vbGl0aXBUaW1lb3V0ID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9VTkxPQURfVElNRU9VVDpcclxuICAgICAgICAgIHRoaXMuX2NvbnRleHRVbmxvYWRUaW1lb3V0ID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU1FX0FVVE9fT0ZGOlxyXG4gICAgICAgICAgdGhpcy5faW1lQXV0b09mZiA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MT0NBTF9BUzQwMFNFVDpcclxuICAgICAgICAgIHRoaXMuX2xvY2FsQXM0MDBTZXQgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTE9DQUxfRVhUUkFfR0VOR086XHJcbiAgICAgICAgICB0aGlzLl9sb2NhbEV4dHJhR2VuZ28gPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIFV0aWxEYXRlSnBuLmdldEluc3RhbmNlKCkuYWRkRXh0cmFHZW5nbyh0aGlzLl9sb2NhbEV4dHJhR2VuZ28pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xPQ0FMX0ZMQUdTOlxyXG4gICAgICAgICAgdGhpcy5fbG9jYWxGbGFncyA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUFDSUFMX0FOU0lfRVhQOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbEFuc2lFeHByZXNzaW9uID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfU0hPV19TVEFUVVNCQVJfUEFORVM6XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsU2hvd1N0YXR1c0JhclBhbmVzID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfUk9VVEVfVE9fUk9PVF9QUk9HX09OX0NPTlRFWFRfUkVDUkVBVElPTjpcclxuICAgICAgICAgIHRoaXMuX3NwZWNpYWxSb3V0ZVRvUm9vdFByb2dPbkNvbnRleHRSZWNyZWF0aW9uID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfU1BFQ0lBTF9FRElUX0xFRlRfQUxJR046XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsRWRpdExlZnRBbGlnbiA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVBQ0lBTF9TV0ZfQ09OVFJPTF9OQU1FOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbFN3ZkNvbnRyb2xOYW1lID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xBTkdVQUdFOlxyXG4gICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSSUQ6XHJcbiAgICAgICAgICB0aGlzLl91c2VySWQgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1VTRVJOQU1FOlxyXG4gICAgICAgICAgU2VydmVyQ29uZmlnLkluc3RhbmNlLnNldFVzZXJuYW1lKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URVJNSU5BTDpcclxuICAgICAgICAgIHRoaXMuX3Rlcm1pbmFsID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVNFUklORk86XHJcbiAgICAgICAgICB0aGlzLl91c2VySW5mbyA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0dVSUQ6XHJcbiAgICAgICAgICB0aGlzLl9ndWlkID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVFJPTFNfUEVSU0lTVEVOQ1lfUEFUSDpcclxuICAgICAgICAgIHRoaXMuX2NvbnRyb2xzUGVyc2lzdGVuY3lQYXRoID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUFJPSkRJUjpcclxuICAgICAgICAgIGVudi5Qcm9qRGlyID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRFJPUF9VU0VSRk9STUFUUzpcclxuICAgICAgICAgIHRoaXMuX2Ryb3BVc2VyRm9ybWF0cyA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfVkFMX05FV19QT0xJQ1k6XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsVmFsTmV3UG9saWN5ID0gIFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0NBTkNFTF9PTl9DUkVBVEU6XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsQ2FuY2VsT25DcmVhdGUgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9MRUdBQ1lfVFJJTV9SQU5HRTpcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9MRUdBQ1lfRU1QVFlfUkFOR0U6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFRkFVTFRfRElTQUJMRURfQ09MT1I6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfQU5TSV9CTE9CX0NIRUNLX05VTEw6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfVEFCTEVfUkVEVUNFX1RJVExFX0hFSUdIVDpcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9ET1RORVRfQUxMT1dfWkVST19EQVRFOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1JFVVNFX1RBQkxFX0VESVRPUjpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBFbnZpcm9ubWVudC5maWxsRGF0YSgpOiB1bmtub3duIGF0dHJpYnV0ZTogXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGhhc2hLZXkgPSBlbnYuQ29tcElkeDtcclxuICAgIHRoaXMuX2Vudmlyb25tZW50cy5zZXRfSXRlbShoYXNoS2V5LCBlbnYpO1xyXG5cclxuXHJcbiAgICAvLyBUT0RPOiBzb21laG93IGFkZEFzeW5jIHRocm93cyBzb21lIGV4Y2VwdGlvbiBmb3IgU0VUX0VOVl9UT09MVElQX1RJTUVPVVQuIEV2YWx1YXRlIGFuZCBmaXggaXQsIGlmIHBvc3NpYmxlXHJcbiAgICAvLyBpZiAodGhpcy5fdG9vbGl0aXBUaW1lb3V0ID4gMClcclxuICAgIC8vICAgQ29tbWFuZHMuYWRkQXN5bmMoQ29tbWFuZFR5cGUuU0VUX0VOVl9UT09MVElQX1RJTUVPVVQsIDxPYmplY3Q+bnVsbCwgPE9iamVjdD50aGlzLl90b29saXRpcFRpbWVvdXQpO1xyXG5cclxuXHJcblxyXG4gICAgLy8gaWYgKHRoaXMuX2xhbmd1YWdlICE9PSAnICcpXHJcbiAgICAvLyAgIENvbW1hbmRzLmFkZEFzeW5jKENvbW1hbmRUeXBlLlNFVF9FTlZfTEFNR1VBR0UsIG51bGwsIDAsIHRoaXMuX2xhbmd1YWdlLmNoYXJDb2RlQXQoMCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbGwgdGhlIGZpbGUgbWFwcGluZyB3aGVuIHBhc3NlZCB0aHJvdWdoIHRoZSBjYWNoZTogcGxhY2VkIGludG8gdGhlIGNhY2hlIGJ5IHRoZSBydW50aW1lLWVuZ2luZSwgcGFzc2VkXHJcbiAgLy8vICAgYXMgJzxmaWxldXJsIHZhbCA9IFwiLy4uLlwiJ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJUQUdfVVJMXCI+PC9wYXJhbT5cclxuICBhc3luYyBmaWxsRnJvbVVybCh0YWdOYW1lOiBzdHJpbmcsIHBhcnNlcjogWG1sUGFyc2VyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgWE1MZGF0YTogc3RyaW5nID0gcGFyc2VyLmdldFhNTGRhdGEoKTtcclxuXHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgWE1MZGF0YS5sZW5ndGgpIHtcclxuXHJcbiAgICAgIC8vIGZpbmQgbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWdBbmRBdHRyaWJ1dGVzOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWdBbmRBdHRyaWJ1dGVzLmluZGV4T2YodGFnTmFtZSkgKyB0YWdOYW1lLmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIERlYnVnLkFzc2VydCh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oMCkgPT09IFhNTENvbnN0YW50cy5NR19BVFRSX1ZBTFVFKTtcclxuXHJcbiAgICAgIGxldCBjYWNoZWRGaWxlVXJsOiBzdHJpbmcgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKDEpKTtcclxuICAgICAgaWYgKGNhY2hlZEZpbGVVcmwudHJpbSgpID09PSBcIlwiKVxyXG4gICAgICAvLyBtaWdodCBoYXBwZW4gaW4gY2FzZSB0aGUgeHBhIHNlcnZlciBmYWlsZWQgdG8gd3JpdGUgdG8gaXRzIGNhY2hlIGZvbGRlclxyXG4gICAgICAvLyAoZS5nLiB0aGUgY2FjaGUgZm9sZGVyIGlzIGludmFsaWQsIGR1ZSB0byBhIGNvbmZpZ3VyYXRpb24gbWlzdGFrZSxcclxuICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGUgY3VycmVudCBlcnJvciBtZXNzYWdlIHdpbGwgYmUgbWF0Y2hlZCB3aXRoIGFuIGVycm9yIGluIHRoZSB4cGEgc2VydmVyJ3MgbG9nIGZpbGUgKEdlbmVyYWxFcnJvckxvZz0pKS5cclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiRW1wdHkgY2FjaGVkIGZpbGUgVVJMOiAnezB9J1wiLCB0YWdBbmRBdHRyaWJ1dGVzLnRyaW0oKSkpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgQ29udGVudDogc3RyaW5nID0gYXdhaXQgQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyLkdldENvbnRlbnQoY2FjaGVkRmlsZVVybCwgdHJ1ZSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19LQkRNQVBfVVJMOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU1fVVJMOlxyXG4gICAgICAgICAgICAgIGxldCBpbm5lclhtbFBhcnNlcjogWG1sUGFyc2VyID0gbmV3IFhtbFBhcnNlcihDb250ZW50KTtcclxuICAgICAgICAgICAgICB3aGlsZSAoQWNjZXNzSGVscGVyLmVudlBhcmFtc1RhYmxlLm1pcnJvckZyb21YTUwoaW5uZXJYbWxQYXJzZXIuZ2V0TmV4dFRhZygpLCBpbm5lclhtbFBhcnNlcikpIHtcclxuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19LQkRNQVBfVVJMOlxyXG4gICAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIktleWJvYXJkIE1hcHBpbmc6ICd7MH0nezF9ezJ9XCIsIGNhY2hlZEZpbGVVcmwsIE9TRW52aXJvbm1lbnQuRW9sU2VxLCBleC5NZXNzYWdlKSk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VOVl9QQVJBTV9VUkw6XHJcbiAgICAgICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiRW52IFBhcmFtcyBUYWJsZTogJ3swfSd7MX17Mn1cIiwgY2FjaGVkRmlsZVVybCwgT1NFbnZpcm9ubWVudC5Fb2xTZXEsIGV4Lk1lc3NhZ2UpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGVuZENvbnRleHQgPSBYTUxkYXRhLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOLCBlbmRDb250ZXh0KTtcclxuICAgICAgaWYgKGVuZENvbnRleHQgIT09IC0xKVxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IEVudmlyb25tZW50RGV0YWlscyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBJZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBFbnZpcm9ubWVudERldGFpbHM8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRFbnZEZXQoY29tcElkeDogbnVtYmVyKTogRW52aXJvbm1lbnREZXRhaWxzIHtcclxuICAgIGxldCBlbnZpcm9ubWVudERldGFpbHM6IEVudmlyb25tZW50RGV0YWlscyA9IDxFbnZpcm9ubWVudERldGFpbHM+dGhpcy5fZW52aXJvbm1lbnRzLmdldF9JdGVtKGNvbXBJZHgpO1xyXG5cclxuICAgIGlmIChlbnZpcm9ubWVudERldGFpbHMgPT09IG51bGwpXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIEVudmlyb25tZW50LmdldEVudkRldCgpIHRoZXJlIGlzIG5vIGVudlwiKTtcclxuICAgIHJldHVybiBlbnZpcm9ubWVudERldGFpbHM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBkYXRlIG1vZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IERhdGVNb2RlPC9yZXR1cm5zPlxyXG4gIEdldERhdGVNb2RlKGNvbXBJZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuRGF0ZU1vZGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBUaG91c2FuZHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gVGhvdXNhbmRzPC9yZXR1cm5zPlxyXG4gIEdldFRob3VzYW5kcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rob3VzYW5kc1NlcGFyYXRvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIERlY2ltYWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gRGVjaW1hbDwvcmV0dXJucz5cclxuICBHZXREZWNpbWFsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjaW1hbFNlcGFyYXRvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBEZWNpbWFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXREZWNpbWFsU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RlY2ltYWxTZXBhcmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBEZWNpbWFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRUaG91c2FuZHNTZXBhcmF0b3IodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGhvdXNhbmRzU2VwYXJhdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXREYXRlU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RhdGVTZXBhcmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldFRpbWVTZXBhcmF0b3IodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGltZVNlcGFyYXRvciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgRGF0ZSBTZXBhcmF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gRGF0ZSBTZXBhcmF0b3I8L3JldHVybnM+XHJcbiAgR2V0RGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBJZGxlVGltZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+b2YgdGhlIHRhc2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gSWRsZVRpbWU8L3JldHVybnM+XHJcbiAgZ2V0SWRsZVRpbWUoY29tcElkeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdldEVudkRldChjb21wSWR4KS5JZGxlVGltZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIG93bmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IG93bmVyPC9yZXR1cm5zPlxyXG4gIGdldE93bmVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3duZXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSB0aW1lIHNlcGFyYXRvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aW1lIHNlcGVyYXRvcjwvcmV0dXJucz5cclxuICBHZXRUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZVNlcGFyYXRvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGNlbnR1cnlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+Y2VudHVyeTwvcmV0dXJucz5cclxuICBHZXRDZW50dXJ5KGNvbXBJZHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuQ2VudHVyeTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gVFJVRSBpZiB1cGRhdGUgaXMgYWxsb3dlZCBpbiBxdWVyeSBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj5vZiB0aGUgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBVcGRhdGVJblF1ZXJ5TW9kZTwvcmV0dXJucz5cclxuICBhbGxvd1VwZGF0ZUluUXVlcnlNb2RlKGNvbXBJZHg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLmFsbG93VXBkYXRlSW5RdWVyeU1vZGUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gVFJVRSBpZiBjcmVhdGUgaXMgYWxsb3dlZCBpbiBtb2RpZnkgbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+b2YgdGhlIHRhc2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGU8L3JldHVybnM+XHJcbiAgYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoY29tcElkeDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHNpZ25pZmljYW50IG51bSBzaXplXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzaWduaWZpY2FudCBudW0gc2l6ZTwvcmV0dXJucz5cclxuICBHZXRTaWduaWZpY2FudE51bVNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zaWduaWZpY2FudE51bVNpemU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBzaWduaWZpY2FudCBudW0gc2l6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzZXRTaWduaWZpY2FudE51bVNpemUobmV3U2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zaWduaWZpY2FudE51bVNpemUgPSBuZXdTaXplO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgY29kZSBwYWdlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBjb2RlIHBhZ2VcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldENvZGVQYWdlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29kZVBhZ2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGNoYXJzZXQgb2YgdGhlIGN1cnJlbnQgZG9jdW1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldEVuY29kaW5nKCk6IEVuY29kaW5nIHtcclxuICAgIGxldCBlbmNvZGluZzogRW5jb2Rpbmc7XHJcbiAgICB0cnkge1xyXG4gICAgICBlbmNvZGluZyA9IEVuY29kaW5nLkdldEVuY29kaW5nKHRoaXMuX2NvZGVQYWdlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleGNlcHRpb24pIHtcclxuICAgICAgZW5jb2RpbmcgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVuY29kaW5nO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHN5c3RlbSBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzeXN0ZW0gbmFtZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0U3lzdGVtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3lzdGVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGRlYnVnIGxldmVsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IDAgbm8gZGVidWcgMSBkZWJ1ZyAyIGRlYnVnIGFuZCBkYXRhIHRyYW5zZmVycyBpbiBoZXggKCBub3QgaW4gYmFzZTY0KVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgR2V0RGVidWdMZXZlbCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlYnVnTW9kZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGlmICcuJyBzaG91bGQgYmUgY2hhbmdlZCB0byB0aGUgZGVjaW1hbCBzZXBhcmF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIENhblJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLklnbm9yZVJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yICYmIHRoaXMuX2NhblJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgQ2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBDbGllbnRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQ8L3JldHVybnM+XHJcbiAgZ2V0Q2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgQ29udGV4dEluYWN0aXZpdHlUaW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQ8L3JldHVybnM+XHJcbiAgZ2V0Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dEluYWN0aXZpdHlUaW1lb3V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgQ29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgQ29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZW91dDwvcmV0dXJucz5cclxuICBnZXRDb250ZXh0SW5hY3Rpdml0eVdhcm5pbmdUaW1lKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIENvbnRleHRVbmxvYWRUaW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDb250ZXh0VW5sb2FkVGltZW91dCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHRVbmxvYWRUaW1lb3V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgdG9vbHRpcCB0aW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSB0b29sdGlwVGltZW91dDwvcmV0dXJucz5cclxuICBHZXRUb29sdGlwVGltZW91dCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rvb2xpdGlwVGltZW91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJuIHRoZSBTcGVjaWFsRWRpdExlZnRBbGlnblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRTcGVjaWFsRWRpdExlZnRBbGlnbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsRWRpdExlZnRBbGlnbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIFRSVUUgaWYgdGhlIGJ5dGVzIHNlcXVlbmNlIGZvciBudW1iZXJzIGluIGV4cHJlc3Npb25zIGlzIGZyb20gbG93IHRvIGhpZ2hcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldExvd0hpZ2goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG93SGlnaDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgZGVmYXVsdCBjb2xvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXREZWZhdWx0Q29sb3IoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0Q29sb3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldCBkZWZhdWx0IGZvY3VzIGNvbG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldERlZmF1bHRGb2N1c0NvbG9yKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEZvY3VzQ29sb3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBpZiB3ZSBzaG91bGQgZXhpdCAnY3VycmVudCcgY29udHJvbCB3aGVuIGEgbm9uLXBhcmthYmxlIGNvbnRyb2wgaXMgY2xpY2tlZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0U3BlY2lhbEV4aXRDdHJsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxFeGl0Q3RybDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiBJTUVBdXRvT2ZmID0gWVxyXG4gIC8vLyAgIChKUE46IElNRSBzdXBwb3J0KVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgR2V0SW1lQXV0b09mZigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbWVBdXRvT2ZmO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIEFzNDAwU2V0IGZsYWcgPSBZXHJcbiAgLy8vICAgKERCQ1MgU3VwcG9ydClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldExvY2FsQXM0MDBTZXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxBczQwMFNldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5GdW5jdGlvbiByZXR1cm5pbmcgYWRkaXRpb25hbCBHZW5nbyB2YWx1ZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldExvY2FsRXh0cmFHZW5nbygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsRXh0cmFHZW5nbztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5GdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIGZsYWcgZiBpcyBpbiB0aGUgbG9jYWwgZmxhZ3MuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRMb2NhbEZsYWcoZjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxGbGFncyAhPT0gbnVsbCAmJiB0aGlzLl9sb2NhbEZsYWdzLmluZGV4T2YoZikgPj0gMDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiBTcGVjaWFsQW5zaUV4cHJlc3Npb24gZmxhZyA9IFk8L3JldHVybnM+XHJcbiAgZ2V0U3BlY2lhbEFuc2lFeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxBbnNpRXhwcmVzc2lvbjtcclxuICB9XHJcblxyXG4gIGdldFNwZWNpYWxTaG93U3RhdHVzQmFyUGFuZXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbFNob3dTdGF0dXNCYXJQYW5lcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGdW5jdGlvbiByZXR1cm5zIHRoZSB0ZXJtaW5hbCBudW1iZXIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dGVybWluYWwgbnVtYmVyLjwvcmV0dXJucz5cclxuICBnZXRUZXJtaW5hbCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rlcm1pbmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZ1bmN0aW9uIHJldHVybnMgd2ViIGNsaWVudCByZS1pbml0IHNlc3Npb24uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dGVybWluYWwgbnVtYmVyLjwvcmV0dXJucz5cclxuICBnZXRXZWJDbGllbnRSZWluaXRTZXNzaW9uKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fd2ViY2xpZW50UmVpbml0U2Vzc2lvbjtcclxuICB9XHJcblxyXG4gIHNldFdlYkNsaWVudFJlaW5pdFNlc3Npb24oIHNlc3Npb24gOiBzdHJpbmcpIHtcclxuICAgICB0aGlzLl93ZWJjbGllbnRSZWluaXRTZXNzaW9uID0gc2Vzc2lvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGdW5jdGlvbiByZXR1cm5zIHdlYiBjbGllbnQgcmUtaW5pdCBzZXNzaW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnRlcm1pbmFsIG51bWJlci48L3JldHVybnM+XHJcbiAgZ2V0U3BlY2lhbFJvdXRlVG9Sb290UHJvZ09uQ29udGV4dFJlY3JlYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbFJvdXRlVG9Sb290UHJvZ09uQ29udGV4dFJlY3JlYXRpb247XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnVuY3Rpb24gcmV0dXJucyB1c2VyIElEIG9mIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz51c2VyIGlkLjwvcmV0dXJucz5cclxuICBnZXRVc2VySUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl91c2VySWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnVuY3Rpb24gcmV0dXJuaW5nIHVzZXIgaW5mbyBvZiBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dXNlciBpbmZvPC9yZXR1cm5zPlxyXG4gIGdldFVzZXJJbmZvKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlckluZm87XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0cyBndWkgSWQgb2YgdGhlIGFwcGxpY2F0aW9uPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0R1VJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2d1aWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldCBDb250cm9sc1BlcnNpc3RlbmN5UGF0aFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRDb250cm9sc1BlcnNpc3RlbmN5UGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xzUGVyc2lzdGVuY3lQYXRoO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgcHJvamVjdCdzIGRpclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29tcElkeFwiPmNvbXBvbmVudCBpbmRleC48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0UHJvakRpcihjb21wSWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLlByb2pEaXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGZsYWcgU3BlY2lhbEVOR0xvZ29uIGlzIG5vdCBhdmFpbGFibGUgZm9yIFJDIHNvIHJldHVybiBmYWxzZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0U3BlY2lhbEVuZ0xvZ29uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBmbGFnIFNwZWNpYWxFTkdMb2dvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBSQyBzbyByZXR1cm4gZmFsc2UuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFNwZWNpYWxJZ25vcmVCdXR0b25Gb3JtYXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm5zIHZhbHVlIG9mIFNwZWNpYWxTV0ZDb250cm9sTmFtZVByb3BlcnR5LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRTcGVjaWFsU3dmQ29udHJvbE5hbWVQcm9wZXJ0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsU3dmQ29udHJvbE5hbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybnMgdmFsdWUgb2YgU3BlY2lhbExvZ0ludGVybmFsRXhjZXB0aW9ucy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0U3BlY2lhbExvZ0ludGVybmFsRXhjZXB0aW9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCB0aGUgb3duZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRPd25lcih2YWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3duZXIgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHRoZSBkYXRlIG1vZGUgaW4gdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXREYXRlTW9kZShjb21wSWR4OiBudW1iZXIsIHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEVudkRldChjb21wSWR4KS5EYXRlTW9kZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIGNlbnR1cnkgaW4gdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRDZW50dXJ5KGNvbXBJZHg6IG51bWJlciwgdmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLkNlbnR1cnkgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHRoZSBpZGxlIHRpbWUgaW4gdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRJZGxlVGltZShjb21wSWR4OiBudW1iZXIsIHZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEVudkRldChjb21wSWR4KS5JZGxlVGltZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIGFsbG93LXVwZGF0ZS1pbi1xdXJ5LW1vZGUgZmxhZyBpbiB0aGUgY29tcG9uZW50J3MgZW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldEFsbG93VXBkYXRlSW5RdWVyeU1vZGUoY29tcElkeDogbnVtYmVyLCB2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLlVwZGF0ZUluUXVlcnlNb2RlID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCB0aGUgYWxsb3ctY3JlYXRlLWluLW1vZGlmeS1tb2RlIGZsYWcgaW4gdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRBbGxvd0NyZWF0ZUluTW9kaWZ5TW9kZShjb21wSWR4OiBudW1iZXIsIHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuQ3JlYXRlSW5Nb2RpZnlNb2RlID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgY29udGV4dCB0aW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KHZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBjbGllbnQgY29udGV4dCB0aW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0Q2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KHZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jbGllbnRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBjb250ZXh0IGluYWN0aXZpdHkgd2FybmluZyB0aW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0Q29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZSh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGNvbnRleHQgdW5sb2FkIHRpbWVvdXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRDb250ZXh0VW5sb2FkVGltZW91dCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29udGV4dFVubG9hZFRpbWVvdXQgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSB0ZXJtaW5hbCBudW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRUZXJtaW5hbCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fdGVybWluYWwgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICBHZXQgdGhlIFVzZXJGb3JtYXRzIGZvciBEcmFnICYgRHJvcCBPcGVyYXRpb24uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldERyb3BVc2VyRm9ybWF0cygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BVc2VyRm9ybWF0cztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0IEdldFNwZWNpYWxUZXh0U2l6ZUZhY3RvcmluZyBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFNwZWNpYWxUZXh0U2l6ZUZhY3RvcmluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsVGV4dFNpemVGYWN0b3Jpbmc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCBHZXRTcGVjaWFsRmxhdEVkaXRPbkNsYXNzaWNUaGVtZSBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFNwZWNpYWxGbGF0RWRpdE9uQ2xhc3NpY1RoZW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxGbGF0RWRpdE9uQ2xhc3NpY1RoZW1lO1xyXG4gIH1cclxuXHJcblxyXG4gIEdldFNwZWNpYWxEaXNhYmxlTW91c2VXaGVlbCgpOiBib29sZWFuIHtcclxuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIF9zcGVjaWFsVmFsTmV3UG9saWN5IGZsYWcgPSBZPC9yZXR1cm5zPlxyXG4gIEdldFNwZWNpYWxWYWxOZXdQb2xpY3koKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbFZhbE5ld1BvbGljeTtcclxuICB9XHJcblxyXG4gIEdldFNwZWNpYWxDYW5jZWxPbkNyZWF0ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsQ2FuY2VsT25DcmVhdGU7XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFRoaXMgY2xhc3MgaG9sZHMgZGV0YWlscyBmb3Igc2luZ2xlIEVudmlyb25tZW50IChwZXIgQ29tcG9uZW50KVxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnREZXRhaWxzIHtcclxuICBwcml2YXRlIF9jcmVhdGVJbk1vZGlmeU1vZGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gYWxsb3cgY3JlYXRlIGluIG1vZGlmeSBtb2RlID9cclxuICBwcml2YXRlIF91cGRhdGVJblF1ZXJ5TW9kZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBhbGxvdyB1cGRhdGUgaW4gcXVlcnkgbW9kZSA/XHJcblxyXG4gIENvbXBJZHg6IG51bWJlciA9IDA7XHJcbiAgRGF0ZU1vZGU6IHN0cmluZyA9ICdcXDAnO1xyXG4gIENlbnR1cnk6IG51bWJlciA9IDA7XHJcbiAgSWRsZVRpbWU6IG51bWJlciA9IDA7XHJcblxyXG4gIHNldCBVcGRhdGVJblF1ZXJ5TW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fdXBkYXRlSW5RdWVyeU1vZGUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBDcmVhdGVJbk1vZGlmeU1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2NyZWF0ZUluTW9kaWZ5TW9kZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgUHJvakRpcjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnN0cnVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuQ29tcElkeCA9IDA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRSVUUgaWYgdXBkYXRlIGlzIGFsbG93ZWQgaW4gcXVlcnkgbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYWxsb3dVcGRhdGVJblF1ZXJ5TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl91cGRhdGVJblF1ZXJ5TW9kZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gVFJVRSBpZiB1cGRhdGUgaXMgYWxsb3dlZCBpbiBxdWVyeSBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhbGxvd0NyZWF0ZUluTW9kaWZ5TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVJbk1vZGlmeU1vZGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==