@cartanova/qgrid-cli 2.4.8 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +18 -11
- package/README.md +18 -11
- package/bundle/.env +0 -0
- package/bundle/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.140.0/helpers/esm}/decorate.js +2 -2
- package/bundle/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.140.0/helpers/esm}/decorateMetadata.js +2 -2
- package/bundle/dist/_virtual/_rolldown/runtime.js +2 -3
- package/bundle/dist/application/monit/log-buffer.js +3 -2
- package/bundle/dist/application/monit/monit.frame.js +5 -6
- package/bundle/dist/application/monit/monit.types.js +1 -2
- package/bundle/dist/application/qgrid/conv-routing.js +1 -2
- package/bundle/dist/application/qgrid/oauth.js +1 -2
- package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -2
- package/bundle/dist/application/qgrid/qgrid-response-format.js +1 -2
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +76 -47
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +1 -2
- package/bundle/dist/application/qgrid/qgrid.frame.js +73 -97
- package/bundle/dist/application/qgrid/qgrid.types.js +11 -10
- package/bundle/dist/application/qgrid/token-subscriber.js +3 -2
- package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -2
- package/bundle/dist/application/qgrid/tool-emulation.js +1 -2
- package/bundle/dist/application/queries.generated.js +1 -2
- package/bundle/dist/application/request-log/request-log.model.js +116 -47
- package/bundle/dist/application/request-log/request-log.types.js +1 -2
- package/bundle/dist/application/request-log-step/request-log-step.model.js +3 -4
- package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -2
- package/bundle/dist/application/sonamu.generated.js +14 -15
- package/bundle/dist/application/sonamu.generated.sso.js +1 -2
- package/bundle/dist/application/token/token.model.js +3 -4
- package/bundle/dist/application/token/token.types.js +1 -2
- package/bundle/dist/codex-protocol/AbsolutePathBuf.js +0 -1
- package/bundle/dist/codex-protocol/AgentPath.js +0 -1
- package/bundle/dist/codex-protocol/ApplyPatchApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/ApplyPatchApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/AuthMode.js +0 -1
- package/bundle/dist/codex-protocol/ClientInfo.js +0 -1
- package/bundle/dist/codex-protocol/ClientNotification.js +0 -1
- package/bundle/dist/codex-protocol/ClientRequest.js +0 -1
- package/bundle/dist/codex-protocol/CollaborationMode.js +0 -1
- package/bundle/dist/codex-protocol/ContentItem.js +0 -1
- package/bundle/dist/codex-protocol/ConversationGitInfo.js +0 -1
- package/bundle/dist/codex-protocol/ConversationSummary.js +0 -1
- package/bundle/dist/codex-protocol/ExecCommandApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/ExecCommandApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/ExecPolicyAmendment.js +0 -1
- package/bundle/dist/codex-protocol/FileChange.js +0 -1
- package/bundle/dist/codex-protocol/ForcedLoginMethod.js +0 -1
- package/bundle/dist/codex-protocol/FunctionCallOutputBody.js +0 -1
- package/bundle/dist/codex-protocol/FunctionCallOutputContentItem.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchMatchType.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchParams.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchResponse.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchResult.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchSessionCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/GetAuthStatusParams.js +0 -1
- package/bundle/dist/codex-protocol/GetAuthStatusResponse.js +0 -1
- package/bundle/dist/codex-protocol/GetConversationSummaryParams.js +0 -1
- package/bundle/dist/codex-protocol/GetConversationSummaryResponse.js +0 -1
- package/bundle/dist/codex-protocol/GitDiffToRemoteParams.js +0 -1
- package/bundle/dist/codex-protocol/GitDiffToRemoteResponse.js +0 -1
- package/bundle/dist/codex-protocol/GitSha.js +0 -1
- package/bundle/dist/codex-protocol/ImageDetail.js +0 -1
- package/bundle/dist/codex-protocol/InitializeCapabilities.js +0 -1
- package/bundle/dist/codex-protocol/InitializeParams.js +0 -1
- package/bundle/dist/codex-protocol/InitializeResponse.js +0 -1
- package/bundle/dist/codex-protocol/InputModality.js +0 -1
- package/bundle/dist/codex-protocol/InternalSessionSource.js +0 -1
- package/bundle/dist/codex-protocol/LocalShellAction.js +0 -1
- package/bundle/dist/codex-protocol/LocalShellExecAction.js +0 -1
- package/bundle/dist/codex-protocol/LocalShellStatus.js +0 -1
- package/bundle/dist/codex-protocol/MessagePhase.js +0 -1
- package/bundle/dist/codex-protocol/ModeKind.js +0 -1
- package/bundle/dist/codex-protocol/NetworkPolicyAmendment.js +0 -1
- package/bundle/dist/codex-protocol/NetworkPolicyRuleAction.js +0 -1
- package/bundle/dist/codex-protocol/ParsedCommand.js +0 -1
- package/bundle/dist/codex-protocol/Personality.js +0 -1
- package/bundle/dist/codex-protocol/PlanType.js +0 -1
- package/bundle/dist/codex-protocol/RealtimeConversationVersion.js +0 -1
- package/bundle/dist/codex-protocol/RealtimeOutputModality.js +0 -1
- package/bundle/dist/codex-protocol/RealtimeVoice.js +0 -1
- package/bundle/dist/codex-protocol/RealtimeVoicesList.js +0 -1
- package/bundle/dist/codex-protocol/ReasoningEffort.js +0 -1
- package/bundle/dist/codex-protocol/ReasoningItemContent.js +0 -1
- package/bundle/dist/codex-protocol/ReasoningItemReasoningSummary.js +0 -1
- package/bundle/dist/codex-protocol/ReasoningSummary.js +0 -1
- package/bundle/dist/codex-protocol/RequestId.js +0 -1
- package/bundle/dist/codex-protocol/Resource.js +0 -1
- package/bundle/dist/codex-protocol/ResourceContent.js +0 -1
- package/bundle/dist/codex-protocol/ResourceTemplate.js +0 -1
- package/bundle/dist/codex-protocol/ResponseItem.js +0 -1
- package/bundle/dist/codex-protocol/ReviewDecision.js +0 -1
- package/bundle/dist/codex-protocol/ServerNotification.js +0 -1
- package/bundle/dist/codex-protocol/ServerRequest.js +0 -1
- package/bundle/dist/codex-protocol/SessionSource.js +0 -1
- package/bundle/dist/codex-protocol/Settings.js +0 -1
- package/bundle/dist/codex-protocol/SubAgentSource.js +0 -1
- package/bundle/dist/codex-protocol/ThreadId.js +0 -1
- package/bundle/dist/codex-protocol/ThreadMemoryMode.js +0 -1
- package/bundle/dist/codex-protocol/Tool.js +0 -1
- package/bundle/dist/codex-protocol/Verbosity.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchAction.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchContextSize.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchLocation.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchMode.js +0 -1
- package/bundle/dist/codex-protocol/WebSearchToolConfig.js +0 -1
- package/bundle/dist/codex-protocol/index.js +0 -1
- package/bundle/dist/codex-protocol/serde_json/JsonValue.js +0 -1
- package/bundle/dist/codex-protocol/v2/Account.js +0 -1
- package/bundle/dist/codex-protocol/v2/AccountLoginCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AccountRateLimitsUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AccountUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ActivePermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/ActivePermissionProfileModification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AddCreditsNudgeCreditType.js +0 -1
- package/bundle/dist/codex-protocol/v2/AddCreditsNudgeEmailStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/AdditionalFileSystemPermissions.js +0 -1
- package/bundle/dist/codex-protocol/v2/AdditionalNetworkPermissions.js +0 -1
- package/bundle/dist/codex-protocol/v2/AdditionalPermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/AgentMessageDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AnalyticsConfig.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppBranding.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppListUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppReview.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppScreenshot.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppToolApproval.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppToolsConfig.js +0 -1
- package/bundle/dist/codex-protocol/v2/ApprovalsReviewer.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppsConfig.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppsDefaultConfig.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppsListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/AppsListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/AskForApproval.js +0 -1
- package/bundle/dist/codex-protocol/v2/AutoReviewDecisionSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/ByteRange.js +0 -1
- package/bundle/dist/codex-protocol/v2/CancelLoginAccountParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CancelLoginAccountResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CancelLoginAccountStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshReason.js +0 -1
- package/bundle/dist/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CodexErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollabAgentState.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollabAgentStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollabAgentTool.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollabAgentToolCallStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/CollaborationModeMask.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecOutputDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecOutputStream.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecResizeParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecResizeResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecTerminalSize.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecTerminateParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecTerminateResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecWriteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecWriteResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionApprovalDecision.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionOutputDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionRequestApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandExecutionStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/CommandMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/Config.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigBatchWriteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigEdit.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigLayer.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigLayerMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigLayerSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigRequirements.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigRequirementsReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigValueWriteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigWarningNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfigWriteResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfiguredHookHandler.js +0 -1
- package/bundle/dist/codex-protocol/v2/ConfiguredHookMatcherGroup.js +0 -1
- package/bundle/dist/codex-protocol/v2/ContextCompactedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/CreditsSnapshot.js +0 -1
- package/bundle/dist/codex-protocol/v2/DeprecationNoticeNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolCallOutputContentItem.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolCallParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolCallResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolCallStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/DynamicToolSpec.js +0 -1
- package/bundle/dist/codex-protocol/v2/ErrorNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExecPolicyAmendment.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeature.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExperimentalFeatureStage.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigDetectResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigImportResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItem.js +0 -1
- package/bundle/dist/codex-protocol/v2/ExternalAgentConfigMigrationItemType.js +0 -1
- package/bundle/dist/codex-protocol/v2/FeedbackUploadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FeedbackUploadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangeApprovalDecision.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangeOutputDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangePatchUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileChangeRequestApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileSystemAccessMode.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileSystemPath.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileSystemSandboxEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileSystemSpecialPath.js +0 -1
- package/bundle/dist/codex-protocol/v2/FileUpdateChange.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsChangedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsCopyParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsCopyResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsCreateDirectoryParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsCreateDirectoryResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsGetMetadataParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsGetMetadataResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadDirectoryEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadDirectoryParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadDirectoryResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadFileParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsReadFileResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsRemoveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsRemoveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsUnwatchParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsUnwatchResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsWatchParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsWatchResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsWriteFileParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/FsWriteFileResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/GetAccountParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/GetAccountRateLimitsResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/GetAccountResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/GitInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/GrantedPermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianApprovalReview.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianApprovalReviewStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianCommandSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianRiskLevel.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianUserAuthorization.js +0 -1
- package/bundle/dist/codex-protocol/v2/GuardianWarningNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookEventName.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookExecutionMode.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookHandlerType.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookOutputEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookOutputEntryKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookPromptFragment.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookRunStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookRunSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookScope.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/HookTrustStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/HooksListEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/HooksListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/HooksListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ItemCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ItemStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ListMcpServerStatusParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ListMcpServerStatusResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/LoginAccountParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/LoginAccountResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/LogoutAccountResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ManagedHooksRequirements.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceAddParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceAddResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceInterface.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceLoadErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceRemoveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceRemoveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/MarketplaceUpgradeResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpAuthStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationArrayType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationBooleanSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationBooleanType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationConstOption.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationNumberSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationNumberType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationObjectType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationPrimitiveSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationStringFormat.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationStringSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationStringType.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationTitledEnumItems.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationUntitledEnumItems.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpResourceReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpResourceReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerElicitationAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerElicitationRequestResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerOauthLoginCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerOauthLoginParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerOauthLoginResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerRefreshResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerStartupState.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerStatusDetail.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerStatusUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerToolCallParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpServerToolCallResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpToolCallError.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpToolCallProgressNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpToolCallResult.js +0 -1
- package/bundle/dist/codex-protocol/v2/McpToolCallStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/MemoryCitation.js +0 -1
- package/bundle/dist/codex-protocol/v2/MemoryCitationEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/MergeStrategy.js +0 -1
- package/bundle/dist/codex-protocol/v2/MigrationDetails.js +0 -1
- package/bundle/dist/codex-protocol/v2/Model.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelAvailabilityNux.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelRerouteReason.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelReroutedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelServiceTier.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelUpgradeInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelVerification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ModelVerificationNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkAccess.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkApprovalContext.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkApprovalProtocol.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkDomainPermission.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkPolicyAmendment.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkPolicyRuleAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkRequirements.js +0 -1
- package/bundle/dist/codex-protocol/v2/NetworkUnixSocketPermission.js +0 -1
- package/bundle/dist/codex-protocol/v2/NonSteerableTurnKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/OverriddenMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/PatchApplyStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/PatchChangeKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionGrantScope.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfileFileSystemPermissions.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfileModificationParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfileNetworkPermissions.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionProfileSelectionParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PermissionsRequestApprovalResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PlanDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginAuthPolicy.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginAvailability.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginDetail.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginHookSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginInstallParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginInstallPolicy.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginInstallResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginInterface.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginListMarketplaceKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginMarketplaceEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareContext.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareDeleteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareDeleteResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareDiscoverability.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareListItem.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSharePrincipal.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSharePrincipalType.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareSaveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareSaveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareTarget.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareUpdateDiscoverability.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginShareUpdateTargetsResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSkillReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSkillReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginUninstallParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginUninstallResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/PluginsMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProcessExitedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProcessOutputDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProcessOutputStream.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProcessTerminalSize.js +0 -1
- package/bundle/dist/codex-protocol/v2/ProfileV2.js +0 -1
- package/bundle/dist/codex-protocol/v2/RateLimitReachedType.js +0 -1
- package/bundle/dist/codex-protocol/v2/RateLimitSnapshot.js +0 -1
- package/bundle/dist/codex-protocol/v2/RateLimitWindow.js +0 -1
- package/bundle/dist/codex-protocol/v2/RawResponseItemCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReasoningEffortOption.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReasoningSummaryPartAddedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReasoningTextDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/RemoteControlConnectionStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/RemoteControlStatusChangedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/RequestPermissionProfile.js +0 -1
- package/bundle/dist/codex-protocol/v2/ResidencyRequirement.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReviewDelivery.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReviewStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReviewStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ReviewTarget.js +0 -1
- package/bundle/dist/codex-protocol/v2/SandboxMode.js +0 -1
- package/bundle/dist/codex-protocol/v2/SandboxPolicy.js +0 -1
- package/bundle/dist/codex-protocol/v2/SandboxWorkspaceWrite.js +0 -1
- package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ServerRequestResolvedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/SessionMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/SessionSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillDependencies.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillErrorInfo.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillInterface.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillMetadata.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillScope.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillSummary.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillToolDependency.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsChangedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsConfigWriteParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsConfigWriteResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsListEntry.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/SkillsListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/SortDirection.js +0 -1
- package/bundle/dist/codex-protocol/v2/SubagentMigration.js +0 -1
- package/bundle/dist/codex-protocol/v2/TerminalInteractionNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TextElement.js +0 -1
- package/bundle/dist/codex-protocol/v2/TextPosition.js +0 -1
- package/bundle/dist/codex-protocol/v2/TextRange.js +0 -1
- package/bundle/dist/codex-protocol/v2/Thread.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadActiveFlag.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadArchiveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadArchiveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadArchivedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadClosedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadCompactStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadCompactStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadForkParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadForkResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadGoal.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadGoalClearedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadGoalStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadGoalUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadInjectItemsParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadInjectItemsResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadItem.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadLoadedListParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadLoadedListResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadMetadataUpdateResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadNameUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadReadParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadReadResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeAudioChunk.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeClosedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeErrorNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeItemAddedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeSdpNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartTransport.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadResumeParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadResumeResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRollbackParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadRollbackResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSetNameParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSetNameResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadShellCommandParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadShellCommandResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSortKey.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadSourceKind.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStartSource.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadStatusChangedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadTokenUsage.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnarchiveParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnarchiveResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnarchivedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ThreadUnsubscribeStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/TokenUsageBreakdown.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputAnswer.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputOption.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputQuestion.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolRequestUserInputResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/ToolsV2.js +0 -1
- package/bundle/dist/codex-protocol/v2/Turn.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnDiffUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnEnvironmentParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnError.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnInterruptParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnInterruptResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnItemsView.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnPlanStep.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnPlanStepStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnPlanUpdatedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnStartedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnStatus.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnSteerParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/TurnSteerResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/UserInput.js +0 -1
- package/bundle/dist/codex-protocol/v2/WarningNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/WebSearchAction.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxReadiness.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxReadinessResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupMode.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartParams.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsSandboxSetupStartResponse.js +0 -1
- package/bundle/dist/codex-protocol/v2/WindowsWorldWritableWarningNotification.js +0 -1
- package/bundle/dist/codex-protocol/v2/WriteStatus.js +0 -1
- package/bundle/dist/i18n/en.js +1 -2
- package/bundle/dist/i18n/ko.js +1 -2
- package/bundle/dist/i18n/sd.generated.js +54 -21
- package/bundle/dist/index.js +1 -2
- package/bundle/dist/migrations/20260410171405_create__request_logs.js +1 -2
- package/bundle/dist/migrations/20260410171406_create__tokens.js +1 -2
- package/bundle/dist/migrations/20260411120624_alter_tokens_alter2.js +1 -2
- package/bundle/dist/migrations/20260415113716_alter_tokens_add_ord.js +1 -2
- package/bundle/dist/migrations/20260415134649_alter_request_logs_alter1.js +1 -2
- package/bundle/dist/migrations/20260421223627_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260423180818_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260423182017_alter_request_logs_add2_drop1_alter1.js +1 -2
- package/bundle/dist/migrations/20260423183613_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260518145411_alter_tokens_add2_drop4_alter1.js +1 -2
- package/bundle/dist/migrations/20260520112853_alter_request_logs_add3_alter1.js +1 -2
- package/bundle/dist/migrations/20260520124755_alter_request_logs_drop1_alter1.js +1 -2
- package/bundle/dist/migrations/20260520130420_create__request_log_steps.js +1 -2
- package/bundle/dist/migrations/20260520134908_alter_request_logs_add2_alter8.js +1 -2
- package/bundle/dist/migrations/20260520134909_alter_request_log_steps_add1_alter3.js +1 -2
- package/bundle/dist/migrations/20260520141449_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260521134025_alter_request_log_steps_alter1.js +1 -2
- package/bundle/dist/migrations/20260521134026_alter_request_log_steps_foreigns.js +1 -2
- package/bundle/dist/migrations/20260522181721_alter_request_log_steps_add2_alter1.js +1 -2
- package/bundle/dist/migrations/20260630223950_alter_tokens_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260701105327_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260701105328_alter_request_log_steps_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260705140614_alter_request_logs_add1_alter1.js +1 -2
- package/bundle/dist/migrations/20260706120000_alter_request_logs_add_image_cost.js +1 -2
- package/bundle/dist/migrations/20260710090000_alter_tokens_add_weight.js +1 -2
- package/bundle/dist/migrations/20260718180824_alter_request_logs_add5_alter1.js +1 -2
- package/bundle/dist/migrations/20260718180825_alter_request_log_steps_add7_alter1.js +1 -2
- package/bundle/dist/migrations/20260722174410_alter_request_logs_alter3.js +17 -0
- package/bundle/dist/migrations/20260722174411_alter_request_log_steps_alter3.js +17 -0
- package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +255 -4
- package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +1507 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +887 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +2756 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +8 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +8 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +922 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +386 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +121 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +51 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +1317 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +561 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +40 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +272 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +27 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +77 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +381 -0
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +51 -0
- package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +103 -3
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +1 -1
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +1 -1
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +1 -1
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +1 -1
- package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +1 -1
- package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +2 -3
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +4 -4
- package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +2 -2
- package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +18 -7
- package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +18 -3
- package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_2519c2e8d8013fcbc7b443879bc9da6d/node_modules/vite/dist/node/module-runner.js +1265 -0
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +6 -3
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +8 -8
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +5 -5
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +3 -3
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +46 -0
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +66 -6
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +3044 -0
- package/bundle/dist/node_modules/.pnpm/{vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496 → vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c}/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +19 -4
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_ms_f9cfcfeddd63e656d4010c98521af26c/node_modules/vitest/dist/index.js +28 -0
- package/bundle/dist/server-bootstrap.js +1 -2
- package/bundle/dist/sonamu.config.js +11 -27
- package/bundle/dist/startup-migrations.js +1 -2
- package/bundle/dist/testing/fixture.js +1 -2
- package/bundle/dist/testing/global.js +6 -7
- package/bundle/dist/testing/setup-mocks.js +3 -4
- package/bundle/dist/testing/test-database-name.js +5 -8
- package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +8 -8
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +1 -2
- package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +1 -2
- package/bundle/dist/utils/providers/anthropic/claude-session.js +5 -7
- package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +1 -2
- package/bundle/dist/utils/providers/common/credentials.js +1 -2
- package/bundle/dist/utils/providers/common/model-cost.js +3 -3
- package/bundle/dist/utils/providers/common/provider-dispatcher.js +0 -1
- package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -2
- package/bundle/dist/utils/providers/common/strictifier.js +2 -2
- package/bundle/dist/utils/providers/common/token-picker.js +1 -2
- package/bundle/dist/utils/providers/common/ttft.js +1 -2
- package/bundle/dist/utils/providers/openai/codex-rpc.js +4 -2
- package/bundle/dist/utils/providers/openai/codex-worker.js +2 -2
- package/bundle/dist/utils/providers/openai/openai-constants.js +1 -2
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +103 -40
- package/bundle/dist/utils/providers/openai/openai-quota.js +1 -2
- package/bundle/dist/utils/providers/openai/openai-refresh.js +1 -2
- package/bundle/dist/utils/subset-loaders.js +1 -2
- package/bundle/src/application/monit/monit.frame.test.ts +2 -2
- package/bundle/src/application/monit/monit.frame.ts +2 -2
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +242 -8
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +97 -57
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +400 -96
- package/bundle/src/application/qgrid/qgrid.frame.ts +85 -123
- package/bundle/src/application/qgrid/qgrid.types.ts +35 -27
- package/bundle/src/application/request-log/request-log.entity.json +2 -2
- package/bundle/src/application/request-log/request-log.model.test.ts +325 -21
- package/bundle/src/application/request-log/request-log.model.ts +233 -125
- package/bundle/src/application/request-log-step/request-log-step.entity.json +2 -2
- package/bundle/src/application/sonamu.generated.http +2 -2
- package/bundle/src/application/sonamu.generated.ts +13 -13
- package/bundle/src/i18n/sd.generated.ts +83 -14
- package/bundle/src/migrations/20260722174410_alter_request_logs_alter3.ts +19 -0
- package/bundle/src/migrations/20260722174411_alter_request_log_steps_alter3.ts +19 -0
- package/bundle/src/sonamu.config.ts +5 -23
- package/bundle/src/testing/global.ts +5 -5
- package/bundle/src/testing/test-database-name.test.ts +5 -5
- package/bundle/src/testing/test-database-name.ts +9 -8
- package/bundle/src/utils/providers/anthropic/anthropic-constants.test.ts +10 -6
- package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +9 -5
- package/bundle/src/utils/providers/anthropic/claude-session.test.ts +18 -3
- package/bundle/src/utils/providers/anthropic/claude-session.ts +4 -4
- package/bundle/src/utils/providers/common/model-cost.test.ts +1 -0
- package/bundle/src/utils/providers/common/model-cost.ts +1 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +440 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +143 -45
- package/bundle/web-dist/client/assets/{index-CmuPjbCl.js → index-B8Qj0LZK.js} +3 -3
- package/bundle/web-dist/client/assets/logs-C7R8Hvyy.js +1 -0
- package/bundle/web-dist/client/assets/{monit-B5Edhvy-.js → monit-Cj2KSodR.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-UPWScORY.js → routes-DI1rjqGY.js} +1 -1
- package/bundle/web-dist/client/assets/{sd.generated-DYuKzBY6.js → sd.generated-DbBC73_z.js} +1 -1
- package/bundle/web-dist/client/assets/{services.generated-D_SkWOo-.js → services.generated-BWyAypSh.js} +1 -1
- package/bundle/web-dist/client/assets/{show-pRp-eZIK.js → show-B9hDSX9F.js} +2 -2
- package/bundle/web-dist/client/assets/{tokens-DJlttxCM.js → tokens-xUexYz3u.js} +1 -1
- package/bundle/web-dist/client/assets/{use-update-token-mutation-CpFGLWUl.js → use-update-token-mutation-DeDBiZiM.js} +1 -1
- package/bundle/web-dist/client/index.html +2 -2
- package/bundle/web-dist/server/assets/{lazyRouteComponent-Cu6IkL8A.js → lazyRouteComponent-BCJr868T.js} +1 -1
- package/bundle/web-dist/server/assets/{logs-Dx2knN2T.js → logs-33YNafdW.js} +32 -11
- package/bundle/web-dist/server/assets/{monit-DU6PLatf.js → monit--9mVsjNU.js} +2 -2
- package/bundle/web-dist/server/assets/{routes-CTco1oJZ.js → routes-BK3Xh1UB.js} +3 -3
- package/bundle/web-dist/server/assets/{sd.generated-qzuRe35X.js → sd.generated-C3gcvRcU.js} +1 -0
- package/bundle/web-dist/server/assets/{services.generated-C8q1M41a.js → services.generated-B2_Auwvk.js} +1 -1
- package/bundle/web-dist/server/assets/{show-B3q8_GDh.js → show-Dxxxe608.js} +15 -9
- package/bundle/web-dist/server/assets/{tokens-Bvjn15h9.js → tokens-BWPVvdfi.js} +3 -3
- package/bundle/web-dist/server/assets/{use-update-token-mutation-BlZo6swF.js → use-update-token-mutation-CNBgTysy.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +23 -23
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +18 -12
- package/package.json +6 -6
- package/skills/qgrid/SKILL.md +4 -0
- package/skills/qgrid/references/ai-sdk-provider-contract.md +28 -2
- package/skills/qgrid/references/anthropic-claude-code-runtime.md +5 -4
- package/skills/qgrid/references/cli-env-and-server-boot.md +20 -8
- package/skills/qgrid/references/decision-rationale.md +4 -0
- package/skills/qgrid/references/docs-workflow.md +10 -0
- package/skills/qgrid/references/openai-codex-runtime.md +11 -3
- package/skills/qgrid/references/provider-runtime-differences.md +3 -3
- package/skills/qgrid/references/request-log-run-lifecycle.md +46 -28
- package/skills/qgrid/references/sonamu-api-web-flow.md +4 -0
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +6 -0
- package/skills/qgrid/references/tool-calling-and-multiturn.md +8 -7
- package/skills/qgrid/references/verification-and-debugging.md +1 -1
- package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.2/node_modules/@vitest/expect/dist/index.js +0 -1484
- package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.2/node_modules/@vitest/pretty-format/dist/index.js +0 -887
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2746
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/index.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.2/node_modules/@vitest/runner/dist/utils.js +0 -8
- package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.2/node_modules/@vitest/snapshot/dist/index.js +0 -662
- package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.2/node_modules/@vitest/spy/dist/index.js +0 -386
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -82
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/constants.js +0 -48
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/diff.js +0 -1307
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/display.js +0 -558
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/error.js +0 -33
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/helpers.js +0 -226
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/offset.js +0 -27
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/serialize.js +0 -77
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/source-map.js +0 -374
- package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.2/node_modules/@vitest/utils/dist/timers.js +0 -37
- package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.9.2_@emnapi_runtime@1.9.2_@types_node@25.0.7_esbuild@0.27.4_jiti@2.6.1_sass@1.98.0_tsx@4.21.0/node_modules/vite/dist/node/module-runner.js +0 -426
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496/node_modules/vitest/dist/chunks/index.DOa3dzoN.js +0 -16
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496/node_modules/vitest/dist/chunks/test.p_J6dB8a.js +0 -2910
- package/bundle/dist/node_modules/.pnpm/vitest@4.1.2_@opentelemetry_api@1.9.0_@types_node@25.0.7_msw@2.13.3_@types_node@25.0.7__ba64bc4dd2e2bdde58df187864f65496/node_modules/vitest/dist/index.js +0 -28
- package/bundle/web-dist/client/assets/logs-cXOsDli3.js +0 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import "../../../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import { QuotaThresholdExceededError } from "../../../application/qgrid/qgrid.types.js";
|
|
3
2
|
import { TokenModel } from "../../../application/token/token.model.js";
|
|
4
3
|
import { SmoothWeightedRoundRobin } from "../common/smooth-weighted-round-robin.js";
|
|
@@ -247,4 +246,4 @@ var AnthropicDispatcher = class {
|
|
|
247
246
|
//#endregion
|
|
248
247
|
export { AnthropicDispatcher };
|
|
249
248
|
|
|
250
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWRpc3BhdGNoZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvYW50aHJvcGljLWRpc3BhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbnRocm9waWNEaXNwYXRjaGVyXG4gKlxuICogT3BlbkFJRGlzcGF0Y2hlcuyZgCDri6zrpqwsIHdvcmtlciBwb29s7J2EIOuRkOuKlCDrjIDsi6Ag7JqU7LKt67OEIGZyZXNoIHNwYXduXG4gKiDthqDtgbDsnYAg7J2466mU66qo66asKE1BUCnsnLzroZwg6rSA66as7ZWY6rOgIHNtb290aCB3ZWlnaHRlZCByb3VuZC1yb2JpbiDsnLzroZwg6rOg66W464ukXG4gKlxuICogLSDrqqjrk6Ag7JqU7LKt7J2AIGZyZXNoIGAtLXNlc3Npb24taWRgIOuhnCDsi6TtlolcbiAqIC0g66mA7Yuw7YS0IOusuOunpeydgCDtgbTrnbzsnbTslrjtirjqsIAg66ekIO2YuOy2nCDrs7TrgrTripQgZnVsbCBoaXN0b3J5IOulvCDtj4ntg4TtmZTtlbQg7KCE64us7ZWc64ukLlxuICogLSDrsJzquIntlZwgc2Vzc2lvbi1pZCDrpbwgR2VuZXJhdGVSZXN1bHQudGhyZWFkQ29vcmQodGhyZWFkSWQ9c2Vzc2lvbi1pZCwgd29ya2VySWQ9dG9rZW5JZCxcbiAqICAgZXBvY2g9MCnroZwg7Jis66CkLCDsg4HsnIQoaXNzdWVDb252Q29udGV4dCnqsIAg7YG065287JeQIO2ajOyGoe2VoCDsooztkZzrpbwg66eM65Og64ukLiDri6TsnYwgdHVybiDsnbQg7KKM7ZGc66W8XG4gKiAgIO2ajOyGoe2VtOuPhCBBbnRocm9waWMg65287Jqw7YyF7JeQ64qUIOyTsOyngCDslYrripTri6QuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyBnZXRFeHBpcmVzQXQsIGdldFJlZnJlc2hUb2tlbiB9IGZyb20gXCIuLi9jb21tb24vY3JlZGVudGlhbHNcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVSZXF1ZXN0LFxuICB0eXBlIEdlbmVyYXRlUmVzdWx0LFxuICB0eXBlIEdlbmVyYXRlU3RyZWFtQ2FsbGJhY2tzLFxuICB0eXBlIFByb3ZpZGVyRGlzcGF0Y2hlcixcbn0gZnJvbSBcIi4uL2NvbW1vbi9wcm92aWRlci1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBTbW9vdGhXZWlnaHRlZFJvdW5kUm9iaW4gfSBmcm9tIFwiLi4vY29tbW9uL3Ntb290aC13ZWlnaHRlZC1yb3VuZC1yb2JpblwiO1xuaW1wb3J0IHsgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeCwgY2Fub25pY2FsQW50aHJvcGljTW9kZWwgfSBmcm9tIFwiLi9hbnRocm9waWMtY29uc3RhbnRzXCI7XG5pbXBvcnQgeyByZWFkQW50aHJvcGljUXVvdGFVc2FnZSwgdHlwZSBBbnRocm9waWNRdW90YVVzYWdlUmVzdWx0IH0gZnJvbSBcIi4vYW50aHJvcGljLXF1b3RhXCI7XG5pbXBvcnQgeyBtYWtlQW50aHJvcGljV29ya2VySWQsIHJ1bkNsYXVkZVNlc3Npb24gfSBmcm9tIFwiLi9jbGF1ZGUtc2Vzc2lvblwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJhbnRocm9waWMtZGlzcGF0Y2hlclwiXSk7XG5cbi8vIDFNIGNvbnRleHQg7KCV7IOBIOyDneyEseydgCDsi6TsuKHsg4EgMTAwcyvquYzsp4Ag6rCE64ukLiAyNDBz64qUIOyZhOy2qSDsnqXsuZjsnbwg67+QLFxuLy8g6rGw67aAK+qxsOuMgCBzeXN0ZW0g7J6s7IOd7ISxIOyngOyXsOydhCDsmYTsoITtnogg7ZW06rKw7ZWY64qUIOqwkuydgCDslYTri4jri6QuXG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAyNDBfMDAwO1xuLy8gYWNjZXNzIHRva2VuIOunjOujjCDsnoTrsJUg7J6E6rOEIOKAlCDquLDsobQgc3RhbmRhbG9uZSDqsr3roZwocWdyaWQuZGlzcGF0Y2hlci50cynsmYAg64+Z7J28KDYwcykuXG5jb25zdCBSRUZSRVNIX1NBRkVUWV9NUyA9IDYwXzAwMDtcblxuaW50ZXJmYWNlIFBvb2xlZFRva2VuIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHM7XG4gIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbDtcbiAgd2VpZ2h0OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIHF1b3RhVGhyZXNob2xkRXhjZWVkZWRNZXNzYWdlKFxuICBwcm92aWRlcjogc3RyaW5nLFxuICB0b2tlbnM6IEFycmF5PHsgdG9rZW5OYW1lOiBzdHJpbmc7IHRocmVzaG9sZDogbnVtYmVyIH0+LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZGV0YWlscyA9IHRva2Vuc1xuICAgIC5tYXAoKHRva2VuKSA9PiBgJHt0b2tlbi50b2tlbk5hbWV9ICh0aHJlc2hvbGQgJHt0b2tlbi50aHJlc2hvbGR9JSlgKVxuICAgIC5qb2luKFwiLCBcIik7XG4gIHJldHVybiBkZXRhaWxzLmxlbmd0aCA+IDBcbiAgICA/IGBBbGwgJHtwcm92aWRlcn0gdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZDogJHtkZXRhaWxzfWBcbiAgICA6IGBBbGwgJHtwcm92aWRlcn0gdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZGA7XG59XG5cbmV4cG9ydCBjbGFzcyBBbnRocm9waWNEaXNwYXRjaGVyIGltcGxlbWVudHMgUHJvdmlkZXJEaXNwYXRjaGVyIHtcbiAgLy8gdG9rZW5JZCDihpIg7ZKAIO2VreuqqS4gc3RhcnQoKS90b2tlbiDsnbTrsqTtirjroZwg7LGE7JuAXG4gIHByaXZhdGUgdG9rZW5Qb29sID0gbmV3IE1hcDxudW1iZXIsIFBvb2xlZFRva2VuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodGVkU2VsZWN0b3IgPSBuZXcgU21vb3RoV2VpZ2h0ZWRSb3VuZFJvYmluKCk7XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gT3BlbkFJRGlzcGF0Y2hlci5zdGFydCgpIOyZgCDrj5nsnbztlZjqsowgREIg7JeQ7IScIOq4sOyhtCBhbnRocm9waWMg7Yag7YGw7J2EIHNlbGYtYm9vdHN0cmFwIO2VnOuLpC5cbiAgICAvLyAo7ISc67KEIOyerOyLnOyekSDsi5wgTk9USUZZIOqwgCDslYgg7Jik66+A66GcIOu2gO2KuOyKpO2KuOueqeydtCDsl4bsnLzrqbQg7ZKA7J20IOu5iCDssYTroZwg64Ko64qU64ukLilcbiAgICAvLyDsnbTtm4Qg67OA6rK967aE7J2AIHRva2VuLXN1YnNjcmliZXIg6rCAIG9uVG9rZW5BZGRlZC9VcGRhdGVkL1JlbW92ZWQg66GcIOyghOuLrO2VnOuLpC5cbiAgICAvLyBmaW5kQWN0aXZlQnlQcm92aWRlciDqsIAgYWN0aXZlPXRydWUgKyBwcm92aWRlciDtlYTthLDrpbwgREIg7JeQ7IScIOyymOumrCDihpIgaW5hY3RpdmUg64qUIOyVoOy0iOyXkCDslYgg7Jio64ukLlxuICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEFjdGl2ZUJ5UHJvdmlkZXIoXCJBXCIsIFwiYW50aHJvcGljXCIpO1xuICAgIGZvciAoY29uc3QgdCBvZiB0b2tlbnMpIHtcbiAgICAgIHRoaXMudG9rZW5Qb29sLnNldCh0LmlkLCB7XG4gICAgICAgIGlkOiB0LmlkLFxuICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB0LmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzLFxuICAgICAgICBxdW90YVRocmVzaG9sZDogdC5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgIHdlaWdodDogdC53ZWlnaHQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMud2VpZ2h0ZWRTZWxlY3Rvci5zZXRUb2tlbih0LmlkLCB0LndlaWdodCk7XG4gICAgICBsb2dnZXIuaW5mbyhgd29ya2VyIHNwYXduZWQ6ICR7dC5uYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW5JZHMgPSBbLi4udGhpcy50b2tlblBvb2wua2V5cygpXTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHRva2VuSWRzKSB0aGlzLndlaWdodGVkU2VsZWN0b3IucmVtb3ZlVG9rZW4oaWQpO1xuICAgIHRoaXMudG9rZW5Qb29sLmNsZWFyKCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlc2V0U2NvcmVzKCk7XG4gIH1cblxuICAvLyDtmITsnqwg7ZKA7J2YIO2GoO2BsCDsiJgoc3RhcnR1cCDroZzqt7gvaGVhbHRoIOyaqSkuXG4gIGdldCB0b2tlbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Qb29sLnNpemU7XG4gIH1cblxuICAvLyBNb25pdCDtkZzsi5zsmqkg4oCUIO2SgOyXkCDsnojripQg7Yag7YGwIOydtOumhCDsiqTrg4Xsg7cgKOydtOumhOyInCDsoJXroKwpXG4gIGdldCB0b2tlbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudG9rZW5Qb29sLnZhbHVlcygpXS5tYXAoKHRva2VuKSA9PiB0b2tlbi5uYW1lKS50b1NvcnRlZCgpO1xuICB9XG5cbiAgLy8gREIgYWN0aXZlIGFudGhyb3BpYyDthqDtgbAg66qp66Gd7Jy866GcIO2SgOydhCDsnqzrj5nquLDtmZTtlZzri6QocGVyaW9kaWMgcmVjb25jaWxlL+yerOyXsOqysOyaqSkuXG4gIC8vIExJU1RFTi9OT1RJRlkg6rCAIOuBiuq4tCDrj5nslYgg7Jyg7Iuk65CcIOy2lOqwgC/sgq3soJwv67mE7Zmc7ISx7ZmU66W8IERCIOq4sOykgOycvOuhnCDri6Tsi5wg66ee7LaY64ukLlxuICAvLyDsnbTrsqTtirgg7ZW465Ok65+s66W8IOyerOyCrOyaqe2VtCDtkoAg6rCx7Iug7J20IOydvOq0gOuQmOqyjCDsoIHsmqnrkJjrj4TroZ0g7ZWc64ukOlxuICAvLyAgLSBEQiDsl5Ag7JeG64qU642wIO2SgOyXkCDsnojripQg7Yag7YGwIOKGkiBvblRva2VuUmVtb3ZlZFxuICAvLyAgLSBEQiDsl5Ag7J6I64qUIO2GoO2BsCDihpIg7Iug6rec66m0IG9uVG9rZW5BZGRlZCwg6riw7KG07J2066m0IG9uVG9rZW5VcGRhdGVkXG4gIHJlcGxhY2VUb2tlbnMoXG4gICAgcm93czogQXJyYXk8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscztcbiAgICAgIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIHdlaWdodDogbnVtYmVyO1xuICAgIH0+LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFNldChyb3dzLm1hcCgocikgPT4gci5pZCkpO1xuICAgIC8vIG9uVG9rZW5SZW1vdmVkIOqwgCB0b2tlblBvb2wg7J2EIGRlbGV0ZSDtlZjrr4DroZwg7Iic7ZqMIOykkSDsiJjsoJXsnYQg7ZS87ZWY66CkIO2CpOulvCDrqLzsoIAg7Iqk64OF7IO37ZWc64ukLlxuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBBcnJheS5mcm9tKHRoaXMudG9rZW5Qb29sLmtleXMoKSk7XG4gICAgZm9yIChjb25zdCBpZCBvZiBjdXJyZW50SWRzKSB7XG4gICAgICBpZiAoIW5leHQuaGFzKGlkKSkgdGhpcy5vblRva2VuUmVtb3ZlZChpZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgciBvZiByb3dzKSB7XG4gICAgICBpZiAodGhpcy50b2tlblBvb2wuaGFzKHIuaWQpKSB7XG4gICAgICAgIHRoaXMub25Ub2tlblVwZGF0ZWQoci5pZCwgci5uYW1lLCByLmNyZWRlbnRpYWxzLCByLnF1b3RhVGhyZXNob2xkLCByLndlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uVG9rZW5BZGRlZChyLmlkLCByLm5hbWUsIHIuY3JlZGVudGlhbHMsIHIucXVvdGFUaHJlc2hvbGQsIHIud2VpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyB0b2tlbiBldmVudHMgKHRva2VuLXN1YnNjcmliZXIg6rCAIO2YuOy2nClcbiAgb25Ub2tlbkFkZGVkKFxuICAgIGlkOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICBxdW90YVRocmVzaG9sZD86IG51bWJlciB8IG51bGwsXG4gICAgd2VpZ2h0ID0gMSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblBvb2wuc2V0KGlkLCB7IGlkLCBuYW1lLCBjcmVkZW50aWFscywgcXVvdGFUaHJlc2hvbGQsIHdlaWdodCB9KTtcbiAgICB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2V0VG9rZW4oaWQsIHdlaWdodCk7XG4gIH1cblxuICBvblRva2VuVXBkYXRlZChcbiAgICBpZDogbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHMsXG4gICAgcXVvdGFUaHJlc2hvbGQ/OiBudW1iZXIgfCBudWxsLFxuICAgIHdlaWdodCA9IDEsXG4gICk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLnNldChpZCwgeyBpZCwgbmFtZSwgY3JlZGVudGlhbHMsIHF1b3RhVGhyZXNob2xkLCB3ZWlnaHQgfSk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnNldFRva2VuKGlkLCB3ZWlnaHQpO1xuICB9XG5cbiAgb25Ub2tlblJlbW92ZWQoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLmRlbGV0ZShpZCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlbW92ZVRva2VuKGlkKTtcbiAgfVxuXG4gIC8vIHF1b3RhIO2GteqzvCDtm4Trs7Trp4zsnLzroZwg7JqU7LKt66eI64ukIHNtb290aCB3ZWlnaHRlZCByb3VuZC1yb2JpbiDshKDtg53tlZzri6QuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0VG9rZW4oKTogUHJvbWlzZTxQb29sZWRUb2tlbiB8IG51bGw+IHtcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMudG9rZW5Qb29sLnZhbHVlcygpXTtcbiAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgZWxpZ2libGUsIG92ZXJUaHJlc2hvbGRUb2tlbnMgfSA9IGF3YWl0IHRoaXMuZmlsdGVyRWxpZ2libGVUb2tlbnMocm93cyk7XG4gICAgaWYgKGVsaWdpYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogYWxsX2V4Y2VlZGVkXCIsIHtcbiAgICAgICAgcHJvdmlkZXI6IFwiYW50aHJvcGljXCIsXG4gICAgICAgIHRva2VuQ291bnQ6IHJvd3MubGVuZ3RoLFxuICAgICAgICB0aHJlc2hvbGRlZFRva2VuQ291bnQ6IHJvd3MuZmlsdGVyKChyKSA9PiB0aGlzLmhhc1F1b3RhVGhyZXNob2xkKHIpKS5sZW5ndGgsXG4gICAgICAgIG92ZXJUaHJlc2hvbGRUb2tlbnMsXG4gICAgICAgIHJlYXNvbjogXCJhbGxfZXhjZWVkZWRcIixcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IFF1b3RhVGhyZXNob2xkRXhjZWVkZWRFcnJvcihcbiAgICAgICAgcXVvdGFUaHJlc2hvbGRFeGNlZWRlZE1lc3NhZ2UoXCJhbnRocm9waWNcIiwgb3ZlclRocmVzaG9sZFRva2VucyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2VsZWN0KG5ldyBTZXQoZWxpZ2libGUubWFwKCh0b2tlbikgPT4gdG9rZW4uaWQpKSk7XG4gICAgaWYgKHNlbGVjdGVkSWQgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnRva2VuUG9vbC5nZXQoc2VsZWN0ZWRJZCkgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVyRWxpZ2libGVUb2tlbnMocm93czogUG9vbGVkVG9rZW5bXSk6IFByb21pc2U8e1xuICAgIGVsaWdpYmxlOiBQb29sZWRUb2tlbltdO1xuICAgIG92ZXJUaHJlc2hvbGRUb2tlbnM6IEFycmF5PHsgdG9rZW5OYW1lOiBzdHJpbmc7IHRocmVzaG9sZDogbnVtYmVyIH0+O1xuICB9PiB7XG4gICAgY29uc3QgdGhyZXNob2xkZWQgPSByb3dzLmZpbHRlcigodG9rZW4pID0+IHRoaXMuaGFzUXVvdGFUaHJlc2hvbGQodG9rZW4pKTtcbiAgICBpZiAodGhyZXNob2xkZWQubGVuZ3RoID09PSAwKSByZXR1cm4geyBlbGlnaWJsZTogcm93cywgb3ZlclRocmVzaG9sZFRva2VuczogW10gfTtcblxuICAgIGNvbnN0IGVsaWdpYmxlSWRzID0gbmV3IFNldChcbiAgICAgIHJvd3MuZmlsdGVyKCh0b2tlbikgPT4gIXRoaXMuaGFzUXVvdGFUaHJlc2hvbGQodG9rZW4pKS5tYXAoKHRva2VuKSA9PiB0b2tlbi5pZCksXG4gICAgKTtcbiAgICBjb25zdCBvdmVyVGhyZXNob2xkVG9rZW5zOiBBcnJheTx7IHRva2VuTmFtZTogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9PiA9IFtdO1xuICAgIGNvbnN0IGNoZWNrcyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIHRocmVzaG9sZGVkLm1hcChhc3luYyAodG9rZW4pID0+ICh7XG4gICAgICAgIHRva2VuLFxuICAgICAgICByZXN1bHQ6IGF3YWl0IHJlYWRBbnRocm9waWNRdW90YVVzYWdlKHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuKSxcbiAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgY2hlY2tzLmZvckVhY2goKGNoZWNrLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGNoZWNrLnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhyZXNob2xkZWRbaW5kZXhdO1xuICAgICAgICBpZiAoIXRva2VuKSByZXR1cm47XG4gICAgICAgIHRoaXMubG9nUXVvdGFMb29rdXBGYWlsT3Blbih0b2tlbiwgU3RyaW5nKGNoZWNrLnJlYXNvbikpO1xuICAgICAgICBlbGlnaWJsZUlkcy5hZGQodG9rZW4uaWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gY2hlY2sudmFsdWUudG9rZW47XG4gICAgICBjb25zdCByZXN1bHQgPSBjaGVjay52YWx1ZS5yZXN1bHQ7XG4gICAgICBpZiAocmVzdWx0LmtpbmQgPT09IFwibG9va3VwX2ZhaWxlZFwiKSB7XG4gICAgICAgIHRoaXMubG9nUXVvdGFMb29rdXBGYWlsT3Blbih0b2tlbiwgcmVzdWx0LnJlYXNvbik7XG4gICAgICAgIGVsaWdpYmxlSWRzLmFkZCh0b2tlbi5pZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC51dGlsaXphdGlvblBjdCA+PSB0b2tlbi5xdW90YVRocmVzaG9sZCkge1xuICAgICAgICB0aGlzLmxvZ1F1b3RhT3ZlclRocmVzaG9sZCh0b2tlbiwgcmVzdWx0KTtcbiAgICAgICAgb3ZlclRocmVzaG9sZFRva2Vucy5wdXNoKHsgdG9rZW5OYW1lOiB0b2tlbi5uYW1lLCB0aHJlc2hvbGQ6IHRva2VuLnF1b3RhVGhyZXNob2xkIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVsaWdpYmxlSWRzLmFkZCh0b2tlbi5pZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBlbGlnaWJsZTogcm93cy5maWx0ZXIoKHRva2VuKSA9PiBlbGlnaWJsZUlkcy5oYXModG9rZW4uaWQpKSwgb3ZlclRocmVzaG9sZFRva2VucyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNRdW90YVRocmVzaG9sZCh0b2tlbjogUG9vbGVkVG9rZW4pOiB0b2tlbiBpcyBQb29sZWRUb2tlbiAmIHsgcXVvdGFUaHJlc2hvbGQ6IG51bWJlciB9IHtcbiAgICByZXR1cm4gdG9rZW4ucXVvdGFUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCAmJiB0b2tlbi5xdW90YVRocmVzaG9sZCAhPT0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9nUXVvdGFPdmVyVGhyZXNob2xkKFxuICAgIHRva2VuOiBQb29sZWRUb2tlbiAmIHsgcXVvdGFUaHJlc2hvbGQ6IG51bWJlciB9LFxuICAgIHJlc3VsdDogRXh0cmFjdDxBbnRocm9waWNRdW90YVVzYWdlUmVzdWx0LCB7IGtpbmQ6IFwib2tcIiB9PixcbiAgKTogdm9pZCB7XG4gICAgbG9nZ2VyLmluZm8oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogb3Zlcl90aHJlc2hvbGRcIiwge1xuICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICBjYWNoZWRVdGlsaXphdGlvbjogcmVzdWx0LnV0aWxpemF0aW9uUGN0LFxuICAgICAgY2FjaGVBZ2U6IHJlc3VsdC5jYWNoZUFnZU1zLFxuICAgICAgcmVhc29uOiBcIm92ZXJfdGhyZXNob2xkXCIsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1F1b3RhTG9va3VwRmFpbE9wZW4oXG4gICAgdG9rZW46IFBvb2xlZFRva2VuICYgeyBxdW90YVRocmVzaG9sZDogbnVtYmVyIH0sXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGxvZ2dlci53YXJuKFwicXVvdGFfdGhyZXNob2xkIGdhdGU6IGxvb2t1cF9mYWlsX29wZW5cIiwge1xuICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICByZWFzb246IFwibG9va3VwX2ZhaWxfb3BlblwiLFxuICAgICAgbG9va3VwUmVhc29uOiByZWFzb24sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZShyZXE6IEdlbmVyYXRlUmVxdWVzdCk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5ydW4ocmVxLCAoKSA9PiB7fSk7XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZVN0cmVhbShyZXE6IEdlbmVyYXRlUmVxdWVzdCwgY2I6IEdlbmVyYXRlU3RyZWFtQ2FsbGJhY2tzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnVuKHJlcSwgY2Iub25EZWx0YSwgeyBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiB0cnVlIH0pO1xuICAgICAgY2Iub25UaHJlYWRJZD8uKHJlc3VsdC50aHJlYWRDb29yZC50aHJlYWRJZCk7XG4gICAgICBjYi5vbkNvbXBsZXRlKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY2Iub25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBnZW5lcmF0ZS9nZW5lcmF0ZVN0cmVhbSDqs7XthrUg7Iuk7ZaJLiBvbkRlbHRhIOuKlCDsiqTtirjrprzsnbTrqbQg7KCQ7KeEIOuwqey2nCwg67mE7Iqk7Yq466a87J2066m0IG5vLW9wLlxuICBwcml2YXRlIGFzeW5jIHJ1bihcbiAgICByZXE6IEdlbmVyYXRlUmVxdWVzdCxcbiAgICBvbkRlbHRhOiAodDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIG9wdHM/OiB7IGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+IHtcbiAgICAvLyDsnbTrr7jsp4Ag7IOd7ISx7J2AIE9wZW5BSShjb2RleCkg6rK966GcIOyghOyaqS4gQW50aHJvcGljIOudvOyasO2MheyXkCDsnbTrr7jsp4Ag7ZSM656Y6re46rCAXG4gICAgLy8g64+E64us7ZWY66m0IOyhsOyaqe2eiCDthY3siqTtirjroZwg7Y+067Cx7ZWY7KeAIOyViuqzoCDrqoXsi5zsoIHsnLzroZwg6rGw67aA7ZWc64ukLlxuICAgIGlmIChyZXEuaW1hZ2VHZW5lcmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbWFnZSBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIEFudGhyb3BpYyByb3V0ZVwiKTtcbiAgICB9XG4gICAgLy8gbW9kZWwg7KCV6rec7ZmU66W8IGRpc3BhdGNoZXIg7KeE7J6F7KCQ7JeQ7IScIO2VnCDrsogg7ZWc64ukOiByZXN1bHQubW9kZWwgLyBydW5DbGF1ZGVTZXNzaW9uIOyghOu2gFxuICAgIC8vIGNhbm9uaWNhbChwcmVmaXgg7JeG64qUIGNvc3Qg7YKkKSDsnYQg7JOw6rKMIO2GteydvC4g66+47KeA7KCV7J2066m0IEFOVEhST1BJQ19ERUZBVUxUX01PREVMIOKAlCBxZ3JpZC5kaXNwYXRjaGVyXG4gICAgLy8g7J2YIFwic29ubmV0XCIg67OE7LmtIOyasO2ajCDssKjri6guIOygleq3nO2ZlCDqt5zsuZnsnYAgZmFsbGJhY2sg6rK966Gc7JmAIOqzteycoChjYW5vbmljYWxBbnRocm9waWNNb2RlbCkuXG4gICAgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeChyZXEubW9kZWwpO1xuICAgIGNvbnN0IG1vZGVsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwocmVxLm1vZGVsKTtcbiAgICBjb25zdCBqc29uU2NoZW1hID1cbiAgICAgIHJlcS5vdXRwdXRTY2hlbWEgIT09IHVuZGVmaW5lZCA/IEpTT04uc3RyaW5naWZ5KHJlcS5vdXRwdXRTY2hlbWEpIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLnNlbGVjdFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gYW50aHJvcGljIHRva2VucyBhdmFpbGFibGVcIik7XG5cbiAgICBjb25zdCBleGVjID0gYXN5bmMgKCk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+ID0+IHtcbiAgICAgIC8vIOunjOujjCDsnoTrsJUg7Yag7YGwIHByZWVtcHRpdmUgcmVmcmVzaCjquLDsobQgc3RhbmRhbG9uZSDqsr3roZzsmYAg64+Z7J28KS4g7Iuk7Yyo7ZW064+EIOynhO2WiS5cbiAgICAgIGxldCBhY2Nlc3NUb2tlbiA9IHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuO1xuICAgICAgY29uc3QgZXhwaXJlc0F0ID0gZ2V0RXhwaXJlc0F0KHRva2VuLmNyZWRlbnRpYWxzKTtcbiAgICAgIGlmIChcbiAgICAgICAgZXhwaXJlc0F0ICYmXG4gICAgICAgIGV4cGlyZXNBdCAtIERhdGUubm93KCkgPCBSRUZSRVNIX1NBRkVUWV9NUyAmJlxuICAgICAgICBnZXRSZWZyZXNoVG9rZW4odG9rZW4uY3JlZGVudGlhbHMpXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IFFncmlkRnJhbWUgfSA9IGF3YWl0IGltcG9ydChcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lXCIpO1xuICAgICAgICAgIC8vIHByb3ZpZGVyIOulvCDrsJjrk5zsi5wg7LGE7JuM7JW8IHJlZnJlc2hUb2tlbiDrgrTrtoAgVG9rZW5Nb2RlbC5zYXZlIOqwgCDshLHqs7XtlZzri6QuXG4gICAgICAgICAgLy8gcmVmcmVzaFRva2VuKFRva2VuU3Vic2V0QSkg64qUIGlkL3Byb3ZpZGVyL2NyZWRlbnRpYWxzL25hbWUg66eMIOyCrOyaqe2VmOuvgOuhnCDqt7ggNOqwnOunjCDrhJjquLTri6QuXG4gICAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCBRZ3JpZEZyYW1lLnJlZnJlc2hUb2tlbih7XG4gICAgICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgICAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgICAgICBjcmVkZW50aWFsczogdG9rZW4uY3JlZGVudGlhbHMsXG4gICAgICAgICAgfSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBRZ3JpZEZyYW1lLnJlZnJlc2hUb2tlbj5bMF0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke3Rva2VuLm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKGDihpIgJHt0b2tlbi5uYW1lfSAobW9kZWw6ICR7bW9kZWx9KWApO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHJ1bkNsYXVkZVNlc3Npb24oXG4gICAgICAgIHtcbiAgICAgICAgICB0b2tlbklkOiB0b2tlbi5pZCxcbiAgICAgICAgICB0b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgc3lzdGVtOiByZXEuc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIGpzb25TY2hlbWEsXG4gICAgICAgICAgZWZmb3J0OiByZXEuZWZmb3J0LFxuICAgICAgICAgIHRpbWVvdXRNczogREVGQVVMVF9USU1FT1VUX01TLFxuICAgICAgICAgIGNvbGRIaXN0b3J5OiByZXEuY29sZEhpc3RvcnksXG4gICAgICAgICAgaW5wdXQ6IHJlcS5jb2xkSW5wdXQsXG4gICAgICAgICAgYWJvcnRTaWduYWw6IHJlcS5hYm9ydFNpZ25hbCxcbiAgICAgICAgICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiBvcHRzPy5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzLFxuICAgICAgICB9LFxuICAgICAgICBvbkRlbHRhLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNlc3Npb24ucXVvdGFFeGhhdXN0ZWQpIHRocm93IG5ldyBFcnJvcihgcXVvdGEgZXhoYXVzdGVkICgke3Rva2VuLm5hbWV9KWApO1xuICAgICAgaWYgKHNlc3Npb24uaXNFcnJvcikge1xuICAgICAgICAvLyDsp4Tri6goU09OLTQ5NSk6IGlzRXJyb3Ig7YyQ7KCVIOyCrOycoChzdWJ0eXBlL3Rlcm1pbmFsX3JlYXNvbinrpbwg66mU7Iuc7KeAIOyVnuyXkCDrk5zrn6zrgrjri6QuXG4gICAgICAgIC8vIOq3uOuPmeyViCBkZXRhaWwg7J20IHNlc3Npb24udGV4dCjsmYTsoITtlZwgSlNPTiDrs7jrrLgp67+Q7J206528IFwic2NoZW1hIOychOuwmOyduOyngCAvIG1heCByZXRyaWVzIOyduOyngCAvXG4gICAgICAgIC8vIG1heCB0dXJucyDsnbjsp4BcIuulvCDqtazrtoTtlaAg7IiYIOyXhuyXiOuLpC4gdGV4dCDripQg7KeE64uo7JeQIO2VhOyalO2VnCDrp4ztgbzrp4wg7J6Y6528IOuNp+u2meyduOuLpC5cbiAgICAgICAgY29uc3QgcmVhc29uID1cbiAgICAgICAgICBzZXNzaW9uLnN1YnR5cGUgPz8gc2Vzc2lvbi50ZXJtaW5hbFJlYXNvbiA/PyAoc2Vzc2lvbi5pc0Vycm9yID8gXCJpc19lcnJvclwiIDogXCJ1bmtub3duXCIpO1xuICAgICAgICBjb25zdCBib2R5ID0gc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgPyBzZXNzaW9uLnRleHQubGVuZ3RoID4gNTAwXG4gICAgICAgICAgICA/IGAke3Nlc3Npb24udGV4dC5zbGljZSgwLCA1MDApfeKApigke3Nlc3Npb24udGV4dC5sZW5ndGh9IGNoYXJzKWBcbiAgICAgICAgICAgIDogc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgOiBgZW1wdHkgdGV4dCwgb3V0cHV0VG9rZW5zPSR7c2Vzc2lvbi51c2FnZS5vdXRwdXRUb2tlbnN9YDtcbiAgICAgICAgY29uc3QgcmVmdXNhbCA9IHNlc3Npb24ucmVmdXNhbCA/IGAgcmVmdXNhbD0ke0pTT04uc3RyaW5naWZ5KHNlc3Npb24ucmVmdXNhbCl9YCA6IFwiXCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2xhdWRlIGVycm9yICgke3Rva2VuLm5hbWV9KSBbJHtyZWFzb259XTogJHtib2R5fSR7cmVmdXNhbH1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogc2Vzc2lvbi50ZXh0LFxuICAgICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgIHVzYWdlOiBzZXNzaW9uLnVzYWdlLFxuICAgICAgICBkdXJhdGlvbk1zOiBzZXNzaW9uLmR1cmF0aW9uTXMsXG4gICAgICAgIHR0ZnRNczogc2Vzc2lvbi50dGZ0TXMsXG4gICAgICAgIGNvc3RVc2Q6IHNlc3Npb24uY29zdFVzZCxcbiAgICAgICAgLy8gQ2xhdWRlIENvZGUg64qUIEZhYmxlIHJlZnVzYWwg7J2EIE9wdXMg66GcIOyekOuPmSBmYWxsYmFjayDtlaAg7IiYIOyeiOuLpC4g7JqU7LKtIOuqqOuNuOydhFxuICAgICAgICAvLyDqt7jrjIDroZwgc2VydmluZyBtb2RlbCDroZwg6riw66Gd7ZWY66m0IOu5hOyaqS/qsJDsgqwg66Gc6re46rCAIOuqqOuRkCDti4DslrTsp4Drr4DroZwg65GY7J2EIOq1rOu2hO2VnOuLpC5cbiAgICAgICAgbW9kZWw6IHNlc3Npb24uc2VydmVkTW9kZWwgPz8gbW9kZWwsXG4gICAgICAgIHJlcXVlc3RlZE1vZGVsOiBtb2RlbCxcbiAgICAgICAgbW9kZWxGYWxsYmFja3M6IHNlc3Npb24ubW9kZWxGYWxsYmFja3MsXG4gICAgICAgIC8vIHN5c3RlbUhhc2gg64qUIOyDgeychCBpc3N1ZUNvbnZDb250ZXh0IOqwgCDssYTsmrTri6Qo7Jes6riw7ISgIOu5hOyatOuLpCkuXG4gICAgICAgIHRocmVhZENvb3JkOiB7XG4gICAgICAgICAgd29ya2VySWQ6IG1ha2VBbnRocm9waWNXb3JrZXJJZCh0b2tlbi5pZCksXG4gICAgICAgICAgdGhyZWFkSWQ6IHNlc3Npb24uc2Vzc2lvbklkLFxuICAgICAgICAgIGVwb2NoOiAwLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGV4ZWMoKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOEJBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyx1QkFBdUIsQ0FBQztBQUkzRCxNQUFNLHFCQUFxQjtBQUUzQixNQUFNLG9CQUFvQjtBQVUxQixTQUFTLDhCQUNQLFVBQ0EsUUFDUTtDQUNSLE1BQU0sVUFBVSxPQUNiLEtBQUssVUFBVSxHQUFHLE1BQU0sVUFBVSxjQUFjLE1BQU0sVUFBVSxJQUFJLENBQ3BFLEtBQUssS0FBSztBQUNiLFFBQU8sUUFBUSxTQUFTLElBQ3BCLE9BQU8sU0FBUyxvQ0FBb0MsWUFDcEQsT0FBTyxTQUFTOztBQUd0QixJQUFhLHNCQUFiLE1BQStEO0NBRTdELDRCQUFvQixJQUFJLEtBQTBCO0NBQ2xELG1CQUFvQyxJQUFJLDBCQUEwQjtDQUVsRSxNQUFNLFFBQXVCO0VBSzNCLE1BQU0sU0FBUyxNQUFNLFdBQVcscUJBQXFCLEtBQUssWUFBWTtBQUN0RSxPQUFLLE1BQU0sS0FBSyxRQUFRO0FBQ3RCLFFBQUssVUFBVSxJQUFJLEVBQUUsSUFBSTtJQUN2QixJQUFJLEVBQUU7SUFDTixNQUFNLEVBQUU7SUFDUixhQUFhLEVBQUU7SUFDZixnQkFBZ0IsRUFBRTtJQUNsQixRQUFRLEVBQUU7SUFDWCxDQUFDO0FBQ0YsUUFBSyxpQkFBaUIsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPO0FB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
|
|
249
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLWRpc3BhdGNoZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvYW50aHJvcGljLWRpc3BhdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBbnRocm9waWNEaXNwYXRjaGVyXG4gKlxuICogT3BlbkFJRGlzcGF0Y2hlcuyZgCDri6zrpqwsIHdvcmtlciBwb29s7J2EIOuRkOuKlCDrjIDsi6Ag7JqU7LKt67OEIGZyZXNoIHNwYXduXG4gKiDthqDtgbDsnYAg7J2466mU66qo66asKE1BUCnsnLzroZwg6rSA66as7ZWY6rOgIHNtb290aCB3ZWlnaHRlZCByb3VuZC1yb2JpbiDsnLzroZwg6rOg66W464ukXG4gKlxuICogLSDrqqjrk6Ag7JqU7LKt7J2AIGZyZXNoIGAtLXNlc3Npb24taWRgIOuhnCDsi6TtlolcbiAqIC0g66mA7Yuw7YS0IOusuOunpeydgCDtgbTrnbzsnbTslrjtirjqsIAg66ekIO2YuOy2nCDrs7TrgrTripQgZnVsbCBoaXN0b3J5IOulvCDtj4ntg4TtmZTtlbQg7KCE64us7ZWc64ukLlxuICogLSDrsJzquIntlZwgc2Vzc2lvbi1pZCDrpbwgR2VuZXJhdGVSZXN1bHQudGhyZWFkQ29vcmQodGhyZWFkSWQ9c2Vzc2lvbi1pZCwgd29ya2VySWQ9dG9rZW5JZCxcbiAqICAgZXBvY2g9MCnroZwg7Jis66CkLCDsg4HsnIQoaXNzdWVDb252Q29udGV4dCnqsIAg7YG065287JeQIO2ajOyGoe2VoCDsooztkZzrpbwg66eM65Og64ukLiDri6TsnYwgdHVybiDsnbQg7KKM7ZGc66W8XG4gKiAgIO2ajOyGoe2VtOuPhCBBbnRocm9waWMg65287Jqw7YyF7JeQ64qUIOyTsOyngCDslYrripTri6QuXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzIH0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyBnZXRFeHBpcmVzQXQsIGdldFJlZnJlc2hUb2tlbiB9IGZyb20gXCIuLi9jb21tb24vY3JlZGVudGlhbHNcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVSZXF1ZXN0LFxuICB0eXBlIEdlbmVyYXRlUmVzdWx0LFxuICB0eXBlIEdlbmVyYXRlU3RyZWFtQ2FsbGJhY2tzLFxuICB0eXBlIFByb3ZpZGVyRGlzcGF0Y2hlcixcbn0gZnJvbSBcIi4uL2NvbW1vbi9wcm92aWRlci1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBTbW9vdGhXZWlnaHRlZFJvdW5kUm9iaW4gfSBmcm9tIFwiLi4vY29tbW9uL3Ntb290aC13ZWlnaHRlZC1yb3VuZC1yb2JpblwiO1xuaW1wb3J0IHsgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeCwgY2Fub25pY2FsQW50aHJvcGljTW9kZWwgfSBmcm9tIFwiLi9hbnRocm9waWMtY29uc3RhbnRzXCI7XG5pbXBvcnQgeyByZWFkQW50aHJvcGljUXVvdGFVc2FnZSwgdHlwZSBBbnRocm9waWNRdW90YVVzYWdlUmVzdWx0IH0gZnJvbSBcIi4vYW50aHJvcGljLXF1b3RhXCI7XG5pbXBvcnQgeyBtYWtlQW50aHJvcGljV29ya2VySWQsIHJ1bkNsYXVkZVNlc3Npb24gfSBmcm9tIFwiLi9jbGF1ZGUtc2Vzc2lvblwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJhbnRocm9waWMtZGlzcGF0Y2hlclwiXSk7XG5cbi8vIDFNIGNvbnRleHQg7KCV7IOBIOyDneyEseydgCDsi6TsuKHsg4EgMTAwcyvquYzsp4Ag6rCE64ukLiAyNDBz64qUIOyZhOy2qSDsnqXsuZjsnbwg67+QLFxuLy8g6rGw67aAK+qxsOuMgCBzeXN0ZW0g7J6s7IOd7ISxIOyngOyXsOydhCDsmYTsoITtnogg7ZW06rKw7ZWY64qUIOqwkuydgCDslYTri4jri6QuXG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSAyNDBfMDAwO1xuLy8gYWNjZXNzIHRva2VuIOunjOujjCDsnoTrsJUg7J6E6rOEIOKAlCDquLDsobQgc3RhbmRhbG9uZSDqsr3roZwocWdyaWQuZGlzcGF0Y2hlci50cynsmYAg64+Z7J28KDYwcykuXG5jb25zdCBSRUZSRVNIX1NBRkVUWV9NUyA9IDYwXzAwMDtcblxuaW50ZXJmYWNlIFBvb2xlZFRva2VuIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHM7XG4gIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbDtcbiAgd2VpZ2h0OiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIHF1b3RhVGhyZXNob2xkRXhjZWVkZWRNZXNzYWdlKFxuICBwcm92aWRlcjogc3RyaW5nLFxuICB0b2tlbnM6IEFycmF5PHsgdG9rZW5OYW1lOiBzdHJpbmc7IHRocmVzaG9sZDogbnVtYmVyIH0+LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZGV0YWlscyA9IHRva2Vuc1xuICAgIC5tYXAoKHRva2VuKSA9PiBgJHt0b2tlbi50b2tlbk5hbWV9ICh0aHJlc2hvbGQgJHt0b2tlbi50aHJlc2hvbGR9JSlgKVxuICAgIC5qb2luKFwiLCBcIik7XG4gIHJldHVybiBkZXRhaWxzLmxlbmd0aCA+IDBcbiAgICA/IGBBbGwgJHtwcm92aWRlcn0gdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZDogJHtkZXRhaWxzfWBcbiAgICA6IGBBbGwgJHtwcm92aWRlcn0gdG9rZW5zIGV4Y2VlZGVkIHF1b3RhIHRocmVzaG9sZGA7XG59XG5cbmV4cG9ydCBjbGFzcyBBbnRocm9waWNEaXNwYXRjaGVyIGltcGxlbWVudHMgUHJvdmlkZXJEaXNwYXRjaGVyIHtcbiAgLy8gdG9rZW5JZCDihpIg7ZKAIO2VreuqqS4gc3RhcnQoKS90b2tlbiDsnbTrsqTtirjroZwg7LGE7JuAXG4gIHByaXZhdGUgdG9rZW5Qb29sID0gbmV3IE1hcDxudW1iZXIsIFBvb2xlZFRva2VuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdlaWdodGVkU2VsZWN0b3IgPSBuZXcgU21vb3RoV2VpZ2h0ZWRSb3VuZFJvYmluKCk7XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gT3BlbkFJRGlzcGF0Y2hlci5zdGFydCgpIOyZgCDrj5nsnbztlZjqsowgREIg7JeQ7IScIOq4sOyhtCBhbnRocm9waWMg7Yag7YGw7J2EIHNlbGYtYm9vdHN0cmFwIO2VnOuLpC5cbiAgICAvLyAo7ISc67KEIOyerOyLnOyekSDsi5wgTk9USUZZIOqwgCDslYgg7Jik66+A66GcIOu2gO2KuOyKpO2KuOueqeydtCDsl4bsnLzrqbQg7ZKA7J20IOu5iCDssYTroZwg64Ko64qU64ukLilcbiAgICAvLyDsnbTtm4Qg67OA6rK967aE7J2AIHRva2VuLXN1YnNjcmliZXIg6rCAIG9uVG9rZW5BZGRlZC9VcGRhdGVkL1JlbW92ZWQg66GcIOyghOuLrO2VnOuLpC5cbiAgICAvLyBmaW5kQWN0aXZlQnlQcm92aWRlciDqsIAgYWN0aXZlPXRydWUgKyBwcm92aWRlciDtlYTthLDrpbwgREIg7JeQ7IScIOyymOumrCDihpIgaW5hY3RpdmUg64qUIOyVoOy0iOyXkCDslYgg7Jio64ukLlxuICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEFjdGl2ZUJ5UHJvdmlkZXIoXCJBXCIsIFwiYW50aHJvcGljXCIpO1xuICAgIGZvciAoY29uc3QgdCBvZiB0b2tlbnMpIHtcbiAgICAgIHRoaXMudG9rZW5Qb29sLnNldCh0LmlkLCB7XG4gICAgICAgIGlkOiB0LmlkLFxuICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB0LmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzLFxuICAgICAgICBxdW90YVRocmVzaG9sZDogdC5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgIHdlaWdodDogdC53ZWlnaHQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMud2VpZ2h0ZWRTZWxlY3Rvci5zZXRUb2tlbih0LmlkLCB0LndlaWdodCk7XG4gICAgICBsb2dnZXIuaW5mbyhgd29ya2VyIHNwYXduZWQ6ICR7dC5uYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW5JZHMgPSBbLi4udGhpcy50b2tlblBvb2wua2V5cygpXTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIHRva2VuSWRzKSB0aGlzLndlaWdodGVkU2VsZWN0b3IucmVtb3ZlVG9rZW4oaWQpO1xuICAgIHRoaXMudG9rZW5Qb29sLmNsZWFyKCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlc2V0U2NvcmVzKCk7XG4gIH1cblxuICAvLyDtmITsnqwg7ZKA7J2YIO2GoO2BsCDsiJgoc3RhcnR1cCDroZzqt7gvaGVhbHRoIOyaqSkuXG4gIGdldCB0b2tlbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Qb29sLnNpemU7XG4gIH1cblxuICAvLyBNb25pdCDtkZzsi5zsmqkg4oCUIO2SgOyXkCDsnojripQg7Yag7YGwIOydtOumhCDsiqTrg4Xsg7cgKOydtOumhOyInCDsoJXroKwpXG4gIGdldCB0b2tlbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudG9rZW5Qb29sLnZhbHVlcygpXS5tYXAoKHRva2VuKSA9PiB0b2tlbi5uYW1lKS50b1NvcnRlZCgpO1xuICB9XG5cbiAgLy8gREIgYWN0aXZlIGFudGhyb3BpYyDthqDtgbAg66qp66Gd7Jy866GcIO2SgOydhCDsnqzrj5nquLDtmZTtlZzri6QocGVyaW9kaWMgcmVjb25jaWxlL+yerOyXsOqysOyaqSkuXG4gIC8vIExJU1RFTi9OT1RJRlkg6rCAIOuBiuq4tCDrj5nslYgg7Jyg7Iuk65CcIOy2lOqwgC/sgq3soJwv67mE7Zmc7ISx7ZmU66W8IERCIOq4sOykgOycvOuhnCDri6Tsi5wg66ee7LaY64ukLlxuICAvLyDsnbTrsqTtirgg7ZW465Ok65+s66W8IOyerOyCrOyaqe2VtCDtkoAg6rCx7Iug7J20IOydvOq0gOuQmOqyjCDsoIHsmqnrkJjrj4TroZ0g7ZWc64ukOlxuICAvLyAgLSBEQiDsl5Ag7JeG64qU642wIO2SgOyXkCDsnojripQg7Yag7YGwIOKGkiBvblRva2VuUmVtb3ZlZFxuICAvLyAgLSBEQiDsl5Ag7J6I64qUIO2GoO2BsCDihpIg7Iug6rec66m0IG9uVG9rZW5BZGRlZCwg6riw7KG07J2066m0IG9uVG9rZW5VcGRhdGVkXG4gIHJlcGxhY2VUb2tlbnMoXG4gICAgcm93czogQXJyYXk8e1xuICAgICAgaWQ6IG51bWJlcjtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscztcbiAgICAgIHF1b3RhVGhyZXNob2xkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIHdlaWdodDogbnVtYmVyO1xuICAgIH0+LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFNldChyb3dzLm1hcCgocikgPT4gci5pZCkpO1xuICAgIC8vIG9uVG9rZW5SZW1vdmVkIOqwgCB0b2tlblBvb2wg7J2EIGRlbGV0ZSDtlZjrr4DroZwg7Iic7ZqMIOykkSDsiJjsoJXsnYQg7ZS87ZWY66CkIO2CpOulvCDrqLzsoIAg7Iqk64OF7IO37ZWc64ukLlxuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBBcnJheS5mcm9tKHRoaXMudG9rZW5Qb29sLmtleXMoKSk7XG4gICAgZm9yIChjb25zdCBpZCBvZiBjdXJyZW50SWRzKSB7XG4gICAgICBpZiAoIW5leHQuaGFzKGlkKSkgdGhpcy5vblRva2VuUmVtb3ZlZChpZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgciBvZiByb3dzKSB7XG4gICAgICBpZiAodGhpcy50b2tlblBvb2wuaGFzKHIuaWQpKSB7XG4gICAgICAgIHRoaXMub25Ub2tlblVwZGF0ZWQoci5pZCwgci5uYW1lLCByLmNyZWRlbnRpYWxzLCByLnF1b3RhVGhyZXNob2xkLCByLndlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uVG9rZW5BZGRlZChyLmlkLCByLm5hbWUsIHIuY3JlZGVudGlhbHMsIHIucXVvdGFUaHJlc2hvbGQsIHIud2VpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyB0b2tlbiBldmVudHMgKHRva2VuLXN1YnNjcmliZXIg6rCAIO2YuOy2nClcbiAgb25Ub2tlbkFkZGVkKFxuICAgIGlkOiBudW1iZXIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzOiBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICBxdW90YVRocmVzaG9sZD86IG51bWJlciB8IG51bGwsXG4gICAgd2VpZ2h0ID0gMSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblBvb2wuc2V0KGlkLCB7IGlkLCBuYW1lLCBjcmVkZW50aWFscywgcXVvdGFUaHJlc2hvbGQsIHdlaWdodCB9KTtcbiAgICB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2V0VG9rZW4oaWQsIHdlaWdodCk7XG4gIH1cblxuICBvblRva2VuVXBkYXRlZChcbiAgICBpZDogbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjcmVkZW50aWFsczogQW50aHJvcGljQ3JlZGVudGlhbHMsXG4gICAgcXVvdGFUaHJlc2hvbGQ/OiBudW1iZXIgfCBudWxsLFxuICAgIHdlaWdodCA9IDEsXG4gICk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLnNldChpZCwgeyBpZCwgbmFtZSwgY3JlZGVudGlhbHMsIHF1b3RhVGhyZXNob2xkLCB3ZWlnaHQgfSk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnNldFRva2VuKGlkLCB3ZWlnaHQpO1xuICB9XG5cbiAgb25Ub2tlblJlbW92ZWQoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG9rZW5Qb29sLmRlbGV0ZShpZCk7XG4gICAgdGhpcy53ZWlnaHRlZFNlbGVjdG9yLnJlbW92ZVRva2VuKGlkKTtcbiAgfVxuXG4gIC8vIHF1b3RhIO2GteqzvCDtm4Trs7Trp4zsnLzroZwg7JqU7LKt66eI64ukIHNtb290aCB3ZWlnaHRlZCByb3VuZC1yb2JpbiDshKDtg53tlZzri6QuXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0VG9rZW4oKTogUHJvbWlzZTxQb29sZWRUb2tlbiB8IG51bGw+IHtcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMudG9rZW5Qb29sLnZhbHVlcygpXTtcbiAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgZWxpZ2libGUsIG92ZXJUaHJlc2hvbGRUb2tlbnMgfSA9IGF3YWl0IHRoaXMuZmlsdGVyRWxpZ2libGVUb2tlbnMocm93cyk7XG4gICAgaWYgKGVsaWdpYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogYWxsX2V4Y2VlZGVkXCIsIHtcbiAgICAgICAgcHJvdmlkZXI6IFwiYW50aHJvcGljXCIsXG4gICAgICAgIHRva2VuQ291bnQ6IHJvd3MubGVuZ3RoLFxuICAgICAgICB0aHJlc2hvbGRlZFRva2VuQ291bnQ6IHJvd3MuZmlsdGVyKChyKSA9PiB0aGlzLmhhc1F1b3RhVGhyZXNob2xkKHIpKS5sZW5ndGgsXG4gICAgICAgIG92ZXJUaHJlc2hvbGRUb2tlbnMsXG4gICAgICAgIHJlYXNvbjogXCJhbGxfZXhjZWVkZWRcIixcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IFF1b3RhVGhyZXNob2xkRXhjZWVkZWRFcnJvcihcbiAgICAgICAgcXVvdGFUaHJlc2hvbGRFeGNlZWRlZE1lc3NhZ2UoXCJhbnRocm9waWNcIiwgb3ZlclRocmVzaG9sZFRva2VucyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkSWQgPSB0aGlzLndlaWdodGVkU2VsZWN0b3Iuc2VsZWN0KG5ldyBTZXQoZWxpZ2libGUubWFwKCh0b2tlbikgPT4gdG9rZW4uaWQpKSk7XG4gICAgaWYgKHNlbGVjdGVkSWQgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnRva2VuUG9vbC5nZXQoc2VsZWN0ZWRJZCkgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmlsdGVyRWxpZ2libGVUb2tlbnMocm93czogUG9vbGVkVG9rZW5bXSk6IFByb21pc2U8e1xuICAgIGVsaWdpYmxlOiBQb29sZWRUb2tlbltdO1xuICAgIG92ZXJUaHJlc2hvbGRUb2tlbnM6IEFycmF5PHsgdG9rZW5OYW1lOiBzdHJpbmc7IHRocmVzaG9sZDogbnVtYmVyIH0+O1xuICB9PiB7XG4gICAgY29uc3QgdGhyZXNob2xkZWQgPSByb3dzLmZpbHRlcigodG9rZW4pID0+IHRoaXMuaGFzUXVvdGFUaHJlc2hvbGQodG9rZW4pKTtcbiAgICBpZiAodGhyZXNob2xkZWQubGVuZ3RoID09PSAwKSByZXR1cm4geyBlbGlnaWJsZTogcm93cywgb3ZlclRocmVzaG9sZFRva2VuczogW10gfTtcblxuICAgIGNvbnN0IGVsaWdpYmxlSWRzID0gbmV3IFNldChcbiAgICAgIHJvd3MuZmlsdGVyKCh0b2tlbikgPT4gIXRoaXMuaGFzUXVvdGFUaHJlc2hvbGQodG9rZW4pKS5tYXAoKHRva2VuKSA9PiB0b2tlbi5pZCksXG4gICAgKTtcbiAgICBjb25zdCBvdmVyVGhyZXNob2xkVG9rZW5zOiBBcnJheTx7IHRva2VuTmFtZTogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9PiA9IFtdO1xuICAgIGNvbnN0IGNoZWNrcyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIHRocmVzaG9sZGVkLm1hcChhc3luYyAodG9rZW4pID0+ICh7XG4gICAgICAgIHRva2VuLFxuICAgICAgICByZXN1bHQ6IGF3YWl0IHJlYWRBbnRocm9waWNRdW90YVVzYWdlKHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuKSxcbiAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgY2hlY2tzLmZvckVhY2goKGNoZWNrLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGNoZWNrLnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhyZXNob2xkZWRbaW5kZXhdO1xuICAgICAgICBpZiAoIXRva2VuKSByZXR1cm47XG4gICAgICAgIHRoaXMubG9nUXVvdGFMb29rdXBGYWlsT3Blbih0b2tlbiwgU3RyaW5nKGNoZWNrLnJlYXNvbikpO1xuICAgICAgICBlbGlnaWJsZUlkcy5hZGQodG9rZW4uaWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gY2hlY2sudmFsdWUudG9rZW47XG4gICAgICBjb25zdCByZXN1bHQgPSBjaGVjay52YWx1ZS5yZXN1bHQ7XG4gICAgICBpZiAocmVzdWx0LmtpbmQgPT09IFwibG9va3VwX2ZhaWxlZFwiKSB7XG4gICAgICAgIHRoaXMubG9nUXVvdGFMb29rdXBGYWlsT3Blbih0b2tlbiwgcmVzdWx0LnJlYXNvbik7XG4gICAgICAgIGVsaWdpYmxlSWRzLmFkZCh0b2tlbi5pZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC51dGlsaXphdGlvblBjdCA+PSB0b2tlbi5xdW90YVRocmVzaG9sZCkge1xuICAgICAgICB0aGlzLmxvZ1F1b3RhT3ZlclRocmVzaG9sZCh0b2tlbiwgcmVzdWx0KTtcbiAgICAgICAgb3ZlclRocmVzaG9sZFRva2Vucy5wdXNoKHsgdG9rZW5OYW1lOiB0b2tlbi5uYW1lLCB0aHJlc2hvbGQ6IHRva2VuLnF1b3RhVGhyZXNob2xkIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVsaWdpYmxlSWRzLmFkZCh0b2tlbi5pZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBlbGlnaWJsZTogcm93cy5maWx0ZXIoKHRva2VuKSA9PiBlbGlnaWJsZUlkcy5oYXModG9rZW4uaWQpKSwgb3ZlclRocmVzaG9sZFRva2VucyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNRdW90YVRocmVzaG9sZCh0b2tlbjogUG9vbGVkVG9rZW4pOiB0b2tlbiBpcyBQb29sZWRUb2tlbiAmIHsgcXVvdGFUaHJlc2hvbGQ6IG51bWJlciB9IHtcbiAgICByZXR1cm4gdG9rZW4ucXVvdGFUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCAmJiB0b2tlbi5xdW90YVRocmVzaG9sZCAhPT0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9nUXVvdGFPdmVyVGhyZXNob2xkKFxuICAgIHRva2VuOiBQb29sZWRUb2tlbiAmIHsgcXVvdGFUaHJlc2hvbGQ6IG51bWJlciB9LFxuICAgIHJlc3VsdDogRXh0cmFjdDxBbnRocm9waWNRdW90YVVzYWdlUmVzdWx0LCB7IGtpbmQ6IFwib2tcIiB9PixcbiAgKTogdm9pZCB7XG4gICAgbG9nZ2VyLmluZm8oXCJxdW90YV90aHJlc2hvbGQgZ2F0ZTogb3Zlcl90aHJlc2hvbGRcIiwge1xuICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICBjYWNoZWRVdGlsaXphdGlvbjogcmVzdWx0LnV0aWxpemF0aW9uUGN0LFxuICAgICAgY2FjaGVBZ2U6IHJlc3VsdC5jYWNoZUFnZU1zLFxuICAgICAgcmVhc29uOiBcIm92ZXJfdGhyZXNob2xkXCIsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1F1b3RhTG9va3VwRmFpbE9wZW4oXG4gICAgdG9rZW46IFBvb2xlZFRva2VuICYgeyBxdW90YVRocmVzaG9sZDogbnVtYmVyIH0sXG4gICAgcmVhc29uOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGxvZ2dlci53YXJuKFwicXVvdGFfdGhyZXNob2xkIGdhdGU6IGxvb2t1cF9mYWlsX29wZW5cIiwge1xuICAgICAgdG9rZW5JZDogdG9rZW4uaWQsXG4gICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgIHRocmVzaG9sZDogdG9rZW4ucXVvdGFUaHJlc2hvbGQsXG4gICAgICByZWFzb246IFwibG9va3VwX2ZhaWxfb3BlblwiLFxuICAgICAgbG9va3VwUmVhc29uOiByZWFzb24sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZShyZXE6IEdlbmVyYXRlUmVxdWVzdCk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5ydW4ocmVxLCAoKSA9PiB7fSk7XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZVN0cmVhbShyZXE6IEdlbmVyYXRlUmVxdWVzdCwgY2I6IEdlbmVyYXRlU3RyZWFtQ2FsbGJhY2tzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnVuKHJlcSwgY2Iub25EZWx0YSwgeyBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiB0cnVlIH0pO1xuICAgICAgY2Iub25UaHJlYWRJZD8uKHJlc3VsdC50aHJlYWRDb29yZC50aHJlYWRJZCk7XG4gICAgICBjYi5vbkNvbXBsZXRlKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY2Iub25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBnZW5lcmF0ZS9nZW5lcmF0ZVN0cmVhbSDqs7XthrUg7Iuk7ZaJLiBvbkRlbHRhIOuKlCDsiqTtirjrprzsnbTrqbQg7KCQ7KeEIOuwqey2nCwg67mE7Iqk7Yq466a87J2066m0IG5vLW9wLlxuICBwcml2YXRlIGFzeW5jIHJ1bihcbiAgICByZXE6IEdlbmVyYXRlUmVxdWVzdCxcbiAgICBvbkRlbHRhOiAodDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIG9wdHM/OiB7IGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+IHtcbiAgICAvLyDsnbTrr7jsp4Ag7IOd7ISx7J2AIE9wZW5BSShjb2RleCkg6rK966GcIOyghOyaqS4gQW50aHJvcGljIOudvOyasO2MheyXkCDsnbTrr7jsp4Ag7ZSM656Y6re46rCAXG4gICAgLy8g64+E64us7ZWY66m0IOyhsOyaqe2eiCDthY3siqTtirjroZwg7Y+067Cx7ZWY7KeAIOyViuqzoCDrqoXsi5zsoIHsnLzroZwg6rGw67aA7ZWc64ukLlxuICAgIGlmIChyZXEuaW1hZ2VHZW5lcmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbWFnZSBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIEFudGhyb3BpYyByb3V0ZVwiKTtcbiAgICB9XG4gICAgLy8gbW9kZWwg7KCV6rec7ZmU66W8IGRpc3BhdGNoZXIg7KeE7J6F7KCQ7JeQ7IScIO2VnCDrsogg7ZWc64ukOiByZXN1bHQubW9kZWwgLyBydW5DbGF1ZGVTZXNzaW9uIOyghOu2gFxuICAgIC8vIGNhbm9uaWNhbChwcmVmaXgg7JeG64qUIGNvc3Qg7YKkKSDsnYQg7JOw6rKMIO2GteydvC4g66+47KeA7KCV7J2066m0IEFOVEhST1BJQ19ERUZBVUxUX01PREVMIOKAlCBxZ3JpZC5kaXNwYXRjaGVyXG4gICAgLy8g7J2YIFwic29ubmV0XCIg67OE7LmtIOyasO2ajCDssKjri6guIOygleq3nO2ZlCDqt5zsuZnsnYAgZmFsbGJhY2sg6rK966Gc7JmAIOqzteycoChjYW5vbmljYWxBbnRocm9waWNNb2RlbCkuXG4gICAgYXNzZXJ0U3VwcG9ydGVkT25lTWlsbGlvblN1ZmZpeChyZXEubW9kZWwpO1xuICAgIGNvbnN0IG1vZGVsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwocmVxLm1vZGVsKTtcbiAgICBjb25zdCBqc29uU2NoZW1hID1cbiAgICAgIHJlcS5vdXRwdXRTY2hlbWEgIT09IHVuZGVmaW5lZCA/IEpTT04uc3RyaW5naWZ5KHJlcS5vdXRwdXRTY2hlbWEpIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLnNlbGVjdFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gYW50aHJvcGljIHRva2VucyBhdmFpbGFibGVcIik7XG5cbiAgICBjb25zdCBleGVjID0gYXN5bmMgKCk6IFByb21pc2U8R2VuZXJhdGVSZXN1bHQ+ID0+IHtcbiAgICAgIC8vIOunjOujjCDsnoTrsJUg7Yag7YGwIHByZWVtcHRpdmUgcmVmcmVzaCjquLDsobQgc3RhbmRhbG9uZSDqsr3roZzsmYAg64+Z7J28KS4g7Iuk7Yyo7ZW064+EIOynhO2WiS5cbiAgICAgIGxldCBhY2Nlc3NUb2tlbiA9IHRva2VuLmNyZWRlbnRpYWxzLmFjY2Vzc1Rva2VuO1xuICAgICAgY29uc3QgZXhwaXJlc0F0ID0gZ2V0RXhwaXJlc0F0KHRva2VuLmNyZWRlbnRpYWxzKTtcbiAgICAgIGlmIChcbiAgICAgICAgZXhwaXJlc0F0ICYmXG4gICAgICAgIGV4cGlyZXNBdCAtIERhdGUubm93KCkgPCBSRUZSRVNIX1NBRkVUWV9NUyAmJlxuICAgICAgICBnZXRSZWZyZXNoVG9rZW4odG9rZW4uY3JlZGVudGlhbHMpXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IFFncmlkRnJhbWUgfSA9IGF3YWl0IGltcG9ydChcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lXCIpO1xuICAgICAgICAgIC8vIHByb3ZpZGVyIOulvCDrsJjrk5zsi5wg7LGE7JuM7JW8IHJlZnJlc2hUb2tlbiDrgrTrtoAgVG9rZW5Nb2RlbC5zYXZlIOqwgCDshLHqs7XtlZzri6QuXG4gICAgICAgICAgLy8gcmVmcmVzaFRva2VuKFRva2VuU3Vic2V0QSkg64qUIGlkL3Byb3ZpZGVyL2NyZWRlbnRpYWxzL25hbWUg66eMIOyCrOyaqe2VmOuvgOuhnCDqt7ggNOqwnOunjCDrhJjquLTri6QuXG4gICAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCBRZ3JpZEZyYW1lLnJlZnJlc2hUb2tlbih7XG4gICAgICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgICAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICAgICAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgICAgICBjcmVkZW50aWFsczogdG9rZW4uY3JlZGVudGlhbHMsXG4gICAgICAgICAgfSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBRZ3JpZEZyYW1lLnJlZnJlc2hUb2tlbj5bMF0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke3Rva2VuLm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKGDihpIgJHt0b2tlbi5uYW1lfSAobW9kZWw6ICR7bW9kZWx9KWApO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHJ1bkNsYXVkZVNlc3Npb24oXG4gICAgICAgIHtcbiAgICAgICAgICB0b2tlbklkOiB0b2tlbi5pZCxcbiAgICAgICAgICB0b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgc3lzdGVtOiByZXEuc3lzdGVtUHJvbXB0LFxuICAgICAgICAgIGpzb25TY2hlbWEsXG4gICAgICAgICAgZWZmb3J0OiByZXEuZWZmb3J0LFxuICAgICAgICAgIHRpbWVvdXRNczogREVGQVVMVF9USU1FT1VUX01TLFxuICAgICAgICAgIGNvbGRIaXN0b3J5OiByZXEuY29sZEhpc3RvcnksXG4gICAgICAgICAgaW5wdXQ6IHJlcS5jb2xkSW5wdXQsXG4gICAgICAgICAgYWJvcnRTaWduYWw6IHJlcS5hYm9ydFNpZ25hbCxcbiAgICAgICAgICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiBvcHRzPy5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzLFxuICAgICAgICB9LFxuICAgICAgICBvbkRlbHRhLFxuICAgICAgKTtcblxuICAgICAgaWYgKHNlc3Npb24ucXVvdGFFeGhhdXN0ZWQpIHRocm93IG5ldyBFcnJvcihgcXVvdGEgZXhoYXVzdGVkICgke3Rva2VuLm5hbWV9KWApO1xuICAgICAgaWYgKHNlc3Npb24uaXNFcnJvcikge1xuICAgICAgICAvLyDsp4Tri6goU09OLTQ5NSk6IGlzRXJyb3Ig7YyQ7KCVIOyCrOycoChzdWJ0eXBlL3Rlcm1pbmFsX3JlYXNvbinrpbwg66mU7Iuc7KeAIOyVnuyXkCDrk5zrn6zrgrjri6QuXG4gICAgICAgIC8vIOq3uOuPmeyViCBkZXRhaWwg7J20IHNlc3Npb24udGV4dCjsmYTsoITtlZwgSlNPTiDrs7jrrLgp67+Q7J206528IFwic2NoZW1hIOychOuwmOyduOyngCAvIG1heCByZXRyaWVzIOyduOyngCAvXG4gICAgICAgIC8vIG1heCB0dXJucyDsnbjsp4BcIuulvCDqtazrtoTtlaAg7IiYIOyXhuyXiOuLpC4gdGV4dCDripQg7KeE64uo7JeQIO2VhOyalO2VnCDrp4ztgbzrp4wg7J6Y6528IOuNp+u2meyduOuLpC5cbiAgICAgICAgY29uc3QgcmVhc29uID1cbiAgICAgICAgICBzZXNzaW9uLnN1YnR5cGUgPz8gc2Vzc2lvbi50ZXJtaW5hbFJlYXNvbiA/PyAoc2Vzc2lvbi5pc0Vycm9yID8gXCJpc19lcnJvclwiIDogXCJ1bmtub3duXCIpO1xuICAgICAgICBjb25zdCBib2R5ID0gc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgPyBzZXNzaW9uLnRleHQubGVuZ3RoID4gNTAwXG4gICAgICAgICAgICA/IGAke3Nlc3Npb24udGV4dC5zbGljZSgwLCA1MDApfeKApigke3Nlc3Npb24udGV4dC5sZW5ndGh9IGNoYXJzKWBcbiAgICAgICAgICAgIDogc2Vzc2lvbi50ZXh0XG4gICAgICAgICAgOiBgZW1wdHkgdGV4dCwgb3V0cHV0VG9rZW5zPSR7c2Vzc2lvbi51c2FnZS5vdXRwdXRUb2tlbnN9YDtcbiAgICAgICAgY29uc3QgcmVmdXNhbCA9IHNlc3Npb24ucmVmdXNhbCA/IGAgcmVmdXNhbD0ke0pTT04uc3RyaW5naWZ5KHNlc3Npb24ucmVmdXNhbCl9YCA6IFwiXCI7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY2xhdWRlIGVycm9yICgke3Rva2VuLm5hbWV9KSBbJHtyZWFzb259XTogJHtib2R5fSR7cmVmdXNhbH1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogc2Vzc2lvbi50ZXh0LFxuICAgICAgICB0b2tlbk5hbWU6IHRva2VuLm5hbWUsXG4gICAgICAgIHVzYWdlOiBzZXNzaW9uLnVzYWdlLFxuICAgICAgICBkdXJhdGlvbk1zOiBzZXNzaW9uLmR1cmF0aW9uTXMsXG4gICAgICAgIHR0ZnRNczogc2Vzc2lvbi50dGZ0TXMsXG4gICAgICAgIGNvc3RVc2Q6IHNlc3Npb24uY29zdFVzZCxcbiAgICAgICAgLy8gQ2xhdWRlIENvZGUg64qUIEZhYmxlIHJlZnVzYWwg7J2EIE9wdXMg66GcIOyekOuPmSBmYWxsYmFjayDtlaAg7IiYIOyeiOuLpC4g7JqU7LKtIOuqqOuNuOydhFxuICAgICAgICAvLyDqt7jrjIDroZwgc2VydmluZyBtb2RlbCDroZwg6riw66Gd7ZWY66m0IOu5hOyaqS/qsJDsgqwg66Gc6re46rCAIOuqqOuRkCDti4DslrTsp4Drr4DroZwg65GY7J2EIOq1rOu2hO2VnOuLpC5cbiAgICAgICAgbW9kZWw6IHNlc3Npb24uc2VydmVkTW9kZWwgPz8gbW9kZWwsXG4gICAgICAgIHJlcXVlc3RlZE1vZGVsOiBtb2RlbCxcbiAgICAgICAgbW9kZWxGYWxsYmFja3M6IHNlc3Npb24ubW9kZWxGYWxsYmFja3MsXG4gICAgICAgIC8vIHN5c3RlbUhhc2gg64qUIOyDgeychCBpc3N1ZUNvbnZDb250ZXh0IOqwgCDssYTsmrTri6Qo7Jes6riw7ISgIOu5hOyatOuLpCkuXG4gICAgICAgIHRocmVhZENvb3JkOiB7XG4gICAgICAgICAgd29ya2VySWQ6IG1ha2VBbnRocm9waWNXb3JrZXJJZCh0b2tlbi5pZCksXG4gICAgICAgICAgdGhyZWFkSWQ6IHNlc3Npb24uc2Vzc2lvbklkLFxuICAgICAgICAgIGVwb2NoOiAwLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGV4ZWMoKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkEsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLHNCQUFzQixDQUFDO0FBSTFELE1BQU0scUJBQXFCO0FBRTNCLE1BQU0sb0JBQW9CO0FBVTFCLFNBQVMsOEJBQ1AsVUFDQSxRQUNRO0NBQ1IsTUFBTSxVQUFVLE9BQ2IsS0FBSyxVQUFVLEdBQUcsTUFBTSxVQUFVLGNBQWMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUNwRSxLQUFLLElBQUk7Q0FDWixPQUFPLFFBQVEsU0FBUyxJQUNwQixPQUFPLFNBQVMsb0NBQW9DLFlBQ3BELE9BQU8sU0FBUztBQUN0QjtBQUVBLElBQWEsc0JBQWIsTUFBK0Q7Q0FFN0QsNEJBQW9CLElBQUksSUFBeUI7Q0FDakQsbUJBQW9DLElBQUkseUJBQXlCO0NBRWpFLE1BQU0sUUFBdUI7RUFLM0IsTUFBTSxTQUFTLE1BQU0sV0FBVyxxQkFBcUIsS0FBSyxXQUFXO0VBQ3JFLEtBQUssTUFBTSxLQUFLLFFBQVE7R0FDdEIsS0FBSyxVQUFVLElBQUksRUFBRSxJQUFJO0lBQ3ZCLElBQUksRUFBRTtJQUNOLE1BQU0sRUFBRTtJQUNSLGFBQWEsRUFBRTtJQUNmLGdCQUFnQixFQUFFO0lBQ2xCLFFBQVEsRUFBRTtHQUNaLENBQUM7R0FDRCxLQUFLLGlCQUFpQixTQUFTLEVBQUUsSUFBSSxFQUFF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
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import "../../../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import { fetchUsageWithMeta } from "../../../application/qgrid/oauth.js";
|
|
3
2
|
//#region src/utils/providers/anthropic/anthropic-quota.ts
|
|
4
3
|
async function readAnthropicQuotaUsage(accessToken) {
|
|
@@ -28,4 +27,4 @@ async function readAnthropicQuotaUsage(accessToken) {
|
|
|
28
27
|
//#endregion
|
|
29
28
|
export { readAnthropicQuotaUsage };
|
|
30
29
|
|
|
31
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50aHJvcGljLXF1b3RhLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvYW50aHJvcGljL2FudGhyb3BpYy1xdW90YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmZXRjaFVzYWdlV2l0aE1ldGEgfSBmcm9tIFwiLi4vLi4vLi4vYXBwbGljYXRpb24vcWdyaWQvb2F1dGhcIjtcblxuZXhwb3J0IHR5cGUgQW50aHJvcGljUXVvdGFVc2FnZVJlc3VsdCA9XG4gIHwgeyBraW5kOiBcIm9rXCI7IHV0aWxpemF0aW9uUGN0OiBudW1iZXI7IGNhY2hlQWdlTXM6IG51bWJlciB9XG4gIHwgeyBraW5kOiBcImxvb2t1cF9mYWlsZWRcIjsgcmVhc29uOiBzdHJpbmcgfTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBbnRocm9waWNRdW90YVVzYWdlKFxuICBhY2Nlc3NUb2tlbjogc3RyaW5nLFxuKTogUHJvbWlzZTxBbnRocm9waWNRdW90YVVzYWdlUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBkYXRhLCBjYWNoZWRBdCB9ID0gYXdhaXQgZmV0Y2hVc2FnZVdpdGhNZXRhKGFjY2Vzc1Rva2VuKTtcbiAgICBpZiAoZGF0YS5lcnJvcikgcmV0dXJuIHsga2luZDogXCJsb29rdXBfZmFpbGVkXCIsIHJlYXNvbjogZGF0YS5lcnJvciB9O1xuXG4gICAgY29uc3QgdXRpbGl6YXRpb24gPSBkYXRhLmZpdmVfaG91cj8udXRpbGl6YXRpb247XG4gICAgaWYgKHR5cGVvZiB1dGlsaXphdGlvbiAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzRmluaXRlKHV0aWxpemF0aW9uKSkge1xuICAgICAgcmV0dXJuIHsga2luZDogXCJsb29rdXBfZmFpbGVkXCIsIHJlYXNvbjogXCJmaXZlX2hvdXIgdXRpbGl6YXRpb24gdW5hdmFpbGFibGVcIiB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBraW5kOiBcIm9rXCIsXG4gICAgICB1dGlsaXphdGlvblBjdDogdXRpbGl6YXRpb24sXG4gICAgICBjYWNoZUFnZU1zOiBNYXRoLm1heChEYXRlLm5vdygpIC0gY2FjaGVkQXQsIDApLFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBraW5kOiBcImxvb2t1cF9mYWlsZWRcIiwgcmVhc29uOiAoZSBhcyBFcnJvcikubWVzc2FnZSB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBTUEsZUFBc0Isd0JBQ3BCLGFBQ29DO0NBQ3BDLElBQUk7RUFDRixNQUFNLEVBQUUsTUFBTSxhQUFhLE1BQU0sbUJBQW1CLFdBQVc7RUFDL0QsSUFBSSxLQUFLLE9BQU8sT0FBTztHQUFFLE1BQU07R0FBaUIsUUFBUSxLQUFLO0VBQU07RUFFbkUsTUFBTSxjQUFjLEtBQUssV0FBVztFQUNwQyxJQUFJLE9BQU8sZ0JBQWdCLFlBQVksQ0FBQyxPQUFPLFNBQVMsV0FBVyxHQUNqRSxPQUFPO0dBQUUsTUFBTTtHQUFpQixRQUFRO0VBQW9DO0VBRzlFLE9BQU87R0FDTCxNQUFNO0dBQ04sZ0JBQWdCO0dBQ2hCLFlBQVksS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLFVBQVUsQ0FBQztFQUMvQztDQUNGLFNBQVMsR0FBRztFQUNWLE9BQU87R0FBRSxNQUFNO0dBQWlCLFFBQVMsRUFBWTtFQUFRO0NBQy9EO0FBQ0YifQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import "../../../_virtual/_rolldown/runtime.js";
|
|
2
1
|
import { createTtftTracker } from "../common/ttft.js";
|
|
3
|
-
import { ANTHROPIC_CLAUDE_CWD, ANTHROPIC_DISALLOWED_TOOLS, anthropicConfigDir, assertSupportedOneMillionSuffix, canonicalAnthropicModel, needsCli1mSuffix,
|
|
2
|
+
import { ANTHROPIC_CLAUDE_CWD, ANTHROPIC_DISALLOWED_TOOLS, anthropicConfigDir, assertSupportedOneMillionSuffix, canonicalAnthropicModel, needsCli1mSuffix, supports1MContext, usesAdaptiveThinking } from "./anthropic-constants.js";
|
|
4
3
|
import { buildStreamJsonInput, handleStreamJsonLine } from "./stream-json-adapter.js";
|
|
5
4
|
import { mkdirSync, unlinkSync, writeFileSync } from "node:fs";
|
|
6
5
|
import { spawn } from "node:child_process";
|
|
@@ -65,7 +64,7 @@ function oneMillionEnv(supported) {
|
|
|
65
64
|
return supported ? {} : { CLAUDE_CODE_DISABLE_1M_CONTEXT: "1" };
|
|
66
65
|
}
|
|
67
66
|
function thinkingEnv(model) {
|
|
68
|
-
return
|
|
67
|
+
return usesAdaptiveThinking(model) ? {} : {
|
|
69
68
|
CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING: "1",
|
|
70
69
|
MAX_THINKING_TOKENS: "0"
|
|
71
70
|
};
|
|
@@ -104,7 +103,7 @@ function buildClaudeArgs(opts) {
|
|
|
104
103
|
"--model",
|
|
105
104
|
applyOneMillionSuffix(opts.model, opts.needsOneMillionSuffix ?? false),
|
|
106
105
|
...systemArgs,
|
|
107
|
-
...
|
|
106
|
+
...usesAdaptiveThinking(opts.model) ? [] : ["--thinking", "disabled"],
|
|
108
107
|
"--effort",
|
|
109
108
|
opts.effort ?? "low",
|
|
110
109
|
"--disable-slash-commands",
|
|
@@ -181,9 +180,8 @@ function runClaudeSession(req, onDelta) {
|
|
|
181
180
|
const ttftTracker = createTtftTracker();
|
|
182
181
|
const onTrackedDelta = ttftTracker.wrapDelta(onDelta);
|
|
183
182
|
let stderrBuf = "";
|
|
184
|
-
const STDERR_CAP = 4096;
|
|
185
183
|
child.stderr?.on("data", (d) => {
|
|
186
|
-
stderrBuf = (stderrBuf + d.toString()).slice(-
|
|
184
|
+
stderrBuf = (stderrBuf + d.toString()).slice(-4096);
|
|
187
185
|
});
|
|
188
186
|
const stderrSuffix = () => stderrBuf.trim() ? ` — stderr: ${stderrBuf.trim()}` : "";
|
|
189
187
|
const cleanupSpawnFiles = () => {
|
|
@@ -266,4 +264,4 @@ function runClaudeSession(req, onDelta) {
|
|
|
266
264
|
//#endregion
|
|
267
265
|
export { SYSTEM_PROMPT_ARGV_MAX_BYTES, applyOneMillionSuffix, buildClaudeArgs, decorateAndSerialize, ensureConfigDir, makeAnthropicWorkerId, oneMillionEnv, runClaudeSession, structuredOutputRetriesEnv, thinkingEnv, withSessionLock };
|
|
268
266
|
|
|
269
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdWRlLXNlc3Npb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvY2xhdWRlLXNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjbGF1ZGUtc2Vzc2lvbiDigJQgQ2xhdWRlIENMSSDshLjshZggc3Bhd24gKyBRZ3JpZFRocmVhZENvb3JkIOunpO2VkSArIHBlci1zZXNzaW9uIOudvS5cbiAqXG4gKiDrqYDti7DthLQ6IOunpCDtmLjstpwgZnJlc2ggYC0tc2Vzc2lvbi1pZCA8dXVpZD5g66GcIOyLpO2Wie2VnOuLpC4g7J6F66Cl7J2AIOyWtOuMke2EsOqwgCDrp4zrk6AgSlNPTkwg7J2EXG4gKiBzdGRpbiDsnLzroZwg7Z2Y66as6rOgKGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmApLCDstpzroKXsnYAg7YyM7ISc66GcIOyymOumrO2VnOuLpC5cbiAqXG4gKiDtlbXsi6wg6rOE7JW9OlxuICogIC0gY29vcmQg64qUIOyehOydmCDsoIDsnqXsnbQg7JWE64uI6528IOq4sOyhtCBRZ3JpZFRocmVhZENvb3Jke3dvcmtlcklkLHRocmVhZElkLGVwb2NoLHN5c3RlbUhhc2h9IOyXkFxuICogICAg66ek7ZWR7ZWc64ukLiB0aHJlYWRJZD3shLjshZggdXVpZCwgZXBvY2g9MCDqs6DsoJUod29ya2VyIHJlc3RhcnQg6rCc64WQIOyXhuydjCksIHdvcmtlcklkPXRva2VuIOq4sOuwmFxuICogICAg7JWI7KCVIO2VqeyEsSwgc3lzdGVtSGFzaD3smpTssq0gc3lzdGVtIO2VtOyLnC4gaXNzdWVDb252Q29udGV4dC9kZWNpZGVDb252Um91dGluZyDqs7wgcm91bmQtdHJpcC5cbiAqICAtIHdpdGhTZXNzaW9uTG9jayDsnYAgZXhwb3J0ZWQgcHJpbWl0aXZlIOuhnCDsnKDsp4DtlZzri6QuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggc2Vzc2lvbi1pZCDrnbxcbiAqICAgIOyCrOyLpOyDgSBuby1jb250ZW50aW9uIOydtOyngOunjCwg7KeB7KCRIO2YuOy2nOyekC/thYzsiqTtirjsnZgg7KeB66Cs7ZmUIOuztOyepeydgCDrs7TsobTtlZzri6QuXG4gKiAgLSBzdHJlYW0tanNvbiDsp4HroKztmZQg7IucIFNESyBlbnZlbG9wZSh1dWlkL3Nlc3Npb25faWQvcGFyZW50X3Rvb2xfdXNlX2lkKSBkZWNvcmF0ZS5cbiAqICAtIHN0cnVjdHVyZWQgb3V0cHV0IOydvCDrlYwg7Lac66ClIO2MjOyEnOyXkCB7IHN0cnVjdHVyZWRPdXRwdXQ6IHRydWUgfSDsoITri6wo7JeG7Jy866m0IHN0cmVhbU9iamVjdCDquajsp5ApLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgdHlwZSBKc29uVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvc2VyZGVfanNvbi9Kc29uVmFsdWVcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Ub2tlblVzYWdlQnJlYWtkb3duXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Vc2VySW5wdXRcIjtcbmltcG9ydCB7IGNyZWF0ZVR0ZnRUcmFja2VyIH0gZnJvbSBcIi4uL2NvbW1vbi90dGZ0XCI7XG5pbXBvcnQge1xuICBBTlRIUk9QSUNfQ0xBVURFX0NXRCxcbiAgYW50aHJvcGljQ29uZmlnRGlyLFxuICBBTlRIUk9QSUNfREVGQVVMVF9FRkZPUlQsXG4gIEFOVEhST1BJQ19ESVNBTExPV0VEX1RPT0xTLFxuICBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4LFxuICBjYW5vbmljYWxBbnRocm9waWNNb2RlbCxcbiAgbmVlZHNDbGkxbVN1ZmZpeCxcbiAgcmVxdWlyZXNBZGFwdGl2ZVRoaW5raW5nLFxuICBzdXBwb3J0czFNQ29udGV4dCxcbn0gZnJvbSBcIi4vYW50aHJvcGljLWNvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgYnVpbGRTdHJlYW1Kc29uSW5wdXQsXG4gIHR5cGUgQ2xhdWRlU3RyZWFtSnNvblN0YXRlLFxuICB0eXBlIENsYXVkZVN0cmVhbUpzb25MaW5lLFxuICB0eXBlIENsYXVkZVN0cmVhbVJlc3VsdCxcbiAgaGFuZGxlU3RyZWFtSnNvbkxpbmUsXG59IGZyb20gXCIuL3N0cmVhbS1qc29uLWFkYXB0ZXJcIjtcblxuLy8g4pSA4pSAIHBlci1zZXNzaW9uIOudvSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gc2Vzc2lvbi1pZCDri6jsnIQg7KeB66Cs7ZmUIHByaW1pdGl2ZS4g6riw67O4IOqyveuhnOyXkOyEnOuKlCDrp6Qg7Zi47LacIOyDiCB1dWlkIOudvCDsgqzsi6Tsg4Egbm8tb3Ag7J207KeA66eMLFxuLy8g6rCZ7J2AIHNlc3Npb24taWQg66W8IOyngeygkSDsk7DripQg7Zi47Lac7J6Q64qUIOyXrOyghO2eiCDsp4HroKztmZQg67O07J6l7J2EIOuwm+uKlOuLpC5cbmNvbnN0IHNlc3Npb25DaGFpbnMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx1bmtub3duPj4oKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhTZXNzaW9uTG9jazxUPihzZXNzaW9uSWQ6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcHJldiA9IHNlc3Npb25DaGFpbnMuZ2V0KHNlc3Npb25JZCkgPz8gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIC8vIOydtOyghCB0dXJuIOydmCDshLHtjKjsmYAg66y06rSA7ZWY6rKMIOyngeugrCDssrTsnbjsnYQg7J6H64qU64ukLlxuICBjb25zdCBuZXh0ID0gcHJldi50aGVuKGZuLCBmbik7XG4gIC8vIHRhaWw6IOyEse2MqCDrrLTqtIAgc2V0dGxlIOuQmOuKlCDtlbjrk6QuIOydtOqxuCDrp7Xsl5Ag65GQ6rOgLCBmaW5hbGx5IOyXkOyEnCBcIuyXrOyghO2eiCDrgrTqsIAg64GdXCLsnbwg65WM66eMIOyCreygnC5cbiAgLy8gKHNldCDsp4Htm4QgdW5kZWZpbmVkIOqygOyCrOuhnCDtlZjrqbQg7KCI64yAIOyCreygnCDslYgg64+8IOyEuOyFmCBpZCDqsIAg64iE7IiY65CoIOKAlCB0YWlsIOydvOy5mCDqsoDsgqzroZwg7ZqM7ZS8LilcbiAgY29uc3QgdGFpbCA9IG5leHQudGhlbihcbiAgICAoKSA9PiB7fSxcbiAgICAoKSA9PiB7fSxcbiAgKTtcbiAgc2Vzc2lvbkNoYWlucy5zZXQoc2Vzc2lvbklkLCB0YWlsKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbmV4dDtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyDqt7gg7IKs7J20IOuLpOuluCB0dXJuIOydtCDssrTsnbjsnYQg7J207Ja067Cb7JWY7Jy866m0IHRhaWwg7J20IOq1kOyytOuPvCDsnojri6Qg4oCUIOq3uOuVjOuKlCDsgq3soJztlZjsp4Ag7JWK64qU64ukLlxuICAgIGlmIChzZXNzaW9uQ2hhaW5zLmdldChzZXNzaW9uSWQpID09PSB0YWlsKSBzZXNzaW9uQ2hhaW5zLmRlbGV0ZShzZXNzaW9uSWQpO1xuICB9XG59XG5cbi8vIOKUgOKUgCBjb29yZCDrp6TtlZEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIHRva2VuIOq4sOuwmCDslYjsoJUgd29ya2VySWQg7ZWp7ISxLiBBbnRocm9waWMg7J2AIHdvcmtlciBwb29sIOydtCDsl4bsnLzrr4DroZwgdG9rZW5JZCDrpbwg6re464yA66GcIOyTtOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlQW50aHJvcGljV29ya2VySWQodG9rZW5JZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHRva2VuSWQ7XG59XG5cbi8vIOKUgOKUgCBlbnZlbG9wZSBkZWNvcmF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gc3RyZWFtLWpzb24g7J6F66ClIOudvOyduOyXkCBTREsgZW52ZWxvcGUg67aA7LCpIO2bhCDsp4HroKztmZQuIHNlc3Npb24g7IaM7Jyg7J6Q7J24IOyXrOq4sOyEnCDtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGVBbmRTZXJpYWxpemUoXG4gIGxpbmVzOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4sXG4gIHNlc3Npb25JZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBsaW5lc1xuICAgICAgLm1hcCgobGluZSkgPT5cbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLmxpbmUsXG4gICAgICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkLFxuICAgICAgICAgIHV1aWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgICAgICBwYXJlbnRfdG9vbF91c2VfaWQ6IG51bGwsXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiXG4gICk7XG59XG5cbi8vIOKUgOKUgCBzcGF3biArIGNvbnN1bWUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlU2Vzc2lvblJlcXVlc3Qge1xuICB0b2tlbklkOiBudW1iZXI7XG4gIHRva2VuOiBzdHJpbmc7IC8vIE9BdXRoIGFjY2VzcyB0b2tlblxuICBtb2RlbDogc3RyaW5nO1xuICBzeXN0ZW0/OiBzdHJpbmc7XG4gIGpzb25TY2hlbWE/OiBzdHJpbmc7IC8vIOyeiOycvOuptCBzdHJ1Y3R1cmVkIG91dHB1dFxuICBlZmZvcnQ/OiBzdHJpbmc7XG4gIHRpbWVvdXRNczogbnVtYmVyO1xuICBjb2xkSGlzdG9yeT86IEFycmF5PEpzb25WYWx1ZT47XG4gIGlucHV0OiBBcnJheTxVc2VySW5wdXQ+O1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTZXNzaW9uUmVzdWx0IGV4dGVuZHMgQ2xhdWRlU3RyZWFtUmVzdWx0IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHdvcmtlcklkOiBudW1iZXI7XG4gIHR0ZnRNczogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gcGVyLXRva2VuIENMQVVERV9DT05GSUdfRElSIOuztOyepSjqsqnrpqwpLiDqsr3roZwg6rec7LmZ7J2AIGFudGhyb3BpY0NvbmZpZ0RpcijsiJzsiJgg7ZWo7IiYKeydtCDshozsnKAg4oCUXG4vLyDsl6zquLDshKAg6re4IOqyveuhnOyXkCDruYggc2V0dGluZ3Mg66W8IOq5lOyVhCBjbGF1ZGUtbWVtIGhvb2sg65Ox7J2EIOywqOuLqO2VnOuLpC4gKFIxMCDqsqnrpqwpXG4vLyDsnbQgc2VlZCDtjIzsnbzsnYAgY2xhdWRlLW1lbSBob29rIC8g7IKs7Jqp7J6QIOyEpOyglSDsmKTsl7wg7LCo64uo7J2EIOychO2VnCDqsqnrpqwg6rK96rOE64ukLiDrp6Qg7Zi47Lac66eI64ukIOuLpOyLnCDsjajshJxcbi8vIOyZuOu2gCDrs4DsobDCt+yCreygnCDtm4Tsl5Drj4Qg64uk7J2MIOyLpO2WieyXkOyEnCBzZWxmLWhlYWxpbmcg65CY64+E66GdIOq4sOyhtCBzZW1hbnRpY3Mg66W8IOycoOyngO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVDb25maWdEaXIodG9rZW5JZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgZGlyID0gYW50aHJvcGljQ29uZmlnRGlyKHRva2VuSWQpO1xuICBta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhgJHtkaXJ9Ly5jbGF1ZGUuanNvbmAsIFwie31cIik7XG4gIHdyaXRlRmlsZVN5bmMoYCR7ZGlyfS9zZXR0aW5ncy5qc29uYCwgXCJ7fVwiKTtcbiAgcmV0dXJuIGRpcjtcbn1cblxubGV0IGN3ZEVuc3VyZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGVuc3VyZUN3ZCgpOiB2b2lkIHtcbiAgaWYgKGN3ZEVuc3VyZWQpIHJldHVybjtcbiAgbWtkaXJTeW5jKGAke0FOVEhST1BJQ19DTEFVREVfQ1dEfS8uY2xhdWRlYCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMoYCR7QU5USFJPUElDX0NMQVVERV9DV0R9Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbmAsIFwie31cIik7XG4gIGN3ZEVuc3VyZWQgPSB0cnVlO1xufVxuXG4vLyBzcGF3biBhcmdzIOq1rOyEsS4g66mA7Yuw7YS0L+qyqeumrC9zdHJ1Y3R1cmVkIOuqqOuTnCDrsJjsmIEuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlPbmVNaWxsaW9uU3VmZml4KG1vZGVsOiBzdHJpbmcsIG5lZWRzU3VmZml4OiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgYmFzZSA9IGNhbm9uaWNhbEFudGhyb3BpY01vZGVsKG1vZGVsKTtcbiAgcmV0dXJuIG5lZWRzU3VmZml4ID8gYCR7YmFzZX1bMW1dYCA6IGJhc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbmVNaWxsaW9uRW52KHN1cHBvcnRlZDogYm9vbGVhbik6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUPzogXCIxXCIgfSB7XG4gIHJldHVybiBzdXBwb3J0ZWQgPyB7fSA6IHsgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUOiBcIjFcIiB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpbmtpbmdFbnYobW9kZWw6IHN0cmluZyk6IHtcbiAgQ0xBVURFX0NPREVfRElTQUJMRV9BREFQVElWRV9USElOS0lORz86IFwiMVwiO1xuICBNQVhfVEhJTktJTkdfVE9LRU5TPzogXCIwXCI7XG59IHtcbiAgcmV0dXJuIHJlcXVpcmVzQWRhcHRpdmVUaGlua2luZyhtb2RlbClcbiAgICA/IHt9XG4gICAgOiB7XG4gICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQURBUFRJVkVfVEhJTktJTkc6IFwiMVwiLFxuICAgICAgICBNQVhfVEhJTktJTkdfVE9LRU5TOiBcIjBcIixcbiAgICAgIH07XG59XG5cbi8vIFNPTi00OTU6IHN0cnVjdHVyZWQgb3V0cHV0IHJldHJ5IOulvCAxIOuhnCDqs6DsoJXtlZzri6QuIENDIOqwgCBhdHRlbXB0IOulvCByZWplY3Qg7ZWY6rOgIHJldHJ5IO2VmOuptFxuLy8gYHtyZWplY3RlZH17YWNjZXB0ZWR9YCDriITsoIHsnbQgQUktU0RLIOydmCBKU09OLnBhcnNlIOulvCDquajrnKjrpqzrr4DroZwsIHJldHJ5IOyekOyytOulvCDrp4nslYQg6re4IOqyveuhnOulvFxuLy8g7JuQ7LKcIOywqOuLqO2VnOuLpC4gYDBgIOydgCBDQyBxdWVyeSBsb29wKGBjYWxsc1RoaXNRdWVyeSA+PSBtYXhSZXRyaWVzYCnqsIAg7LKrIGF0dGVtcHQgZW1pdCDsoITsl5Bcbi8vIOyLpO2MqOyLnO2CpOuvgOuhnChgZXJyb3JfbWF4X3N0cnVjdHVyZWRfb3V0cHV0X3JldHJpZXNgKSDsmbjrtoAg6rCS7J20IDEg66+466eM7J207Ja064+EIDEg66GcIO2BtOueqO2UhO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkT3V0cHV0UmV0cmllc0VudihyYXcgPSBwcm9jZXNzLmVudi5NQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUyk6IHtcbiAgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IHN0cmluZztcbn0ge1xuICBpZiAoIXJhdykgcmV0dXJuIHsgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IFwiMVwiIH07XG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlci5wYXJzZUludChyYXcsIDEwKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSkgcmV0dXJuIHsgTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVM6IFwiMVwiIH07XG4gIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBTdHJpbmcoTWF0aC5tYXgocGFyc2VkLCAxKSkgfTtcbn1cblxuLy8gTGludXgg64uo7J28IGFyZ3Yg7J247J6QIO2VnOqzhChNQVhfQVJHX1NUUkxFTiA9IFBBR0VfU0laRcOXMzIgPSAxMjhLQiwg7Luk64SQIO2VmOuTnOy9lOuUqSDsg4HsiJgpXG4vLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq46rCAIOydtOulvCDrhJjsnLzrqbQgZXhlY3ZlIOqwgCBFMkJJRyDroZwg6rGw67aA65Cc64ukLiBkZXRpIOuTsSDrjIDtmJUg7ZSE66Gs7ZSE7Yq464qUIOyLpOy4oVxuLy8g7Y+J6regIDM0M0tCwrfstZzrjIAgNDg1S0Iob3B1cy00LTgp6528IOydvOyDgeyggeycvOuhnCDstIjqs7ztlZzri6QuIO2VnOqzhOydmCDsoIjrsJgoNjRLQinsnYQg7J6E6rOE6rCS7Jy866GcIOyeoeyVhFxuLy8gVVRGLTgg66mA7Yuw67CU7J207Yq4wrfsmIjsuKEg66q7IO2VnCDsl6zsnKDrtoTquYzsp4Ag7JWI7KCEIOuniOynhOydhCDrkZTri6QuXG5leHBvcnQgY29uc3QgU1lTVEVNX1BST01QVF9BUkdWX01BWF9CWVRFUyA9IDY0ICogMTAyNDtcblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ2xhdWRlQXJncyhvcHRzOiB7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIC8vIOyLnOyKpO2FnCDtlITroaztlITtirgg7KCE64us7J2AIO2BrOq4sOuhnCDrtoTquLDtlZzri6Qo7Zi47Lac67aA6rCAIOqysOyglSk6XG4gIC8vICAtIOyekeycvOuptCBzeXN0ZW0oaW5saW5lKSDihpIgLS1zeXN0ZW0tcHJvbXB0IDx0ZXh0PiAo7YyM7J28IEkvTyDsl4bsnYwsIOq4sOyhtCDqsr3roZwpXG4gIC8vICAtIO2BrOuptCBzeXN0ZW1Qcm9tcHRGaWxlKOqyveuhnCkg4oaSIC0tc3lzdGVtLXByb21wdC1maWxlIDxwYXRoPiAoYXJndiDtlZzqs4Qg7ZqM7ZS8KVxuICAvLyAtLXN5c3RlbS1wcm9tcHQtZmlsZSDsnYAgLS1zeXN0ZW0tcHJvbXB0IOyZgCDrj5nsnbztlZjqsowgZGVmYXVsdCDrpbwgcmVwbGFjZSDtlZzri6QoYXBwZW5kIOyVhOuLmCDigJRcbiAgLy8gUjcg6rKp66asIOuztOyhtCwg7Iuk7LihIO2ZleyduCkuIOuRmCDri6Qg7JeG7Jy866m0IOu5iCAtLXN5c3RlbS1wcm9tcHQoZGVmYXVsdCAyM2sg7KO87J6FIOuwqeyngCkuXG4gIHN5c3RlbT86IHN0cmluZztcbiAgc3lzdGVtUHJvbXB0RmlsZT86IHN0cmluZztcbiAgZWZmb3J0Pzogc3RyaW5nO1xuICBqc29uU2NoZW1hPzogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbmVlZHNPbmVNaWxsaW9uU3VmZml4PzogYm9vbGVhbjtcbiAgaW5jbHVkZVBhcnRpYWxNZXNzYWdlcz86IGJvb2xlYW47XG59KTogQXJyYXk8c3RyaW5nPiB7XG4gIGNvbnN0IHVzZVN0cnVjdHVyZWQgPSBCb29sZWFuKG9wdHMuanNvblNjaGVtYSAmJiBvcHRzLmpzb25TY2hlbWEubGVuZ3RoID4gMCk7XG4gIC8vIC0tdG9vbHMgXCJcIiDroZwg7KCE7LK0IOywqOuLqCwgc3RydWN0dXJlZChqc29uU2NoZW1hIOyeiOydjCkg66m0IFN0cnVjdHVyZWRPdXRwdXQg66eMIO2XiOyaqS5cbiAgY29uc3QgdG9vbEFyZ3MgPSB1c2VTdHJ1Y3R1cmVkXG4gICAgPyBbXCItLXRvb2xzXCIsIFwiXCIsIFwiLS1hbGxvd2VkLXRvb2xzXCIsIFwiU3RydWN0dXJlZE91dHB1dFwiXVxuICAgIDogW1wiLS10b29sc1wiLCBcIlwiXTtcblxuICAvLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4OiDtjIzsnbwg6rK966Gc6rCAIOyYpOuptCAtLXN5c3RlbS1wcm9tcHQtZmlsZSwg7JWE64uI66m0IGlubGluZSAtLXN5c3RlbS1wcm9tcHQuXG4gIC8vICjtmLjstpzrtoDqsIAg7YGs6riw66GcIOu2hOq4sO2VtCDrkZgg7KSRIO2VmOuCmOunjCDssYTsmrTri6QuIOuRmCDri6Qg7JeG7Jy866m0IOu5iCAtLXN5c3RlbS1wcm9tcHQuKVxuICBjb25zdCBzeXN0ZW1BcmdzID0gb3B0cy5zeXN0ZW1Qcm9tcHRGaWxlXG4gICAgPyBbXCItLXN5c3RlbS1wcm9tcHQtZmlsZVwiLCBvcHRzLnN5c3RlbVByb21wdEZpbGVdXG4gICAgOiBbXCItLXN5c3RlbS1wcm9tcHRcIiwgb3B0cy5zeXN0ZW0gPz8gXCJcIl07XG5cbiAgY29uc3QgYXJnczogQXJyYXk8c3RyaW5nPiA9IFtcbiAgICBcIi1wXCIsXG4gICAgLi4udG9vbEFyZ3MsXG4gICAgXCItLWRpc2FsbG93ZWRUb29sc1wiLFxuICAgIC4uLkFOVEhST1BJQ19ESVNBTExPV0VEX1RPT0xTLFxuICAgIFwiLS1pbnB1dC1mb3JtYXRcIixcbiAgICBcInN0cmVhbS1qc29uXCIsXG4gICAgXCItLW91dHB1dC1mb3JtYXRcIixcbiAgICBcInN0cmVhbS1qc29uXCIsXG4gICAgXCItLXZlcmJvc2VcIixcbiAgICAuLi4ob3B0cy5pbmNsdWRlUGFydGlhbE1lc3NhZ2VzID8gW1wiLS1pbmNsdWRlLXBhcnRpYWwtbWVzc2FnZXNcIl0gOiBbXSksXG4gICAgXCItLXBlcm1pc3Npb24tbW9kZVwiLFxuICAgIFwiYnlwYXNzUGVybWlzc2lvbnNcIixcbiAgICBcIi0tc2V0dGluZy1zb3VyY2VzXCIsXG4gICAgXCJwcm9qZWN0XCIsXG4gICAgXCItLW1vZGVsXCIsXG4gICAgYXBwbHlPbmVNaWxsaW9uU3VmZml4KG9wdHMubW9kZWwsIG9wdHMubmVlZHNPbmVNaWxsaW9uU3VmZml4ID8/IGZhbHNlKSxcbiAgICAvLyBpbmxpbmUgW1N5c3RlbV0g6riI7KeAIOKAlCDsoJXsi50g7LGE64SQ66eMKFI3KS4g7IOd6561IOyLnCBDQyBkZWZhdWx0KDIzaykg7KO87J6F65CY66+A66GcIOuwmOuTnOyLnCDrqoXsi5wuXG4gICAgLy8g7YGs6riw7JeQIOuUsOudvCAtLXN5c3RlbS1wcm9tcHQo7J6R7J2MKSAvIC0tc3lzdGVtLXByb21wdC1maWxlKO2BvCnroZwg67aE6riwKHN5c3RlbUFyZ3MpLlxuICAgIC4uLnN5c3RlbUFyZ3MsXG4gICAgLy8gRmFibGUgNSDripQgYWRhcHRpdmUgdGhpbmtpbmcg7J20IO2VreyDgSDsvJzsoLgg7J6I7Ja0IGRpc2FibGVkIOulvCDqsbDrtoDtlZzri6QuXG4gICAgLi4uKHJlcXVpcmVzQWRhcHRpdmVUaGlua2luZyhvcHRzLm1vZGVsKSA/IFtdIDogW1wiLS10aGlua2luZ1wiLCBcImRpc2FibGVkXCJdKSxcbiAgICBcIi0tZWZmb3J0XCIsXG4gICAgb3B0cy5lZmZvcnQgPz8gQU5USFJPUElDX0RFRkFVTFRfRUZGT1JULFxuICAgIFwiLS1kaXNhYmxlLXNsYXNoLWNvbW1hbmRzXCIsXG4gICAgXCItLXNlc3Npb24taWRcIixcbiAgICBvcHRzLnNlc3Npb25JZCxcbiAgXTtcbiAgaWYgKHVzZVN0cnVjdHVyZWQpIGFyZ3MucHVzaChcIi0tanNvbi1zY2hlbWFcIiwgb3B0cy5qc29uU2NoZW1hISk7XG4gIHJldHVybiBhcmdzO1xufVxuXG4vKipcbiAqIENsYXVkZSDshLjshZjsnYQgc3Bhd24g7ZW0IO2VnCB0dXJuIOydhCDsi6TtlontlZzri6QuIHBlci1zZXNzaW9uIOudveycvOuhnCDsp4HroKztmZTrkJzri6QuXG4gKiBAcGFyYW0gb25EZWx0YSDsoJDsp4Qg7YWN7Iqk7Yq4IGRlbHRhKHN0cmVhbVRleHQpIOuYkOuKlCBzdHJ1Y3R1cmVkIOu2gOu2hCBKU09OKHN0cmVhbU9iamVjdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5DbGF1ZGVTZXNzaW9uKFxuICByZXE6IENsYXVkZVNlc3Npb25SZXF1ZXN0LFxuICBvbkRlbHRhOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxDbGF1ZGVTZXNzaW9uUmVzdWx0PiB7XG4gIC8vIOygleq3nO2ZlCDqt5zsuZnsnYAgY2Fub25pY2FsQW50aHJvcGljTW9kZWwg7J20IOuLqOuPhSDshozsnKAg4oCUIGRpc3BhdGNoZXIg6rCAIOydtOuvuCBjYW5vbmljYWwg7J2EIOuEmOq4sOyngOunjCxcbiAgLy8g7KeB7KCRIO2YuOy2nCjthYzsiqTtirgv66+4656YIGNhbGxlcikg64yA67mEIOuwqeyWtOyggeycvOuhnCDtlZwg67KIIOuNlCDthrXqs7zsi5ztgqjri6Qo7J2066+4IGNhbm9uaWNhbCDsnbTrqbQgbm8tb3ApLlxuICBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4KHJlcS5tb2RlbCk7XG4gIGNvbnN0IG1vZGVsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwocmVxLm1vZGVsKTtcbiAgY29uc3Qgc3VwcG9ydHNPbmVNaWxsaW9uID0gc3VwcG9ydHMxTUNvbnRleHQobW9kZWwpO1xuICBjb25zdCBuZWVkc09uZU1pbGxpb25TdWZmaXggPSBuZWVkc0NsaTFtU3VmZml4KG1vZGVsKTtcbiAgY29uc3Qgc2Vzc2lvbklkID0gcmFuZG9tVVVJRCgpO1xuICBjb25zdCB1c2VTdHJ1Y3R1cmVkID0gQm9vbGVhbihyZXEuanNvblNjaGVtYSAmJiByZXEuanNvblNjaGVtYS5sZW5ndGggPiAwKTtcbiAgY29uc3Qgd29ya2VySWQgPSBtYWtlQW50aHJvcGljV29ya2VySWQocmVxLnRva2VuSWQpO1xuXG4gIHJldHVybiB3aXRoU2Vzc2lvbkxvY2soc2Vzc2lvbklkLCAoKSA9PiB7XG4gICAgZW5zdXJlQ3dkKCk7XG4gICAgY29uc3QgY29uZmlnRGlyID0gZW5zdXJlQ29uZmlnRGlyKHJlcS50b2tlbklkKTtcblxuICAgIC8vIOyLnOyKpO2FnCDtlITroaztlITtirjrpbwg7YGs6riw66GcIOu2hOq4sDogMTI4S0IoYXJndiDtlZzqs4Qp7J2YIOygiOuwmOydhCDrhJjsnLzrqbQg7YyM7J2866GcIOuEmOqyqCBFMkJJRyDtmoztlLwuXG4gICAgLy8g7J6R7J2AIO2UhOuhrO2UhO2KuOuKlCDtjIzsnbwgSS9PIOyXhuydtCDquLDsobQgaW5saW5lIOqyveuhnOulvCDqt7jrjIDroZwg7JO064ukKOuMgOu2gOu2hOydmCDtmLjstpwpLlxuICAgIC8vIOyLpOygnCDtjIzsnbwg7JOw6riw64qUIGFib3J0IOyytO2BrCDsnbTtm4QoUHJvbWlzZSDslYgp66GcIOuvuOukhCwg7J2066+4IOy3qOyGjOuQnCDsmpTssq3sl5Qg7JOw7KeAIOyViuuKlOuLpC5cbiAgICBjb25zdCBzeXN0ZW0gPSByZXEuc3lzdGVtID8/IFwiXCI7XG4gICAgY29uc3QgdXNlU3lzdGVtUHJvbXB0RmlsZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHN5c3RlbSwgXCJ1dGY4XCIpID4gU1lTVEVNX1BST01QVF9BUkdWX01BWF9CWVRFUztcbiAgICBjb25zdCBzeXN0ZW1Qcm9tcHRGaWxlID0gdXNlU3lzdGVtUHJvbXB0RmlsZVxuICAgICAgPyBgJHtjb25maWdEaXJ9L3N5c3RlbS1wcm9tcHQtJHtzZXNzaW9uSWR9LnR4dGBcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYXJncyA9IGJ1aWxkQ2xhdWRlQXJncyh7XG4gICAgICBtb2RlbCxcbiAgICAgIHN5c3RlbTogdXNlU3lzdGVtUHJvbXB0RmlsZSA/IHVuZGVmaW5lZCA6IHJlcS5zeXN0ZW0sXG4gICAgICBzeXN0ZW1Qcm9tcHRGaWxlLFxuICAgICAgZWZmb3J0OiByZXEuZWZmb3J0LFxuICAgICAganNvblNjaGVtYTogcmVxLmpzb25TY2hlbWEsXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBuZWVkc09uZU1pbGxpb25TdWZmaXgsXG4gICAgICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiByZXEuaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0TGluZXMgPSBidWlsZFN0cmVhbUpzb25JbnB1dCh7XG4gICAgICBjb2xkSGlzdG9yeTogcmVxLmNvbGRIaXN0b3J5LFxuICAgICAgaW5wdXQ6IHJlcS5pbnB1dCxcbiAgICB9KTtcbiAgICBjb25zdCBzdGRpblBheWxvYWQgPSBkZWNvcmF0ZUFuZFNlcmlhbGl6ZShpbnB1dExpbmVzLCBzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPENsYXVkZVNlc3Npb25SZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXEuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcImFib3J0ZWRcIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIOuMgO2YlSDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq464qUIHNwYXduIOyngeyghOyXkCDtjIzsnbzroZwg6riw66GdKGFyZ3YgRTJCSUcg7ZqM7ZS8KS4g7KKF66OMIOyLnCDsoJXrpqztlZzri6QuXG4gICAgICBpZiAoc3lzdGVtUHJvbXB0RmlsZSkgd3JpdGVGaWxlU3luYyhzeXN0ZW1Qcm9tcHRGaWxlLCBzeXN0ZW0pO1xuXG4gICAgICBjb25zdCBjaGlsZCA9IHNwYXduKFwiY2xhdWRlXCIsIGFyZ3MsIHtcbiAgICAgICAgLy8gc3RkZXJyIOuPhCDsuqHsspg6IGludmFsaWQgT0F1dGggLyDsnpjrqrvrkJwg7ZSM656Y6re4IC8gQ0xJIOqygOymnSDsi6TtjKjqsIBcbiAgICAgICAgLy8gXCJjbG9zZWQgd2l0aG91dCByZXN1bHRcIiDroZwg662J6rCc7KeA7KeAIOyViuqyjCBjbG9zZS9lcnJvciDsl5Agc3RkZXJyIOulvCDsi6TslrQg67O064K464ukLlxuICAgICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgICBjd2Q6IEFOVEhST1BJQ19DTEFVREVfQ1dELFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICAgICAgICAgIFRNUERJUjogcHJvY2Vzcy5lbnYuVE1QRElSLFxuICAgICAgICAgIENMQVVERV9DT0RFX09BVVRIX1RPS0VOOiByZXEudG9rZW4sXG4gICAgICAgICAgQ0xBVURFX0NPTkZJR19ESVI6IGNvbmZpZ0RpcixcbiAgICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0FVVE9fTUVNT1JZOiBcIjFcIixcbiAgICAgICAgICAuLi50aGlua2luZ0Vudihtb2RlbCksXG4gICAgICAgICAgLi4ub25lTWlsbGlvbkVudihzdXBwb3J0c09uZU1pbGxpb24pLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQ0xBVURFX01EUzogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9URVJNSU5BTF9USVRMRTogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9CVU5ETEVEX1NLSUxMUzogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9XT1JLRkxPV1M6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0FUVFJJQlVUSU9OX0hFQURFUjogXCIwXCIsXG4gICAgICAgICAgLy8gc3RydWN0dXJlZCBvdXRwdXQg7J28IOuVjOunjCByZXRyeSDrpbwg6rOg7KCV7ZWc64ukKFNPTi00OTUpLiB0ZXh0IOuqqOuTnOuKlCDsmIHtlqUg7JeG7J2MLlxuICAgICAgICAgIC4uLih1c2VTdHJ1Y3R1cmVkID8gc3RydWN0dXJlZE91dHB1dFJldHJpZXNFbnYoKSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGJ1ZmZlciA9IFwiXCI7XG4gICAgICBjb25zdCBzdHJlYW1TdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlID0ge307XG4gICAgICBjb25zdCB0dGZ0VHJhY2tlciA9IGNyZWF0ZVR0ZnRUcmFja2VyKCk7XG4gICAgICBjb25zdCBvblRyYWNrZWREZWx0YSA9IHR0ZnRUcmFja2VyLndyYXBEZWx0YShvbkRlbHRhKTtcbiAgICAgIC8vIGJvdW5kZWQgc3RkZXJyIOuyhO2NvCjstZzqt7wgfjRLQuunjCDsnKDsp4Ag4oCUIOustO2VnCDriITsoIEg67Cp7KeAKS5cbiAgICAgIGxldCBzdGRlcnJCdWYgPSBcIlwiO1xuICAgICAgY29uc3QgU1RERVJSX0NBUCA9IDQwOTY7XG4gICAgICBjaGlsZC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoZDogQnVmZmVyKSA9PiB7XG4gICAgICAgIHN0ZGVyckJ1ZiA9IChzdGRlcnJCdWYgKyBkLnRvU3RyaW5nKCkpLnNsaWNlKC1TVERFUlJfQ0FQKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RkZXJyU3VmZml4ID0gKCkgPT4gKHN0ZGVyckJ1Zi50cmltKCkgPyBgIOKAlCBzdGRlcnI6ICR7c3RkZXJyQnVmLnRyaW0oKX1gIDogXCJcIik7XG4gICAgICAvLyBzcGF3biDsi5wg7JO0IOyehOyLnCDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4IO2MjOydvCDsoJXrpqwo7ZWcIOuyiOunjCkuIOuqqOuToCDsooXro4wg6rK966Gc7JeQ7IScIO2YuOy2nO2VnOuLpC5cbiAgICAgIC8vIOuIhOudveuPvOuPhCDri6TsnYwgZW5zdXJlQ29uZmlnRGlyIOqwgCDrlJTroInthqDrpqzrpbwg7J6s7IKs7Jqp7ZWgIOu/kOydtOyngOunjCwgc2Vzc2lvbklkIOuzhCDtjIzsnbzsnbTrnbxcbiAgICAgIC8vIOyMk+ydtOuptCDrlJTsiqTtgazqsIAg7LCo66+A66GcIHNldHRsZSDsi5wg7KaJ7IucIOyngOyatOuLpC5cbiAgICAgIGNvbnN0IGNsZWFudXBTcGF3bkZpbGVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXN5c3RlbVByb21wdEZpbGUpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1bmxpbmtTeW5jKHN5c3RlbVByb21wdEZpbGUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyDsnbTrr7gg7JeG6rGw64KYIOq2jO2VnCDrrLjsoJzrqbQg66y07IucIOKAlCDsoJXrpqzripQgYmVzdC1lZmZvcnQuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgY2xlYW51cEFib3J0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiB0aW1lb3V0IGFmdGVyICR7cmVxLnRpbWVvdXRNcyAvIDEwMDB9c2ApKTtcbiAgICAgIH0sIHJlcS50aW1lb3V0TXMpO1xuXG4gICAgICBjb25zdCBmaW5pc2ggPSAocmVzdWx0OiBDbGF1ZGVTdHJlYW1SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIHJlc29sdmUoeyAuLi5yZXN1bHQsIHNlc3Npb25JZCwgd29ya2VySWQsIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICBjaGlsZC5raWxsKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJhYm9ydGVkXCIpKTtcbiAgICAgIH07XG4gICAgICBjbGVhbnVwQWJvcnQgPSAoKSA9PiByZXEuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIHJlcS5hYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBidWZmZXIgKz0gZC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgPz8gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlU3RyZWFtSnNvbkxpbmUobGluZSwgb25UcmFja2VkRGVsdGEsIHtcbiAgICAgICAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHVzZVN0cnVjdHVyZWQsXG4gICAgICAgICAgICBzdGF0ZTogc3RyZWFtU3RhdGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZmluaXNoKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBjbG9zZWQgd2l0aG91dCByZXN1bHQke3N0ZGVyclN1ZmZpeCgpfWApKTtcbiAgICAgIH0pO1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBzcGF3biBlcnJvcjogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gc3RkaW4g7Jy866GcIOyeheugpSBKU09OTCDtnZjrpqzqs6Ag64ur64qU64ukLlxuICAgICAgdHRmdFRyYWNrZXIubWFya1N0YXJ0KCk7XG4gICAgICBjaGlsZC5zdGRpbj8ud3JpdGUoc3RkaW5QYXlsb2FkKTtcbiAgICAgIGNoaWxkLnN0ZGluPy5lbmQoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8vIHVzYWdlIOyerOuFuOy2nCjthYzsiqTtirgg7Y647J2YKS5cbmV4cG9ydCB0eXBlIHsgVG9rZW5Vc2FnZUJyZWFrZG93biB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDQSxNQUFNLGdDQUFnQixJQUFJLEtBQStCO0FBRXpELGVBQXNCLGdCQUFtQixXQUFtQixJQUFrQztDQUc1RixNQUFNLFFBRk8sY0FBYyxJQUFJLFVBQVUsSUFBSSxRQUFRLFNBQVMsRUFFNUMsS0FBSyxJQUFJLEdBQUc7Q0FHOUIsTUFBTSxPQUFPLEtBQUssV0FDVixVQUNBLEdBQ1A7QUFDRCxlQUFjLElBQUksV0FBVyxLQUFLO0FBQ2xDLEtBQUk7QUFDRixTQUFPLE1BQU07V0FDTDtBQUVSLE1BQUksY0FBYyxJQUFJLFVBQVUsS0FBSyxLQUFNLGVBQWMsT0FBTyxVQUFVOzs7QUFPOUUsU0FBZ0Isc0JBQXNCLFNBQXlCO0FBQzdELFFBQU87O0FBTVQsU0FBZ0IscUJBQ2QsT0FDQSxXQUNRO0FBQ1IsUUFDRSxNQUNHLEtBQUssU0FDSixLQUFLLFVBQVU7RUFDYixHQUFHO0VBQ0gsWUFBWTtFQUNaLE1BQU0sWUFBWTtFQUNsQixvQkFBb0I7RUFDckIsQ0FBQyxDQUNILENBQ0EsS0FBSyxLQUFLLEdBQUc7O0FBOEJwQixTQUFnQixnQkFBZ0IsU0FBeUI7Q0FDdkQsTUFBTSxNQUFNLG1CQUFtQixRQUFRO0FBQ3ZDLFdBQVUsS0FBSyxFQUFFLFdBQVcsTUFBTSxDQUFDO0FBQ25DLGVBQWMsR0FBRyxJQUFJLGdCQUFnQixLQUFLO0FBQzFDLGVBQWMsR0FBRyxJQUFJLGlCQUFpQixLQUFLO0FBQzNDLFFBQU87O0FBR1QsSUFBSSxhQUFhO0FBQ2pCLFNBQVMsWUFBa0I7QUFDekIsS0FBSSxXQUFZO0FBQ2hCLFdBQVUsR0FBRyxxQkFBcUIsV0FBVyxFQUFFLFdBQVcsTUFBTSxDQUFDO0FBQ2pFLGVBQWMsR0FBRyxxQkFBcUIseUJBQXlCLEtBQUs7QUFDcEUsY0FBYTs7QUFJZixTQUFnQixzQkFBc0IsT0FBZSxhQUE4QjtDQUNqRixNQUFNLE9BQU8sd0JBQXdCLE1BQU07QUFDM0MsUUFBTyxjQUFjLEdBQUcsS0FBSyxRQUFROztBQUd2QyxTQUFnQixjQUFjLFdBQThEO0FBQzFGLFFBQU8sWUFBWSxFQUFFLEdBQUcsRUFBRSxnQ0FBZ0MsS0FBSzs7QUFHakUsU0FBZ0IsWUFBWSxPQUcxQjtBQUNBLFFBQU8seUJBQXlCLE1BQU0sR0FDbEMsRUFBRSxHQUNGO0VBQ0UsdUNBQXVDO0VBQ3ZDLHFCQUFxQjtFQUN0Qjs7QUFPUCxTQUFnQiwyQkFBMkIsTUFBTSxRQUFRLElBQUksK0JBRTNEO0FBQ0EsS0FBSSxDQUFDLElBQUssUUFBTyxFQUFFLCtCQUErQixLQUFLO0NBQ3ZELE1BQU0sU0FBUyxPQUFPLFNBQVMsS0FBSyxHQUFHO0FBQ3ZDLEtBQUksQ0FBQyxPQUFPLFNBQVMsT0FBTyxDQUFFLFFBQU8sRUFBRSwrQkFBK0IsS0FBSztBQUMzRSxRQUFPLEVBQUUsK0JBQStCLE9BQU8sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUU7O0FBT3ZFLE1BQWEsK0JBQStCLEtBQUs7QUFFakQsU0FBZ0IsZ0JBQWdCLE1BY2Q7Q0FDaEIsTUFBTSxnQkFBZ0IsUUFBUSxLQUFLLGNBQWMsS0FBSyxXQUFXLFNBQVMsRUFBRTtDQUU1RSxNQUFNLFdBQVcsZ0JBQ2I7RUFBQztFQUFXO0VBQUk7RUFBbUI7RUFBbUIsR0FDdEQsQ0FBQyxXQUFXLEdBQUc7Q0FJbkIsTUFBTSxhQUFhLEtBQUssbUJBQ3BCLENBQUMsd0JBQXdCLEtBQUssaUJBQWlCLEdBQy9DLENBQUMsbUJBQW1CLEtBQUssVUFBVSxHQUFHO0NBRTFDLE1BQU0sT0FBc0I7RUFDMUI7RUFDQSxHQUFHO0VBQ0g7RUFDQSxHQUFHO0VBQ0g7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLEdBQUksS0FBSyx5QkFBeUIsQ0FBQyw2QkFBNkIsR0FBRyxFQUFFO0VBQ3JFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxzQkFBc0IsS0FBSyxPQUFPLEtBQUsseUJBQXlCLE1BQU07RUFHdEUsR0FBRztFQUVILEdBQUkseUJBQXlCLEtBQUssTUFBTSxHQUFHLEVBQUUsR0FBRyxDQUFDLGNBQWMsV0FBVztFQUMxRTtFQUNBLEtBQUssVUFBQTtFQUNMO0VBQ0E7RUFDQSxLQUFLO0VBQ047QUFDRCxLQUFJLGNBQWUsTUFBSyxLQUFLLGlCQUFpQixLQUFLLFdBQVk7QUFDL0QsUUFBTzs7Ozs7O0FBT1QsU0FBZ0IsaUJBQ2QsS0FDQSxTQUM4QjtBQUc5QixpQ0FBZ0MsSUFBSSxNQUFNO0NBQzFDLE1BQU0sUUFBUSx3QkFBd0IsSUFBSSxNQUFNO0NBQ2hELE1BQU0scUJBQXFCLGtCQUFrQixNQUFNO0NBQ25ELE1BQU0sd0JBQXdCLGlCQUFpQixNQUFNO0NBQ3JELE1BQU0sWUFBWSxZQUFZO0NBQzlCLE1BQU0sZ0JBQWdCLFFBQVEsSUFBSSxjQUFjLElBQUksV0FBVyxTQUFTLEVBQUU7Q0FDMUUsTUFBTSxXQUFXLHNCQUFzQixJQUFJLFFBQVE7QUFFbkQsUUFBTyxnQkFBZ0IsaUJBQWlCO0FBQ3RDLGFBQVc7RUFDWCxNQUFNLFlBQVksZ0JBQWdCLElBQUksUUFBUTtFQUs5QyxNQUFNLFNBQVMsSUFBSSxVQUFVO0VBQzdCLE1BQU0sc0JBQXNCLE9BQU8sV0FBVyxRQUFRLE9BQU8sR0FBRztFQUNoRSxNQUFNLG1CQUFtQixzQkFDckIsR0FBRyxVQUFVLGlCQUFpQixVQUFVLFFBQ3hDO0VBRUosTUFBTSxPQUFPLGdCQUFnQjtHQUMzQjtHQUNBLFFBQVEsc0JBQXNCLFNBQVksSUFBSTtHQUM5QztHQUNBLFFBQVEsSUFBSTtHQUNaLFlBQVksSUFBSTtHQUNoQjtHQUNBO0dBQ0Esd0JBQXdCLElBQUk7R0FDN0IsQ0FBQztFQU1GLE1BQU0sZUFBZSxxQkFKRixxQkFBcUI7R0FDdEMsYUFBYSxJQUFJO0dBQ2pCLE9BQU8sSUFBSTtHQUNaLENBQUMsRUFDb0QsVUFBVTtBQUVoRSxTQUFPLElBQUksU0FBOEIsU0FBUyxXQUFXO0FBQzNELE9BQUksSUFBSSxhQUFhLFNBQVM7QUFDNUIsMkJBQU8sSUFBSSxNQUFNLFVBQVUsQ0FBQztBQUM1Qjs7QUFJRixPQUFJLGlCQUFrQixlQUFjLGtCQUFrQixPQUFPO0dBRTdELE1BQU0sUUFBUSxNQUFNLFVBQVUsTUFBTTtJQUdsQyxPQUFPO0tBQUM7S0FBUTtLQUFRO0tBQU87SUFDL0IsS0FBSztJQUNMLEtBQUs7S0FDSCxNQUFNLFFBQVEsSUFBSTtLQUNsQixRQUFRLFFBQVEsSUFBSTtLQUNwQix5QkFBeUIsSUFBSTtLQUM3QixtQkFBbUI7S0FDbkIsaUNBQWlDO0tBQ2pDLEdBQUcsWUFBWSxNQUFNO0tBQ3JCLEdBQUcsY0FBYyxtQkFBbUI7S0FDcEMsZ0NBQWdDO0tBQ2hDLG9DQUFvQztLQUNwQyxvQ0FBb0M7S0FDcEMsK0JBQStCO0tBQy9CLGdDQUFnQztLQUVoQyxHQUFJLGdCQUFnQiw0QkFBNEIsR0FBRyxFQUFFO0tBQ3REO0lBQ0YsQ0FBQztHQUVGLElBQUksVUFBVTtHQUNkLElBQUksU0FBUztHQUNiLE1BQU0sY0FBcUMsRUFBRTtHQUM3QyxNQUFNLGNBQWMsbUJBQW1CO0dBQ3ZDLE1BQU0saUJBQWlCLFlBQVksVUFBVSxRQUFRO0dBRXJELElBQUksWUFBWTtHQUNoQixNQUFNLGFBQWE7QUFDbkIsU0FBTSxRQUFRLEdBQUcsU0FBUyxNQUFjO0FBQ3RDLGlCQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVc7S0FDekQ7R0FDRixNQUFNLHFCQUFzQixVQUFVLE1BQU0sR0FBRyxjQUFjLFVBQVUsTUFBTSxLQUFLO0dBSWxGLE1BQU0sMEJBQTBCO0FBQzlCLFFBQUksQ0FBQyxpQkFBa0I7QUFDdkIsUUFBSTtBQUNGLGdCQUFXLGlCQUFpQjtZQUN0Qjs7R0FJVixJQUFJO0dBQ0osTUFBTSxRQUFRLGlCQUFpQjtBQUM3QixRQUFJLFFBQVM7QUFDYixjQUFVO0FBQ1Ysb0JBQWdCO0FBQ2hCLHVCQUFtQjtBQUNuQixVQUFNLE1BQU07QUFDWiwyQkFBTyxJQUFJLE1BQU0sZ0NBQWdDLElBQUksWUFBWSxJQUFLLEdBQUcsQ0FBQztNQUN6RSxJQUFJLFVBQVU7R0FFakIsTUFBTSxVQUFVLFdBQStCO0FBQzdDLFFBQUksUUFBUztBQUNiLGNBQVU7QUFDVixpQkFBYSxNQUFNO0FBQ25CLG9CQUFnQjtBQUNoQix1QkFBbUI7QUFDbkIsWUFBUTtLQUFFLEdBQUc7S0FBUTtLQUFXO0tBQVUsUUFBUSxZQUFZLE9BQU87S0FBRSxDQUFDOztHQUcxRSxNQUFNLGdCQUFnQjtBQUNwQixRQUFJLFFBQVM7QUFDYixjQUFVO0FBQ1YsaUJBQWEsTUFBTTtBQUNuQixvQkFBZ0I7QUFDaEIsdUJBQW1CO0FBQ25CLFVBQU0sTUFBTTtBQUNaLDJCQUFPLElBQUksTUFBTSxVQUFVLENBQUM7O0FBRTlCLHdCQUFxQixJQUFJLGFBQWEsb0JBQW9CLFNBQVMsUUFBUTtBQUMzRSxPQUFJLGFBQWEsaUJBQWlCLFNBQVMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5FLFNBQU0sUUFBUSxHQUFHLFNBQVMsTUFBYztBQUN0QyxRQUFJLFFBQVM7QUFDYixjQUFVLEVBQUUsVUFBVTtJQUN0QixNQUFNLFFBQVEsT0FBTyxNQUFNLEtBQUs7QUFDaEMsYUFBUyxNQUFNLEtBQUssSUFBSTtBQUN4QixTQUFLLE1BQU0sUUFBUSxPQUFPO0tBQ3hCLE1BQU0sU0FBUyxxQkFBcUIsTUFBTSxnQkFBZ0I7TUFDeEQsa0JBQWtCO01BQ2xCLE9BQU87TUFDUixDQUFDO0FBQ0YsU0FBSSxRQUFRO0FBQ1YsYUFBTyxPQUFPO0FBQ2Q7OztLQUdKO0FBRUYsU0FBTSxHQUFHLGVBQWU7QUFDdEIsUUFBSSxRQUFTO0FBQ2IsY0FBVTtBQUNWLGlCQUFhLE1BQU07QUFDbkIsb0JBQWdCO0FBQ2hCLHVCQUFtQjtBQUNuQiwyQkFBTyxJQUFJLE1BQU0sdUNBQXVDLGNBQWMsR0FBRyxDQUFDO0tBQzFFO0FBQ0YsU0FBTSxHQUFHLFVBQVUsUUFBUTtBQUN6QixRQUFJLFFBQVM7QUFDYixjQUFVO0FBQ1YsaUJBQWEsTUFBTTtBQUNuQixvQkFBZ0I7QUFDaEIsdUJBQW1CO0FBQ25CLDJCQUFPLElBQUksTUFBTSwrQkFBK0IsSUFBSSxVQUFVLENBQUM7S0FDL0Q7QUFHRixlQUFZLFdBQVc7QUFDdkIsU0FBTSxPQUFPLE1BQU0sYUFBYTtBQUNoQyxTQUFNLE9BQU8sS0FBSztJQUNsQjtHQUNGIn0=
|
|
267
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdWRlLXNlc3Npb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9hbnRocm9waWMvY2xhdWRlLXNlc3Npb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjbGF1ZGUtc2Vzc2lvbiDigJQgQ2xhdWRlIENMSSDshLjshZggc3Bhd24gKyBRZ3JpZFRocmVhZENvb3JkIOunpO2VkSArIHBlci1zZXNzaW9uIOudvS5cbiAqXG4gKiDrqYDti7DthLQ6IOunpCDtmLjstpwgZnJlc2ggYC0tc2Vzc2lvbi1pZCA8dXVpZD5g66GcIOyLpO2Wie2VnOuLpC4g7J6F66Cl7J2AIOyWtOuMke2EsOqwgCDrp4zrk6AgSlNPTkwg7J2EXG4gKiBzdGRpbiDsnLzroZwg7Z2Y66as6rOgKGAtLWlucHV0LWZvcm1hdCBzdHJlYW0tanNvbmApLCDstpzroKXsnYAg7YyM7ISc66GcIOyymOumrO2VnOuLpC5cbiAqXG4gKiDtlbXsi6wg6rOE7JW9OlxuICogIC0gY29vcmQg64qUIOyehOydmCDsoIDsnqXsnbQg7JWE64uI6528IOq4sOyhtCBRZ3JpZFRocmVhZENvb3Jke3dvcmtlcklkLHRocmVhZElkLGVwb2NoLHN5c3RlbUhhc2h9IOyXkFxuICogICAg66ek7ZWR7ZWc64ukLiB0aHJlYWRJZD3shLjshZggdXVpZCwgZXBvY2g9MCDqs6DsoJUod29ya2VyIHJlc3RhcnQg6rCc64WQIOyXhuydjCksIHdvcmtlcklkPXRva2VuIOq4sOuwmFxuICogICAg7JWI7KCVIO2VqeyEsSwgc3lzdGVtSGFzaD3smpTssq0gc3lzdGVtIO2VtOyLnC4gaXNzdWVDb252Q29udGV4dC9kZWNpZGVDb252Um91dGluZyDqs7wgcm91bmQtdHJpcC5cbiAqICAtIHdpdGhTZXNzaW9uTG9jayDsnYAgZXhwb3J0ZWQgcHJpbWl0aXZlIOuhnCDsnKDsp4DtlZzri6QuIOq4sOuzuCDqsr3roZzsl5DshJzripQg66ekIO2YuOy2nCDsg4ggc2Vzc2lvbi1pZCDrnbxcbiAqICAgIOyCrOyLpOyDgSBuby1jb250ZW50aW9uIOydtOyngOunjCwg7KeB7KCRIO2YuOy2nOyekC/thYzsiqTtirjsnZgg7KeB66Cs7ZmUIOuztOyepeydgCDrs7TsobTtlZzri6QuXG4gKiAgLSBzdHJlYW0tanNvbiDsp4HroKztmZQg7IucIFNESyBlbnZlbG9wZSh1dWlkL3Nlc3Npb25faWQvcGFyZW50X3Rvb2xfdXNlX2lkKSBkZWNvcmF0ZS5cbiAqICAtIHN0cnVjdHVyZWQgb3V0cHV0IOydvCDrlYwg7Lac66ClIO2MjOyEnOyXkCB7IHN0cnVjdHVyZWRPdXRwdXQ6IHRydWUgfSDsoITri6wo7JeG7Jy866m0IHN0cmVhbU9iamVjdCDquajsp5ApLlxuICovXG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgdHlwZSBKc29uVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvc2VyZGVfanNvbi9Kc29uVmFsdWVcIjtcbmltcG9ydCB7IHR5cGUgVG9rZW5Vc2FnZUJyZWFrZG93biB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Ub2tlblVzYWdlQnJlYWtkb3duXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Vc2VySW5wdXRcIjtcbmltcG9ydCB7IGNyZWF0ZVR0ZnRUcmFja2VyIH0gZnJvbSBcIi4uL2NvbW1vbi90dGZ0XCI7XG5pbXBvcnQge1xuICBBTlRIUk9QSUNfQ0xBVURFX0NXRCxcbiAgYW50aHJvcGljQ29uZmlnRGlyLFxuICBBTlRIUk9QSUNfREVGQVVMVF9FRkZPUlQsXG4gIEFOVEhST1BJQ19ESVNBTExPV0VEX1RPT0xTLFxuICBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4LFxuICBjYW5vbmljYWxBbnRocm9waWNNb2RlbCxcbiAgbmVlZHNDbGkxbVN1ZmZpeCxcbiAgc3VwcG9ydHMxTUNvbnRleHQsXG4gIHVzZXNBZGFwdGl2ZVRoaW5raW5nLFxufSBmcm9tIFwiLi9hbnRocm9waWMtY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBidWlsZFN0cmVhbUpzb25JbnB1dCxcbiAgdHlwZSBDbGF1ZGVTdHJlYW1Kc29uU3RhdGUsXG4gIHR5cGUgQ2xhdWRlU3RyZWFtSnNvbkxpbmUsXG4gIHR5cGUgQ2xhdWRlU3RyZWFtUmVzdWx0LFxuICBoYW5kbGVTdHJlYW1Kc29uTGluZSxcbn0gZnJvbSBcIi4vc3RyZWFtLWpzb24tYWRhcHRlclwiO1xuXG4vLyDilIDilIAgcGVyLXNlc3Npb24g6529IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyBzZXNzaW9uLWlkIOuLqOychCDsp4HroKztmZQgcHJpbWl0aXZlLiDquLDrs7gg6rK966Gc7JeQ7ISc64qUIOunpCDtmLjstpwg7IOIIHV1aWQg6528IOyCrOyLpOyDgSBuby1vcCDsnbTsp4Drp4wsXG4vLyDqsJnsnYAgc2Vzc2lvbi1pZCDrpbwg7KeB7KCRIOyTsOuKlCDtmLjstpzsnpDripQg7Jes7KCE7Z6IIOyngeugrO2ZlCDrs7TsnqXsnYQg67Cb64qU64ukLlxuY29uc3Qgc2Vzc2lvbkNoYWlucyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PigpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFNlc3Npb25Mb2NrPFQ+KHNlc3Npb25JZDogc3RyaW5nLCBmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCBwcmV2ID0gc2Vzc2lvbkNoYWlucy5nZXQoc2Vzc2lvbklkKSA/PyBQcm9taXNlLnJlc29sdmUoKTtcbiAgLy8g7J207KCEIHR1cm4g7J2YIOyEse2MqOyZgCDrrLTqtIDtlZjqsowg7KeB66CsIOyytOyduOydhCDsnofripTri6QuXG4gIGNvbnN0IG5leHQgPSBwcmV2LnRoZW4oZm4sIGZuKTtcbiAgLy8gdGFpbDog7ISx7YyoIOustOq0gCBzZXR0bGUg65CY64qUIO2VuOuTpC4g7J206rG4IOunteyXkCDrkZDqs6AsIGZpbmFsbHkg7JeQ7IScIFwi7Jes7KCE7Z6IIOuCtOqwgCDrgZ1cIuydvCDrlYzrp4wg7IKt7KCcLlxuICAvLyAoc2V0IOynge2bhCB1bmRlZmluZWQg6rKA7IKs66GcIO2VmOuptCDsoIjrjIAg7IKt7KCcIOyViCDrj7wg7IS47IWYIGlkIOqwgCDriITsiJjrkKgg4oCUIHRhaWwg7J287LmYIOqygOyCrOuhnCDtmoztlLwuKVxuICBjb25zdCB0YWlsID0gbmV4dC50aGVuKFxuICAgICgpID0+IHt9LFxuICAgICgpID0+IHt9LFxuICApO1xuICBzZXNzaW9uQ2hhaW5zLnNldChzZXNzaW9uSWQsIHRhaWwpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBuZXh0O1xuICB9IGZpbmFsbHkge1xuICAgIC8vIOq3uCDsgqzsnbQg64uk66W4IHR1cm4g7J20IOyytOyduOydhCDsnbTslrTrsJvslZjsnLzrqbQgdGFpbCDsnbQg6rWQ7LK064+8IOyeiOuLpCDigJQg6re465WM64qUIOyCreygnO2VmOyngCDslYrripTri6QuXG4gICAgaWYgKHNlc3Npb25DaGFpbnMuZ2V0KHNlc3Npb25JZCkgPT09IHRhaWwpIHNlc3Npb25DaGFpbnMuZGVsZXRlKHNlc3Npb25JZCk7XG4gIH1cbn1cblxuLy8g4pSA4pSAIGNvb3JkIOunpO2VkSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gdG9rZW4g6riw67CYIOyViOyglSB3b3JrZXJJZCDtlanshLEuIEFudGhyb3BpYyDsnYAgd29ya2VyIHBvb2wg7J20IOyXhuycvOuvgOuhnCB0b2tlbklkIOulvCDqt7jrjIDroZwg7JO064ukLlxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VBbnRocm9waWNXb3JrZXJJZCh0b2tlbklkOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gdG9rZW5JZDtcbn1cblxuLy8g4pSA4pSAIGVudmVsb3BlIGRlY29yYXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyBzdHJlYW0tanNvbiDsnoXroKUg65287J247JeQIFNESyBlbnZlbG9wZSDrtoDssKkg7ZuEIOyngeugrO2ZlC4gc2Vzc2lvbiDshozsnKDsnpDsnbgg7Jes6riw7IScIO2VnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvcmF0ZUFuZFNlcmlhbGl6ZShcbiAgbGluZXM6IEFycmF5PENsYXVkZVN0cmVhbUpzb25MaW5lPixcbiAgc2Vzc2lvbklkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIGxpbmVzXG4gICAgICAubWFwKChsaW5lKSA9PlxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgLi4ubGluZSxcbiAgICAgICAgICBzZXNzaW9uX2lkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgdXVpZDogcmFuZG9tVVVJRCgpLFxuICAgICAgICAgIHBhcmVudF90b29sX3VzZV9pZDogbnVsbCxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuam9pbihcIlxcblwiKSArIFwiXFxuXCJcbiAgKTtcbn1cblxuLy8g4pSA4pSAIHNwYXduICsgY29uc3VtZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTZXNzaW9uUmVxdWVzdCB7XG4gIHRva2VuSWQ6IG51bWJlcjtcbiAgdG9rZW46IHN0cmluZzsgLy8gT0F1dGggYWNjZXNzIHRva2VuXG4gIG1vZGVsOiBzdHJpbmc7XG4gIHN5c3RlbT86IHN0cmluZztcbiAganNvblNjaGVtYT86IHN0cmluZzsgLy8g7J6I7Jy866m0IHN0cnVjdHVyZWQgb3V0cHV0XG4gIGVmZm9ydD86IHN0cmluZztcbiAgdGltZW91dE1zOiBudW1iZXI7XG4gIGNvbGRIaXN0b3J5PzogQXJyYXk8SnNvblZhbHVlPjtcbiAgaW5wdXQ6IEFycmF5PFVzZXJJbnB1dD47XG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsYXVkZVNlc3Npb25SZXN1bHQgZXh0ZW5kcyBDbGF1ZGVTdHJlYW1SZXN1bHQge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgd29ya2VySWQ6IG51bWJlcjtcbiAgdHRmdE1zOiBudW1iZXIgfCBudWxsO1xufVxuXG4vLyBwZXItdG9rZW4gQ0xBVURFX0NPTkZJR19ESVIg67O07J6lKOqyqeumrCkuIOqyveuhnCDqt5zsuZnsnYAgYW50aHJvcGljQ29uZmlnRGlyKOyInOyImCDtlajsiJgp7J20IOyGjOycoCDigJRcbi8vIOyXrOq4sOyEoCDqt7gg6rK966Gc7JeQIOu5iCBzZXR0aW5ncyDrpbwg6rmU7JWEIGNsYXVkZS1tZW0gaG9vayDrk7HsnYQg7LCo64uo7ZWc64ukLiAoUjEwIOqyqeumrClcbi8vIOydtCBzZWVkIO2MjOydvOydgCBjbGF1ZGUtbWVtIGhvb2sgLyDsgqzsmqnsnpAg7ISk7KCVIOyYpOyXvCDssKjri6jsnYQg7JyE7ZWcIOqyqeumrCDqsr3qs4Tri6QuIOunpCDtmLjstpzrp4jri6Qg64uk7IucIOyNqOyEnFxuLy8g7Jm467aAIOuzgOyhsMK37IKt7KCcIO2bhOyXkOuPhCDri6TsnYwg7Iuk7ZaJ7JeQ7IScIHNlbGYtaGVhbGluZyDrkJjrj4TroZ0g6riw7KG0IHNlbWFudGljcyDrpbwg7Jyg7KeA7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbmZpZ0Rpcih0b2tlbklkOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBkaXIgPSBhbnRocm9waWNDb25maWdEaXIodG9rZW5JZCk7XG4gIG1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKGAke2Rpcn0vLmNsYXVkZS5qc29uYCwgXCJ7fVwiKTtcbiAgd3JpdGVGaWxlU3luYyhgJHtkaXJ9L3NldHRpbmdzLmpzb25gLCBcInt9XCIpO1xuICByZXR1cm4gZGlyO1xufVxuXG5sZXQgY3dkRW5zdXJlZCA9IGZhbHNlO1xuZnVuY3Rpb24gZW5zdXJlQ3dkKCk6IHZvaWQge1xuICBpZiAoY3dkRW5zdXJlZCkgcmV0dXJuO1xuICBta2RpclN5bmMoYCR7QU5USFJPUElDX0NMQVVERV9DV0R9Ly5jbGF1ZGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhgJHtBTlRIUk9QSUNfQ0xBVURFX0NXRH0vLmNsYXVkZS9zZXR0aW5ncy5qc29uYCwgXCJ7fVwiKTtcbiAgY3dkRW5zdXJlZCA9IHRydWU7XG59XG5cbi8vIHNwYXduIGFyZ3Mg6rWs7ISxLiDrqYDti7DthLQv6rKp66asL3N0cnVjdHVyZWQg66qo65OcIOuwmOyYgS5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU9uZU1pbGxpb25TdWZmaXgobW9kZWw6IHN0cmluZywgbmVlZHNTdWZmaXg6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBiYXNlID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwobW9kZWwpO1xuICByZXR1cm4gbmVlZHNTdWZmaXggPyBgJHtiYXNlfVsxbV1gIDogYmFzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uZU1pbGxpb25FbnYoc3VwcG9ydGVkOiBib29sZWFuKTogeyBDTEFVREVfQ09ERV9ESVNBQkxFXzFNX0NPTlRFWFQ/OiBcIjFcIiB9IHtcbiAgcmV0dXJuIHN1cHBvcnRlZCA/IHt9IDogeyBDTEFVREVfQ09ERV9ESVNBQkxFXzFNX0NPTlRFWFQ6IFwiMVwiIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlua2luZ0Vudihtb2RlbDogc3RyaW5nKToge1xuICBDTEFVREVfQ09ERV9ESVNBQkxFX0FEQVBUSVZFX1RISU5LSU5HPzogXCIxXCI7XG4gIE1BWF9USElOS0lOR19UT0tFTlM/OiBcIjBcIjtcbn0ge1xuICByZXR1cm4gdXNlc0FkYXB0aXZlVGhpbmtpbmcobW9kZWwpXG4gICAgPyB7fVxuICAgIDoge1xuICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0FEQVBUSVZFX1RISU5LSU5HOiBcIjFcIixcbiAgICAgICAgTUFYX1RISU5LSU5HX1RPS0VOUzogXCIwXCIsXG4gICAgICB9O1xufVxuXG4vLyBTT04tNDk1OiBzdHJ1Y3R1cmVkIG91dHB1dCByZXRyeSDrpbwgMSDroZwg6rOg7KCV7ZWc64ukLiBDQyDqsIAgYXR0ZW1wdCDrpbwgcmVqZWN0IO2VmOqzoCByZXRyeSDtlZjrqbRcbi8vIGB7cmVqZWN0ZWR9e2FjY2VwdGVkfWAg64iE7KCB7J20IEFJLVNESyDsnZggSlNPTi5wYXJzZSDrpbwg6rmo65yo66as66+A66GcLCByZXRyeSDsnpDssrTrpbwg66eJ7JWEIOq3uCDqsr3roZzrpbxcbi8vIOybkOyynCDssKjri6jtlZzri6QuIGAwYCDsnYAgQ0MgcXVlcnkgbG9vcChgY2FsbHNUaGlzUXVlcnkgPj0gbWF4UmV0cmllc2Ap6rCAIOyyqyBhdHRlbXB0IGVtaXQg7KCE7JeQXG4vLyDsi6TtjKjsi5ztgqTrr4DroZwoYGVycm9yX21heF9zdHJ1Y3R1cmVkX291dHB1dF9yZXRyaWVzYCkg7Jm467aAIOqwkuydtCAxIOuvuOunjOydtOyWtOuPhCAxIOuhnCDtgbTrnqjtlITtlZzri6QuXG5leHBvcnQgZnVuY3Rpb24gc3RydWN0dXJlZE91dHB1dFJldHJpZXNFbnYocmF3ID0gcHJvY2Vzcy5lbnYuTUFYX1NUUlVDVFVSRURfT1VUUFVUX1JFVFJJRVMpOiB7XG4gIE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBzdHJpbmc7XG59IHtcbiAgaWYgKCFyYXcpIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBcIjFcIiB9O1xuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQocmF3LCAxMCk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkpIHJldHVybiB7IE1BWF9TVFJVQ1RVUkVEX09VVFBVVF9SRVRSSUVTOiBcIjFcIiB9O1xuICByZXR1cm4geyBNQVhfU1RSVUNUVVJFRF9PVVRQVVRfUkVUUklFUzogU3RyaW5nKE1hdGgubWF4KHBhcnNlZCwgMSkpIH07XG59XG5cbi8vIExpbnV4IOuLqOydvCBhcmd2IOyduOyekCDtlZzqs4QoTUFYX0FSR19TVFJMRU4gPSBQQUdFX1NJWkXDlzMyID0gMTI4S0IsIOy7pOuEkCDtlZjrk5zsvZTrlKkg7IOB7IiYKVxuLy8g7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuOqwgCDsnbTrpbwg64SY7Jy866m0IGV4ZWN2ZSDqsIAgRTJCSUcg66GcIOqxsOu2gOuQnOuLpC4gZGV0aSDrk7Eg64yA7ZiVIO2UhOuhrO2UhO2KuOuKlCDsi6TsuKFcbi8vIO2Pieq3oCAzNDNLQsK37LWc64yAIDQ4NUtCKG9wdXMtNC04KeudvCDsnbzsg4HsoIHsnLzroZwg7LSI6rO87ZWc64ukLiDtlZzqs4TsnZgg7KCI67CYKDY0S0Ip7J2EIOyehOqzhOqwkuycvOuhnCDsnqHslYRcbi8vIFVURi04IOupgO2LsOuwlOydtO2KuMK37JiI7LihIOuquyDtlZwg7Jes7Jyg67aE6rmM7KeAIOyViOyghCDrp4jsp4TsnYQg65GU64ukLlxuZXhwb3J0IGNvbnN0IFNZU1RFTV9QUk9NUFRfQVJHVl9NQVhfQllURVMgPSA2NCAqIDEwMjQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENsYXVkZUFyZ3Mob3B0czoge1xuICBtb2RlbDogc3RyaW5nO1xuICAvLyDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4IOyghOuLrOydgCDtgazquLDroZwg67aE6riw7ZWc64ukKO2YuOy2nOu2gOqwgCDqsrDsoJUpOlxuICAvLyAgLSDsnpHsnLzrqbQgc3lzdGVtKGlubGluZSkg4oaSIC0tc3lzdGVtLXByb21wdCA8dGV4dD4gKO2MjOydvCBJL08g7JeG7J2MLCDquLDsobQg6rK966GcKVxuICAvLyAgLSDtgazrqbQgc3lzdGVtUHJvbXB0RmlsZSjqsr3roZwpIOKGkiAtLXN5c3RlbS1wcm9tcHQtZmlsZSA8cGF0aD4gKGFyZ3Yg7ZWc6rOEIO2ajO2UvClcbiAgLy8gLS1zeXN0ZW0tcHJvbXB0LWZpbGUg7J2AIC0tc3lzdGVtLXByb21wdCDsmYAg64+Z7J287ZWY6rKMIGRlZmF1bHQg66W8IHJlcGxhY2Ug7ZWc64ukKGFwcGVuZCDslYTri5gg4oCUXG4gIC8vIFI3IOqyqeumrCDrs7TsobQsIOyLpOy4oSDtmZXsnbgpLiDrkZgg64ukIOyXhuycvOuptCDruYggLS1zeXN0ZW0tcHJvbXB0KGRlZmF1bHQgMjNrIOyjvOyehSDrsKnsp4ApLlxuICBzeXN0ZW0/OiBzdHJpbmc7XG4gIHN5c3RlbVByb21wdEZpbGU/OiBzdHJpbmc7XG4gIGVmZm9ydD86IHN0cmluZztcbiAganNvblNjaGVtYT86IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIG5lZWRzT25lTWlsbGlvblN1ZmZpeD86IGJvb2xlYW47XG4gIGluY2x1ZGVQYXJ0aWFsTWVzc2FnZXM/OiBib29sZWFuO1xufSk6IEFycmF5PHN0cmluZz4ge1xuICBjb25zdCB1c2VTdHJ1Y3R1cmVkID0gQm9vbGVhbihvcHRzLmpzb25TY2hlbWEgJiYgb3B0cy5qc29uU2NoZW1hLmxlbmd0aCA+IDApO1xuICAvLyAtLXRvb2xzIFwiXCIg66GcIOyghOyytCDssKjri6gsIHN0cnVjdHVyZWQoanNvblNjaGVtYSDsnojsnYwpIOuptCBTdHJ1Y3R1cmVkT3V0cHV0IOunjCDtl4jsmqkuXG4gIGNvbnN0IHRvb2xBcmdzID0gdXNlU3RydWN0dXJlZFxuICAgID8gW1wiLS10b29sc1wiLCBcIlwiLCBcIi0tYWxsb3dlZC10b29sc1wiLCBcIlN0cnVjdHVyZWRPdXRwdXRcIl1cbiAgICA6IFtcIi0tdG9vbHNcIiwgXCJcIl07XG5cbiAgLy8g7Iuc7Iqk7YWcIO2UhOuhrO2UhO2KuDog7YyM7J28IOqyveuhnOqwgCDsmKTrqbQgLS1zeXN0ZW0tcHJvbXB0LWZpbGUsIOyVhOuLiOuptCBpbmxpbmUgLS1zeXN0ZW0tcHJvbXB0LlxuICAvLyAo7Zi47Lac67aA6rCAIO2BrOq4sOuhnCDrtoTquLDtlbQg65GYIOykkSDtlZjrgpjrp4wg7LGE7Jq064ukLiDrkZgg64ukIOyXhuycvOuptCDruYggLS1zeXN0ZW0tcHJvbXB0LilcbiAgY29uc3Qgc3lzdGVtQXJncyA9IG9wdHMuc3lzdGVtUHJvbXB0RmlsZVxuICAgID8gW1wiLS1zeXN0ZW0tcHJvbXB0LWZpbGVcIiwgb3B0cy5zeXN0ZW1Qcm9tcHRGaWxlXVxuICAgIDogW1wiLS1zeXN0ZW0tcHJvbXB0XCIsIG9wdHMuc3lzdGVtID8/IFwiXCJdO1xuXG4gIGNvbnN0IGFyZ3M6IEFycmF5PHN0cmluZz4gPSBbXG4gICAgXCItcFwiLFxuICAgIC4uLnRvb2xBcmdzLFxuICAgIFwiLS1kaXNhbGxvd2VkVG9vbHNcIixcbiAgICAuLi5BTlRIUk9QSUNfRElTQUxMT1dFRF9UT09MUyxcbiAgICBcIi0taW5wdXQtZm9ybWF0XCIsXG4gICAgXCJzdHJlYW0tanNvblwiLFxuICAgIFwiLS1vdXRwdXQtZm9ybWF0XCIsXG4gICAgXCJzdHJlYW0tanNvblwiLFxuICAgIFwiLS12ZXJib3NlXCIsXG4gICAgLi4uKG9wdHMuaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyA/IFtcIi0taW5jbHVkZS1wYXJ0aWFsLW1lc3NhZ2VzXCJdIDogW10pLFxuICAgIFwiLS1wZXJtaXNzaW9uLW1vZGVcIixcbiAgICBcImJ5cGFzc1Blcm1pc3Npb25zXCIsXG4gICAgXCItLXNldHRpbmctc291cmNlc1wiLFxuICAgIFwicHJvamVjdFwiLFxuICAgIFwiLS1tb2RlbFwiLFxuICAgIGFwcGx5T25lTWlsbGlvblN1ZmZpeChvcHRzLm1vZGVsLCBvcHRzLm5lZWRzT25lTWlsbGlvblN1ZmZpeCA/PyBmYWxzZSksXG4gICAgLy8gaW5saW5lIFtTeXN0ZW1dIOq4iOyngCDigJQg7KCV7IudIOyxhOuEkOunjChSNykuIOyDneuetSDsi5wgQ0MgZGVmYXVsdCgyM2spIOyjvOyeheuQmOuvgOuhnCDrsJjrk5zsi5wg66qF7IucLlxuICAgIC8vIO2BrOq4sOyXkCDrlLDrnbwgLS1zeXN0ZW0tcHJvbXB0KOyekeydjCkgLyAtLXN5c3RlbS1wcm9tcHQtZmlsZSjtgbwp66GcIOu2hOq4sChzeXN0ZW1BcmdzKS5cbiAgICAuLi5zeXN0ZW1BcmdzLFxuICAgIC8vIEZhYmxlIDUg64qUIGFkYXB0aXZlIHRoaW5raW5nIOydtCDtlYTsiJjsnbTqs6AsIE9wdXMgNSDripQg6rO17IudIOq4sOuzuCBhZGFwdGl2ZSDrj5nsnpHsnYQg67O07KG07ZWc64ukLlxuICAgIC4uLih1c2VzQWRhcHRpdmVUaGlua2luZyhvcHRzLm1vZGVsKSA/IFtdIDogW1wiLS10aGlua2luZ1wiLCBcImRpc2FibGVkXCJdKSxcbiAgICBcIi0tZWZmb3J0XCIsXG4gICAgb3B0cy5lZmZvcnQgPz8gQU5USFJPUElDX0RFRkFVTFRfRUZGT1JULFxuICAgIFwiLS1kaXNhYmxlLXNsYXNoLWNvbW1hbmRzXCIsXG4gICAgXCItLXNlc3Npb24taWRcIixcbiAgICBvcHRzLnNlc3Npb25JZCxcbiAgXTtcbiAgaWYgKHVzZVN0cnVjdHVyZWQpIGFyZ3MucHVzaChcIi0tanNvbi1zY2hlbWFcIiwgb3B0cy5qc29uU2NoZW1hISk7XG4gIHJldHVybiBhcmdzO1xufVxuXG4vKipcbiAqIENsYXVkZSDshLjshZjsnYQgc3Bhd24g7ZW0IO2VnCB0dXJuIOydhCDsi6TtlontlZzri6QuIHBlci1zZXNzaW9uIOudveycvOuhnCDsp4HroKztmZTrkJzri6QuXG4gKiBAcGFyYW0gb25EZWx0YSDsoJDsp4Qg7YWN7Iqk7Yq4IGRlbHRhKHN0cmVhbVRleHQpIOuYkOuKlCBzdHJ1Y3R1cmVkIOu2gOu2hCBKU09OKHN0cmVhbU9iamVjdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5DbGF1ZGVTZXNzaW9uKFxuICByZXE6IENsYXVkZVNlc3Npb25SZXF1ZXN0LFxuICBvbkRlbHRhOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkLFxuKTogUHJvbWlzZTxDbGF1ZGVTZXNzaW9uUmVzdWx0PiB7XG4gIC8vIOygleq3nO2ZlCDqt5zsuZnsnYAgY2Fub25pY2FsQW50aHJvcGljTW9kZWwg7J20IOuLqOuPhSDshozsnKAg4oCUIGRpc3BhdGNoZXIg6rCAIOydtOuvuCBjYW5vbmljYWwg7J2EIOuEmOq4sOyngOunjCxcbiAgLy8g7KeB7KCRIO2YuOy2nCjthYzsiqTtirgv66+4656YIGNhbGxlcikg64yA67mEIOuwqeyWtOyggeycvOuhnCDtlZwg67KIIOuNlCDthrXqs7zsi5ztgqjri6Qo7J2066+4IGNhbm9uaWNhbCDsnbTrqbQgbm8tb3ApLlxuICBhc3NlcnRTdXBwb3J0ZWRPbmVNaWxsaW9uU3VmZml4KHJlcS5tb2RlbCk7XG4gIGNvbnN0IG1vZGVsID0gY2Fub25pY2FsQW50aHJvcGljTW9kZWwocmVxLm1vZGVsKTtcbiAgY29uc3Qgc3VwcG9ydHNPbmVNaWxsaW9uID0gc3VwcG9ydHMxTUNvbnRleHQobW9kZWwpO1xuICBjb25zdCBuZWVkc09uZU1pbGxpb25TdWZmaXggPSBuZWVkc0NsaTFtU3VmZml4KG1vZGVsKTtcbiAgY29uc3Qgc2Vzc2lvbklkID0gcmFuZG9tVVVJRCgpO1xuICBjb25zdCB1c2VTdHJ1Y3R1cmVkID0gQm9vbGVhbihyZXEuanNvblNjaGVtYSAmJiByZXEuanNvblNjaGVtYS5sZW5ndGggPiAwKTtcbiAgY29uc3Qgd29ya2VySWQgPSBtYWtlQW50aHJvcGljV29ya2VySWQocmVxLnRva2VuSWQpO1xuXG4gIHJldHVybiB3aXRoU2Vzc2lvbkxvY2soc2Vzc2lvbklkLCAoKSA9PiB7XG4gICAgZW5zdXJlQ3dkKCk7XG4gICAgY29uc3QgY29uZmlnRGlyID0gZW5zdXJlQ29uZmlnRGlyKHJlcS50b2tlbklkKTtcblxuICAgIC8vIOyLnOyKpO2FnCDtlITroaztlITtirjrpbwg7YGs6riw66GcIOu2hOq4sDogMTI4S0IoYXJndiDtlZzqs4Qp7J2YIOygiOuwmOydhCDrhJjsnLzrqbQg7YyM7J2866GcIOuEmOqyqCBFMkJJRyDtmoztlLwuXG4gICAgLy8g7J6R7J2AIO2UhOuhrO2UhO2KuOuKlCDtjIzsnbwgSS9PIOyXhuydtCDquLDsobQgaW5saW5lIOqyveuhnOulvCDqt7jrjIDroZwg7JO064ukKOuMgOu2gOu2hOydmCDtmLjstpwpLlxuICAgIC8vIOyLpOygnCDtjIzsnbwg7JOw6riw64qUIGFib3J0IOyytO2BrCDsnbTtm4QoUHJvbWlzZSDslYgp66GcIOuvuOukhCwg7J2066+4IOy3qOyGjOuQnCDsmpTssq3sl5Qg7JOw7KeAIOyViuuKlOuLpC5cbiAgICBjb25zdCBzeXN0ZW0gPSByZXEuc3lzdGVtID8/IFwiXCI7XG4gICAgY29uc3QgdXNlU3lzdGVtUHJvbXB0RmlsZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHN5c3RlbSwgXCJ1dGY4XCIpID4gU1lTVEVNX1BST01QVF9BUkdWX01BWF9CWVRFUztcbiAgICBjb25zdCBzeXN0ZW1Qcm9tcHRGaWxlID0gdXNlU3lzdGVtUHJvbXB0RmlsZVxuICAgICAgPyBgJHtjb25maWdEaXJ9L3N5c3RlbS1wcm9tcHQtJHtzZXNzaW9uSWR9LnR4dGBcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgYXJncyA9IGJ1aWxkQ2xhdWRlQXJncyh7XG4gICAgICBtb2RlbCxcbiAgICAgIHN5c3RlbTogdXNlU3lzdGVtUHJvbXB0RmlsZSA/IHVuZGVmaW5lZCA6IHJlcS5zeXN0ZW0sXG4gICAgICBzeXN0ZW1Qcm9tcHRGaWxlLFxuICAgICAgZWZmb3J0OiByZXEuZWZmb3J0LFxuICAgICAganNvblNjaGVtYTogcmVxLmpzb25TY2hlbWEsXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBuZWVkc09uZU1pbGxpb25TdWZmaXgsXG4gICAgICBpbmNsdWRlUGFydGlhbE1lc3NhZ2VzOiByZXEuaW5jbHVkZVBhcnRpYWxNZXNzYWdlcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0TGluZXMgPSBidWlsZFN0cmVhbUpzb25JbnB1dCh7XG4gICAgICBjb2xkSGlzdG9yeTogcmVxLmNvbGRIaXN0b3J5LFxuICAgICAgaW5wdXQ6IHJlcS5pbnB1dCxcbiAgICB9KTtcbiAgICBjb25zdCBzdGRpblBheWxvYWQgPSBkZWNvcmF0ZUFuZFNlcmlhbGl6ZShpbnB1dExpbmVzLCBzZXNzaW9uSWQpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPENsYXVkZVNlc3Npb25SZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXEuYWJvcnRTaWduYWw/LmFib3J0ZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcImFib3J0ZWRcIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIOuMgO2YlSDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq464qUIHNwYXduIOyngeyghOyXkCDtjIzsnbzroZwg6riw66GdKGFyZ3YgRTJCSUcg7ZqM7ZS8KS4g7KKF66OMIOyLnCDsoJXrpqztlZzri6QuXG4gICAgICBpZiAoc3lzdGVtUHJvbXB0RmlsZSkgd3JpdGVGaWxlU3luYyhzeXN0ZW1Qcm9tcHRGaWxlLCBzeXN0ZW0pO1xuXG4gICAgICBjb25zdCBjaGlsZCA9IHNwYXduKFwiY2xhdWRlXCIsIGFyZ3MsIHtcbiAgICAgICAgLy8gc3RkZXJyIOuPhCDsuqHsspg6IGludmFsaWQgT0F1dGggLyDsnpjrqrvrkJwg7ZSM656Y6re4IC8gQ0xJIOqygOymnSDsi6TtjKjqsIBcbiAgICAgICAgLy8gXCJjbG9zZWQgd2l0aG91dCByZXN1bHRcIiDroZwg662J6rCc7KeA7KeAIOyViuqyjCBjbG9zZS9lcnJvciDsl5Agc3RkZXJyIOulvCDsi6TslrQg67O064K464ukLlxuICAgICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgICBjd2Q6IEFOVEhST1BJQ19DTEFVREVfQ1dELFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICAgICAgICAgIFRNUERJUjogcHJvY2Vzcy5lbnYuVE1QRElSLFxuICAgICAgICAgIENMQVVERV9DT0RFX09BVVRIX1RPS0VOOiByZXEudG9rZW4sXG4gICAgICAgICAgQ0xBVURFX0NPTkZJR19ESVI6IGNvbmZpZ0RpcixcbiAgICAgICAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0FVVE9fTUVNT1JZOiBcIjFcIixcbiAgICAgICAgICAuLi50aGlua2luZ0Vudihtb2RlbCksXG4gICAgICAgICAgLi4ub25lTWlsbGlvbkVudihzdXBwb3J0c09uZU1pbGxpb24pLFxuICAgICAgICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQ0xBVURFX01EUzogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9URVJNSU5BTF9USVRMRTogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9CVU5ETEVEX1NLSUxMUzogXCIxXCIsXG4gICAgICAgICAgQ0xBVURFX0NPREVfRElTQUJMRV9XT1JLRkxPV1M6IFwiMVwiLFxuICAgICAgICAgIENMQVVERV9DT0RFX0FUVFJJQlVUSU9OX0hFQURFUjogXCIwXCIsXG4gICAgICAgICAgLy8gc3RydWN0dXJlZCBvdXRwdXQg7J28IOuVjOunjCByZXRyeSDrpbwg6rOg7KCV7ZWc64ukKFNPTi00OTUpLiB0ZXh0IOuqqOuTnOuKlCDsmIHtlqUg7JeG7J2MLlxuICAgICAgICAgIC4uLih1c2VTdHJ1Y3R1cmVkID8gc3RydWN0dXJlZE91dHB1dFJldHJpZXNFbnYoKSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGJ1ZmZlciA9IFwiXCI7XG4gICAgICBjb25zdCBzdHJlYW1TdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlID0ge307XG4gICAgICBjb25zdCB0dGZ0VHJhY2tlciA9IGNyZWF0ZVR0ZnRUcmFja2VyKCk7XG4gICAgICBjb25zdCBvblRyYWNrZWREZWx0YSA9IHR0ZnRUcmFja2VyLndyYXBEZWx0YShvbkRlbHRhKTtcbiAgICAgIC8vIGJvdW5kZWQgc3RkZXJyIOuyhO2NvCjstZzqt7wgfjRLQuunjCDsnKDsp4Ag4oCUIOustO2VnCDriITsoIEg67Cp7KeAKS5cbiAgICAgIGxldCBzdGRlcnJCdWYgPSBcIlwiO1xuICAgICAgY29uc3QgU1RERVJSX0NBUCA9IDQwOTY7XG4gICAgICBjaGlsZC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoZDogQnVmZmVyKSA9PiB7XG4gICAgICAgIHN0ZGVyckJ1ZiA9IChzdGRlcnJCdWYgKyBkLnRvU3RyaW5nKCkpLnNsaWNlKC1TVERFUlJfQ0FQKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RkZXJyU3VmZml4ID0gKCkgPT4gKHN0ZGVyckJ1Zi50cmltKCkgPyBgIOKAlCBzdGRlcnI6ICR7c3RkZXJyQnVmLnRyaW0oKX1gIDogXCJcIik7XG4gICAgICAvLyBzcGF3biDsi5wg7JO0IOyehOyLnCDsi5zsiqTthZwg7ZSE66Gs7ZSE7Yq4IO2MjOydvCDsoJXrpqwo7ZWcIOuyiOunjCkuIOuqqOuToCDsooXro4wg6rK966Gc7JeQ7IScIO2YuOy2nO2VnOuLpC5cbiAgICAgIC8vIOuIhOudveuPvOuPhCDri6TsnYwgZW5zdXJlQ29uZmlnRGlyIOqwgCDrlJTroInthqDrpqzrpbwg7J6s7IKs7Jqp7ZWgIOu/kOydtOyngOunjCwgc2Vzc2lvbklkIOuzhCDtjIzsnbzsnbTrnbxcbiAgICAgIC8vIOyMk+ydtOuptCDrlJTsiqTtgazqsIAg7LCo66+A66GcIHNldHRsZSDsi5wg7KaJ7IucIOyngOyatOuLpC5cbiAgICAgIGNvbnN0IGNsZWFudXBTcGF3bkZpbGVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXN5c3RlbVByb21wdEZpbGUpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1bmxpbmtTeW5jKHN5c3RlbVByb21wdEZpbGUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyDsnbTrr7gg7JeG6rGw64KYIOq2jO2VnCDrrLjsoJzrqbQg66y07IucIOKAlCDsoJXrpqzripQgYmVzdC1lZmZvcnQuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgY2xlYW51cEFib3J0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cEFib3J0Py4oKTtcbiAgICAgICAgY2xlYW51cFNwYXduRmlsZXMoKTtcbiAgICAgICAgY2hpbGQua2lsbCgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiB0aW1lb3V0IGFmdGVyICR7cmVxLnRpbWVvdXRNcyAvIDEwMDB9c2ApKTtcbiAgICAgIH0sIHJlcS50aW1lb3V0TXMpO1xuXG4gICAgICBjb25zdCBmaW5pc2ggPSAocmVzdWx0OiBDbGF1ZGVTdHJlYW1SZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIGNsZWFudXBBYm9ydD8uKCk7XG4gICAgICAgIGNsZWFudXBTcGF3bkZpbGVzKCk7XG4gICAgICAgIHJlc29sdmUoeyAuLi5yZXN1bHQsIHNlc3Npb25JZCwgd29ya2VySWQsIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICBjaGlsZC5raWxsKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJhYm9ydGVkXCIpKTtcbiAgICAgIH07XG4gICAgICBjbGVhbnVwQWJvcnQgPSAoKSA9PiByZXEuYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0KTtcbiAgICAgIHJlcS5hYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBidWZmZXIgKz0gZC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgPz8gXCJcIjtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlU3RyZWFtSnNvbkxpbmUobGluZSwgb25UcmFja2VkRGVsdGEsIHtcbiAgICAgICAgICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHVzZVN0cnVjdHVyZWQsXG4gICAgICAgICAgICBzdGF0ZTogc3RyZWFtU3RhdGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgZmluaXNoKHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBjbG9zZWQgd2l0aG91dCByZXN1bHQke3N0ZGVyclN1ZmZpeCgpfWApKTtcbiAgICAgIH0pO1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICBjbGVhbnVwQWJvcnQ/LigpO1xuICAgICAgICBjbGVhbnVwU3Bhd25GaWxlcygpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDbGF1ZGUgc2Vzc2lvbiBzcGF3biBlcnJvcjogJHtlcnIubWVzc2FnZX1gKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gc3RkaW4g7Jy866GcIOyeheugpSBKU09OTCDtnZjrpqzqs6Ag64ur64qU64ukLlxuICAgICAgdHRmdFRyYWNrZXIubWFya1N0YXJ0KCk7XG4gICAgICBjaGlsZC5zdGRpbj8ud3JpdGUoc3RkaW5QYXlsb2FkKTtcbiAgICAgIGNoaWxkLnN0ZGluPy5lbmQoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8vIHVzYWdlIOyerOuFuOy2nCjthYzsiqTtirgg7Y647J2YKS5cbmV4cG9ydCB0eXBlIHsgVG9rZW5Vc2FnZUJyZWFrZG93biB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0NBLE1BQU0sZ0NBQWdCLElBQUksSUFBOEI7QUFFeEQsZUFBc0IsZ0JBQW1CLFdBQW1CLElBQWtDO0NBRzVGLE1BQU0sUUFGTyxjQUFjLElBQUksU0FBUyxLQUFLLFFBQVEsUUFBUSxFQUVoRCxDQUFLLEtBQUssSUFBSSxFQUFFO0NBRzdCLE1BQU0sT0FBTyxLQUFLLFdBQ1YsQ0FBQyxTQUNELENBQUMsQ0FDVDtDQUNBLGNBQWMsSUFBSSxXQUFXLElBQUk7Q0FDakMsSUFBSTtFQUNGLE9BQU8sTUFBTTtDQUNmLFVBQVU7RUFFUixJQUFJLGNBQWMsSUFBSSxTQUFTLE1BQU0sTUFBTSxjQUFjLE9BQU8sU0FBUztDQUMzRTtBQUNGO0FBS0EsU0FBZ0Isc0JBQXNCLFNBQXlCO0NBQzdELE9BQU87QUFDVDtBQUtBLFNBQWdCLHFCQUNkLE9BQ0EsV0FDUTtDQUNSLE9BQ0UsTUFDRyxLQUFLLFNBQ0osS0FBSyxVQUFVO0VBQ2IsR0FBRztFQUNILFlBQVk7RUFDWixNQUFNLFdBQVc7RUFDakIsb0JBQW9CO0NBQ3RCLENBQUMsQ0FDSCxDQUFDLENBQ0EsS0FBSyxJQUFJLElBQUk7QUFFcEI7QUE0QkEsU0FBZ0IsZ0JBQWdCLFNBQXlCO0NBQ3ZELE1BQU0sTUFBTSxtQkFBbUIsT0FBTztDQUN0QyxVQUFVLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQztDQUNsQyxjQUFjLEdBQUcsSUFBSSxnQkFBZ0IsSUFBSTtDQUN6QyxjQUFjLEdBQUcsSUFBSSxpQkFBaUIsSUFBSTtDQUMxQyxPQUFPO0FBQ1Q7QUFFQSxJQUFJLGFBQWE7QUFDakIsU0FBUyxZQUFrQjtDQUN6QixJQUFJLFlBQVk7Q0FDaEIsVUFBVSxH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
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import "../../../_virtual/_rolldown/runtime.js";
|
|
2
1
|
//#region src/utils/providers/anthropic/stream-json-adapter.ts
|
|
3
2
|
function userInputToText(input) {
|
|
4
3
|
return input.filter((i) => i.type === "text").map((i) => i.text).join("\n");
|
|
@@ -254,4 +253,4 @@ function handleStreamJsonLine(line, onDelta, opts) {
|
|
|
254
253
|
//#endregion
|
|
255
254
|
export { buildStreamJsonInput, handleStreamJsonLine, serializeStreamJsonInput };
|
|
256
255
|
|
|
257
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWpzb24tYWRhcHRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9zdHJlYW0tanNvbi1hZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhdWRlIENMSSBzdHJlYW0tanNvbiBhZGFwdGVyLlxuICpcbiAqIElucHV0OiBxZ3JpZCBoaXN0b3J5L2lucHV0IC0+IENsYXVkZSBKU09OTCBzdGRpbi5cbiAqIE91dHB1dDogQ2xhdWRlIEpTT05MIHN0ZG91dCAtPiBxZ3JpZCBkZWx0YXMgKyBmaW5hbCByZXN1bHQgbWV0YWRhdGEuXG4gKlxuICogUHJldmlvdXMgY29udmVyc2F0aW9uIGl0ZW1zIGFyZSBmbGF0dGVuZWQgaW50byBvbmUgYXNzaXN0YW50IGNvbnRleHQgbGluZS5cbiAqIFRoZSBvbmx5IGV4ZWN1dGFibGUgdXNlciBsaW5lIGlzIHRoZSBjdXJyZW50IGlucHV0LlxuICovXG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Vc2VySW5wdXRcIjtcbmltcG9ydCB7XG4gIHR5cGUgTW9kZWxGYWxsYmFjayxcbiAgdHlwZSBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd24sXG59IGZyb20gXCIuLi9jb21tb24vcHJvdmlkZXItZGlzcGF0Y2hlclwiO1xuXG4vLyDilIDilIAg7J6F66ClIOyWtOuMke2EsCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gQ2xhdWRlIHN0cmVhbS1qc29uIOyeheugpSDtlZwg7KSEKEpTT05MKS4gRW52ZWxvcGUgZmllbGRzIGFyZSBhZGRlZCBpbiBjbGF1ZGUtc2Vzc2lvbi5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlU3RyZWFtSnNvbkxpbmUge1xuICB0eXBlOiBcInVzZXJcIiB8IFwiYXNzaXN0YW50XCI7XG4gIG1lc3NhZ2U6IHtcbiAgICByb2xlOiBcInVzZXJcIiB8IFwiYXNzaXN0YW50XCI7XG4gICAgY29udGVudDogQXJyYXk8eyB0eXBlOiBcInRleHRcIjsgdGV4dDogc3RyaW5nIH0+O1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VySW5wdXRUb1RleHQoaW5wdXQ6IEFycmF5PFVzZXJJbnB1dD4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXRcbiAgICAuZmlsdGVyKChpKTogaSBpcyBFeHRyYWN0PFVzZXJJbnB1dCwgeyB0eXBlOiBcInRleHRcIiB9PiA9PiBpLnR5cGUgPT09IFwidGV4dFwiKVxuICAgIC5tYXAoKGkpID0+IGkudGV4dClcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gdGV4dEJsb2NrKHRleHQ6IHN0cmluZyk6IEFycmF5PHsgdHlwZTogXCJ0ZXh0XCI7IHRleHQ6IHN0cmluZyB9PiB7XG4gIHJldHVybiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dCB9XTtcbn1cblxuLy8gY29kZXggUmVzcG9uc2VJdGVtKGNvbGRIaXN0b3J5IGl0ZW0pIOy1nOyGjCBzaGFwZS5cbi8vIGV4dHJhY3RQcm9tcHRBbmRIaXN0b3J5KGFpLXNkay91dGlscy50cykg6rCAIOunjOuTnOuKlCDtmJXsi506XG4vLyAgIHsgdHlwZTpcIm1lc3NhZ2VcIiwgcm9sZTpcInVzZXJcIiwgY29udGVudDpbe3R5cGU6XCJpbnB1dF90ZXh0XCIsIHRleHR9XSB9XG4vLyAgIHsgdHlwZTpcIm1lc3NhZ2VcIiwgcm9sZTpcImFzc2lzdGFudFwiLCBjb250ZW50Olt7dHlwZTpcIm91dHB1dF90ZXh0XCIsIHRleHR9XSB9XG4vLyAgIHsgdHlwZTpcImZ1bmN0aW9uX2NhbGxcIiwgbmFtZSwgYXJndW1lbnRzLCBjYWxsX2lkIH1cbi8vICAgeyB0eXBlOlwiZnVuY3Rpb25fY2FsbF9vdXRwdXRcIiwgY2FsbF9pZCwgb3V0cHV0IH1cbnR5cGUgUmVzcG9uc2VJdGVtID0geyBba2V5OiBzdHJpbmddOiBKc29uVmFsdWUgfCB1bmRlZmluZWQgfTtcblxuZnVuY3Rpb24gYXNPYmplY3QodjogSnNvblZhbHVlIHwgdW5kZWZpbmVkKTogUmVzcG9uc2VJdGVtIHwgbnVsbCB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpID8gKHYgYXMgUmVzcG9uc2VJdGVtKSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlSXRlbVRleHQoaXRlbTogUmVzcG9uc2VJdGVtKTogc3RyaW5nIHtcbiAgY29uc3QgY29udGVudCA9IGl0ZW0uY29udGVudDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIGNvbnRlbnRcbiAgICAubWFwKChjKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSBhc09iamVjdChjKTtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iai50ZXh0ID09PSBcInN0cmluZ1wiID8gb2JqLnRleHQgOiBcIlwiO1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuQ29sZEhpc3RvcnkoY29sZEhpc3Rvcnk6IEFycmF5PEpzb25WYWx1ZT4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBmb3IgKGNvbnN0IHJhdyBvZiBjb2xkSGlzdG9yeSkge1xuICAgIGNvbnN0IGl0ZW0gPSBhc09iamVjdChyYXcpO1xuICAgIGlmICghaXRlbSkgY29udGludWU7XG5cbiAgICBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBpdGVtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpIHtcbiAgICAgIHBhcnRzLnB1c2goYEFzc2lzdGFudDogJHtyZXNwb25zZUl0ZW1UZXh0KGl0ZW0pfWApO1xuICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBpdGVtLnJvbGUgPT09IFwidXNlclwiKSB7XG4gICAgICBwYXJ0cy5wdXNoKGBVc2VyOiAke3Jlc3BvbnNlSXRlbVRleHQoaXRlbSl9YCk7XG4gICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbFwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gdHlwZW9mIGl0ZW0ubmFtZSA9PT0gXCJzdHJpbmdcIiA/IGl0ZW0ubmFtZSA6IFwiXCI7XG4gICAgICBjb25zdCBhcmdzID1cbiAgICAgICAgdHlwZW9mIGl0ZW0uYXJndW1lbnRzID09PSBcInN0cmluZ1wiID8gaXRlbS5hcmd1bWVudHMgOiBKU09OLnN0cmluZ2lmeShpdGVtLmFyZ3VtZW50cyA/PyB7fSk7XG4gICAgICBwYXJ0cy5wdXNoKGBUb29sIGNhbGw6ICR7bmFtZX0oJHthcmdzfSlgKTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gXCJmdW5jdGlvbl9jYWxsX291dHB1dFwiKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPVxuICAgICAgICB0eXBlb2YgaXRlbS5vdXRwdXQgPT09IFwic3RyaW5nXCIgPyBpdGVtLm91dHB1dCA6IEpTT04uc3RyaW5naWZ5KGl0ZW0ub3V0cHV0ID8/IFwiXCIpO1xuICAgICAgcGFydHMucHVzaChgVG9vbCByZXN1bHQ6ICR7b3V0cHV0fWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RyZWFtSnNvbklucHV0KG9wdHM6IHtcbiAgY29sZEhpc3Rvcnk/OiBBcnJheTxKc29uVmFsdWU+O1xuICBpbnB1dDogQXJyYXk8VXNlcklucHV0Pjtcbn0pOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4ge1xuICBjb25zdCBsaW5lczogQXJyYXk8Q2xhdWRlU3RyZWFtSnNvbkxpbmU+ID0gW107XG5cbiAgaWYgKG9wdHMuY29sZEhpc3RvcnkgJiYgb3B0cy5jb2xkSGlzdG9yeS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmxhdHRlbmVkID0gZmxhdHRlbkNvbGRIaXN0b3J5KG9wdHMuY29sZEhpc3RvcnkpO1xuICAgIGlmIChmbGF0dGVuZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICB0eXBlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICBjb250ZW50OiB0ZXh0QmxvY2soYFByaW9yIGNvbnZlcnNhdGlvbiBjb250ZXh0OlxcbiR7ZmxhdHRlbmVkfWApLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaCh7XG4gICAgdHlwZTogXCJ1c2VyXCIsXG4gICAgbWVzc2FnZTogeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogdGV4dEJsb2NrKHVzZXJJbnB1dFRvVGV4dChvcHRzLmlucHV0KSkgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplU3RyZWFtSnNvbklucHV0KGxpbmVzOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4pOiBzdHJpbmcge1xuICByZXR1cm4gbGluZXMubWFwKChsKSA9PiBKU09OLnN0cmluZ2lmeShsKSkuam9pbihcIlxcblwiKSArIFwiXFxuXCI7XG59XG5cbi8vIOKUgOKUgCDstpzroKUg7Ja064yR7YSwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy9cbi8vIENsYXVkZSBzdGRvdXQoSlNPTkwp7J2EIHFncmlkIGRlbHRhcyArIGZpbmFsIHJlc3VsdCDroZwg67OA7ZmY7ZWc64ukLlxuXG5pbnRlcmZhY2UgQ2xhdWRlVXNhZ2Uge1xuICBpbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIG91dHB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uPzoge1xuICAgIGVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gICAgZXBoZW1lcmFsXzFoX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgfTtcbiAgaXRlcmF0aW9ucz86IEFycmF5PHtcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIG1vZGVsPzogc3RyaW5nO1xuICB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTdHJlYW1SZXN1bHQge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHVzYWdlOiBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd247XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgY29zdFVzZDogbnVtYmVyO1xuICAvLyBxdW90YSDshozsp4QoXCJZb3UndmUgaGl0IC4uLlwiKSDqsJDsp4AuIGRpc3BhdGNoZXIg6rCAIFF1b3RhRXJyb3Ig66GcIOuzgO2ZmC5cbiAgcXVvdGFFeGhhdXN0ZWQ6IGJvb2xlYW47XG4gIC8vIHJlc3VsdC5pc19lcnJvciAvIHRlcm1pbmFsIG1vZGVsX2Vycm9yIOuTsS4gZGlzcGF0Y2hlciDqsIAg7JeQ65+s66GcIOuzgO2ZmC5cbiAgaXNFcnJvcjogYm9vbGVhbjtcbiAgLy8g7KeE64uo7JqpOiBDQyByZXN1bHQg65287J247J2YIHN1YnR5cGUoXCJzdWNjZXNzXCIgfCBcImVycm9yX21heF90dXJuc1wiIHwgLi4uKSDqs7wgdGVybWluYWxfcmVhc29uLlxuICAvLyBpc0Vycm9yIO2MkOyglSDsgqzsnKDrpbwg7JeQ65+sIOuplOyLnOyngOyXkCDrk5zrn6zrgrTquLAg7JyE7ZW0IOuztOyhtO2VnOuLpChTT04tNDk1KS5cbiAgc3VidHlwZT86IHN0cmluZztcbiAgdGVybWluYWxSZWFzb24/OiBzdHJpbmc7XG4gIC8vIOyLpOygnCDstZzsooUg7J2R64u17J2EIOunjOuToCDrqqjrjbguIEZhYmxlIHJlZnVzYWwgZmFsbGJhY2sg65WMIHJlcXVlc3RlZCBtb2RlbCDqs7wg64uk66W064ukLlxuICBzZXJ2ZWRNb2RlbD86IHN0cmluZztcbiAgc3RvcFJlYXNvbj86IHN0cmluZztcbiAgcmVmdXNhbD86IHtcbiAgICBjYXRlZ29yeT86IHN0cmluZztcbiAgICBleHBsYW5hdGlvbj86IHN0cmluZztcbiAgfTtcbiAgbW9kZWxGYWxsYmFja3M/OiBBcnJheTxNb2RlbEZhbGxiYWNrPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTdHJlYW1Kc29uU3RhdGUge1xuICBzdHJ1Y3R1cmVkT3V0cHV0VGV4dD86IHN0cmluZztcbiAgc2VydmVkTW9kZWw/OiBzdHJpbmc7XG4gIHN0b3BSZWFzb24/OiBzdHJpbmc7XG4gIHJlZnVzYWw/OiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gICAgZXhwbGFuYXRpb24/OiBzdHJpbmc7XG4gIH07XG4gIG1vZGVsRmFsbGJhY2tzPzogQXJyYXk8TW9kZWxGYWxsYmFjaz47XG4gIHJlZnVzYWxXaXRob3V0RmFsbGJhY2s/OiBib29sZWFuO1xufVxuXG4vLyBBbnRocm9waWMgdXNhZ2UgNCDsubTthYzqs6Drpqwg4oaSIFRva2VuVXNhZ2VCcmVha2Rvd24uXG4vLyBBbnRocm9waWMgbmF0aXZlIHVzYWdlIOuKlCBpbnB1dC9jYWNoZV9jcmVhdGlvbi9jYWNoZV9yZWFkIOulvCDshJzroZwg67Cw7YOA7KCB7J24IOy5tO2FjOqzoOumrOuhnCDspIDri6QuXG4vLyDrsJjrqbQgcWdyaWQg64K067aAIO2RnOykgChUb2tlblVzYWdlQnJlYWtkb3duKeqzvCBjb3N0IOqzhOyCsOydgCBpbnB1dFRva2VucyDrpbwgXCLsoITssrQg7J6F66ClXG4vLyAoPSBub24tY2FjaGUgaW5wdXQgKyBjYWNoZSBjcmVhdGlvbiArIGNhY2hlIHJlYWQpXCIg7Jy866GcIOy3qOq4ie2VmOqzoCBjYWNoZWRJbnB1dFRva2Vucy9jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnNcbi8vIOulvCDqt7jspJEg6rCBIOuqq+ycvOuhnCDri6Tsi5wg7ZGc7Iuc7ZWc64ukKE9wZW5BSS9Db2RleCB1c2FnZSDsmYAg6rCZ7J2AIOydmOuvuCkuIOuUsOudvOyEnCDsl6zquLDshJwg7ZWp7LOQIO2RnOykgO2ZlO2VnOuLpC5cbmZ1bmN0aW9uIHRvVXNhZ2VCcmVha2Rvd24odTogQ2xhdWRlVXNhZ2UpOiBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd24ge1xuICBjb25zdCBpbnB1dCA9IHUuaW5wdXRfdG9rZW5zID8/IDA7XG4gIGNvbnN0IGNhY2hlQ3JlYXRlID0gdS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgPz8gMDtcbiAgY29uc3QgY2FjaGVSZWFkID0gdS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyA/PyAwO1xuICBjb25zdCBvdXRwdXQgPSB1Lm91dHB1dF90b2tlbnMgPz8gMDtcbiAgY29uc3QgdG90YWxJbnB1dCA9IGlucHV0ICsgY2FjaGVDcmVhdGUgKyBjYWNoZVJlYWQ7XG4gIGNvbnN0IGNhY2hlQ3JlYXRlNW0gPSB1LmNhY2hlX2NyZWF0aW9uPy5lcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zO1xuICBjb25zdCBjYWNoZUNyZWF0ZTFoID0gdS5jYWNoZV9jcmVhdGlvbj8uZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucztcbiAgcmV0dXJuIHtcbiAgICB0b3RhbFRva2VuczogdG90YWxJbnB1dCArIG91dHB1dCxcbiAgICBpbnB1dFRva2VuczogdG90YWxJbnB1dCxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogY2FjaGVSZWFkLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogY2FjaGVDcmVhdGUsXG4gICAgLi4uKHR5cGVvZiBjYWNoZUNyZWF0ZTVtID09PSBcIm51bWJlclwiID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogY2FjaGVDcmVhdGU1bSB9IDoge30pLFxuICAgIC4uLih0eXBlb2YgY2FjaGVDcmVhdGUxaCA9PT0gXCJudW1iZXJcIiA/IHsgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IGNhY2hlQ3JlYXRlMWggfSA6IHt9KSxcbiAgICBvdXRwdXRUb2tlbnM6IG91dHB1dCxcbiAgICByZWFzb25pbmdPdXRwdXRUb2tlbnM6IDAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0cmlwQ29kZUZlbmNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9eYGBgKD86anNvbik/XFxzKlxcbj8vaSwgXCJcIilcbiAgICAucmVwbGFjZSgvXFxuP2BgYFxccyokL2ksIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzdHJ1Y3R1cmVkT3V0cHV0VG9vbFVzZVRleHQoajogUmVzcG9uc2VJdGVtKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWVzc2FnZSA9IGFzT2JqZWN0KGoubWVzc2FnZSk7XG4gIGNvbnN0IGNvbnRlbnQgPSBtZXNzYWdlPy5jb250ZW50O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCByYXcgb2YgY29udGVudCkge1xuICAgIGNvbnN0IGJsb2NrID0gYXNPYmplY3QocmF3KTtcbiAgICBpZiAoIWJsb2NrKSBjb250aW51ZTtcbiAgICBpZiAoXG4gICAgICBibG9jay50eXBlID09PSBcInRvb2xfdXNlXCIgJiZcbiAgICAgIGJsb2NrLm5hbWUgPT09IFwiU3RydWN0dXJlZE91dHB1dFwiICYmXG4gICAgICBibG9jay5pbnB1dCAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYmxvY2suaW5wdXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxFdmVudE1vZGVsKG1vZGVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aXRob3V0UHJvdmlkZXIgPSBtb2RlbC5zdGFydHNXaXRoKFwiYW50aHJvcGljL1wiKSA/IG1vZGVsLnNsaWNlKFwiYW50aHJvcGljL1wiLmxlbmd0aCkgOiBtb2RlbDtcbiAgcmV0dXJuIHdpdGhvdXRQcm92aWRlci5yZXBsYWNlKC9cXFsxbVxcXSQvLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxTdHJpbmcodmFsdWU6IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZWNvcmRGYWxsYmFjayhzdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogTW9kZWxGYWxsYmFjayk6IHZvaWQge1xuICBpZiAoIXN0YXRlKSByZXR1cm47XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IE1vZGVsRmFsbGJhY2sgPSB7XG4gICAgLi4uZmFsbGJhY2ssXG4gICAgZnJvbU1vZGVsOiBjYW5vbmljYWxFdmVudE1vZGVsKGZhbGxiYWNrLmZyb21Nb2RlbCksXG4gICAgdG9Nb2RlbDogY2Fub25pY2FsRXZlbnRNb2RlbChmYWxsYmFjay50b01vZGVsKSxcbiAgfTtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5tb2RlbEZhbGxiYWNrcz8uZmluZChcbiAgICAoaXRlbSkgPT5cbiAgICAgIGl0ZW0udHJpZ2dlciA9PT0gbm9ybWFsaXplZC50cmlnZ2VyICYmXG4gICAgICBpdGVtLmZyb21Nb2RlbCA9PT0gbm9ybWFsaXplZC5mcm9tTW9kZWwgJiZcbiAgICAgIGl0ZW0udG9Nb2RlbCA9PT0gbm9ybWFsaXplZC50b01vZGVsLFxuICApO1xuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBleGlzdGluZy5jYXRlZ29yeSA/Pz0gbm9ybWFsaXplZC5jYXRlZ29yeTtcbiAgICBleGlzdGluZy5leHBsYW5hdGlvbiA/Pz0gbm9ybWFsaXplZC5leHBsYW5hdGlvbjtcbiAgfSBlbHNlIHtcbiAgICAoc3RhdGUubW9kZWxGYWxsYmFja3MgPz89IFtdKS5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9XG4gIHN0YXRlLnNlcnZlZE1vZGVsID0gbm9ybWFsaXplZC50b01vZGVsO1xuICBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJvdXRpbmdGcm9tVXNhZ2UoXG4gIHVzYWdlOiBSZXNwb25zZUl0ZW0gfCBudWxsLFxuICBzdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIHwgdW5kZWZpbmVkLFxuKTogdm9pZCB7XG4gIGlmICghc3RhdGUgfHwgIXVzYWdlIHx8ICFBcnJheS5pc0FycmF5KHVzYWdlLml0ZXJhdGlvbnMpKSByZXR1cm47XG5cbiAgbGV0IHByZXZpb3VzTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCByYXcgb2YgdXNhZ2UuaXRlcmF0aW9ucykge1xuICAgIGNvbnN0IGl0ZXJhdGlvbiA9IGFzT2JqZWN0KHJhdyk7XG4gICAgaWYgKCFpdGVyYXRpb24pIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1vZGVsID0gb3B0aW9uYWxTdHJpbmcoaXRlcmF0aW9uLm1vZGVsKTtcbiAgICBjb25zdCB0eXBlID0gb3B0aW9uYWxTdHJpbmcoaXRlcmF0aW9uLnR5cGUpO1xuICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNhbm9uaWNhbE1vZGVsID0gY2Fub25pY2FsRXZlbnRNb2RlbChtb2RlbCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZmFsbGJhY2tfbWVzc2FnZVwiICYmIHByZXZpb3VzTW9kZWwpIHtcbiAgICAgIHJlY29yZEZhbGxiYWNrKHN0YXRlLCB7XG4gICAgICAgIHRyaWdnZXI6IFwicmVmdXNhbFwiLFxuICAgICAgICBmcm9tTW9kZWw6IHByZXZpb3VzTW9kZWwsXG4gICAgICAgIHRvTW9kZWw6IGNhbm9uaWNhbE1vZGVsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHByZXZpb3VzTW9kZWwgPSBjYW5vbmljYWxNb2RlbDtcbiAgICBzdGF0ZS5zZXJ2ZWRNb2RlbCA9IGNhbm9uaWNhbE1vZGVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJvdXRpbmdGcm9tTWVzc2FnZShcbiAgbWVzc2FnZTogUmVzcG9uc2VJdGVtIHwgbnVsbCxcbiAgc3RhdGU6IENsYXVkZVN0cmVhbUpzb25TdGF0ZSB8IHVuZGVmaW5lZCxcbik6IHZvaWQge1xuICBpZiAoIXN0YXRlIHx8ICFtZXNzYWdlKSByZXR1cm47XG4gIGNvbnN0IG1vZGVsID0gb3B0aW9uYWxTdHJpbmcobWVzc2FnZS5tb2RlbCk7XG4gIGNvbnN0IGNhbm9uaWNhbE1vZGVsID0gbW9kZWwgPyBjYW5vbmljYWxFdmVudE1vZGVsKG1vZGVsKSA6IHVuZGVmaW5lZDtcbiAgaWYgKGNhbm9uaWNhbE1vZGVsKSBzdGF0ZS5zZXJ2ZWRNb2RlbCA9IGNhbm9uaWNhbE1vZGVsO1xuICBjb25zdCBzdG9wUmVhc29uID0gb3B0aW9uYWxTdHJpbmcobWVzc2FnZS5zdG9wX3JlYXNvbik7XG4gIGlmIChzdG9wUmVhc29uKSB7XG4gICAgc3RhdGUuc3RvcFJlYXNvbiA9IHN0b3BSZWFzb247XG4gICAgaWYgKHN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gdHJ1ZTtcbiAgICBlbHNlIGlmIChzdGF0ZS5tb2RlbEZhbGxiYWNrcz8uc29tZSgoZmFsbGJhY2spID0+IGZhbGxiYWNrLnRvTW9kZWwgPT09IGNhbm9uaWNhbE1vZGVsKSkge1xuICAgICAgc3RhdGUucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3BEZXRhaWxzID0gYXNPYmplY3QobWVzc2FnZS5zdG9wX2RldGFpbHMpO1xuICBpZiAoc3RvcERldGFpbHM/LnR5cGUgPT09IFwicmVmdXNhbFwiIHx8IHN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSB7XG4gICAgc3RhdGUucmVmdXNhbCA9IHtcbiAgICAgIGNhdGVnb3J5OiBvcHRpb25hbFN0cmluZyhzdG9wRGV0YWlscz8uY2F0ZWdvcnkpLFxuICAgICAgZXhwbGFuYXRpb246IG9wdGlvbmFsU3RyaW5nKHN0b3BEZXRhaWxzPy5leHBsYW5hdGlvbiksXG4gICAgfTtcbiAgfVxuICB1cGRhdGVSb3V0aW5nRnJvbVVzYWdlKGFzT2JqZWN0KG1lc3NhZ2UudXNhZ2UpLCBzdGF0ZSk7XG59XG5cbi8vIFByb2Nlc3NlcyBvbmUgQ2xhdWRlIHN0ZG91dCBKU09OTCBsaW5lLiBSZXR1cm5zIGZpbmFsIHJlc3VsdCBvbiByZXN1bHQgZXZlbnQuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlU3RyZWFtSnNvbkxpbmUoXG4gIGxpbmU6IHN0cmluZyxcbiAgb25EZWx0YTogKHRleHQ6IHN0cmluZykgPT4gdm9pZCxcbiAgb3B0cz86IHsgc3RydWN0dXJlZE91dHB1dD86IGJvb2xlYW47IHN0YXRlPzogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIH0sXG4pOiBDbGF1ZGVTdHJlYW1SZXN1bHQgfCBudWxsIHtcbiAgY29uc3Qgc3RydWN0dXJlZE91dHB1dCA9IG9wdHM/LnN0cnVjdHVyZWRPdXRwdXQgPz8gZmFsc2U7XG4gIGNvbnN0IHN0YXRlID0gb3B0cz8uc3RhdGU7XG4gIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gbnVsbDtcblxuICBsZXQgajogeyBba2V5OiBzdHJpbmddOiBKc29uVmFsdWUgfCB1bmRlZmluZWQgfTtcbiAgdHJ5IHtcbiAgICBqID0gSlNPTi5wYXJzZSh0cmltbWVkKSBhcyB7IFtrZXk6IHN0cmluZ106IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChqLnR5cGUgPT09IFwic3RyZWFtX2V2ZW50XCIpIHtcbiAgICBjb25zdCBldmVudCA9IGFzT2JqZWN0KGouZXZlbnQpO1xuICAgIGlmIChldmVudD8udHlwZSA9PT0gXCJtZXNzYWdlX3N0YXJ0XCIpIHtcbiAgICAgIHVwZGF0ZVJvdXRpbmdGcm9tTWVzc2FnZShhc09iamVjdChldmVudC5tZXNzYWdlKSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnR5cGUgPT09IFwibWVzc2FnZV9kZWx0YVwiKSB7XG4gICAgICBjb25zdCBkZWx0YSA9IGFzT2JqZWN0KGV2ZW50LmRlbHRhKTtcbiAgICAgIGNvbnN0IHN0b3BSZWFzb24gPSBvcHRpb25hbFN0cmluZyhkZWx0YT8uc3RvcF9yZWFzb24pO1xuICAgICAgaWYgKHN0YXRlICYmIHN0b3BSZWFzb24pIHtcbiAgICAgICAgc3RhdGUuc3RvcFJlYXNvbiA9IHN0b3BSZWFzb247XG4gICAgICAgIGlmIChzdG9wUmVhc29uID09PSBcInJlZnVzYWxcIikgc3RhdGUucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSBcImNvbnRlbnRfYmxvY2tfZGVsdGFcIikge1xuICAgICAgY29uc3QgZGVsdGEgPSBhc09iamVjdChldmVudC5kZWx0YSk7XG4gICAgICBpZiAoZGVsdGEpIHtcbiAgICAgICAgaWYgKHN0cnVjdHVyZWRPdXRwdXQpIHtcbiAgICAgICAgICBpZiAoZGVsdGEudHlwZSA9PT0gXCJpbnB1dF9qc29uX2RlbHRhXCIgJiYgdHlwZW9mIGRlbHRhLnBhcnRpYWxfanNvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgb25EZWx0YShkZWx0YS5wYXJ0aWFsX2pzb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZGVsdGEudHlwZSA9PT0gXCJ0ZXh0X2RlbHRhXCIgJiYgdHlwZW9mIGRlbHRhLnRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIG9uRGVsdGEoZGVsdGEudGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGoudHlwZSA9PT0gXCJzeXN0ZW1cIikge1xuICAgIGNvbnN0IHN1YnR5cGUgPSBvcHRpb25hbFN0cmluZyhqLnN1YnR5cGUpO1xuICAgIGlmIChzdWJ0eXBlID09PSBcIm1vZGVsX3JlZnVzYWxfZmFsbGJhY2tcIikge1xuICAgICAgY29uc3QgZnJvbU1vZGVsID0gb3B0aW9uYWxTdHJpbmcoai5vcmlnaW5hbE1vZGVsKSA/PyBvcHRpb25hbFN0cmluZyhqLm9yaWdpbmFsX21vZGVsKTtcbiAgICAgIGNvbnN0IHRvTW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLmZhbGxiYWNrTW9kZWwpID8/IG9wdGlvbmFsU3RyaW5nKGouZmFsbGJhY2tfbW9kZWwpO1xuICAgICAgaWYgKGZyb21Nb2RlbCAmJiB0b01vZGVsKSB7XG4gICAgICAgIHJlY29yZEZhbGxiYWNrKHN0YXRlLCB7XG4gICAgICAgICAgdHJpZ2dlcjogXCJyZWZ1c2FsXCIsXG4gICAgICAgICAgZnJvbU1vZGVsLFxuICAgICAgICAgIHRvTW9kZWwsXG4gICAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpX3JlZnVzYWxfY2F0ZWdvcnkpID8/XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9jYXRlZ29yeSksXG4gICAgICAgICAgZXhwbGFuYXRpb246XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxFeHBsYW5hdGlvbikgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpX3JlZnVzYWxfZXhwbGFuYXRpb24pID8/XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxFeHBsYW5hdGlvbikgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9leHBsYW5hdGlvbiksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3VidHlwZSA9PT0gXCJtb2RlbF9yZWZ1c2FsX25vX2ZhbGxiYWNrXCIgJiYgc3RhdGUpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsTW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLm9yaWdpbmFsTW9kZWwpID8/IG9wdGlvbmFsU3RyaW5nKGoub3JpZ2luYWxfbW9kZWwpO1xuICAgICAgaWYgKG9yaWdpbmFsTW9kZWwpIHN0YXRlLnNlcnZlZE1vZGVsID0gY2Fub25pY2FsRXZlbnRNb2RlbChvcmlnaW5hbE1vZGVsKTtcbiAgICAgIHN0YXRlLnN0b3BSZWFzb24gPSBcInJlZnVzYWxcIjtcbiAgICAgIHN0YXRlLnJlZnVzYWxXaXRob3V0RmFsbGJhY2sgPSB0cnVlO1xuICAgICAgc3RhdGUucmVmdXNhbCA9IHtcbiAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5hcGlSZWZ1c2FsQ2F0ZWdvcnkpID8/XG4gICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5hcGlfcmVmdXNhbF9jYXRlZ29yeSkgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxfY2F0ZWdvcnkpLFxuICAgICAgICBleHBsYW5hdGlvbjpcbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxFeHBsYW5hdGlvbikgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaV9yZWZ1c2FsX2V4cGxhbmF0aW9uKSA/P1xuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbEV4cGxhbmF0aW9uKSA/P1xuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9leHBsYW5hdGlvbiksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChqLnR5cGUgPT09IFwiYXNzaXN0YW50XCIpIHtcbiAgICB1cGRhdGVSb3V0aW5nRnJvbU1lc3NhZ2UoYXNPYmplY3Qoai5tZXNzYWdlKSwgc3RhdGUpO1xuICAgIGlmIChzdHJ1Y3R1cmVkT3V0cHV0ICYmIHN0YXRlICYmIHN0YXRlLnN0cnVjdHVyZWRPdXRwdXRUZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBzdHJ1Y3R1cmVkT3V0cHV0VG9vbFVzZVRleHQoaik7XG4gICAgICBpZiAodGV4dCAhPT0gdW5kZWZpbmVkKSBzdGF0ZS5zdHJ1Y3R1cmVkT3V0cHV0VGV4dCA9IHRleHQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGoudHlwZSA9PT0gXCJyZXN1bHRcIikge1xuICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgY29uc3QgcHJlc2VydmVkU3RydWN0dXJlZE91dHB1dCA9IHN0cnVjdHVyZWRPdXRwdXQgPyBzdGF0ZT8uc3RydWN0dXJlZE91dHB1dFRleHQgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHByZXNlcnZlZFN0cnVjdHVyZWRPdXRwdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dCA9IHByZXNlcnZlZFN0cnVjdHVyZWRPdXRwdXQ7XG4gICAgfSBlbHNlIGlmIChqLnN0cnVjdHVyZWRfb3V0cHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShqLnN0cnVjdHVyZWRfb3V0cHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dCA9IHN0cmlwQ29kZUZlbmNlKHR5cGVvZiBqLnJlc3VsdCA9PT0gXCJzdHJpbmdcIiA/IGoucmVzdWx0IDogXCJcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3VXNhZ2UgPSBhc09iamVjdChqLnVzYWdlKSA/PyB7fTtcbiAgICB1cGRhdGVSb3V0aW5nRnJvbVVzYWdlKHJhd1VzYWdlLCBzdGF0ZSk7XG4gICAgY29uc3QgcmVzdWx0TW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLm1vZGVsKTtcbiAgICBpZiAoc3RhdGUgJiYgcmVzdWx0TW9kZWwgJiYgIXN0YXRlLnNlcnZlZE1vZGVsKSB7XG4gICAgICBzdGF0ZS5zZXJ2ZWRNb2RlbCA9IGNhbm9uaWNhbEV2ZW50TW9kZWwocmVzdWx0TW9kZWwpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRTdG9wUmVhc29uID0gb3B0aW9uYWxTdHJpbmcoai5zdG9wX3JlYXNvbik7XG4gICAgaWYgKHN0YXRlICYmIHJlc3VsdFN0b3BSZWFzb24pIHtcbiAgICAgIHN0YXRlLnN0b3BSZWFzb24gPSByZXN1bHRTdG9wUmVhc29uO1xuICAgICAgaWYgKHJlc3VsdFN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdXNhZ2UgPSB0b1VzYWdlQnJlYWtkb3duKHJhd1VzYWdlIGFzIENsYXVkZVVzYWdlKTtcbiAgICBjb25zdCBxdW90YUV4aGF1c3RlZCA9IHRleHQuc3RhcnRzV2l0aChcIllvdSd2ZSBoaXRcIik7XG4gICAgY29uc3Qgc3VidHlwZSA9IHR5cGVvZiBqLnN1YnR5cGUgPT09IFwic3RyaW5nXCIgPyBqLnN1YnR5cGUgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGVybWluYWxSZWFzb24gPSB0eXBlb2Ygai50ZXJtaW5hbF9yZWFzb24gPT09IFwic3RyaW5nXCIgPyBqLnRlcm1pbmFsX3JlYXNvbiA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFNPTi00OTU6IOu5hOygleyDgSDsooXro4woZXJyb3JfbWF4X3N0cnVjdHVyZWRfb3V0cHV0X3JldHJpZXMg65OxKeuKlCDsoJXsp4HtlZjqsowg7JeQ65+s66GcIOyymOumrO2VnOuLpC5cbiAgICAvLyBDQyBzdHJ1Y3R1cmVkIG91dHB1dCDsnYAgY29uc3RyYWluZWQgZGVjb2Rpbmcg7J20IOyVhOuLiOudvCBcInRvb2wgaW5wdXQg7IOd7ISxIO2bhCDsgqztm4QgQUpWIOqygOymnVwi7J206528XG4gICAgLy8g66qo64247J20IOqwgOuBlCBwbGFjZWhvbGRlcigkUEFSQU1FVEVSX05BTUUpwrfqsbDrtoAoXCJqdXN0IGtpZGRpbmdcIinCt+2VhOuTnCDriITrnb0oYWR2YW5jZSkg6rCZ7J2AIOuwnOyekS9cbiAgICAvLyDrtojsmYTsoIQg7Lac66Cl7J2EIOuCuOuLpC4g7J2066W8IFwi6rGw7J2YIOunnuyVmOycvOuLiCDsgrTrpqzsnpBcIuqzoCDtnZjrpqzrqbQg7YG065287J207Ja47Yq4IOqygOymneyXkOyEnCDquajsp4DqsbDrgpgo7ZWE65OcIOuIhOudvSlcbiAgICAvLyDsk7DroIjquLDqsIAg7IOI7Ja0IOuCmOqwhOuLpCjsi6TsuKEgMTE2NzQvMTE2NzUpLiDslYzroKTsp4QgYmVzdCBwcmFjdGljZShyZWZ1c2FsL2RlZ2VuZXJhdGUgb3V0cHV0IOydgCDsgrTrpqzsp4BcbiAgICAvLyDrp5Dqs6AgZ3JhY2VmdWwgZXJyb3Ip64yA66GcLCBzdWJ0eXBlICE9IHN1Y2Nlc3Mg64qUIOq3uOuMgOuhnCDsl5Drn6zroZwg65GU64ukLiDtgbTrnbzsnbTslrjtirjqsIAg6re4IO2EtOydhCDsi6TtjKjroZxcbiAgICAvLyDri6Tro6jqsowg7ZWc64ukKOyKpO2KuOumvOydtOudvCDsnpDrj5kg7J6s7Iuc64+EIOyXhuydjCDigJQg7Iuc6rCEIDLrsLAg67Cp7KeAKS5cbiAgICBjb25zdCBpc0Vycm9yID1cbiAgICAgIGouaXNfZXJyb3IgPT09IHRydWUgfHxcbiAgICAgIGoudGVybWluYWxfcmVhc29uID09PSBcIm1vZGVsX2Vycm9yXCIgfHxcbiAgICAgIChzdWJ0eXBlICE9PSB1bmRlZmluZWQgJiYgc3VidHlwZSAhPT0gXCJzdWNjZXNzXCIpIHx8XG4gICAgICBzdGF0ZT8ucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9PT0gdHJ1ZTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZXh0LFxuICAgICAgdXNhZ2UsXG4gICAgICBkdXJhdGlvbk1zOiB0eXBlb2Ygai5kdXJhdGlvbl9tcyA9PT0gXCJudW1iZXJcIiA/IGouZHVyYXRpb25fbXMgOiAwLFxuICAgICAgY29zdFVzZDogdHlwZW9mIGoudG90YWxfY29zdF91c2QgPT09IFwibnVtYmVyXCIgPyBqLnRvdGFsX2Nvc3RfdXNkIDogMCxcbiAgICAgIHF1b3RhRXhoYXVzdGVkLFxuICAgICAgaXNFcnJvcixcbiAgICAgIHN1YnR5cGUsXG4gICAgICB0ZXJtaW5hbFJlYXNvbixcbiAgICAgIHNlcnZlZE1vZGVsOiBzdGF0ZT8uc2VydmVkTW9kZWwsXG4gICAgICBzdG9wUmVhc29uOiBzdGF0ZT8uc3RvcFJlYXNvbixcbiAgICAgIHJlZnVzYWw6IHN0YXRlPy5yZWZ1c2FsLFxuICAgICAgbW9kZWxGYWxsYmFja3M6IHN0YXRlPy5tb2RlbEZhbGxiYWNrcyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBNEJBLFNBQVMsZ0JBQWdCLE9BQWlDO0FBQ3hELFFBQU8sTUFDSixRQUFRLE1BQWlELEVBQUUsU0FBUyxPQUFPLENBQzNFLEtBQUssTUFBTSxFQUFFLEtBQUssQ0FDbEIsS0FBSyxLQUFLOztBQUdmLFNBQVMsVUFBVSxNQUFxRDtBQUN0RSxRQUFPLENBQUM7RUFBRSxNQUFNO0VBQVE7RUFB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
|
|
256
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWpzb24tYWRhcHRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2FudGhyb3BpYy9zdHJlYW0tanNvbi1hZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2xhdWRlIENMSSBzdHJlYW0tanNvbiBhZGFwdGVyLlxuICpcbiAqIElucHV0OiBxZ3JpZCBoaXN0b3J5L2lucHV0IC0+IENsYXVkZSBKU09OTCBzdGRpbi5cbiAqIE91dHB1dDogQ2xhdWRlIEpTT05MIHN0ZG91dCAtPiBxZ3JpZCBkZWx0YXMgKyBmaW5hbCByZXN1bHQgbWV0YWRhdGEuXG4gKlxuICogUHJldmlvdXMgY29udmVyc2F0aW9uIGl0ZW1zIGFyZSBmbGF0dGVuZWQgaW50byBvbmUgYXNzaXN0YW50IGNvbnRleHQgbGluZS5cbiAqIFRoZSBvbmx5IGV4ZWN1dGFibGUgdXNlciBsaW5lIGlzIHRoZSBjdXJyZW50IGlucHV0LlxuICovXG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Vc2VySW5wdXRcIjtcbmltcG9ydCB7XG4gIHR5cGUgTW9kZWxGYWxsYmFjayxcbiAgdHlwZSBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd24sXG59IGZyb20gXCIuLi9jb21tb24vcHJvdmlkZXItZGlzcGF0Y2hlclwiO1xuXG4vLyDilIDilIAg7J6F66ClIOyWtOuMke2EsCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gQ2xhdWRlIHN0cmVhbS1qc29uIOyeheugpSDtlZwg7KSEKEpTT05MKS4gRW52ZWxvcGUgZmllbGRzIGFyZSBhZGRlZCBpbiBjbGF1ZGUtc2Vzc2lvbi5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhdWRlU3RyZWFtSnNvbkxpbmUge1xuICB0eXBlOiBcInVzZXJcIiB8IFwiYXNzaXN0YW50XCI7XG4gIG1lc3NhZ2U6IHtcbiAgICByb2xlOiBcInVzZXJcIiB8IFwiYXNzaXN0YW50XCI7XG4gICAgY29udGVudDogQXJyYXk8eyB0eXBlOiBcInRleHRcIjsgdGV4dDogc3RyaW5nIH0+O1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VySW5wdXRUb1RleHQoaW5wdXQ6IEFycmF5PFVzZXJJbnB1dD4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXRcbiAgICAuZmlsdGVyKChpKTogaSBpcyBFeHRyYWN0PFVzZXJJbnB1dCwgeyB0eXBlOiBcInRleHRcIiB9PiA9PiBpLnR5cGUgPT09IFwidGV4dFwiKVxuICAgIC5tYXAoKGkpID0+IGkudGV4dClcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gdGV4dEJsb2NrKHRleHQ6IHN0cmluZyk6IEFycmF5PHsgdHlwZTogXCJ0ZXh0XCI7IHRleHQ6IHN0cmluZyB9PiB7XG4gIHJldHVybiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dCB9XTtcbn1cblxuLy8gY29kZXggUmVzcG9uc2VJdGVtKGNvbGRIaXN0b3J5IGl0ZW0pIOy1nOyGjCBzaGFwZS5cbi8vIGV4dHJhY3RQcm9tcHRBbmRIaXN0b3J5KGFpLXNkay91dGlscy50cykg6rCAIOunjOuTnOuKlCDtmJXsi506XG4vLyAgIHsgdHlwZTpcIm1lc3NhZ2VcIiwgcm9sZTpcInVzZXJcIiwgY29udGVudDpbe3R5cGU6XCJpbnB1dF90ZXh0XCIsIHRleHR9XSB9XG4vLyAgIHsgdHlwZTpcIm1lc3NhZ2VcIiwgcm9sZTpcImFzc2lzdGFudFwiLCBjb250ZW50Olt7dHlwZTpcIm91dHB1dF90ZXh0XCIsIHRleHR9XSB9XG4vLyAgIHsgdHlwZTpcImZ1bmN0aW9uX2NhbGxcIiwgbmFtZSwgYXJndW1lbnRzLCBjYWxsX2lkIH1cbi8vICAgeyB0eXBlOlwiZnVuY3Rpb25fY2FsbF9vdXRwdXRcIiwgY2FsbF9pZCwgb3V0cHV0IH1cbnR5cGUgUmVzcG9uc2VJdGVtID0geyBba2V5OiBzdHJpbmddOiBKc29uVmFsdWUgfCB1bmRlZmluZWQgfTtcblxuZnVuY3Rpb24gYXNPYmplY3QodjogSnNvblZhbHVlIHwgdW5kZWZpbmVkKTogUmVzcG9uc2VJdGVtIHwgbnVsbCB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHYpID8gKHYgYXMgUmVzcG9uc2VJdGVtKSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlSXRlbVRleHQoaXRlbTogUmVzcG9uc2VJdGVtKTogc3RyaW5nIHtcbiAgY29uc3QgY29udGVudCA9IGl0ZW0uY29udGVudDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSByZXR1cm4gXCJcIjtcbiAgcmV0dXJuIGNvbnRlbnRcbiAgICAubWFwKChjKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSBhc09iamVjdChjKTtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIG9iai50ZXh0ID09PSBcInN0cmluZ1wiID8gb2JqLnRleHQgOiBcIlwiO1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBmbGF0dGVuQ29sZEhpc3RvcnkoY29sZEhpc3Rvcnk6IEFycmF5PEpzb25WYWx1ZT4pOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBmb3IgKGNvbnN0IHJhdyBvZiBjb2xkSGlzdG9yeSkge1xuICAgIGNvbnN0IGl0ZW0gPSBhc09iamVjdChyYXcpO1xuICAgIGlmICghaXRlbSkgY29udGludWU7XG5cbiAgICBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBpdGVtLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpIHtcbiAgICAgIHBhcnRzLnB1c2goYEFzc2lzdGFudDogJHtyZXNwb25zZUl0ZW1UZXh0KGl0ZW0pfWApO1xuICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBpdGVtLnJvbGUgPT09IFwidXNlclwiKSB7XG4gICAgICBwYXJ0cy5wdXNoKGBVc2VyOiAke3Jlc3BvbnNlSXRlbVRleHQoaXRlbSl9YCk7XG4gICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbFwiKSB7XG4gICAgICBjb25zdCBuYW1lID0gdHlwZW9mIGl0ZW0ubmFtZSA9PT0gXCJzdHJpbmdcIiA/IGl0ZW0ubmFtZSA6IFwiXCI7XG4gICAgICBjb25zdCBhcmdzID1cbiAgICAgICAgdHlwZW9mIGl0ZW0uYXJndW1lbnRzID09PSBcInN0cmluZ1wiID8gaXRlbS5hcmd1bWVudHMgOiBKU09OLnN0cmluZ2lmeShpdGVtLmFyZ3VtZW50cyA/PyB7fSk7XG4gICAgICBwYXJ0cy5wdXNoKGBUb29sIGNhbGw6ICR7bmFtZX0oJHthcmdzfSlgKTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gXCJmdW5jdGlvbl9jYWxsX291dHB1dFwiKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPVxuICAgICAgICB0eXBlb2YgaXRlbS5vdXRwdXQgPT09IFwic3RyaW5nXCIgPyBpdGVtLm91dHB1dCA6IEpTT04uc3RyaW5naWZ5KGl0ZW0ub3V0cHV0ID8/IFwiXCIpO1xuICAgICAgcGFydHMucHVzaChgVG9vbCByZXN1bHQ6ICR7b3V0cHV0fWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RyZWFtSnNvbklucHV0KG9wdHM6IHtcbiAgY29sZEhpc3Rvcnk/OiBBcnJheTxKc29uVmFsdWU+O1xuICBpbnB1dDogQXJyYXk8VXNlcklucHV0Pjtcbn0pOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4ge1xuICBjb25zdCBsaW5lczogQXJyYXk8Q2xhdWRlU3RyZWFtSnNvbkxpbmU+ID0gW107XG5cbiAgaWYgKG9wdHMuY29sZEhpc3RvcnkgJiYgb3B0cy5jb2xkSGlzdG9yeS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmxhdHRlbmVkID0gZmxhdHRlbkNvbGRIaXN0b3J5KG9wdHMuY29sZEhpc3RvcnkpO1xuICAgIGlmIChmbGF0dGVuZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICB0eXBlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICBjb250ZW50OiB0ZXh0QmxvY2soYFByaW9yIGNvbnZlcnNhdGlvbiBjb250ZXh0OlxcbiR7ZmxhdHRlbmVkfWApLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGluZXMucHVzaCh7XG4gICAgdHlwZTogXCJ1c2VyXCIsXG4gICAgbWVzc2FnZTogeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogdGV4dEJsb2NrKHVzZXJJbnB1dFRvVGV4dChvcHRzLmlucHV0KSkgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplU3RyZWFtSnNvbklucHV0KGxpbmVzOiBBcnJheTxDbGF1ZGVTdHJlYW1Kc29uTGluZT4pOiBzdHJpbmcge1xuICByZXR1cm4gbGluZXMubWFwKChsKSA9PiBKU09OLnN0cmluZ2lmeShsKSkuam9pbihcIlxcblwiKSArIFwiXFxuXCI7XG59XG5cbi8vIOKUgOKUgCDstpzroKUg7Ja064yR7YSwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy9cbi8vIENsYXVkZSBzdGRvdXQoSlNPTkwp7J2EIHFncmlkIGRlbHRhcyArIGZpbmFsIHJlc3VsdCDroZwg67OA7ZmY7ZWc64ukLlxuXG5pbnRlcmZhY2UgQ2xhdWRlVXNhZ2Uge1xuICBpbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIG91dHB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uPzoge1xuICAgIGVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gICAgZXBoZW1lcmFsXzFoX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgfTtcbiAgaXRlcmF0aW9ucz86IEFycmF5PHtcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIG1vZGVsPzogc3RyaW5nO1xuICB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTdHJlYW1SZXN1bHQge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHVzYWdlOiBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd247XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgY29zdFVzZDogbnVtYmVyO1xuICAvLyBxdW90YSDshozsp4QoXCJZb3UndmUgaGl0IC4uLlwiKSDqsJDsp4AuIGRpc3BhdGNoZXIg6rCAIFF1b3RhRXJyb3Ig66GcIOuzgO2ZmC5cbiAgcXVvdGFFeGhhdXN0ZWQ6IGJvb2xlYW47XG4gIC8vIHJlc3VsdC5pc19lcnJvciAvIHRlcm1pbmFsIG1vZGVsX2Vycm9yIOuTsS4gZGlzcGF0Y2hlciDqsIAg7JeQ65+s66GcIOuzgO2ZmC5cbiAgaXNFcnJvcjogYm9vbGVhbjtcbiAgLy8g7KeE64uo7JqpOiBDQyByZXN1bHQg65287J247J2YIHN1YnR5cGUoXCJzdWNjZXNzXCIgfCBcImVycm9yX21heF90dXJuc1wiIHwgLi4uKSDqs7wgdGVybWluYWxfcmVhc29uLlxuICAvLyBpc0Vycm9yIO2MkOyglSDsgqzsnKDrpbwg7JeQ65+sIOuplOyLnOyngOyXkCDrk5zrn6zrgrTquLAg7JyE7ZW0IOuztOyhtO2VnOuLpChTT04tNDk1KS5cbiAgc3VidHlwZT86IHN0cmluZztcbiAgdGVybWluYWxSZWFzb24/OiBzdHJpbmc7XG4gIC8vIOyLpOygnCDstZzsooUg7J2R64u17J2EIOunjOuToCDrqqjrjbguIEZhYmxlIHJlZnVzYWwgZmFsbGJhY2sg65WMIHJlcXVlc3RlZCBtb2RlbCDqs7wg64uk66W064ukLlxuICBzZXJ2ZWRNb2RlbD86IHN0cmluZztcbiAgc3RvcFJlYXNvbj86IHN0cmluZztcbiAgcmVmdXNhbD86IHtcbiAgICBjYXRlZ29yeT86IHN0cmluZztcbiAgICBleHBsYW5hdGlvbj86IHN0cmluZztcbiAgfTtcbiAgbW9kZWxGYWxsYmFja3M/OiBBcnJheTxNb2RlbEZhbGxiYWNrPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGF1ZGVTdHJlYW1Kc29uU3RhdGUge1xuICBzdHJ1Y3R1cmVkT3V0cHV0VGV4dD86IHN0cmluZztcbiAgc2VydmVkTW9kZWw/OiBzdHJpbmc7XG4gIHN0b3BSZWFzb24/OiBzdHJpbmc7XG4gIHJlZnVzYWw/OiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gICAgZXhwbGFuYXRpb24/OiBzdHJpbmc7XG4gIH07XG4gIG1vZGVsRmFsbGJhY2tzPzogQXJyYXk8TW9kZWxGYWxsYmFjaz47XG4gIHJlZnVzYWxXaXRob3V0RmFsbGJhY2s/OiBib29sZWFuO1xufVxuXG4vLyBBbnRocm9waWMgdXNhZ2UgNCDsubTthYzqs6Drpqwg4oaSIFRva2VuVXNhZ2VCcmVha2Rvd24uXG4vLyBBbnRocm9waWMgbmF0aXZlIHVzYWdlIOuKlCBpbnB1dC9jYWNoZV9jcmVhdGlvbi9jYWNoZV9yZWFkIOulvCDshJzroZwg67Cw7YOA7KCB7J24IOy5tO2FjOqzoOumrOuhnCDspIDri6QuXG4vLyDrsJjrqbQgcWdyaWQg64K067aAIO2RnOykgChUb2tlblVzYWdlQnJlYWtkb3duKeqzvCBjb3N0IOqzhOyCsOydgCBpbnB1dFRva2VucyDrpbwgXCLsoITssrQg7J6F66ClXG4vLyAoPSBub24tY2FjaGUgaW5wdXQgKyBjYWNoZSBjcmVhdGlvbiArIGNhY2hlIHJlYWQpXCIg7Jy866GcIOy3qOq4ie2VmOqzoCBjYWNoZWRJbnB1dFRva2Vucy9jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnNcbi8vIOulvCDqt7jspJEg6rCBIOuqq+ycvOuhnCDri6Tsi5wg7ZGc7Iuc7ZWc64ukKE9wZW5BSS9Db2RleCB1c2FnZSDsmYAg6rCZ7J2AIOydmOuvuCkuIOuUsOudvOyEnCDsl6zquLDshJwg7ZWp7LOQIO2RnOykgO2ZlO2VnOuLpC5cbmZ1bmN0aW9uIHRvVXNhZ2VCcmVha2Rvd24odTogQ2xhdWRlVXNhZ2UpOiBQcm92aWRlclRva2VuVXNhZ2VCcmVha2Rvd24ge1xuICBjb25zdCBpbnB1dCA9IHUuaW5wdXRfdG9rZW5zID8/IDA7XG4gIGNvbnN0IGNhY2hlQ3JlYXRlID0gdS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgPz8gMDtcbiAgY29uc3QgY2FjaGVSZWFkID0gdS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyA/PyAwO1xuICBjb25zdCBvdXRwdXQgPSB1Lm91dHB1dF90b2tlbnMgPz8gMDtcbiAgY29uc3QgdG90YWxJbnB1dCA9IGlucHV0ICsgY2FjaGVDcmVhdGUgKyBjYWNoZVJlYWQ7XG4gIGNvbnN0IGNhY2hlQ3JlYXRlNW0gPSB1LmNhY2hlX2NyZWF0aW9uPy5lcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zO1xuICBjb25zdCBjYWNoZUNyZWF0ZTFoID0gdS5jYWNoZV9jcmVhdGlvbj8uZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucztcbiAgcmV0dXJuIHtcbiAgICB0b3RhbFRva2VuczogdG90YWxJbnB1dCArIG91dHB1dCxcbiAgICBpbnB1dFRva2VuczogdG90YWxJbnB1dCxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogY2FjaGVSZWFkLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogY2FjaGVDcmVhdGUsXG4gICAgLi4uKHR5cGVvZiBjYWNoZUNyZWF0ZTVtID09PSBcIm51bWJlclwiID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogY2FjaGVDcmVhdGU1bSB9IDoge30pLFxuICAgIC4uLih0eXBlb2YgY2FjaGVDcmVhdGUxaCA9PT0gXCJudW1iZXJcIiA/IHsgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IGNhY2hlQ3JlYXRlMWggfSA6IHt9KSxcbiAgICBvdXRwdXRUb2tlbnM6IG91dHB1dCxcbiAgICByZWFzb25pbmdPdXRwdXRUb2tlbnM6IDAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0cmlwQ29kZUZlbmNlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzXG4gICAgLnRyaW0oKVxuICAgIC5yZXBsYWNlKC9eYGBgKD86anNvbik/XFxzKlxcbj8vaSwgXCJcIilcbiAgICAucmVwbGFjZSgvXFxuP2BgYFxccyokL2ksIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzdHJ1Y3R1cmVkT3V0cHV0VG9vbFVzZVRleHQoajogUmVzcG9uc2VJdGVtKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWVzc2FnZSA9IGFzT2JqZWN0KGoubWVzc2FnZSk7XG4gIGNvbnN0IGNvbnRlbnQgPSBtZXNzYWdlPy5jb250ZW50O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCByYXcgb2YgY29udGVudCkge1xuICAgIGNvbnN0IGJsb2NrID0gYXNPYmplY3QocmF3KTtcbiAgICBpZiAoIWJsb2NrKSBjb250aW51ZTtcbiAgICBpZiAoXG4gICAgICBibG9jay50eXBlID09PSBcInRvb2xfdXNlXCIgJiZcbiAgICAgIGJsb2NrLm5hbWUgPT09IFwiU3RydWN0dXJlZE91dHB1dFwiICYmXG4gICAgICBibG9jay5pbnB1dCAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYmxvY2suaW5wdXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxFdmVudE1vZGVsKG1vZGVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aXRob3V0UHJvdmlkZXIgPSBtb2RlbC5zdGFydHNXaXRoKFwiYW50aHJvcGljL1wiKSA/IG1vZGVsLnNsaWNlKFwiYW50aHJvcGljL1wiLmxlbmd0aCkgOiBtb2RlbDtcbiAgcmV0dXJuIHdpdGhvdXRQcm92aWRlci5yZXBsYWNlKC9cXFsxbVxcXSQvLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxTdHJpbmcodmFsdWU6IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZWNvcmRGYWxsYmFjayhzdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIHwgdW5kZWZpbmVkLCBmYWxsYmFjazogTW9kZWxGYWxsYmFjayk6IHZvaWQge1xuICBpZiAoIXN0YXRlKSByZXR1cm47XG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IE1vZGVsRmFsbGJhY2sgPSB7XG4gICAgLi4uZmFsbGJhY2ssXG4gICAgZnJvbU1vZGVsOiBjYW5vbmljYWxFdmVudE1vZGVsKGZhbGxiYWNrLmZyb21Nb2RlbCksXG4gICAgdG9Nb2RlbDogY2Fub25pY2FsRXZlbnRNb2RlbChmYWxsYmFjay50b01vZGVsKSxcbiAgfTtcbiAgY29uc3QgZXhpc3RpbmcgPSBzdGF0ZS5tb2RlbEZhbGxiYWNrcz8uZmluZChcbiAgICAoaXRlbSkgPT5cbiAgICAgIGl0ZW0udHJpZ2dlciA9PT0gbm9ybWFsaXplZC50cmlnZ2VyICYmXG4gICAgICBpdGVtLmZyb21Nb2RlbCA9PT0gbm9ybWFsaXplZC5mcm9tTW9kZWwgJiZcbiAgICAgIGl0ZW0udG9Nb2RlbCA9PT0gbm9ybWFsaXplZC50b01vZGVsLFxuICApO1xuICBpZiAoZXhpc3RpbmcpIHtcbiAgICBleGlzdGluZy5jYXRlZ29yeSA/Pz0gbm9ybWFsaXplZC5jYXRlZ29yeTtcbiAgICBleGlzdGluZy5leHBsYW5hdGlvbiA/Pz0gbm9ybWFsaXplZC5leHBsYW5hdGlvbjtcbiAgfSBlbHNlIHtcbiAgICAoc3RhdGUubW9kZWxGYWxsYmFja3MgPz89IFtdKS5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9XG4gIHN0YXRlLnNlcnZlZE1vZGVsID0gbm9ybWFsaXplZC50b01vZGVsO1xuICBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJvdXRpbmdGcm9tVXNhZ2UoXG4gIHVzYWdlOiBSZXNwb25zZUl0ZW0gfCBudWxsLFxuICBzdGF0ZTogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIHwgdW5kZWZpbmVkLFxuKTogdm9pZCB7XG4gIGlmICghc3RhdGUgfHwgIXVzYWdlIHx8ICFBcnJheS5pc0FycmF5KHVzYWdlLml0ZXJhdGlvbnMpKSByZXR1cm47XG5cbiAgbGV0IHByZXZpb3VzTW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCByYXcgb2YgdXNhZ2UuaXRlcmF0aW9ucykge1xuICAgIGNvbnN0IGl0ZXJhdGlvbiA9IGFzT2JqZWN0KHJhdyk7XG4gICAgaWYgKCFpdGVyYXRpb24pIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1vZGVsID0gb3B0aW9uYWxTdHJpbmcoaXRlcmF0aW9uLm1vZGVsKTtcbiAgICBjb25zdCB0eXBlID0gb3B0aW9uYWxTdHJpbmcoaXRlcmF0aW9uLnR5cGUpO1xuICAgIGlmICghbW9kZWwpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGNhbm9uaWNhbE1vZGVsID0gY2Fub25pY2FsRXZlbnRNb2RlbChtb2RlbCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZmFsbGJhY2tfbWVzc2FnZVwiICYmIHByZXZpb3VzTW9kZWwpIHtcbiAgICAgIHJlY29yZEZhbGxiYWNrKHN0YXRlLCB7XG4gICAgICAgIHRyaWdnZXI6IFwicmVmdXNhbFwiLFxuICAgICAgICBmcm9tTW9kZWw6IHByZXZpb3VzTW9kZWwsXG4gICAgICAgIHRvTW9kZWw6IGNhbm9uaWNhbE1vZGVsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHByZXZpb3VzTW9kZWwgPSBjYW5vbmljYWxNb2RlbDtcbiAgICBzdGF0ZS5zZXJ2ZWRNb2RlbCA9IGNhbm9uaWNhbE1vZGVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJvdXRpbmdGcm9tTWVzc2FnZShcbiAgbWVzc2FnZTogUmVzcG9uc2VJdGVtIHwgbnVsbCxcbiAgc3RhdGU6IENsYXVkZVN0cmVhbUpzb25TdGF0ZSB8IHVuZGVmaW5lZCxcbik6IHZvaWQge1xuICBpZiAoIXN0YXRlIHx8ICFtZXNzYWdlKSByZXR1cm47XG4gIGNvbnN0IG1vZGVsID0gb3B0aW9uYWxTdHJpbmcobWVzc2FnZS5tb2RlbCk7XG4gIGNvbnN0IGNhbm9uaWNhbE1vZGVsID0gbW9kZWwgPyBjYW5vbmljYWxFdmVudE1vZGVsKG1vZGVsKSA6IHVuZGVmaW5lZDtcbiAgaWYgKGNhbm9uaWNhbE1vZGVsKSBzdGF0ZS5zZXJ2ZWRNb2RlbCA9IGNhbm9uaWNhbE1vZGVsO1xuICBjb25zdCBzdG9wUmVhc29uID0gb3B0aW9uYWxTdHJpbmcobWVzc2FnZS5zdG9wX3JlYXNvbik7XG4gIGlmIChzdG9wUmVhc29uKSB7XG4gICAgc3RhdGUuc3RvcFJlYXNvbiA9IHN0b3BSZWFzb247XG4gICAgaWYgKHN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gdHJ1ZTtcbiAgICBlbHNlIGlmIChzdGF0ZS5tb2RlbEZhbGxiYWNrcz8uc29tZSgoZmFsbGJhY2spID0+IGZhbGxiYWNrLnRvTW9kZWwgPT09IGNhbm9uaWNhbE1vZGVsKSkge1xuICAgICAgc3RhdGUucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3BEZXRhaWxzID0gYXNPYmplY3QobWVzc2FnZS5zdG9wX2RldGFpbHMpO1xuICBpZiAoc3RvcERldGFpbHM/LnR5cGUgPT09IFwicmVmdXNhbFwiIHx8IHN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSB7XG4gICAgc3RhdGUucmVmdXNhbCA9IHtcbiAgICAgIGNhdGVnb3J5OiBvcHRpb25hbFN0cmluZyhzdG9wRGV0YWlscz8uY2F0ZWdvcnkpLFxuICAgICAgZXhwbGFuYXRpb246IG9wdGlvbmFsU3RyaW5nKHN0b3BEZXRhaWxzPy5leHBsYW5hdGlvbiksXG4gICAgfTtcbiAgfVxuICB1cGRhdGVSb3V0aW5nRnJvbVVzYWdlKGFzT2JqZWN0KG1lc3NhZ2UudXNhZ2UpLCBzdGF0ZSk7XG59XG5cbi8vIFByb2Nlc3NlcyBvbmUgQ2xhdWRlIHN0ZG91dCBKU09OTCBsaW5lLiBSZXR1cm5zIGZpbmFsIHJlc3VsdCBvbiByZXN1bHQgZXZlbnQuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlU3RyZWFtSnNvbkxpbmUoXG4gIGxpbmU6IHN0cmluZyxcbiAgb25EZWx0YTogKHRleHQ6IHN0cmluZykgPT4gdm9pZCxcbiAgb3B0cz86IHsgc3RydWN0dXJlZE91dHB1dD86IGJvb2xlYW47IHN0YXRlPzogQ2xhdWRlU3RyZWFtSnNvblN0YXRlIH0sXG4pOiBDbGF1ZGVTdHJlYW1SZXN1bHQgfCBudWxsIHtcbiAgY29uc3Qgc3RydWN0dXJlZE91dHB1dCA9IG9wdHM/LnN0cnVjdHVyZWRPdXRwdXQgPz8gZmFsc2U7XG4gIGNvbnN0IHN0YXRlID0gb3B0cz8uc3RhdGU7XG4gIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gbnVsbDtcblxuICBsZXQgajogeyBba2V5OiBzdHJpbmddOiBKc29uVmFsdWUgfCB1bmRlZmluZWQgfTtcbiAgdHJ5IHtcbiAgICBqID0gSlNPTi5wYXJzZSh0cmltbWVkKSBhcyB7IFtrZXk6IHN0cmluZ106IEpzb25WYWx1ZSB8IHVuZGVmaW5lZCB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChqLnR5cGUgPT09IFwic3RyZWFtX2V2ZW50XCIpIHtcbiAgICBjb25zdCBldmVudCA9IGFzT2JqZWN0KGouZXZlbnQpO1xuICAgIGlmIChldmVudD8udHlwZSA9PT0gXCJtZXNzYWdlX3N0YXJ0XCIpIHtcbiAgICAgIHVwZGF0ZVJvdXRpbmdGcm9tTWVzc2FnZShhc09iamVjdChldmVudC5tZXNzYWdlKSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnR5cGUgPT09IFwibWVzc2FnZV9kZWx0YVwiKSB7XG4gICAgICBjb25zdCBkZWx0YSA9IGFzT2JqZWN0KGV2ZW50LmRlbHRhKTtcbiAgICAgIGNvbnN0IHN0b3BSZWFzb24gPSBvcHRpb25hbFN0cmluZyhkZWx0YT8uc3RvcF9yZWFzb24pO1xuICAgICAgaWYgKHN0YXRlICYmIHN0b3BSZWFzb24pIHtcbiAgICAgICAgc3RhdGUuc3RvcFJlYXNvbiA9IHN0b3BSZWFzb247XG4gICAgICAgIGlmIChzdG9wUmVhc29uID09PSBcInJlZnVzYWxcIikgc3RhdGUucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSBcImNvbnRlbnRfYmxvY2tfZGVsdGFcIikge1xuICAgICAgY29uc3QgZGVsdGEgPSBhc09iamVjdChldmVudC5kZWx0YSk7XG4gICAgICBpZiAoZGVsdGEpIHtcbiAgICAgICAgaWYgKHN0cnVjdHVyZWRPdXRwdXQpIHtcbiAgICAgICAgICBpZiAoZGVsdGEudHlwZSA9PT0gXCJpbnB1dF9qc29uX2RlbHRhXCIgJiYgdHlwZW9mIGRlbHRhLnBhcnRpYWxfanNvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgb25EZWx0YShkZWx0YS5wYXJ0aWFsX2pzb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZGVsdGEudHlwZSA9PT0gXCJ0ZXh0X2RlbHRhXCIgJiYgdHlwZW9mIGRlbHRhLnRleHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIG9uRGVsdGEoZGVsdGEudGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGoudHlwZSA9PT0gXCJzeXN0ZW1cIikge1xuICAgIGNvbnN0IHN1YnR5cGUgPSBvcHRpb25hbFN0cmluZyhqLnN1YnR5cGUpO1xuICAgIGlmIChzdWJ0eXBlID09PSBcIm1vZGVsX3JlZnVzYWxfZmFsbGJhY2tcIikge1xuICAgICAgY29uc3QgZnJvbU1vZGVsID0gb3B0aW9uYWxTdHJpbmcoai5vcmlnaW5hbE1vZGVsKSA/PyBvcHRpb25hbFN0cmluZyhqLm9yaWdpbmFsX21vZGVsKTtcbiAgICAgIGNvbnN0IHRvTW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLmZhbGxiYWNrTW9kZWwpID8/IG9wdGlvbmFsU3RyaW5nKGouZmFsbGJhY2tfbW9kZWwpO1xuICAgICAgaWYgKGZyb21Nb2RlbCAmJiB0b01vZGVsKSB7XG4gICAgICAgIHJlY29yZEZhbGxiYWNrKHN0YXRlLCB7XG4gICAgICAgICAgdHJpZ2dlcjogXCJyZWZ1c2FsXCIsXG4gICAgICAgICAgZnJvbU1vZGVsLFxuICAgICAgICAgIHRvTW9kZWwsXG4gICAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpX3JlZnVzYWxfY2F0ZWdvcnkpID8/XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9jYXRlZ29yeSksXG4gICAgICAgICAgZXhwbGFuYXRpb246XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxFeHBsYW5hdGlvbikgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGouYXBpX3JlZnVzYWxfZXhwbGFuYXRpb24pID8/XG4gICAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxFeHBsYW5hdGlvbikgPz9cbiAgICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9leHBsYW5hdGlvbiksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3VidHlwZSA9PT0gXCJtb2RlbF9yZWZ1c2FsX25vX2ZhbGxiYWNrXCIgJiYgc3RhdGUpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsTW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLm9yaWdpbmFsTW9kZWwpID8/IG9wdGlvbmFsU3RyaW5nKGoub3JpZ2luYWxfbW9kZWwpO1xuICAgICAgaWYgKG9yaWdpbmFsTW9kZWwpIHN0YXRlLnNlcnZlZE1vZGVsID0gY2Fub25pY2FsRXZlbnRNb2RlbChvcmlnaW5hbE1vZGVsKTtcbiAgICAgIHN0YXRlLnN0b3BSZWFzb24gPSBcInJlZnVzYWxcIjtcbiAgICAgIHN0YXRlLnJlZnVzYWxXaXRob3V0RmFsbGJhY2sgPSB0cnVlO1xuICAgICAgc3RhdGUucmVmdXNhbCA9IHtcbiAgICAgICAgY2F0ZWdvcnk6XG4gICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5hcGlSZWZ1c2FsQ2F0ZWdvcnkpID8/XG4gICAgICAgICAgb3B0aW9uYWxTdHJpbmcoai5hcGlfcmVmdXNhbF9jYXRlZ29yeSkgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxDYXRlZ29yeSkgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLnJlZnVzYWxfY2F0ZWdvcnkpLFxuICAgICAgICBleHBsYW5hdGlvbjpcbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaVJlZnVzYWxFeHBsYW5hdGlvbikgPz9cbiAgICAgICAgICBvcHRpb25hbFN0cmluZyhqLmFwaV9yZWZ1c2FsX2V4cGxhbmF0aW9uKSA/P1xuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbEV4cGxhbmF0aW9uKSA/P1xuICAgICAgICAgIG9wdGlvbmFsU3RyaW5nKGoucmVmdXNhbF9leHBsYW5hdGlvbiksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChqLnR5cGUgPT09IFwiYXNzaXN0YW50XCIpIHtcbiAgICB1cGRhdGVSb3V0aW5nRnJvbU1lc3NhZ2UoYXNPYmplY3Qoai5tZXNzYWdlKSwgc3RhdGUpO1xuICAgIGlmIChzdHJ1Y3R1cmVkT3V0cHV0ICYmIHN0YXRlICYmIHN0YXRlLnN0cnVjdHVyZWRPdXRwdXRUZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBzdHJ1Y3R1cmVkT3V0cHV0VG9vbFVzZVRleHQoaik7XG4gICAgICBpZiAodGV4dCAhPT0gdW5kZWZpbmVkKSBzdGF0ZS5zdHJ1Y3R1cmVkT3V0cHV0VGV4dCA9IHRleHQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGoudHlwZSA9PT0gXCJyZXN1bHRcIikge1xuICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgY29uc3QgcHJlc2VydmVkU3RydWN0dXJlZE91dHB1dCA9IHN0cnVjdHVyZWRPdXRwdXQgPyBzdGF0ZT8uc3RydWN0dXJlZE91dHB1dFRleHQgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHByZXNlcnZlZFN0cnVjdHVyZWRPdXRwdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dCA9IHByZXNlcnZlZFN0cnVjdHVyZWRPdXRwdXQ7XG4gICAgfSBlbHNlIGlmIChqLnN0cnVjdHVyZWRfb3V0cHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShqLnN0cnVjdHVyZWRfb3V0cHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dCA9IHN0cmlwQ29kZUZlbmNlKHR5cGVvZiBqLnJlc3VsdCA9PT0gXCJzdHJpbmdcIiA/IGoucmVzdWx0IDogXCJcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcmF3VXNhZ2UgPSBhc09iamVjdChqLnVzYWdlKSA/PyB7fTtcbiAgICB1cGRhdGVSb3V0aW5nRnJvbVVzYWdlKHJhd1VzYWdlLCBzdGF0ZSk7XG4gICAgY29uc3QgcmVzdWx0TW9kZWwgPSBvcHRpb25hbFN0cmluZyhqLm1vZGVsKTtcbiAgICBpZiAoc3RhdGUgJiYgcmVzdWx0TW9kZWwgJiYgIXN0YXRlLnNlcnZlZE1vZGVsKSB7XG4gICAgICBzdGF0ZS5zZXJ2ZWRNb2RlbCA9IGNhbm9uaWNhbEV2ZW50TW9kZWwocmVzdWx0TW9kZWwpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRTdG9wUmVhc29uID0gb3B0aW9uYWxTdHJpbmcoai5zdG9wX3JlYXNvbik7XG4gICAgaWYgKHN0YXRlICYmIHJlc3VsdFN0b3BSZWFzb24pIHtcbiAgICAgIHN0YXRlLnN0b3BSZWFzb24gPSByZXN1bHRTdG9wUmVhc29uO1xuICAgICAgaWYgKHJlc3VsdFN0b3BSZWFzb24gPT09IFwicmVmdXNhbFwiKSBzdGF0ZS5yZWZ1c2FsV2l0aG91dEZhbGxiYWNrID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdXNhZ2UgPSB0b1VzYWdlQnJlYWtkb3duKHJhd1VzYWdlIGFzIENsYXVkZVVzYWdlKTtcbiAgICBjb25zdCBxdW90YUV4aGF1c3RlZCA9IHRleHQuc3RhcnRzV2l0aChcIllvdSd2ZSBoaXRcIik7XG4gICAgY29uc3Qgc3VidHlwZSA9IHR5cGVvZiBqLnN1YnR5cGUgPT09IFwic3RyaW5nXCIgPyBqLnN1YnR5cGUgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGVybWluYWxSZWFzb24gPSB0eXBlb2Ygai50ZXJtaW5hbF9yZWFzb24gPT09IFwic3RyaW5nXCIgPyBqLnRlcm1pbmFsX3JlYXNvbiA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFNPTi00OTU6IOu5hOygleyDgSDsooXro4woZXJyb3JfbWF4X3N0cnVjdHVyZWRfb3V0cHV0X3JldHJpZXMg65OxKeuKlCDsoJXsp4HtlZjqsowg7JeQ65+s66GcIOyymOumrO2VnOuLpC5cbiAgICAvLyBDQyBzdHJ1Y3R1cmVkIG91dHB1dCDsnYAgY29uc3RyYWluZWQgZGVjb2Rpbmcg7J20IOyVhOuLiOudvCBcInRvb2wgaW5wdXQg7IOd7ISxIO2bhCDsgqztm4QgQUpWIOqygOymnVwi7J206528XG4gICAgLy8g66qo64247J20IOqwgOuBlCBwbGFjZWhvbGRlcigkUEFSQU1FVEVSX05BTUUpwrfqsbDrtoAoXCJqdXN0IGtpZGRpbmdcIinCt+2VhOuTnCDriITrnb0oYWR2YW5jZSkg6rCZ7J2AIOuwnOyekS9cbiAgICAvLyDrtojsmYTsoIQg7Lac66Cl7J2EIOuCuOuLpC4g7J2066W8IFwi6rGw7J2YIOunnuyVmOycvOuLiCDsgrTrpqzsnpBcIuqzoCDtnZjrpqzrqbQg7YG065287J207Ja47Yq4IOqygOymneyXkOyEnCDquajsp4DqsbDrgpgo7ZWE65OcIOuIhOudvSlcbiAgICAvLyDsk7DroIjquLDqsIAg7IOI7Ja0IOuCmOqwhOuLpCjsi6TsuKEgMTE2NzQvMTE2NzUpLiDslYzroKTsp4QgYmVzdCBwcmFjdGljZShyZWZ1c2FsL2RlZ2VuZXJhdGUgb3V0cHV0IOydgCDsgrTrpqzsp4BcbiAgICAvLyDrp5Dqs6AgZ3JhY2VmdWwgZXJyb3Ip64yA66GcLCBzdWJ0eXBlICE9IHN1Y2Nlc3Mg64qUIOq3uOuMgOuhnCDsl5Drn6zroZwg65GU64ukLiDtgbTrnbzsnbTslrjtirjqsIAg6re4IO2EtOydhCDsi6TtjKjroZxcbiAgICAvLyDri6Tro6jqsowg7ZWc64ukKOyKpO2KuOumvOydtOudvCDsnpDrj5kg7J6s7Iuc64+EIOyXhuydjCDigJQg7Iuc6rCEIDLrsLAg67Cp7KeAKS5cbiAgICBjb25zdCBpc0Vycm9yID1cbiAgICAgIGouaXNfZXJyb3IgPT09IHRydWUgfHxcbiAgICAgIGoudGVybWluYWxfcmVhc29uID09PSBcIm1vZGVsX2Vycm9yXCIgfHxcbiAgICAgIChzdWJ0eXBlICE9PSB1bmRlZmluZWQgJiYgc3VidHlwZSAhPT0gXCJzdWNjZXNzXCIpIHx8XG4gICAgICBzdGF0ZT8ucmVmdXNhbFdpdGhvdXRGYWxsYmFjayA9PT0gdHJ1ZTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZXh0LFxuICAgICAgdXNhZ2UsXG4gICAgICBkdXJhdGlvbk1zOiB0eXBlb2Ygai5kdXJhdGlvbl9tcyA9PT0gXCJudW1iZXJcIiA/IGouZHVyYXRpb25fbXMgOiAwLFxuICAgICAgY29zdFVzZDogdHlwZW9mIGoudG90YWxfY29zdF91c2QgPT09IFwibnVtYmVyXCIgPyBqLnRvdGFsX2Nvc3RfdXNkIDogMCxcbiAgICAgIHF1b3RhRXhoYXVzdGVkLFxuICAgICAgaXNFcnJvcixcbiAgICAgIHN1YnR5cGUsXG4gICAgICB0ZXJtaW5hbFJlYXNvbixcbiAgICAgIHNlcnZlZE1vZGVsOiBzdGF0ZT8uc2VydmVkTW9kZWwsXG4gICAgICBzdG9wUmVhc29uOiBzdGF0ZT8uc3RvcFJlYXNvbixcbiAgICAgIHJlZnVzYWw6IHN0YXRlPy5yZWZ1c2FsLFxuICAgICAgbW9kZWxGYWxsYmFja3M6IHN0YXRlPy5tb2RlbEZhbGxiYWNrcyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibWFwcGluZ3MiOiI7QUE0QkEsU0FBUyxnQkFBZ0IsT0FBaUM7Q0FDeEQsT0FBTyxNQUNKLFFBQVEsTUFBaUQsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUMzRSxLQUFLLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FDbEIsS0FBSyxJQUFJO0FBQ2Q7QUFFQSxTQUFTLFVBQVUsTUFBcUQ7Q0FDdEUsT0FBTyxDQUFDO0VBQUUs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
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import "../../../_virtual/_rolldown/runtime.js";
|
|
2
1
|
//#region src/utils/providers/common/credentials.ts
|
|
3
2
|
function getAccessToken(creds) {
|
|
4
3
|
return creds.accessToken;
|
|
@@ -19,4 +18,4 @@ function isOpenAICredentials(creds) {
|
|
|
19
18
|
//#endregion
|
|
20
19
|
export { getAccessToken, getExpiresAt, getRefreshToken, isAnthropicCredentials, isOpenAICredentials };
|
|
21
20
|
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbHMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vY3JlZGVudGlhbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgdHlwZSBPcGVuQUlDcmVkZW50aWFscyxcbiAgdHlwZSBUb2tlbkNyZWRlbnRpYWxzLFxufSBmcm9tIFwiLi4vLi4vLi4vYXBwbGljYXRpb24vdG9rZW4vdG9rZW4udHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuKGNyZWRzOiBUb2tlbkNyZWRlbnRpYWxzKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyZWRzLmFjY2Vzc1Rva2VuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVmcmVzaFRva2VuKGNyZWRzOiBUb2tlbkNyZWRlbnRpYWxzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNyZWRzLnJlZnJlc2hUb2tlbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV4cGlyZXNBdChjcmVkczogVG9rZW5DcmVkZW50aWFscyk6IG51bWJlciB7XG4gIGlmIChcImV4cGlyZXNBdFwiIGluIGNyZWRzKSByZXR1cm4gY3JlZHMuZXhwaXJlc0F0O1xuICByZXR1cm4gY3JlZHMuYWNjZXNzVG9rZW5FeHBpcmVzQXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FudGhyb3BpY0NyZWRlbnRpYWxzKGNyZWRzOiBUb2tlbkNyZWRlbnRpYWxzKTogY3JlZHMgaXMgQW50aHJvcGljQ3JlZGVudGlhbHMge1xuICByZXR1cm4gXCJhY2NvdW50VXVpZFwiIGluIGNyZWRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPcGVuQUlDcmVkZW50aWFscyhjcmVkczogVG9rZW5DcmVkZW50aWFscyk6IGNyZWRzIGlzIE9wZW5BSUNyZWRlbnRpYWxzIHtcbiAgcmV0dXJuIFwiYWNjb3VudElkXCIgaW4gY3JlZHM7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFNQSxTQUFnQixlQUFlLE9BQWlDO0NBQzlELE9BQU8sTUFBTTtBQUNmO0FBRUEsU0FBZ0IsZ0JBQWdCLE9BQTZDO0NBQzNFLE9BQU8sTUFBTTtBQUNmO0FBRUEsU0FBZ0IsYUFBYSxPQUFpQztDQUM1RCxJQUFJLGVBQWUsT0FBTyxPQUFPLE1BQU07Q0FDdkMsT0FBTyxNQUFNO0FBQ2Y7QUFFQSxTQUFnQix1QkFBdUIsT0FBd0Q7Q0FDN0YsT0FBTyxpQkFBaUI7QUFDMUI7QUFFQSxTQUFnQixvQkFBb0IsT0FBcUQ7Q0FDdkYsT0FBTyxlQUFlO0FBQ3hCIn0=
|