@magic-xpa/engine 4.801.0-dev481.243 → 4.801.0-dev481.249
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/index.mjs +190 -0
- package/{esm2015/magic-xpa-engine.js → esm2020/magic-xpa-engine.mjs} +0 -0
- package/esm2020/src/AccessHelper.mjs +3 -0
- package/esm2020/src/ClientManager.mjs +403 -0
- package/esm2020/src/CommandsProcessorBase.mjs +58 -0
- package/esm2020/src/CommandsProcessorManager.mjs +26 -0
- package/esm2020/src/CommandsTable.mjs +163 -0
- package/{esm2015/src/ConstInterface.js → esm2020/src/ConstInterface.mjs} +0 -0
- package/{esm2015/src/CurrentClientVersion.js → esm2020/src/CurrentClientVersion.mjs} +2 -2
- package/{esm2015/src/FlowMonitorInterface.js → esm2020/src/FlowMonitorInterface.mjs} +0 -0
- package/esm2020/src/GUIManager.mjs +63 -0
- package/{esm2015/src/GlobalCommandsManager.js → esm2020/src/GlobalCommandsManager.mjs} +0 -0
- package/{esm2015/src/GuiEventsProcessor.js → esm2020/src/GuiEventsProcessor.mjs} +0 -0
- package/{esm2015/src/ICommandsTable.js → esm2020/src/ICommandsTable.mjs} +1 -0
- package/{esm2015/src/ServerConfig.js → esm2020/src/ServerConfig.mjs} +0 -0
- package/{esm2015/src/bridge/IGuiEvent.js → esm2020/src/bridge/IGuiEvent.mjs} +0 -0
- package/esm2020/src/bridge/MagicBridge.mjs +41 -0
- package/{esm2015/src/commands/ClientOriginatedCommandTaskTag.js → esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/AddUserLocateDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/AddUserRangeDataviewCommand.js → esm2020/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/AddUserSortDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/BrowserEscEventCommand.js → esm2020/src/commands/ClientToServer/BrowserEscEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ClientOriginatedCommand.js → esm2020/src/commands/ClientToServer/ClientOriginatedCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ClientOriginatedCommandSerializer.js → esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ColumnSortEventCommand.js → esm2020/src/commands/ClientToServer/ColumnSortEventCommand.mjs} +0 -0
- package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +278 -0
- package/{esm2015/src/commands/ClientToServer/CommandSerializationHelper.js → esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ComputeEventCommand.js → esm2020/src/commands/ClientToServer/ComputeEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ContextTerminationEventCommand.js → esm2020/src/commands/ClientToServer/ContextTerminationEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ContextTimeoutResetCommand.js → esm2020/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ControlItemsRefreshCommand.js → esm2020/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/DataViewOutputCommand.js → esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/DataviewCommand.js → esm2020/src/commands/ClientToServer/DataviewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/EvaluateCommand.js → esm2020/src/commands/ClientToServer/EvaluateCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/EventCommand.js → esm2020/src/commands/ClientToServer/EventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ExecOperCommand.js → esm2020/src/commands/ClientToServer/ExecOperCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/FetchDataControlValuesEventCommand.js → esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/GlobalParamsQueryCommand.js → esm2020/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ICommandTaskTag.js → esm2020/src/commands/ClientToServer/ICommandTaskTag.mjs} +1 -0
- package/{esm2015/src/commands/ClientToServer/IndexChangeEventCommand.js → esm2020/src/commands/ClientToServer/IndexChangeEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/IniputForceWriteCommand.js → esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/NonReversibleExitEventCommand.js → esm2020/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/QueryCommand.js → esm2020/src/commands/ClientToServer/QueryCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/RecomputeCommand.js → esm2020/src/commands/ClientToServer/RecomputeCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/RefreshEventCommand.js → esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/RefreshScreenEventCommand.js → esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/RollbackEventCommand.js → esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/SelectProgramCommand.js → esm2020/src/commands/ClientToServer/SelectProgramCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/SetTransactionStateDataviewCommand.js → esm2020/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/SubformOpenEventCommand.js → esm2020/src/commands/ClientToServer/SubformOpenEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/SubformRefreshEventCommand.js → esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/TransactionCommand.js → esm2020/src/commands/ClientToServer/TransactionCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/UnloadCommand.js → esm2020/src/commands/ClientToServer/UnloadCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/WriteMessageToServerLogCommand.js → esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs} +0 -0
- package/esm2020/src/commands/DataViewCommandBase.mjs +10 -0
- package/{esm2015/src/commands/IClientCommand.js → esm2020/src/commands/IClientCommand.mjs} +1 -0
- package/esm2020/src/commands/IClientTargetedCommand.mjs +9 -0
- package/{esm2015/src/commands/IClientToServerCommandInfo.js → esm2020/src/commands/IClientToServerCommandInfo.mjs} +1 -0
- package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +65 -0
- package/esm2020/src/commands/ServerToClient/AddLocateCommand.mjs +22 -0
- package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
- package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
- package/{esm2015/src/commands/ServerToClient/ClientRefreshCommand.js → esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs} +14 -17
- package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +27 -0
- package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
- package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +222 -0
- package/esm2020/src/commands/ServerToClient/ResetLocateCommand.mjs +15 -0
- package/esm2020/src/commands/ServerToClient/ResetRangeCommand.mjs +15 -0
- package/esm2020/src/commands/ServerToClient/ResetSortCommand.mjs +15 -0
- package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +37 -0
- package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +85 -0
- package/{esm2015/src/commands/ServerToClient/XMLBasedCommandBuilder.js → esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs} +0 -0
- package/{esm2015/src/communications/IConnectionStateManager.js → esm2020/src/communications/IConnectionStateManager.mjs} +1 -0
- package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +17 -0
- package/{esm2015/src/data/DataSourceIdKey.js → esm2020/src/data/DataSourceIdKey.mjs} +0 -0
- package/esm2020/src/data/DataView.mjs +1634 -0
- package/{esm2015/src/data/DataViewBase.js → esm2020/src/data/DataViewBase.mjs} +0 -0
- package/esm2020/src/data/DataviewManager.mjs +28 -0
- package/esm2020/src/data/DataviewManagerBase.mjs +15 -0
- package/{esm2015/src/data/DvCache.js → esm2020/src/data/DvCache.mjs} +0 -0
- package/esm2020/src/data/Field.mjs +645 -0
- package/esm2020/src/data/FieldBase.mjs +18 -0
- package/{esm2015/src/data/FieldsTable.js → esm2020/src/data/FieldsTable.mjs} +0 -0
- package/{esm2015/src/data/IRecordsTable.js → esm2020/src/data/IRecordsTable.mjs} +1 -0
- package/{esm2015/src/data/Key.js → esm2020/src/data/Key.mjs} +0 -0
- package/{esm2015/src/data/Record.js → esm2020/src/data/Record.mjs} +0 -0
- package/{esm2015/src/data/RecordOutOfDataViewException.js → esm2020/src/data/RecordOutOfDataViewException.mjs} +0 -0
- package/{esm2015/src/data/RecordsTable.js → esm2020/src/data/RecordsTable.mjs} +0 -0
- package/esm2020/src/data/TaskTransactionManager.mjs +103 -0
- package/{esm2015/src/data/XMLBasedDcValuesBuilder.js → esm2020/src/data/XMLBasedDcValuesBuilder.mjs} +0 -0
- package/{esm2015/src/enums.js → esm2020/src/enums.mjs} +0 -0
- package/esm2020/src/env/EnvVariablesTable.mjs +340 -0
- package/esm2020/src/env/Environment.mjs +554 -0
- package/{esm2015/src/env/ILanguageData.js → esm2020/src/env/ILanguageData.mjs} +1 -0
- package/esm2020/src/env/LanguageData.mjs +222 -0
- package/esm2020/src/env/MirrorString.mjs +66 -0
- package/{esm2015/src/event/ActionManager.js → esm2020/src/event/ActionManager.mjs} +0 -0
- package/esm2020/src/event/Event.mjs +1436 -0
- package/esm2020/src/event/EventHandler.mjs +773 -0
- package/{esm2015/src/event/EventHandlerPosition.js → esm2020/src/event/EventHandlerPosition.mjs} +0 -0
- package/esm2020/src/event/EventsManager.mjs +2983 -0
- package/{esm2015/src/event/IEventsManager.js → esm2020/src/event/IEventsManager.mjs} +0 -0
- package/{esm2015/src/event/RunTimeEvent.js → esm2020/src/event/RunTimeEvent.mjs} +0 -0
- package/{esm2015/src/event/RunTimeEventBase.js → esm2020/src/event/RunTimeEventBase.mjs} +0 -0
- package/{esm2015/src/event/UserEventsTable.js → esm2020/src/event/UserEventsTable.mjs} +0 -0
- package/{esm2015/src/exp/ExpTable.js → esm2020/src/exp/ExpTable.mjs} +0 -0
- package/esm2020/src/exp/Expression.mjs +200 -0
- package/{esm2015/src/exp/ExpressionDict.js → esm2020/src/exp/ExpressionDict.mjs} +0 -0
- package/esm2020/src/exp/ExpressionEvaluator.mjs +4373 -0
- package/{esm2015/src/exp/ExpressionLocalJpn.js → esm2020/src/exp/ExpressionLocalJpn.mjs} +0 -0
- package/esm2020/src/exp/GlobalParamsTable.mjs +85 -0
- package/esm2020/src/exp/YesNoExp.mjs +41 -0
- package/{esm2015/src/gui/CreatedFormVector.js → esm2020/src/gui/CreatedFormVector.mjs} +0 -0
- package/esm2020/src/gui/FormsTable.mjs +66 -0
- package/esm2020/src/gui/MgControl.mjs +357 -0
- package/esm2020/src/gui/MgForm.mjs +1195 -0
- package/esm2020/src/http/HttpManager.mjs +97 -0
- package/esm2020/src/http/client/HttpClientAsync.mjs +67 -0
- package/esm2020/src/http/client/HttpClientBase.mjs +148 -0
- package/{esm2015/src/http/client/HttpClientEvents.js → esm2020/src/http/client/HttpClientEvents.mjs} +0 -0
- package/esm2020/src/http/client/HttpClientSync.mjs +42 -0
- package/{esm2015/src/http/client/HttpUtility.js → esm2020/src/http/client/HttpUtility.mjs} +0 -0
- package/{esm2015/src/http/client/ICommunicationsFailureHandler.js → esm2020/src/http/client/ICommunicationsFailureHandler.mjs} +1 -0
- package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
- package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
- package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
- package/esm2020/src/remote/RemoteCommandsProcessor.mjs +872 -0
- package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
- package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +24 -0
- package/{esm2015/src/remote/RemoteDataViewCommandFactory.js → esm2020/src/remote/RemoteDataViewCommandFactory.mjs} +0 -0
- package/esm2020/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +16 -0
- package/esm2020/src/remote/RemoteDataviewManager.mjs +17 -0
- package/esm2020/src/remote/RemoteInitDataViewCommand.mjs +11 -0
- package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
- package/esm2020/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +13 -0
- package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
- package/{esm2015/src/remote/ServerError.js → esm2020/src/remote/ServerError.mjs} +0 -0
- package/{esm2015/src/remote/SetTransactionStateRemoteDataViewCommand.js → esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs} +8 -11
- package/esm2020/src/rt/Argument.mjs +274 -0
- package/esm2020/src/rt/ArgumentsList.mjs +103 -0
- package/esm2020/src/rt/Boundary.mjs +158 -0
- package/{esm2015/src/rt/CompMainPrgTable.js → esm2020/src/rt/CompMainPrgTable.mjs} +0 -0
- package/esm2020/src/rt/DataviewHeaderBase.mjs +96 -0
- package/{esm2015/src/rt/DataviewHeaderFactory.js → esm2020/src/rt/DataviewHeaderFactory.mjs} +0 -0
- package/{esm2015/src/rt/DataviewHeaders.js → esm2020/src/rt/DataviewHeaders.mjs} +0 -0
- package/{esm2015/src/rt/DataviewHeadersSaxHandler.js → esm2020/src/rt/DataviewHeadersSaxHandler.mjs} +0 -0
- package/{esm2015/src/rt/ExecutionStack.js → esm2020/src/rt/ExecutionStack.mjs} +0 -0
- package/{esm2015/src/rt/ExecutionStackEntry.js → esm2020/src/rt/ExecutionStackEntry.mjs} +0 -0
- package/{esm2015/src/rt/HandlersTable.js → esm2020/src/rt/HandlersTable.mjs} +0 -0
- package/{esm2015/src/rt/IDataSourceViewDefinition.js → esm2020/src/rt/IDataSourceViewDefinition.mjs} +1 -0
- package/{esm2015/src/rt/IDataviewHeader.js → esm2020/src/rt/IDataviewHeader.mjs} +1 -0
- package/{esm2015/src/rt/IResultValue.js → esm2020/src/rt/IResultValue.mjs} +1 -0
- package/{esm2015/src/rt/LastFocusedManager.js → esm2020/src/rt/LastFocusedManager.mjs} +0 -0
- package/esm2020/src/rt/Operation.mjs +745 -0
- package/{esm2015/src/rt/OperationTable.js → esm2020/src/rt/OperationTable.mjs} +0 -0
- package/esm2020/src/rt/Recompute.mjs +355 -0
- package/{esm2015/src/rt/RecomputeTable.js → esm2020/src/rt/RecomputeTable.mjs} +0 -0
- package/esm2020/src/rt/RemoteDataviewHeader.mjs +105 -0
- package/{esm2015/src/rt/ResultValue.js → esm2020/src/rt/ResultValue.mjs} +0 -0
- package/esm2020/src/rt/TableCache.mjs +177 -0
- package/esm2020/src/rt/TableCacheManager.mjs +67 -0
- package/{esm2015/src/rt/Transaction.js → esm2020/src/rt/Transaction.mjs} +0 -0
- package/{esm2015/src/security/UserDetails.js → esm2020/src/security/UserDetails.mjs} +0 -0
- package/{esm2015/src/tasks/IMGDataCollection.js → esm2020/src/tasks/IMGDataCollection.mjs} +1 -0
- package/esm2020/src/tasks/MGData.mjs +552 -0
- package/esm2020/src/tasks/MGDataCollection.mjs +259 -0
- package/{esm2015/src/tasks/MenusDeserializer.js → esm2020/src/tasks/MenusDeserializer.mjs} +0 -0
- package/{esm2015/src/tasks/RCTimer.js → esm2020/src/tasks/RCTimer.mjs} +0 -0
- package/{esm2015/src/tasks/RemoteTaskService.js → esm2020/src/tasks/RemoteTaskService.mjs} +0 -0
- package/esm2020/src/tasks/Task.mjs +2501 -0
- package/{esm2015/src/tasks/TaskBase.js → esm2020/src/tasks/TaskBase.mjs} +22 -1
- package/esm2020/src/tasks/TaskServiceBase.mjs +25 -0
- package/esm2020/src/tasks/TasksTable.mjs +80 -0
- package/{esm2015/src/tasks/sort/Sort.js → esm2020/src/tasks/sort/Sort.mjs} +0 -0
- package/{esm2015/src/tasks/sort/SortCollection.js → esm2020/src/tasks/sort/SortCollection.mjs} +0 -0
- package/{esm2015/src/util/ConstUtils.js → esm2020/src/util/ConstUtils.mjs} +0 -0
- package/esm2020/src/util/FlowMonitorQueue.mjs +361 -0
- package/{esm2015/src/util/HeapSort.js → esm2020/src/util/HeapSort.mjs} +0 -0
- package/{esm2015/src/util/IMirrorXML.js → esm2020/src/util/IMirrorXML.mjs} +2 -1
- package/{esm2015/src/util/IServerConfig.js → esm2020/src/util/IServerConfig.mjs} +1 -0
- package/{esm2015/src/util/MgBlockingQueue.js → esm2020/src/util/MgBlockingQueue.mjs} +1 -0
- package/esm2020/src/util/MgPriorityBlockingQueue.mjs +76 -0
- package/{esm2015/src/util/MgPriorityQueue.js → esm2020/src/util/MgPriorityQueue.mjs} +0 -0
- package/esm2020/src/util/ParamParseResult.mjs +8 -0
- package/esm2020/src/util/PrmMap.mjs +151 -0
- package/{esm2015/src/util/Process.js → esm2020/src/util/Process.mjs} +0 -0
- package/{esm2015/src/util/ReturnResult.js → esm2020/src/util/ReturnResult.mjs} +0 -0
- package/{esm2015/src/util/ReturnResultBase.js → esm2020/src/util/ReturnResultBase.mjs} +0 -0
- package/{esm2015/src/util/Scrambler.js → esm2020/src/util/Scrambler.mjs} +0 -0
- package/{esm2015/src/util/UniqueIDUtils.js → esm2020/src/util/UniqueIDUtils.mjs} +0 -0
- package/{esm2015/src/util/cookie.service.js → esm2020/src/util/cookie.service.mjs} +0 -0
- package/fesm2015/{magic-xpa-engine.js → magic-xpa-engine.mjs} +102 -5
- package/fesm2015/magic-xpa-engine.mjs.map +1 -0
- package/fesm2020/magic-xpa-engine.mjs +30705 -0
- package/fesm2020/magic-xpa-engine.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/package.json +27 -13
- package/src/AccessHelper.d.ts +1 -1
- package/src/CommandsProcessorBase.d.ts +3 -3
- package/src/commands/DataViewCommandBase.d.ts +2 -2
- package/src/commands/IClientTargetedCommand.d.ts +1 -1
- package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +1 -1
- package/src/data/FieldBase.d.ts +3 -3
- package/src/env/EnvVariablesTable.d.ts +2 -15
- package/src/env/MirrorString.d.ts +15 -0
- package/src/exp/GlobalParamsTable.d.ts +2 -1
- package/src/http/client/HttpClientBase.d.ts +2 -2
- package/src/rt/DataviewHeaderBase.d.ts +1 -1
- package/src/tasks/TaskBase.d.ts +7 -7
- package/src/util/IMirrorXML.d.ts +1 -1
- package/src/util/ParamParseResult.d.ts +6 -0
- package/src/util/PrmMap.d.ts +0 -6
- package/bundles/magic-xpa-engine.umd.js +0 -37983
- package/bundles/magic-xpa-engine.umd.js.map +0 -1
- package/bundles/magic-xpa-engine.umd.min.js +0 -16
- package/bundles/magic-xpa-engine.umd.min.js.map +0 -1
- package/esm2015/index.js +0 -188
- package/esm2015/src/AccessHelper.js +0 -3
- package/esm2015/src/ClientManager.js +0 -412
- package/esm2015/src/CommandsProcessorBase.js +0 -54
- package/esm2015/src/CommandsProcessorManager.js +0 -31
- package/esm2015/src/CommandsTable.js +0 -166
- package/esm2015/src/GUIManager.js +0 -72
- package/esm2015/src/bridge/MagicBridge.js +0 -44
- package/esm2015/src/commands/ClientToServer/CommandFactory.js +0 -283
- package/esm2015/src/commands/DataViewCommandBase.js +0 -6
- package/esm2015/src/commands/IClientTargetedCommand.js +0 -6
- package/esm2015/src/commands/ServerToClient/AbortCommand.js +0 -68
- package/esm2015/src/commands/ServerToClient/AddLocateCommand.js +0 -25
- package/esm2015/src/commands/ServerToClient/AddRangeCommand.js +0 -65
- package/esm2015/src/commands/ServerToClient/AddSortCommand.js +0 -36
- package/esm2015/src/commands/ServerToClient/ClientTargetedCommandBase.js +0 -24
- package/esm2015/src/commands/ServerToClient/EnhancedVerifyCommand.js +0 -48
- package/esm2015/src/commands/ServerToClient/OpenURLCommand.js +0 -225
- package/esm2015/src/commands/ServerToClient/ResetLocateCommand.js +0 -18
- package/esm2015/src/commands/ServerToClient/ResetRangeCommand.js +0 -18
- package/esm2015/src/commands/ServerToClient/ResetSortCommand.js +0 -18
- package/esm2015/src/commands/ServerToClient/ResultCommand.js +0 -40
- package/esm2015/src/commands/ServerToClient/VerifyCommand.js +0 -88
- package/esm2015/src/communications/InteractiveCommunicationsFailureHandler.js +0 -20
- package/esm2015/src/data/DataView.js +0 -1692
- package/esm2015/src/data/DataviewManager.js +0 -31
- package/esm2015/src/data/DataviewManagerBase.js +0 -18
- package/esm2015/src/data/Field.js +0 -671
- package/esm2015/src/data/FieldBase.js +0 -9
- package/esm2015/src/data/TaskTransactionManager.js +0 -110
- package/esm2015/src/env/EnvVariablesTable.js +0 -408
- package/esm2015/src/env/Environment.js +0 -557
- package/esm2015/src/env/LanguageData.js +0 -229
- package/esm2015/src/event/Event.js +0 -1441
- package/esm2015/src/event/EventHandler.js +0 -786
- package/esm2015/src/event/EventsManager.js +0 -3106
- package/esm2015/src/exp/Expression.js +0 -209
- package/esm2015/src/exp/ExpressionEvaluator.js +0 -4440
- package/esm2015/src/exp/GlobalParamsTable.js +0 -84
- package/esm2015/src/exp/YesNoExp.js +0 -44
- package/esm2015/src/gui/FormsTable.js +0 -73
- package/esm2015/src/gui/MgControl.js +0 -424
- package/esm2015/src/gui/MgForm.js +0 -1291
- package/esm2015/src/http/HttpManager.js +0 -100
- package/esm2015/src/http/client/HttpClientAsync.js +0 -72
- package/esm2015/src/http/client/HttpClientBase.js +0 -147
- package/esm2015/src/http/client/HttpClientSync.js +0 -47
- package/esm2015/src/remote/AddUserLocateRemoteDataViewCommand.js +0 -21
- package/esm2015/src/remote/AddUserRangeRemoteDataViewCommand.js +0 -21
- package/esm2015/src/remote/AddUserSortRemoteDataViewCommand.js +0 -21
- package/esm2015/src/remote/RemoteCommandsProcessor.js +0 -901
- package/esm2015/src/remote/RemoteControlItemsRefreshCommand.js +0 -28
- package/esm2015/src/remote/RemoteDataViewCommandBase.js +0 -27
- package/esm2015/src/remote/RemoteDataViewCommandUpdateNonModifiable.js +0 -19
- package/esm2015/src/remote/RemoteDataviewManager.js +0 -23
- package/esm2015/src/remote/RemoteInitDataViewCommand.js +0 -14
- package/esm2015/src/remote/ResetUserLocateRemoteDataviewCommand.js +0 -20
- package/esm2015/src/remote/ResetUserRangeRemoteDataviewCommand.js +0 -16
- package/esm2015/src/remote/ResetUserSortRemoteDataviewCommand.js +0 -19
- package/esm2015/src/rt/Argument.js +0 -281
- package/esm2015/src/rt/ArgumentsList.js +0 -108
- package/esm2015/src/rt/Boundary.js +0 -161
- package/esm2015/src/rt/DataviewHeaderBase.js +0 -96
- package/esm2015/src/rt/Operation.js +0 -772
- package/esm2015/src/rt/Recompute.js +0 -372
- package/esm2015/src/rt/RemoteDataviewHeader.js +0 -114
- package/esm2015/src/rt/TableCache.js +0 -182
- package/esm2015/src/rt/TableCacheManager.js +0 -70
- package/esm2015/src/tasks/MGData.js +0 -561
- package/esm2015/src/tasks/MGDataCollection.js +0 -270
- package/esm2015/src/tasks/Task.js +0 -2601
- package/esm2015/src/tasks/TaskServiceBase.js +0 -30
- package/esm2015/src/tasks/TasksTable.js +0 -87
- package/esm2015/src/util/FlowMonitorQueue.js +0 -364
- package/esm2015/src/util/MgPriorityBlockingQueue.js +0 -79
- package/esm2015/src/util/PrmMap.js +0 -157
- package/fesm2015/magic-xpa-engine.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { GuiFieldBase } from "@magic-xpa/gui";
|
|
2
|
+
export class FieldBase extends GuiFieldBase {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.IsEventHandlerField = false;
|
|
6
|
+
}
|
|
7
|
+
async updateDisplay() {
|
|
8
|
+
return Promise.resolve();
|
|
9
|
+
}
|
|
10
|
+
async compute(recompute) {
|
|
11
|
+
return Promise.resolve();
|
|
12
|
+
}
|
|
13
|
+
async setValueAndStartRecompute(val, isNullFld, recompute, setRecordUpdated, isArgUpdate, enforceVariableChange) {
|
|
14
|
+
return Promise.resolve();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
FieldBase.CLEAR_FLAGS = true;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmllbGRCYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9kYXRhL0ZpZWxkQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUMsTUFBTSxPQUFnQixTQUFVLFNBQVEsWUFBWTtJQUFwRDs7UUFHRSx3QkFBbUIsR0FBWSxLQUFLLENBQUM7SUF5Q3ZDLENBQUM7SUE3QkMsS0FBSyxDQUFDLGFBQWE7UUFDakIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQVFELEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBa0I7UUFDOUIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxHQUFXLEVBQUUsU0FBa0IsRUFBRSxTQUFrQixFQUFFLGdCQUF5QixFQUFFLFdBQW9CLEVBQUUscUJBQStCO1FBQ25LLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQzFCLENBQUM7O0FBOUJNLHFCQUFXLEdBQVksSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3VpRmllbGRCYXNlIH0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7IFJlY29tcHV0ZSB9IGZyb20gXCIuLi9ydC9SZWNvbXB1dGVcIjtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWVsZEJhc2UgZXh0ZW5kcyBHdWlGaWVsZEJhc2Uge1xyXG4gIHN0YXRpYyBDTEVBUl9GTEFHUzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIElzRXZlbnRIYW5kbGVyRmllbGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0VmFsdWUoY2hlY2tOdWxsQXJpdGhtZXRpYzogYm9vbGVhbik6IHN0cmluZztcclxuXHJcbiAgYWJzdHJhY3QgaXNOdWxsKCk6IGJvb2xlYW47XHJcblxyXG4gIGFic3RyYWN0IHRha2VWYWxGcm9tUmVjKCk6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IGlzUGFyYW0oKTogYm9vbGVhbjtcclxuXHJcbiAgYWJzdHJhY3QgaXNNb2RpZmllZCgpOiBib29sZWFuO1xyXG5cclxuICBhc3luYyB1cGRhdGVEaXNwbGF5KCk6IFByb21pc2U8dm9pZD57XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcclxuICB9XHJcblxyXG4gIGFic3RyYWN0IHNldEhhc1pvb21IYW5kbGVyKCk6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IHNldEhhc0NoYW5nZUV2ZW50KCk6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IGludmFsaWRhdGUoZm9yY2VJbnZhbGlkYXRlOiBib29sZWFuLCBjbGVhckZsYWdzOiBib29sZWFuKTogdm9pZDtcclxuXHJcbiAgYXN5bmMgY29tcHV0ZShyZWNvbXB1dGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSh2YWw6IHN0cmluZywgaXNOdWxsRmxkOiBib29sZWFuLCByZWNvbXB1dGU6IGJvb2xlYW4sIHNldFJlY29yZFVwZGF0ZWQ6IGJvb2xlYW4sIGlzQXJnVXBkYXRlOiBib29sZWFuLCBlbmZvcmNlVmFyaWFibGVDaGFuZ2U/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPntcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxyXG4gIH1cclxuXHJcbiAgYWJzdHJhY3QgZ2V0IElzVmlydHVhbCgpOiBib29sZWFuO1xyXG5cclxuICBhYnN0cmFjdCBoYXNJbml0RXhwKCk6IGJvb2xlYW47XHJcblxyXG4gIGFic3RyYWN0IGNhdXNlVGFibGVJbnZhbGlkYXRpb24oY2F1c2VUYWJsZUludmFsaWRhdGlvbjogYm9vbGVhbik6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IHNldFJlY29tcHV0ZShyZWNvbXBSZWY6IFJlY29tcHV0ZSk6IHZvaWQ7XHJcblxyXG4gIGFic3RyYWN0IHNldFJlY29tcHV0ZWQoKTogdm9pZDtcclxuXHJcbiAgYWJzdHJhY3QgaXNJbkV2YWxQcm9jZXNzKCk6IGJvb2xlYW47XHJcbn1cclxuXHJcblxyXG5cclxuIl19
|
|
File without changes
|
|
@@ -1 +1,2 @@
|
|
|
1
|
+
export {};
|
|
1
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVJlY29yZHNUYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZGF0YS9JUmVjb3Jkc1RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlY29yZH0gZnJvbSAnLi9SZWNvcmQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVjb3Jkc1RhYmxlIHtcclxuICBHZXRTaXplKCk6IG51bWJlcjtcclxuXHJcbiAgR2V0UmVjQnlJZHgoaWR4OiBudW1iZXIpOiBSZWNvcmQ7XHJcblxyXG4gIFJlbW92ZUFsbCgpOiB2b2lkO1xyXG5cclxuICBnZXRSZWNJZHgoaWQ6IG51bWJlcik6IG51bWJlcjtcclxufVxyXG4iXX0=
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { PropInterface } from "@magic-xpa/gui";
|
|
2
|
+
import { Transaction } from "../rt/Transaction";
|
|
3
|
+
import { ReturnResult } from "../util/ReturnResult";
|
|
4
|
+
import { DataViewCommandType } from "../commands/ClientToServer/DataviewCommand";
|
|
5
|
+
import { CommandsProcessorBase_SendingInstruction } from "../CommandsProcessorBase";
|
|
6
|
+
import { CommandFactory } from "../commands/ClientToServer/CommandFactory";
|
|
7
|
+
import { ConstInterface } from "../ConstInterface";
|
|
8
|
+
import { RefParam } from "@magic-xpa/mscorelib";
|
|
9
|
+
import { RemoteCommandsProcessor } from "../remote/RemoteCommandsProcessor";
|
|
10
|
+
import { MGDataCollection } from "../tasks/MGDataCollection";
|
|
11
|
+
export class TaskTransactionManager {
|
|
12
|
+
constructor(task) {
|
|
13
|
+
this.task = null;
|
|
14
|
+
this.task = task;
|
|
15
|
+
}
|
|
16
|
+
get isClosingTopmostTask() {
|
|
17
|
+
return MGDataCollection.Instance.StartupMgData.getFirstTask().InEndTask;
|
|
18
|
+
}
|
|
19
|
+
AllowTransaction(transBegin, forLocal) {
|
|
20
|
+
let result;
|
|
21
|
+
if (forLocal)
|
|
22
|
+
result = (transBegin === ConstInterface.TRANS_TASK_PREFIX || transBegin === ConstInterface.TRANS_RECORD_PREFIX);
|
|
23
|
+
else
|
|
24
|
+
result = (transBegin === ConstInterface.TRANS_TASK_PREFIX || transBegin === ConstInterface.TRANS_RECORD_PREFIX || transBegin === ConstInterface.TRANS_NONE);
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
PrepareTransactionProperties(transaction, forLocal) {
|
|
28
|
+
let transactionBeginValue = this.GetTransactionBeginValue(forLocal);
|
|
29
|
+
let flag = transaction !== null && this.AllowTransaction(transactionBeginValue, forLocal);
|
|
30
|
+
if (flag)
|
|
31
|
+
transaction.setTransBegin(transactionBeginValue);
|
|
32
|
+
}
|
|
33
|
+
GetTransactionBeginValue(forLocal) {
|
|
34
|
+
let result = ConstInterface.TRANS_NONE;
|
|
35
|
+
let prop = this.task.getProp(PropInterface.PROP_TYPE_TRASACTION_BEGIN);
|
|
36
|
+
if (prop !== null) {
|
|
37
|
+
let propgetValue = forLocal ? prop.StudioValue : prop.GetComputedValue();
|
|
38
|
+
if (propgetValue !== null) {
|
|
39
|
+
result = propgetValue.charAt(0);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
async checkAndCommit(reversibleExit, level, isAbort) {
|
|
45
|
+
let oper = isAbort ? ConstInterface.TRANS_ABORT : ConstInterface.TRANS_COMMIT;
|
|
46
|
+
let result = await this.ExecuteLocalUpdatesCommand();
|
|
47
|
+
if (!result.Success) {
|
|
48
|
+
if (!this.task.IsInteractive)
|
|
49
|
+
this.task.abort();
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
let refResult = new RefParam(result);
|
|
53
|
+
let ret = await this.checkAndCommitPerDataview(this.task.DataviewManager.RemoteDataviewManager, reversibleExit, level, oper, refResult);
|
|
54
|
+
result = refResult.value;
|
|
55
|
+
if (!ret) {
|
|
56
|
+
if (level === ConstInterface.TRANS_RECORD_PREFIX && this.task.DataView.modifiedRecordsNumber() > 0 && this.task.DataView.FlushUpdates) {
|
|
57
|
+
try {
|
|
58
|
+
this.task.TryingToCommit = true;
|
|
59
|
+
await RemoteCommandsProcessor.GetInstance().Execute(CommandsProcessorBase_SendingInstruction.TASKS_AND_COMMANDS);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
this.task.TryingToCommit = false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
async ExecuteLocalUpdatesCommand() {
|
|
69
|
+
let command = CommandFactory.CreateDataViewCommand(this.task.getTaskTag(), DataViewCommandType.ExecuteLocalUpdates);
|
|
70
|
+
return await this.task.DataviewManager.Execute(command);
|
|
71
|
+
}
|
|
72
|
+
async checkAndCommitPerDataview(dataviewmanager, reversibleExit, level, oper, refResult) {
|
|
73
|
+
refResult.value = new ReturnResult();
|
|
74
|
+
let returnValue = false;
|
|
75
|
+
let currentTransaction = dataviewmanager.Transaction;
|
|
76
|
+
if (currentTransaction !== null && !this.task.isAborting() &&
|
|
77
|
+
currentTransaction.isOpened() && currentTransaction.isOwner(this.task) &&
|
|
78
|
+
currentTransaction.getLevel() === level) {
|
|
79
|
+
let cmd = CommandFactory.CreateTransactionCommand(oper, this.task.getTaskTag(), reversibleExit, level);
|
|
80
|
+
if (this.isClosingTopmostTask && MGDataCollection.Instance.StartupMgData.getFirstTask().ClosingFormUI)
|
|
81
|
+
this.task.getMGData().CmdsToServer.Add(cmd);
|
|
82
|
+
try {
|
|
83
|
+
this.task.TryingToCommit = true;
|
|
84
|
+
if (!(this.isClosingTopmostTask && MGDataCollection.Instance.StartupMgData.getFirstTask().ClosingFormUI))
|
|
85
|
+
refResult.value = await dataviewmanager.Execute(cmd);
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
this.task.TryingToCommit = false;
|
|
89
|
+
}
|
|
90
|
+
returnValue = true;
|
|
91
|
+
}
|
|
92
|
+
return returnValue;
|
|
93
|
+
}
|
|
94
|
+
HandelTransactionErrorHandlingsRetry(transBegin) {
|
|
95
|
+
let task = this.task;
|
|
96
|
+
if (task.Transaction === null && transBegin[0] === ConstInterface.TRANS_NONE) {
|
|
97
|
+
task.TransactionErrorHandlingsRetry = new Transaction(task, task.getTaskTag());
|
|
98
|
+
task.TransactionErrorHandlingsRetry.setTransBegin(ConstInterface.TRANS_RECORD_PREFIX);
|
|
99
|
+
transBegin[0] = ConstInterface.TRANS_RECORD_PREFIX;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza1RyYW5zYWN0aW9uTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZGF0YS9UYXNrVHJhbnNhY3Rpb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxhQUFhLEVBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyx3Q0FBd0MsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBR2xGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUd6RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRzNELE1BQU0sT0FBTyxzQkFBc0I7SUFTakMsWUFBWSxJQUFVO1FBUnRCLFNBQUksR0FBUyxJQUFJLENBQUM7UUFTaEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQVBELElBQVksb0JBQW9CO1FBRTlCLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDMUUsQ0FBQztJQU9ELGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsUUFBaUI7UUFDcEQsSUFBSSxNQUFlLENBQUM7UUFDcEIsSUFBSSxRQUFRO1lBQ1YsTUFBTSxHQUFH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QUMsR0FBRyxDQUFDLENBQUM7WUFFOUMsSUFBSTtnQkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBRWhDLElBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLGFBQWEsQ0FBQztvQkFDckcsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDeEQ7b0JBQ087Z0JBRU4sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2FBQ2xDO1lBRUQsV0FBVyxHQUFHLElBQUksQ0FBQztTQUNwQjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFRRCxvQ0FBb0MsQ0FBQyxVQUFvQjtRQUN2RCxJQUFJLElBQUksR0FBYSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFDNUUsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsOEJBQThCLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3RGLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsbUJBQW1CLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1Byb3BJbnRlcmZhY2UsIFByb3BlcnR5fSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHtUcmFuc2FjdGlvbn0gZnJvbSBcIi4uL3J0L1RyYW5zYWN0aW9uXCI7XHJcbmltcG9ydCB7UmV0dXJuUmVzdWx0fSBmcm9tIFwiLi4vdXRpbC9SZXR1cm5SZXN1bHRcIjtcclxuaW1wb3J0IHtEYXRhVmlld0NvbW1hbmRUeXBlfSBmcm9tIFwiLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvRGF0YXZpZXdDb21tYW5kXCI7XHJcbmltcG9ydCB7Q29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbn0gZnJvbSBcIi4uL0NvbW1hbmRzUHJvY2Vzc29yQmFzZVwiO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tIFwiLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmRcIjtcclxuaW1wb3J0IHtEYXRhdmlld01hbmFnZXJCYXNlfSBmcm9tIFwiLi9EYXRhdmlld01hbmFnZXJCYXNlXCI7XHJcbmltcG9ydCB7Q29tbWFuZEZhY3Rvcnl9IGZyb20gXCIuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9Db21tYW5kRmFjdG9yeVwiO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tIFwiLi9EYXRhVmlld1wiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5pbXBvcnQge1JlZlBhcmFtfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHsgVGFza0Jhc2UgfSBmcm9tIFwiLi4vdGFza3MvVGFza0Jhc2VcIjtcclxuaW1wb3J0IHsgUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IgfSBmcm9tIFwiLi4vcmVtb3RlL1JlbW90ZUNvbW1hbmRzUHJvY2Vzc29yXCI7XHJcbmltcG9ydCB7TUdEYXRhQ29sbGVjdGlvbn0gZnJvbSBcIi4uL3Rhc2tzL01HRGF0YUNvbGxlY3Rpb25cIjtcclxuXHJcbi8vLyBsb2NhbCB0cmFuc2FjdGlvbiBtYW5hZ2VyXHJcbmV4cG9ydCBjbGFzcyBUYXNrVHJhbnNhY3Rpb25NYW5hZ2VyIHtcclxuICB0YXNrOiBUYXNrID0gbnVsbDtcclxuXHJcblxyXG4gIHByaXZhdGUgZ2V0IGlzQ2xvc2luZ1RvcG1vc3RUYXNrKCk6IGJvb2xlYW5cclxuICB7XHJcbiAgICByZXR1cm4gTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLkluRW5kVGFzaztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHRhc2s6IFRhc2spIHtcclxuICAgIHRoaXMudGFzayA9IHRhc2s7XHJcbiAgfVxyXG5cclxuICAvLy8gcmV0dXJuIHRydWUgaWYgdGhlIHRyYW5zYWN0aW9uIGJlZ2FpbiBzdXBwb3J0ZWRcclxuICBBbGxvd1RyYW5zYWN0aW9uKHRyYW5zQmVnaW46IHN0cmluZywgZm9yTG9jYWw6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW47XHJcbiAgICBpZiAoZm9yTG9jYWwpXHJcbiAgICAgIHJlc3VsdCA9ICh0cmFuc0JlZ2luID09PSBDb25zdEludGVyZmFjZS5UUkFOU19UQVNLX1BSRUZJWCB8fCB0cmFuc0JlZ2luID09PSBDb25zdEludGVyZmFjZS5UUkFOU19SRUNPUkRfUFJFRklYKTtcclxuICAgIGVsc2VcclxuICAgICAgcmVzdWx0ID0gKHRyYW5zQmVnaW4gPT09IENvbnN0SW50ZXJmYWNlLlRSQU5TX1RBU0tfUFJFRklYIHx8IHRyYW5zQmVnaW4gPT09IENvbnN0SW50ZXJmYWNlLlRSQU5TX1JFQ09SRF9QUkVGSVggfHwgdHJhbnNCZWdpbiA9PT0gQ29uc3RJbnRlcmZhY2UuVFJBTlNfTk9ORSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIFByZXBhcmVUcmFuc2FjdGlvblByb3BlcnRpZXModHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uLCBmb3JMb2NhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IHRyYW5zYWN0aW9uQmVnaW5WYWx1ZTogc3RyaW5nID0gdGhpcy5HZXRUcmFuc2FjdGlvbkJlZ2luVmFsdWUoZm9yTG9jYWwpO1xyXG4gICAgbGV0IGZsYWc6IGJvb2xlYW4gPSB0cmFuc2FjdGlvbiAhPT0gbnVsbCAmJiB0aGlzLkFsbG93VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25CZWdpblZhbHVlLCBmb3JMb2NhbCk7XHJcbiAgICBpZiAoZmxhZylcclxuICAgICAgdHJhbnNhY3Rpb24uc2V0VHJhbnNCZWdpbih0cmFuc2FjdGlvbkJlZ2luVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgR2V0VHJhbnNhY3Rpb25CZWdpblZhbHVlKGZvckxvY2FsOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IENvbnN0SW50ZXJmYWNlLlRSQU5TX05PTkU7XHJcbiAgICBsZXQgcHJvcDogUHJvcGVydHkgPSB0aGlzLnRhc2suZ2V0UHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UUkFTQUNUSU9OX0JFR0lOKTtcclxuICAgIGlmIChwcm9wICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBwcm9wZ2V0VmFsdWU6IHN0cmluZyA9IGZvckxvY2FsID8gcHJvcC5TdHVkaW9WYWx1ZSA6IHByb3AuR2V0Q29tcHV0ZWRWYWx1ZSgpO1xyXG4gICAgICBpZiAocHJvcGdldFZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcHJvcGdldFZhbHVlLmNoYXJBdCgwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2sgaWYgYWxsIHRoZSBjb25kaXRpb25zIGltcGx5IGEgY29tbWl0IGFuZCBkbyB0aGUgY29tbWl0IHJldHVybiB0cnVlIGlmIGEgY29tbWl0IHdhcyBleGVjdXRlZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXZlcnNpYmxlRXhpdFwiPmlmIHRydWUgdGhlbiB0aGUgdGFzayBleGl0IGlzIG5vbiByZXZlcnNpYmxlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxldmVsXCI+b2YgdGhlIGR5bmFtaWNEZWYudHJhbnNhY3Rpb24gdG8gY29tbWl0ICh0YXNrIC8gcmVjb3JkKTwvcGFyYW0+XHJcbiAgcHVibGljIGFzeW5jIGNoZWNrQW5kQ29tbWl0KHJldmVyc2libGVFeGl0OiBib29sZWFuLCBsZXZlbDogc3RyaW5nLCBpc0Fib3J0OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPlxyXG4gIHtcclxuICAgIGxldCBvcGVyOiBzdHJpbmcgPSBpc0Fib3J0ID8gQ29uc3RJbnRlcmZhY2UuVFJBTlNfQUJPUlQgOiBDb25zdEludGVyZmFjZS5UUkFOU19DT01NSVQ7XHJcbiAgICBsZXQgcmVzdWx0OiBSZXR1cm5SZXN1bHQgPSBhd2FpdCB0aGlzLkV4ZWN1dGVMb2NhbFVwZGF0ZXNDb21tYW5kKCk7XHJcbiAgICAvLyBpcyBmYWlsZWQgdGhlIHJldHVyblxyXG4gICAgaWYgKCFyZXN1bHQuU3VjY2Vzcykge1xyXG4gICAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGlzIGNvZGUgaXMgbmVlZGVkXHJcbiAgICAgIC8vIGRlZmluaXRpb24gOiBmb3Igbm9uIEludGVyYWN0aXZlIGFuZCB3ZSBnZXQgcHJvYmxlbSB3aXRoIEV4ZWN1dGVMb2NhbFVwZGF0ZXMgY29tbWFuZCB3ZSBuZWVkIHRvIGFib3J0IHRoZSB0YXNrLlxyXG4gICAgICBpZiAoIXRoaXMudGFzay5Jc0ludGVyYWN0aXZlKVxyXG4gICAgICAgIHRoaXMudGFzay5hYm9ydCgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlZlJlc3VsdDogUmVmUGFyYW08UmV0dXJuUmVzdWx0PiA9IG5ldyBSZWZQYXJhbShyZXN1bHQpO1xyXG5cclxuICAgIGxldCByZXQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNoZWNrQW5kQ29tbWl0UGVyRGF0YXZpZXcodGhpcy50YXNrLkRhdGF2aWV3TWFuYWdlci5SZW1vdGVEYXRhdmlld01hbmFnZXIsIHJldmVyc2libGVFeGl0LCBsZXZlbCwgb3BlciwgcmVmUmVzdWx0KTtcclxuICAgIHJlc3VsdCA9IHJlZlJlc3VsdC52YWx1ZTtcclxuXHJcbiAgICAvLy8gcmVsZXZhbnQgZm9yIHJlbW90ZSBvbmx5XHJcbiAgICBpZiAoIXJldCkge1xyXG4gICAgICAvLyBJZiB3ZSBtb2RpZmllZCB0aGUgcmVjb3JkIGJ1dCBkaWRuJ3QgZmx1c2ggaXQgeWV0IGV2ZW4gdGhvdWdoIHdlIHNob3VsZCBoYXZlIC1cclxuICAgICAgLy8gc2VuZCBpdCBub3cuXHJcbiAgICAgIGlmIChsZXZlbCA9PT0gQ29uc3RJbnRlcmZhY2UuVFJBTlNfUkVDT1JEX1BSRUZJWCAmJiAoPERhdGFWaWV3PnRoaXMudGFzay5EYXRhVmlldykubW9kaWZpZWRSZWNvcmRzTnVtYmVyKCkgPiAwICYmICg8RGF0YVZpZXc+dGhpcy50YXNrLkRhdGFWaWV3KS5GbHVzaFVwZGF0ZXMpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy50YXNrLlRyeWluZ1RvQ29tbWl0ID0gdHJ1ZTtcclxuICAgICAgICAgIGF3YWl0IFJlbW90ZUNvbW1hbmRzUHJvY2Vzc29yLkdldEluc3RhbmNlKCkuRXhlY3V0ZShDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2VuZGluZ0luc3RydWN0aW9uLlRBU0tTX0FORF9DT01NQU5EUyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgIHRoaXMudGFzay5UcnlpbmdUb0NvbW1pdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBtZXRob2QgaXMgbmVlZGVkXHJcbiAgLy8vIGV4ZWN1dGUgdGhlIGxvY2FsIHVwZGZhdGVzIGNvbW1hbmRcclxuICBhc3luYyBFeGVjdXRlTG9jYWxVcGRhdGVzQ29tbWFuZCgpOiBQcm9taXNlPFJldHVyblJlc3VsdD4ge1xyXG4gICAgbGV0IGNvbW1hbmQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRGF0YVZpZXdDb21tYW5kKHRoaXMudGFzay5nZXRUYXNrVGFnKCksIERhdGFWaWV3Q29tbWFuZFR5cGUuRXhlY3V0ZUxvY2FsVXBkYXRlcyk7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF0YXZpZXdtYW5hZ2VyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXZlcnNpYmxlRXhpdFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGV2ZWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm9wZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgY2hlY2tBbmRDb21taXRQZXJEYXRhdmlldyhkYXRhdmlld21hbmFnZXI6IERhdGF2aWV3TWFuYWdlckJhc2UsIHJldmVyc2libGVFeGl0OiBib29sZWFuLCBsZXZlbDogc3RyaW5nLCBvcGVyOiBzdHJpbmcsIHJlZlJlc3VsdDogUmVmUGFyYW08UmV0dXJuUmVzdWx0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmVmUmVzdWx0LnZhbHVlID0gbmV3IFJldHVyblJlc3VsdCgpO1xyXG4gICAgbGV0IHJldHVyblZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGN1cnJlbnRUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gPSBkYXRhdmlld21hbmFnZXIuVHJhbnNhY3Rpb247XHJcbiAgICBpZiAoY3VycmVudFRyYW5zYWN0aW9uICE9PSBudWxsICYmICF0aGlzLnRhc2suaXNBYm9ydGluZygpICYmXHJcbiAgICAgICAgY3VycmVudFRyYW5zYWN0aW9uLmlzT3BlbmVkKCkgJiYgY3VycmVudFRyYW5zYWN0aW9uLmlzT3duZXIodGhpcy50YXNrKSAmJlxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbi5nZXRMZXZlbCgpID09PSBsZXZlbCkge1xyXG4gICAgICBsZXQgY21kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZVRyYW5zYWN0aW9uQ29tbWFuZChvcGVyLCB0aGlzLnRhc2suZ2V0VGFza1RhZygpLCByZXZlcnNpYmxlRXhpdCwgbGV2ZWwpO1xyXG5cclxuICAgICAgLy8gV2hpbGUgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24gaW4gbGFzdCByZXF1ZXN0LCBqdXN0IHNlcmlhbGl6ZSB0aGUgY29tbWFuZCBhbmQgZG9uJ3QgZXhlY3V0ZSBpdCBpbW1lZGlhdGVseVxyXG4gICAgICBpZih0aGlzLmlzQ2xvc2luZ1RvcG1vc3RUYXNrICYmIE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuU3RhcnR1cE1nRGF0YS5nZXRGaXJzdFRhc2soKS5DbG9zaW5nRm9ybVVJKVxyXG4gICAgICAgIHRoaXMudGFzay5nZXRNR0RhdGEoKS5DbWRzVG9TZXJ2ZXIuQWRkKGNtZCk7XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMudGFzay5UcnlpbmdUb0NvbW1pdCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmKCEodGhpcy5pc0Nsb3NpbmdUb3Btb3N0VGFzayAmJiBNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLlN0YXJ0dXBNZ0RhdGEuZ2V0Rmlyc3RUYXNrKCkuQ2xvc2luZ0Zvcm1VSSkpXHJcbiAgICAgICAgICByZWZSZXN1bHQudmFsdWUgPSBhd2FpdCBkYXRhdmlld21hbmFnZXIuRXhlY3V0ZShjbWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgIC8vIERvbid0IGNhdGNoIGFueSBleGNlcHRpb24gaGVyZS4gSnVzdCB0dXJuIG9mZiB0aGUgXCJ0cnlpbmdUb0NvbW1pdFwiIGZsYWcuXHJcbiAgICAgICAgdGhpcy50YXNrLlRyeWluZ1RvQ29tbWl0ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVyblZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8gd2hpbGUgd2UgZG9uJ3QgaGF2ZSB0cmFuc2FjdGlvbiB3ZSBtdXN0IGZhaWxkIHN0YWNrIG9uIHRoZSByZWNvcmQoc2FtZSBhcyB3ZSBkb2luZyBmb3IgZHVwbGljYXRlIGluZGV4KVxyXG4gIC8vIHNvIHdlIGNyZWF0ZSBUcmFuc2FjdGlvbkVycm9ySGFuZGxpbmdzUmV0cnkgYW5kIHdlIHVzZSB0aGlzIGR1bW15IHRyYW5zYWN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0cmFuc0JlZ2luXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEhhbmRlbFRyYW5zYWN0aW9uRXJyb3JIYW5kbGluZ3NSZXRyeSh0cmFuc0JlZ2luOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gdGhpcy50YXNrO1xyXG4gICAgaWYgKHRhc2suVHJhbnNhY3Rpb24gPT09IG51bGwgJiYgdHJhbnNCZWdpblswXSA9PT0gQ29uc3RJbnRlcmZhY2UuVFJBTlNfTk9ORSkge1xyXG4gICAgICB0YXNrLlRyYW5zYWN0aW9uRXJyb3JIYW5kbGluZ3NSZXRyeSA9IG5ldyBUcmFuc2FjdGlvbih0YXNrLCB0YXNrLmdldFRhc2tUYWcoKSk7XHJcbiAgICAgIHRhc2suVHJhbnNhY3Rpb25FcnJvckhhbmRsaW5nc1JldHJ5LnNldFRyYW5zQmVnaW4oQ29uc3RJbnRlcmZhY2UuVFJBTlNfUkVDT1JEX1BSRUZJWCk7XHJcbiAgICAgIHRyYW5zQmVnaW5bMF0gPSBDb25zdEludGVyZmFjZS5UUkFOU19SRUNPUkRfUFJFRklYO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
package/{esm2015/src/data/XMLBasedDcValuesBuilder.js → esm2020/src/data/XMLBasedDcValuesBuilder.mjs}
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { CommandsProcessorBase_SendingInstruction } from "../CommandsProcessorBase";
|
|
2
|
+
import { MirrorPrmMap } from "../util/PrmMap";
|
|
3
|
+
import { NNumber, NString, StringBuilder } from "@magic-xpa/mscorelib";
|
|
4
|
+
import { DisplayConvertor } from "@magic-xpa/gui";
|
|
5
|
+
import { ConstInterface } from "../ConstInterface";
|
|
6
|
+
import { CommandFactory } from "../commands/ClientToServer/CommandFactory";
|
|
7
|
+
import { RemoteCommandsProcessor } from "../remote/RemoteCommandsProcessor";
|
|
8
|
+
import { Environment } from "./Environment";
|
|
9
|
+
import { LastFocusedManager } from "../rt/LastFocusedManager";
|
|
10
|
+
import { AccessHelper } from "../AccessHelper";
|
|
11
|
+
import { MirrorString } from "./MirrorString";
|
|
12
|
+
export class EnvParamsTable extends MirrorPrmMap {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(MirrorString);
|
|
15
|
+
this.mirroredID = ConstInterface.MG_TAG_ENV_PARAM;
|
|
16
|
+
}
|
|
17
|
+
get(s) {
|
|
18
|
+
let valName = null;
|
|
19
|
+
let ret = null;
|
|
20
|
+
if (s.charAt(0) !== '[') {
|
|
21
|
+
valName = s;
|
|
22
|
+
s = NString.Insert(s, 0, ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS);
|
|
23
|
+
}
|
|
24
|
+
else if (s.startsWith(ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS))
|
|
25
|
+
valName = s.substr(ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS.length);
|
|
26
|
+
if (!s.startsWith(ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS))
|
|
27
|
+
s = s.toUpperCase();
|
|
28
|
+
if (valName !== null)
|
|
29
|
+
ret = this.getFromEnvironment(valName);
|
|
30
|
+
if (ret !== null)
|
|
31
|
+
return ret;
|
|
32
|
+
try {
|
|
33
|
+
let resultObject = super.getvalue(s);
|
|
34
|
+
if (resultObject !== null) {
|
|
35
|
+
ret = resultObject.ToString();
|
|
36
|
+
if (valName !== null) {
|
|
37
|
+
ret = this.getProcessedValue(valName, ret);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (ex_BE) {
|
|
42
|
+
}
|
|
43
|
+
return ret;
|
|
44
|
+
}
|
|
45
|
+
getln(section, number) {
|
|
46
|
+
section = section.toUpperCase().trim();
|
|
47
|
+
let sectionFound = false;
|
|
48
|
+
let keys = this.values.Keys;
|
|
49
|
+
for (let i = 0; i < keys.length; i++) {
|
|
50
|
+
let key = keys[i];
|
|
51
|
+
if (key.startsWith(section)) {
|
|
52
|
+
sectionFound = true;
|
|
53
|
+
if (number > 1)
|
|
54
|
+
number--;
|
|
55
|
+
else
|
|
56
|
+
return key.substr(section.length) + "=" + this.values.get_Item(key);
|
|
57
|
+
}
|
|
58
|
+
else if (sectionFound)
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
getFromEnvironment(valName) {
|
|
64
|
+
switch (valName.toLowerCase()) {
|
|
65
|
+
case ConstInterface.MG_ATTR_DECIMAL_SEPARATOR:
|
|
66
|
+
return Environment.Instance.GetDecimal();
|
|
67
|
+
case ConstInterface.MG_ATTR_DATE:
|
|
68
|
+
return DisplayConvertor.Instance.getDateChar().toString();
|
|
69
|
+
case ConstInterface.MG_ATTR_TIME:
|
|
70
|
+
return Environment.Instance.GetTime();
|
|
71
|
+
case ConstInterface.MG_ATTR_OWNER:
|
|
72
|
+
return Environment.Instance.getOwner();
|
|
73
|
+
case ConstInterface.MG_ATTR_DATEMODE:
|
|
74
|
+
return Environment.Instance.GetDateMode(LastFocusedManager.Instance.getCurrTask().getCompIdx());
|
|
75
|
+
case ConstInterface.MG_ATTR_CENTURY:
|
|
76
|
+
return Environment.Instance.GetCentury(LastFocusedManager.Instance.getCurrTask().getCompIdx()).toString();
|
|
77
|
+
case ConstInterface.MG_ATTR_IDLETIME:
|
|
78
|
+
return Environment.Instance.getIdleTime(LastFocusedManager.Instance.getCurrTask().getCompIdx()).toString();
|
|
79
|
+
case ConstInterface.MG_ATTR_UPD_IN_QUERY:
|
|
80
|
+
return Environment.Instance.allowUpdateInQueryMode(LastFocusedManager.Instance.getCurrTask().getCompIdx()).toString();
|
|
81
|
+
case ConstInterface.MG_ATTR_CRE_IN_MODIFY:
|
|
82
|
+
return Environment.Instance.allowCreateInModifyMode(LastFocusedManager.Instance.getCurrTask().getCompIdx()).toString();
|
|
83
|
+
case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_TIMEOUT:
|
|
84
|
+
return Environment.Instance.getContextInactivityTimeout().toString();
|
|
85
|
+
case ConstInterface.MG_ATTR_CONTEXT_UNLOAD_TIMEOUT:
|
|
86
|
+
return Environment.Instance.getContextUnloadTimeout().toString();
|
|
87
|
+
case ConstInterface.MG_ATTR_TERMINAL:
|
|
88
|
+
return Environment.Instance.getTerminal().toString();
|
|
89
|
+
case ConstInterface.MG_ATTR_WEBCLIENT_REINIT_SESSION:
|
|
90
|
+
return Environment.Instance.getWebClientReinitSession();
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
getProcessedValue(valName, val) {
|
|
95
|
+
switch (valName.toLowerCase()) {
|
|
96
|
+
case ConstInterface.MG_ATTR_HTTP_TIMEOUT:
|
|
97
|
+
case ConstInterface.MG_ATTR_RTF_BUFFER_SIZE:
|
|
98
|
+
case ConstInterface.MG_ATTR_RANGE_POP_TIME:
|
|
99
|
+
case ConstInterface.MG_ATTR_TEMP_POP_TIME:
|
|
100
|
+
case ConstInterface.MG_ATTR_BATCH_PAINT_TIME:
|
|
101
|
+
return NNumber.Parse(val).toString();
|
|
102
|
+
case ConstInterface.MG_ATTR_USE_SIGNED_BROWSER_CLIENT:
|
|
103
|
+
case ConstInterface.MG_ATTR_CLOSE_PRINTED_TABLES_IN_SUBTASKS:
|
|
104
|
+
case ConstInterface.MG_ATTR_GENERIC_TEXT_PRINTING:
|
|
105
|
+
case ConstInterface.MG_ATTR_HIGH_RESOLUTION_PRINT:
|
|
106
|
+
case ConstInterface.MG_ATTR_MERGE_TRIM:
|
|
107
|
+
case ConstInterface.MG_ATTR_ORIGINAL_IMAGE_LOAD:
|
|
108
|
+
case ConstInterface.MG_ATTR_PRINT_DATA_TRIM:
|
|
109
|
+
case ConstInterface.MG_ATTR_PSCRIPT_PRINT_NT:
|
|
110
|
+
case ConstInterface.MG_ATTR_SPECIAL_CONV_ADD_SLASH:
|
|
111
|
+
case ConstInterface.MG_ATTR_SPECIAL_FULL_EXPAND_PRINT:
|
|
112
|
+
case ConstInterface.MG_ATTR_SPECIAL_FULL_TEXT:
|
|
113
|
+
case ConstInterface.MG_ATTR_SPECIAL_LAST_LINE_PRINT:
|
|
114
|
+
case ConstInterface.MG_ATTR_SPECIAL_PRINTER_OEM:
|
|
115
|
+
case ConstInterface.MG_ATTR_EMBED_FONTS:
|
|
116
|
+
case ConstInterface.MG_ATTR_CENTER_SCREEN_IN_ONLINE:
|
|
117
|
+
case ConstInterface.MG_ATTR_REPOSITION_AFTER_MODIFY:
|
|
118
|
+
case ConstInterface.MG_ATTR_ISAM_TRANSACTION:
|
|
119
|
+
return (val[0] === 'Y' || val[0] === '1') ? "Y" : "N";
|
|
120
|
+
case ConstInterface.MG_ATTR_TIME_SEPARATOR:
|
|
121
|
+
case ConstInterface.MG_ATTR_IOTIMING:
|
|
122
|
+
case ConstInterface.MG_ATTR_THOUSAND_SEPARATOR:
|
|
123
|
+
return val[0].toString();
|
|
124
|
+
default:
|
|
125
|
+
return val;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async set(s, updateIni) {
|
|
129
|
+
let allOK = true;
|
|
130
|
+
let sendToServer = false;
|
|
131
|
+
let name, val;
|
|
132
|
+
let i;
|
|
133
|
+
let serverVal = s;
|
|
134
|
+
let offsets = new Array(s.length + 1);
|
|
135
|
+
let offsetsChars = new Array(s.length + 1);
|
|
136
|
+
offsets[0] = 0;
|
|
137
|
+
offsetsChars[0] = 's';
|
|
138
|
+
let nextOffset = 1;
|
|
139
|
+
for (i = 1; i < s.length; i++) {
|
|
140
|
+
if ((s[i] === '=' || s[i] === ',') && s[i - 1] !== '\\') {
|
|
141
|
+
offsets[nextOffset] = i + 1;
|
|
142
|
+
offsetsChars[nextOffset] = s[i];
|
|
143
|
+
nextOffset++;
|
|
144
|
+
}
|
|
145
|
+
if (s[i] === '*') {
|
|
146
|
+
s = NString.Remove(s, i, 1);
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
if (s[i] === '\\') {
|
|
150
|
+
s = NString.Remove(s, i, 1);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
offsets[nextOffset] = s.length + 1;
|
|
154
|
+
offsetsChars[nextOffset] = '\0';
|
|
155
|
+
nextOffset++;
|
|
156
|
+
for (i = 0; i < nextOffset - 1; i++) {
|
|
157
|
+
name = s.substr(offsets[i], offsets[i + 1] - offsets[i] - 1);
|
|
158
|
+
if (s[offsets[i + 1] - 1] === '=') {
|
|
159
|
+
i++;
|
|
160
|
+
let valInit = i;
|
|
161
|
+
let allowedSeparators = this.getAllowedSeparators(name);
|
|
162
|
+
for (let sep = 0; sep < allowedSeparators; sep++) {
|
|
163
|
+
if (offsetsChars[i + 1] === ',')
|
|
164
|
+
i++;
|
|
165
|
+
else
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
val = s.substr(offsets[valInit], offsets[i + 1] - offsets[valInit] - 1);
|
|
169
|
+
}
|
|
170
|
+
else
|
|
171
|
+
val = null;
|
|
172
|
+
if (this.isReservedLogicalName(name)) {
|
|
173
|
+
allOK = false;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (name[0] !== '[')
|
|
177
|
+
name = NString.Insert(name, 0, ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS);
|
|
178
|
+
if (!name.startsWith(ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS))
|
|
179
|
+
name = name.toUpperCase();
|
|
180
|
+
name = name.trim();
|
|
181
|
+
val = val.trim();
|
|
182
|
+
sendToServer = true;
|
|
183
|
+
if (!NString.IsNullOrEmpty(val) ||
|
|
184
|
+
name.startsWith(ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS)) {
|
|
185
|
+
super.setValue(name, new MirrorString(val), !updateIni);
|
|
186
|
+
this.checkSetInEnvironment(name, val);
|
|
187
|
+
}
|
|
188
|
+
else
|
|
189
|
+
super.remove(name);
|
|
190
|
+
}
|
|
191
|
+
if (updateIni && sendToServer) {
|
|
192
|
+
let cmd = CommandFactory.CreateIniputForceWriteCommand(serverVal);
|
|
193
|
+
AccessHelper.mgDataTable.getMGData(0).CmdsToServer.Add(cmd);
|
|
194
|
+
await RemoteCommandsProcessor.GetInstance().Execute(CommandsProcessorBase_SendingInstruction.ONLY_COMMANDS);
|
|
195
|
+
}
|
|
196
|
+
return allOK;
|
|
197
|
+
}
|
|
198
|
+
isReservedLogicalName(name) {
|
|
199
|
+
if (!name.startsWith("[")) {
|
|
200
|
+
name = NString.Insert(name, 0, ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS);
|
|
201
|
+
if (this.values.ContainsKey(name) && this.values.get_Item(name).isReserved())
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
getAllowedSeparators(name) {
|
|
207
|
+
if (name.charAt(0) !== '[')
|
|
208
|
+
return 0;
|
|
209
|
+
let section = name.substr(1, name.indexOf(']') - 1);
|
|
210
|
+
let param = name.substr(name.indexOf(']') + 1);
|
|
211
|
+
switch (section.toUpperCase()) {
|
|
212
|
+
case ConstInterface.INI_SECTION_MAGIC_ENV:
|
|
213
|
+
if (param.toUpperCase() === ConstInterface.MG_ATTR_LANGUAGE.toUpperCase())
|
|
214
|
+
return 999;
|
|
215
|
+
else
|
|
216
|
+
return 0;
|
|
217
|
+
case ConstInterface.INI_SECTION_MAGIC_SYSTEMS:
|
|
218
|
+
return 8;
|
|
219
|
+
case ConstInterface.INI_SECTION_MAGIC_DBMS:
|
|
220
|
+
return 13;
|
|
221
|
+
case ConstInterface.INI_SECTION_MAGIC_SERVERS:
|
|
222
|
+
return 6;
|
|
223
|
+
case ConstInterface.INI_SECTION_MAGIC_COMMS:
|
|
224
|
+
return 2;
|
|
225
|
+
case ConstInterface.INI_SECTION_MAGIC_PRINTERS:
|
|
226
|
+
return 3;
|
|
227
|
+
case ConstInterface.INI_SECTION_MAGIC_SYSTEM_MENU:
|
|
228
|
+
return 11;
|
|
229
|
+
case ConstInterface.INI_SECTION_MAGIC_DATABASES:
|
|
230
|
+
return 21;
|
|
231
|
+
case ConstInterface.INI_SECTION_MAGIC_LANGUAGE:
|
|
232
|
+
return 1;
|
|
233
|
+
case ConstInterface.INI_SECTION_MAGIC_SERVICES:
|
|
234
|
+
return 8;
|
|
235
|
+
case ConstInterface.INI_SECTION_TOOLS_MENU:
|
|
236
|
+
return 7;
|
|
237
|
+
default:
|
|
238
|
+
return 0;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
checkSetInEnvironment(name, val) {
|
|
242
|
+
if (name.startsWith(ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS)) {
|
|
243
|
+
name = name.substr(ConstInterface.INI_SECTION_MAGIC_ENV_BRACKETS.length);
|
|
244
|
+
switch (name.toLowerCase()) {
|
|
245
|
+
case ConstInterface.MG_ATTR_DECIMAL_SEPARATOR:
|
|
246
|
+
Environment.Instance.setDecimalSeparator(val[0]);
|
|
247
|
+
break;
|
|
248
|
+
case ConstInterface.MG_ATTR_DATE:
|
|
249
|
+
DisplayConvertor.Instance.setDateChar(val[0].charCodeAt(0));
|
|
250
|
+
break;
|
|
251
|
+
case ConstInterface.MG_ATTR_TIME:
|
|
252
|
+
Environment.Instance.setTimeSeparator(val[0]);
|
|
253
|
+
break;
|
|
254
|
+
case ConstInterface.MG_ATTR_OWNER:
|
|
255
|
+
Environment.Instance.setOwner(val);
|
|
256
|
+
break;
|
|
257
|
+
case ConstInterface.MG_ATTR_DATEMODE:
|
|
258
|
+
Environment.Instance.setDateMode(LastFocusedManager.Instance.getCurrTask().getCompIdx(), val[0]);
|
|
259
|
+
break;
|
|
260
|
+
case ConstInterface.MG_ATTR_CENTURY:
|
|
261
|
+
Environment.Instance.setCentury(LastFocusedManager.Instance.getCurrTask().getCompIdx(), NNumber.Parse(val));
|
|
262
|
+
break;
|
|
263
|
+
case ConstInterface.MG_ATTR_IDLETIME:
|
|
264
|
+
Environment.Instance.setIdleTime(LastFocusedManager.Instance.getCurrTask().getCompIdx(), NNumber.Parse(val));
|
|
265
|
+
break;
|
|
266
|
+
case ConstInterface.MG_ATTR_UPD_IN_QUERY_LOWER:
|
|
267
|
+
Environment.Instance.setAllowUpdateInQueryMode(LastFocusedManager.Instance.getCurrTask().getCompIdx(), val[0] === '1');
|
|
268
|
+
break;
|
|
269
|
+
case ConstInterface.MG_ATTR_CRE_IN_MODIFY_LOWER:
|
|
270
|
+
Environment.Instance.setAllowCreateInModifyMode(LastFocusedManager.Instance.getCurrTask().getCompIdx(), val[0] === '1');
|
|
271
|
+
break;
|
|
272
|
+
case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_TIMEOUT_LOWER:
|
|
273
|
+
Environment.Instance.setContextInactivityTimeout(NNumber.Parse(val));
|
|
274
|
+
break;
|
|
275
|
+
case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_WARNING_TIME_LOWER:
|
|
276
|
+
Environment.Instance.setContextInactivityWarningTime(NNumber.Parse(val));
|
|
277
|
+
break;
|
|
278
|
+
case ConstInterface.MG_ATTR_CONTEXT_UNLOAD_TIMEOUT_LOWER:
|
|
279
|
+
Environment.Instance.setContextUnloadTimeout(NNumber.Parse(val));
|
|
280
|
+
break;
|
|
281
|
+
case ConstInterface.MG_ATTR_TERMINAL:
|
|
282
|
+
Environment.Instance.setTerminal(NNumber.Parse(val));
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
translate(logicalName) {
|
|
288
|
+
let stringBuilder = new StringBuilder(logicalName);
|
|
289
|
+
this.log(stringBuilder);
|
|
290
|
+
return stringBuilder.ToString();
|
|
291
|
+
}
|
|
292
|
+
log(stringBldr) {
|
|
293
|
+
let finished;
|
|
294
|
+
do {
|
|
295
|
+
let offset = 0;
|
|
296
|
+
finished = true;
|
|
297
|
+
while (offset < stringBldr.Length && stringBldr.get_Item(offset) > '\0') {
|
|
298
|
+
if (stringBldr.get_Item(offset) === '%') {
|
|
299
|
+
let oldLength = stringBldr.Length;
|
|
300
|
+
offset = this.log_trans(stringBldr, offset);
|
|
301
|
+
if (oldLength !== stringBldr.Length)
|
|
302
|
+
finished = false;
|
|
303
|
+
}
|
|
304
|
+
else
|
|
305
|
+
offset = offset + 1;
|
|
306
|
+
}
|
|
307
|
+
} while (!finished);
|
|
308
|
+
}
|
|
309
|
+
log_trans(stringBldr, offset) {
|
|
310
|
+
let ignoreTrans = false;
|
|
311
|
+
let startSym = offset;
|
|
312
|
+
let endSym = offset + 1;
|
|
313
|
+
while (endSym < stringBldr.Length) {
|
|
314
|
+
if (stringBldr.get_Item(endSym) === '%')
|
|
315
|
+
break;
|
|
316
|
+
endSym++;
|
|
317
|
+
}
|
|
318
|
+
if (endSym >= stringBldr.Length) {
|
|
319
|
+
offset = endSym;
|
|
320
|
+
ignoreTrans = true;
|
|
321
|
+
}
|
|
322
|
+
else if (stringBldr.get_Item(endSym) !== '%')
|
|
323
|
+
offset++;
|
|
324
|
+
if (!ignoreTrans) {
|
|
325
|
+
let sym = ConstInterface.INI_SECTION_LOGICAL_NAMES_BRACKETS +
|
|
326
|
+
stringBldr.ToString(startSym + 1, endSym - startSym - 1);
|
|
327
|
+
let trans = this.get(sym);
|
|
328
|
+
if (trans === null) {
|
|
329
|
+
stringBldr.Replace(stringBldr.ToString(offset, endSym + 1 - offset), "", offset, endSym + 1 - offset);
|
|
330
|
+
offset += 1;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
stringBldr.Replace(stringBldr.ToString(startSym, endSym + 1 - startSym), trans, startSym, endSym + 1 - startSym);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return offset;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
EnvParamsTable.Instance = new EnvParamsTable();
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW52VmFyaWFibGVzVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2Vudi9FbnZWYXJpYWJsZXNUYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsd0NBQXdDLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFckUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLNUMsTUFBTSxPQUFPLGNBQWUsU0FBUSxZQUEwQjtJQU01RDtRQUNFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNwRCxDQUFDO0lBS0QsR0FBRyxDQUFDLENBQVM7UUFDWCxJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUM7UUFDM0IsSUFBSSxHQUFHLEdBQVcsSUFBSSxDQUFDO1FBR3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFD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TSxJQUFJLENBQUMsQ0FBQzthQUNiO2lCQUNJO2dCQUNILFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUN0RixNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO2FBQzFCO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQXpkTSx1QkFBUSxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2VuZGluZ0luc3RydWN0aW9ufSBmcm9tIFwiLi4vQ29tbWFuZHNQcm9jZXNzb3JCYXNlXCI7XHJcbmltcG9ydCB7TWlycm9yUHJtTWFwfSBmcm9tIFwiLi4vdXRpbC9Qcm1NYXBcIjtcclxuaW1wb3J0IHtOTnVtYmVyLCBOU3RyaW5nLCBTdHJpbmdCdWlsZGVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuXHJcbmltcG9ydCB7RGlzcGxheUNvbnZlcnRvcn0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tIFwiLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmRcIjtcclxuaW1wb3J0IHtDb21tYW5kRmFjdG9yeX0gZnJvbSBcIi4uL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbW1hbmRGYWN0b3J5XCI7XHJcbmltcG9ydCB7UmVtb3RlQ29tbWFuZHNQcm9jZXNzb3J9IGZyb20gXCIuLi9yZW1vdGUvUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtFbnZpcm9ubWVudH0gZnJvbSBcIi4vRW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHtMYXN0Rm9jdXNlZE1hbmFnZXJ9IGZyb20gXCIuLi9ydC9MYXN0Rm9jdXNlZE1hbmFnZXJcIjtcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuaW1wb3J0IHtNaXJyb3JTdHJpbmd9IGZyb20gXCIuL01pcnJvclN0cmluZ1wiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBtYW5hZ2VyIG9mIGVudmlyb25tZW50IHZhcmlhYmxlc1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRW52UGFyYW1zVGFibGUgZXh0ZW5kcyBNaXJyb3JQcm1NYXA8TWlycm9yU3RyaW5nPiB7XHJcblxyXG4gIHN0YXRpYyBJbnN0YW5jZTogRW52UGFyYW1zVGFibGUgPSBuZXcgRW52UGFyYW1zVGFibGUoKTtcclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKE1pcnJvclN0cmluZyk7XHJcbiAgICB0aGlzLm1pcnJvcmVkSUQgPSBDb25zdEludGVyZmFjZS5NR19UQUdfRU5WX1BBUkFNO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgaWYgdGhlIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIHRoZSBlbnZpcm9ubWVudC5cclxuICAvLyBWZXJpZnkgdGhlIHNlY3Rpb24gbmFtZSBleGlzdHMgYmVmb3JlIGdldHRpbmcgdGhlIHZhbHVlIGZyb20gdGhlIGJhc2UgY2xhc3MuXHJcbiAgLy8gUmV0dXJuIG51bGwgaWYgdGhlIHZhbHVlIGRvZXMgbm90IGV4aXN0LlxyXG4gIGdldChzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHZhbE5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBsZXQgcmV0OiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIC8vIElmIHNlY3Rpb24gaXMgbm90IGRlZmluZWQsIGFkZCB0aGUgZGVmYXVsdCBzZWN0aW9uXHJcbiAgICBpZiAocy5jaGFyQXQoMCkgIT09ICdbJykge1xyXG4gICAgICB2YWxOYW1lID0gcztcclxuICAgICAgcyA9IE5TdHJpbmcuSW5zZXJ0KHMsIDAsIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgd2UgZG8gaGF2ZSB0aGUgc2VjdGlvbiBuYW1lLGFhbmQgaXQgaXMgTUFHSUNfRU5WLCB3ZSBuZWVkIHRoZSB2YXJpYWJsZSdzIG5hbWVcclxuICAgIGVsc2UgaWYgKHMuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMpKVxyXG4gICAgICB2YWxOYW1lID0gcy5zdWJzdHIoQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfRU5WX0JSQUNLRVRTLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gaWYgaXQgaXMgbm90IGEgbG9naWNhbCBuYW1lLCBpdCBpcyBjYXNlIGluc2Vuc2l0aXZlXHJcbiAgICBpZiAoIXMuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9MT0dJQ0FMX05BTUVTX0JSQUNLRVRTKSlcclxuICAgICAgcyA9IHMudG9VcHBlckNhc2UoKTtcclxuICAgIC8vIGNoZWNrIHRoZSB2YWx1ZSdzIG5hbWUgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZ2V0IGl0IGZyb20gdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnRcclxuICAgIGlmICh2YWxOYW1lICE9PSBudWxsKVxyXG4gICAgICByZXQgPSB0aGlzLmdldEZyb21FbnZpcm9ubWVudCh2YWxOYW1lKTtcclxuXHJcbiAgICBpZiAocmV0ICE9PSBudWxsKVxyXG4gICAgICByZXR1cm4gcmV0O1xyXG5cclxuICAgIC8vIHZhbHVlIG5vdCBpbiBydW50aW1lIGVudmlyb25tZW50IC0gZ2V0IGl0IGZyb20gdGhlIHRhYmxlXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqZWN0OiBNaXJyb3JTdHJpbmcgPSBzdXBlci5nZXR2YWx1ZShzKTtcclxuXHJcbiAgICAgIGlmIChyZXN1bHRPYmplY3QgIT09IG51bGwpIHtcclxuICAgICAgICByZXQgPSByZXN1bHRPYmplY3QuVG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgLy8gSWYgaXQgbWF5IGJlIGEgdmFyaWFibGUgdGhhdCBiZWxvbmdzIHRvIHRoZSBzZXJ2ZXIncyBjb250ZXh0L2NvbXBvbmVudCwgcHJvY2VzcyBpdFxyXG4gICAgICAgIGlmICh2YWxOYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXQgPSB0aGlzLmdldFByb2Nlc3NlZFZhbHVlKHZhbE5hbWUsIHJldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXhfQkUpIHtcclxuICAgICAgLy8gaWYgc3RyaW5nIG5vdCBpbiBkaWN0aW9uYXJ5XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gcGxhY2UgXCJudW1iZXJcIiBpbiBzZWN0aW9uIFwic2VjdGlvblwiXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNlY3Rpb25cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibnVtYmVyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldGxuKHNlY3Rpb246IHN0cmluZywgbnVtYmVyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgc2VjdGlvbiA9IHNlY3Rpb24udG9VcHBlckNhc2UoKS50cmltKCk7XHJcbiAgICBsZXQgc2VjdGlvbkZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gdGhpcy52YWx1ZXMuS2V5cztcclxuXHJcbiAgICAvLyBMb29wIG92ZXIga2V5cywgZmluZCB0aG9zZSB0aGF0IHN0YXJ0IHdpdGggb3VyIHNlY3Rpb24gbmFtZVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBrZXk6IHN0cmluZyA9IGtleXNbaV07XHJcblxyXG4gICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoc2VjdGlvbikpIHtcclxuICAgICAgICBzZWN0aW9uRm91bmQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAobnVtYmVyID4gMSlcclxuICAgICAgICAgIG51bWJlci0tO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAvLyBmb3VuZCB3aGF0IHdlIG5lZWRlZCwgYnVpbGQgdGhlIFwibmFtZT12YWx1ZVwiIHN0cmluZ1xyXG4gICAgICAgICAgcmV0dXJuIGtleS5zdWJzdHIoc2VjdGlvbi5sZW5ndGgpICsgXCI9XCIgKyB0aGlzLnZhbHVlcy5nZXRfSXRlbShrZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIElmIHdlIGdvdCB0byB0aGUgcmlnaHQgc2VjdGlvbiBhbmQgcGFzc2VkIGl0LCBubyBuZWVkIHRvIGNvbnRpbnVlIGxvb2tpbmdcclxuICAgICAgZWxzZSBpZiAoc2VjdGlvbkZvdW5kKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyeSBhbmQgZ2V0IHRoZSBlbnYgdmFyaWFibGUncyB2YWx1ZSBmcm9tIHRoZSBydW50aW1lIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbE5hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRGcm9tRW52aXJvbm1lbnQodmFsTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodmFsTmFtZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUNJTUFMX1NFUEFSQVRPUjpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RGVjaW1hbCgpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREFURTpcclxuICAgICAgICByZXR1cm4gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXREYXRlQ2hhcigpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USU1FOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXRUaW1lKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9PV05FUjpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0T3duZXIoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RBVEVNT0RFOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREYXRlTW9kZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0VOVFVSWTpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0Q2VudHVyeShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JRExFVElNRTpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0SWRsZVRpbWUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVBEX0lOX1FVRVJZOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5hbGxvd1VwZGF0ZUluUXVlcnlNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NSRV9JTl9NT0RJRlk6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfSU5BQ1RJVklUWV9USU1FT1VUOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQoKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9VTkxPQURfVElNRU9VVDpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0Q29udGV4dFVubG9hZFRpbWVvdXQoKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEVSTUlOQUw6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmdldFRlcm1pbmFsKCkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1dFQkNMSUVOVF9SRUlOSVRfU0VTU0lPTjpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0V2ViQ2xpZW50UmVpbml0U2Vzc2lvbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVGhlIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUncyB2YWx1ZSwgdG8gcmV0dXJuIGl0IGluIHRoZSByaWdodFxyXG4gIC8vLyAgIGZvcm1hdCBmb3IgY29udGV4dC9jb21wb25lbnQgdmFsdWVzIHRoYXQgYXJlIG5vdCB1c2VkIGJ5IHRoZSBjbGllbnQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbE5hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRWYWx1ZSh2YWxOYW1lOiBzdHJpbmcsIHZhbDogc3RyaW5nKTogc3RyaW5nIHtcclxuXHJcbiAgICAvLyBUaGUgbGlzdCBvZiB2YXJpYWJsZXMgaXMgc2ltaWxhciB0byB0aGF0IGluIHRoZSBzZXJ2ZXIsIGluIGVudl9jb21wLmNwcCwgRU5WOjplbnZfdmFsX3RvX3N0clxyXG4gICAgc3dpdGNoICh2YWxOYW1lLnRvTG93ZXJDYXNlKCkpIHtcclxuXHJcbiAgICAgIC8vIHZhcmlhYmxlIGlzIGludGVnZXJcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0hUVFBfVElNRU9VVDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JURl9CVUZGRVJfU0laRTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JBTkdFX1BPUF9USU1FOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEVNUF9QT1BfVElNRTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0JBVENIX1BBSU5UX1RJTUU6XHJcbiAgICAgICAgcmV0dXJuIE5OdW1iZXIuUGFyc2UodmFsKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgLy8gdmFyaWFibGUgaXMgYm9vbGVhblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVNFX1NJR05FRF9CUk9XU0VSX0NMSUVOVDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NMT1NFX1BSSU5URURfVEFCTEVTX0lOX1NVQlRBU0tTOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfR0VORVJJQ19URVhUX1BSSU5USU5HOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSElHSF9SRVNPTFVUSU9OX1BSSU5UOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTUVSR0VfVFJJTTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09SSUdJTkFMX0lNQUdFX0xPQUQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9QUklOVF9EQVRBX1RSSU06XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9QU0NSSVBUX1BSSU5UX05UOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9DT05WX0FERF9TTEFTSDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfRlVMTF9FWFBBTkRfUFJJTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0ZVTExfVEVYVDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfTEFTVF9MSU5FX1BSSU5UOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9QUklOVEVSX09FTTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VNQkVEX0ZPTlRTOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0VOVEVSX1NDUkVFTl9JTl9PTkxJTkU6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRVBPU0lUSU9OX0FGVEVSX01PRElGWTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lTQU1fVFJBTlNBQ1RJT046XHJcbiAgICAgICAgcmV0dXJuICh2YWxbMF0gPT09ICdZJyB8fCB2YWxbMF0gPT09ICcxJykgPyBcIllcIiA6IFwiTlwiO1xyXG5cclxuICAgICAgLy8gdmFyaWFibGUgaXMgYSBjaGFyYWN0ZXJcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJTUVfU0VQQVJBVE9SOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU9USU1JTkc6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USE9VU0FORF9TRVBBUkFUT1I6XHJcbiAgICAgICAgcmV0dXJuIHZhbFswXS50b1N0cmluZygpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHRoZSB2YXJpYWJsZTpcclxuICAvLy8gICAxLiBwYXJzZSB0aGUgc3RyaW5nXHJcbiAgLy8vICAgMi4gY3JlYXRlIHRoZSBwYXJhbS92YWx1ZSBjb3VwbGVzXHJcbiAgLy8vICAgMy4gZm9yIGVhY2ggY291cGxlOlxyXG4gIC8vLyAgIDNhLiB2ZXJpZnkgdGhlIHNlY3Rpb24gbmFtZSBleGlzdHNcclxuICAvLy8gICAzYi4gdmVyaWZ5IHRoZSB2YXJpYWJsZSBpcyBub3QgdW5tb2RpZmllYWJsZVxyXG4gIC8vLyAgIDNjLiBzZXQgdGhlIHZhcmlhYmxlIGluIHRoZSBiYXNlIGNsYXNzXHJcbiAgLy8vICAgM2QuIGNoZWNrIGFuZCBjaGFuZ2UgdGhlIGVudmlyb25tZW50IGRhdGEgaWYgbmVlZGVkXHJcbiAgLy8vICAgNC4gSWYgcmVxdWlyZWQsIHNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZUluaVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgYXN5bmMgc2V0KHM6IHN0cmluZywgdXBkYXRlSW5pOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgYWxsT0s6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbGV0IHNlbmRUb1NlcnZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IG5hbWU6IHN0cmluZywgdmFsO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBzZXJ2ZXJWYWw6IHN0cmluZyA9IHM7XHJcblxyXG4gICAgLy8gU3RyaW5nIHBhcnNpbmc6IGV2ZXJ5IG51bWJlciBpbiAnb2Zmc2V0cycgc2hvd3MgdGhlIG9mZnNldCB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbmFtZSBvciB2YWx1ZVxyXG4gICAgLy8gMXN0IG9mZnNldCBpcyBhbHdheXMgMFxyXG4gICAgbGV0IG9mZnNldHM6IG51bWJlcltdID0gbmV3IEFycmF5KHMubGVuZ3RoICsgMSk7XHJcbiAgICBsZXQgb2Zmc2V0c0NoYXJzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShzLmxlbmd0aCArIDEpO1xyXG5cclxuICAgIG9mZnNldHNbMF0gPSAwO1xyXG4gICAgb2Zmc2V0c0NoYXJzWzBdID0gJ3MnO1xyXG4gICAgbGV0IG5leHRPZmZzZXQ6IG51bWJlciA9IDE7XHJcblxyXG4gICAgLy8gTG9vcCBvdmVyIHN0cmluZywgZmluZCBhbGwgdGhlICc9JywgJywnIGFuZCAnKicgdGhhdCBhcmUgbm90IHByZWNlZWRlZCBieSBhICdcXCcuXHJcbiAgICBmb3IgKGkgPSAxOyBpIDwgcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoKHNbaV0gPT09ICc9JyB8fCBzW2ldID09PSAnLCcpICYmIHNbaSAtIDFdICE9PSAnXFxcXCcpIHtcclxuICAgICAgICBvZmZzZXRzW25leHRPZmZzZXRdID0gaSArIDE7XHJcbiAgICAgICAgb2Zmc2V0c0NoYXJzW25leHRPZmZzZXRdID0gc1tpXTtcclxuICAgICAgICBuZXh0T2Zmc2V0Kys7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNbaV0gPT09ICcqJykge1xyXG4gICAgICAgIHMgPSBOU3RyaW5nLlJlbW92ZShzLCBpLCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc1tpXSA9PT0gJ1xcXFwnKSB7XHJcbiAgICAgICAgcyA9IE5TdHJpbmcuUmVtb3ZlKHMsIGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIHRoZSBmaW5hbCBvZmZzZXQgZm9yIHRoZSBlbmQgb2YgdGhlIHN0cmluZ1xyXG4gICAgb2Zmc2V0c1tuZXh0T2Zmc2V0XSA9IHMubGVuZ3RoICsgMTtcclxuICAgIG9mZnNldHNDaGFyc1tuZXh0T2Zmc2V0XSA9ICdcXDAnO1xyXG4gICAgbmV4dE9mZnNldCsrO1xyXG5cclxuICAgIC8vIGdvIG92ZXIgdGhlIGNhbGN1bGF0ZWQgb2Zmc2V0cy4gdGhlIGxhc3Qgb25lIGlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc28gaXQgaXMgaWdub3JlZFxyXG4gICAgZm9yIChpID0gMDsgaSA8IG5leHRPZmZzZXQgLSAxOyBpKyspIHtcclxuICAgICAgLy8gZ2V0IHRoZSB2YXJpYWJsZSBuYW1lXHJcbiAgICAgIG5hbWUgPSBzLnN1YnN0cihvZmZzZXRzW2ldLCBvZmZzZXRzW2kgKyAxXSAtIG9mZnNldHNbaV0gLSAxKTtcclxuXHJcbiAgICAgIC8vIGlzIHRoZXJlIGEgdmFsdWUsIG9yIGlzIGl0IGFuIGVtcHR5IHZhcmlhYmxlP1xyXG4gICAgICBpZiAoc1tvZmZzZXRzW2kgKyAxXSAtIDFdID09PSAnPScpIHtcclxuICAgICAgICBpKys7XHJcbiAgICAgICAgbGV0IHZhbEluaXQ6IG51bWJlciA9IGk7XHJcbiAgICAgICAgbGV0IGFsbG93ZWRTZXBhcmF0b3JzOiBudW1iZXIgPSB0aGlzLmdldEFsbG93ZWRTZXBhcmF0b3JzKG5hbWUpO1xyXG4gICAgICAgIGZvciAobGV0IHNlcDogbnVtYmVyID0gMDsgc2VwIDwgYWxsb3dlZFNlcGFyYXRvcnM7IHNlcCsrKSB7XHJcbiAgICAgICAgICBpZiAob2Zmc2V0c0NoYXJzW2kgKyAxXSA9PT0gJywnKVxyXG4gICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBnZXQgdGhlIHZhbHVlXHJcbiAgICAgICAgdmFsID0gcy5zdWJzdHIob2Zmc2V0c1t2YWxJbml0XSwgb2Zmc2V0c1tpICsgMV0gLSBvZmZzZXRzW3ZhbEluaXRdIC0gMSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHZhbCA9IG51bGw7XHJcblxyXG4gICAgICAvLyBpcyBpdCBhIHJlc2VydmVkIHZhcmlhYmxlP1xyXG4gICAgICBpZiAodGhpcy5pc1Jlc2VydmVkTG9naWNhbE5hbWUobmFtZSkpIHtcclxuICAgICAgICBhbGxPSyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBpZiB0aGVyZSdzIG5vIHNlY3Rpb24gbmFtZSwgYWRkIHRoZSBkZWZhdWx0IG9uZVxyXG4gICAgICBpZiAobmFtZVswXSAhPT0gJ1snKVxyXG4gICAgICAgIG5hbWUgPSBOU3RyaW5nLkluc2VydChuYW1lLCAwLCBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMpO1xyXG5cclxuICAgICAgLy8gSWYgaXQncyBub3QgYSBsb2dpY2FsIG5hbWUsIGl0IGlzIGNhc2UgaW5zZW5zaXRpdmVcclxuICAgICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUykpXHJcbiAgICAgICAgbmFtZSA9IG5hbWUudG9VcHBlckNhc2UoKTtcclxuICAgICAgbmFtZSA9IG5hbWUudHJpbSgpO1xyXG4gICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgICBzZW5kVG9TZXJ2ZXIgPSB0cnVlO1xyXG4gICAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh2YWwpIHx8XHJcbiAgICAgICAgbmFtZS5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX0xPR0lDQUxfTkFNRVNfQlJBQ0tFVFMpKSB7XHJcbiAgICAgICAgLy8gSWYgd2UncmUgZ29pbmcgdG8gc2VuZCBpdCB0byB0aGUgc2VydmVyIE5PVywgd2UgZG9uJ3QgbmVlZCBpdCBpbiB0aGUgY2hhbmdlcyBsaXN0XHJcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUobmFtZSwgbmV3IE1pcnJvclN0cmluZyh2YWwpLCAhdXBkYXRlSW5pKTtcclxuICAgICAgICB0aGlzLmNoZWNrU2V0SW5FbnZpcm9ubWVudChuYW1lLCB2YWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBzdXBlci5yZW1vdmUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgc2hvdWxkIHVwZGF0ZSB0aGUgaW5pIGZpbGUsIGFuZCB3ZSBoYXZlIG1vZGlmaWVkIHZhcmlhYmxlcywgdXBkYXRlIHRoZSBzZXJ2ZXIuXHJcbiAgICBpZiAodXBkYXRlSW5pICYmIHNlbmRUb1NlcnZlcikge1xyXG4gICAgICBsZXQgY21kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZUluaXB1dEZvcmNlV3JpdGVDb21tYW5kKHNlcnZlclZhbCk7XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5nZXRNR0RhdGEoMCkuQ21kc1RvU2VydmVyLkFkZChjbWQpO1xyXG5cclxuICAgICAgLy8gZXhlY3V0ZSBjbGllbnQgdG8gc2VydmVyIGNvbW1hbmRzXHJcbiAgICAgIGF3YWl0IFJlbW90ZUNvbW1hbmRzUHJvY2Vzc29yLkdldEluc3RhbmNlKCkuRXhlY3V0ZShDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2VuZGluZ0luc3RydWN0aW9uLk9OTFlfQ09NTUFORFMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFsbE9LO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENoZWNrcyBpZiB0aGUgdmFyaWFibGUgaXMgYSByZXNlcnZlZCBsb2dpY2FsIG5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmFtZVwiPiBlbnYgdmFyaWFibGUgbmFtZSA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiBpdCBpcyByZXNlcnZlZCA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpc1Jlc2VydmVkTG9naWNhbE5hbWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG4gICAgLy8gUmVzZXJ2ZWQgbG9naWNhbCBuYW1lcyBtYXkgYmUgYWNjZXNzZWQgd2l0aG91dCBhIHNlY3Rpb24gbmFtZSwgYnV0IGFyZSBzdG9yZWQgYXMgbG9naWNhbCBuYW1lcyxcclxuICAgIC8vIHNvIGlmIHdlIGRvbid0IGhhdmUgYSBzZWN0aW9uIG5hbWUsIGluc2VydCB0aGUgbG9naWNhbCBzZWN0aW9uIGFuZCBzZWFyY2ggdGhlIHRhYmxlXHJcbiAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aChcIltcIikpIHtcclxuICAgICAgbmFtZSA9IE5TdHJpbmcuSW5zZXJ0KG5hbWUsIDAsIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX0xPR0lDQUxfTkFNRVNfQlJBQ0tFVFMpO1xyXG4gICAgICBpZiAodGhpcy52YWx1ZXMuQ29udGFpbnNLZXkobmFtZSkgJiYgdGhpcy52YWx1ZXMuZ2V0X0l0ZW0obmFtZSkuaXNSZXNlcnZlZCgpKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiBzZXBlcmF0b3JzIGFsbG93ZWQgZm9yIGVudHJpZXMgb2YgdGhpcyBzZWN0aW9uLiBudW1iZXIgYXJlIGJhc2VkIG9uXHJcbiAgLy8vICAgZGF0YSBpbiBlbnZfa2Vybi5jcHA6IGVudl9kZWZfcGFyc2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldEFsbG93ZWRTZXBhcmF0b3JzKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgIT09ICdbJylcclxuICAgICAgcmV0dXJuIDA7XHJcblxyXG4gICAgbGV0IHNlY3Rpb246IHN0cmluZyA9IG5hbWUuc3Vic3RyKDEsIG5hbWUuaW5kZXhPZignXScpIC8qJ10nKi8gLSAxKTtcclxuICAgIGxldCBwYXJhbTogc3RyaW5nID0gbmFtZS5zdWJzdHIobmFtZS5pbmRleE9mKCddJykgLyonXScqLyArIDEpO1xyXG5cclxuICAgIHN3aXRjaCAoc2VjdGlvbi50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfRU5WOlxyXG4gICAgICAgIGlmIChwYXJhbS50b1VwcGVyQ2FzZSgpID09PSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xBTkdVQUdFLnRvVXBwZXJDYXNlKCkpXHJcbiAgICAgICAgICByZXR1cm4gOTk5O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1NZU1RFTVM6XHJcbiAgICAgICAgcmV0dXJuIDg7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfREJNUzpcclxuICAgICAgICByZXR1cm4gMTM7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfU0VSVkVSUzpcclxuICAgICAgICByZXR1cm4gNjtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19DT01NUzpcclxuICAgICAgICByZXR1cm4gMjtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19QUklOVEVSUzpcclxuICAgICAgICByZXR1cm4gMztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19TWVNURU1fTUVOVTpcclxuICAgICAgICByZXR1cm4gMTE7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfREFUQUJBU0VTOlxyXG4gICAgICAgIHJldHVybiAyMTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19MQU5HVUFHRTpcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19TRVJWSUNFUzpcclxuICAgICAgICByZXR1cm4gODtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9UT09MU19NRU5VOlxyXG4gICAgICAgIHJldHVybiA3O1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENoZWNrIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjaGFuZ2UgYWZmZWN0cyB0aGUgZW52aXJvbm1lbnQgdmFsdWVzLFxyXG4gIC8vLyAgIGFuZCBjaGFuZ2UgdGhlIGVudmlyb25tZW50IGRhdGEgYWNjb3JkaW5nbHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgY2hlY2tTZXRJbkVudmlyb25tZW50KG5hbWU6IHN0cmluZywgdmFsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfRU5WX0JSQUNLRVRTKSkge1xyXG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfRU5WX0JSQUNLRVRTLmxlbmd0aCk7XHJcblxyXG4gICAgICBzd2l0Y2ggKG5hbWUudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUNJTUFMX1NFUEFSQVRPUjpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldERlY2ltYWxTZXBhcmF0b3IodmFsWzBdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFOlxyXG4gICAgICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5zZXREYXRlQ2hhcih2YWxbMF0uY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElNRTpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldFRpbWVTZXBhcmF0b3IodmFsWzBdKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9PV05FUjpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldE93bmVyKHZhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREFURU1PREU6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXREYXRlTW9kZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksIHZhbFswXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0VOVFVSWTpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldENlbnR1cnkoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpLCBOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lETEVUSU1FOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0SWRsZVRpbWUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpLCBOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1VQRF9JTl9RVUVSWV9MT1dFUjpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldEFsbG93VXBkYXRlSW5RdWVyeU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpLFxyXG4gICAgICAgICAgICB2YWxbMF0gPT09ICcxJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ1JFX0lOX01PRElGWV9MT1dFUjpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldEFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSxcclxuICAgICAgICAgICAgdmFsWzBdID09PSAnMScpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfSU5BQ1RJVklUWV9USU1FT1VUX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1dBUk5JTkdfVElNRV9MT1dFUjpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldENvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWUoTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX1VOTE9BRF9USU1FT1VUX0xPV0VSOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0Q29udGV4dFVubG9hZFRpbWVvdXQoTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9URVJNSU5BTDpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldFRlcm1pbmFsKE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBsb2dpY2FsIG5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+aW5kZXggb2YgdGhlIGxvZ2ljYWwgbmFtZTwvcGFyYW0+XHJcbiAgdHJhbnNsYXRlKGxvZ2ljYWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHN0cmluZ0J1aWxkZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihsb2dpY2FsTmFtZSk7XHJcbiAgICB0aGlzLmxvZyhzdHJpbmdCdWlsZGVyKTtcclxuICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+PC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyaW5nQmxkclwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBsb2coc3RyaW5nQmxkcjogU3RyaW5nQnVpbGRlcik6IHZvaWQge1xyXG4gICAgbGV0IGZpbmlzaGVkOiBib29sZWFuO1xyXG4gICAgZG8ge1xyXG4gICAgICBsZXQgb2Zmc2V0OiBudW1iZXIgPSAwO1xyXG4gICAgICBmaW5pc2hlZCA9IHRydWU7XHJcbiAgICAgIHdoaWxlIChvZmZzZXQgPCBzdHJpbmdCbGRyLkxlbmd0aCAmJiBzdHJpbmdCbGRyLmdldF9JdGVtKG9mZnNldCkgPiAnXFwwJy8qJ1x1MDAwMCcqLykge1xyXG5cclxuICAgICAgICAvLyAnJCcgd2FzIGRlZmluZSB0aGUgbG9naWNhbCBuYW1lLCBub3QgdXNlZCBhbnkgbW9yZVxyXG4gICAgICAgIGlmIChzdHJpbmdCbGRyLmdldF9JdGVtKG9mZnNldCkgPT09ICclJykge1xyXG4gICAgICAgICAgbGV0IG9sZExlbmd0aDogbnVtYmVyID0gc3RyaW5nQmxkci5MZW5ndGg7XHJcbiAgICAgICAgICBvZmZzZXQgPSB0aGlzLmxvZ190cmFucyhzdHJpbmdCbGRyLCBvZmZzZXQpO1xyXG4gICAgICAgICAgaWYgKG9sZExlbmd0aCAhPT0gc3RyaW5nQmxkci5MZW5ndGgpXHJcbiAgICAgICAgICAgIGZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIG9mZnNldCA9IG9mZnNldCArIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdoaWxlICghZmluaXNoZWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cmluZ0JsZHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib2Zmc2V0XCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGxvZ190cmFucyhzdHJpbmdCbGRyOiBTdHJpbmdCdWlsZGVyLCBvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgaWdub3JlVHJhbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzdGFydFN5bTogbnVtYmVyID0gb2Zmc2V0O1xyXG4gICAgbGV0IGVuZFN5bTogbnVtYmVyID0gb2Zmc2V0ICsgMTtcclxuXHJcbiAgICAvLyBmaW5kIHRoZSBlbmQgb2YgdGhlIHN5bWJvbFxyXG4gICAgd2hpbGUgKGVuZFN5bSA8IHN0cmluZ0JsZHIuTGVuZ3RoKSB7XHJcbiAgICAgIGlmIChzdHJpbmdCbGRyLmdldF9JdGVtKGVuZFN5bSkgPT09ICclJylcclxuICAgICAgICBicmVhaztcclxuICAgICAgZW5kU3ltKys7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIDEgdG8gdGhlIGxlbiB0byBnZXQgdG8gdGhlIGVuZCBvZiB0aGUgc3ltYm9sIG9yIGlmIG5vIGVuZCBzeW1ib2wgd2FzIGZvdW5kIGFkZFxyXG4gICAgaWYgKGVuZFN5bSA+PSBzdHJpbmdCbGRyLkxlbmd0aCkge1xyXG4gICAgICBvZmZzZXQgPSBlbmRTeW07XHJcbiAgICAgIGlnbm9yZVRyYW5zID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN0cmluZ0JsZHIuZ2V0X0l0ZW0oZW5kU3ltKSAhPT0gJyUnKVxyXG4gICAgICBvZmZzZXQrKztcclxuXHJcbiAgICBpZiAoIWlnbm9yZVRyYW5zKSB7XHJcbiAgICAgIGxldCBzeW06IHN0cmluZyA9IENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX0xPR0lDQUxfTkFNRVNfQlJBQ0tFVFMgK1xyXG4gICAgICAgIHN0cmluZ0JsZHIuVG9TdHJpbmcoc3RhcnRTeW0gKyAxLCBlbmRTeW0gLSBzdGFydFN5bSAtIDEpO1xyXG4gICAgICBsZXQgdHJhbnM6IHN0cmluZyA9IHRoaXMuZ2V0KHN5bSk7XHJcblxyXG4gICAgICAvLyBzZXQgdGhlIG9mZnNldCB0byB0aGUgbmV4dCBjaGFyIGFmdGVyIHRoZSBlbmRpbmcgJSBvZiB0aGUgbmFtZVxyXG4gICAgICBpZiAodHJhbnMgPT09IG51bGwpIHtcclxuICAgICAgICBzdHJpbmdCbGRyLlJlcGxhY2Uoc3RyaW5nQmxkci5Ub1N0cmluZyhvZmZzZXQsIGVuZFN5bSArIDEgLSBvZmZzZXQpLCBcIlwiLCBvZmZzZXQsIGVuZFN5bSArIDEgLSBvZmZzZXQpO1xyXG4gICAgICAgIG9mZnNldCArPSAxO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHN0cmluZ0JsZHIuUmVwbGFjZShzdHJpbmdCbGRyLlRvU3RyaW5nKHN0YXJ0U3ltLCBlbmRTeW0gKyAxIC0gc3RhcnRTeW0pLCB0cmFucywgc3RhcnRTeW0sXHJcbiAgICAgICAgICBlbmRTeW0gKyAxIC0gc3RhcnRTeW0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2Zmc2V0O1xyXG4gIH1cclxufVxyXG4iXX0=
|