@magic-xpa/engine 4.1100.0-dev4110.19 → 4.1100.0-dev4110.190
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 +399 -0
- package/esm2022/src/CommandsProcessorBase.mjs +56 -0
- package/esm2022/src/CommandsProcessorManager.mjs +26 -0
- package/esm2022/src/CommandsTable.mjs +162 -0
- package/esm2022/src/ConstInterface.mjs +516 -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 +154 -0
- package/{esm2020 → esm2022}/src/ICommandsTable.mjs +1 -1
- package/esm2022/src/ServerConfig.mjs +118 -0
- package/{esm2020 → esm2022}/src/bridge/IGuiEvent.mjs +19 -19
- package/{esm2020 → esm2022}/src/bridge/MagicBridge.mjs +40 -40
- 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/{esm2020 → esm2022}/src/commands/ClientToServer/BrowserEscEventCommand.mjs +23 -23
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommand.mjs +14 -14
- package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +60 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ColumnSortEventCommand.mjs +26 -26
- package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +260 -0
- package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +67 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ComputeEventCommand.mjs +23 -23
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +20 -20
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +19 -19
- 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 +37 -0
- package/esm2022/src/commands/ClientToServer/EventCommand.mjs +40 -0
- package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +67 -0
- package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +22 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs +10 -10
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ICommandTaskTag.mjs +1 -1
- package/{esm2020 → esm2022}/src/commands/ClientToServer/IndexChangeEventCommand.mjs +21 -21
- package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +23 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +23 -23
- package/{esm2020 → esm2022}/src/commands/ClientToServer/QueryCommand.mjs +20 -20
- package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +27 -0
- package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +27 -0
- package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +24 -0
- package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +40 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/SelectProgramCommand.mjs +14 -14
- package/{esm2020 → esm2022}/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +9 -9
- package/{esm2020 → esm2022}/src/commands/ClientToServer/SubformOpenEventCommand.mjs +21 -21
- package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +24 -0
- package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +30 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/UnloadCommand.mjs +14 -14
- 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 +1 -1
- package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +65 -0
- package/{esm2020 → esm2022}/src/commands/ServerToClient/AddLocateCommand.mjs +21 -21
- package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
- package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
- 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/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +132 -0
- 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/esm2022/src/data/Key.mjs +88 -0
- package/esm2022/src/data/Record.mjs +866 -0
- package/{esm2020 → esm2022}/src/data/RecordOutOfDataViewException.mjs +15 -15
- package/esm2022/src/data/RecordsTable.mjs +267 -0
- package/esm2022/src/data/TaskTransactionManager.mjs +103 -0
- package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +74 -0
- 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 +226 -0
- package/esm2022/src/env/MirrorString.mjs +65 -0
- 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 +2975 -0
- package/{esm2020 → esm2022}/src/event/IEventsManager.mjs +6 -6
- package/esm2022/src/event/RunTimeEvent.mjs +392 -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/esm2022/src/exp/GlobalParamsTable.mjs +85 -0
- 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 +1181 -0
- package/esm2022/src/http/HttpManager.mjs +97 -0
- package/esm2022/src/http/client/HttpClientAsync.mjs +68 -0
- package/esm2022/src/http/client/HttpClientBase.mjs +132 -0
- 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/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
- package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
- package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
- package/esm2022/src/remote/RemoteCommandsProcessor.mjs +882 -0
- package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
- package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +24 -0
- package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +61 -0
- 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/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
- package/{esm2020 → esm2022}/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +12 -12
- package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
- package/esm2022/src/remote/ServerError.mjs +40 -0
- package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +20 -0
- 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/{esm2020 → esm2022}/src/rt/DataviewHeaderBase.mjs +98 -96
- package/{esm2020 → esm2022}/src/rt/DataviewHeaderFactory.mjs +6 -6
- package/esm2022/src/rt/DataviewHeaders.mjs +53 -0
- package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +38 -0
- package/esm2022/src/rt/ExecutionStack.mjs +94 -0
- package/{esm2020 → esm2022}/src/rt/ExecutionStackEntry.mjs +17 -17
- package/esm2022/src/rt/HandlersTable.mjs +96 -0
- 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/esm2022/src/rt/RecomputeTable.mjs +63 -0
- package/esm2022/src/rt/RemoteDataviewHeader.mjs +108 -0
- 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/esm2022/src/tasks/RemoteTaskService.mjs +45 -0
- package/esm2022/src/tasks/Task.mjs +2497 -0
- package/esm2022/src/tasks/TaskBase.mjs +83 -0
- package/esm2022/src/tasks/TaskServiceBase.mjs +25 -0
- package/esm2022/src/tasks/TasksTable.mjs +80 -0
- package/esm2022/src/tasks/sort/Sort.mjs +5 -0
- package/esm2022/src/tasks/sort/SortCollection.mjs +67 -0
- package/esm2022/src/util/ConstUtils.mjs +14 -0
- package/esm2022/src/util/FlowMonitorQueue.mjs +451 -0
- package/esm2022/src/util/HeapSort.mjs +70 -0
- 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/esm2022/src/util/cookie.service.mjs +92 -0
- package/{fesm2020 → fesm2022}/magic-xpa-engine.mjs +29713 -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 +32 -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 +515 -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 +34 -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 +8 -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 +10 -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 +8 -8
- package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +7 -7
- package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +7 -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 +15 -15
- package/src/commands/ClientToServer/EventCommand.d.ts +15 -15
- package/src/commands/ClientToServer/ExecOperCommand.d.ts +23 -23
- package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +8 -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 +8 -8
- package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +10 -10
- package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +8 -8
- package/src/commands/ClientToServer/QueryCommand.d.ts +8 -8
- package/src/commands/ClientToServer/RecomputeCommand.d.ts +11 -11
- package/src/commands/ClientToServer/RefreshEventCommand.d.ts +12 -12
- package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +10 -10
- package/src/commands/ClientToServer/RollbackEventCommand.d.ts +14 -14
- package/src/commands/ClientToServer/SelectProgramCommand.d.ts +6 -6
- package/src/commands/ClientToServer/SetTransactionStateDataviewCommand.d.ts +5 -5
- package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +8 -8
- package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +9 -9
- package/src/commands/ClientToServer/TransactionCommand.d.ts +12 -12
- package/src/commands/ClientToServer/UnloadCommand.d.ts +7 -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 +3 -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 +156 -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 +204 -204
- package/src/event/IEventsManager.d.ts +77 -77
- package/src/event/RunTimeEvent.d.ts +123 -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 +93 -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/CommandsProcessorManager.mjs +0 -26
- 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/commands/ClientOriginatedCommandTaskTag.mjs +0 -11
- package/esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +0 -60
- package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +0 -260
- package/esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -69
- package/esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
- package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +0 -36
- package/esm2020/src/commands/ClientToServer/EventCommand.mjs +0 -40
- package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +0 -67
- package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -22
- 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/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/AddRangeCommand.mjs +0 -62
- package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +0 -33
- 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/commands/ServerToClient/XMLBasedCommandBuilder.mjs +0 -132
- 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/Key.mjs +0 -88
- package/esm2020/src/data/Record.mjs +0 -846
- package/esm2020/src/data/RecordsTable.mjs +0 -267
- package/esm2020/src/data/TaskTransactionManager.mjs +0 -103
- package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +0 -74
- 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/env/MirrorString.mjs +0 -65
- 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/GlobalParamsTable.mjs +0 -85
- 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/HttpClientBase.mjs +0 -132
- 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/AddUserLocateRemoteDataViewCommand.mjs +0 -18
- package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +0 -18
- package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +0 -18
- package/esm2020/src/remote/RemoteCommandsProcessor.mjs +0 -880
- package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +0 -25
- package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +0 -24
- package/esm2020/src/remote/RemoteDataViewCommandFactory.mjs +0 -61
- package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +0 -17
- package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +0 -16
- package/esm2020/src/remote/ServerError.mjs +0 -40
- package/esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +0 -20
- 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/DataviewHeaders.mjs +0 -53
- package/esm2020/src/rt/DataviewHeadersSaxHandler.mjs +0 -38
- package/esm2020/src/rt/ExecutionStack.mjs +0 -94
- package/esm2020/src/rt/HandlersTable.mjs +0 -96
- 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/RecomputeTable.mjs +0 -63
- package/esm2020/src/rt/RemoteDataviewHeader.mjs +0 -108
- 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/RemoteTaskService.mjs +0 -45
- package/esm2020/src/tasks/Task.mjs +0 -2495
- package/esm2020/src/tasks/TaskBase.mjs +0 -87
- package/esm2020/src/tasks/TaskServiceBase.mjs +0 -25
- package/esm2020/src/tasks/TasksTable.mjs +0 -80
- package/esm2020/src/tasks/sort/Sort.mjs +0 -7
- package/esm2020/src/tasks/sort/SortCollection.mjs +0 -67
- package/esm2020/src/util/ConstUtils.mjs +0 -14
- package/esm2020/src/util/FlowMonitorQueue.mjs +0 -453
- package/esm2020/src/util/HeapSort.mjs +0 -70
- 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/esm2020/src/util/cookie.service.mjs +0 -92
- 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
@@ -1,24 +1,24 @@
|
|
1
|
-
export var EventSubType;
|
2
|
-
(function (EventSubType) {
|
3
|
-
EventSubType[EventSubType["Normal"] = 0] = "Normal";
|
4
|
-
EventSubType[EventSubType["CancelWithNoRollback"] = 1] = "CancelWithNoRollback";
|
5
|
-
EventSubType[EventSubType["CancelIsQuit"] = 2] = "CancelIsQuit";
|
6
|
-
EventSubType[EventSubType["RtRefreshViewUseCurrentRow"] = 3] = "RtRefreshViewUseCurrentRow";
|
7
|
-
EventSubType[EventSubType["ExitDueToError"] = 4] = "ExitDueToError";
|
8
|
-
})(EventSubType || (EventSubType = {}));
|
9
|
-
export var ClientTargetedCommandType;
|
10
|
-
(function (ClientTargetedCommandType) {
|
11
|
-
ClientTargetedCommandType["Abort"] = "A";
|
12
|
-
ClientTargetedCommandType["OpenURL"] = "P";
|
13
|
-
ClientTargetedCommandType["Verify"] = "V";
|
14
|
-
ClientTargetedCommandType["EnhancedVerify"] = "E";
|
15
|
-
ClientTargetedCommandType["Result"] = "S";
|
16
|
-
ClientTargetedCommandType["AddRange"] = "R";
|
17
|
-
ClientTargetedCommandType["ClientRefresh"] = "C";
|
18
|
-
ClientTargetedCommandType["AddLocate"] = "L";
|
19
|
-
ClientTargetedCommandType["AddSort"] = "T";
|
20
|
-
ClientTargetedCommandType["ResetRange"] = "G";
|
21
|
-
ClientTargetedCommandType["ResetLocate"] = "O";
|
22
|
-
ClientTargetedCommandType["ResetSort"] = "U";
|
23
|
-
})(ClientTargetedCommandType || (ClientTargetedCommandType = {}));
|
1
|
+
export var EventSubType;
|
2
|
+
(function (EventSubType) {
|
3
|
+
EventSubType[EventSubType["Normal"] = 0] = "Normal";
|
4
|
+
EventSubType[EventSubType["CancelWithNoRollback"] = 1] = "CancelWithNoRollback";
|
5
|
+
EventSubType[EventSubType["CancelIsQuit"] = 2] = "CancelIsQuit";
|
6
|
+
EventSubType[EventSubType["RtRefreshViewUseCurrentRow"] = 3] = "RtRefreshViewUseCurrentRow";
|
7
|
+
EventSubType[EventSubType["ExitDueToError"] = 4] = "ExitDueToError";
|
8
|
+
})(EventSubType || (EventSubType = {}));
|
9
|
+
export var ClientTargetedCommandType;
|
10
|
+
(function (ClientTargetedCommandType) {
|
11
|
+
ClientTargetedCommandType["Abort"] = "A";
|
12
|
+
ClientTargetedCommandType["OpenURL"] = "P";
|
13
|
+
ClientTargetedCommandType["Verify"] = "V";
|
14
|
+
ClientTargetedCommandType["EnhancedVerify"] = "E";
|
15
|
+
ClientTargetedCommandType["Result"] = "S";
|
16
|
+
ClientTargetedCommandType["AddRange"] = "R";
|
17
|
+
ClientTargetedCommandType["ClientRefresh"] = "C";
|
18
|
+
ClientTargetedCommandType["AddLocate"] = "L";
|
19
|
+
ClientTargetedCommandType["AddSort"] = "T";
|
20
|
+
ClientTargetedCommandType["ResetRange"] = "G";
|
21
|
+
ClientTargetedCommandType["ResetLocate"] = "O";
|
22
|
+
ClientTargetedCommandType["ResetSort"] = "U";
|
23
|
+
})(ClientTargetedCommandType || (ClientTargetedCommandType = {}));
|
24
24
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2VudW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLFlBU1g7QUFURCxXQUFZLFlBQVk7SUFFdEIsbURBQU0sQ0FBQTtJQUNOLCtFQUFvQixDQUFBO0lBQ3BCLCtEQUFZLENBQUE7SUFFWiwyRkFBMEIsQ0FBQTtJQUUxQixtRUFBYyxDQUFBO0FBQ2hCLENBQUMsRUFUVyxZQUFZLEtBQVosWUFBWSxRQVN2QjtBQUdELE1BQU0sQ0FBTixJQUFZLHlCQWFYO0FBYkQsV0FBWSx5QkFBeUI7SUFDbkMsd0NBQVcsQ0FBQTtJQUNYLDBDQUFhLENBQUE7SUFDYix5Q0FBWSxDQUFBO0lBQ1osaURBQW9CLENBQUE7SUFDcEIseUNBQVksQ0FBQTtJQUNaLDJDQUFjLENBQUE7SUFDZCxnREFBbUIsQ0FBQTtJQUNuQiw0Q0FBZSxDQUFBO0lBQ2YsMENBQWEsQ0FBQTtJQUNiLDZDQUFnQixDQUFBO0lBQ2hCLDhDQUFpQixDQUFBO0lBQ2pCLDRDQUFlLENBQUE7QUFDakIsQ0FBQyxFQWJXLHlCQUF5QixLQUF6Qix5QkFBeUIsUUFhcEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBFdmVudFN1YlR5cGUge1xyXG4gIC8vIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DQU5DRUwgaW4gcnVudGltZSBldmVudFxyXG4gIE5vcm1hbCxcclxuICBDYW5jZWxXaXRoTm9Sb2xsYmFjayxcclxuICBDYW5jZWxJc1F1aXQsXHJcbiAgLy8gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUX1JFRlJFU0hfVklFVyBpbiBydW50aW1lIGV2ZW50XHJcbiAgUnRSZWZyZXNoVmlld1VzZUN1cnJlbnRSb3csXHJcbiAgLy8gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYSVQgaW4gcnVudGltZSBldmVudFxyXG4gIEV4aXREdWVUb0Vycm9yXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZW51bSBDbGllbnRUYXJnZXRlZENvbW1hbmRUeXBlIHtcclxuICBBYm9ydCA9ICdBJyxcclxuICBPcGVuVVJMID0gJ1AnLFxyXG4gIFZlcmlmeSA9ICdWJyxcclxuICBFbmhhbmNlZFZlcmlmeSA9ICdFJyxcclxuICBSZXN1bHQgPSAnUycsXHJcbiAgQWRkUmFuZ2UgPSAnUicsXHJcbiAgQ2xpZW50UmVmcmVzaCA9ICdDJyxcclxuICBBZGRMb2NhdGUgPSAnTCcsXHJcbiAgQWRkU29ydCA9ICdUJyxcclxuICBSZXNldFJhbmdlID0gJ0cnLFxyXG4gIFJlc2V0TG9jYXRlID0gJ08nLFxyXG4gIFJlc2V0U29ydCA9ICdVJ1xyXG59XHJcbiJdfQ==
|
@@ -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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a0NBQWtDO2dCQUNqRSxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLEtBQUssR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBR2xDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuQixVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RyxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ2QsQ0FBQztpQkFDSSxDQUFDO2dCQUNKLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUN0RixNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbn0gZnJvbSBcIi4uL0NvbW1hbmRzUHJvY2Vzc29yQmFzZVwiO1xyXG5pbXBvcnQge01pcnJvclBybU1hcH0gZnJvbSBcIi4uL3V0aWwvUHJtTWFwXCI7XHJcbmltcG9ydCB7Tk51bWJlciwgTlN0cmluZywgU3RyaW5nQnVpbGRlcn0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcblxyXG5pbXBvcnQge0Rpc3BsYXlDb252ZXJ0b3J9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tIFwiLi4vQ29uc3RJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtJQ2xpZW50Q29tbWFuZH0gZnJvbSBcIi4uL2NvbW1hbmRzL0lDbGllbnRDb21tYW5kXCI7XHJcbmltcG9ydCB7Q29tbWFuZEZhY3Rvcnl9IGZyb20gXCIuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9Db21tYW5kRmFjdG9yeVwiO1xyXG5pbXBvcnQge1JlbW90ZUNvbW1hbmRzUHJvY2Vzc29yfSBmcm9tIFwiLi4vcmVtb3RlL1JlbW90ZUNvbW1hbmRzUHJvY2Vzc29yXCI7XHJcbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gXCIuL0Vudmlyb25tZW50XCI7XHJcbmltcG9ydCB7TGFzdEZvY3VzZWRNYW5hZ2VyfSBmcm9tIFwiLi4vcnQvTGFzdEZvY3VzZWRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QWNjZXNzSGVscGVyfSBmcm9tIFwiLi4vQWNjZXNzSGVscGVyXCI7XHJcbmltcG9ydCB7TWlycm9yU3RyaW5nfSBmcm9tIFwiLi9NaXJyb3JTdHJpbmdcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgbWFuYWdlciBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXNcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEVudlBhcmFtc1RhYmxlIGV4dGVuZHMgTWlycm9yUHJtTWFwPE1pcnJvclN0cmluZz4ge1xyXG5cclxuICBzdGF0aWMgSW5zdGFuY2U6IEVudlBhcmFtc1RhYmxlID0gbmV3IEVudlBhcmFtc1RhYmxlKCk7XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcihNaXJyb3JTdHJpbmcpO1xyXG4gICAgdGhpcy5taXJyb3JlZElEID0gQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VOVl9QQVJBTTtcclxuICB9XHJcblxyXG4gIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQuXHJcbiAgLy8gVmVyaWZ5IHRoZSBzZWN0aW9uIG5hbWUgZXhpc3RzIGJlZm9yZSBnZXR0aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBiYXNlIGNsYXNzLlxyXG4gIC8vIFJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBkb2VzIG5vdCBleGlzdC5cclxuICBnZXQoczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB2YWxOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgbGV0IHJldDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICAvLyBJZiBzZWN0aW9uIGlzIG5vdCBkZWZpbmVkLCBhZGQgdGhlIGRlZmF1bHQgc2VjdGlvblxyXG4gICAgaWYgKHMuY2hhckF0KDApICE9PSAnWycpIHtcclxuICAgICAgdmFsTmFtZSA9IHM7XHJcbiAgICAgIHMgPSBOU3RyaW5nLkluc2VydChzLCAwLCBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19FTlZfQlJBQ0tFVFMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHdlIGRvIGhhdmUgdGhlIHNlY3Rpb24gbmFtZSxhYW5kIGl0IGlzIE1BR0lDX0VOViwgd2UgbmVlZCB0aGUgdmFyaWFibGUncyBuYW1lXHJcbiAgICBlbHNlIGlmIChzLnN0YXJ0c1dpdGgoQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfRU5WX0JSQUNLRVRTKSlcclxuICAgICAgdmFsTmFtZSA9IHMuc3Vic3RyKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUy5sZW5ndGgpO1xyXG5cclxuICAgIC8vIGlmIGl0IGlzIG5vdCBhIGxvZ2ljYWwgbmFtZSwgaXQgaXMgY2FzZSBpbnNlbnNpdGl2ZVxyXG4gICAgaWYgKCFzLnN0YXJ0c1dpdGgoQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTE9HSUNBTF9OQU1FU19CUkFDS0VUUykpXHJcbiAgICAgIHMgPSBzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAvLyBjaGVjayB0aGUgdmFsdWUncyBuYW1lIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGdldCBpdCBmcm9tIHRoZSBydW50aW1lIGVudmlyb25tZW50XHJcbiAgICBpZiAodmFsTmFtZSAhPT0gbnVsbClcclxuICAgICAgcmV0ID0gdGhpcy5nZXRGcm9tRW52aXJvbm1lbnQodmFsTmFtZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gbnVsbClcclxuICAgICAgcmV0dXJuIHJldDtcclxuXHJcbiAgICAvLyB2YWx1ZSBub3QgaW4gcnVudGltZSBlbnZpcm9ubWVudCAtIGdldCBpdCBmcm9tIHRoZSB0YWJsZVxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHJlc3VsdE9iamVjdDogTWlycm9yU3RyaW5nID0gc3VwZXIuZ2V0dmFsdWUocyk7XHJcblxyXG4gICAgICBpZiAocmVzdWx0T2JqZWN0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0ID0gcmVzdWx0T2JqZWN0LlRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIC8vIElmIGl0IG1heSBiZSBhIHZhcmlhYmxlIHRoYXQgYmVsb25ncyB0byB0aGUgc2VydmVyJ3MgY29udGV4dC9jb21wb25lbnQsIHByb2Nlc3MgaXRcclxuICAgICAgICBpZiAodmFsTmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0ID0gdGhpcy5nZXRQcm9jZXNzZWRWYWx1ZSh2YWxOYW1lLCByZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4X0JFKSB7XHJcbiAgICAgIC8vIGlmIHN0cmluZyBub3QgaW4gZGljdGlvbmFyeVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHBsYWNlIFwibnVtYmVyXCIgaW4gc2VjdGlvbiBcInNlY3Rpb25cIlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzZWN0aW9uXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bWJlclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRsbihzZWN0aW9uOiBzdHJpbmcsIG51bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHNlY3Rpb24gPSBzZWN0aW9uLnRvVXBwZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgbGV0IHNlY3Rpb25Gb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBrZXlzOiBzdHJpbmdbXSA9IHRoaXMudmFsdWVzLktleXM7XHJcblxyXG4gICAgLy8gTG9vcCBvdmVyIGtleXMsIGZpbmQgdGhvc2UgdGhhdCBzdGFydCB3aXRoIG91ciBzZWN0aW9uIG5hbWVcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQga2V5OiBzdHJpbmcgPSBrZXlzW2ldO1xyXG5cclxuICAgICAgaWYgKGtleS5zdGFydHNXaXRoKHNlY3Rpb24pKSB7XHJcbiAgICAgICAgc2VjdGlvbkZvdW5kID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlciA+IDEpXHJcbiAgICAgICAgICBudW1iZXItLTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgLy8gZm91bmQgd2hhdCB3ZSBuZWVkZWQsIGJ1aWxkIHRoZSBcIm5hbWU9dmFsdWVcIiBzdHJpbmdcclxuICAgICAgICAgIHJldHVybiBrZXkuc3Vic3RyKHNlY3Rpb24ubGVuZ3RoKSArIFwiPVwiICsgdGhpcy52YWx1ZXMuZ2V0X0l0ZW0oa2V5KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBJZiB3ZSBnb3QgdG8gdGhlIHJpZ2h0IHNlY3Rpb24gYW5kIHBhc3NlZCBpdCwgbm8gbmVlZCB0byBjb250aW51ZSBsb29raW5nXHJcbiAgICAgIGVsc2UgaWYgKHNlY3Rpb25Gb3VuZClcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cnkgYW5kIGdldCB0aGUgZW52IHZhcmlhYmxlJ3MgdmFsdWUgZnJvbSB0aGUgcnVudGltZSBlbnZpcm9ubWVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxOYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0RnJvbUVudmlyb25tZW50KHZhbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHZhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREVDSU1BTF9TRVBBUkFUT1I6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLkdldERlY2ltYWwoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RBVEU6XHJcbiAgICAgICAgcmV0dXJuIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0RGF0ZUNoYXIoKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElNRTpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0VGltZSgpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfT1dORVI6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmdldE93bmVyKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFTU9ERTpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RGF0ZU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NFTlRVUlk6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLkdldENlbnR1cnkoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpKS50b1N0cmluZygpO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSURMRVRJTUU6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmdldElkbGVUaW1lKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1VQRF9JTl9RVUVSWTpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuYWxsb3dVcGRhdGVJblF1ZXJ5TW9kZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DUkVfSU5fTU9ESUZZOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5hbGxvd0NyZWF0ZUluTW9kaWZ5TW9kZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX0lOQUNUSVZJVFlfVElNRU9VVDpcclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KCkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfVU5MT0FEX1RJTUVPVVQ6XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmdldENvbnRleHRVbmxvYWRUaW1lb3V0KCkudG9TdHJpbmcoKTtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RFUk1JTkFMOlxyXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRUZXJtaW5hbCgpLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9XRUJDTElFTlRfUkVJTklUX1NFU1NJT046XHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50Lkluc3RhbmNlLmdldFdlYkNsaWVudFJlaW5pdFNlc3Npb24oKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRoZSBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlJ3MgdmFsdWUsIHRvIHJldHVybiBpdCBpbiB0aGUgcmlnaHRcclxuICAvLy8gICBmb3JtYXQgZm9yIGNvbnRleHQvY29tcG9uZW50IHZhbHVlcyB0aGF0IGFyZSBub3QgdXNlZCBieSB0aGUgY2xpZW50LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxOYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0UHJvY2Vzc2VkVmFsdWUodmFsTmFtZTogc3RyaW5nLCB2YWw6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgLy8gVGhlIGxpc3Qgb2YgdmFyaWFibGVzIGlzIHNpbWlsYXIgdG8gdGhhdCBpbiB0aGUgc2VydmVyLCBpbiBlbnZfY29tcC5jcHAsIEVOVjo6ZW52X3ZhbF90b19zdHJcclxuICAgIHN3aXRjaCAodmFsTmFtZS50b0xvd2VyQ2FzZSgpKSB7XHJcblxyXG4gICAgICAvLyB2YXJpYWJsZSBpcyBpbnRlZ2VyXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9IVFRQX1RJTUVPVVQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SVEZfQlVGRkVSX1NJWkU6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SQU5HRV9QT1BfVElNRTpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RFTVBfUE9QX1RJTUU6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9CQVRDSF9QQUlOVF9USU1FOlxyXG4gICAgICAgIHJldHVybiBOTnVtYmVyLlBhcnNlKHZhbCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIC8vIHZhcmlhYmxlIGlzIGJvb2xlYW5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1VTRV9TSUdORURfQlJPV1NFUl9DTElFTlQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DTE9TRV9QUklOVEVEX1RBQkxFU19JTl9TVUJUQVNLUzpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0dFTkVSSUNfVEVYVF9QUklOVElORzpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0hJR0hfUkVTT0xVVElPTl9QUklOVDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX01FUkdFX1RSSU06XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9PUklHSU5BTF9JTUFHRV9MT0FEOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUFJJTlRfREFUQV9UUklNOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUFNDUklQVF9QUklOVF9OVDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfQ09OVl9BRERfU0xBU0g6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0ZVTExfRVhQQU5EX1BSSU5UOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9GVUxMX1RFWFQ6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0xBU1RfTElORV9QUklOVDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfUFJJTlRFUl9PRU06XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTUJFRF9GT05UUzpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NFTlRFUl9TQ1JFRU5fSU5fT05MSU5FOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUkVQT1NJVElPTl9BRlRFUl9NT0RJRlk6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JU0FNX1RSQU5TQUNUSU9OOlxyXG4gICAgICAgIHJldHVybiAodmFsWzBdID09PSAnWScgfHwgdmFsWzBdID09PSAnMScpID8gXCJZXCIgOiBcIk5cIjtcclxuXHJcbiAgICAgIC8vIHZhcmlhYmxlIGlzIGEgY2hhcmFjdGVyXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USU1FX1NFUEFSQVRPUjpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lPVElNSU5HOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEhPVVNBTkRfU0VQQVJBVE9SOlxyXG4gICAgICAgIHJldHVybiB2YWxbMF0udG9TdHJpbmcoKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCB0aGUgdmFyaWFibGU6XHJcbiAgLy8vICAgMS4gcGFyc2UgdGhlIHN0cmluZ1xyXG4gIC8vLyAgIDIuIGNyZWF0ZSB0aGUgcGFyYW0vdmFsdWUgY291cGxlc1xyXG4gIC8vLyAgIDMuIGZvciBlYWNoIGNvdXBsZTpcclxuICAvLy8gICAzYS4gdmVyaWZ5IHRoZSBzZWN0aW9uIG5hbWUgZXhpc3RzXHJcbiAgLy8vICAgM2IuIHZlcmlmeSB0aGUgdmFyaWFibGUgaXMgbm90IHVubW9kaWZpZWFibGVcclxuICAvLy8gICAzYy4gc2V0IHRoZSB2YXJpYWJsZSBpbiB0aGUgYmFzZSBjbGFzc1xyXG4gIC8vLyAgIDNkLiBjaGVjayBhbmQgY2hhbmdlIHRoZSBlbnZpcm9ubWVudCBkYXRhIGlmIG5lZWRlZFxyXG4gIC8vLyAgIDQuIElmIHJlcXVpcmVkLCBzZW5kIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ1cGRhdGVJbmlcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHVibGljIGFzeW5jIHNldChzOiBzdHJpbmcsIHVwZGF0ZUluaTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IGFsbE9LOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBzZW5kVG9TZXJ2ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBuYW1lOiBzdHJpbmcsIHZhbDtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgc2VydmVyVmFsOiBzdHJpbmcgPSBzO1xyXG5cclxuICAgIC8vIFN0cmluZyBwYXJzaW5nOiBldmVyeSBudW1iZXIgaW4gJ29mZnNldHMnIHNob3dzIHRoZSBvZmZzZXQgdG8gdGhlIGJlZ2lubmluZyBvZiBhIG5hbWUgb3IgdmFsdWVcclxuICAgIC8vIDFzdCBvZmZzZXQgaXMgYWx3YXlzIDBcclxuICAgIGxldCBvZmZzZXRzOiBudW1iZXJbXSA9IG5ldyBBcnJheShzLmxlbmd0aCArIDEpO1xyXG4gICAgbGV0IG9mZnNldHNDaGFyczogc3RyaW5nW10gPSBuZXcgQXJyYXkocy5sZW5ndGggKyAxKTtcclxuXHJcbiAgICBvZmZzZXRzWzBdID0gMDtcclxuICAgIG9mZnNldHNDaGFyc1swXSA9ICdzJztcclxuICAgIGxldCBuZXh0T2Zmc2V0OiBudW1iZXIgPSAxO1xyXG5cclxuICAgIC8vIExvb3Agb3ZlciBzdHJpbmcsIGZpbmQgYWxsIHRoZSAnPScsICcsJyBhbmQgJyonIHRoYXQgYXJlIG5vdCBwcmVjZWVkZWQgYnkgYSAnXFwnLlxyXG4gICAgZm9yIChpID0gMTsgaSA8IHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKChzW2ldID09PSAnPScgfHwgc1tpXSA9PT0gJywnKSAmJiBzW2kgLSAxXSAhPT0gJ1xcXFwnKSB7XHJcbiAgICAgICAgb2Zmc2V0c1tuZXh0T2Zmc2V0XSA9IGkgKyAxO1xyXG4gICAgICAgIG9mZnNldHNDaGFyc1tuZXh0T2Zmc2V0XSA9IHNbaV07XHJcbiAgICAgICAgbmV4dE9mZnNldCsrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzW2ldID09PSAnKicpIHtcclxuICAgICAgICBzID0gTlN0cmluZy5SZW1vdmUocywgaSwgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNbaV0gPT09ICdcXFxcJykge1xyXG4gICAgICAgIHMgPSBOU3RyaW5nLlJlbW92ZShzLCBpLCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCB0aGUgZmluYWwgb2Zmc2V0IGZvciB0aGUgZW5kIG9mIHRoZSBzdHJpbmdcclxuICAgIG9mZnNldHNbbmV4dE9mZnNldF0gPSBzLmxlbmd0aCArIDE7XHJcbiAgICBvZmZzZXRzQ2hhcnNbbmV4dE9mZnNldF0gPSAnXFwwJztcclxuICAgIG5leHRPZmZzZXQrKztcclxuXHJcbiAgICAvLyBnbyBvdmVyIHRoZSBjYWxjdWxhdGVkIG9mZnNldHMuIHRoZSBsYXN0IG9uZSBpcyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHNvIGl0IGlzIGlnbm9yZWRcclxuICAgIGZvciAoaSA9IDA7IGkgPCBuZXh0T2Zmc2V0IC0gMTsgaSsrKSB7XHJcbiAgICAgIC8vIGdldCB0aGUgdmFyaWFibGUgbmFtZVxyXG4gICAgICBuYW1lID0gcy5zdWJzdHIob2Zmc2V0c1tpXSwgb2Zmc2V0c1tpICsgMV0gLSBvZmZzZXRzW2ldIC0gMSk7XHJcblxyXG4gICAgICAvLyBpcyB0aGVyZSBhIHZhbHVlLCBvciBpcyBpdCBhbiBlbXB0eSB2YXJpYWJsZT9cclxuICAgICAgaWYgKHNbb2Zmc2V0c1tpICsgMV0gLSAxXSA9PT0gJz0nKSB7XHJcbiAgICAgICAgaSsrO1xyXG4gICAgICAgIGxldCB2YWxJbml0OiBudW1iZXIgPSBpO1xyXG4gICAgICAgIGxldCBhbGxvd2VkU2VwYXJhdG9yczogbnVtYmVyID0gdGhpcy5nZXRBbGxvd2VkU2VwYXJhdG9ycyhuYW1lKTtcclxuICAgICAgICBmb3IgKGxldCBzZXA6IG51bWJlciA9IDA7IHNlcCA8IGFsbG93ZWRTZXBhcmF0b3JzOyBzZXArKykge1xyXG4gICAgICAgICAgaWYgKG9mZnNldHNDaGFyc1tpICsgMV0gPT09ICcsJylcclxuICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZ2V0IHRoZSB2YWx1ZVxyXG4gICAgICAgIHZhbCA9IHMuc3Vic3RyKG9mZnNldHNbdmFsSW5pdF0sIG9mZnNldHNbaSArIDFdIC0gb2Zmc2V0c1t2YWxJbml0XSAtIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB2YWwgPSBudWxsO1xyXG5cclxuICAgICAgLy8gaXMgaXQgYSByZXNlcnZlZCB2YXJpYWJsZT9cclxuICAgICAgaWYgKHRoaXMuaXNSZXNlcnZlZExvZ2ljYWxOYW1lKG5hbWUpKSB7XHJcbiAgICAgICAgYWxsT0sgPSBmYWxzZTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgdGhlcmUncyBubyBzZWN0aW9uIG5hbWUsIGFkZCB0aGUgZGVmYXVsdCBvbmVcclxuICAgICAgaWYgKG5hbWVbMF0gIT09ICdbJylcclxuICAgICAgICBuYW1lID0gTlN0cmluZy5JbnNlcnQobmFtZSwgMCwgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfRU5WX0JSQUNLRVRTKTtcclxuXHJcbiAgICAgIC8vIElmIGl0J3Mgbm90IGEgbG9naWNhbCBuYW1lLCBpdCBpcyBjYXNlIGluc2Vuc2l0aXZlXHJcbiAgICAgIGlmICghbmFtZS5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX0xPR0lDQUxfTkFNRVNfQlJBQ0tFVFMpKVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIG5hbWUgPSBuYW1lLnRyaW0oKTtcclxuICAgICAgdmFsID0gdmFsLnRyaW0oKTtcclxuICAgICAgc2VuZFRvU2VydmVyID0gdHJ1ZTtcclxuICAgICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodmFsKSB8fFxyXG4gICAgICAgIG5hbWUuc3RhcnRzV2l0aChDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9MT0dJQ0FMX05BTUVTX0JSQUNLRVRTKSkge1xyXG4gICAgICAgIC8vIElmIHdlJ3JlIGdvaW5nIHRvIHNlbmQgaXQgdG8gdGhlIHNlcnZlciBOT1csIHdlIGRvbid0IG5lZWQgaXQgaW4gdGhlIGNoYW5nZXMgbGlzdFxyXG4gICAgICAgIHN1cGVyLnNldFZhbHVlKG5hbWUsIG5ldyBNaXJyb3JTdHJpbmcodmFsKSwgIXVwZGF0ZUluaSk7XHJcbiAgICAgICAgdGhpcy5jaGVja1NldEluRW52aXJvbm1lbnQobmFtZSwgdmFsKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgc3VwZXIucmVtb3ZlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHNob3VsZCB1cGRhdGUgdGhlIGluaSBmaWxlLCBhbmQgd2UgaGF2ZSBtb2RpZmllZCB2YXJpYWJsZXMsIHVwZGF0ZSB0aGUgc2VydmVyLlxyXG4gICAgaWYgKHVwZGF0ZUluaSAmJiBzZW5kVG9TZXJ2ZXIpIHtcclxuICAgICAgbGV0IGNtZDogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVJbmlwdXRGb3JjZVdyaXRlQ29tbWFuZChzZXJ2ZXJWYWwpO1xyXG4gICAgICBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuZ2V0TUdEYXRhKDApLkNtZHNUb1NlcnZlci5BZGQoY21kKTtcclxuXHJcbiAgICAgIC8vIGV4ZWN1dGUgY2xpZW50IHRvIHNlcnZlciBjb21tYW5kc1xyXG4gICAgICBhd2FpdCBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5HZXRJbnN0YW5jZSgpLkV4ZWN1dGUoQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbi5PTkxZX0NPTU1BTkRTKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhbGxPSztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDaGVja3MgaWYgdGhlIHZhcmlhYmxlIGlzIGEgcmVzZXJ2ZWQgbG9naWNhbCBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5hbWVcIj4gZW52IHZhcmlhYmxlIG5hbWUgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgaXQgaXMgcmVzZXJ2ZWQgPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaXNSZXNlcnZlZExvZ2ljYWxOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIC8vIFJlc2VydmVkIGxvZ2ljYWwgbmFtZXMgbWF5IGJlIGFjY2Vzc2VkIHdpdGhvdXQgYSBzZWN0aW9uIG5hbWUsIGJ1dCBhcmUgc3RvcmVkIGFzIGxvZ2ljYWwgbmFtZXMsXHJcbiAgICAvLyBzbyBpZiB3ZSBkb24ndCBoYXZlIGEgc2VjdGlvbiBuYW1lLCBpbnNlcnQgdGhlIGxvZ2ljYWwgc2VjdGlvbiBhbmQgc2VhcmNoIHRoZSB0YWJsZVxyXG4gICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XHJcbiAgICAgIG5hbWUgPSBOU3RyaW5nLkluc2VydChuYW1lLCAwLCBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9MT0dJQ0FMX05BTUVTX0JSQUNLRVRTKTtcclxuICAgICAgaWYgKHRoaXMudmFsdWVzLkNvbnRhaW5zS2V5KG5hbWUpICYmIHRoaXMudmFsdWVzLmdldF9JdGVtKG5hbWUpLmlzUmVzZXJ2ZWQoKSlcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2VwZXJhdG9ycyBhbGxvd2VkIGZvciBlbnRyaWVzIG9mIHRoaXMgc2VjdGlvbi4gbnVtYmVyIGFyZSBiYXNlZCBvblxyXG4gIC8vLyAgIGRhdGEgaW4gZW52X2tlcm4uY3BwOiBlbnZfZGVmX3BhcnNlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRBbGxvd2VkU2VwYXJhdG9ycyhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKG5hbWUuY2hhckF0KDApICE9PSAnWycpXHJcbiAgICAgIHJldHVybiAwO1xyXG5cclxuICAgIGxldCBzZWN0aW9uOiBzdHJpbmcgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmluZGV4T2YoJ10nKSAvKiddJyovIC0gMSk7XHJcbiAgICBsZXQgcGFyYW06IHN0cmluZyA9IG5hbWUuc3Vic3RyKG5hbWUuaW5kZXhPZignXScpIC8qJ10nKi8gKyAxKTtcclxuXHJcbiAgICBzd2l0Y2ggKHNlY3Rpb24udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVjpcclxuICAgICAgICBpZiAocGFyYW0udG9VcHBlckNhc2UoKSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MQU5HVUFHRS50b1VwcGVyQ2FzZSgpKVxyXG4gICAgICAgICAgcmV0dXJuIDk5OTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9NQUdJQ19TWVNURU1TOlxyXG4gICAgICAgIHJldHVybiA4O1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0RCTVM6XHJcbiAgICAgICAgcmV0dXJuIDEzO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX1NFUlZFUlM6XHJcbiAgICAgICAgcmV0dXJuIDY7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfQ09NTVM6XHJcbiAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfUFJJTlRFUlM6XHJcbiAgICAgICAgcmV0dXJuIDM7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfU1lTVEVNX01FTlU6XHJcbiAgICAgICAgcmV0dXJuIDExO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0RBVEFCQVNFUzpcclxuICAgICAgICByZXR1cm4gMjE7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfTEFOR1VBR0U6XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fTUFHSUNfU0VSVklDRVM6XHJcbiAgICAgICAgcmV0dXJuIDg7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuSU5JX1NFQ1RJT05fVE9PTFNfTUVOVTpcclxuICAgICAgICByZXR1cm4gNztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDaGVjayBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlIGFmZmVjdHMgdGhlIGVudmlyb25tZW50IHZhbHVlcyxcclxuICAvLy8gICBhbmQgY2hhbmdlIHRoZSBlbnZpcm9ubWVudCBkYXRhIGFjY29yZGluZ2x5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGNoZWNrU2V0SW5FbnZpcm9ubWVudChuYW1lOiBzdHJpbmcsIHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAobmFtZS5zdGFydHNXaXRoKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUykpIHtcclxuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKENvbnN0SW50ZXJmYWNlLklOSV9TRUNUSU9OX01BR0lDX0VOVl9CUkFDS0VUUy5sZW5ndGgpO1xyXG5cclxuICAgICAgc3dpdGNoIChuYW1lLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREVDSU1BTF9TRVBBUkFUT1I6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXREZWNpbWFsU2VwYXJhdG9yKHZhbFswXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREFURTpcclxuICAgICAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2Uuc2V0RGF0ZUNoYXIodmFsWzBdLmNoYXJDb2RlQXQoMCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RJTUU6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRUaW1lU2VwYXJhdG9yKHZhbFswXSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfT1dORVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRPd25lcih2YWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RBVEVNT0RFOlxyXG4gICAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2Uuc2V0RGF0ZU1vZGUoTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldEN1cnJUYXNrKCkuZ2V0Q29tcElkeCgpLCB2YWxbMF0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NFTlRVUlk6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRDZW50dXJ5KExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSwgTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JRExFVElNRTpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldElkbGVUaW1lKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSwgTk51bWJlci5QYXJzZSh2YWwpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VUERfSU5fUVVFUllfTE9XRVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRBbGxvd1VwZGF0ZUluUXVlcnlNb2RlKExhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRDdXJyVGFzaygpLmdldENvbXBJZHgoKSxcclxuICAgICAgICAgICAgdmFsWzBdID09PSAnMScpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NSRV9JTl9NT0RJRllfTE9XRVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRBbGxvd0NyZWF0ZUluTW9kaWZ5TW9kZShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCksXHJcbiAgICAgICAgICAgIHZhbFswXSA9PT0gJzEnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX0lOQUNUSVZJVFlfVElNRU9VVF9MT1dFUjpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldENvbnRleHRJbmFjdGl2aXR5VGltZW91dChOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfSU5BQ1RJVklUWV9XQVJOSU5HX1RJTUVfTE9XRVI6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRDb250ZXh0SW5hY3Rpdml0eVdhcm5pbmdUaW1lKE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9VTkxPQURfVElNRU9VVF9MT1dFUjpcclxuICAgICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLnNldENvbnRleHRVbmxvYWRUaW1lb3V0KE5OdW1iZXIuUGFyc2UodmFsKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEVSTUlOQUw6XHJcbiAgICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5zZXRUZXJtaW5hbChOTnVtYmVyLlBhcnNlKHZhbCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgbG9naWNhbCBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPmluZGV4IG9mIHRoZSBsb2dpY2FsIG5hbWU8L3BhcmFtPlxyXG4gIHRyYW5zbGF0ZShsb2dpY2FsTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIobG9naWNhbE5hbWUpO1xyXG4gICAgdGhpcy5sb2coc3RyaW5nQnVpbGRlcik7XHJcbiAgICByZXR1cm4gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cmluZ0JsZHJcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgbG9nKHN0cmluZ0JsZHI6IFN0cmluZ0J1aWxkZXIpOiB2b2lkIHtcclxuICAgIGxldCBmaW5pc2hlZDogYm9vbGVhbjtcclxuICAgIGRvIHtcclxuICAgICAgbGV0IG9mZnNldDogbnVtYmVyID0gMDtcclxuICAgICAgZmluaXNoZWQgPSB0cnVlO1xyXG4gICAgICB3aGlsZSAob2Zmc2V0IDwgc3RyaW5nQmxkci5MZW5ndGggJiYgc3RyaW5nQmxkci5nZXRfSXRlbShvZmZzZXQpID4gJ1xcMCcvKidcdTAwMDAnKi8pIHtcclxuXHJcbiAgICAgICAgLy8gJyQnIHdhcyBkZWZpbmUgdGhlIGxvZ2ljYWwgbmFtZSwgbm90IHVzZWQgYW55IG1vcmVcclxuICAgICAgICBpZiAoc3RyaW5nQmxkci5nZXRfSXRlbShvZmZzZXQpID09PSAnJScpIHtcclxuICAgICAgICAgIGxldCBvbGRMZW5ndGg6IG51bWJlciA9IHN0cmluZ0JsZHIuTGVuZ3RoO1xyXG4gICAgICAgICAgb2Zmc2V0ID0gdGhpcy5sb2dfdHJhbnMoc3RyaW5nQmxkciwgb2Zmc2V0KTtcclxuICAgICAgICAgIGlmIChvbGRMZW5ndGggIT09IHN0cmluZ0JsZHIuTGVuZ3RoKVxyXG4gICAgICAgICAgICBmaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgKyAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoIWZpbmlzaGVkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJpbmdCbGRyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9mZnNldFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBsb2dfdHJhbnMoc3RyaW5nQmxkcjogU3RyaW5nQnVpbGRlciwgb2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGlnbm9yZVRyYW5zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgc3RhcnRTeW06IG51bWJlciA9IG9mZnNldDtcclxuICAgIGxldCBlbmRTeW06IG51bWJlciA9IG9mZnNldCArIDE7XHJcblxyXG4gICAgLy8gZmluZCB0aGUgZW5kIG9mIHRoZSBzeW1ib2xcclxuICAgIHdoaWxlIChlbmRTeW0gPCBzdHJpbmdCbGRyLkxlbmd0aCkge1xyXG4gICAgICBpZiAoc3RyaW5nQmxkci5nZXRfSXRlbShlbmRTeW0pID09PSAnJScpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGVuZFN5bSsrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCAxIHRvIHRoZSBsZW4gdG8gZ2V0IHRvIHRoZSBlbmQgb2YgdGhlIHN5bWJvbCBvciBpZiBubyBlbmQgc3ltYm9sIHdhcyBmb3VuZCBhZGRcclxuICAgIGlmIChlbmRTeW0gPj0gc3RyaW5nQmxkci5MZW5ndGgpIHtcclxuICAgICAgb2Zmc2V0ID0gZW5kU3ltO1xyXG4gICAgICBpZ25vcmVUcmFucyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzdHJpbmdCbGRyLmdldF9JdGVtKGVuZFN5bSkgIT09ICclJylcclxuICAgICAgb2Zmc2V0Kys7XHJcblxyXG4gICAgaWYgKCFpZ25vcmVUcmFucykge1xyXG4gICAgICBsZXQgc3ltOiBzdHJpbmcgPSBDb25zdEludGVyZmFjZS5JTklfU0VDVElPTl9MT0dJQ0FMX05BTUVTX0JSQUNLRVRTICtcclxuICAgICAgICBzdHJpbmdCbGRyLlRvU3RyaW5nKHN0YXJ0U3ltICsgMSwgZW5kU3ltIC0gc3RhcnRTeW0gLSAxKTtcclxuICAgICAgbGV0IHRyYW5zOiBzdHJpbmcgPSB0aGlzLmdldChzeW0pO1xyXG5cclxuICAgICAgLy8gc2V0IHRoZSBvZmZzZXQgdG8gdGhlIG5leHQgY2hhciBhZnRlciB0aGUgZW5kaW5nICUgb2YgdGhlIG5hbWVcclxuICAgICAgaWYgKHRyYW5zID09PSBudWxsKSB7XHJcbiAgICAgICAgc3RyaW5nQmxkci5SZXBsYWNlKHN0cmluZ0JsZHIuVG9TdHJpbmcob2Zmc2V0LCBlbmRTeW0gKyAxIC0gb2Zmc2V0KSwgXCJcIiwgb2Zmc2V0LCBlbmRTeW0gKyAxIC0gb2Zmc2V0KTtcclxuICAgICAgICBvZmZzZXQgKz0gMTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzdHJpbmdCbGRyLlJlcGxhY2Uoc3RyaW5nQmxkci5Ub1N0cmluZyhzdGFydFN5bSwgZW5kU3ltICsgMSAtIHN0YXJ0U3ltKSwgdHJhbnMsIHN0YXJ0U3ltLFxyXG4gICAgICAgICAgZW5kU3ltICsgMSAtIHN0YXJ0U3ltKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldDtcclxuICB9XHJcbn1cclxuIl19
|