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