@dbx-tools/shared-genie 0.9.129 → 0.9.131

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.md CHANGED
@@ -19,8 +19,8 @@ Key features:
19
19
  - Runtime schemas for Genie messages, responses, spaces, attachments, and
20
20
  statuses, including fields observed on the live wire.
21
21
  - Forward-compatible Agent Mode SSE schemas plus a pure reducer that projects
22
- reasoning, SQL, Markdown output, structured table metadata, and terminal
23
- status into `GenieMessage`.
22
+ reasoning, SQL, Markdown output, statement ids, visualization metadata, and
23
+ terminal status into `GenieMessage`.
24
24
  - A flat `GenieChatEvent` vocabulary for thinking, SQL, rows, result, status,
25
25
  and error rendering.
26
26
  - Snapshot diff helpers that emit only newly observed semantic events.
@@ -53,8 +53,8 @@ const attachments = genieModel.GenieResponseSchema.parse(rawMessage);
53
53
  ```
54
54
 
55
55
  The schemas extend generated Databricks SDK Genie types with fields observed on
56
- the wire, including query thoughts, attachment discriminators, and serialized
57
- space data.
56
+ the wire, including query thoughts, visualization attachments, attachment
57
+ discriminators, and serialized space data.
58
58
 
59
59
  ## Handle Typed Chat Events
60
60
 
@@ -105,8 +105,8 @@ const kind = genieModel.detectAttachmentType(message.attachments?.[0]);
105
105
  ```
106
106
 
107
107
  `humanizeStatus()` is the shared display-label function. `detectAttachmentType()`
108
- lets consumers switch on `query`, `text`, or `suggested_questions` instead of
109
- probing optional fields.
108
+ lets consumers switch on `query`, `text`, `suggested_questions`, or `viz`
109
+ instead of probing optional fields.
110
110
 
111
111
  ## Event Model
112
112
 
@@ -141,7 +141,7 @@ The SDK itself is a dev dependency, so importing this package pulls in zod only.
141
141
  ## Modules
142
142
 
143
143
  - `agentMode` - forward-compatible zod schemas plus the pure Agent Mode event
144
- reducer and `GenieMessage` projector, including inline table metadata.
144
+ reducer and live/history `GenieMessage` projectors.
145
145
  - `genieModel` - Genie schemas, status helpers, attachment helpers, and event
146
146
  union schemas/types.
147
147
  - `event` - event detector factory, individual detectors, and
package/index.ts CHANGED
@@ -3,15 +3,15 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-genie";
6
- export const PACKAGE_VERSION = "0.9.129";
6
+ export const PACKAGE_VERSION = "0.9.131";
7
7
  export * as agentMode from "./src/agent-mode.ts";
8
8
  export * as dashboards from "./src/dashboards.ts";
9
9
  export * as event from "./src/event.ts";
10
10
  export * as genieModel from "./src/genie-model.ts";
11
- export { GenieAgentContentSchema, GenieAgentOutputItemSchema, GenieAgentResponseSchema, GenieAgentModeEventSchema, GenieAgentModeProjection } from "./src/agent-mode.ts";
12
- export type { GenieAgentOutputItem, GenieAgentResponse, GenieAgentModeEvent } from "./src/agent-mode.ts";
11
+ export { GenieAgentContentSchema, GenieAgentOutputItemSchema, GenieAgentConversationItemsSchema, GenieAgentResponseSchema, GenieAgentModeEventSchema, GenieAgentModeProjection } from "./src/agent-mode.ts";
12
+ export type { GenieAgentConversationItems, GenieAgentOutputItem, GenieAgentResponse, GenieAgentModeEvent } from "./src/agent-mode.ts";
13
13
  export { authorizationDetailsGrantRuleSchema, cronScheduleSchema, lifecycleStateSchema, dashboardViewSchema, deleteScheduleRequestSchema, deleteSubscriptionRequestSchema, genieSuggestedQuestionsAttachmentSchema, genieConversationSchema, genieConversationSummarySchema, genieCreateConversationMessageRequestSchema, genieDeleteConversationMessageRequestSchema, genieDeleteConversationRequestSchema, genieExecuteMessageAttachmentQueryRequestSchema, genieExecuteMessageQueryRequestSchema, genieFeedbackRatingSchema, genieGetConversationMessageRequestSchema, genieGetMessageAttachmentQueryResultRequestSchema, genieGetMessageQueryResultRequestSchema, genieGetMessageQueryResultResponseSchema, genieGetQueryResultByAttachmentRequestSchema, genieGetSpaceRequestSchema, genieListConversationMessagesRequestSchema, genieListConversationsRequestSchema, genieListConversationsResponseSchema, genieListSpacesRequestSchema, genieSpaceSchema, genieFeedbackSchema, resultSchema, messageStatusSchema, queryAttachmentParameterSchema, genieResultMetadataSchema, genieSendMessageFeedbackRequestSchema, genieStartConversationMessageRequestSchema, genieTrashSpaceRequestSchema, getDashboardRequestSchema, getPublishedDashboardRequestSchema, getPublishedDashboardTokenInfoRequestSchema, authorizationDetailsSchema, getScheduleRequestSchema, getSubscriptionRequestSchema, listDashboardsRequestSchema, dashboardSchema, listSchedulesRequestSchema, listSubscriptionsRequestSchema, messageErrorTypeSchema, migrateDashboardRequestSchema, publishRequestSchema, publishedDashboardSchema, schedulePauseStatusSchema, subscriptionSubscriberDestinationSchema, subscriptionSubscriberUserSchema, subscriberSchema, textAttachmentPurposeSchema, trashDashboardRequestSchema, unpublishDashboardRequestSchema, updateDashboardRequestSchema, scheduleSchema, createDashboardRequestSchema, createScheduleRequestSchema, subscriptionSchema, genieQueryAttachmentSchema, textAttachmentSchema, genieListSpacesResponseSchema, genieAttachmentSchema, messageErrorSchema, genieMessageSchema, getPublishedDashboardTokenInfoResponseSchema, listDashboardsResponseSchema, listSchedulesResponseSchema, listSubscriptionsResponseSchema, updateScheduleRequestSchema, createSubscriptionRequestSchema, genieListConversationMessagesResponseSchema, genieStartConversationResponseSchema } from "./src/dashboards.ts";
14
14
  export type { AuthorizationDetailsGrantRule, CronSchedule, LifecycleState, DashboardView, DeleteScheduleRequest, DeleteSubscriptionRequest, GenieSuggestedQuestionsAttachment, GenieConversation, GenieConversationSummary, GenieCreateConversationMessageRequest, GenieDeleteConversationMessageRequest, GenieDeleteConversationRequest, GenieExecuteMessageAttachmentQueryRequest, GenieExecuteMessageQueryRequest, GenieFeedbackRating, GenieGetConversationMessageRequest, GenieGetMessageAttachmentQueryResultRequest, GenieGetMessageQueryResultRequest, GenieGetMessageQueryResultResponse, GenieGetQueryResultByAttachmentRequest, GenieGetSpaceRequest, GenieListConversationMessagesRequest, GenieListConversationsRequest, GenieListConversationsResponse, GenieListSpacesRequest, GenieFeedback, Result, QueryAttachmentParameter, GenieResultMetadata, GenieSendMessageFeedbackRequest, GenieStartConversationMessageRequest, GenieTrashSpaceRequest, GetDashboardRequest, GetPublishedDashboardRequest, GetPublishedDashboardTokenInfoRequest, AuthorizationDetails, GetScheduleRequest, GetSubscriptionRequest, ListDashboardsRequest, Dashboard, ListSchedulesRequest, ListSubscriptionsRequest, MessageErrorType, MigrateDashboardRequest, PublishRequest, PublishedDashboard, SchedulePauseStatus, SubscriptionSubscriberDestination, SubscriptionSubscriberUser, Subscriber, TextAttachmentPurpose, TrashDashboardRequest, UnpublishDashboardRequest, UpdateDashboardRequest, Schedule, CreateDashboardRequest, CreateScheduleRequest, Subscription, TextAttachment, GenieListSpacesResponse, MessageError, GetPublishedDashboardTokenInfoResponse, ListDashboardsResponse, ListSchedulesResponse, ListSubscriptionsResponse, UpdateScheduleRequest, CreateSubscriptionRequest, GenieListConversationMessagesResponse, GenieStartConversationResponse } from "./src/dashboards.ts";
15
15
  export { detectStatus, detectAttachmentAdded, detectThinking, detectText, detectQuery, detectStatement, detectRows, detectSuggestedQuestions } from "./src/event.ts";
16
- export { MessageStatusSchema, GenieThoughtTypeSchema, GenieThoughtSchema, ATTACHMENT_TYPES, KnownAttachmentTypeSchema, AttachmentTypeSchema, GenieQueryAttachmentSchema, GenieTextAttachmentPurposeSchema, GenieTextAttachmentSchema, GenieAttachmentSchema, GenieMessageSchema, GenieResponseSchema, GenieSpaceSchema, TERMINAL_STATUSES, TerminalStatusSchema, GenieChatLocationSchema, QuestionEventSchema, MessageEventSchema, StatusEventSchema, AttachmentEventSchema, ThinkingEventSchema, TextEventSchema, QueryEventSchema, StatementEventSchema, RowsEventSchema, SuggestedQuestionsEventSchema, ResultEventSchema, GenieChatEventSchema } from "./src/genie-model.ts";
17
- export type { MessageStatus, GenieThoughtType, GenieThought, KnownAttachmentType, AttachmentType, GenieQueryAttachment, GenieTextAttachmentPurpose, GenieTextAttachment, GenieAttachment, GenieMessage, GenieResponse, GenieSpace, TerminalStatus, GenieChatLocation, QuestionEvent, MessageEvent, StatusEvent, AttachmentEvent, ThinkingEvent, TextEvent, QueryEvent, StatementEvent, RowsEvent, SuggestedQuestionsEvent, ResultEvent, GenieChatEvent, GenieChatEventType, GenieChatEventFields } from "./src/genie-model.ts";
16
+ export { MessageStatusSchema, GenieThoughtTypeSchema, GenieThoughtSchema, ATTACHMENT_TYPES, KnownAttachmentTypeSchema, AttachmentTypeSchema, GenieQueryAttachmentSchema, GenieTextAttachmentPurposeSchema, GenieTextAttachmentSchema, GenieVizAttachmentSchema, GenieAttachmentSchema, GenieMessageSchema, GenieResponseSchema, GenieSpaceSchema, TERMINAL_STATUSES, TerminalStatusSchema, GenieChatLocationSchema, QuestionEventSchema, MessageEventSchema, StatusEventSchema, AttachmentEventSchema, ThinkingEventSchema, TextEventSchema, QueryEventSchema, StatementEventSchema, RowsEventSchema, SuggestedQuestionsEventSchema, ResultEventSchema, GenieChatEventSchema } from "./src/genie-model.ts";
17
+ export type { MessageStatus, GenieThoughtType, GenieThought, KnownAttachmentType, AttachmentType, GenieQueryAttachment, GenieTextAttachmentPurpose, GenieTextAttachment, GenieVizAttachment, GenieAttachment, GenieMessage, GenieResponse, GenieSpace, TerminalStatus, GenieChatLocation, QuestionEvent, MessageEvent, StatusEvent, AttachmentEvent, ThinkingEvent, TextEvent, QueryEvent, StatementEvent, RowsEvent, SuggestedQuestionsEvent, ResultEvent, GenieChatEvent, GenieChatEventType, GenieChatEventFields } from "./src/genie-model.ts";
package/lib/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/shared-genie";
2
- export declare const PACKAGE_VERSION = "0.9.129";
2
+ export declare const PACKAGE_VERSION = "0.9.131";
3
3
  export * as agentMode from "./src/agent-mode.ts";
4
4
  export * as dashboards from "./src/dashboards.ts";
5
5
  export * as event from "./src/event.ts";
6
6
  export * as genieModel from "./src/genie-model.ts";
7
- export { GenieAgentContentSchema, GenieAgentOutputItemSchema, GenieAgentResponseSchema, GenieAgentModeEventSchema, GenieAgentModeProjection } from "./src/agent-mode.ts";
8
- export type { GenieAgentOutputItem, GenieAgentResponse, GenieAgentModeEvent } from "./src/agent-mode.ts";
7
+ export { GenieAgentContentSchema, GenieAgentOutputItemSchema, GenieAgentConversationItemsSchema, GenieAgentResponseSchema, GenieAgentModeEventSchema, GenieAgentModeProjection } from "./src/agent-mode.ts";
8
+ export type { GenieAgentConversationItems, GenieAgentOutputItem, GenieAgentResponse, GenieAgentModeEvent } from "./src/agent-mode.ts";
9
9
  export { authorizationDetailsGrantRuleSchema, cronScheduleSchema, lifecycleStateSchema, dashboardViewSchema, deleteScheduleRequestSchema, deleteSubscriptionRequestSchema, genieSuggestedQuestionsAttachmentSchema, genieConversationSchema, genieConversationSummarySchema, genieCreateConversationMessageRequestSchema, genieDeleteConversationMessageRequestSchema, genieDeleteConversationRequestSchema, genieExecuteMessageAttachmentQueryRequestSchema, genieExecuteMessageQueryRequestSchema, genieFeedbackRatingSchema, genieGetConversationMessageRequestSchema, genieGetMessageAttachmentQueryResultRequestSchema, genieGetMessageQueryResultRequestSchema, genieGetMessageQueryResultResponseSchema, genieGetQueryResultByAttachmentRequestSchema, genieGetSpaceRequestSchema, genieListConversationMessagesRequestSchema, genieListConversationsRequestSchema, genieListConversationsResponseSchema, genieListSpacesRequestSchema, genieSpaceSchema, genieFeedbackSchema, resultSchema, messageStatusSchema, queryAttachmentParameterSchema, genieResultMetadataSchema, genieSendMessageFeedbackRequestSchema, genieStartConversationMessageRequestSchema, genieTrashSpaceRequestSchema, getDashboardRequestSchema, getPublishedDashboardRequestSchema, getPublishedDashboardTokenInfoRequestSchema, authorizationDetailsSchema, getScheduleRequestSchema, getSubscriptionRequestSchema, listDashboardsRequestSchema, dashboardSchema, listSchedulesRequestSchema, listSubscriptionsRequestSchema, messageErrorTypeSchema, migrateDashboardRequestSchema, publishRequestSchema, publishedDashboardSchema, schedulePauseStatusSchema, subscriptionSubscriberDestinationSchema, subscriptionSubscriberUserSchema, subscriberSchema, textAttachmentPurposeSchema, trashDashboardRequestSchema, unpublishDashboardRequestSchema, updateDashboardRequestSchema, scheduleSchema, createDashboardRequestSchema, createScheduleRequestSchema, subscriptionSchema, genieQueryAttachmentSchema, textAttachmentSchema, genieListSpacesResponseSchema, genieAttachmentSchema, messageErrorSchema, genieMessageSchema, getPublishedDashboardTokenInfoResponseSchema, listDashboardsResponseSchema, listSchedulesResponseSchema, listSubscriptionsResponseSchema, updateScheduleRequestSchema, createSubscriptionRequestSchema, genieListConversationMessagesResponseSchema, genieStartConversationResponseSchema } from "./src/dashboards.ts";
10
10
  export type { AuthorizationDetailsGrantRule, CronSchedule, LifecycleState, DashboardView, DeleteScheduleRequest, DeleteSubscriptionRequest, GenieSuggestedQuestionsAttachment, GenieConversation, GenieConversationSummary, GenieCreateConversationMessageRequest, GenieDeleteConversationMessageRequest, GenieDeleteConversationRequest, GenieExecuteMessageAttachmentQueryRequest, GenieExecuteMessageQueryRequest, GenieFeedbackRating, GenieGetConversationMessageRequest, GenieGetMessageAttachmentQueryResultRequest, GenieGetMessageQueryResultRequest, GenieGetMessageQueryResultResponse, GenieGetQueryResultByAttachmentRequest, GenieGetSpaceRequest, GenieListConversationMessagesRequest, GenieListConversationsRequest, GenieListConversationsResponse, GenieListSpacesRequest, GenieFeedback, Result, QueryAttachmentParameter, GenieResultMetadata, GenieSendMessageFeedbackRequest, GenieStartConversationMessageRequest, GenieTrashSpaceRequest, GetDashboardRequest, GetPublishedDashboardRequest, GetPublishedDashboardTokenInfoRequest, AuthorizationDetails, GetScheduleRequest, GetSubscriptionRequest, ListDashboardsRequest, Dashboard, ListSchedulesRequest, ListSubscriptionsRequest, MessageErrorType, MigrateDashboardRequest, PublishRequest, PublishedDashboard, SchedulePauseStatus, SubscriptionSubscriberDestination, SubscriptionSubscriberUser, Subscriber, TextAttachmentPurpose, TrashDashboardRequest, UnpublishDashboardRequest, UpdateDashboardRequest, Schedule, CreateDashboardRequest, CreateScheduleRequest, Subscription, TextAttachment, GenieListSpacesResponse, MessageError, GetPublishedDashboardTokenInfoResponse, ListDashboardsResponse, ListSchedulesResponse, ListSubscriptionsResponse, UpdateScheduleRequest, CreateSubscriptionRequest, GenieListConversationMessagesResponse, GenieStartConversationResponse } from "./src/dashboards.ts";
11
11
  export { detectStatus, detectAttachmentAdded, detectThinking, detectText, detectQuery, detectStatement, detectRows, detectSuggestedQuestions } from "./src/event.ts";
12
- export { MessageStatusSchema, GenieThoughtTypeSchema, GenieThoughtSchema, ATTACHMENT_TYPES, KnownAttachmentTypeSchema, AttachmentTypeSchema, GenieQueryAttachmentSchema, GenieTextAttachmentPurposeSchema, GenieTextAttachmentSchema, GenieAttachmentSchema, GenieMessageSchema, GenieResponseSchema, GenieSpaceSchema, TERMINAL_STATUSES, TerminalStatusSchema, GenieChatLocationSchema, QuestionEventSchema, MessageEventSchema, StatusEventSchema, AttachmentEventSchema, ThinkingEventSchema, TextEventSchema, QueryEventSchema, StatementEventSchema, RowsEventSchema, SuggestedQuestionsEventSchema, ResultEventSchema, GenieChatEventSchema } from "./src/genie-model.ts";
13
- export type { MessageStatus, GenieThoughtType, GenieThought, KnownAttachmentType, AttachmentType, GenieQueryAttachment, GenieTextAttachmentPurpose, GenieTextAttachment, GenieAttachment, GenieMessage, GenieResponse, GenieSpace, TerminalStatus, GenieChatLocation, QuestionEvent, MessageEvent, StatusEvent, AttachmentEvent, ThinkingEvent, TextEvent, QueryEvent, StatementEvent, RowsEvent, SuggestedQuestionsEvent, ResultEvent, GenieChatEvent, GenieChatEventType, GenieChatEventFields } from "./src/genie-model.ts";
12
+ export { MessageStatusSchema, GenieThoughtTypeSchema, GenieThoughtSchema, ATTACHMENT_TYPES, KnownAttachmentTypeSchema, AttachmentTypeSchema, GenieQueryAttachmentSchema, GenieTextAttachmentPurposeSchema, GenieTextAttachmentSchema, GenieVizAttachmentSchema, GenieAttachmentSchema, GenieMessageSchema, GenieResponseSchema, GenieSpaceSchema, TERMINAL_STATUSES, TerminalStatusSchema, GenieChatLocationSchema, QuestionEventSchema, MessageEventSchema, StatusEventSchema, AttachmentEventSchema, ThinkingEventSchema, TextEventSchema, QueryEventSchema, StatementEventSchema, RowsEventSchema, SuggestedQuestionsEventSchema, ResultEventSchema, GenieChatEventSchema } from "./src/genie-model.ts";
13
+ export type { MessageStatus, GenieThoughtType, GenieThought, KnownAttachmentType, AttachmentType, GenieQueryAttachment, GenieTextAttachmentPurpose, GenieTextAttachment, GenieVizAttachment, GenieAttachment, GenieMessage, GenieResponse, GenieSpace, TerminalStatus, GenieChatLocation, QuestionEvent, MessageEvent, StatusEvent, AttachmentEvent, ThinkingEvent, TextEvent, QueryEvent, StatementEvent, RowsEvent, SuggestedQuestionsEvent, ResultEvent, GenieChatEvent, GenieChatEventType, GenieChatEventFields } from "./src/genie-model.ts";
package/lib/index.js CHANGED
@@ -2,13 +2,13 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/shared-genie";
5
- export const PACKAGE_VERSION = "0.9.129";
5
+ export const PACKAGE_VERSION = "0.9.131";
6
6
  export * as agentMode from "./src/agent-mode.js";
7
7
  export * as dashboards from "./src/dashboards.js";
8
8
  export * as event from "./src/event.js";
9
9
  export * as genieModel from "./src/genie-model.js";
10
- export { GenieAgentContentSchema, GenieAgentOutputItemSchema, GenieAgentResponseSchema, GenieAgentModeEventSchema, GenieAgentModeProjection } from "./src/agent-mode.js";
10
+ export { GenieAgentContentSchema, GenieAgentOutputItemSchema, GenieAgentConversationItemsSchema, GenieAgentResponseSchema, GenieAgentModeEventSchema, GenieAgentModeProjection } from "./src/agent-mode.js";
11
11
  export { authorizationDetailsGrantRuleSchema, cronScheduleSchema, lifecycleStateSchema, dashboardViewSchema, deleteScheduleRequestSchema, deleteSubscriptionRequestSchema, genieSuggestedQuestionsAttachmentSchema, genieConversationSchema, genieConversationSummarySchema, genieCreateConversationMessageRequestSchema, genieDeleteConversationMessageRequestSchema, genieDeleteConversationRequestSchema, genieExecuteMessageAttachmentQueryRequestSchema, genieExecuteMessageQueryRequestSchema, genieFeedbackRatingSchema, genieGetConversationMessageRequestSchema, genieGetMessageAttachmentQueryResultRequestSchema, genieGetMessageQueryResultRequestSchema, genieGetMessageQueryResultResponseSchema, genieGetQueryResultByAttachmentRequestSchema, genieGetSpaceRequestSchema, genieListConversationMessagesRequestSchema, genieListConversationsRequestSchema, genieListConversationsResponseSchema, genieListSpacesRequestSchema, genieSpaceSchema, genieFeedbackSchema, resultSchema, messageStatusSchema, queryAttachmentParameterSchema, genieResultMetadataSchema, genieSendMessageFeedbackRequestSchema, genieStartConversationMessageRequestSchema, genieTrashSpaceRequestSchema, getDashboardRequestSchema, getPublishedDashboardRequestSchema, getPublishedDashboardTokenInfoRequestSchema, authorizationDetailsSchema, getScheduleRequestSchema, getSubscriptionRequestSchema, listDashboardsRequestSchema, dashboardSchema, listSchedulesRequestSchema, listSubscriptionsRequestSchema, messageErrorTypeSchema, migrateDashboardRequestSchema, publishRequestSchema, publishedDashboardSchema, schedulePauseStatusSchema, subscriptionSubscriberDestinationSchema, subscriptionSubscriberUserSchema, subscriberSchema, textAttachmentPurposeSchema, trashDashboardRequestSchema, unpublishDashboardRequestSchema, updateDashboardRequestSchema, scheduleSchema, createDashboardRequestSchema, createScheduleRequestSchema, subscriptionSchema, genieQueryAttachmentSchema, textAttachmentSchema, genieListSpacesResponseSchema, genieAttachmentSchema, messageErrorSchema, genieMessageSchema, getPublishedDashboardTokenInfoResponseSchema, listDashboardsResponseSchema, listSchedulesResponseSchema, listSubscriptionsResponseSchema, updateScheduleRequestSchema, createSubscriptionRequestSchema, genieListConversationMessagesResponseSchema, genieStartConversationResponseSchema } from "./src/dashboards.js";
12
12
  export { detectStatus, detectAttachmentAdded, detectThinking, detectText, detectQuery, detectStatement, detectRows, detectSuggestedQuestions } from "./src/event.js";
13
- export { MessageStatusSchema, GenieThoughtTypeSchema, GenieThoughtSchema, ATTACHMENT_TYPES, KnownAttachmentTypeSchema, AttachmentTypeSchema, GenieQueryAttachmentSchema, GenieTextAttachmentPurposeSchema, GenieTextAttachmentSchema, GenieAttachmentSchema, GenieMessageSchema, GenieResponseSchema, GenieSpaceSchema, TERMINAL_STATUSES, TerminalStatusSchema, GenieChatLocationSchema, QuestionEventSchema, MessageEventSchema, StatusEventSchema, AttachmentEventSchema, ThinkingEventSchema, TextEventSchema, QueryEventSchema, StatementEventSchema, RowsEventSchema, SuggestedQuestionsEventSchema, ResultEventSchema, GenieChatEventSchema } from "./src/genie-model.js";
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx5QkFBeUIsQ0FBQztBQUM1RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekssT0FBTyxFQUFFLG1DQUFtQyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLCtCQUErQixFQUFFLHVDQUF1QyxFQUFFLHVCQUF1QixFQUFFLDhCQUE4QixFQUFFLDJDQUEyQyxFQUFFLDJDQUEyQyxFQUFFLG9DQUFvQyxFQUFFLCtDQUErQyxFQUFFLHFDQUFxQyxFQUFFLHlCQUF5QixFQUFFLHdDQUF3QyxFQUFFLGlEQUFpRCxFQUFFLHVDQUF1QyxFQUFFLHdDQUF3QyxFQUFFLDRDQUE0QyxFQUFFLDBCQUEwQixFQUFFLDBDQUEwQyxFQUFFLG1DQUFtQyxFQUFFLG9DQUFvQyxFQUFFLDRCQUE0QixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSw4QkFBOEIsRUFBRSx5QkFBeUIsRUFBRSxxQ0FBcUMsRUFBRSwwQ0FBMEMsRUFBRSw0QkFBNEIsRUFBRSx5QkFBeUIsRUFBRSxrQ0FBa0MsRUFBRSwyQ0FBMkMsRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxlQUFlLEVBQUUsMEJBQTBCLEVBQUUsOEJBQThCLEVBQUUsc0JBQXNCLEVBQUUsNkJBQTZCLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsdUNBQXVDLEVBQUUsZ0NBQWdDLEVBQUUsZ0JBQWdCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsK0JBQStCLEVBQUUsNEJBQTRCLEVBQUUsY0FBYyxFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLDRDQUE0QyxFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLCtCQUErQixFQUFFLDJCQUEyQixFQUFFLCtCQUErQixFQUFFLDJDQUEyQyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN3lFLE9BQU8sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JLLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxnQ0FBZ0MsRUFBRSx5QkFBeUIsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLDZCQUE2QixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEyOVwiO1xuZXhwb3J0ICogYXMgYWdlbnRNb2RlIGZyb20gXCIuL3NyYy9hZ2VudC1tb2RlLnRzXCI7XG5leHBvcnQgKiBhcyBkYXNoYm9hcmRzIGZyb20gXCIuL3NyYy9kYXNoYm9hcmRzLnRzXCI7XG5leHBvcnQgKiBhcyBldmVudCBmcm9tIFwiLi9zcmMvZXZlbnQudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllTW9kZWwgZnJvbSBcIi4vc3JjL2dlbmllLW1vZGVsLnRzXCI7XG5leHBvcnQgeyBHZW5pZUFnZW50Q29udGVudFNjaGVtYSwgR2VuaWVBZ2VudE91dHB1dEl0ZW1TY2hlbWEsIEdlbmllQWdlbnRSZXNwb25zZVNjaGVtYSwgR2VuaWVBZ2VudE1vZGVFdmVudFNjaGVtYSwgR2VuaWVBZ2VudE1vZGVQcm9qZWN0aW9uIH0gZnJvbSBcIi4vc3JjL2FnZW50LW1vZGUudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVBZ2VudE91dHB1dEl0ZW0sIEdlbmllQWdlbnRSZXNwb25zZSwgR2VuaWVBZ2VudE1vZGVFdmVudCB9IGZyb20gXCIuL3NyYy9hZ2VudC1tb2RlLnRzXCI7XG5leHBvcnQgeyBhdXRob3JpemF0aW9uRGV0YWlsc0dyYW50UnVsZVNjaGVtYSwgY3JvblNjaGVkdWxlU2NoZW1hLCBsaWZlY3ljbGVTdGF0ZVNjaGVtYSwgZGFzaGJvYXJkVmlld1NjaGVtYSwgZGVsZXRlU2NoZWR1bGVSZXF1ZXN0U2NoZW1hLCBkZWxldGVTdWJzY3JpcHRpb25SZXF1ZXN0U2NoZW1hLCBnZW5pZVN1Z2dlc3RlZFF1ZXN0aW9uc0F0dGFjaG1lbnRTY2hlbWEsIGdlbmllQ29udmVyc2F0aW9uU2NoZW1hLCBnZW5pZUNvbnZlcnNhdGlvblN1bW1hcnlTY2hlbWEsIGdlbmllQ3JlYXRlQ29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3RTY2hlbWEsIGdlbmllRGVsZXRlQ29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3RTY2hlbWEsIGdlbmllRGVsZXRlQ29udmVyc2F0aW9uUmVxdWVzdFNjaGVtYSwgZ2VuaWVFeGVjdXRlTWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlcXVlc3RTY2hlbWEsIGdlbmllRXhlY3V0ZU1lc3NhZ2VRdWVyeVJlcXVlc3RTY2hlbWEsIGdlbmllRmVlZGJhY2tSYXRpbmdTY2hlbWEsIGdlbmllR2V0Q29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3RTY2hlbWEsIGdlbmllR2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdFJlcXVlc3RTY2hlbWEsIGdlbmllR2V0TWVzc2FnZVF1ZXJ5UmVzdWx0UmVxdWVzdFNjaGVtYSwgZ2VuaWVHZXRNZXNzYWdlUXVlcnlSZXN1bHRSZXNwb25zZVNjaGVtYSwgZ2VuaWVHZXRRdWVyeVJlc3VsdEJ5QXR0YWNobWVudFJlcXVlc3RTY2hlbWEsIGdlbmllR2V0U3BhY2VSZXF1ZXN0U2NoZW1hLCBnZW5pZUxpc3RDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RTY2hlbWEsIGdlbmllTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0U2NoZW1hLCBnZW5pZUxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2VTY2hlbWEsIGdlbmllTGlzdFNwYWNlc1JlcXVlc3RTY2hlbWEsIGdlbmllU3BhY2VTY2hlbWEsIGdlbmllRmVlZGJhY2tTY2hlbWEsIHJlc3VsdFNjaGVtYSwgbWVzc2FnZVN0YXR1c1NjaGVtYSwgcXVlcnlBdHRhY2htZW50UGFyYW1ldGVyU2NoZW1hLCBnZW5pZVJlc3VsdE1ldGFkYXRhU2NoZW1hLCBnZW5pZVNlbmRNZXNzYWdlRmVlZGJhY2tSZXF1ZXN0U2NoZW1hLCBnZW5pZVN0YXJ0Q29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3RTY2hlbWEsIGdlbmllVHJhc2hTcGFjZVJlcXVlc3RTY2hlbWEsIGdldERhc2hib2FyZFJlcXVlc3RTY2hlbWEsIGdldFB1Ymxpc2hlZERhc2hib2FyZFJlcXVlc3RTY2hlbWEsIGdldFB1Ymxpc2hlZERhc2hib2FyZFRva2VuSW5mb1JlcXVlc3RTY2hlbWEsIGF1dGhvcml6YXRpb25EZXRhaWxzU2NoZW1hLCBnZXRTY2hlZHVsZVJlcXVlc3RTY2hlbWEsIGdldFN1YnNjcmlwdGlvblJlcXVlc3RTY2hlbWEsIGxpc3REYXNoYm9hcmRzUmVxdWVzdFNjaGVtYSwgZGFzaGJvYXJkU2NoZW1hLCBsaXN0U2NoZWR1bGVzUmVxdWVzdFNjaGVtYSwgbGlzdFN1YnNjcmlwdGlvbnNSZXF1ZXN0U2NoZW1hLCBtZXNzYWdlRXJyb3JUeXBlU2NoZW1hLCBtaWdyYXRlRGFzaGJvYXJkUmVxdWVzdFNjaGVtYSwgcHVibGlzaFJlcXVlc3RTY2hlbWEsIHB1Ymxpc2hlZERhc2hib2FyZFNjaGVtYSwgc2NoZWR1bGVQYXVzZVN0YXR1c1NjaGVtYSwgc3Vic2NyaXB0aW9uU3Vic2NyaWJlckRlc3RpbmF0aW9uU2NoZW1hLCBzdWJzY3JpcHRpb25TdWJzY3JpYmVyVXNlclNjaGVtYSwgc3Vic2NyaWJlclNjaGVtYSwgdGV4dEF0dGFjaG1lbnRQdXJwb3NlU2NoZW1hLCB0cmFzaERhc2hib2FyZFJlcXVlc3RTY2hlbWEsIHVucHVibGlzaERhc2hib2FyZFJlcXVlc3RTY2hlbWEsIHVwZGF0ZURhc2hib2FyZFJlcXVlc3RTY2hlbWEsIHNjaGVkdWxlU2NoZW1hLCBjcmVhdGVEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hLCBjcmVhdGVTY2hlZHVsZVJlcXVlc3RTY2hlbWEsIHN1YnNjcmlwdGlvblNjaGVtYSwgZ2VuaWVRdWVyeUF0dGFjaG1lbnRTY2hlbWEsIHRleHRBdHRhY2htZW50U2NoZW1hLCBnZW5pZUxpc3RTcGFjZXNSZXNwb25zZVNjaGVtYSwgZ2VuaWVBdHRhY2htZW50U2NoZW1hLCBtZXNzYWdlRXJyb3JTY2hlbWEsIGdlbmllTWVzc2FnZVNjaGVtYSwgZ2V0UHVibGlzaGVkRGFzaGJvYXJkVG9rZW5JbmZvUmVzcG9uc2VTY2hlbWEsIGxpc3REYXNoYm9hcmRzUmVzcG9uc2VTY2hlbWEsIGxpc3RTY2hlZHVsZXNSZXNwb25zZVNjaGVtYSwgbGlzdFN1YnNjcmlwdGlvbnNSZXNwb25zZVNjaGVtYSwgdXBkYXRlU2NoZWR1bGVSZXF1ZXN0U2NoZW1hLCBjcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0U2NoZW1hLCBnZW5pZUxpc3RDb252ZXJzYXRpb25NZXNzYWdlc1Jlc3BvbnNlU2NoZW1hLCBnZW5pZVN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2VTY2hlbWEgfSBmcm9tIFwiLi9zcmMvZGFzaGJvYXJkcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRob3JpemF0aW9uRGV0YWlsc0dyYW50UnVsZSwgQ3JvblNjaGVkdWxlLCBMaWZlY3ljbGVTdGF0ZSwgRGFzaGJvYXJkVmlldywgRGVsZXRlU2NoZWR1bGVSZXF1ZXN0LCBEZWxldGVTdWJzY3JpcHRpb25SZXF1ZXN0LCBHZW5pZVN1Z2dlc3RlZFF1ZXN0aW9uc0F0dGFjaG1lbnQsIEdlbmllQ29udmVyc2F0aW9uLCBHZW5pZUNvbnZlcnNhdGlvblN1bW1hcnksIEdlbmllQ3JlYXRlQ29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3QsIEdlbmllRGVsZXRlQ29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3QsIEdlbmllRGVsZXRlQ29udmVyc2F0aW9uUmVxdWVzdCwgR2VuaWVFeGVjdXRlTWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlcXVlc3QsIEdlbmllRXhlY3V0ZU1lc3NhZ2VRdWVyeVJlcXVlc3QsIEdlbmllRmVlZGJhY2tSYXRpbmcsIEdlbmllR2V0Q29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3QsIEdlbmllR2V0TWVzc2FnZUF0dGFjaG1lbnRRdWVyeVJlc3VsdFJlcXVlc3QsIEdlbmllR2V0TWVzc2FnZVF1ZXJ5UmVzdWx0UmVxdWVzdCwgR2VuaWVHZXRNZXNzYWdlUXVlcnlSZXN1bHRSZXNwb25zZSwgR2VuaWVHZXRRdWVyeVJlc3VsdEJ5QXR0YWNobWVudFJlcXVlc3QsIEdlbmllR2V0U3BhY2VSZXF1ZXN0LCBHZW5pZUxpc3RDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3QsIEdlbmllTGlzdENvbnZlcnNhdGlvbnNSZXF1ZXN0LCBHZW5pZUxpc3RDb252ZXJzYXRpb25zUmVzcG9uc2UsIEdlbmllTGlzdFNwYWNlc1JlcXVlc3QsIEdlbmllRmVlZGJhY2ssIFJlc3VsdCwgUXVlcnlBdHRhY2htZW50UGFyYW1ldGVyLCBHZW5pZVJlc3VsdE1ldGFkYXRhLCBHZW5pZVNlbmRNZXNzYWdlRmVlZGJhY2tSZXF1ZXN0LCBHZW5pZVN0YXJ0Q29udmVyc2F0aW9uTWVzc2FnZVJlcXVlc3QsIEdlbmllVHJhc2hTcGFjZVJlcXVlc3QsIEdldERhc2hib2FyZFJlcXVlc3QsIEdldFB1Ymxpc2hlZERhc2hib2FyZFJlcXVlc3QsIEdldFB1Ymxpc2hlZERhc2hib2FyZFRva2VuSW5mb1JlcXVlc3QsIEF1dGhvcml6YXRpb25EZXRhaWxzLCBHZXRTY2hlZHVsZVJlcXVlc3QsIEdldFN1YnNjcmlwdGlvblJlcXVlc3QsIExpc3REYXNoYm9hcmRzUmVxdWVzdCwgRGFzaGJvYXJkLCBMaXN0U2NoZWR1bGVzUmVxdWVzdCwgTGlzdFN1YnNjcmlwdGlvbnNSZXF1ZXN0LCBNZXNzYWdlRXJyb3JUeXBlLCBNaWdyYXRlRGFzaGJvYXJkUmVxdWVzdCwgUHVibGlzaFJlcXVlc3QsIFB1Ymxpc2hlZERhc2hib2FyZCwgU2NoZWR1bGVQYXVzZVN0YXR1cywgU3Vic2NyaXB0aW9uU3Vic2NyaWJlckRlc3RpbmF0aW9uLCBTdWJzY3JpcHRpb25TdWJzY3JpYmVyVXNlciwgU3Vic2NyaWJlciwgVGV4dEF0dGFjaG1lbnRQdXJwb3NlLCBUcmFzaERhc2hib2FyZFJlcXVlc3QsIFVucHVibGlzaERhc2hib2FyZFJlcXVlc3QsIFVwZGF0ZURhc2hib2FyZFJlcXVlc3QsIFNjaGVkdWxlLCBDcmVhdGVEYXNoYm9hcmRSZXF1ZXN0LCBDcmVhdGVTY2hlZHVsZVJlcXVlc3QsIFN1YnNjcmlwdGlvbiwgVGV4dEF0dGFjaG1lbnQsIEdlbmllTGlzdFNwYWNlc1Jlc3BvbnNlLCBNZXNzYWdlRXJyb3IsIEdldFB1Ymxpc2hlZERhc2hib2FyZFRva2VuSW5mb1Jlc3BvbnNlLCBMaXN0RGFzaGJvYXJkc1Jlc3BvbnNlLCBMaXN0U2NoZWR1bGVzUmVzcG9uc2UsIExpc3RTdWJzY3JpcHRpb25zUmVzcG9uc2UsIFVwZGF0ZVNjaGVkdWxlUmVxdWVzdCwgQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdCwgR2VuaWVMaXN0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXNwb25zZSwgR2VuaWVTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlIH0gZnJvbSBcIi4vc3JjL2Rhc2hib2FyZHMudHNcIjtcbmV4cG9ydCB7IGRldGVjdFN0YXR1cywgZGV0ZWN0QXR0YWNobWVudEFkZGVkLCBkZXRlY3RUaGlua2luZywgZGV0ZWN0VGV4dCwgZGV0ZWN0UXVlcnksIGRldGVjdFN0YXRlbWVudCwgZGV0ZWN0Um93cywgZGV0ZWN0U3VnZ2VzdGVkUXVlc3Rpb25zIH0gZnJvbSBcIi4vc3JjL2V2ZW50LnRzXCI7XG5leHBvcnQgeyBNZXNzYWdlU3RhdHVzU2NoZW1hLCBHZW5pZVRob3VnaHRUeXBlU2NoZW1hLCBHZW5pZVRob3VnaHRTY2hlbWEsIEFUVEFDSE1FTlRfVFlQRVMsIEtub3duQXR0YWNobWVudFR5cGVTY2hlbWEsIEF0dGFjaG1lbnRUeXBlU2NoZW1hLCBHZW5pZVF1ZXJ5QXR0YWNobWVudFNjaGVtYSwgR2VuaWVUZXh0QXR0YWNobWVudFB1cnBvc2VTY2hlbWEsIEdlbmllVGV4dEF0dGFjaG1lbnRTY2hlbWEsIEdlbmllQXR0YWNobWVudFNjaGVtYSwgR2VuaWVNZXNzYWdlU2NoZW1hLCBHZW5pZVJlc3BvbnNlU2NoZW1hLCBHZW5pZVNwYWNlU2NoZW1hLCBURVJNSU5BTF9TVEFUVVNFUywgVGVybWluYWxTdGF0dXNTY2hlbWEsIEdlbmllQ2hhdExvY2F0aW9uU2NoZW1hLCBRdWVzdGlvbkV2ZW50U2NoZW1hLCBNZXNzYWdlRXZlbnRTY2hlbWEsIFN0YXR1c0V2ZW50U2NoZW1hLCBBdHRhY2htZW50RXZlbnRTY2hlbWEsIFRoaW5raW5nRXZlbnRTY2hlbWEsIFRleHRFdmVudFNjaGVtYSwgUXVlcnlFdmVudFNjaGVtYSwgU3RhdGVtZW50RXZlbnRTY2hlbWEsIFJvd3NFdmVudFNjaGVtYSwgU3VnZ2VzdGVkUXVlc3Rpb25zRXZlbnRTY2hlbWEsIFJlc3VsdEV2ZW50U2NoZW1hLCBHZW5pZUNoYXRFdmVudFNjaGVtYSB9IGZyb20gXCIuL3NyYy9nZW5pZS1tb2RlbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZXNzYWdlU3RhdHVzLCBHZW5pZVRob3VnaHRUeXBlLCBHZW5pZVRob3VnaHQsIEtub3duQXR0YWNobWVudFR5cGUsIEF0dGFjaG1lbnRUeXBlLCBHZW5pZVF1ZXJ5QXR0YWNobWVudCwgR2VuaWVUZXh0QXR0YWNobWVudFB1cnBvc2UsIEdlbmllVGV4dEF0dGFjaG1lbnQsIEdlbmllQXR0YWNobWVudCwgR2VuaWVNZXNzYWdlLCBHZW5pZVJlc3BvbnNlLCBHZW5pZVNwYWNlLCBUZXJtaW5hbFN0YXR1cywgR2VuaWVDaGF0TG9jYXRpb24sIFF1ZXN0aW9uRXZlbnQsIE1lc3NhZ2VFdmVudCwgU3RhdHVzRXZlbnQsIEF0dGFjaG1lbnRFdmVudCwgVGhpbmtpbmdFdmVudCwgVGV4dEV2ZW50LCBRdWVyeUV2ZW50LCBTdGF0ZW1lbnRFdmVudCwgUm93c0V2ZW50LCBTdWdnZXN0ZWRRdWVzdGlvbnNFdmVudCwgUmVzdWx0RXZlbnQsIEdlbmllQ2hhdEV2ZW50LCBHZW5pZUNoYXRFdmVudFR5cGUsIEdlbmllQ2hhdEV2ZW50RmllbGRzIH0gZnJvbSBcIi4vc3JjL2dlbmllLW1vZGVsLnRzXCI7XG4iXX0=
13
+ export { MessageStatusSchema, GenieThoughtTypeSchema, GenieThoughtSchema, ATTACHMENT_TYPES, KnownAttachmentTypeSchema, AttachmentTypeSchema, GenieQueryAttachmentSchema, GenieTextAttachmentPurposeSchema, GenieTextAttachmentSchema, GenieVizAttachmentSchema, GenieAttachmentSchema, GenieMessageSchema, GenieResponseSchema, GenieSpaceSchema, TERMINAL_STATUSES, TerminalStatusSchema, GenieChatLocationSchema, QuestionEventSchema, MessageEventSchema, StatusEventSchema, AttachmentEventSchema, ThinkingEventSchema, TextEventSchema, QueryEventSchema, StatementEventSchema, RowsEventSchema, SuggestedQuestionsEventSchema, ResultEventSchema, GenieChatEventSchema } from "./src/genie-model.js";
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx5QkFBeUIsQ0FBQztBQUM1RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLDBCQUEwQixFQUFFLGlDQUFpQyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFNU0sT0FBTyxFQUFFLG1DQUFtQyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLCtCQUErQixFQUFFLHVDQUF1QyxFQUFFLHVCQUF1QixFQUFFLDhCQUE4QixFQUFFLDJDQUEyQyxFQUFFLDJDQUEyQyxFQUFFLG9DQUFvQyxFQUFFLCtDQUErQyxFQUFFLHFDQUFxQyxFQUFFLHlCQUF5QixFQUFFLHdDQUF3QyxFQUFFLGlEQUFpRCxFQUFFLHVDQUF1QyxFQUFFLHdDQUF3QyxFQUFFLDRDQUE0QyxFQUFFLDBCQUEwQixFQUFFLDBDQUEwQyxFQUFFLG1DQUFtQyxFQUFFLG9DQUFvQyxFQUFFLDRCQUE0QixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSw4QkFBOEIsRUFBRSx5QkFBeUIsRUFBRSxxQ0FBcUMsRUFBRSwwQ0FBMEMsRUFBRSw0QkFBNEIsRUFBRSx5QkFBeUIsRUFBRSxrQ0FBa0MsRUFBRSwyQ0FBMkMsRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxlQUFlLEVBQUUsMEJBQTBCLEVBQUUsOEJBQThCLEVBQUUsc0JBQXNCLEVBQUUsNkJBQTZCLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsdUNBQXVDLEVBQUUsZ0NBQWdDLEVBQUUsZ0JBQWdCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsK0JBQStCLEVBQUUsNEJBQTRCLEVBQUUsY0FBYyxFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLDRDQUE0QyxFQUFFLDRCQUE0QixFQUFFLDJCQUEyQixFQUFFLCtCQUErQixFQUFFLDJCQUEyQixFQUFFLCtCQUErQixFQUFFLDJDQUEyQyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN3lFLE9BQU8sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JLLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxnQ0FBZ0MsRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLDZCQUE2QixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEzMVwiO1xuZXhwb3J0ICogYXMgYWdlbnRNb2RlIGZyb20gXCIuL3NyYy9hZ2VudC1tb2RlLnRzXCI7XG5leHBvcnQgKiBhcyBkYXNoYm9hcmRzIGZyb20gXCIuL3NyYy9kYXNoYm9hcmRzLnRzXCI7XG5leHBvcnQgKiBhcyBldmVudCBmcm9tIFwiLi9zcmMvZXZlbnQudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllTW9kZWwgZnJvbSBcIi4vc3JjL2dlbmllLW1vZGVsLnRzXCI7XG5leHBvcnQgeyBHZW5pZUFnZW50Q29udGVudFNjaGVtYSwgR2VuaWVBZ2VudE91dHB1dEl0ZW1TY2hlbWEsIEdlbmllQWdlbnRDb252ZXJzYXRpb25JdGVtc1NjaGVtYSwgR2VuaWVBZ2VudFJlc3BvbnNlU2NoZW1hLCBHZW5pZUFnZW50TW9kZUV2ZW50U2NoZW1hLCBHZW5pZUFnZW50TW9kZVByb2plY3Rpb24gfSBmcm9tIFwiLi9zcmMvYWdlbnQtbW9kZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZUFnZW50Q29udmVyc2F0aW9uSXRlbXMsIEdlbmllQWdlbnRPdXRwdXRJdGVtLCBHZW5pZUFnZW50UmVzcG9uc2UsIEdlbmllQWdlbnRNb2RlRXZlbnQgfSBmcm9tIFwiLi9zcmMvYWdlbnQtbW9kZS50c1wiO1xuZXhwb3J0IHsgYXV0aG9yaXphdGlvbkRldGFpbHNHcmFudFJ1bGVTY2hlbWEsIGNyb25TY2hlZHVsZVNjaGVtYSwgbGlmZWN5Y2xlU3RhdGVTY2hlbWEsIGRhc2hib2FyZFZpZXdTY2hlbWEsIGRlbGV0ZVNjaGVkdWxlUmVxdWVzdFNjaGVtYSwgZGVsZXRlU3Vic2NyaXB0aW9uUmVxdWVzdFNjaGVtYSwgZ2VuaWVTdWdnZXN0ZWRRdWVzdGlvbnNBdHRhY2htZW50U2NoZW1hLCBnZW5pZUNvbnZlcnNhdGlvblNjaGVtYSwgZ2VuaWVDb252ZXJzYXRpb25TdW1tYXJ5U2NoZW1hLCBnZW5pZUNyZWF0ZUNvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hLCBnZW5pZURlbGV0ZUNvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hLCBnZW5pZURlbGV0ZUNvbnZlcnNhdGlvblJlcXVlc3RTY2hlbWEsIGdlbmllRXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXF1ZXN0U2NoZW1hLCBnZW5pZUV4ZWN1dGVNZXNzYWdlUXVlcnlSZXF1ZXN0U2NoZW1hLCBnZW5pZUZlZWRiYWNrUmF0aW5nU2NoZW1hLCBnZW5pZUdldENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hLCBnZW5pZUdldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRSZXF1ZXN0U2NoZW1hLCBnZW5pZUdldE1lc3NhZ2VRdWVyeVJlc3VsdFJlcXVlc3RTY2hlbWEsIGdlbmllR2V0TWVzc2FnZVF1ZXJ5UmVzdWx0UmVzcG9uc2VTY2hlbWEsIGdlbmllR2V0UXVlcnlSZXN1bHRCeUF0dGFjaG1lbnRSZXF1ZXN0U2NoZW1hLCBnZW5pZUdldFNwYWNlUmVxdWVzdFNjaGVtYSwgZ2VuaWVMaXN0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0U2NoZW1hLCBnZW5pZUxpc3RDb252ZXJzYXRpb25zUmVxdWVzdFNjaGVtYSwgZ2VuaWVMaXN0Q29udmVyc2F0aW9uc1Jlc3BvbnNlU2NoZW1hLCBnZW5pZUxpc3RTcGFjZXNSZXF1ZXN0U2NoZW1hLCBnZW5pZVNwYWNlU2NoZW1hLCBnZW5pZUZlZWRiYWNrU2NoZW1hLCByZXN1bHRTY2hlbWEsIG1lc3NhZ2VTdGF0dXNTY2hlbWEsIHF1ZXJ5QXR0YWNobWVudFBhcmFtZXRlclNjaGVtYSwgZ2VuaWVSZXN1bHRNZXRhZGF0YVNjaGVtYSwgZ2VuaWVTZW5kTWVzc2FnZUZlZWRiYWNrUmVxdWVzdFNjaGVtYSwgZ2VuaWVTdGFydENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0U2NoZW1hLCBnZW5pZVRyYXNoU3BhY2VSZXF1ZXN0U2NoZW1hLCBnZXREYXNoYm9hcmRSZXF1ZXN0U2NoZW1hLCBnZXRQdWJsaXNoZWREYXNoYm9hcmRSZXF1ZXN0U2NoZW1hLCBnZXRQdWJsaXNoZWREYXNoYm9hcmRUb2tlbkluZm9SZXF1ZXN0U2NoZW1hLCBhdXRob3JpemF0aW9uRGV0YWlsc1NjaGVtYSwgZ2V0U2NoZWR1bGVSZXF1ZXN0U2NoZW1hLCBnZXRTdWJzY3JpcHRpb25SZXF1ZXN0U2NoZW1hLCBsaXN0RGFzaGJvYXJkc1JlcXVlc3RTY2hlbWEsIGRhc2hib2FyZFNjaGVtYSwgbGlzdFNjaGVkdWxlc1JlcXVlc3RTY2hlbWEsIGxpc3RTdWJzY3JpcHRpb25zUmVxdWVzdFNjaGVtYSwgbWVzc2FnZUVycm9yVHlwZVNjaGVtYSwgbWlncmF0ZURhc2hib2FyZFJlcXVlc3RTY2hlbWEsIHB1Ymxpc2hSZXF1ZXN0U2NoZW1hLCBwdWJsaXNoZWREYXNoYm9hcmRTY2hlbWEsIHNjaGVkdWxlUGF1c2VTdGF0dXNTY2hlbWEsIHN1YnNjcmlwdGlvblN1YnNjcmliZXJEZXN0aW5hdGlvblNjaGVtYSwgc3Vic2NyaXB0aW9uU3Vic2NyaWJlclVzZXJTY2hlbWEsIHN1YnNjcmliZXJTY2hlbWEsIHRleHRBdHRhY2htZW50UHVycG9zZVNjaGVtYSwgdHJhc2hEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hLCB1bnB1Ymxpc2hEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hLCB1cGRhdGVEYXNoYm9hcmRSZXF1ZXN0U2NoZW1hLCBzY2hlZHVsZVNjaGVtYSwgY3JlYXRlRGFzaGJvYXJkUmVxdWVzdFNjaGVtYSwgY3JlYXRlU2NoZWR1bGVSZXF1ZXN0U2NoZW1hLCBzdWJzY3JpcHRpb25TY2hlbWEsIGdlbmllUXVlcnlBdHRhY2htZW50U2NoZW1hLCB0ZXh0QXR0YWNobWVudFNjaGVtYSwgZ2VuaWVMaXN0U3BhY2VzUmVzcG9uc2VTY2hlbWEsIGdlbmllQXR0YWNobWVudFNjaGVtYSwgbWVzc2FnZUVycm9yU2NoZW1hLCBnZW5pZU1lc3NhZ2VTY2hlbWEsIGdldFB1Ymxpc2hlZERhc2hib2FyZFRva2VuSW5mb1Jlc3BvbnNlU2NoZW1hLCBsaXN0RGFzaGJvYXJkc1Jlc3BvbnNlU2NoZW1hLCBsaXN0U2NoZWR1bGVzUmVzcG9uc2VTY2hlbWEsIGxpc3RTdWJzY3JpcHRpb25zUmVzcG9uc2VTY2hlbWEsIHVwZGF0ZVNjaGVkdWxlUmVxdWVzdFNjaGVtYSwgY3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdFNjaGVtYSwgZ2VuaWVMaXN0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXNwb25zZVNjaGVtYSwgZ2VuaWVTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2Rhc2hib2FyZHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXV0aG9yaXphdGlvbkRldGFpbHNHcmFudFJ1bGUsIENyb25TY2hlZHVsZSwgTGlmZWN5Y2xlU3RhdGUsIERhc2hib2FyZFZpZXcsIERlbGV0ZVNjaGVkdWxlUmVxdWVzdCwgRGVsZXRlU3Vic2NyaXB0aW9uUmVxdWVzdCwgR2VuaWVTdWdnZXN0ZWRRdWVzdGlvbnNBdHRhY2htZW50LCBHZW5pZUNvbnZlcnNhdGlvbiwgR2VuaWVDb252ZXJzYXRpb25TdW1tYXJ5LCBHZW5pZUNyZWF0ZUNvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0LCBHZW5pZURlbGV0ZUNvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0LCBHZW5pZURlbGV0ZUNvbnZlcnNhdGlvblJlcXVlc3QsIEdlbmllRXhlY3V0ZU1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXF1ZXN0LCBHZW5pZUV4ZWN1dGVNZXNzYWdlUXVlcnlSZXF1ZXN0LCBHZW5pZUZlZWRiYWNrUmF0aW5nLCBHZW5pZUdldENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0LCBHZW5pZUdldE1lc3NhZ2VBdHRhY2htZW50UXVlcnlSZXN1bHRSZXF1ZXN0LCBHZW5pZUdldE1lc3NhZ2VRdWVyeVJlc3VsdFJlcXVlc3QsIEdlbmllR2V0TWVzc2FnZVF1ZXJ5UmVzdWx0UmVzcG9uc2UsIEdlbmllR2V0UXVlcnlSZXN1bHRCeUF0dGFjaG1lbnRSZXF1ZXN0LCBHZW5pZUdldFNwYWNlUmVxdWVzdCwgR2VuaWVMaXN0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0LCBHZW5pZUxpc3RDb252ZXJzYXRpb25zUmVxdWVzdCwgR2VuaWVMaXN0Q29udmVyc2F0aW9uc1Jlc3BvbnNlLCBHZW5pZUxpc3RTcGFjZXNSZXF1ZXN0LCBHZW5pZUZlZWRiYWNrLCBSZXN1bHQsIFF1ZXJ5QXR0YWNobWVudFBhcmFtZXRlciwgR2VuaWVSZXN1bHRNZXRhZGF0YSwgR2VuaWVTZW5kTWVzc2FnZUZlZWRiYWNrUmVxdWVzdCwgR2VuaWVTdGFydENvbnZlcnNhdGlvbk1lc3NhZ2VSZXF1ZXN0LCBHZW5pZVRyYXNoU3BhY2VSZXF1ZXN0LCBHZXREYXNoYm9hcmRSZXF1ZXN0LCBHZXRQdWJsaXNoZWREYXNoYm9hcmRSZXF1ZXN0LCBHZXRQdWJsaXNoZWREYXNoYm9hcmRUb2tlbkluZm9SZXF1ZXN0LCBBdXRob3JpemF0aW9uRGV0YWlscywgR2V0U2NoZWR1bGVSZXF1ZXN0LCBHZXRTdWJzY3JpcHRpb25SZXF1ZXN0LCBMaXN0RGFzaGJvYXJkc1JlcXVlc3QsIERhc2hib2FyZCwgTGlzdFNjaGVkdWxlc1JlcXVlc3QsIExpc3RTdWJzY3JpcHRpb25zUmVxdWVzdCwgTWVzc2FnZUVycm9yVHlwZSwgTWlncmF0ZURhc2hib2FyZFJlcXVlc3QsIFB1Ymxpc2hSZXF1ZXN0LCBQdWJsaXNoZWREYXNoYm9hcmQsIFNjaGVkdWxlUGF1c2VTdGF0dXMsIFN1YnNjcmlwdGlvblN1YnNjcmliZXJEZXN0aW5hdGlvbiwgU3Vic2NyaXB0aW9uU3Vic2NyaWJlclVzZXIsIFN1YnNjcmliZXIsIFRleHRBdHRhY2htZW50UHVycG9zZSwgVHJhc2hEYXNoYm9hcmRSZXF1ZXN0LCBVbnB1Ymxpc2hEYXNoYm9hcmRSZXF1ZXN0LCBVcGRhdGVEYXNoYm9hcmRSZXF1ZXN0LCBTY2hlZHVsZSwgQ3JlYXRlRGFzaGJvYXJkUmVxdWVzdCwgQ3JlYXRlU2NoZWR1bGVSZXF1ZXN0LCBTdWJzY3JpcHRpb24sIFRleHRBdHRhY2htZW50LCBHZW5pZUxpc3RTcGFjZXNSZXNwb25zZSwgTWVzc2FnZUVycm9yLCBHZXRQdWJsaXNoZWREYXNoYm9hcmRUb2tlbkluZm9SZXNwb25zZSwgTGlzdERhc2hib2FyZHNSZXNwb25zZSwgTGlzdFNjaGVkdWxlc1Jlc3BvbnNlLCBMaXN0U3Vic2NyaXB0aW9uc1Jlc3BvbnNlLCBVcGRhdGVTY2hlZHVsZVJlcXVlc3QsIENyZWF0ZVN1YnNjcmlwdGlvblJlcXVlc3QsIEdlbmllTGlzdENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVzcG9uc2UsIEdlbmllU3RhcnRDb252ZXJzYXRpb25SZXNwb25zZSB9IGZyb20gXCIuL3NyYy9kYXNoYm9hcmRzLnRzXCI7XG5leHBvcnQgeyBkZXRlY3RTdGF0dXMsIGRldGVjdEF0dGFjaG1lbnRBZGRlZCwgZGV0ZWN0VGhpbmtpbmcsIGRldGVjdFRleHQsIGRldGVjdFF1ZXJ5LCBkZXRlY3RTdGF0ZW1lbnQsIGRldGVjdFJvd3MsIGRldGVjdFN1Z2dlc3RlZFF1ZXN0aW9ucyB9IGZyb20gXCIuL3NyYy9ldmVudC50c1wiO1xuZXhwb3J0IHsgTWVzc2FnZVN0YXR1c1NjaGVtYSwgR2VuaWVUaG91Z2h0VHlwZVNjaGVtYSwgR2VuaWVUaG91Z2h0U2NoZW1hLCBBVFRBQ0hNRU5UX1RZUEVTLCBLbm93bkF0dGFjaG1lbnRUeXBlU2NoZW1hLCBBdHRhY2htZW50VHlwZVNjaGVtYSwgR2VuaWVRdWVyeUF0dGFjaG1lbnRTY2hlbWEsIEdlbmllVGV4dEF0dGFjaG1lbnRQdXJwb3NlU2NoZW1hLCBHZW5pZVRleHRBdHRhY2htZW50U2NoZW1hLCBHZW5pZVZpekF0dGFjaG1lbnRTY2hlbWEsIEdlbmllQXR0YWNobWVudFNjaGVtYSwgR2VuaWVNZXNzYWdlU2NoZW1hLCBHZW5pZVJlc3BvbnNlU2NoZW1hLCBHZW5pZVNwYWNlU2NoZW1hLCBURVJNSU5BTF9TVEFUVVNFUywgVGVybWluYWxTdGF0dXNTY2hlbWEsIEdlbmllQ2hhdExvY2F0aW9uU2NoZW1hLCBRdWVzdGlvbkV2ZW50U2NoZW1hLCBNZXNzYWdlRXZlbnRTY2hlbWEsIFN0YXR1c0V2ZW50U2NoZW1hLCBBdHRhY2htZW50RXZlbnRTY2hlbWEsIFRoaW5raW5nRXZlbnRTY2hlbWEsIFRleHRFdmVudFNjaGVtYSwgUXVlcnlFdmVudFNjaGVtYSwgU3RhdGVtZW50RXZlbnRTY2hlbWEsIFJvd3NFdmVudFNjaGVtYSwgU3VnZ2VzdGVkUXVlc3Rpb25zRXZlbnRTY2hlbWEsIFJlc3VsdEV2ZW50U2NoZW1hLCBHZW5pZUNoYXRFdmVudFNjaGVtYSB9IGZyb20gXCIuL3NyYy9nZW5pZS1tb2RlbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZXNzYWdlU3RhdHVzLCBHZW5pZVRob3VnaHRUeXBlLCBHZW5pZVRob3VnaHQsIEtub3duQXR0YWNobWVudFR5cGUsIEF0dGFjaG1lbnRUeXBlLCBHZW5pZVF1ZXJ5QXR0YWNobWVudCwgR2VuaWVUZXh0QXR0YWNobWVudFB1cnBvc2UsIEdlbmllVGV4dEF0dGFjaG1lbnQsIEdlbmllVml6QXR0YWNobWVudCwgR2VuaWVBdHRhY2htZW50LCBHZW5pZU1lc3NhZ2UsIEdlbmllUmVzcG9uc2UsIEdlbmllU3BhY2UsIFRlcm1pbmFsU3RhdHVzLCBHZW5pZUNoYXRMb2NhdGlvbiwgUXVlc3Rpb25FdmVudCwgTWVzc2FnZUV2ZW50LCBTdGF0dXNFdmVudCwgQXR0YWNobWVudEV2ZW50LCBUaGlua2luZ0V2ZW50LCBUZXh0RXZlbnQsIFF1ZXJ5RXZlbnQsIFN0YXRlbWVudEV2ZW50LCBSb3dzRXZlbnQsIFN1Z2dlc3RlZFF1ZXN0aW9uc0V2ZW50LCBSZXN1bHRFdmVudCwgR2VuaWVDaGF0RXZlbnQsIEdlbmllQ2hhdEV2ZW50VHlwZSwgR2VuaWVDaGF0RXZlbnRGaWVsZHMgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtbW9kZWwudHNcIjtcbiJdfQ==
@@ -23,12 +23,40 @@ export declare const GenieAgentOutputItemSchema: z.ZodObject<{
23
23
  arguments: z.ZodOptional<z.ZodString>;
24
24
  output: z.ZodOptional<z.ZodString>;
25
25
  status: z.ZodOptional<z.ZodString>;
26
+ role: z.ZodOptional<z.ZodString>;
26
27
  content: z.ZodOptional<z.ZodArray<z.ZodObject<{
27
28
  type: z.ZodString;
28
29
  text: z.ZodOptional<z.ZodString>;
29
30
  metadata: z.ZodOptional<z.ZodUnknown>;
30
31
  }, z.core.$loose>>>;
32
+ metadata: z.ZodOptional<z.ZodUnknown>;
33
+ created_at: z.ZodOptional<z.ZodNumber>;
34
+ }, z.core.$loose>;
35
+ /** One page of an Agent Mode conversation's item history. */
36
+ export declare const GenieAgentConversationItemsSchema: z.ZodObject<{
37
+ data: z.ZodArray<z.ZodObject<{
38
+ type: z.ZodString;
39
+ id: z.ZodOptional<z.ZodString>;
40
+ call_id: z.ZodOptional<z.ZodString>;
41
+ name: z.ZodOptional<z.ZodString>;
42
+ arguments: z.ZodOptional<z.ZodString>;
43
+ output: z.ZodOptional<z.ZodString>;
44
+ status: z.ZodOptional<z.ZodString>;
45
+ role: z.ZodOptional<z.ZodString>;
46
+ content: z.ZodOptional<z.ZodArray<z.ZodObject<{
47
+ type: z.ZodString;
48
+ text: z.ZodOptional<z.ZodString>;
49
+ metadata: z.ZodOptional<z.ZodUnknown>;
50
+ }, z.core.$loose>>>;
51
+ metadata: z.ZodOptional<z.ZodUnknown>;
52
+ created_at: z.ZodOptional<z.ZodNumber>;
53
+ }, z.core.$loose>>;
54
+ has_more: z.ZodOptional<z.ZodBoolean>;
55
+ last_id: z.ZodOptional<z.ZodString>;
56
+ status: z.ZodOptional<z.ZodString>;
31
57
  }, z.core.$loose>;
58
+ /** Validated Agent Mode conversation item page. */
59
+ export type GenieAgentConversationItems = z.infer<typeof GenieAgentConversationItemsSchema>;
32
60
  /** Genie Agent Mode response carried by lifecycle events. */
33
61
  export declare const GenieAgentResponseSchema: z.ZodObject<{
34
62
  object: z.ZodOptional<z.ZodString>;
@@ -43,11 +71,14 @@ export declare const GenieAgentResponseSchema: z.ZodObject<{
43
71
  arguments: z.ZodOptional<z.ZodString>;
44
72
  output: z.ZodOptional<z.ZodString>;
45
73
  status: z.ZodOptional<z.ZodString>;
74
+ role: z.ZodOptional<z.ZodString>;
46
75
  content: z.ZodOptional<z.ZodArray<z.ZodObject<{
47
76
  type: z.ZodString;
48
77
  text: z.ZodOptional<z.ZodString>;
49
78
  metadata: z.ZodOptional<z.ZodUnknown>;
50
79
  }, z.core.$loose>>>;
80
+ metadata: z.ZodOptional<z.ZodUnknown>;
81
+ created_at: z.ZodOptional<z.ZodNumber>;
51
82
  }, z.core.$loose>>>;
52
83
  conversation_id: z.ZodOptional<z.ZodString>;
53
84
  created_at: z.ZodOptional<z.ZodNumber>;
@@ -71,11 +102,14 @@ export declare const GenieAgentModeEventSchema: z.ZodObject<{
71
102
  arguments: z.ZodOptional<z.ZodString>;
72
103
  output: z.ZodOptional<z.ZodString>;
73
104
  status: z.ZodOptional<z.ZodString>;
105
+ role: z.ZodOptional<z.ZodString>;
74
106
  content: z.ZodOptional<z.ZodArray<z.ZodObject<{
75
107
  type: z.ZodString;
76
108
  text: z.ZodOptional<z.ZodString>;
77
109
  metadata: z.ZodOptional<z.ZodUnknown>;
78
110
  }, z.core.$loose>>>;
111
+ metadata: z.ZodOptional<z.ZodUnknown>;
112
+ created_at: z.ZodOptional<z.ZodNumber>;
79
113
  }, z.core.$loose>>>;
80
114
  conversation_id: z.ZodOptional<z.ZodString>;
81
115
  created_at: z.ZodOptional<z.ZodNumber>;
@@ -89,11 +123,14 @@ export declare const GenieAgentModeEventSchema: z.ZodObject<{
89
123
  arguments: z.ZodOptional<z.ZodString>;
90
124
  output: z.ZodOptional<z.ZodString>;
91
125
  status: z.ZodOptional<z.ZodString>;
126
+ role: z.ZodOptional<z.ZodString>;
92
127
  content: z.ZodOptional<z.ZodArray<z.ZodObject<{
93
128
  type: z.ZodString;
94
129
  text: z.ZodOptional<z.ZodString>;
95
130
  metadata: z.ZodOptional<z.ZodUnknown>;
96
131
  }, z.core.$loose>>>;
132
+ metadata: z.ZodOptional<z.ZodUnknown>;
133
+ created_at: z.ZodOptional<z.ZodNumber>;
97
134
  }, z.core.$loose>>;
98
135
  }, z.core.$loose>;
99
136
  /** Validated Agent Mode response output item. */
@@ -120,3 +157,9 @@ export declare class GenieAgentModeProjection {
120
157
  }
121
158
  /** Project one Agent Mode response snapshot onto the shared Genie message shape. */
122
159
  export declare function projectAgentModeMessage(spaceId: string, content: string, response: GenieAgentResponse, items: GenieAgentOutputItem[]): GenieMessage;
160
+ /**
161
+ * Project an Agent Mode conversation's item history onto one Genie message per
162
+ * turn. Items are grouped by their `metadata.message_id`; each turn's user
163
+ * `message` item supplies the question.
164
+ */
165
+ export declare function projectAgentModeConversation(spaceId: string, conversationId: string, items: GenieAgentOutputItem[], status?: string): GenieMessage[];
@@ -27,9 +27,22 @@ export const GenieAgentOutputItemSchema = z
27
27
  arguments: z.string().optional(),
28
28
  output: z.string().optional(),
29
29
  status: z.string().optional(),
30
+ role: z.string().optional(),
30
31
  content: z.array(GenieAgentContentSchema).optional(),
32
+ metadata: z.unknown().optional(),
33
+ created_at: z.number().optional(),
31
34
  })
32
35
  .loose();
36
+ /** One page of an Agent Mode conversation's item history. */
37
+ export const GenieAgentConversationItemsSchema = z
38
+ .object({
39
+ data: z.array(GenieAgentOutputItemSchema).describe("Conversation items, oldest first."),
40
+ has_more: z.boolean().optional().describe("Whether another page follows `last_id`."),
41
+ last_id: z.string().optional().describe("Item id that the next page starts after."),
42
+ status: z.string().optional().describe("Current status of the conversation's latest response."),
43
+ })
44
+ .loose()
45
+ .describe("Page of Agent Mode conversation items.");
33
46
  /** Genie Agent Mode response carried by lifecycle events. */
34
47
  export const GenieAgentResponseSchema = z
35
48
  .object({
@@ -114,18 +127,73 @@ export function projectAgentModeMessage(spaceId, content, response, items) {
114
127
  : typeof response.error === "string"
115
128
  ? response.error
116
129
  : undefined;
130
+ const messageId = items.map(itemMessageId).find((id) => id !== undefined) ?? response.id;
117
131
  return GenieMessageSchema.parse({
118
- id: response.id,
119
- message_id: response.id,
132
+ id: messageId,
133
+ message_id: messageId,
120
134
  space_id: spaceId,
121
135
  conversation_id: response.conversation_id ?? "",
122
136
  content,
123
137
  status: agentModeStatus(response.status, items),
124
- attachments: items.flatMap(itemAttachments),
138
+ attachments: withStatementIds(items.flatMap(itemAttachments), items),
125
139
  ...(response.created_at !== undefined ? { created_timestamp: response.created_at } : {}),
126
140
  ...(errorMessage ? { error: { error: errorMessage } } : {}),
127
141
  });
128
142
  }
143
+ /**
144
+ * Project an Agent Mode conversation's item history onto one Genie message per
145
+ * turn. Items are grouped by their `metadata.message_id`; each turn's user
146
+ * `message` item supplies the question.
147
+ */
148
+ export function projectAgentModeConversation(spaceId, conversationId, items, status = "completed") {
149
+ const turns = [];
150
+ let current;
151
+ for (const item of items) {
152
+ if (item.type === "message" && item.role === "user") {
153
+ const messageId = itemMessageId(item) ??
154
+ (item.id?.endsWith("_input") ? item.id.slice(0, -"_input".length) : item.id);
155
+ if (!messageId)
156
+ continue;
157
+ current = { messageId, question: item, items: [] };
158
+ turns.push(current);
159
+ continue;
160
+ }
161
+ current?.items.push(item);
162
+ }
163
+ return turns.map((turn, index) => {
164
+ const failed = turn.items.some((item) => item.status === "failed");
165
+ const turnStatus = failed ? "failed" : index === turns.length - 1 ? status : "completed";
166
+ return projectAgentModeMessage(spaceId, contentText(turn.question.content, "input_text").join("\n"), {
167
+ id: turn.messageId,
168
+ status: turnStatus,
169
+ conversation_id: conversationId,
170
+ ...(turn.question.created_at !== undefined ? { created_at: turn.question.created_at } : {}),
171
+ }, turn.items);
172
+ });
173
+ }
174
+ function itemMetadata(item) {
175
+ return object.isRecord(item.metadata) ? item.metadata : undefined;
176
+ }
177
+ function itemMessageId(item) {
178
+ const messageId = itemMetadata(item)?.message_id;
179
+ return typeof messageId === "string" ? messageId : undefined;
180
+ }
181
+ /** Copy each query output's `statement_id` onto the query attachment it answers. */
182
+ function withStatementIds(attachments, items) {
183
+ const statements = new Map();
184
+ for (const item of items) {
185
+ const statementId = itemMetadata(item)?.statement_id;
186
+ if (item.type === "function_call_output" && item.call_id && typeof statementId === "string") {
187
+ statements.set(item.call_id, statementId);
188
+ }
189
+ }
190
+ return attachments.map((attachment) => {
191
+ const statementId = attachment.query && statements.get(attachment.attachment_id ?? "");
192
+ return statementId && attachment.query
193
+ ? { ...attachment, query: { ...attachment.query, statement_id: statementId } }
194
+ : attachment;
195
+ });
196
+ }
129
197
  function agentModeStatus(value, items) {
130
198
  if (value === "completed")
131
199
  return "COMPLETED";
@@ -149,6 +217,7 @@ function itemAttachments(item) {
149
217
  : [{ attachment_id: id, attachment_type: "query", query: { id, thoughts } }];
150
218
  }
151
219
  if (item.type === "function_call") {
220
+ const callId = item.call_id ?? item.id;
152
221
  const argumentsValue = json.parseRecord(item.arguments);
153
222
  const query = typeof argumentsValue?.sql === "string"
154
223
  ? argumentsValue.sql
@@ -159,10 +228,10 @@ function itemAttachments(item) {
159
228
  return query
160
229
  ? [
161
230
  {
162
- attachment_id: id,
231
+ attachment_id: callId,
163
232
  attachment_type: "query",
164
233
  query: {
165
- id,
234
+ id: callId,
166
235
  query,
167
236
  ...(title ? { title } : {}),
168
237
  },
@@ -171,7 +240,22 @@ function itemAttachments(item) {
171
240
  : [];
172
241
  }
173
242
  if (item.type === "function_call_output" && item.output !== undefined) {
174
- return [textAttachment(id, item.output)];
243
+ const viz = itemMetadata(item)?.viz;
244
+ if (object.isRecord(viz) && typeof viz.attachment_id === "string") {
245
+ return [
246
+ {
247
+ attachment_id: viz.attachment_id,
248
+ attachment_type: "viz",
249
+ viz: {
250
+ ...(item.output ? { title: item.output } : {}),
251
+ ...(typeof viz.query_attachment_id === "string"
252
+ ? { query_attachment_id: viz.query_attachment_id }
253
+ : {}),
254
+ },
255
+ },
256
+ ];
257
+ }
258
+ return [textAttachment(id, item.output, item.metadata)];
175
259
  }
176
260
  if (item.type === "message") {
177
261
  return (item.content ?? []).flatMap((part) => part.type === "output_text" && part.text
@@ -197,4 +281,4 @@ function textAttachment(id, content, metadata) {
197
281
  },
198
282
  };
199
283
  }
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsT0FBTyxFQUNMLGtCQUFrQixHQUluQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDO0tBQ3JDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNCLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2pDLENBQUM7S0FDRCxLQUFLLEVBQUUsQ0FBQztBQUVYLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDO0tBQ3hDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3pCLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMs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QUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxFQUFFLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsS0FBNEQsRUFDNUQsSUFBWTtJQUVaLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDdEIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FDckIsRUFBc0IsRUFDdEIsT0FBZSxFQUNmLFFBQWtCO0lBRWxCLE9BQU87UUFDTCxhQUFhLEVBQUUsRUFBRTtRQUNqQixlQUFlLEVBQUUsTUFBTTtRQUN2QixJQUFJLEVBQUU7WUFDSixFQUFFO1lBQ0YsT0FBTztZQUNQLE9BQU8sRUFBRSxnQ0FBZ0M7WUFDekMsR0FBRyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNoRDtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCcm93c2VyLXNhZmUgR2VuaWUgQWdlbnQgTW9kZSBTU0UgY29udHJhY3RzLlxuICpcbiAqIFNjaGVtYXMgdmFsaWRhdGUgdGhlIHN0YWJsZSBSZXNwb25zZXMtc3R5bGUgZXZlbnQgZW52ZWxvcGUgd2hpbGUgcHJlc2VydmluZ1xuICogYWRkaXRpdmUgZmllbGRzIGFuZCBvdXRwdXQtaXRlbSB2YXJpYW50cyBpbnRyb2R1Y2VkIGJ5IHRoZSBiZXRhIEFQSS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsganNvbiwgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7XG4gIEdlbmllTWVzc2FnZVNjaGVtYSxcbiAgdHlwZSBHZW5pZUF0dGFjaG1lbnQsXG4gIHR5cGUgR2VuaWVNZXNzYWdlLFxuICB0eXBlIEdlbmllVGhvdWdodCxcbn0gZnJvbSBcIi4vZ2VuaWUtbW9kZWwudHNcIjtcblxuLyoqIEFnZW50IE1vZGUgb3V0cHV0IGNvbnRlbnQgaXRlbSB3aXRoIGZvcndhcmQtY29tcGF0aWJsZSBmaWVsZHMuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudENvbnRlbnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgdGV4dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG1ldGFkYXRhOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxuICB9KVxuICAubG9vc2UoKTtcblxuLyoqIEFnZW50IE1vZGUgcmVzcG9uc2Ugb3V0cHV0IGl0ZW0gd2l0aCBrbm93biBwcm9qZWN0aW9uIGZpZWxkcy4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50T3V0cHV0SXRlbVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogei5zdHJpbmcoKSxcbiAgICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNhbGxfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYXJndW1lbnRzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgb3V0cHV0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3RhdHVzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgY29udGVudDogei5hcnJheShHZW5pZUFnZW50Q29udGVudFNjaGVtYSkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLmxvb3NlKCk7XG5cbi8qKiBHZW5pZSBBZ2VudCBNb2RlIHJlc3BvbnNlIGNhcnJpZWQgYnkgbGlmZWN5Y2xlIGV2ZW50cy4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50UmVzcG9uc2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG9iamVjdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgc3RhdHVzOiB6LnN0cmluZygpLFxuICAgIG91dHB1dDogei5hcnJheShHZW5pZUFnZW50T3V0cHV0SXRlbVNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICBjb252ZXJzYXRpb25faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjcmVhdGVkX2F0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgZXJyb3I6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5sb29zZSgpO1xuXG4vKiogT25lIFNTRSBldmVudCBmcm9tIHRoZSBHZW5pZSBBZ2VudCBNb2RlIHJlc3BvbnNlIHN0cmVhbS4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50TW9kZUV2ZW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LnN0cmluZygpLFxuICAgIHNlcXVlbmNlX251bWJlcjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dF9pbmRleDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIHJlc3BvbnNlOiBHZW5pZUFnZW50UmVzcG9uc2VTY2hlbWEub3B0aW9uYWwoKSxcbiAgICBpdGVtOiBHZW5pZUFnZW50T3V0cHV0SXRlbVNjaGVtYS5vcHRpb25hbCgpLFxuICB9KVxuICAubG9vc2UoKTtcblxuLyoqIFZhbGlkYXRlZCBBZ2VudCBNb2RlIHJlc3BvbnNlIG91dHB1dCBpdGVtLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudE91dHB1dEl0ZW0gPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50T3V0cHV0SXRlbVNjaGVtYT47XG4vKiogVmFsaWRhdGVkIEFnZW50IE1vZGUgcmVzcG9uc2UuICovXG5leHBvcnQgdHlwZSBHZW5pZUFnZW50UmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50UmVzcG9uc2VTY2hlbWE+O1xuLyoqIFZhbGlkYXRlZCBBZ2VudCBNb2RlIFNTRSBldmVudC4gKi9cbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRNb2RlRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50TW9kZUV2ZW50U2NoZW1hPjtcblxuLyoqIFN0YXRlZnVsIHB1cmUgcmVkdWNlciBmcm9tIEFnZW50IE1vZGUgU1NFIGV2ZW50cyB0byBHZW5pZSBtZXNzYWdlIHNuYXBzaG90cy4gKi9cbmV4cG9ydCBjbGFzcyBHZW5pZUFnZW50TW9kZVByb2plY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zID0gbmV3IE1hcDxzdHJpbmcsIEdlbmllQWdlbnRPdXRwdXRJdGVtPigpO1xuICBwcml2YXRlIHJlc3BvbnNlOiBHZW5pZUFnZW50UmVzcG9uc2UgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGFjZUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50OiBzdHJpbmcsXG4gICkge31cblxuICAvKiogQXBwbHkgb25lIHZhbGlkYXRlZCBTU0UgZXZlbnQgYW5kIHJldHVybiBpdHMgcHJvamVjdGVkIHNuYXBzaG90LiAqL1xuICBhcHBseShldmVudDogR2VuaWVBZ2VudE1vZGVFdmVudCk6IEdlbmllTWVzc2FnZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGV2ZW50LnJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gZXZlbnQucmVzcG9uc2U7XG4gICAgICBpZiAoZXZlbnQucmVzcG9uc2Uub3V0cHV0KSB7XG4gICAgICAgIHRoaXMuaXRlbXMuY2xlYXIoKTtcbiAgICAgICAgZXZlbnQucmVzcG9uc2Uub3V0cHV0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5zZXQoYWdlbnRJdGVtS2V5KGl0ZW0sIGluZGV4KSwgaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQuaXRlbSkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoYWdlbnRJdGVtS2V5KGV2ZW50Lml0ZW0sIGV2ZW50Lm91dHB1dF9pbmRleCksIGV2ZW50Lml0ZW0pO1xuICAgIH1cbiAgICBpZiAoKCFldmVudC5yZXNwb25zZSAmJiAhZXZlbnQuaXRlbSkgfHwgIXRoaXMucmVzcG9uc2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHByb2plY3RBZ2VudE1vZGVNZXNzYWdlKHRoaXMuc3BhY2VJZCwgdGhpcy5jb250ZW50LCB0aGlzLnJlc3BvbnNlLCBbXG4gICAgICAuLi50aGlzLml0ZW1zLnZhbHVlcygpLFxuICAgIF0pO1xuICB9XG5cbiAgLyoqIEN1cnJlbnQgcmVzcG9uc2UgaWQsIG9uY2UgYHJlc3BvbnNlLmNyZWF0ZWRgIGhhcyBhcnJpdmVkLiAqL1xuICBnZXQgcmVzcG9uc2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlPy5pZDtcbiAgfVxuXG4gIC8qKiBDdXJyZW50IGNvbnZlcnNhdGlvbiBpZCwgb25jZSBhc3NpZ25lZCBieSBHZW5pZS4gKi9cbiAgZ2V0IGNvbnZlcnNhdGlvbklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2U/LmNvbnZlcnNhdGlvbl9pZDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBsYXRlc3QgcmVzcG9uc2Ugc3RhdHVzIGlzIHRlcm1pbmFsLiAqL1xuICBnZXQgdGVybWluYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UgPyBpc1Rlcm1pbmFsU3RhdHVzKHRoaXMucmVzcG9uc2Uuc3RhdHVzKSA6IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVGVybWluYWxTdGF0dXMoc3RhdHVzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YXR1cyA9PT0gXCJjb21wbGV0ZWRcIiB8fCBzdGF0dXMgPT09IFwiZmFpbGVkXCIgfHwgc3RhdHVzID09PSBcImNhbmNlbGxlZFwiO1xufVxuXG5mdW5jdGlvbiBhZ2VudEl0ZW1LZXkoaXRlbTogR2VuaWVBZ2VudE91dHB1dEl0ZW0sIGluZGV4OiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBpdGVtLmlkID09PSBcInN0cmluZ1wiKSByZXR1cm4gaXRlbS5pZDtcbiAgaWYgKHR5cGVvZiBpdGVtLmNhbGxfaWQgPT09IFwic3RyaW5nXCIpIHJldHVybiBpdGVtLmNhbGxfaWQ7XG4gIHJldHVybiBTdHJpbmcodHlwZW9mIGluZGV4ID09PSBcIm51bWJlclwiID8gaW5kZXggOiAoaXRlbS50eXBlID8/IFwiaXRlbVwiKSk7XG59XG5cbi8qKiBQcm9qZWN0IG9uZSBBZ2VudCBNb2RlIHJlc3BvbnNlIHNuYXBzaG90IG9udG8gdGhlIHNoYXJlZCBHZW5pZSBtZXNzYWdlIHNoYXBlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2plY3RBZ2VudE1vZGVNZXNzYWdlKFxuICBzcGFjZUlkOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgcmVzcG9uc2U6IEdlbmllQWdlbnRSZXNwb25zZSxcbiAgaXRlbXM6IEdlbmllQWdlbnRPdXRwdXRJdGVtW10sXG4pOiBHZW5pZU1lc3NhZ2Uge1xuICBjb25zdCBlcnJvclZhbHVlID0gb2JqZWN0LmlzUmVjb3JkKHJlc3BvbnNlLmVycm9yKSA/IHJlc3BvbnNlLmVycm9yIDogdW5kZWZpbmVkO1xuICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgIHR5cGVvZiBlcnJvclZhbHVlPy5tZXNzYWdlID09PSBcInN0cmluZ1wiXG4gICAgICA/IGVycm9yVmFsdWUubWVzc2FnZVxuICAgICAgOiB0eXBlb2YgcmVzcG9uc2UuZXJyb3IgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyByZXNwb25zZS5lcnJvclxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIEdlbmllTWVzc2FnZVNjaGVtYS5wYXJzZSh7XG4gICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgIG1lc3NhZ2VfaWQ6IHJlc3BvbnNlLmlkLFxuICAgIHNwYWNlX2lkOiBzcGFjZUlkLFxuICAgIGNvbnZlcnNhdGlvbl9pZDogcmVzcG9uc2UuY29udmVyc2F0aW9uX2lkID8/IFwiXCIsXG4gICAgY29udGVudCxcbiAgICBzdGF0dXM6IGFnZW50TW9kZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMsIGl0ZW1zKSxcbiAgICBhdHRhY2htZW50czogaXRlbXMuZmxhdE1hcChpdGVtQXR0YWNobWVudHMpLFxuICAgIC4uLihyZXNwb25zZS5jcmVhdGVkX2F0ICE9PSB1bmRlZmluZWQgPyB7IGNyZWF0ZWRfdGltZXN0YW1wOiByZXNwb25zZS5jcmVhdGVkX2F0IH0gOiB7fSksXG4gICAgLi4uKGVycm9yTWVzc2FnZSA/IHsgZXJyb3I6IHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9IH0gOiB7fSksXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZ2VudE1vZGVTdGF0dXModmFsdWU6IHN0cmluZywgaXRlbXM6IEdlbmllQWdlbnRPdXRwdXRJdGVtW10pOiBHZW5pZU1lc3NhZ2VbXCJzdGF0dXNcIl0ge1xuICBpZiAodmFsdWUgPT09IFwiY29tcGxldGVkXCIpIHJldHVybiBcIkNPTVBMRVRFRFwiO1xuICBpZiAodmFsdWUgPT09IFwiZmFpbGVkXCIpIHJldHVybiBcIkZBSUxFRFwiO1xuICBpZiAodmFsdWUgPT09IFwiY2FuY2VsbGVkXCIpIHJldHVybiBcIkNBTkNFTExFRFwiO1xuICBpZiAoaXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS50eXBlID09PSBcImZ1bmN0aW9uX2NhbGxcIikpIHJldHVybiBcIkVYRUNVVElOR19RVUVSWVwiO1xuICByZXR1cm4gXCJBU0tJTkdfQUlcIjtcbn1cblxuZnVuY3Rpb24gaXRlbUF0dGFjaG1lbnRzKGl0ZW06IEdlbmllQWdlbnRPdXRwdXRJdGVtKTogR2VuaWVBdHRhY2htZW50W10ge1xuICBjb25zdCBpZCA9IGl0ZW0uaWQgPz8gaXRlbS5jYWxsX2lkO1xuICBpZiAoaXRlbS50eXBlID09PSBcInJlYXNvbmluZ1wiKSB7XG4gICAgY29uc3QgdGhvdWdodHMgPSBjb250ZW50VGV4dChpdGVtLmNvbnRlbnQsIFwicmVhc29uaW5nX3RleHRcIikubWFwKFxuICAgICAgKHRob3VnaHRDb250ZW50KTogR2VuaWVUaG91Z2h0ID0+ICh7XG4gICAgICAgIHRob3VnaHRfdHlwZTogXCJUSE9VR0hUX1RZUEVfU1RFUFNcIixcbiAgICAgICAgY29udGVudDogdGhvdWdodENvbnRlbnQsXG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiB0aG91Z2h0cy5sZW5ndGggPT09IDBcbiAgICAgID8gW11cbiAgICAgIDogW3sgYXR0YWNobWVudF9pZDogaWQsIGF0dGFjaG1lbnRfdHlwZTogXCJxdWVyeVwiLCBxdWVyeTogeyBpZCwgdGhvdWdodHMgfSB9XTtcbiAgfVxuICBpZiAoaXRlbS50eXBlID09PSBcImZ1bmN0aW9uX2NhbGxcIikge1xuICAgIGNvbnN0IGFyZ3VtZW50c1ZhbHVlID0ganNvbi5wYXJzZVJlY29yZChpdGVtLmFyZ3VtZW50cyk7XG4gICAgY29uc3QgcXVlcnkgPVxuICAgICAgdHlwZW9mIGFyZ3VtZW50c1ZhbHVlPy5zcWwgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBhcmd1bWVudHNWYWx1ZS5zcWxcbiAgICAgICAgOiB0eXBlb2YgYXJndW1lbnRzVmFsdWU/LnF1ZXJ5ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBhcmd1bWVudHNWYWx1ZS5xdWVyeVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRpdGxlID0gdHlwZW9mIGFyZ3VtZW50c1ZhbHVlPy50aXRsZSA9PT0gXCJzdHJpbmdcIiA/IGFyZ3VtZW50c1ZhbHVlLnRpdGxlIDogaXRlbS5uYW1lO1xuICAgIHJldHVybiBxdWVyeVxuICAgICAgPyBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXR0YWNobWVudF9pZDogaWQsXG4gICAgICAgICAgICBhdHRhY2htZW50X3R5cGU6IFwicXVlcnlcIixcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgLi4uKHRpdGxlID8geyB0aXRsZSB9IDoge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICA6IFtdO1xuICB9XG4gIGlmIChpdGVtLnR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbF9vdXRwdXRcIiAmJiBpdGVtLm91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFt0ZXh0QXR0YWNobWVudChpZCwgaXRlbS5vdXRwdXQpXTtcbiAgfVxuICBpZiAoaXRlbS50eXBlID09PSBcIm1lc3NhZ2VcIikge1xuICAgIHJldHVybiAoaXRlbS5jb250ZW50ID8/IFtdKS5mbGF0TWFwKChwYXJ0KSA9PlxuICAgICAgcGFydC50eXBlID09PSBcIm91dHB1dF90ZXh0XCIgJiYgcGFydC50ZXh0XG4gICAgICAgID8gW3RleHRBdHRhY2htZW50KGlkLCBwYXJ0LnRleHQsIHBhcnQubWV0YWRhdGEpXVxuICAgICAgICA6IFtdLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBjb250ZW50VGV4dChcbiAgdmFsdWU6IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRDb250ZW50U2NoZW1hPltdIHwgdW5kZWZpbmVkLFxuICB0eXBlOiBzdHJpbmcsXG4pOiBzdHJpbmdbXSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBbXTtcbiAgcmV0dXJuIHZhbHVlLmZsYXRNYXAoKHBhcnQpID0+IChwYXJ0LnR5cGUgPT09IHR5cGUgJiYgcGFydC50ZXh0ID8gW3BhcnQudGV4dF0gOiBbXSkpO1xufVxuXG5mdW5jdGlvbiB0ZXh0QXR0YWNobWVudChcbiAgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY29udGVudDogc3RyaW5nLFxuICBtZXRhZGF0YT86IHVua25vd24sXG4pOiBHZW5pZUF0dGFjaG1lbnQge1xuICByZXR1cm4ge1xuICAgIGF0dGFjaG1lbnRfaWQ6IGlkLFxuICAgIGF0dGFjaG1lbnRfdHlwZTogXCJ0ZXh0XCIsXG4gICAgdGV4dDoge1xuICAgICAgaWQsXG4gICAgICBjb250ZW50LFxuICAgICAgcHVycG9zZTogXCJURVhUX0FUVEFDSE1FTlRfUFVSUE9TRV9BTlNXRVJcIixcbiAgICAgIC4uLihtZXRhZGF0YSAhPT0gdW5kZWZpbmVkID8geyBtZXRhZGF0YSB9IDoge30pLFxuICAgIH0sXG4gIH07XG59XG4iXX0=
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsT0FBTyxFQUNMLGtCQUFrQixHQUluQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDO0tBQ3JDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNCLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2pDLENBQUM7S0FDRCxLQUFLLEVBQUUsQ0FBQztBQUVYLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDO0tBQ3hDLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3pCLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzlCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMs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QUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDM0MsSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUk7WUFDdEMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxDQUFDLENBQUMsRUFBRSxDQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQ2xCLEtBQTRELEVBQzVELElBQVk7SUFFWixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLEVBQXNCLEVBQ3RCLE9BQWUsRUFDZixRQUFrQjtJQUVsQixPQUFPO1FBQ0wsYUFBYSxFQUFFLEVBQUU7UUFDakIsZUFBZSxFQUFFLE1BQU07UUFDdkIsSUFBSSxFQUFFO1lBQ0osRUFBRTtZQUNGLE9BQU87WUFDUCxPQUFPLEVBQUUsZ0NBQWdDO1lBQ3pDLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDaEQ7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnJvd3Nlci1zYWZlIEdlbmllIEFnZW50IE1vZGUgU1NFIGNvbnRyYWN0cy5cbiAqXG4gKiBTY2hlbWFzIHZhbGlkYXRlIHRoZSBzdGFibGUgUmVzcG9uc2VzLXN0eWxlIGV2ZW50IGVudmVsb3BlIHdoaWxlIHByZXNlcnZpbmdcbiAqIGFkZGl0aXZlIGZpZWxkcyBhbmQgb3V0cHV0LWl0ZW0gdmFyaWFudHMgaW50cm9kdWNlZCBieSB0aGUgYmV0YSBBUEkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGpzb24sIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQge1xuICBHZW5pZU1lc3NhZ2VTY2hlbWEsXG4gIHR5cGUgR2VuaWVBdHRhY2htZW50LFxuICB0eXBlIEdlbmllTWVzc2FnZSxcbiAgdHlwZSBHZW5pZVRob3VnaHQsXG59IGZyb20gXCIuL2dlbmllLW1vZGVsLnRzXCI7XG5cbi8qKiBBZ2VudCBNb2RlIG91dHB1dCBjb250ZW50IGl0ZW0gd2l0aCBmb3J3YXJkLWNvbXBhdGlibGUgZmllbGRzLiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRDb250ZW50U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0eXBlOiB6LnN0cmluZygpLFxuICAgIHRleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBtZXRhZGF0YTogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLmxvb3NlKCk7XG5cbi8qKiBBZ2VudCBNb2RlIHJlc3BvbnNlIG91dHB1dCBpdGVtIHdpdGgga25vd24gcHJvamVjdGlvbiBmaWVsZHMuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudE91dHB1dEl0ZW1TY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjYWxsX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFyZ3VtZW50czogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHN0YXR1czogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJvbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBjb250ZW50OiB6LmFycmF5KEdlbmllQWdlbnRDb250ZW50U2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIG1ldGFkYXRhOiB6LnVua25vd24oKS5vcHRpb25hbCgpLFxuICAgIGNyZWF0ZWRfYXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLmxvb3NlKCk7XG5cbi8qKiBPbmUgcGFnZSBvZiBhbiBBZ2VudCBNb2RlIGNvbnZlcnNhdGlvbidzIGl0ZW0gaGlzdG9yeS4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50Q29udmVyc2F0aW9uSXRlbXNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGRhdGE6IHouYXJyYXkoR2VuaWVBZ2VudE91dHB1dEl0ZW1TY2hlbWEpLmRlc2NyaWJlKFwiQ29udmVyc2F0aW9uIGl0ZW1zLCBvbGRlc3QgZmlyc3QuXCIpLFxuICAgIGhhc19tb3JlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiV2hldGhlciBhbm90aGVyIHBhZ2UgZm9sbG93cyBgbGFzdF9pZGAuXCIpLFxuICAgIGxhc3RfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkl0ZW0gaWQgdGhhdCB0aGUgbmV4dCBwYWdlIHN0YXJ0cyBhZnRlci5cIiksXG4gICAgc3RhdHVzOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJDdXJyZW50IHN0YXR1cyBvZiB0aGUgY29udmVyc2F0aW9uJ3MgbGF0ZXN0IHJlc3BvbnNlLlwiKSxcbiAgfSlcbiAgLmxvb3NlKClcbiAgLmRlc2NyaWJlKFwiUGFnZSBvZiBBZ2VudCBNb2RlIGNvbnZlcnNhdGlvbiBpdGVtcy5cIik7XG5cbi8qKiBWYWxpZGF0ZWQgQWdlbnQgTW9kZSBjb252ZXJzYXRpb24gaXRlbSBwYWdlLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudENvbnZlcnNhdGlvbkl0ZW1zID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBZ2VudENvbnZlcnNhdGlvbkl0ZW1zU2NoZW1hPjtcblxuLyoqIEdlbmllIEFnZW50IE1vZGUgcmVzcG9uc2UgY2FycmllZCBieSBsaWZlY3ljbGUgZXZlbnRzLiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRSZXNwb25zZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgb2JqZWN0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaWQ6IHouc3RyaW5nKCksXG4gICAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBzdGF0dXM6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0OiB6LmFycmF5KEdlbmllQWdlbnRPdXRwdXRJdGVtU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNyZWF0ZWRfYXQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICBlcnJvcjogei51bmtub3duKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLmxvb3NlKCk7XG5cbi8qKiBPbmUgU1NFIGV2ZW50IGZyb20gdGhlIEdlbmllIEFnZW50IE1vZGUgcmVzcG9uc2Ugc3RyZWFtLiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRNb2RlRXZlbnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgc2VxdWVuY2VfbnVtYmVyOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgb3V0cHV0X2luZGV4OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgcmVzcG9uc2U6IEdlbmllQWdlbnRSZXNwb25zZVNjaGVtYS5vcHRpb25hbCgpLFxuICAgIGl0ZW06IEdlbmllQWdlbnRPdXRwdXRJdGVtU2NoZW1hLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5sb29zZSgpO1xuXG4vKiogVmFsaWRhdGVkIEFnZW50IE1vZGUgcmVzcG9uc2Ugb3V0cHV0IGl0ZW0uICovXG5leHBvcnQgdHlwZSBHZW5pZUFnZW50T3V0cHV0SXRlbSA9IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRPdXRwdXRJdGVtU2NoZW1hPjtcbi8qKiBWYWxpZGF0ZWQgQWdlbnQgTW9kZSByZXNwb25zZS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRSZXNwb25zZVNjaGVtYT47XG4vKiogVmFsaWRhdGVkIEFnZW50IE1vZGUgU1NFIGV2ZW50LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudE1vZGVFdmVudCA9IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRNb2RlRXZlbnRTY2hlbWE+O1xuXG4vKiogU3RhdGVmdWwgcHVyZSByZWR1Y2VyIGZyb20gQWdlbnQgTW9kZSBTU0UgZXZlbnRzIHRvIEdlbmllIG1lc3NhZ2Ugc25hcHNob3RzLiAqL1xuZXhwb3J0IGNsYXNzIEdlbmllQWdlbnRNb2RlUHJvamVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXMgPSBuZXcgTWFwPHN0cmluZywgR2VuaWVBZ2VudE91dHB1dEl0ZW0+KCk7XG4gIHByaXZhdGUgcmVzcG9uc2U6IEdlbmllQWdlbnRSZXNwb25zZSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNwYWNlSWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZyxcbiAgKSB7fVxuXG4gIC8qKiBBcHBseSBvbmUgdmFsaWRhdGVkIFNTRSBldmVudCBhbmQgcmV0dXJuIGl0cyBwcm9qZWN0ZWQgc25hcHNob3QuICovXG4gIGFwcGx5KGV2ZW50OiBHZW5pZUFnZW50TW9kZUV2ZW50KTogR2VuaWVNZXNzYWdlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZXZlbnQucmVzcG9uc2UpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBldmVudC5yZXNwb25zZTtcbiAgICAgIGlmIChldmVudC5yZXNwb25zZS5vdXRwdXQpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5jbGVhcigpO1xuICAgICAgICBldmVudC5yZXNwb25zZS5vdXRwdXQuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICB0aGlzLml0ZW1zLnNldChhZ2VudEl0ZW1LZXkoaXRlbSwgaW5kZXgpLCBpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudC5pdGVtKSB7XG4gICAgICB0aGlzLml0ZW1zLnNldChhZ2VudEl0ZW1LZXkoZXZlbnQuaXRlbSwgZXZlbnQub3V0cHV0X2luZGV4KSwgZXZlbnQuaXRlbSk7XG4gICAgfVxuICAgIGlmICgoIWV2ZW50LnJlc3BvbnNlICYmICFldmVudC5pdGVtKSB8fCAhdGhpcy5yZXNwb25zZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcHJvamVjdEFnZW50TW9kZU1lc3NhZ2UodGhpcy5zcGFjZUlkLCB0aGlzLmNvbnRlbnQsIHRoaXMucmVzcG9uc2UsIFtcbiAgICAgIC4uLnRoaXMuaXRlbXMudmFsdWVzKCksXG4gICAgXSk7XG4gIH1cblxuICAvKiogQ3VycmVudCByZXNwb25zZSBpZCwgb25jZSBgcmVzcG9uc2UuY3JlYXRlZGAgaGFzIGFycml2ZWQuICovXG4gIGdldCByZXNwb25zZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2U/LmlkO1xuICB9XG5cbiAgLyoqIEN1cnJlbnQgY29udmVyc2F0aW9uIGlkLCBvbmNlIGFzc2lnbmVkIGJ5IEdlbmllLiAqL1xuICBnZXQgY29udmVyc2F0aW9uSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZT8uY29udmVyc2F0aW9uX2lkO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGxhdGVzdCByZXNwb25zZSBzdGF0dXMgaXMgdGVybWluYWwuICovXG4gIGdldCB0ZXJtaW5hbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZSA/IGlzVGVybWluYWxTdGF0dXModGhpcy5yZXNwb25zZS5zdGF0dXMpIDogZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZXJtaW5hbFN0YXR1cyhzdGF0dXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhdHVzID09PSBcImNvbXBsZXRlZFwiIHx8IHN0YXR1cyA9PT0gXCJmYWlsZWRcIiB8fCBzdGF0dXMgPT09IFwiY2FuY2VsbGVkXCI7XG59XG5cbmZ1bmN0aW9uIGFnZW50SXRlbUtleShpdGVtOiBHZW5pZUFnZW50T3V0cHV0SXRlbSwgaW5kZXg6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGl0ZW0uaWQgPT09IFwic3RyaW5nXCIpIHJldHVybiBpdGVtLmlkO1xuICBpZiAodHlwZW9mIGl0ZW0uY2FsbF9pZCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGl0ZW0uY2FsbF9pZDtcbiAgcmV0dXJuIFN0cmluZyh0eXBlb2YgaW5kZXggPT09IFwibnVtYmVyXCIgPyBpbmRleCA6IChpdGVtLnR5cGUgPz8gXCJpdGVtXCIpKTtcbn1cblxuLyoqIFByb2plY3Qgb25lIEFnZW50IE1vZGUgcmVzcG9uc2Ugc25hcHNob3Qgb250byB0aGUgc2hhcmVkIEdlbmllIG1lc3NhZ2Ugc2hhcGUuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdEFnZW50TW9kZU1lc3NhZ2UoXG4gIHNwYWNlSWQ6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICByZXNwb25zZTogR2VuaWVBZ2VudFJlc3BvbnNlLFxuICBpdGVtczogR2VuaWVBZ2VudE91dHB1dEl0ZW1bXSxcbik6IEdlbmllTWVzc2FnZSB7XG4gIGNvbnN0IGVycm9yVmFsdWUgPSBvYmplY3QuaXNSZWNvcmQocmVzcG9uc2UuZXJyb3IpID8gcmVzcG9uc2UuZXJyb3IgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgdHlwZW9mIGVycm9yVmFsdWU/Lm1lc3NhZ2UgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZXJyb3JWYWx1ZS5tZXNzYWdlXG4gICAgICA6IHR5cGVvZiByZXNwb25zZS5lcnJvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IHJlc3BvbnNlLmVycm9yXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBtZXNzYWdlSWQgPSBpdGVtcy5tYXAoaXRlbU1lc3NhZ2VJZCkuZmluZCgoaWQpID0+IGlkICE9PSB1bmRlZmluZWQpID8/IHJlc3BvbnNlLmlkO1xuICByZXR1cm4gR2VuaWVNZXNzYWdlU2NoZW1hLnBhcnNlKHtcbiAgICBpZDogbWVzc2FnZUlkLFxuICAgIG1lc3NhZ2VfaWQ6IG1lc3NhZ2VJZCxcbiAgICBzcGFjZV9pZDogc3BhY2VJZCxcbiAgICBjb252ZXJzYXRpb25faWQ6IHJlc3BvbnNlLmNvbnZlcnNhdGlvbl9pZCA/PyBcIlwiLFxuICAgIGNvbnRlbnQsXG4gICAgc3RhdHVzOiBhZ2VudE1vZGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzLCBpdGVtcyksXG4gICAgYXR0YWNobWVudHM6IHdpdGhTdGF0ZW1lbnRJZHMoaXRlbXMuZmxhdE1hcChpdGVtQXR0YWNobWVudHMpLCBpdGVtcyksXG4gICAgLi4uKHJlc3BvbnNlLmNyZWF0ZWRfYXQgIT09IHVuZGVmaW5lZCA/IHsgY3JlYXRlZF90aW1lc3RhbXA6IHJlc3BvbnNlLmNyZWF0ZWRfYXQgfSA6IHt9KSxcbiAgICAuLi4oZXJyb3JNZXNzYWdlID8geyBlcnJvcjogeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0gfSA6IHt9KSxcbiAgfSk7XG59XG5cbi8qKlxuICogUHJvamVjdCBhbiBBZ2VudCBNb2RlIGNvbnZlcnNhdGlvbidzIGl0ZW0gaGlzdG9yeSBvbnRvIG9uZSBHZW5pZSBtZXNzYWdlIHBlclxuICogdHVybi4gSXRlbXMgYXJlIGdyb3VwZWQgYnkgdGhlaXIgYG1ldGFkYXRhLm1lc3NhZ2VfaWRgOyBlYWNoIHR1cm4ncyB1c2VyXG4gKiBgbWVzc2FnZWAgaXRlbSBzdXBwbGllcyB0aGUgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0QWdlbnRNb2RlQ29udmVyc2F0aW9uKFxuICBzcGFjZUlkOiBzdHJpbmcsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gIGl0ZW1zOiBHZW5pZUFnZW50T3V0cHV0SXRlbVtdLFxuICBzdGF0dXMgPSBcImNvbXBsZXRlZFwiLFxuKTogR2VuaWVNZXNzYWdlW10ge1xuICBjb25zdCB0dXJuczogQXJyYXk8e1xuICAgIG1lc3NhZ2VJZDogc3RyaW5nO1xuICAgIHF1ZXN0aW9uOiBHZW5pZUFnZW50T3V0cHV0SXRlbTtcbiAgICBpdGVtczogR2VuaWVBZ2VudE91dHB1dEl0ZW1bXTtcbiAgfT4gPSBbXTtcbiAgbGV0IGN1cnJlbnQ6ICh0eXBlb2YgdHVybnMpW251bWJlcl0gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIGl0ZW0ucm9sZSA9PT0gXCJ1c2VyXCIpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9XG4gICAgICAgIGl0ZW1NZXNzYWdlSWQoaXRlbSkgPz9cbiAgICAgICAgKGl0ZW0uaWQ/LmVuZHNXaXRoKFwiX2lucHV0XCIpID8gaXRlbS5pZC5zbGljZSgwLCAtXCJfaW5wdXRcIi5sZW5ndGgpIDogaXRlbS5pZCk7XG4gICAgICBpZiAoIW1lc3NhZ2VJZCkgY29udGludWU7XG4gICAgICBjdXJyZW50ID0geyBtZXNzYWdlSWQsIHF1ZXN0aW9uOiBpdGVtLCBpdGVtczogW10gfTtcbiAgICAgIHR1cm5zLnB1c2goY3VycmVudCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY3VycmVudD8uaXRlbXMucHVzaChpdGVtKTtcbiAgfVxuICByZXR1cm4gdHVybnMubWFwKCh0dXJuLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGZhaWxlZCA9IHR1cm4uaXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09IFwiZmFpbGVkXCIpO1xuICAgIGNvbnN0IHR1cm5TdGF0dXMgPSBmYWlsZWQgPyBcImZhaWxlZFwiIDogaW5kZXggPT09IHR1cm5zLmxlbmd0aCAtIDEgPyBzdGF0dXMgOiBcImNvbXBsZXRlZFwiO1xuICAgIHJldHVybiBwcm9qZWN0QWdlbnRNb2RlTWVzc2FnZShcbiAgICAgIHNwYWNlSWQsXG4gICAgICBjb250ZW50VGV4dCh0dXJuLnF1ZXN0aW9uLmNvbnRlbnQsIFwiaW5wdXRfdGV4dFwiKS5qb2luKFwiXFxuXCIpLFxuICAgICAge1xuICAgICAgICBpZDogdHVybi5tZXNzYWdlSWQsXG4gICAgICAgIHN0YXR1czogdHVyblN0YXR1cyxcbiAgICAgICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgICAgICAgLi4uKHR1cm4ucXVlc3Rpb24uY3JlYXRlZF9hdCAhPT0gdW5kZWZpbmVkID8geyBjcmVhdGVkX2F0OiB0dXJuLnF1ZXN0aW9uLmNyZWF0ZWRfYXQgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgICB0dXJuLml0ZW1zLFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpdGVtTWV0YWRhdGEoaXRlbTogR2VuaWVBZ2VudE91dHB1dEl0ZW0pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvYmplY3QuaXNSZWNvcmQoaXRlbS5tZXRhZGF0YSkgPyBpdGVtLm1ldGFkYXRhIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpdGVtTWVzc2FnZUlkKGl0ZW06IEdlbmllQWdlbnRPdXRwdXRJdGVtKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWVzc2FnZUlkID0gaXRlbU1ldGFkYXRhKGl0ZW0pPy5tZXNzYWdlX2lkO1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2VJZCA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2VJZCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIENvcHkgZWFjaCBxdWVyeSBvdXRwdXQncyBgc3RhdGVtZW50X2lkYCBvbnRvIHRoZSBxdWVyeSBhdHRhY2htZW50IGl0IGFuc3dlcnMuICovXG5mdW5jdGlvbiB3aXRoU3RhdGVtZW50SWRzKFxuICBhdHRhY2htZW50czogR2VuaWVBdHRhY2htZW50W10sXG4gIGl0ZW1zOiBHZW5pZUFnZW50T3V0cHV0SXRlbVtdLFxuKTogR2VuaWVBdHRhY2htZW50W10ge1xuICBjb25zdCBzdGF0ZW1lbnRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50SWQgPSBpdGVtTWV0YWRhdGEoaXRlbSk/LnN0YXRlbWVudF9pZDtcbiAgICBpZiAoaXRlbS50eXBlID09PSBcImZ1bmN0aW9uX2NhbGxfb3V0cHV0XCIgJiYgaXRlbS5jYWxsX2lkICYmIHR5cGVvZiBzdGF0ZW1lbnRJZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgc3RhdGVtZW50cy5zZXQoaXRlbS5jYWxsX2lkLCBzdGF0ZW1lbnRJZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQpID0+IHtcbiAgICBjb25zdCBzdGF0ZW1lbnRJZCA9IGF0dGFjaG1lbnQucXVlcnkgJiYgc3RhdGVtZW50cy5nZXQoYXR0YWNobWVudC5hdHRhY2htZW50X2lkID8/IFwiXCIpO1xuICAgIHJldHVybiBzdGF0ZW1lbnRJZCAmJiBhdHRhY2htZW50LnF1ZXJ5XG4gICAgICA/IHsgLi4uYXR0YWNobWVudCwgcXVlcnk6IHsgLi4uYXR0YWNobWVudC5xdWVyeSwgc3RhdGVtZW50X2lkOiBzdGF0ZW1lbnRJZCB9IH1cbiAgICAgIDogYXR0YWNobWVudDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFnZW50TW9kZVN0YXR1cyh2YWx1ZTogc3RyaW5nLCBpdGVtczogR2VuaWVBZ2VudE91dHB1dEl0ZW1bXSk6IEdlbmllTWVzc2FnZVtcInN0YXR1c1wiXSB7XG4gIGlmICh2YWx1ZSA9PT0gXCJjb21wbGV0ZWRcIikgcmV0dXJuIFwiQ09NUExFVEVEXCI7XG4gIGlmICh2YWx1ZSA9PT0gXCJmYWlsZWRcIikgcmV0dXJuIFwiRkFJTEVEXCI7XG4gIGlmICh2YWx1ZSA9PT0gXCJjYW5jZWxsZWRcIikgcmV0dXJuIFwiQ0FOQ0VMTEVEXCI7XG4gIGlmIChpdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbFwiKSkgcmV0dXJuIFwiRVhFQ1VUSU5HX1FVRVJZXCI7XG4gIHJldHVybiBcIkFTS0lOR19BSVwiO1xufVxuXG5mdW5jdGlvbiBpdGVtQXR0YWNobWVudHMoaXRlbTogR2VuaWVBZ2VudE91dHB1dEl0ZW0pOiBHZW5pZUF0dGFjaG1lbnRbXSB7XG4gIGNvbnN0IGlkID0gaXRlbS5pZCA/PyBpdGVtLmNhbGxfaWQ7XG4gIGlmIChpdGVtLnR5cGUgPT09IFwicmVhc29uaW5nXCIpIHtcbiAgICBjb25zdCB0aG91Z2h0cyA9IGNvbnRlbnRUZXh0KGl0ZW0uY29udGVudCwgXCJyZWFzb25pbmdfdGV4dFwiKS5tYXAoXG4gICAgICAodGhvdWdodENvbnRlbnQpOiBHZW5pZVRob3VnaHQgPT4gKHtcbiAgICAgICAgdGhvdWdodF90eXBlOiBcIlRIT1VHSFRfVFlQRV9TVEVQU1wiLFxuICAgICAgICBjb250ZW50OiB0aG91Z2h0Q29udGVudCxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIHRob3VnaHRzLmxlbmd0aCA9PT0gMFxuICAgICAgPyBbXVxuICAgICAgOiBbeyBhdHRhY2htZW50X2lkOiBpZCwgYXR0YWNobWVudF90eXBlOiBcInF1ZXJ5XCIsIHF1ZXJ5OiB7IGlkLCB0aG91Z2h0cyB9IH1dO1xuICB9XG4gIGlmIChpdGVtLnR5cGUgPT09IFwiZnVuY3Rpb25fY2FsbFwiKSB7XG4gICAgY29uc3QgY2FsbElkID0gaXRlbS5jYWxsX2lkID8/IGl0ZW0uaWQ7XG4gICAgY29uc3QgYXJndW1lbnRzVmFsdWUgPSBqc29uLnBhcnNlUmVjb3JkKGl0ZW0uYXJndW1lbnRzKTtcbiAgICBjb25zdCBxdWVyeSA9XG4gICAgICB0eXBlb2YgYXJndW1lbnRzVmFsdWU/LnNxbCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGFyZ3VtZW50c1ZhbHVlLnNxbFxuICAgICAgICA6IHR5cGVvZiBhcmd1bWVudHNWYWx1ZT8ucXVlcnkgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IGFyZ3VtZW50c1ZhbHVlLnF1ZXJ5XG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGl0bGUgPSB0eXBlb2YgYXJndW1lbnRzVmFsdWU/LnRpdGxlID09PSBcInN0cmluZ1wiID8gYXJndW1lbnRzVmFsdWUudGl0bGUgOiBpdGVtLm5hbWU7XG4gICAgcmV0dXJuIHF1ZXJ5XG4gICAgICA/IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdHRhY2htZW50X2lkOiBjYWxsSWQsXG4gICAgICAgICAgICBhdHRhY2htZW50X3R5cGU6IFwicXVlcnlcIixcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgIGlkOiBjYWxsSWQsXG4gICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAuLi4odGl0bGUgPyB7IHRpdGxlIH0gOiB7fSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIDogW107XG4gIH1cbiAgaWYgKGl0ZW0udHlwZSA9PT0gXCJmdW5jdGlvbl9jYWxsX291dHB1dFwiICYmIGl0ZW0ub3V0cHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB2aXogPSBpdGVtTWV0YWRhdGEoaXRlbSk/LnZpejtcbiAgICBpZiAob2JqZWN0LmlzUmVjb3JkKHZpeikgJiYgdHlwZW9mIHZpei5hdHRhY2htZW50X2lkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgYXR0YWNobWVudF9pZDogdml6LmF0dGFjaG1lbnRfaWQsXG4gICAgICAgICAgYXR0YWNobWVudF90eXBlOiBcInZpelwiLFxuICAgICAgICAgIHZpejoge1xuICAgICAgICAgICAgLi4uKGl0ZW0ub3V0cHV0ID8geyB0aXRsZTogaXRlbS5vdXRwdXQgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLih0eXBlb2Ygdml6LnF1ZXJ5X2F0dGFjaG1lbnRfaWQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgPyB7IHF1ZXJ5X2F0dGFjaG1lbnRfaWQ6IHZpei5xdWVyeV9hdHRhY2htZW50X2lkIH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbdGV4dEF0dGFjaG1lbnQoaWQsIGl0ZW0ub3V0cHV0LCBpdGVtLm1ldGFkYXRhKV07XG4gIH1cbiAgaWYgKGl0ZW0udHlwZSA9PT0gXCJtZXNzYWdlXCIpIHtcbiAgICByZXR1cm4gKGl0ZW0uY29udGVudCA/PyBbXSkuZmxhdE1hcCgocGFydCkgPT5cbiAgICAgIHBhcnQudHlwZSA9PT0gXCJvdXRwdXRfdGV4dFwiICYmIHBhcnQudGV4dFxuICAgICAgICA/IFt0ZXh0QXR0YWNobWVudChpZCwgcGFydC50ZXh0LCBwYXJ0Lm1ldGFkYXRhKV1cbiAgICAgICAgOiBbXSxcbiAgICApO1xuICB9XG4gIHJldHVybiBbXTtcbn1cblxuZnVuY3Rpb24gY29udGVudFRleHQoXG4gIHZhbHVlOiB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50Q29udGVudFNjaGVtYT5bXSB8IHVuZGVmaW5lZCxcbiAgdHlwZTogc3RyaW5nLFxuKTogc3RyaW5nW10ge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gW107XG4gIHJldHVybiB2YWx1ZS5mbGF0TWFwKChwYXJ0KSA9PiAocGFydC50eXBlID09PSB0eXBlICYmIHBhcnQudGV4dCA/IFtwYXJ0LnRleHRdIDogW10pKTtcbn1cblxuZnVuY3Rpb24gdGV4dEF0dGFjaG1lbnQoXG4gIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgbWV0YWRhdGE/OiB1bmtub3duLFxuKTogR2VuaWVBdHRhY2htZW50IHtcbiAgcmV0dXJuIHtcbiAgICBhdHRhY2htZW50X2lkOiBpZCxcbiAgICBhdHRhY2htZW50X3R5cGU6IFwidGV4dFwiLFxuICAgIHRleHQ6IHtcbiAgICAgIGlkLFxuICAgICAgY29udGVudCxcbiAgICAgIHB1cnBvc2U6IFwiVEVYVF9BVFRBQ0hNRU5UX1BVUlBPU0VfQU5TV0VSXCIsXG4gICAgICAuLi4obWV0YWRhdGEgIT09IHVuZGVmaW5lZCA/IHsgbWV0YWRhdGEgfSA6IHt9KSxcbiAgICB9LFxuICB9O1xufVxuIl19
@@ -97,11 +97,12 @@ export type GenieThought = z.infer<typeof GenieThoughtSchema>;
97
97
  * `attachment_type` (vs a bare `type`) to keep the field clear of
98
98
  * the event-union discriminator key.
99
99
  */
100
- export declare const ATTACHMENT_TYPES: readonly ["query", "text", "suggested_questions"];
100
+ export declare const ATTACHMENT_TYPES: readonly ["query", "text", "suggested_questions", "viz"];
101
101
  export declare const KnownAttachmentTypeSchema: z.ZodEnum<{
102
102
  query: "query";
103
103
  suggested_questions: "suggested_questions";
104
104
  text: "text";
105
+ viz: "viz";
105
106
  }>;
106
107
  export type KnownAttachmentType = z.infer<typeof KnownAttachmentTypeSchema>;
107
108
  export declare const AttachmentTypeSchema: z.ZodString;
@@ -160,6 +161,17 @@ export declare const GenieTextAttachmentSchema: z.ZodObject<{
160
161
  }, z.core.$strip>;
161
162
  /** Narrative text attachment, including its optional semantic purpose. */
162
163
  export type GenieTextAttachment = z.infer<typeof GenieTextAttachmentSchema>;
164
+ /**
165
+ * Visualization Genie requested for one of its query results. Genie stores only
166
+ * the title and the query attachment it charts; the client draws the chart from
167
+ * that query's statement rows.
168
+ */
169
+ export declare const GenieVizAttachmentSchema: z.ZodObject<{
170
+ title: z.ZodOptional<z.ZodString>;
171
+ query_attachment_id: z.ZodOptional<z.ZodString>;
172
+ }, z.core.$strip>;
173
+ /** Genie visualization request over one query attachment. */
174
+ export type GenieVizAttachment = z.infer<typeof GenieVizAttachmentSchema>;
163
175
  /**
164
176
  * `GenieAttachment` with:
165
177
  *
@@ -212,6 +224,10 @@ export declare const GenieAttachmentSchema: z.ZodObject<{
212
224
  purpose: z.ZodOptional<z.ZodString>;
213
225
  metadata: z.ZodOptional<z.ZodUnknown>;
214
226
  }, z.core.$strip>>;
227
+ viz: z.ZodOptional<z.ZodObject<{
228
+ title: z.ZodOptional<z.ZodString>;
229
+ query_attachment_id: z.ZodOptional<z.ZodString>;
230
+ }, z.core.$strip>>;
215
231
  attachment_type: z.ZodOptional<z.ZodString>;
216
232
  }, z.core.$strip>;
217
233
  /** Genie message attachment with an optional computed discriminator. */
@@ -287,6 +303,10 @@ export declare const GenieMessageSchema: z.ZodObject<{
287
303
  purpose: z.ZodOptional<z.ZodString>;
288
304
  metadata: z.ZodOptional<z.ZodUnknown>;
289
305
  }, z.core.$strip>>;
306
+ viz: z.ZodOptional<z.ZodObject<{
307
+ title: z.ZodOptional<z.ZodString>;
308
+ query_attachment_id: z.ZodOptional<z.ZodString>;
309
+ }, z.core.$strip>>;
290
310
  attachment_type: z.ZodOptional<z.ZodString>;
291
311
  }, z.core.$strip>>>;
292
312
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
@@ -359,6 +379,10 @@ export declare const GenieResponseSchema: z.ZodPipe<z.ZodObject<{
359
379
  purpose: z.ZodOptional<z.ZodString>;
360
380
  metadata: z.ZodOptional<z.ZodUnknown>;
361
381
  }, z.core.$strip>>;
382
+ viz: z.ZodOptional<z.ZodObject<{
383
+ title: z.ZodOptional<z.ZodString>;
384
+ query_attachment_id: z.ZodOptional<z.ZodString>;
385
+ }, z.core.$strip>>;
362
386
  attachment_type: z.ZodOptional<z.ZodString>;
363
387
  }, z.core.$strip>>>;
364
388
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
@@ -394,6 +418,10 @@ export declare const GenieResponseSchema: z.ZodPipe<z.ZodObject<{
394
418
  purpose?: string | undefined;
395
419
  metadata?: unknown;
396
420
  } | undefined;
421
+ viz?: {
422
+ title?: string | undefined;
423
+ query_attachment_id?: string | undefined;
424
+ } | undefined;
397
425
  attachment_type?: string | undefined;
398
426
  }[], {
399
427
  content: string;
@@ -450,6 +478,10 @@ export declare const GenieResponseSchema: z.ZodPipe<z.ZodObject<{
450
478
  purpose?: string | undefined;
451
479
  metadata?: unknown;
452
480
  } | undefined;
481
+ viz?: {
482
+ title?: string | undefined;
483
+ query_attachment_id?: string | undefined;
484
+ } | undefined;
453
485
  attachment_type?: string | undefined;
454
486
  }[] | undefined;
455
487
  auto_regenerate_count?: number | undefined;
@@ -631,6 +663,10 @@ export declare const MessageEventSchema: z.ZodObject<{
631
663
  purpose: z.ZodOptional<z.ZodString>;
632
664
  metadata: z.ZodOptional<z.ZodUnknown>;
633
665
  }, z.core.$strip>>;
666
+ viz: z.ZodOptional<z.ZodObject<{
667
+ title: z.ZodOptional<z.ZodString>;
668
+ query_attachment_id: z.ZodOptional<z.ZodString>;
669
+ }, z.core.$strip>>;
634
670
  attachment_type: z.ZodOptional<z.ZodString>;
635
671
  }, z.core.$strip>>>;
636
672
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
@@ -847,6 +883,10 @@ export declare const ResultEventSchema: z.ZodObject<{
847
883
  purpose: z.ZodOptional<z.ZodString>;
848
884
  metadata: z.ZodOptional<z.ZodUnknown>;
849
885
  }, z.core.$strip>>;
886
+ viz: z.ZodOptional<z.ZodObject<{
887
+ title: z.ZodOptional<z.ZodString>;
888
+ query_attachment_id: z.ZodOptional<z.ZodString>;
889
+ }, z.core.$strip>>;
850
890
  attachment_type: z.ZodOptional<z.ZodString>;
851
891
  }, z.core.$strip>>>;
852
892
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
@@ -954,6 +994,10 @@ export declare const GenieChatEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
954
994
  purpose: z.ZodOptional<z.ZodString>;
955
995
  metadata: z.ZodOptional<z.ZodUnknown>;
956
996
  }, z.core.$strip>>;
997
+ viz: z.ZodOptional<z.ZodObject<{
998
+ title: z.ZodOptional<z.ZodString>;
999
+ query_attachment_id: z.ZodOptional<z.ZodString>;
1000
+ }, z.core.$strip>>;
957
1001
  attachment_type: z.ZodOptional<z.ZodString>;
958
1002
  }, z.core.$strip>>>;
959
1003
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
@@ -1085,6 +1129,10 @@ export declare const GenieChatEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
1085
1129
  purpose: z.ZodOptional<z.ZodString>;
1086
1130
  metadata: z.ZodOptional<z.ZodUnknown>;
1087
1131
  }, z.core.$strip>>;
1132
+ viz: z.ZodOptional<z.ZodObject<{
1133
+ title: z.ZodOptional<z.ZodString>;
1134
+ query_attachment_id: z.ZodOptional<z.ZodString>;
1135
+ }, z.core.$strip>>;
1088
1136
  attachment_type: z.ZodOptional<z.ZodString>;
1089
1137
  }, z.core.$strip>>>;
1090
1138
  auto_regenerate_count: z.ZodOptional<z.ZodNumber>;
@@ -100,6 +100,7 @@ export const ATTACHMENT_TYPES = [
100
100
  "query",
101
101
  "text",
102
102
  "suggested_questions",
103
+ "viz",
103
104
  ];
104
105
  export const KnownAttachmentTypeSchema = z
105
106
  .enum(ATTACHMENT_TYPES)
@@ -139,6 +140,20 @@ export const GenieTextAttachmentSchema = dashboards.textAttachmentSchema.extend(
139
140
  purpose: GenieTextAttachmentPurposeSchema.optional(),
140
141
  metadata: z.unknown().optional().describe("Agent Mode metadata attached to this text response."),
141
142
  });
143
+ /**
144
+ * Visualization Genie requested for one of its query results. Genie stores only
145
+ * the title and the query attachment it charts; the client draws the chart from
146
+ * that query's statement rows.
147
+ */
148
+ export const GenieVizAttachmentSchema = z
149
+ .object({
150
+ title: z.string().optional().describe("Display title Genie chose for the chart."),
151
+ query_attachment_id: z
152
+ .string()
153
+ .optional()
154
+ .describe("`attachment_id` of the query attachment whose rows the chart plots."),
155
+ })
156
+ .describe("Genie visualization request over one query attachment.");
142
157
  /**
143
158
  * `GenieAttachment` with:
144
159
  *
@@ -162,6 +177,7 @@ export const GenieTextAttachmentSchema = dashboards.textAttachmentSchema.extend(
162
177
  export const GenieAttachmentSchema = SDKGenieAttachmentSchema.extend({
163
178
  query: GenieQueryAttachmentSchema.optional(),
164
179
  text: GenieTextAttachmentSchema.optional(),
180
+ viz: GenieVizAttachmentSchema.optional(),
165
181
  attachment_type: AttachmentTypeSchema.optional(),
166
182
  });
167
183
  /**
@@ -283,6 +299,8 @@ export function detectAttachmentType(att) {
283
299
  return "text";
284
300
  if (att.suggested_questions)
285
301
  return "suggested_questions";
302
+ if (att.viz)
303
+ return "viz";
286
304
  for (const k of Object.keys(att)) {
287
305
  if (k !== "attachment_id" && k !== "attachment_type")
288
306
  return k;
@@ -501,4 +519,4 @@ export const GenieChatEventSchema = z.discriminatedUnion("type", [
501
519
  SuggestedQuestionsEventSchema,
502
520
  ResultEventSchema,
503
521
  ]);
504
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuaWUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuaWUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxrRkFBa0Y7QUFDbEYsaUZBQWlGO0FBQ2pGLDZEQUE2RDtBQUM3RCxNQUFNLEVBQ0oscUJBQXFCLEVBQUUsd0JBQXdCLEVBQy9DLGtCQUFrQixFQUFFLHFCQUFxQixFQUN6QywwQkFBMEIsRUFBRSw2QkFBNkIsRUFDekQsZ0JBQWdCLEVBQUUsbUJBQW1CLEdBQ3RDLEdBQUcsVUFBVSxDQUFDO0FBVWYsd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztBQUVsRSx5RUFBeUU7QUFFekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUM7S0FDcEMsTUFBTSxFQUFFO0tBQ1IsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7QUFJaEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6QyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxDQUFDLDhDQUE4QyxDQUFDO0lBQzdGLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLDBDQUEwQyxDQUFDO0NBQ3pFLENBQUMsQ0FBQztBQUlILDZFQUE2RTtBQUU3RTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxNQUFN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Ozs7Ozs7O0dBaUNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtJQUMvRCxtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsb0JBQW9CO0lBQ3BCLGVBQWU7SUFDZiw2QkFBNkI7SUFDN0IsaUJBQWlCO0NBQ2xCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lyZS1mb3JtYXQgem9kIHNjaGVtYXMgKyB0eXBlcyBhbmQgaGlnaC1sZXZlbCBldmVudCB2b2NhYnVsYXJ5XG4gKiBmb3IgdGhlIEdlbmllIGNoYXQgZHJpdmVyLlxuICpcbiAqIFR3byByZWxhdGVkIGxheWVycyBsaXZlIGhlcmU6XG4gKlxuICogICAxLiBHZW5pZSB3aXJlIHNoYXBlcyBkZXJpdmVkIGZyb20gdGhpcyBwYWNrYWdlJ3Mgb3duIGdlbmVyYXRlZFxuICogICAgICBgZGFzaGJvYXJkc2Agc2NoZW1hcyAocmVnZW5lcmF0ZWQgZnJvbSB0aGUgdXBzdHJlYW1cbiAqICAgICAgYEBkYXRhYnJpY2tzL3Nkay1leHBlcmltZW50YWxgIGBhcGlzL2Rhc2hib2FyZHMvbW9kZWwuZC50c2BcbiAqICAgICAgYnkgdGhlIGVuZ2luZSdzIGNvZGVnZW4gb24gc3ludGgpLiBXZSBleHRlbmQgdGhlIFNESyBzY2hlbWFzIHdoZXJlIEdlbmllXG4gKiAgICAgIHNoaXBzIGZpZWxkcyBvbiB0aGUgd2lyZSB0aGF0IHRoZSBTREsgZG9lc24ndCBjdXJyZW50bHkgdHlwZTpcbiAqXG4gKiAgICAgICAgLSBgR2VuaWVNZXNzYWdlLmF1dG9fcmVnZW5lcmF0ZV9jb3VudDogbnVtYmVyYCAoc3RhbXBlZFxuICogICAgICAgICAgb24gZXZlcnkgd2lyZSBtZXNzYWdlLCBvbWl0dGVkIGZyb20gdGhlIFNESyBzaGFwZSkuXG4gKiAgICAgICAgLSBgR2VuaWVRdWVyeUF0dGFjaG1lbnQudGhvdWdodHM6IEdlbmllVGhvdWdodFtdYCAodGhlXG4gKiAgICAgICAgICBzdHJlYW1lZCByZWFzb25pbmcgcGF5bG9hZCB3aXRoIGBERVNDUklQVElPTmAsXG4gKiAgICAgICAgICBgREFUQV9TT1VSQ0lOR2AsIGBTVEVQU2AsIGFuZCBgVU5ERVJTVEFORElOR2AgdGhvdWdodFxuICogICAgICAgICAga2luZHMpLlxuICogICAgICAgIC0gYEdlbmllQXR0YWNobWVudC5hdHRhY2htZW50X3R5cGU6IEF0dGFjaG1lbnRUeXBlYFxuICogICAgICAgICAgKGFuIG9wdGlvbmFsIGRpc2NyaW1pbmF0b3IgbGl0ZXJhbCBzbyBjYWxsZXJzIGNhblxuICogICAgICAgICAgYHN3aXRjaCAoYXR0LmF0dGFjaG1lbnRfdHlwZSlgIGluc3RlYWQgb2YgcHJvYmluZ1xuICogICAgICAgICAgd2hpY2ggc3ViLWtleSBpcyBwb3B1bGF0ZWQ7IGNvbXB1dGUgaXQgd2l0aFxuICogICAgICAgICAge0BsaW5rIGRldGVjdEF0dGFjaG1lbnRUeXBlfSkuXG4gKlxuICogICAyLiBFdmVudCB2b2NhYnVsYXJ5IGZvciB0aGUgaGlnaC1sZXZlbCBgZ2VuaWVFdmVudENoYXRgXG4gKiAgICAgIGRyaXZlci4gRWFjaCBldmVudCBpcyBhIGZsYXQgYHoub2JqZWN0YCB3aXRoIGEgYHR5cGVgXG4gKiAgICAgIGxpdGVyYWwgZGlzY3JpbWluYXRvciBhbmQgc25ha2VfY2FzZSBwYXlsb2FkIGZpZWxkcyBob2lzdGVkXG4gKiAgICAgIHRvIHRoZSB0b3AgbGV2ZWwgKG5vIGBwYXlsb2FkYCB3cmFwcGVyKS4gRXZlbnRzIHRoYXQgc2hhcmVcbiAqICAgICAgdGhlIGF0dGFjaG1lbnQtc2NvcGVkIGxvY2F0aW9uIHVzZVxuICogICAgICB7QGxpbmsgR2VuaWVDaGF0TG9jYXRpb25TY2hlbWF9IGFzIGEgYmFzZTsgZXZlbnRzIHRoYXRcbiAqICAgICAgZG9uJ3QgY2FycnkgYW4gYGF0dGFjaG1lbnRfaWRgIChzdGF0dXMsIHJlc3VsdCkgb21pdCBpdC5cbiAqICAgICAge0BsaW5rIEdlbmllQ2hhdEV2ZW50U2NoZW1hfSBidW5kbGVzIHRoZSB2YXJpYW50cyBpbnRvIG9uZVxuICogICAgICBkaXNjcmltaW5hdGVkIHVuaW9uLlxuICpcbiAqIFB1cmUgdHlwZXM6IG5vIHJ1bnRpbWUgaW1wb3J0cyBiZXlvbmQgem9kICsgdGhlIGdlbmVyYXRlZFxuICogYGRhc2hib2FyZHNgIHNjaGVtYXMsIG5vIE5vZGUtb25seSBjb2RlLCBzYWZlIGZvciBicm93c2VyIGJ1bmRsZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgKiBhcyBkYXNoYm9hcmRzIGZyb20gXCIuL2Rhc2hib2FyZHMudHNcIjtcblxuLy8gVGhlIGdlbmVyYXRlZCBTREsgc2NoZW1hcyBsaXZlIGluIHRoZSBzaWJsaW5nIGAuL2Rhc2hib2FyZHMudHNgLCB3cml0dGVuIGJ5IHRoZVxuLy8gZW5naW5lJ3MgY29kZWdlbiBmcm9tIHRoZSB1cHN0cmVhbSBgLmQudHNgLiBBbGlhcyB0aGUgaGFuZGZ1bCBHZW5pZSBleHRlbmRzIHNvXG4vLyB0aGUgd2lkZW5lZCBzY2hlbWFzIGJlbG93IHJlYWQgYWdhaW5zdCBzaG9ydCwgbG9jYWwgbmFtZXMuXG5jb25zdCB7XG4gIGdlbmllQXR0YWNobWVudFNjaGVtYTogU0RLR2VuaWVBdHRhY2htZW50U2NoZW1hLFxuICBnZW5pZU1lc3NhZ2VTY2hlbWE6IFNES0dlbmllTWVzc2FnZVNjaGVtYSxcbiAgZ2VuaWVRdWVyeUF0dGFjaG1lbnRTY2hlbWE6IFNES0dlbmllUXVlcnlBdHRhY2htZW50U2NoZW1hLFxuICBnZW5pZVNwYWNlU2NoZW1hOiBTREtHZW5pZVNwYWNlU2NoZW1hLFxufSA9IGRhc2hib2FyZHM7XG5cbi8qKlxuICogVGhlIFNESydzIGBNZXNzYWdlU3RhdHVzYCB0eXBlLCByZS1leHBvcnRlZCBzbyBjb25zdW1lcnMgb2YgdGhlXG4gKiBHZW5pZSBjb250cmFjdCBnZXQgdGhlIGZ1bGwgd2lyZSB2b2NhYnVsYXJ5IGZyb20gYSBzaW5nbGUgaW1wb3J0XG4gKiBwYXRoIC0gbWlycm9ycyB0aGUgcmUtZXhwb3J0cyBvZiB0aGUgb3RoZXIgU0RLLWRlcml2ZWQgc2NoZW1hc1xuICogYmVsb3cuXG4gKi9cbmV4cG9ydCB0eXBlIE1lc3NhZ2VTdGF0dXMgPSBkYXNoYm9hcmRzLk1lc3NhZ2VTdGF0dXM7XG5cbi8qKiBSdW50aW1lIHZhbGlkYXRvciBmb3IgYSByYXcgR2VuaWUgbWVzc2FnZSBzdGF0dXMgZnJvbSB0aGUgZ2VuZXJhdGVkIFNESyBjb250cmFjdC4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU3RhdHVzU2NoZW1hID0gZGFzaGJvYXJkcy5tZXNzYWdlU3RhdHVzU2NoZW1hO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0aG91Z2h0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogR2VuaWUncyBwZXItcXVlcnkgXCJ0aG91Z2h0c1wiIHN1cmZhY2UuIFRoZXNlIGFwcGVhciBvbiB0aGVcbiAqIGAvbWVzc2FnZXMve2lkfWAgd2lyZSB1bmRlciBgYXR0YWNobWVudHNbaV0ucXVlcnkudGhvdWdodHNbXWAgYnV0XG4gKiBhcmUgbm90IHR5cGVkIG9uIHRoZSBTREsncyBgR2VuaWVRdWVyeUF0dGFjaG1lbnRgIGF0IHYwLjE3LlxuICpcbiAqIEtub3duIHRob3VnaHQgdHlwZXMgb2JzZXJ2ZWQgaW4gcHJvZHVjdGlvbiBwb2xsczpcbiAqXG4gKiAgIC0gYFRIT1VHSFRfVFlQRV9ERVNDUklQVElPTmA6IGEgb25lLXBhcmFncmFwaCByZXN0YXRlbWVudCBvZlxuICogICAgIHdoYXQgdGhlIHVzZXIgYXNrZWQuIFRoZSBmaW5hbCBgcXVlcnkuZGVzY3JpcHRpb25gIGZpZWxkIG9uXG4gKiAgICAgdGhlIGF0dGFjaG1lbnQgY2FycmllcyB0aGUgc2FtZSB0ZXh0LlxuICogICAtIGBUSE9VR0hUX1RZUEVfREFUQV9TT1VSQ0lOR2A6IG1hcmtkb3duIGJ1bGxldHMgb2YgdGhlXG4gKiAgICAgZnVsbHktcXVhbGlmaWVkIGBjYXRhbG9nLnNjaGVtYS50YWJsZWAgc291cmNlcyBHZW5pZSBjaG9zZS5cbiAqICAgLSBgVEhPVUdIVF9UWVBFX1NURVBTYDogdGhlIGhpZ2gtbGV2ZWwgcGxhbiBHZW5pZSB3cm90ZSBiZWZvcmVcbiAqICAgICBydW5uaW5nIFNRTCAob25lIGJ1bGxldCBwZXIgc3RlcCkuXG4gKiAgIC0gYFRIT1VHSFRfVFlQRV9VTkRFUlNUQU5ESU5HYDogYW1iaWd1aXR5IC8gaW50ZXJwcmV0YXRpb25cbiAqICAgICBub3RlcyAoZS5nLiBcIidyZXZlbnVlJyBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBncm9zcyxcbiAqICAgICBuZXQsIG9yIHJlY29nbml6ZWQgcmV2ZW51ZS4uLlwiKS5cbiAqXG4gKiBPcGVuIGF0IHRoZSB0eXBlIGxldmVsIChgfCAoc3RyaW5nICYge30pYCkgc28gYSBuZXcgc2VydmVyLXNpZGVcbiAqIHRob3VnaHQgdHlwZSBkb2Vzbid0IGJyZWFrIGNvbXBpbGF0aW9uOyB0aGUgZm91ciBrbm93biB0eXBlc1xuICogc3RpbGwgbmFycm93IGNvcnJlY3RseSB1bmRlciBgc3dpdGNoYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllVGhvdWdodFR5cGVTY2hlbWEgPSB6XG4gIC5zdHJpbmcoKVxuICAuZGVzY3JpYmUoXCJGb3J3YXJkLWNvbXBhdGlibGUgR2VuaWUgcmVhc29uaW5nIHRob3VnaHQgdHlwZS5cIik7XG5cbmV4cG9ydCB0eXBlIEdlbmllVGhvdWdodFR5cGUgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVRob3VnaHRUeXBlU2NoZW1hPjtcblxuLyoqXG4gKiBPbmUgcmVhc29uaW5nIHN0ZXAgb24gYSBxdWVyeSBhdHRhY2htZW50LiBTZWVcbiAqIHtAbGluayBHZW5pZVRob3VnaHRUeXBlfSBmb3IgdGhlIGtub3duIGB0aG91Z2h0X3R5cGVgIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllVGhvdWdodFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdGhvdWdodF90eXBlOiBHZW5pZVRob3VnaHRUeXBlU2NoZW1hLmRlc2NyaWJlKFwiS2luZCBvZiByZWFzb25pbmcgcmVwcmVzZW50ZWQgYnkgdGhpcyBlbnRyeS5cIiksXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJSZWFzb25pbmcgdGV4dCBlbWl0dGVkIGZvciB0aGlzIHRob3VnaHQuXCIpLFxufSk7XG4vKiogT25lIHR5cGVkIHJlYXNvbmluZyBlbnRyeSBhdHRhY2hlZCB0byBhIEdlbmllIHF1ZXJ5LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVUaG91Z2h0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVUaG91Z2h0U2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYXR0YWNobWVudCBkaXNjcmltaW5hdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBEaXNjcmltaW5hdG9yIGZvciB3aGF0J3MgaW5zaWRlIGEgYEdlbmllQXR0YWNobWVudGAuIEdlbmllIG9ubHlcbiAqIGV2ZXIgcG9wdWxhdGVzIG9uZSBvZiBgcXVlcnlgIC8gYHRleHRgIC8gYHN1Z2dlc3RlZF9xdWVzdGlvbnNgXG4gKiBwZXIgYXR0YWNobWVudC4gT3BlbiB2aWEgYChzdHJpbmcgJiB7fSlgIHNvIGEgbmV3IHNlcnZlci1zaWRlXG4gKiB0eXBlIGRvZXNuJ3QgYnJlYWsgY29tcGlsYXRpb247IHRoZSB0aHJlZSBrbm93biB0eXBlcyBzdGlsbFxuICogbmFycm93IGNvcnJlY3RseSB1bmRlciBgc3dpdGNoYC5cbiAqXG4gKiBMaWZ0ZWQgaW50byB0aGUgc2NoZW1hIGFzIHRoZSBvcHRpb25hbFxuICoge0BsaW5rIEdlbmllQXR0YWNobWVudFNjaGVtYX0uYGF0dGFjaG1lbnRfdHlwZWAgZmllbGQgKGNvbXB1dGVcbiAqIGl0IHdpdGgge0BsaW5rIGRldGVjdEF0dGFjaG1lbnRUeXBlfSkgc28gY29uc3VtZXJzIGNhbiBicmFuY2hcbiAqIG9uIGEgbGl0ZXJhbCBpbnN0ZWFkIG9mIHByb2Jpbmcgd2hpY2ggc3ViLW9iamVjdCBrZXkgaXNcbiAqIHByZXNlbnQuIEFsc28gc3VyZmFjZWQgb24ge0BsaW5rIEF0dGFjaG1lbnRFdmVudH0ncyBwYXlsb2FkIGFzXG4gKiBgYXR0YWNobWVudF90eXBlYCAodnMgYSBiYXJlIGB0eXBlYCkgdG8ga2VlcCB0aGUgZmllbGQgY2xlYXIgb2ZcbiAqIHRoZSBldmVudC11bmlvbiBkaXNjcmltaW5hdG9yIGtleS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFUVEFDSE1FTlRfVFlQRVMgPSBbXG4gIFwicXVlcnlcIixcbiAgXCJ0ZXh0XCIsXG4gIFwic3VnZ2VzdGVkX3F1ZXN0aW9uc1wiLFxuXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgc3RyaW5nW107XG5cbmV4cG9ydCBjb25zdCBLbm93bkF0dGFjaG1lbnRUeXBlU2NoZW1hID0gelxuICAuZW51bShBVFRBQ0hNRU5UX1RZUEVTKVxuICAuZGVzY3JpYmUoXCJBdHRhY2htZW50IGRpc2NyaW1pbmF0b3IgdmFsdWVzIHVuZGVyc3Rvb2QgYnkgdGhpcyBwYWNrYWdlIHZlcnNpb24uXCIpO1xuXG5leHBvcnQgdHlwZSBLbm93bkF0dGFjaG1lbnRUeXBlID0gei5pbmZlcjx0eXBlb2YgS25vd25BdHRhY2htZW50VHlwZVNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBBdHRhY2htZW50VHlwZVNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC5kZXNjcmliZShcIkZvcndhcmQtY29tcGF0aWJsZSBHZW5pZSBhdHRhY2htZW50IGRpc2NyaW1pbmF0b3IuXCIpO1xuXG5leHBvcnQgdHlwZSBBdHRhY2htZW50VHlwZSA9IHouaW5mZXI8dHlwZW9mIEF0dGFjaG1lbnRUeXBlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLSB3aWRlbmVkIHdpcmUgc2NoZW1hcyArIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIGBHZW5pZVF1ZXJ5QXR0YWNobWVudGAgd2lkZW5lZCB3aXRoIHRoZSBgdGhvdWdodHNbXWAgZmllbGQgdGhlXG4gKiBHZW5pZSB3aXJlIGV4cG9zZXMgYnV0IHRoZSBTREsgZG9lc24ndCBjdXJyZW50bHkgdHlwZS4gRXZlcnlcbiAqIG90aGVyIGZpZWxkIChgZGVzY3JpcHRpb25gLCBgcXVlcnlgLCBgc3RhdGVtZW50X2lkYCxcbiAqIGBxdWVyeV9yZXN1bHRfbWV0YWRhdGFgLCBgdGl0bGVgLCBgcGFyYW1ldGVyc2AsXG4gKiBgbGFzdF91cGRhdGVkX3RpbWVzdGFtcGAsIGBpZGApIGZsb3dzIHRocm91Z2ggdmVyYmF0aW0gZnJvbVxuICogdGhlIFNESyBzY2hlbWEuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVF1ZXJ5QXR0YWNobWVudFNjaGVtYSA9IFNES0dlbmllUXVlcnlBdHRhY2htZW50U2NoZW1hLmV4dGVuZCh7XG4gIHRob3VnaHRzOiB6LmFycmF5KEdlbmllVGhvdWdodFNjaGVtYSkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIFF1ZXJ5IGF0dGFjaG1lbnQgd2lkZW5lZCB3aXRoIEdlbmllJ3Mgc3RyZWFtZWQgcmVhc29uaW5nIHRob3VnaHRzLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVRdWVyeUF0dGFjaG1lbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVF1ZXJ5QXR0YWNobWVudFNjaGVtYT47XG5cbi8qKlxuICogUHVycG9zZSBhdHRhY2hlZCB0byBhIEdlbmllIHRleHQgcmVzcG9uc2UuXG4gKlxuICogVGhlIGdlbmVyYXRlZCBEYXRhYnJpY2tzIFNESyBzY2hlbWEgY3VycmVudGx5IGtub3dzIG9ubHlcbiAqIGBGT0xMT1dfVVBfUVVFU1RJT05gLCB3aGlsZSB0aGUgbGl2ZSBHZW5pZSBBUEkgYWxzbyBlbWl0c1xuICogYFRFWFRfQVRUQUNITUVOVF9QVVJQT1NFX0FOU1dFUmAgZm9yIHRoZSBwcmltYXJ5IGFuc3dlciB0ZXh0LiBLZWVwIHRoZVxuICoga25vd24gdmFsdWVzIGRpc2NvdmVyYWJsZSBhbmQgYWNjZXB0IGZ1dHVyZSBzdHJpbmcgdmFsdWVzIHNvIGFuIGFkZGl0aXZlXG4gKiBzZXJ2ZXItc2lkZSBlbnVtIGNoYW5nZSBjYW5ub3QgaW52YWxpZGF0ZSBhbiBvdGhlcndpc2UgY29tcGxldGUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllVGV4dEF0dGFjaG1lbnRQdXJwb3NlU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLmRlc2NyaWJlKFwiRm9yd2FyZC1jb21wYXRpYmxlIHNlbWFudGljIHB1cnBvc2UgZm9yIGEgR2VuaWUgdGV4dCBhdHRhY2htZW50LlwiKTtcblxuZXhwb3J0IHR5cGUgR2VuaWVUZXh0QXR0YWNobWVudFB1cnBvc2UgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVRleHRBdHRhY2htZW50UHVycG9zZVNjaGVtYT47XG5cbi8qKlxuICogVGV4dCBhdHRhY2htZW50IHdpZGVuZWQgZm9yIGZvcndhcmQtY29tcGF0aWJsZSBwdXJwb3NlIHZhbHVlcyBhbmQgb3B0aW9uYWxcbiAqIEFnZW50IE1vZGUgdGFibGUgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVRleHRBdHRhY2htZW50U2NoZW1hID0gZGFzaGJvYXJkcy50ZXh0QXR0YWNobWVudFNjaGVtYS5leHRlbmQoe1xuICBwdXJwb3NlOiBHZW5pZVRleHRBdHRhY2htZW50UHVycG9zZVNjaGVtYS5vcHRpb25hbCgpLFxuICBtZXRhZGF0YTogei51bmtub3duKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkFnZW50IE1vZGUgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhpcyB0ZXh0IHJlc3BvbnNlLlwiKSxcbn0pO1xuLyoqIE5hcnJhdGl2ZSB0ZXh0IGF0dGFjaG1lbnQsIGluY2x1ZGluZyBpdHMgb3B0aW9uYWwgc2VtYW50aWMgcHVycG9zZS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllVGV4dEF0dGFjaG1lbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVRleHRBdHRhY2htZW50U2NoZW1hPjtcblxuLyoqXG4gKiBgR2VuaWVBdHRhY2htZW50YCB3aXRoOlxuICpcbiAqICAgLSBgcXVlcnlgIHJlLXR5cGVkIHRvIHRoZSB0aG91Z2h0cy1hd2FyZVxuICogICAgIHtAbGluayBHZW5pZVF1ZXJ5QXR0YWNobWVudFNjaGVtYX0uXG4gKiAgIC0gYGF0dGFjaG1lbnRfdHlwZWAgZGlzY3JpbWluYXRvciBsaXRlcmFsXG4gKiAgICAgKHtAbGluayBBdHRhY2htZW50VHlwZX0pIHNvIGNvbnN1bWVycyBjYW4gYHN3aXRjaFxuICogICAgIChhdHQuYXR0YWNobWVudF90eXBlKWAgdG8gbmFycm93IHdoaWNoIHN1Yi1vYmplY3QgaXNcbiAqICAgICBwb3B1bGF0ZWQuIE9wdGlvbmFsIG9uIHRoZSB3aXJlIChHZW5pZSBkb2Vzbid0IHNlbmQgaXQpO1xuICogICAgIGNhbGxlcnMgY29tcHV0ZSBpdCB3aXRoIHtAbGluayBkZXRlY3RBdHRhY2htZW50VHlwZX0gd2hlblxuICogICAgIHRoZXkgd2FudCB0aGUgbGl0ZXJhbCB1cC1mcm9udC5cbiAqXG4gKiBgdGV4dGAgaXMgcmUtdHlwZWQgdG8gdGhlIGZvcndhcmQtY29tcGF0aWJsZVxuICoge0BsaW5rIEdlbmllVGV4dEF0dGFjaG1lbnRTY2hlbWF9LiBgYXR0YWNobWVudF9pZGAgYW5kXG4gKiBgc3VnZ2VzdGVkX3F1ZXN0aW9uc2AgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZC4gYGF0dGFjaG1lbnRfaWRgIGlzIGdlbnVpbmVseVxuICogb3B0aW9uYWwgb24gdGhlIHdpcmU6XG4gKiB0aGUgZmlyc3QgdGV4dCBhdHRhY2htZW50IEdlbmllIGVtaXRzIHBlciB0dXJuICh0aGUgXCJtYWluXG4gKiBhbnN3ZXIgdGV4dFwiKSBhcnJpdmVzIHdpdGggbm8gaWQsIG9ubHkgdGhlIGZvbGxvdy11cCB0ZXh0XG4gKiBhdHRhY2htZW50IGdldHMgb25lLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVBdHRhY2htZW50U2NoZW1hID0gU0RLR2VuaWVBdHRhY2htZW50U2NoZW1hLmV4dGVuZCh7XG4gIHF1ZXJ5OiBHZW5pZVF1ZXJ5QXR0YWNobWVudFNjaGVtYS5vcHRpb25hbCgpLFxuICB0ZXh0OiBHZW5pZVRleHRBdHRhY2htZW50U2NoZW1hLm9wdGlvbmFsKCksXG4gIGF0dGFjaG1lbnRfdHlwZTogQXR0YWNobWVudFR5cGVTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuLyoqIEdlbmllIG1lc3NhZ2UgYXR0YWNobWVudCB3aXRoIGFuIG9wdGlvbmFsIGNvbXB1dGVkIGRpc2NyaW1pbmF0b3IuICovXG5leHBvcnQgdHlwZSBHZW5pZUF0dGFjaG1lbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUF0dGFjaG1lbnRTY2hlbWE+O1xuXG4vKipcbiAqIGBHZW5pZU1lc3NhZ2VgIHdpZGVuZWQgd2l0aDpcbiAqXG4gKiAgIC0gYGF1dG9fcmVnZW5lcmF0ZV9jb3VudGA6IG51bWJlciBzdGFtcGVkIG9uIGV2ZXJ5IHdpcmVcbiAqICAgICBtZXNzYWdlIHRoYXQgdGhlIFNESyB0eXBlIG9taXRzIGF0IHYwLjE3LlxuICogICAtIGBhdHRhY2htZW50c2A6IHJlLXR5cGVkIHRvIHRoZSBsb2NhbFxuICogICAgIHtAbGluayBHZW5pZUF0dGFjaG1lbnRTY2hlbWF9IHNvXG4gKiAgICAgYGF0dGFjaG1lbnQucXVlcnk/LnRob3VnaHRzYCAoYW5kIHRoZVxuICogICAgIGBhdHRhY2htZW50X3R5cGVgIGRpc2NyaW1pbmF0b3IpIGlzIHJlYWNoYWJsZSB3aXRob3V0IGFcbiAqICAgICBjYXN0LlxuICpcbiAqIEV2ZXJ5IG90aGVyIGZpZWxkIChgaWRgLCBgc3BhY2VfaWRgLCBgY29udmVyc2F0aW9uX2lkYCxcbiAqIGB1c2VyX2lkYCwgYGNyZWF0ZWRfdGltZXN0YW1wYCwgYGxhc3RfdXBkYXRlZF90aW1lc3RhbXBgLFxuICogYHN0YXR1c2AsIGBjb250ZW50YCwgYG1lc3NhZ2VfaWRgLCBgcXVlcnlfcmVzdWx0YCwgYGVycm9yYCxcbiAqIGBmZWVkYmFja2ApIHBhc3NlcyB0aHJvdWdoIGZyb20gdGhlIFNESyBzY2hlbWEuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZU1lc3NhZ2VTY2hlbWEgPSBTREtHZW5pZU1lc3NhZ2VTY2hlbWEuZXh0ZW5kKHtcbiAgYXR0YWNobWVudHM6IHouYXJyYXkoR2VuaWVBdHRhY2htZW50U2NoZW1hKS5vcHRpb25hbCgpLFxuICBhdXRvX3JlZ2VuZXJhdGVfY291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIEdlbmllIG1lc3NhZ2Ugc25hcHNob3Qgd2lkZW5lZCB3aXRoIHR5cGVkIGF0dGFjaG1lbnRzIGFuZCByZWdlbmVyYXRpb24gY291bnQuICovXG5leHBvcnQgdHlwZSBHZW5pZU1lc3NhZ2UgPSB6LmluZmVyPHR5cGVvZiBHZW5pZU1lc3NhZ2VTY2hlbWE+O1xuXG4vKipcbiAqIERvbWFpbiBwcm9qZWN0aW9uIG9mIHtAbGluayBHZW5pZU1lc3NhZ2VTY2hlbWF9IHRoYXQgZHJvcHMgZXZlcnlcbiAqIHR1cm4tbGV2ZWwgZmllbGQgKGBpZGAsIGBzdGF0dXNgLCBgY3JlYXRlZF90aW1lc3RhbXBgLFxuICogYHF1ZXJ5X3Jlc3VsdGAsIC4uLikgYW5kIHlpZWxkcyBqdXN0IHRoZSByZXNwb25zZSBwYXlsb2FkIGFzIGFcbiAqIGZsYXQgYEdlbmllQXR0YWNobWVudFtdYC4gUGFyc2VzIHRoZSBzYW1lIHdpcmUgc2hhcGUgYXNcbiAqIHtAbGluayBHZW5pZU1lc3NhZ2VTY2hlbWF9OyBtaXNzaW5nIGBhdHRhY2htZW50c2AgZGVmYXVsdHMgdG9cbiAqIGBbXWAgc28gdGhlIG91dHB1dCBpcyBhbHdheXMgYW4gYXJyYXkuXG4gKlxuICogVXNlIHdoZW4gY29uc3VtZXJzIG9ubHkgY2FyZSBhYm91dCB0aGUgbW9kZWwncyByZXNwb25zZVxuICogYXR0YWNobWVudHMgYW5kIG5vdCB0aGUgc3Vycm91bmRpbmcgbWVzc2FnZSBlbnZlbG9wZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllUmVzcG9uc2VTY2hlbWEgPSBHZW5pZU1lc3NhZ2VTY2hlbWEudHJhbnNmb3JtKChtKSA9PiBtLmF0dGFjaG1lbnRzID8/IFtdKTtcbi8qKiBOb3JtYWxpemVkIGF0dGFjaG1lbnQgYXJyYXkgZXh0cmFjdGVkIGZyb20gYSBHZW5pZSBtZXNzYWdlIHJlc3BvbnNlLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEdlbmllUmVzcG9uc2VTY2hlbWE+O1xuXG4vKipcbiAqIGBHZW5pZVNwYWNlYCB3aWRlbmVkIHdpdGggYW4gb3B0aW9uYWwgYHNlcmlhbGl6ZWRfc3BhY2VgIGZpZWxkXG4gKiBjYXJyeWluZyBhIEpTT04tc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGFjZSdzIGZ1bGxcbiAqIGRlZmluaXRpb24gKGNhdGFsb2dzLCBzY2hlbWFzLCB0YWJsZXMsIHNhbXBsZSBxdWVzdGlvbnMsIHByb21wdHMsXG4gKiBldGMuKSBhcyBleHBvcnRlZCBieSB0aGUgd29ya3NwYWNlIGV4cG9ydCBlbmRwb2ludC5cbiAqXG4gKiBUaGUgYmFzZSBTREsgc2hhcGUgKGBkZXNjcmlwdGlvbmAsIGBzcGFjZV9pZGAsIGB0aXRsZWAsXG4gKiBgd2FyZWhvdXNlX2lkYCkgY292ZXJzIHRoZSBkaXJlY3RvcnktbGlzdGluZyBzdXJmYWNlIC0gZW5vdWdoIHRvXG4gKiByb3V0ZSBhIGNoYXQuIGBzZXJpYWxpemVkX3NwYWNlYCBpcyBvcHQtaW4gc28gY2FsbGVycyB0aGF0IG5lZWRcbiAqIHRoZSBmdWxsIHNwYWNlIHNjaGVtYSAoZS5nLiB0byBzZWVkIGEgc3lzdGVtIHByb21wdCBvciB0byBzaGlwXG4gKiB0aGUgZGVmaW5pdGlvbiB0byBhbiBhZ2VudCkgY2FuIGF0dGFjaCBpdCB3aXRob3V0IGEgc2Vjb25kIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVNwYWNlU2NoZW1hID0gU0RLR2VuaWVTcGFjZVNjaGVtYS5leHRlbmQoe1xuICBzZXJpYWxpemVkX3NwYWNlOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIlRoZSBjb250ZW50cyBvZiB0aGUgR2VuaWUgU3BhY2UgaW4gc2VyaWFsaXplZCBzdHJpbmcgZm9ybS4gVGhpcyBmaWVsZCBpcyBleGNsdWRlZCBpbiBMaXN0IEdlbmllIHNwYWNlcyByZXNwb25zZXMuIFRoaXMgZmllbGQgcHJvdmlkZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgSlNPTiBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBzcGFjZSdzIGxheW91dCBhbmQgY29tcG9uZW50cy5cIixcbiAgICApLFxufSk7XG4vKiogR2VuaWUgc3BhY2UgbWV0YWRhdGEgd2l0aCB0aGUgaWRlbnRpZmllcnMgcmVxdWlyZWQgYnkgY2hhdCBjb25zdW1lcnMuICovXG5leHBvcnQgdHlwZSBHZW5pZVNwYWNlID0gei5pbmZlcjx0eXBlb2YgR2VuaWVTcGFjZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0ZXJtaW5hbCBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBUZXJtaW5hbCBHZW5pZSBtZXNzYWdlIHN0YXR1c2VzLiBUaGUgcG9sbGluZyBsb29wIGluIHRoZSBjaGF0XG4gKiBkcml2ZXIgc3RvcHMgYXMgc29vbiBhcyB0aGUgbGF0ZXN0IG1lc3NhZ2UgaGFzIG9uZSBvZiB0aGVzZVxuICogc3RhdHVzZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBURVJNSU5BTF9TVEFUVVNFUyA9IFtcIkNPTVBMRVRFRFwiLCBcIkZBSUxFRFwiLCBcIkNBTkNFTExFRFwiXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsU3RhdHVzU2NoZW1hID0gelxuICAuZW51bShURVJNSU5BTF9TVEFUVVNFUylcbiAgLmRlc2NyaWJlKFwiTWVzc2FnZSBzdGF0dXMgdGhhdCBlbmRzIGEgR2VuaWUgdHVybiBhbmQgcHJvZHVjZXMgYSBmaW5hbCByZXN1bHQgZXZlbnQuXCIpO1xuXG5leHBvcnQgdHlwZSBUZXJtaW5hbFN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIFRlcm1pbmFsU3RhdHVzU2NoZW1hPjtcblxuLyoqIE5hcnJvdyBgTWVzc2FnZVN0YXR1cyB8IHVuZGVmaW5lZGAgdG8gYSB7QGxpbmsgVGVybWluYWxTdGF0dXN9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGVybWluYWxTdGF0dXMoczogTWVzc2FnZVN0YXR1cyB8IHVuZGVmaW5lZCk6IHMgaXMgVGVybWluYWxTdGF0dXMge1xuICByZXR1cm4gcyAhPT0gdW5kZWZpbmVkICYmIChURVJNSU5BTF9TVEFUVVNFUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocyk7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHJhdyBHZW5pZSB3aXJlIHN0YXR1cyAoYEZFVENISU5HX01FVEFEQVRBYCxcbiAqIGBBU0tJTkdfQUlgLCBgRVhFQ1VUSU5HX1FVRVJZYCwgLi4uKSBpbnRvIGEgc2hvcnQsIHNlbnRlbmNlLWNhc2VkXG4gKiBsYWJlbCBzYWZlIHRvIGRyb3AgaW50byBhIFVJIHBpbGwuIEtub3duIHN0YXRlcyBnZXQgYSBjdXJhdGVkXG4gKiBsYWJlbDsgdW5rbm93biBzdGF0ZXMgZmFsbCBiYWNrIHRvIGBzdHJpbmdVdGlscy50b2tlbml6ZVdpdGhPcHRpb25zYFxuICogc28gbmV3IHN0YXRlcyBzdGlsbCByZW5kZXIgY2xlYW5seSB3aXRob3V0IGNvZGUgY2hhbmdlcy5cbiAqXG4gKiBQdXJlIChubyBOb2RlLW9ubHkgZGVwcyksIHNhZmUgZm9yIGJyb3dzZXIgYnVuZGxlcy4gQm90aCB0aGVcbiAqIEdlbmllIGFnZW50IChzZXJ2ZXIpIGFuZCBhbnkgVUkgdGhhdCBzdWJzY3JpYmVzIHRvIHN0YXR1cyBldmVudHNcbiAqIGNhbGwgdGhpcyBzbyBsYWJlbHMgc3RheSBpbiBsb2NrLXN0ZXAgYWNyb3NzIHRoZSB3aXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaHVtYW5pemVTdGF0dXMoc3RhdHVzOiBNZXNzYWdlU3RhdHVzKTogc3RyaW5nIHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlIFwiRkVUQ0hJTkdfTUVUQURBVEFcIjpcbiAgICAgIHJldHVybiBcIkZldGNoaW5nIG1ldGFkYXRhXCI7XG4gICAgY2FzZSBcIkFTS0lOR19BSVwiOlxuICAgICAgcmV0dXJuIFwiQXNraW5nIEdlbmllXCI7XG4gICAgY2FzZSBcIkVYRUNVVElOR19RVUVSWVwiOlxuICAgICAgcmV0dXJuIFwiUnVubmluZyBTUUwgcXVlcnlcIjtcbiAgICBjYXNlIFwiRklMVEVSSU5HX0NPTlRFWFRcIjpcbiAgICAgIHJldHVybiBcIkZpbHRlcmluZyBjb250ZXh0XCI7XG4gICAgY2FzZSBcIlBFTkRJTkdfV0FSRUhPVVNFXCI6XG4gICAgICByZXR1cm4gXCJXYWl0aW5nIGZvciB3YXJlaG91c2VcIjtcbiAgICBjYXNlIFwiQ09NUExFVEVEXCI6XG4gICAgICByZXR1cm4gXCJDb21wbGV0ZWRcIjtcbiAgICBjYXNlIFwiRkFJTEVEXCI6XG4gICAgICByZXR1cm4gXCJGYWlsZWRcIjtcbiAgICBjYXNlIFwiQ0FOQ0VMTEVEXCI6XG4gICAgICByZXR1cm4gXCJDYW5jZWxsZWRcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uc3RyaW5nVXRpbHMudG9rZW5pemVXaXRoT3B0aW9ucyh7IGNhcGl0YWxpemU6IHRydWUsIGxvd2VyQ2FzZTogdHJ1ZSB9LCBzdGF0dXMpLFxuICAgICAgXS5qb2luKFwiIFwiKTtcbiAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhdHRhY2htZW50IHR5cGUgaGVscGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBJbnNwZWN0IGEge0BsaW5rIEdlbmllQXR0YWNobWVudH0gYW5kIHJldHVybiB0aGVcbiAqIHtAbGluayBBdHRhY2htZW50VHlwZX0gb2YgcGF5bG9hZCBpdCBjYXJyaWVzLiBSZXR1cm5zIHRoZSBmaXJzdFxuICoga25vd24gc3ViLW9iamVjdCB0aGF0J3MgcHJlc2VudDsgaWYgbm9uZSBvZiB0aGUga25vd24gb25lcyBhcmVcbiAqIHBvcHVsYXRlZCwgZmFsbHMgYmFjayB0byB0aGUgZmlyc3Qgbm9uLWJvb2trZWVwaW5nIGtleVxuICogKGZvcndhcmQtY29tcGF0IGZvciB0eXBlcyB3ZSBkb24ndCBtb2RlbCB5ZXQpLCBlbHNlIGBcInVua25vd25cImAuXG4gKlxuICogSG9ub3JzIGEgcHJlLXNldCBgYXR0YWNobWVudF90eXBlYCBpZiBvbmUgaXMgYWxyZWFkeSBvbiB0aGVcbiAqIHZhbHVlLCBzbyB0aGlzIGlzIGlkZW1wb3RlbnQgYWNyb3NzIHJlLWRldGVjdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RBdHRhY2htZW50VHlwZShhdHQ6IEdlbmllQXR0YWNobWVudCk6IEF0dGFjaG1lbnRUeXBlIHtcbiAgaWYgKGF0dC5hdHRhY2htZW50X3R5cGUpIHJldHVybiBhdHQuYXR0YWNobWVudF90eXBlO1xuICBpZiAoYXR0LnF1ZXJ5KSByZXR1cm4gXCJxdWVyeVwiO1xuICBpZiAoYXR0LnRleHQpIHJldHVybiBcInRleHRcIjtcbiAgaWYgKGF0dC5zdWdnZXN0ZWRfcXVlc3Rpb25zKSByZXR1cm4gXCJzdWdnZXN0ZWRfcXVlc3Rpb25zXCI7XG4gIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhhdHQpKSB7XG4gICAgaWYgKGsgIT09IFwiYXR0YWNobWVudF9pZFwiICYmIGsgIT09IFwiYXR0YWNobWVudF90eXBlXCIpIHJldHVybiBrO1xuICB9XG4gIHJldHVybiBcInVua25vd25cIjtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZW5pZUNoYXQgZXZlbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFdoZXJlIG9uIHRoZSB3aXJlIGFuIGV2ZW50IHdhcyBvYnNlcnZlZC4gU3ByZWFkIGludG8gZXZlcnlcbiAqIGF0dGFjaG1lbnQtc2NvcGVkIGV2ZW50IHBheWxvYWQgc28gc3Vic2NyaWJlcnMgY2FuIHJvdXRlLCBsb2csXG4gKiBvciBjb3JyZWxhdGUgd2l0aG91dCByZS13YWxraW5nIHRoZSBtZXNzYWdlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgc3BhY2VfaWRgOiB0aGUgR2VuaWUgc3BhY2UgdGhlIGNvbnZlcnNhdGlvbiBsaXZlcyBpbi5cbiAqICAgLSBgY29udmVyc2F0aW9uX2lkYDogY29udmVyc2F0aW9uIGlkIG9uY2UgR2VuaWUgaGFzIGFzc2lnbmVkIG9uZS5cbiAqICAgLSBgbWVzc2FnZV9pZGA6IEdlbmllIG1lc3NhZ2UgaWQgZm9yIHRoZSBhY3RpdmUgdHVybi5cbiAqICAgLSBgYXR0YWNobWVudF9pZGA6IGF0dGFjaG1lbnQgdGhlIGV2ZW50IGNhbWUgZnJvbS4gT3B0aW9uYWxcbiAqICAgICBiZWNhdXNlIEdlbmllIHNvbWV0aW1lcyBlbWl0cyBhbiBhbm9ueW1vdXMgbWFpbi1hbnN3ZXJcbiAqICAgICBhdHRhY2htZW50IHdpdGhvdXQgYW4gaWQ7IHRob3NlIHN0aWxsIGdldCBldmVudHMsIGp1c3Qgd2l0aFxuICogICAgIGBhdHRhY2htZW50X2lkYCB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc3BhY2VfaWQ6IHouc3RyaW5nKCksXG4gIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGF0dGFjaG1lbnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIENvbnZlcnNhdGlvbiwgbWVzc2FnZSwgYW5kIGF0dGFjaG1lbnQgY29vcmRpbmF0ZXMgc2hhcmVkIGJ5IGF0dGFjaG1lbnQgZXZlbnRzLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVDaGF0TG9jYXRpb24gPSB6LmluZmVyPHR5cGVvZiBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYT47XG5cbi8qKlxuICogTGlmZWN5Y2xlIGV2ZW50OiB0aGUgcXVlc3Rpb24gdGhpcyB0dXJuIGlzIGFza2luZyBHZW5pZS4gRmlyZXNcbiAqIG9uY2UgcGVyIGBnZW5pZUV2ZW50Q2hhdGAgY2FsbCwgdGhlIGZpcnN0IHRpbWUgdGhlIHVuZGVybHlpbmdcbiAqIGBnZW5pZUNoYXRgIGxvb3AgeWllbGRzIGEgYEdlbmllTWVzc2FnZWAuIENhcnJpZXMgdGhlIHByb21wdFxuICogdGV4dCBHZW5pZSBlY2hvZWQgYmFjayBvbiBgbWVzc2FnZS5jb250ZW50YCBhbmQgdGhlIGFzc2lnbmVkXG4gKiBgbWVzc2FnZV9pZGAgc28gc3Vic2NyaWJlcnMgY2FuIGdyb3VwIGV2ZXJ5IHN1YnNlcXVlbnQgZXZlbnRcbiAqIGZvciB0aGlzIHR1cm4gdW5kZXIgb25lIHN0YWJsZSBrZXkuIGBjb252ZXJzYXRpb25faWRgIGlzXG4gKiBwb3B1bGF0ZWQgZm9yIGJvdGggb3BlbmluZyBhbmQgZm9sbG93LXVwIHR1cm5zIChHZW5pZSBhc3NpZ25zXG4gKiBpdCBvbiBgc3RhcnRDb252ZXJzYXRpb25gKS5cbiAqXG4gKiBEZWZlcnJlZCAoaW5zdGVhZCBvZiBmaXJlZCBzeW5jaHJvbm91c2x5IG9uIGVudHJ5KSBzbyB0aGVcbiAqIGBtZXNzYWdlX2lkYCBpcyBhdmFpbGFibGUgd2hlbiB0aGUgZXZlbnQgbGFuZHMgLSB0aGF0IG9uZSByb3VuZFxuICogdHJpcCBjb3N0cyB+MjAwbXMgYnV0IGxldHMgVUlzIHJlbmRlciBxdWVzdGlvbiAvIHRoaW5raW5nIC9cbiAqIHF1ZXJ5IC8gdGV4dCBhcyBhIHNpbmdsZSBncm91cGVkIGJsb2NrIHBlciBHZW5pZSBjYWxsIGluc3RlYWRcbiAqIG9mIGEgZmxhdCBzdHJlYW0uXG4gKlxuICogYGF0dGFjaG1lbnRfaWRgIGlzIGludGVudGlvbmFsbHkgYWJzZW50IC0gcXVlc3Rpb25zIGFyZSB0dXJuXG4gKiBzY29wZWQsIG5vdCBhdHRhY2htZW50IHNjb3BlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uRXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5vbWl0KHtcbiAgYXR0YWNobWVudF9pZDogdHJ1ZSxcbn0pLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInF1ZXN0aW9uXCIpLFxuICBjb250ZW50OiB6LnN0cmluZygpLFxufSk7XG4vKiogSW5pdGlhbCBldmVudCBjYXJyeWluZyB0aGUgdXNlcidzIHF1ZXN0aW9uIGFmdGVyIEdlbmllIGFzc2lnbnMgYSBtZXNzYWdlIGlkLiAqL1xuZXhwb3J0IHR5cGUgUXVlc3Rpb25FdmVudCA9IHouaW5mZXI8dHlwZW9mIFF1ZXN0aW9uRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIExpZmVjeWNsZSBldmVudDogcmF3IGBHZW5pZU1lc3NhZ2VgIHNuYXBzaG90IGZvciB0aGUgYWN0aXZlXG4gKiB0dXJuLiBGaXJlcyBvbmNlIHBlciBwb2xsIHlpZWxkLiBUaGUgZnVsbCBtZXNzYWdlIHNoYXBlXG4gKiAoaW5jbHVkaW5nIHRoZSB3aWRlbmVkIHRob3VnaHQgLyByZWdlbiAvIGF0dGFjaG1lbnQtdHlwZVxuICogZmllbGRzKSBpcyBleHBvc2VkIGlubGluZSBhcyBgbWVzc2FnZWA7IGNvbnN1bWVycyBuYXJyb3cgb25cbiAqIGBldmVudC50eXBlID09PSBcIm1lc3NhZ2VcImAgYW5kIHJlYWNoIGZvciBgZXZlbnQubWVzc2FnZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlRXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5vbWl0KHtcbiAgYXR0YWNobWVudF9pZDogdHJ1ZSxcbn0pLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcIm1lc3NhZ2VcIiksXG4gIG1lc3NhZ2U6IEdlbmllTWVzc2FnZVNjaGVtYSxcbn0pO1xuLyoqIFJhdyBHZW5pZSBtZXNzYWdlIHNuYXBzaG90IGVtaXR0ZWQgb24gZXZlcnkgcG9sbCBpdGVyYXRpb24uICovXG5leHBvcnQgdHlwZSBNZXNzYWdlRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBNZXNzYWdlRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIFRvcC1sZXZlbCBgbWVzc2FnZS5zdGF0dXNgIHRyYW5zaXRpb25lZC4gRmlyZXMgZm9yIGV2ZXJ5XG4gKiBkaXN0aW5jdCBzdGF0dXMgc2VlbiBvbiB0aGUgd2lyZSAoZS5nLiBgU1VCTUlUVEVEYCAtPlxuICogYEZJTFRFUklOR19DT05URVhUYCAtPiBgQVNLSU5HX0FJYCAtPiBgUEVORElOR19XQVJFSE9VU0VgIC0+XG4gKiBgQVNLSU5HX0FJYCAtPiBgQ09NUExFVEVEYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGF0dXNFdmVudFNjaGVtYSA9IEdlbmllQ2hhdExvY2F0aW9uU2NoZW1hLm9taXQoe1xuICBhdHRhY2htZW50X2lkOiB0cnVlLFxufSkuZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwic3RhdHVzXCIpLFxuICBzdGF0dXM6IE1lc3NhZ2VTdGF0dXNTY2hlbWEsXG4gIHByZXZpb3VzX3N0YXR1czogTWVzc2FnZVN0YXR1c1NjaGVtYS5vcHRpb25hbCgpLFxufSk7XG4vKiogTWVzc2FnZS1zdGF0dXMgdHJhbnNpdGlvbiwgaW5jbHVkaW5nIHRoZSBwcmV2aW91cyBzdGF0dXMgd2hlbiBhdmFpbGFibGUuICovXG5leHBvcnQgdHlwZSBTdGF0dXNFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN0YXR1c0V2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBBIG5ldyBhdHRhY2htZW50IHNsb3QgYXBwZWFyZWQgaW4gYG1lc3NhZ2UuYXR0YWNobWVudHNbXWAuXG4gKiBGaXJlcyBleGFjdGx5IG9uY2UgcGVyIGF0dGFjaG1lbnQgKG1hdGNoZWQgYnkgYGF0dGFjaG1lbnRfaWRgLFxuICogcG9zaXRpb25hbGx5IGZvciBhbm9ueW1vdXMgYXR0YWNobWVudHMpIHRoZSBmaXJzdCB0aW1lIHdlIHNlZVxuICogaXQuIFRoZSBzbG90J3MgcGF5bG9hZCBraW5kIGxhbmRzIGluIGBhdHRhY2htZW50X3R5cGVgIHNvIHRoZVxuICogb3V0ZXIgYHR5cGVgIGRpc2NyaW1pbmF0b3Igc3RheXMgdW5hbWJpZ3VvdXMuXG4gKi9cbmV4cG9ydCBjb25zdCBBdHRhY2htZW50RXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhdHRhY2htZW50XCIpLFxuICBpbmRleDogei5udW1iZXIoKSxcbiAgYXR0YWNobWVudF90eXBlOiBBdHRhY2htZW50VHlwZVNjaGVtYSxcbn0pO1xuLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIG5ldyB0eXBlZCBhdHRhY2htZW50IGFwcGVhcnMgb24gdGhlIG1lc3NhZ2UuICovXG5leHBvcnQgdHlwZSBBdHRhY2htZW50RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBBdHRhY2htZW50RXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIEEgbmV3IHJlYXNvbmluZyBzdGVwIGFwcGVhcmVkIG9uIGEgcXVlcnkgYXR0YWNobWVudFxuICogKGBhdHRhY2htZW50c1tpXS5xdWVyeS50aG91Z2h0c1tpXWApLiBEZWR1cGxpY2F0ZWQgcGVyXG4gKiBgKHRob3VnaHRfdHlwZSwgY29udGVudClgIHR1cGxlIHdpdGhpbiBhbiBhdHRhY2htZW50IHNvXG4gKiBzdWJzY3JpYmVycyBkb24ndCBzZWUgdGhlIHNhbWUgdGhvdWdodCBtdWx0aXBsZSB0aW1lcyAtIEdlbmllXG4gKiBzb21ldGltZXMgbXV0YXRlcyBleGlzdGluZyB0aG91Z2h0IHNsb3RzIGluIHBsYWNlLCBzbyB0aGUgZGlmZlxuICogaXMgdmFsdWUtYmFzZWQgcmF0aGVyIHRoYW4gcG9zaXRpb25hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRoaW5raW5nRXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJ0aGlua2luZ1wiKSxcbiAgdGV4dDogei5zdHJpbmcoKSxcbiAgdGhvdWdodF90eXBlOiBHZW5pZVRob3VnaHRUeXBlU2NoZW1hLFxufSk7XG4vKiogSW5jcmVtZW50YWwgR2VuaWUgcmVhc29uaW5nIGV2ZW50IGRlcml2ZWQgZnJvbSBxdWVyeSB0aG91Z2h0cy4gKi9cbmV4cG9ydCB0eXBlIFRoaW5raW5nRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBUaGlua2luZ0V2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBBIHRleHQtYXR0YWNobWVudCBgY29udGVudGAgZmllbGQgYXBwZWFyZWQgb3IgY2hhbmdlZFxuICogKGBhdHRhY2htZW50c1tpXS50ZXh0LmNvbnRlbnRgKS4gRmlyZXMgd2hlbmV2ZXIgdGhlIHNuYXBzaG90XG4gKiB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHByZXZpb3VzIG9uZSBmb3IgdGhlIHNhbWUgYXR0YWNobWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRFdmVudFNjaGVtYSA9IEdlbmllQ2hhdExvY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gIHRleHQ6IHouc3RyaW5nKCksXG59KTtcbi8qKiBOYXJyYXRpdmUgYW5zd2VyIGZyYWdtZW50IGVtaXR0ZWQgZnJvbSBhIEdlbmllIHRleHQgYXR0YWNobWVudC4gKi9cbmV4cG9ydCB0eXBlIFRleHRFdmVudCA9IHouaW5mZXI8dHlwZW9mIFRleHRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogU1FMIHdhcyBmaW5hbGl6ZWQgb24gYSBxdWVyeSBhdHRhY2htZW50XG4gKiAoYGF0dGFjaG1lbnRzW2ldLnF1ZXJ5LnF1ZXJ5YCkuIEZpcmVzIG9uY2Ugd2hlbiB0aGUgU1FMIHN0cmluZ1xuICogdHJhbnNpdGlvbnMgZnJvbSB1bmRlZmluZWQgdG8gZGVmaW5lZCwgYW5kIGFnYWluIGlmIEdlbmllIGV2ZXJcbiAqIHJld3JpdGVzIGl0LiBgdGl0bGVgIGFuZCBgZGVzY3JpcHRpb25gIGFyZSBkZW5vcm1hbGlzZWQgb2ZmIHRoZVxuICogYXR0YWNobWVudCdzIGBxdWVyeS50aXRsZWAgLyBgcXVlcnkuZGVzY3JpcHRpb25gIHNvIGNvbnN1bWVyc1xuICogY2FuIGxhYmVsIHRoZSBTUUwgcGlsbCB3aXRob3V0IHJlLXdhbGtpbmcgdGhlIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBRdWVyeUV2ZW50U2NoZW1hID0gR2VuaWVDaGF0TG9jYXRpb25TY2hlbWEuZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwicXVlcnlcIiksXG4gIHNxbDogei5zdHJpbmcoKSxcbiAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIEZpbmFsaXplZCBvciByZXdyaXR0ZW4gU1FMIGVtaXR0ZWQgZm9yIGEgR2VuaWUgcXVlcnkgYXR0YWNobWVudC4gKi9cbmV4cG9ydCB0eXBlIFF1ZXJ5RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBTUUwgd2FzIHN1Ym1pdHRlZCB0byBhIFNRTCB3YXJlaG91c2UgYW5kIGEgc3RhdGVtZW50IGlkIHdhc1xuICogYXNzaWduZWQgKGBhdHRhY2htZW50c1tpXS5xdWVyeS5zdGF0ZW1lbnRfaWRgKS4gRmlyZXMgd2hlbiB0aGVcbiAqIHN0YXRlbWVudCBpZCB0cmFuc2l0aW9ucyBmcm9tIHVuZGVmaW5lZCB0byBkZWZpbmVkIC0gdGhpcyBpcyB0aGVcbiAqIHBvaW50IGF0IHdoaWNoIGBjbGllbnQuc3RhdGVtZW50RXhlY3V0aW9uLmdldFN0YXRlbWVudCh7IHN0YXRlbWVudF9pZCB9KWBcbiAqIGJlY29tZXMgYSB2YWxpZCBjYWxsLlxuICovXG5leHBvcnQgY29uc3QgU3RhdGVtZW50RXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdGF0ZW1lbnRcIiksXG4gIHN0YXRlbWVudF9pZDogei5zdHJpbmcoKSxcbn0pO1xuLyoqIEV2ZW50IGluZGljYXRpbmcgdGhhdCBhIHF1ZXJ5IHJlY2VpdmVkIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IGlkLiAqL1xuZXhwb3J0IHR5cGUgU3RhdGVtZW50RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBTdGF0ZW1lbnRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogUm93IGNvdW50IGZvciBhIHF1ZXJ5IGF0dGFjaG1lbnQncyByZXN1bHQgY2hhbmdlZFxuICogKGBhdHRhY2htZW50c1tpXS5xdWVyeS5xdWVyeV9yZXN1bHRfbWV0YWRhdGEucm93X2NvdW50YCkuIEZpcmVzXG4gKiBvbiBldmVyeSBjaGFuZ2UsIGluY2x1ZGluZyB0aGUgaW5pdGlhbCBgdW5kZWZpbmVkIC0+IDBgIGFuZCB0aGVcbiAqIGxhdGVyIGAwIC0+IE5gIG9uY2UgdGhlIHdhcmVob3VzZSBmaW5pc2hlcyBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSb3dzRXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJyb3dzXCIpLFxuICByb3dfY291bnQ6IHoubnVtYmVyKCksXG4gIHByZXZpb3VzX3Jvd19jb3VudDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzdGF0ZW1lbnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIFJvdy1jb3VudCB0cmFuc2l0aW9uIGZvciBhIEdlbmllIHF1ZXJ5IHJlc3VsdC4gKi9cbmV4cG9ydCB0eXBlIFJvd3NFdmVudCA9IHouaW5mZXI8dHlwZW9mIFJvd3NFdmVudFNjaGVtYT47XG5cbi8qKlxuICogR2VuaWUgcHJvZHVjZWQgYSBmb2xsb3ctdXAgc3VnZ2VzdGVkLXF1ZXN0aW9ucyBsaXN0XG4gKiAoYGF0dGFjaG1lbnRzW2ldLnN1Z2dlc3RlZF9xdWVzdGlvbnMucXVlc3Rpb25zW11gKS4gRmlyZXMgb25jZVxuICogd2hlbiB0aGUgbGlzdCBhcHBlYXJzLCBhbmQgYWdhaW4gaWYgR2VuaWUgcmV3cml0ZXMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBTdWdnZXN0ZWRRdWVzdGlvbnNFdmVudFNjaGVtYSA9IEdlbmllQ2hhdExvY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInN1Z2dlc3RlZF9xdWVzdGlvbnNcIiksXG4gIHF1ZXN0aW9uczogei5hcnJheSh6LnN0cmluZygpKSxcbn0pO1xuLyoqIEZvbGxvdy11cCBxdWVzdGlvbiBsaXN0IGVtaXR0ZWQgd2hlbiBHZW5pZSBhZGRzIG9yIHJld3JpdGVzIHN1Z2dlc3Rpb25zLiAqL1xuZXhwb3J0IHR5cGUgU3VnZ2VzdGVkUXVlc3Rpb25zRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBTdWdnZXN0ZWRRdWVzdGlvbnNFdmVudFNjaGVtYT47XG5cbi8qKlxuICogVGhlIGFjdGl2ZSB0dXJuIHJlYWNoZWQgYSB0ZXJtaW5hbCBzdGF0dXMuIEFsd2F5cyBmaXJlcyBvbmNlXG4gKiBwZXIgdHVybiAoaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRlcm1pbmFsIGBtZXNzYWdlYCBldmVudCkuXG4gKiBDYXJyaWVzIHRoZSBmaW5hbCBgR2VuaWVNZXNzYWdlYCBzbmFwc2hvdCBpbmxpbmUgc28gc3Vic2NyaWJlcnNcbiAqIGRvbid0IG5lZWQgdG8ga2VlcCB0aGVpciBvd24gY29weSBvZiB0aGUgbGFzdCBtZXNzYWdlLlxuICovXG5leHBvcnQgY29uc3QgUmVzdWx0RXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5vbWl0KHtcbiAgYXR0YWNobWVudF9pZDogdHJ1ZSxcbn0pLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInJlc3VsdFwiKSxcbiAgc3RhdHVzOiBUZXJtaW5hbFN0YXR1c1NjaGVtYSxcbiAgbWVzc2FnZTogR2VuaWVNZXNzYWdlU2NoZW1hLFxufSk7XG4vKiogRmluYWwgZXZlbnQgZm9yIGEgR2VuaWUgdHVybiwgY2FycnlpbmcgaXRzIHRlcm1pbmFsIHN0YXR1cyBhbmQgbWVzc2FnZSBzbmFwc2hvdC4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdEV2ZW50ID0gei5pbmZlcjx0eXBlb2YgUmVzdWx0RXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24geWllbGRlZCBieSBgZ2VuaWVFdmVudENoYXRgLiBFYWNoIHZhcmlhbnRcbiAqIGlzIGEgc2luZ2xlIGZsYXQgb2JqZWN0IHdpdGggYHR5cGVgIGFzIHRoZSBkaXNjcmltaW5hdG9yIGFuZFxuICogdGhlIHBheWxvYWQgZmllbGRzIGhvaXN0ZWQgZGlyZWN0bHkgdG8gdGhlIHRvcCBsZXZlbCAtIG5vXG4gKiBgcGF5bG9hZGAgd3JhcHBlci4gQ29uc3VtZXJzIG5hcnJvdyBvbiBgdHlwZWAgYW5kIHJlYWQgZmllbGRzXG4gKiBpbmxpbmU6XG4gKlxuICogQGV4YW1wbGVcbiAqIGZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2YgZ2VuaWVFdmVudENoYXQoc3BhY2VJZCwgXCJUb3Agc3RvcmVzP1wiKSkge1xuICogICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAqICAgICBjYXNlIFwidGhpbmtpbmdcIjpcbiAqICAgICAgIGNvbnNvbGUubG9nKGV2ZW50LnRob3VnaHRfdHlwZSwgZXZlbnQudGV4dCk7XG4gKiAgICAgICBicmVhaztcbiAqICAgICBjYXNlIFwicmVzdWx0XCI6XG4gKiAgICAgICBjb25zb2xlLmxvZyhcImRvbmU6XCIsIGV2ZW50LnN0YXR1cyk7XG4gKiAgICAgICBicmVhaztcbiAqICAgfVxuICogfVxuICpcbiAqIFN0cmVhbSBvcmRlciBwZXIgdHVybjpcbiAqXG4gKiAgIDEuIGBxdWVzdGlvbmAsIGVtaXR0ZWQgd2l0aCB0aGUgZmlyc3QgYG1lc3NhZ2VgIHlpZWxkIChkZWZlcnJlZCBzb1xuICogICAgICB0aGUgYXNzaWduZWQgYG1lc3NhZ2VfaWRgIGlzIGF2YWlsYWJsZSksIGNhcnJ5aW5nIHRoZSBwcm9tcHRcbiAqICAgICAgdGhpcyB0dXJuIHNlbnQgdG8gR2VuaWUuXG4gKiAgIDIuIGBtZXNzYWdlYCBmb3IgZXZlcnkgcG9sbCB5aWVsZCAocmF3IGBHZW5pZU1lc3NhZ2VgIG9uXG4gKiAgICAgIGBldmVudC5tZXNzYWdlYCkuXG4gKiAgIDMuIEFueSBkZXJpdmVkIGV2ZW50cyB0aGUgc25hcHNob3QgZGlmZiBwcm9kdWNlZCAoYHN0YXR1c2AsXG4gKiAgICAgIGBhdHRhY2htZW50YCwgYHRoaW5raW5nYCwgYHRleHRgLCBgcXVlcnlgLCBgc3RhdGVtZW50YCxcbiAqICAgICAgYHJvd3NgLCBgc3VnZ2VzdGVkX3F1ZXN0aW9uc2ApIGluIHRoYXQgZml4ZWQgb3JkZXIuXG4gKiAgIDQuIE9uIHRoZSB0ZXJtaW5hbCBzbmFwc2hvdCwgYSBmaW5hbCBgcmVzdWx0YCBldmVudC5cbiAqXG4gKiBFcnJvcnMgcHJvcGFnYXRlIHZpYSB0aGUgZ2VuZXJhdG9yIHRocm93aW5nIChgdHJ5YC9gY2F0Y2hgIHRoZVxuICogYGZvciBhd2FpdGApLCBub3QgdmlhIGFuIGBlcnJvcmAgdmFyaWFudCBvbiB0aGlzIHVuaW9uLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVDaGF0RXZlbnRTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBRdWVzdGlvbkV2ZW50U2NoZW1hLFxuICBNZXNzYWdlRXZlbnRTY2hlbWEsXG4gIFN0YXR1c0V2ZW50U2NoZW1hLFxuICBBdHRhY2htZW50RXZlbnRTY2hlbWEsXG4gIFRoaW5raW5nRXZlbnRTY2hlbWEsXG4gIFRleHRFdmVudFNjaGVtYSxcbiAgUXVlcnlFdmVudFNjaGVtYSxcbiAgU3RhdGVtZW50RXZlbnRTY2hlbWEsXG4gIFJvd3NFdmVudFNjaGVtYSxcbiAgU3VnZ2VzdGVkUXVlc3Rpb25zRXZlbnRTY2hlbWEsXG4gIFJlc3VsdEV2ZW50U2NoZW1hLFxuXSk7XG4vKiogT3JkZXJlZCBldmVudCB1bmlvbiB5aWVsZGVkIGJ5IGBnZW5pZUV2ZW50Q2hhdGA7IGZhaWx1cmVzIGFyZSB0aHJvd24sIG5vdCBlbWl0dGVkLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVDaGF0RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUNoYXRFdmVudFNjaGVtYT47XG5cbi8qKiBEaXNjcmltaW5hdG9yIHR5cGUgZm9yIHtAbGluayBHZW5pZUNoYXRFdmVudH0uICovXG5leHBvcnQgdHlwZSBHZW5pZUNoYXRFdmVudFR5cGUgPSBHZW5pZUNoYXRFdmVudFtcInR5cGVcIl07XG5cbi8qKlxuICogRmllbGQgc2V0IGZvciBhIGdpdmVuIHtAbGluayBHZW5pZUNoYXRFdmVudFR5cGV9IC0gdGhlIHZhcmlhbnRcbiAqIHdpdGggdGhlIGB0eXBlYCBkaXNjcmltaW5hdG9yIHN0cmlwcGVkLiBVc2VkIGJ5IGRldGVjdG9ycyBpblxuICogYGV2ZW50LnRzYCBzbyBlYWNoIGRldGVjdG9yIHJldHVybnMganVzdCB0aGUgcGF5bG9hZCBmaWVsZHMgYW5kXG4gKiB0aGUgb3JjaGVzdHJhdG9yIHN0YW1wcyBgdHlwZWAgYXQgeWllbGQgdGltZS5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVDaGF0RXZlbnRGaWVsZHM8VCBleHRlbmRzIEdlbmllQ2hhdEV2ZW50VHlwZT4gPSBPbWl0PFxuICBFeHRyYWN0PEdlbmllQ2hhdEV2ZW50LCB7IHR5cGU6IFQgfT4sXG4gIFwidHlwZVwiXG4+O1xuIl19
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuaWUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuaWUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxrRkFBa0Y7QUFDbEYsaUZBQWlGO0FBQ2pGLDZEQUE2RDtBQUM3RCxNQUFNLEVBQ0oscUJBQXFCLEVBQUUsd0JBQXdCLEVBQy9DLGtCQUFrQixFQUFFLHFCQUFxQixFQUN6QywwQkFBMEIsRUFBRSw2QkFBNkIsRUFDekQsZ0JBQWdCLEVBQUUsbUJBQW1CLEdBQ3RDLEdBQUcsVUFBVSxDQUFDO0FBVWYsd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztBQUVsRSx5RUFBeUU7QUFFekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUM7S0FDcEMsTUFBTSxFQUFFO0tBQ1IsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7QUFJaEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6QyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxDQUFDLDhDQUE4QyxDQUFDO0lBQzdGLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLDBDQUEwQyxDQUFDO0NBQ3pFLENBQUMsQ0FBQztBQUlILDZFQUE2RTtBQUU3RTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLE9BQU87SUFDUCxNQUFNO0lBQ04scUJBQXFCO0lBQ3JCLEtBQUs7Q0FDK0IsQ0FBQztBQUV2QyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDO0tBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztLQUN0QixRQUFRLENBQUMscUVBQXFFLENBQUMsQ0FBQztBQUluRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDO0tBQ2xDLE1BQU0sRUFBRTtLQUNSLFFBQVEsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0FBSWxFLHlFQUF5RTtBQUV6RTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsNkJBQTZCLENBQUMsTUFBTSxDQUFDO0lBQzdFLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ2pELENBQUMsQ0FBQztBQUlIOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQztLQUM5QyxNQUFNLEVBQUU7S0FDUixRQUFRLENBQUMsa0VBQWtFLENBQUMsQ0FBQztBQUloRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO0lBQzlFLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQyxRQUFRLEVBQUU7SUFDcEQsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMscURBQXFELENBQUM7Q0FDakcsQ0FBQyxDQUFDO0FBSUg7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUM7S0FDdEMsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsMENBQTBDLENBQUM7SUFDakYsbUJBQW1CLEVBQUUsQ0FBQztTQUNuQixNQUFNLEVBQUU7U0FDUixRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMscUVBQXFFLENBQUM7Q0FDbkYsQ0FBQztLQUNELFFBQVEsQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0FBSXRFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxDQUFDO0lBQ25FLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxRQUFRLEVBQUU7SUFDNUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtJQUMxQyxHQUFHLEVBQUUsd0JBQXdCLENBQUMsUUFBUSxFQUFFO0lBQ3hDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLEVBQUU7Q0FDakQsQ0FBQyxDQUFDO0FBSUg7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDO0lBQzdELFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3RELHFCQUFxQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDN0MsQ0FBQyxDQUFDO0FBSUg7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUk1Rjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztJQUN6RCxnQkFBZ0IsRUFBRSxDQUFDO1NBQ2hCLE1BQU0sRUFBRTtTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FDUCwyTkFBMk4sQ0FDNU47Q0FDSixDQUFDLENBQUM7QUFJSCx5RUFBeUU7QUFFekU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQVUsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDO0tBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztLQUN2QixRQUFRLENBQUMsMEVBQTBFLENBQUMsQ0FBQztBQUl4RixzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLGdCQUFnQixDQUFDLENBQTRCO0lBQzNELE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSyxpQkFBdUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQXFCO0lBQ2xELFFBQVEsTUFBTSxFQUFFLENBQUM7UUFDZixLQUFLLG1CQUFtQjtZQUN0QixPQUFPLG1CQUFtQixDQUFDO1FBQzdCLEtBQUssV0FBVztZQUNkLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLEtBQUssaUJBQWlCO1lBQ3BCLE9BQU8sbUJBQW1CLENBQUM7UUFDN0IsS0FBSyxtQkFBbUI7WUFDdEIsT0FBTyxtQkFBbUIsQ0FBQztRQUM3QixLQUFLLG1CQUFtQjtZQUN0QixPQUFPLHVCQUF1QixDQUFDO1FBQ2pDLEtBQUssV0FBVztZQUNkLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLEtBQUssV0FBVztZQUNkLE9BQU8sV0FBVyxDQUFDO1FBQ3JCO1lBQ0UsT0FBTztnQkFDTCxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQzthQUNsRixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQztBQUVELDJFQUEyRTtBQUUzRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBb0I7SUFDdkQsSUFBSSxHQUFHLENBQUMsZUFBZTtRQUFFLE9BQU8sR0FBRyxDQUFDLGVBQWUsQ0FBQztJQUNwRCxJQUFJLEdBQUcsQ0FBQyxLQUFLO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDOUIsSUFBSSxHQUFHLENBQUMsSUFBSTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzVCLElBQUksR0FBRyxDQUFDLG1CQUFtQjtRQUFFLE9BQU8scUJBQXFCLENBQUM7SUFDMUQsSUFBSSxHQUFHLENBQUMsR0FBRztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzFCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLGVBQWUsSUFBSSxDQUFDLEtBQUssaUJBQWlCO1lBQUUsT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCx5RUFBeUU7QUFFekU7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsZUFBZSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakMsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDckMsQ0FBQyxDQUFDO0FBSUg7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQztJQUM5RCxhQUFhLEVBQUUsSUFBSTtDQUNwQixDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ1IsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzNCLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0NBQ3BCLENBQUMsQ0FBQztBQUlIOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQztJQUM3RCxhQUFhLEVBQUUsSUFBSTtDQUNwQixDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ1IsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQzFCLE9BQU8sRUFBRSxrQkFBa0I7Q0FDNUIsQ0FBQyxDQUFDO0FBSUg7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7SUFDNUQsYUFBYSxFQUFFLElBQUk7Q0FDcEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNSLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUN6QixNQUFNLEVBQUUsbUJBQW1CO0lBQzNCLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLEVBQUU7Q0FDaEQsQ0FBQyxDQUFDO0FBSUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0lBQ2xFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUM3QixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNqQixlQUFlLEVBQUUsb0JBQW9CO0NBQ3RDLENBQUMsQ0FBQztBQUlIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7SUFDaEUsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzNCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLFlBQVksRUFBRSxzQkFBc0I7Q0FDckMsQ0FBQyxDQUFDO0FBSUg7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7SUFDNUQsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0NBQ2pCLENBQUMsQ0FBQztBQUlIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7SUFDN0QsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ3hCLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2YsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbkMsQ0FBQyxDQUFDO0FBSUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0lBQ2pFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUM1QixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUN6QixDQUFDLENBQUM7QUFJSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7SUFDNUQsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3JCLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDekMsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDcEMsQ0FBQyxDQUFDO0FBSUg7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQztJQUMxRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztJQUN0QyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Q0FDL0IsQ0FBQyxDQUFDO0FBSUg7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7SUFDNUQsYUFBYSxFQUFFLElBQUk7Q0FDcEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNSLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUN6QixNQUFNLEVBQUUsb0JBQW9CO0lBQzVCLE9BQU8sRUFBRSxrQkFBa0I7Q0FDNUIsQ0FBQyxDQUFDO0FBSUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7SUFDL0QsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLG9CQUFvQjtJQUNwQixlQUFlO0lBQ2YsNkJBQTZCO0lBQzdCLGlCQUFpQjtDQUNsQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdpcmUtZm9ybWF0IHpvZCBzY2hlbWFzICsgdHlwZXMgYW5kIGhpZ2gtbGV2ZWwgZXZlbnQgdm9jYWJ1bGFyeVxuICogZm9yIHRoZSBHZW5pZSBjaGF0IGRyaXZlci5cbiAqXG4gKiBUd28gcmVsYXRlZCBsYXllcnMgbGl2ZSBoZXJlOlxuICpcbiAqICAgMS4gR2VuaWUgd2lyZSBzaGFwZXMgZGVyaXZlZCBmcm9tIHRoaXMgcGFja2FnZSdzIG93biBnZW5lcmF0ZWRcbiAqICAgICAgYGRhc2hib2FyZHNgIHNjaGVtYXMgKHJlZ2VuZXJhdGVkIGZyb20gdGhlIHVwc3RyZWFtXG4gKiAgICAgIGBAZGF0YWJyaWNrcy9zZGstZXhwZXJpbWVudGFsYCBgYXBpcy9kYXNoYm9hcmRzL21vZGVsLmQudHNgXG4gKiAgICAgIGJ5IHRoZSBlbmdpbmUncyBjb2RlZ2VuIG9uIHN5bnRoKS4gV2UgZXh0ZW5kIHRoZSBTREsgc2NoZW1hcyB3aGVyZSBHZW5pZVxuICogICAgICBzaGlwcyBmaWVsZHMgb24gdGhlIHdpcmUgdGhhdCB0aGUgU0RLIGRvZXNuJ3QgY3VycmVudGx5IHR5cGU6XG4gKlxuICogICAgICAgIC0gYEdlbmllTWVzc2FnZS5hdXRvX3JlZ2VuZXJhdGVfY291bnQ6IG51bWJlcmAgKHN0YW1wZWRcbiAqICAgICAgICAgIG9uIGV2ZXJ5IHdpcmUgbWVzc2FnZSwgb21pdHRlZCBmcm9tIHRoZSBTREsgc2hhcGUpLlxuICogICAgICAgIC0gYEdlbmllUXVlcnlBdHRhY2htZW50LnRob3VnaHRzOiBHZW5pZVRob3VnaHRbXWAgKHRoZVxuICogICAgICAgICAgc3RyZWFtZWQgcmVhc29uaW5nIHBheWxvYWQgd2l0aCBgREVTQ1JJUFRJT05gLFxuICogICAgICAgICAgYERBVEFfU09VUkNJTkdgLCBgU1RFUFNgLCBhbmQgYFVOREVSU1RBTkRJTkdgIHRob3VnaHRcbiAqICAgICAgICAgIGtpbmRzKS5cbiAqICAgICAgICAtIGBHZW5pZUF0dGFjaG1lbnQuYXR0YWNobWVudF90eXBlOiBBdHRhY2htZW50VHlwZWBcbiAqICAgICAgICAgIChhbiBvcHRpb25hbCBkaXNjcmltaW5hdG9yIGxpdGVyYWwgc28gY2FsbGVycyBjYW5cbiAqICAgICAgICAgIGBzd2l0Y2ggKGF0dC5hdHRhY2htZW50X3R5cGUpYCBpbnN0ZWFkIG9mIHByb2JpbmdcbiAqICAgICAgICAgIHdoaWNoIHN1Yi1rZXkgaXMgcG9wdWxhdGVkOyBjb21wdXRlIGl0IHdpdGhcbiAqICAgICAgICAgIHtAbGluayBkZXRlY3RBdHRhY2htZW50VHlwZX0pLlxuICpcbiAqICAgMi4gRXZlbnQgdm9jYWJ1bGFyeSBmb3IgdGhlIGhpZ2gtbGV2ZWwgYGdlbmllRXZlbnRDaGF0YFxuICogICAgICBkcml2ZXIuIEVhY2ggZXZlbnQgaXMgYSBmbGF0IGB6Lm9iamVjdGAgd2l0aCBhIGB0eXBlYFxuICogICAgICBsaXRlcmFsIGRpc2NyaW1pbmF0b3IgYW5kIHNuYWtlX2Nhc2UgcGF5bG9hZCBmaWVsZHMgaG9pc3RlZFxuICogICAgICB0byB0aGUgdG9wIGxldmVsIChubyBgcGF5bG9hZGAgd3JhcHBlcikuIEV2ZW50cyB0aGF0IHNoYXJlXG4gKiAgICAgIHRoZSBhdHRhY2htZW50LXNjb3BlZCBsb2NhdGlvbiB1c2VcbiAqICAgICAge0BsaW5rIEdlbmllQ2hhdExvY2F0aW9uU2NoZW1hfSBhcyBhIGJhc2U7IGV2ZW50cyB0aGF0XG4gKiAgICAgIGRvbid0IGNhcnJ5IGFuIGBhdHRhY2htZW50X2lkYCAoc3RhdHVzLCByZXN1bHQpIG9taXQgaXQuXG4gKiAgICAgIHtAbGluayBHZW5pZUNoYXRFdmVudFNjaGVtYX0gYnVuZGxlcyB0aGUgdmFyaWFudHMgaW50byBvbmVcbiAqICAgICAgZGlzY3JpbWluYXRlZCB1bmlvbi5cbiAqXG4gKiBQdXJlIHR5cGVzOiBubyBydW50aW1lIGltcG9ydHMgYmV5b25kIHpvZCArIHRoZSBnZW5lcmF0ZWRcbiAqIGBkYXNoYm9hcmRzYCBzY2hlbWFzLCBubyBOb2RlLW9ubHkgY29kZSwgc2FmZSBmb3IgYnJvd3NlciBidW5kbGVzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0ICogYXMgZGFzaGJvYXJkcyBmcm9tIFwiLi9kYXNoYm9hcmRzLnRzXCI7XG5cbi8vIFRoZSBnZW5lcmF0ZWQgU0RLIHNjaGVtYXMgbGl2ZSBpbiB0aGUgc2libGluZyBgLi9kYXNoYm9hcmRzLnRzYCwgd3JpdHRlbiBieSB0aGVcbi8vIGVuZ2luZSdzIGNvZGVnZW4gZnJvbSB0aGUgdXBzdHJlYW0gYC5kLnRzYC4gQWxpYXMgdGhlIGhhbmRmdWwgR2VuaWUgZXh0ZW5kcyBzb1xuLy8gdGhlIHdpZGVuZWQgc2NoZW1hcyBiZWxvdyByZWFkIGFnYWluc3Qgc2hvcnQsIGxvY2FsIG5hbWVzLlxuY29uc3Qge1xuICBnZW5pZUF0dGFjaG1lbnRTY2hlbWE6IFNES0dlbmllQXR0YWNobWVudFNjaGVtYSxcbiAgZ2VuaWVNZXNzYWdlU2NoZW1hOiBTREtHZW5pZU1lc3NhZ2VTY2hlbWEsXG4gIGdlbmllUXVlcnlBdHRhY2htZW50U2NoZW1hOiBTREtHZW5pZVF1ZXJ5QXR0YWNobWVudFNjaGVtYSxcbiAgZ2VuaWVTcGFjZVNjaGVtYTogU0RLR2VuaWVTcGFjZVNjaGVtYSxcbn0gPSBkYXNoYm9hcmRzO1xuXG4vKipcbiAqIFRoZSBTREsncyBgTWVzc2FnZVN0YXR1c2AgdHlwZSwgcmUtZXhwb3J0ZWQgc28gY29uc3VtZXJzIG9mIHRoZVxuICogR2VuaWUgY29udHJhY3QgZ2V0IHRoZSBmdWxsIHdpcmUgdm9jYWJ1bGFyeSBmcm9tIGEgc2luZ2xlIGltcG9ydFxuICogcGF0aCAtIG1pcnJvcnMgdGhlIHJlLWV4cG9ydHMgb2YgdGhlIG90aGVyIFNESy1kZXJpdmVkIHNjaGVtYXNcbiAqIGJlbG93LlxuICovXG5leHBvcnQgdHlwZSBNZXNzYWdlU3RhdHVzID0gZGFzaGJvYXJkcy5NZXNzYWdlU3RhdHVzO1xuXG4vKiogUnVudGltZSB2YWxpZGF0b3IgZm9yIGEgcmF3IEdlbmllIG1lc3NhZ2Ugc3RhdHVzIGZyb20gdGhlIGdlbmVyYXRlZCBTREsgY29udHJhY3QuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVN0YXR1c1NjaGVtYSA9IGRhc2hib2FyZHMubWVzc2FnZVN0YXR1c1NjaGVtYTtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhvdWdodHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEdlbmllJ3MgcGVyLXF1ZXJ5IFwidGhvdWdodHNcIiBzdXJmYWNlLiBUaGVzZSBhcHBlYXIgb24gdGhlXG4gKiBgL21lc3NhZ2VzL3tpZH1gIHdpcmUgdW5kZXIgYGF0dGFjaG1lbnRzW2ldLnF1ZXJ5LnRob3VnaHRzW11gIGJ1dFxuICogYXJlIG5vdCB0eXBlZCBvbiB0aGUgU0RLJ3MgYEdlbmllUXVlcnlBdHRhY2htZW50YCBhdCB2MC4xNy5cbiAqXG4gKiBLbm93biB0aG91Z2h0IHR5cGVzIG9ic2VydmVkIGluIHByb2R1Y3Rpb24gcG9sbHM6XG4gKlxuICogICAtIGBUSE9VR0hUX1RZUEVfREVTQ1JJUFRJT05gOiBhIG9uZS1wYXJhZ3JhcGggcmVzdGF0ZW1lbnQgb2ZcbiAqICAgICB3aGF0IHRoZSB1c2VyIGFza2VkLiBUaGUgZmluYWwgYHF1ZXJ5LmRlc2NyaXB0aW9uYCBmaWVsZCBvblxuICogICAgIHRoZSBhdHRhY2htZW50IGNhcnJpZXMgdGhlIHNhbWUgdGV4dC5cbiAqICAgLSBgVEhPVUdIVF9UWVBFX0RBVEFfU09VUkNJTkdgOiBtYXJrZG93biBidWxsZXRzIG9mIHRoZVxuICogICAgIGZ1bGx5LXF1YWxpZmllZCBgY2F0YWxvZy5zY2hlbWEudGFibGVgIHNvdXJjZXMgR2VuaWUgY2hvc2UuXG4gKiAgIC0gYFRIT1VHSFRfVFlQRV9TVEVQU2A6IHRoZSBoaWdoLWxldmVsIHBsYW4gR2VuaWUgd3JvdGUgYmVmb3JlXG4gKiAgICAgcnVubmluZyBTUUwgKG9uZSBidWxsZXQgcGVyIHN0ZXApLlxuICogICAtIGBUSE9VR0hUX1RZUEVfVU5ERVJTVEFORElOR2A6IGFtYmlndWl0eSAvIGludGVycHJldGF0aW9uXG4gKiAgICAgbm90ZXMgKGUuZy4gXCIncmV2ZW51ZScgY291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgZ3Jvc3MsXG4gKiAgICAgbmV0LCBvciByZWNvZ25pemVkIHJldmVudWUuLi5cIikuXG4gKlxuICogT3BlbiBhdCB0aGUgdHlwZSBsZXZlbCAoYHwgKHN0cmluZyAmIHt9KWApIHNvIGEgbmV3IHNlcnZlci1zaWRlXG4gKiB0aG91Z2h0IHR5cGUgZG9lc24ndCBicmVhayBjb21waWxhdGlvbjsgdGhlIGZvdXIga25vd24gdHlwZXNcbiAqIHN0aWxsIG5hcnJvdyBjb3JyZWN0bHkgdW5kZXIgYHN3aXRjaGAuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVRob3VnaHRUeXBlU2NoZW1hID0gelxuICAuc3RyaW5nKClcbiAgLmRlc2NyaWJlKFwiRm9yd2FyZC1jb21wYXRpYmxlIEdlbmllIHJlYXNvbmluZyB0aG91Z2h0IHR5cGUuXCIpO1xuXG5leHBvcnQgdHlwZSBHZW5pZVRob3VnaHRUeXBlID0gei5pbmZlcjx0eXBlb2YgR2VuaWVUaG91Z2h0VHlwZVNjaGVtYT47XG5cbi8qKlxuICogT25lIHJlYXNvbmluZyBzdGVwIG9uIGEgcXVlcnkgYXR0YWNobWVudC4gU2VlXG4gKiB7QGxpbmsgR2VuaWVUaG91Z2h0VHlwZX0gZm9yIHRoZSBrbm93biBgdGhvdWdodF90eXBlYCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVRob3VnaHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRob3VnaHRfdHlwZTogR2VuaWVUaG91Z2h0VHlwZVNjaGVtYS5kZXNjcmliZShcIktpbmQgb2YgcmVhc29uaW5nIHJlcHJlc2VudGVkIGJ5IHRoaXMgZW50cnkuXCIpLFxuICBjb250ZW50OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiUmVhc29uaW5nIHRleHQgZW1pdHRlZCBmb3IgdGhpcyB0aG91Z2h0LlwiKSxcbn0pO1xuLyoqIE9uZSB0eXBlZCByZWFzb25pbmcgZW50cnkgYXR0YWNoZWQgdG8gYSBHZW5pZSBxdWVyeS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllVGhvdWdodCA9IHouaW5mZXI8dHlwZW9mIEdlbmllVGhvdWdodFNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGF0dGFjaG1lbnQgZGlzY3JpbWluYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogRGlzY3JpbWluYXRvciBmb3Igd2hhdCdzIGluc2lkZSBhIGBHZW5pZUF0dGFjaG1lbnRgLiBHZW5pZSBvbmx5XG4gKiBldmVyIHBvcHVsYXRlcyBvbmUgb2YgYHF1ZXJ5YCAvIGB0ZXh0YCAvIGBzdWdnZXN0ZWRfcXVlc3Rpb25zYFxuICogcGVyIGF0dGFjaG1lbnQuIE9wZW4gdmlhIGAoc3RyaW5nICYge30pYCBzbyBhIG5ldyBzZXJ2ZXItc2lkZVxuICogdHlwZSBkb2Vzbid0IGJyZWFrIGNvbXBpbGF0aW9uOyB0aGUgdGhyZWUga25vd24gdHlwZXMgc3RpbGxcbiAqIG5hcnJvdyBjb3JyZWN0bHkgdW5kZXIgYHN3aXRjaGAuXG4gKlxuICogTGlmdGVkIGludG8gdGhlIHNjaGVtYSBhcyB0aGUgb3B0aW9uYWxcbiAqIHtAbGluayBHZW5pZUF0dGFjaG1lbnRTY2hlbWF9LmBhdHRhY2htZW50X3R5cGVgIGZpZWxkIChjb21wdXRlXG4gKiBpdCB3aXRoIHtAbGluayBkZXRlY3RBdHRhY2htZW50VHlwZX0pIHNvIGNvbnN1bWVycyBjYW4gYnJhbmNoXG4gKiBvbiBhIGxpdGVyYWwgaW5zdGVhZCBvZiBwcm9iaW5nIHdoaWNoIHN1Yi1vYmplY3Qga2V5IGlzXG4gKiBwcmVzZW50LiBBbHNvIHN1cmZhY2VkIG9uIHtAbGluayBBdHRhY2htZW50RXZlbnR9J3MgcGF5bG9hZCBhc1xuICogYGF0dGFjaG1lbnRfdHlwZWAgKHZzIGEgYmFyZSBgdHlwZWApIHRvIGtlZXAgdGhlIGZpZWxkIGNsZWFyIG9mXG4gKiB0aGUgZXZlbnQtdW5pb24gZGlzY3JpbWluYXRvciBrZXkuXG4gKi9cbmV4cG9ydCBjb25zdCBBVFRBQ0hNRU5UX1RZUEVTID0gW1xuICBcInF1ZXJ5XCIsXG4gIFwidGV4dFwiLFxuICBcInN1Z2dlc3RlZF9xdWVzdGlvbnNcIixcbiAgXCJ2aXpcIixcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IHN0cmluZ1tdO1xuXG5leHBvcnQgY29uc3QgS25vd25BdHRhY2htZW50VHlwZVNjaGVtYSA9IHpcbiAgLmVudW0oQVRUQUNITUVOVF9UWVBFUylcbiAgLmRlc2NyaWJlKFwiQXR0YWNobWVudCBkaXNjcmltaW5hdG9yIHZhbHVlcyB1bmRlcnN0b29kIGJ5IHRoaXMgcGFja2FnZSB2ZXJzaW9uLlwiKTtcblxuZXhwb3J0IHR5cGUgS25vd25BdHRhY2htZW50VHlwZSA9IHouaW5mZXI8dHlwZW9mIEtub3duQXR0YWNobWVudFR5cGVTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgQXR0YWNobWVudFR5cGVTY2hlbWEgPSB6XG4gIC5zdHJpbmcoKVxuICAuZGVzY3JpYmUoXCJGb3J3YXJkLWNvbXBhdGlibGUgR2VuaWUgYXR0YWNobWVudCBkaXNjcmltaW5hdG9yLlwiKTtcblxuZXhwb3J0IHR5cGUgQXR0YWNobWVudFR5cGUgPSB6LmluZmVyPHR5cGVvZiBBdHRhY2htZW50VHlwZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gd2lkZW5lZCB3aXJlIHNjaGVtYXMgKyB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBgR2VuaWVRdWVyeUF0dGFjaG1lbnRgIHdpZGVuZWQgd2l0aCB0aGUgYHRob3VnaHRzW11gIGZpZWxkIHRoZVxuICogR2VuaWUgd2lyZSBleHBvc2VzIGJ1dCB0aGUgU0RLIGRvZXNuJ3QgY3VycmVudGx5IHR5cGUuIEV2ZXJ5XG4gKiBvdGhlciBmaWVsZCAoYGRlc2NyaXB0aW9uYCwgYHF1ZXJ5YCwgYHN0YXRlbWVudF9pZGAsXG4gKiBgcXVlcnlfcmVzdWx0X21ldGFkYXRhYCwgYHRpdGxlYCwgYHBhcmFtZXRlcnNgLFxuICogYGxhc3RfdXBkYXRlZF90aW1lc3RhbXBgLCBgaWRgKSBmbG93cyB0aHJvdWdoIHZlcmJhdGltIGZyb21cbiAqIHRoZSBTREsgc2NoZW1hLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVRdWVyeUF0dGFjaG1lbnRTY2hlbWEgPSBTREtHZW5pZVF1ZXJ5QXR0YWNobWVudFNjaGVtYS5leHRlbmQoe1xuICB0aG91Z2h0czogei5hcnJheShHZW5pZVRob3VnaHRTY2hlbWEpLm9wdGlvbmFsKCksXG59KTtcbi8qKiBRdWVyeSBhdHRhY2htZW50IHdpZGVuZWQgd2l0aCBHZW5pZSdzIHN0cmVhbWVkIHJlYXNvbmluZyB0aG91Z2h0cy4gKi9cbmV4cG9ydCB0eXBlIEdlbmllUXVlcnlBdHRhY2htZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVRdWVyeUF0dGFjaG1lbnRTY2hlbWE+O1xuXG4vKipcbiAqIFB1cnBvc2UgYXR0YWNoZWQgdG8gYSBHZW5pZSB0ZXh0IHJlc3BvbnNlLlxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgRGF0YWJyaWNrcyBTREsgc2NoZW1hIGN1cnJlbnRseSBrbm93cyBvbmx5XG4gKiBgRk9MTE9XX1VQX1FVRVNUSU9OYCwgd2hpbGUgdGhlIGxpdmUgR2VuaWUgQVBJIGFsc28gZW1pdHNcbiAqIGBURVhUX0FUVEFDSE1FTlRfUFVSUE9TRV9BTlNXRVJgIGZvciB0aGUgcHJpbWFyeSBhbnN3ZXIgdGV4dC4gS2VlcCB0aGVcbiAqIGtub3duIHZhbHVlcyBkaXNjb3ZlcmFibGUgYW5kIGFjY2VwdCBmdXR1cmUgc3RyaW5nIHZhbHVlcyBzbyBhbiBhZGRpdGl2ZVxuICogc2VydmVyLXNpZGUgZW51bSBjaGFuZ2UgY2Fubm90IGludmFsaWRhdGUgYW4gb3RoZXJ3aXNlIGNvbXBsZXRlIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVRleHRBdHRhY2htZW50UHVycG9zZVNjaGVtYSA9IHpcbiAgLnN0cmluZygpXG4gIC5kZXNjcmliZShcIkZvcndhcmQtY29tcGF0aWJsZSBzZW1hbnRpYyBwdXJwb3NlIGZvciBhIEdlbmllIHRleHQgYXR0YWNobWVudC5cIik7XG5cbmV4cG9ydCB0eXBlIEdlbmllVGV4dEF0dGFjaG1lbnRQdXJwb3NlID0gei5pbmZlcjx0eXBlb2YgR2VuaWVUZXh0QXR0YWNobWVudFB1cnBvc2VTY2hlbWE+O1xuXG4vKipcbiAqIFRleHQgYXR0YWNobWVudCB3aWRlbmVkIGZvciBmb3J3YXJkLWNvbXBhdGlibGUgcHVycG9zZSB2YWx1ZXMgYW5kIG9wdGlvbmFsXG4gKiBBZ2VudCBNb2RlIHRhYmxlIG1ldGFkYXRhLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVUZXh0QXR0YWNobWVudFNjaGVtYSA9IGRhc2hib2FyZHMudGV4dEF0dGFjaG1lbnRTY2hlbWEuZXh0ZW5kKHtcbiAgcHVycG9zZTogR2VuaWVUZXh0QXR0YWNobWVudFB1cnBvc2VTY2hlbWEub3B0aW9uYWwoKSxcbiAgbWV0YWRhdGE6IHoudW5rbm93bigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBZ2VudCBNb2RlIG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoaXMgdGV4dCByZXNwb25zZS5cIiksXG59KTtcbi8qKiBOYXJyYXRpdmUgdGV4dCBhdHRhY2htZW50LCBpbmNsdWRpbmcgaXRzIG9wdGlvbmFsIHNlbWFudGljIHB1cnBvc2UuICovXG5leHBvcnQgdHlwZSBHZW5pZVRleHRBdHRhY2htZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVUZXh0QXR0YWNobWVudFNjaGVtYT47XG5cbi8qKlxuICogVmlzdWFsaXphdGlvbiBHZW5pZSByZXF1ZXN0ZWQgZm9yIG9uZSBvZiBpdHMgcXVlcnkgcmVzdWx0cy4gR2VuaWUgc3RvcmVzIG9ubHlcbiAqIHRoZSB0aXRsZSBhbmQgdGhlIHF1ZXJ5IGF0dGFjaG1lbnQgaXQgY2hhcnRzOyB0aGUgY2xpZW50IGRyYXdzIHRoZSBjaGFydCBmcm9tXG4gKiB0aGF0IHF1ZXJ5J3Mgc3RhdGVtZW50IHJvd3MuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVZpekF0dGFjaG1lbnRTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJEaXNwbGF5IHRpdGxlIEdlbmllIGNob3NlIGZvciB0aGUgY2hhcnQuXCIpLFxuICAgIHF1ZXJ5X2F0dGFjaG1lbnRfaWQ6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcImBhdHRhY2htZW50X2lkYCBvZiB0aGUgcXVlcnkgYXR0YWNobWVudCB3aG9zZSByb3dzIHRoZSBjaGFydCBwbG90cy5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIkdlbmllIHZpc3VhbGl6YXRpb24gcmVxdWVzdCBvdmVyIG9uZSBxdWVyeSBhdHRhY2htZW50LlwiKTtcbi8qKiBHZW5pZSB2aXN1YWxpemF0aW9uIHJlcXVlc3Qgb3ZlciBvbmUgcXVlcnkgYXR0YWNobWVudC4gKi9cbmV4cG9ydCB0eXBlIEdlbmllVml6QXR0YWNobWVudCA9IHouaW5mZXI8dHlwZW9mIEdlbmllVml6QXR0YWNobWVudFNjaGVtYT47XG5cbi8qKlxuICogYEdlbmllQXR0YWNobWVudGAgd2l0aDpcbiAqXG4gKiAgIC0gYHF1ZXJ5YCByZS10eXBlZCB0byB0aGUgdGhvdWdodHMtYXdhcmVcbiAqICAgICB7QGxpbmsgR2VuaWVRdWVyeUF0dGFjaG1lbnRTY2hlbWF9LlxuICogICAtIGBhdHRhY2htZW50X3R5cGVgIGRpc2NyaW1pbmF0b3IgbGl0ZXJhbFxuICogICAgICh7QGxpbmsgQXR0YWNobWVudFR5cGV9KSBzbyBjb25zdW1lcnMgY2FuIGBzd2l0Y2hcbiAqICAgICAoYXR0LmF0dGFjaG1lbnRfdHlwZSlgIHRvIG5hcnJvdyB3aGljaCBzdWItb2JqZWN0IGlzXG4gKiAgICAgcG9wdWxhdGVkLiBPcHRpb25hbCBvbiB0aGUgd2lyZSAoR2VuaWUgZG9lc24ndCBzZW5kIGl0KTtcbiAqICAgICBjYWxsZXJzIGNvbXB1dGUgaXQgd2l0aCB7QGxpbmsgZGV0ZWN0QXR0YWNobWVudFR5cGV9IHdoZW5cbiAqICAgICB0aGV5IHdhbnQgdGhlIGxpdGVyYWwgdXAtZnJvbnQuXG4gKlxuICogYHRleHRgIGlzIHJlLXR5cGVkIHRvIHRoZSBmb3J3YXJkLWNvbXBhdGlibGVcbiAqIHtAbGluayBHZW5pZVRleHRBdHRhY2htZW50U2NoZW1hfS4gYGF0dGFjaG1lbnRfaWRgIGFuZFxuICogYHN1Z2dlc3RlZF9xdWVzdGlvbnNgIHBhc3MgdGhyb3VnaCB1bmNoYW5nZWQuIGBhdHRhY2htZW50X2lkYCBpcyBnZW51aW5lbHlcbiAqIG9wdGlvbmFsIG9uIHRoZSB3aXJlOlxuICogdGhlIGZpcnN0IHRleHQgYXR0YWNobWVudCBHZW5pZSBlbWl0cyBwZXIgdHVybiAodGhlIFwibWFpblxuICogYW5zd2VyIHRleHRcIikgYXJyaXZlcyB3aXRoIG5vIGlkLCBvbmx5IHRoZSBmb2xsb3ctdXAgdGV4dFxuICogYXR0YWNobWVudCBnZXRzIG9uZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQXR0YWNobWVudFNjaGVtYSA9IFNES0dlbmllQXR0YWNobWVudFNjaGVtYS5leHRlbmQoe1xuICBxdWVyeTogR2VuaWVRdWVyeUF0dGFjaG1lbnRTY2hlbWEub3B0aW9uYWwoKSxcbiAgdGV4dDogR2VuaWVUZXh0QXR0YWNobWVudFNjaGVtYS5vcHRpb25hbCgpLFxuICB2aXo6IEdlbmllVml6QXR0YWNobWVudFNjaGVtYS5vcHRpb25hbCgpLFxuICBhdHRhY2htZW50X3R5cGU6IEF0dGFjaG1lbnRUeXBlU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcbi8qKiBHZW5pZSBtZXNzYWdlIGF0dGFjaG1lbnQgd2l0aCBhbiBvcHRpb25hbCBjb21wdXRlZCBkaXNjcmltaW5hdG9yLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVBdHRhY2htZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBdHRhY2htZW50U2NoZW1hPjtcblxuLyoqXG4gKiBgR2VuaWVNZXNzYWdlYCB3aWRlbmVkIHdpdGg6XG4gKlxuICogICAtIGBhdXRvX3JlZ2VuZXJhdGVfY291bnRgOiBudW1iZXIgc3RhbXBlZCBvbiBldmVyeSB3aXJlXG4gKiAgICAgbWVzc2FnZSB0aGF0IHRoZSBTREsgdHlwZSBvbWl0cyBhdCB2MC4xNy5cbiAqICAgLSBgYXR0YWNobWVudHNgOiByZS10eXBlZCB0byB0aGUgbG9jYWxcbiAqICAgICB7QGxpbmsgR2VuaWVBdHRhY2htZW50U2NoZW1hfSBzb1xuICogICAgIGBhdHRhY2htZW50LnF1ZXJ5Py50aG91Z2h0c2AgKGFuZCB0aGVcbiAqICAgICBgYXR0YWNobWVudF90eXBlYCBkaXNjcmltaW5hdG9yKSBpcyByZWFjaGFibGUgd2l0aG91dCBhXG4gKiAgICAgY2FzdC5cbiAqXG4gKiBFdmVyeSBvdGhlciBmaWVsZCAoYGlkYCwgYHNwYWNlX2lkYCwgYGNvbnZlcnNhdGlvbl9pZGAsXG4gKiBgdXNlcl9pZGAsIGBjcmVhdGVkX3RpbWVzdGFtcGAsIGBsYXN0X3VwZGF0ZWRfdGltZXN0YW1wYCxcbiAqIGBzdGF0dXNgLCBgY29udGVudGAsIGBtZXNzYWdlX2lkYCwgYHF1ZXJ5X3Jlc3VsdGAsIGBlcnJvcmAsXG4gKiBgZmVlZGJhY2tgKSBwYXNzZXMgdGhyb3VnaCBmcm9tIHRoZSBTREsgc2NoZW1hLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVNZXNzYWdlU2NoZW1hID0gU0RLR2VuaWVNZXNzYWdlU2NoZW1hLmV4dGVuZCh7XG4gIGF0dGFjaG1lbnRzOiB6LmFycmF5KEdlbmllQXR0YWNobWVudFNjaGVtYSkub3B0aW9uYWwoKSxcbiAgYXV0b19yZWdlbmVyYXRlX2NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG59KTtcbi8qKiBHZW5pZSBtZXNzYWdlIHNuYXBzaG90IHdpZGVuZWQgd2l0aCB0eXBlZCBhdHRhY2htZW50cyBhbmQgcmVnZW5lcmF0aW9uIGNvdW50LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVNZXNzYWdlID0gei5pbmZlcjx0eXBlb2YgR2VuaWVNZXNzYWdlU2NoZW1hPjtcblxuLyoqXG4gKiBEb21haW4gcHJvamVjdGlvbiBvZiB7QGxpbmsgR2VuaWVNZXNzYWdlU2NoZW1hfSB0aGF0IGRyb3BzIGV2ZXJ5XG4gKiB0dXJuLWxldmVsIGZpZWxkIChgaWRgLCBgc3RhdHVzYCwgYGNyZWF0ZWRfdGltZXN0YW1wYCxcbiAqIGBxdWVyeV9yZXN1bHRgLCAuLi4pIGFuZCB5aWVsZHMganVzdCB0aGUgcmVzcG9uc2UgcGF5bG9hZCBhcyBhXG4gKiBmbGF0IGBHZW5pZUF0dGFjaG1lbnRbXWAuIFBhcnNlcyB0aGUgc2FtZSB3aXJlIHNoYXBlIGFzXG4gKiB7QGxpbmsgR2VuaWVNZXNzYWdlU2NoZW1hfTsgbWlzc2luZyBgYXR0YWNobWVudHNgIGRlZmF1bHRzIHRvXG4gKiBgW11gIHNvIHRoZSBvdXRwdXQgaXMgYWx3YXlzIGFuIGFycmF5LlxuICpcbiAqIFVzZSB3aGVuIGNvbnN1bWVycyBvbmx5IGNhcmUgYWJvdXQgdGhlIG1vZGVsJ3MgcmVzcG9uc2VcbiAqIGF0dGFjaG1lbnRzIGFuZCBub3QgdGhlIHN1cnJvdW5kaW5nIG1lc3NhZ2UgZW52ZWxvcGUuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVJlc3BvbnNlU2NoZW1hID0gR2VuaWVNZXNzYWdlU2NoZW1hLnRyYW5zZm9ybSgobSkgPT4gbS5hdHRhY2htZW50cyA/PyBbXSk7XG4vKiogTm9ybWFsaXplZCBhdHRhY2htZW50IGFycmF5IGV4dHJhY3RlZCBmcm9tIGEgR2VuaWUgbWVzc2FnZSByZXNwb25zZS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVJlc3BvbnNlU2NoZW1hPjtcblxuLyoqXG4gKiBgR2VuaWVTcGFjZWAgd2lkZW5lZCB3aXRoIGFuIG9wdGlvbmFsIGBzZXJpYWxpemVkX3NwYWNlYCBmaWVsZFxuICogY2FycnlpbmcgYSBKU09OLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3BhY2UncyBmdWxsXG4gKiBkZWZpbml0aW9uIChjYXRhbG9ncywgc2NoZW1hcywgdGFibGVzLCBzYW1wbGUgcXVlc3Rpb25zLCBwcm9tcHRzLFxuICogZXRjLikgYXMgZXhwb3J0ZWQgYnkgdGhlIHdvcmtzcGFjZSBleHBvcnQgZW5kcG9pbnQuXG4gKlxuICogVGhlIGJhc2UgU0RLIHNoYXBlIChgZGVzY3JpcHRpb25gLCBgc3BhY2VfaWRgLCBgdGl0bGVgLFxuICogYHdhcmVob3VzZV9pZGApIGNvdmVycyB0aGUgZGlyZWN0b3J5LWxpc3Rpbmcgc3VyZmFjZSAtIGVub3VnaCB0b1xuICogcm91dGUgYSBjaGF0LiBgc2VyaWFsaXplZF9zcGFjZWAgaXMgb3B0LWluIHNvIGNhbGxlcnMgdGhhdCBuZWVkXG4gKiB0aGUgZnVsbCBzcGFjZSBzY2hlbWEgKGUuZy4gdG8gc2VlZCBhIHN5c3RlbSBwcm9tcHQgb3IgdG8gc2hpcFxuICogdGhlIGRlZmluaXRpb24gdG8gYW4gYWdlbnQpIGNhbiBhdHRhY2ggaXQgd2l0aG91dCBhIHNlY29uZCB0eXBlLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVTcGFjZVNjaGVtYSA9IFNES0dlbmllU3BhY2VTY2hlbWEuZXh0ZW5kKHtcbiAgc2VyaWFsaXplZF9zcGFjZTogelxuICAgIC5zdHJpbmcoKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJUaGUgY29udGVudHMgb2YgdGhlIEdlbmllIFNwYWNlIGluIHNlcmlhbGl6ZWQgc3RyaW5nIGZvcm0uIFRoaXMgZmllbGQgaXMgZXhjbHVkZWQgaW4gTGlzdCBHZW5pZSBzcGFjZXMgcmVzcG9uc2VzLiBUaGlzIGZpZWxkIHByb3ZpZGVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEpTT04gc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgc3BhY2UncyBsYXlvdXQgYW5kIGNvbXBvbmVudHMuXCIsXG4gICAgKSxcbn0pO1xuLyoqIEdlbmllIHNwYWNlIG1ldGFkYXRhIHdpdGggdGhlIGlkZW50aWZpZXJzIHJlcXVpcmVkIGJ5IGNoYXQgY29uc3VtZXJzLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVTcGFjZSA9IHouaW5mZXI8dHlwZW9mIEdlbmllU3BhY2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGVybWluYWwgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogVGVybWluYWwgR2VuaWUgbWVzc2FnZSBzdGF0dXNlcy4gVGhlIHBvbGxpbmcgbG9vcCBpbiB0aGUgY2hhdFxuICogZHJpdmVyIHN0b3BzIGFzIHNvb24gYXMgdGhlIGxhdGVzdCBtZXNzYWdlIGhhcyBvbmUgb2YgdGhlc2VcbiAqIHN0YXR1c2VzLlxuICovXG5leHBvcnQgY29uc3QgVEVSTUlOQUxfU1RBVFVTRVMgPSBbXCJDT01QTEVURURcIiwgXCJGQUlMRURcIiwgXCJDQU5DRUxMRURcIl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBUZXJtaW5hbFN0YXR1c1NjaGVtYSA9IHpcbiAgLmVudW0oVEVSTUlOQUxfU1RBVFVTRVMpXG4gIC5kZXNjcmliZShcIk1lc3NhZ2Ugc3RhdHVzIHRoYXQgZW5kcyBhIEdlbmllIHR1cm4gYW5kIHByb2R1Y2VzIGEgZmluYWwgcmVzdWx0IGV2ZW50LlwiKTtcblxuZXhwb3J0IHR5cGUgVGVybWluYWxTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBUZXJtaW5hbFN0YXR1c1NjaGVtYT47XG5cbi8qKiBOYXJyb3cgYE1lc3NhZ2VTdGF0dXMgfCB1bmRlZmluZWRgIHRvIGEge0BsaW5rIFRlcm1pbmFsU3RhdHVzfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlcm1pbmFsU3RhdHVzKHM6IE1lc3NhZ2VTdGF0dXMgfCB1bmRlZmluZWQpOiBzIGlzIFRlcm1pbmFsU3RhdHVzIHtcbiAgcmV0dXJuIHMgIT09IHVuZGVmaW5lZCAmJiAoVEVSTUlOQUxfU1RBVFVTRVMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHMpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSByYXcgR2VuaWUgd2lyZSBzdGF0dXMgKGBGRVRDSElOR19NRVRBREFUQWAsXG4gKiBgQVNLSU5HX0FJYCwgYEVYRUNVVElOR19RVUVSWWAsIC4uLikgaW50byBhIHNob3J0LCBzZW50ZW5jZS1jYXNlZFxuICogbGFiZWwgc2FmZSB0byBkcm9wIGludG8gYSBVSSBwaWxsLiBLbm93biBzdGF0ZXMgZ2V0IGEgY3VyYXRlZFxuICogbGFiZWw7IHVua25vd24gc3RhdGVzIGZhbGwgYmFjayB0byBgc3RyaW5nVXRpbHMudG9rZW5pemVXaXRoT3B0aW9uc2BcbiAqIHNvIG5ldyBzdGF0ZXMgc3RpbGwgcmVuZGVyIGNsZWFubHkgd2l0aG91dCBjb2RlIGNoYW5nZXMuXG4gKlxuICogUHVyZSAobm8gTm9kZS1vbmx5IGRlcHMpLCBzYWZlIGZvciBicm93c2VyIGJ1bmRsZXMuIEJvdGggdGhlXG4gKiBHZW5pZSBhZ2VudCAoc2VydmVyKSBhbmQgYW55IFVJIHRoYXQgc3Vic2NyaWJlcyB0byBzdGF0dXMgZXZlbnRzXG4gKiBjYWxsIHRoaXMgc28gbGFiZWxzIHN0YXkgaW4gbG9jay1zdGVwIGFjcm9zcyB0aGUgd2lyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuaXplU3RhdHVzKHN0YXR1czogTWVzc2FnZVN0YXR1cyk6IHN0cmluZyB7XG4gIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgY2FzZSBcIkZFVENISU5HX01FVEFEQVRBXCI6XG4gICAgICByZXR1cm4gXCJGZXRjaGluZyBtZXRhZGF0YVwiO1xuICAgIGNhc2UgXCJBU0tJTkdfQUlcIjpcbiAgICAgIHJldHVybiBcIkFza2luZyBHZW5pZVwiO1xuICAgIGNhc2UgXCJFWEVDVVRJTkdfUVVFUllcIjpcbiAgICAgIHJldHVybiBcIlJ1bm5pbmcgU1FMIHF1ZXJ5XCI7XG4gICAgY2FzZSBcIkZJTFRFUklOR19DT05URVhUXCI6XG4gICAgICByZXR1cm4gXCJGaWx0ZXJpbmcgY29udGV4dFwiO1xuICAgIGNhc2UgXCJQRU5ESU5HX1dBUkVIT1VTRVwiOlxuICAgICAgcmV0dXJuIFwiV2FpdGluZyBmb3Igd2FyZWhvdXNlXCI7XG4gICAgY2FzZSBcIkNPTVBMRVRFRFwiOlxuICAgICAgcmV0dXJuIFwiQ29tcGxldGVkXCI7XG4gICAgY2FzZSBcIkZBSUxFRFwiOlxuICAgICAgcmV0dXJuIFwiRmFpbGVkXCI7XG4gICAgY2FzZSBcIkNBTkNFTExFRFwiOlxuICAgICAgcmV0dXJuIFwiQ2FuY2VsbGVkXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLnN0cmluZ1V0aWxzLnRva2VuaXplV2l0aE9wdGlvbnMoeyBjYXBpdGFsaXplOiB0cnVlLCBsb3dlckNhc2U6IHRydWUgfSwgc3RhdHVzKSxcbiAgICAgIF0uam9pbihcIiBcIik7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYXR0YWNobWVudCB0eXBlIGhlbHBlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSW5zcGVjdCBhIHtAbGluayBHZW5pZUF0dGFjaG1lbnR9IGFuZCByZXR1cm4gdGhlXG4gKiB7QGxpbmsgQXR0YWNobWVudFR5cGV9IG9mIHBheWxvYWQgaXQgY2Fycmllcy4gUmV0dXJucyB0aGUgZmlyc3RcbiAqIGtub3duIHN1Yi1vYmplY3QgdGhhdCdzIHByZXNlbnQ7IGlmIG5vbmUgb2YgdGhlIGtub3duIG9uZXMgYXJlXG4gKiBwb3B1bGF0ZWQsIGZhbGxzIGJhY2sgdG8gdGhlIGZpcnN0IG5vbi1ib29ra2VlcGluZyBrZXlcbiAqIChmb3J3YXJkLWNvbXBhdCBmb3IgdHlwZXMgd2UgZG9uJ3QgbW9kZWwgeWV0KSwgZWxzZSBgXCJ1bmtub3duXCJgLlxuICpcbiAqIEhvbm9ycyBhIHByZS1zZXQgYGF0dGFjaG1lbnRfdHlwZWAgaWYgb25lIGlzIGFscmVhZHkgb24gdGhlXG4gKiB2YWx1ZSwgc28gdGhpcyBpcyBpZGVtcG90ZW50IGFjcm9zcyByZS1kZXRlY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0QXR0YWNobWVudFR5cGUoYXR0OiBHZW5pZUF0dGFjaG1lbnQpOiBBdHRhY2htZW50VHlwZSB7XG4gIGlmIChhdHQuYXR0YWNobWVudF90eXBlKSByZXR1cm4gYXR0LmF0dGFjaG1lbnRfdHlwZTtcbiAgaWYgKGF0dC5xdWVyeSkgcmV0dXJuIFwicXVlcnlcIjtcbiAgaWYgKGF0dC50ZXh0KSByZXR1cm4gXCJ0ZXh0XCI7XG4gIGlmIChhdHQuc3VnZ2VzdGVkX3F1ZXN0aW9ucykgcmV0dXJuIFwic3VnZ2VzdGVkX3F1ZXN0aW9uc1wiO1xuICBpZiAoYXR0LnZpeikgcmV0dXJuIFwidml6XCI7XG4gIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhhdHQpKSB7XG4gICAgaWYgKGsgIT09IFwiYXR0YWNobWVudF9pZFwiICYmIGsgIT09IFwiYXR0YWNobWVudF90eXBlXCIpIHJldHVybiBrO1xuICB9XG4gIHJldHVybiBcInVua25vd25cIjtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHZW5pZUNoYXQgZXZlbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFdoZXJlIG9uIHRoZSB3aXJlIGFuIGV2ZW50IHdhcyBvYnNlcnZlZC4gU3ByZWFkIGludG8gZXZlcnlcbiAqIGF0dGFjaG1lbnQtc2NvcGVkIGV2ZW50IHBheWxvYWQgc28gc3Vic2NyaWJlcnMgY2FuIHJvdXRlLCBsb2csXG4gKiBvciBjb3JyZWxhdGUgd2l0aG91dCByZS13YWxraW5nIHRoZSBtZXNzYWdlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgc3BhY2VfaWRgOiB0aGUgR2VuaWUgc3BhY2UgdGhlIGNvbnZlcnNhdGlvbiBsaXZlcyBpbi5cbiAqICAgLSBgY29udmVyc2F0aW9uX2lkYDogY29udmVyc2F0aW9uIGlkIG9uY2UgR2VuaWUgaGFzIGFzc2lnbmVkIG9uZS5cbiAqICAgLSBgbWVzc2FnZV9pZGA6IEdlbmllIG1lc3NhZ2UgaWQgZm9yIHRoZSBhY3RpdmUgdHVybi5cbiAqICAgLSBgYXR0YWNobWVudF9pZGA6IGF0dGFjaG1lbnQgdGhlIGV2ZW50IGNhbWUgZnJvbS4gT3B0aW9uYWxcbiAqICAgICBiZWNhdXNlIEdlbmllIHNvbWV0aW1lcyBlbWl0cyBhbiBhbm9ueW1vdXMgbWFpbi1hbnN3ZXJcbiAqICAgICBhdHRhY2htZW50IHdpdGhvdXQgYW4gaWQ7IHRob3NlIHN0aWxsIGdldCBldmVudHMsIGp1c3Qgd2l0aFxuICogICAgIGBhdHRhY2htZW50X2lkYCB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc3BhY2VfaWQ6IHouc3RyaW5nKCksXG4gIGNvbnZlcnNhdGlvbl9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGF0dGFjaG1lbnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIENvbnZlcnNhdGlvbiwgbWVzc2FnZSwgYW5kIGF0dGFjaG1lbnQgY29vcmRpbmF0ZXMgc2hhcmVkIGJ5IGF0dGFjaG1lbnQgZXZlbnRzLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVDaGF0TG9jYXRpb24gPSB6LmluZmVyPHR5cGVvZiBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYT47XG5cbi8qKlxuICogTGlmZWN5Y2xlIGV2ZW50OiB0aGUgcXVlc3Rpb24gdGhpcyB0dXJuIGlzIGFza2luZyBHZW5pZS4gRmlyZXNcbiAqIG9uY2UgcGVyIGBnZW5pZUV2ZW50Q2hhdGAgY2FsbCwgdGhlIGZpcnN0IHRpbWUgdGhlIHVuZGVybHlpbmdcbiAqIGBnZW5pZUNoYXRgIGxvb3AgeWllbGRzIGEgYEdlbmllTWVzc2FnZWAuIENhcnJpZXMgdGhlIHByb21wdFxuICogdGV4dCBHZW5pZSBlY2hvZWQgYmFjayBvbiBgbWVzc2FnZS5jb250ZW50YCBhbmQgdGhlIGFzc2lnbmVkXG4gKiBgbWVzc2FnZV9pZGAgc28gc3Vic2NyaWJlcnMgY2FuIGdyb3VwIGV2ZXJ5IHN1YnNlcXVlbnQgZXZlbnRcbiAqIGZvciB0aGlzIHR1cm4gdW5kZXIgb25lIHN0YWJsZSBrZXkuIGBjb252ZXJzYXRpb25faWRgIGlzXG4gKiBwb3B1bGF0ZWQgZm9yIGJvdGggb3BlbmluZyBhbmQgZm9sbG93LXVwIHR1cm5zIChHZW5pZSBhc3NpZ25zXG4gKiBpdCBvbiBgc3RhcnRDb252ZXJzYXRpb25gKS5cbiAqXG4gKiBEZWZlcnJlZCAoaW5zdGVhZCBvZiBmaXJlZCBzeW5jaHJvbm91c2x5IG9uIGVudHJ5KSBzbyB0aGVcbiAqIGBtZXNzYWdlX2lkYCBpcyBhdmFpbGFibGUgd2hlbiB0aGUgZXZlbnQgbGFuZHMgLSB0aGF0IG9uZSByb3VuZFxuICogdHJpcCBjb3N0cyB+MjAwbXMgYnV0IGxldHMgVUlzIHJlbmRlciBxdWVzdGlvbiAvIHRoaW5raW5nIC9cbiAqIHF1ZXJ5IC8gdGV4dCBhcyBhIHNpbmdsZSBncm91cGVkIGJsb2NrIHBlciBHZW5pZSBjYWxsIGluc3RlYWRcbiAqIG9mIGEgZmxhdCBzdHJlYW0uXG4gKlxuICogYGF0dGFjaG1lbnRfaWRgIGlzIGludGVudGlvbmFsbHkgYWJzZW50IC0gcXVlc3Rpb25zIGFyZSB0dXJuXG4gKiBzY29wZWQsIG5vdCBhdHRhY2htZW50IHNjb3BlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uRXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5vbWl0KHtcbiAgYXR0YWNobWVudF9pZDogdHJ1ZSxcbn0pLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInF1ZXN0aW9uXCIpLFxuICBjb250ZW50OiB6LnN0cmluZygpLFxufSk7XG4vKiogSW5pdGlhbCBldmVudCBjYXJyeWluZyB0aGUgdXNlcidzIHF1ZXN0aW9uIGFmdGVyIEdlbmllIGFzc2lnbnMgYSBtZXNzYWdlIGlkLiAqL1xuZXhwb3J0IHR5cGUgUXVlc3Rpb25FdmVudCA9IHouaW5mZXI8dHlwZW9mIFF1ZXN0aW9uRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIExpZmVjeWNsZSBldmVudDogcmF3IGBHZW5pZU1lc3NhZ2VgIHNuYXBzaG90IGZvciB0aGUgYWN0aXZlXG4gKiB0dXJuLiBGaXJlcyBvbmNlIHBlciBwb2xsIHlpZWxkLiBUaGUgZnVsbCBtZXNzYWdlIHNoYXBlXG4gKiAoaW5jbHVkaW5nIHRoZSB3aWRlbmVkIHRob3VnaHQgLyByZWdlbiAvIGF0dGFjaG1lbnQtdHlwZVxuICogZmllbGRzKSBpcyBleHBvc2VkIGlubGluZSBhcyBgbWVzc2FnZWA7IGNvbnN1bWVycyBuYXJyb3cgb25cbiAqIGBldmVudC50eXBlID09PSBcIm1lc3NhZ2VcImAgYW5kIHJlYWNoIGZvciBgZXZlbnQubWVzc2FnZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlRXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5vbWl0KHtcbiAgYXR0YWNobWVudF9pZDogdHJ1ZSxcbn0pLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcIm1lc3NhZ2VcIiksXG4gIG1lc3NhZ2U6IEdlbmllTWVzc2FnZVNjaGVtYSxcbn0pO1xuLyoqIFJhdyBHZW5pZSBtZXNzYWdlIHNuYXBzaG90IGVtaXR0ZWQgb24gZXZlcnkgcG9sbCBpdGVyYXRpb24uICovXG5leHBvcnQgdHlwZSBNZXNzYWdlRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBNZXNzYWdlRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIFRvcC1sZXZlbCBgbWVzc2FnZS5zdGF0dXNgIHRyYW5zaXRpb25lZC4gRmlyZXMgZm9yIGV2ZXJ5XG4gKiBkaXN0aW5jdCBzdGF0dXMgc2VlbiBvbiB0aGUgd2lyZSAoZS5nLiBgU1VCTUlUVEVEYCAtPlxuICogYEZJTFRFUklOR19DT05URVhUYCAtPiBgQVNLSU5HX0FJYCAtPiBgUEVORElOR19XQVJFSE9VU0VgIC0+XG4gKiBgQVNLSU5HX0FJYCAtPiBgQ09NUExFVEVEYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGF0dXNFdmVudFNjaGVtYSA9IEdlbmllQ2hhdExvY2F0aW9uU2NoZW1hLm9taXQoe1xuICBhdHRhY2htZW50X2lkOiB0cnVlLFxufSkuZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwic3RhdHVzXCIpLFxuICBzdGF0dXM6IE1lc3NhZ2VTdGF0dXNTY2hlbWEsXG4gIHByZXZpb3VzX3N0YXR1czogTWVzc2FnZVN0YXR1c1NjaGVtYS5vcHRpb25hbCgpLFxufSk7XG4vKiogTWVzc2FnZS1zdGF0dXMgdHJhbnNpdGlvbiwgaW5jbHVkaW5nIHRoZSBwcmV2aW91cyBzdGF0dXMgd2hlbiBhdmFpbGFibGUuICovXG5leHBvcnQgdHlwZSBTdGF0dXNFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN0YXR1c0V2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBBIG5ldyBhdHRhY2htZW50IHNsb3QgYXBwZWFyZWQgaW4gYG1lc3NhZ2UuYXR0YWNobWVudHNbXWAuXG4gKiBGaXJlcyBleGFjdGx5IG9uY2UgcGVyIGF0dGFjaG1lbnQgKG1hdGNoZWQgYnkgYGF0dGFjaG1lbnRfaWRgLFxuICogcG9zaXRpb25hbGx5IGZvciBhbm9ueW1vdXMgYXR0YWNobWVudHMpIHRoZSBmaXJzdCB0aW1lIHdlIHNlZVxuICogaXQuIFRoZSBzbG90J3MgcGF5bG9hZCBraW5kIGxhbmRzIGluIGBhdHRhY2htZW50X3R5cGVgIHNvIHRoZVxuICogb3V0ZXIgYHR5cGVgIGRpc2NyaW1pbmF0b3Igc3RheXMgdW5hbWJpZ3VvdXMuXG4gKi9cbmV4cG9ydCBjb25zdCBBdHRhY2htZW50RXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhdHRhY2htZW50XCIpLFxuICBpbmRleDogei5udW1iZXIoKSxcbiAgYXR0YWNobWVudF90eXBlOiBBdHRhY2htZW50VHlwZVNjaGVtYSxcbn0pO1xuLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIG5ldyB0eXBlZCBhdHRhY2htZW50IGFwcGVhcnMgb24gdGhlIG1lc3NhZ2UuICovXG5leHBvcnQgdHlwZSBBdHRhY2htZW50RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBBdHRhY2htZW50RXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIEEgbmV3IHJlYXNvbmluZyBzdGVwIGFwcGVhcmVkIG9uIGEgcXVlcnkgYXR0YWNobWVudFxuICogKGBhdHRhY2htZW50c1tpXS5xdWVyeS50aG91Z2h0c1tpXWApLiBEZWR1cGxpY2F0ZWQgcGVyXG4gKiBgKHRob3VnaHRfdHlwZSwgY29udGVudClgIHR1cGxlIHdpdGhpbiBhbiBhdHRhY2htZW50IHNvXG4gKiBzdWJzY3JpYmVycyBkb24ndCBzZWUgdGhlIHNhbWUgdGhvdWdodCBtdWx0aXBsZSB0aW1lcyAtIEdlbmllXG4gKiBzb21ldGltZXMgbXV0YXRlcyBleGlzdGluZyB0aG91Z2h0IHNsb3RzIGluIHBsYWNlLCBzbyB0aGUgZGlmZlxuICogaXMgdmFsdWUtYmFzZWQgcmF0aGVyIHRoYW4gcG9zaXRpb25hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRoaW5raW5nRXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJ0aGlua2luZ1wiKSxcbiAgdGV4dDogei5zdHJpbmcoKSxcbiAgdGhvdWdodF90eXBlOiBHZW5pZVRob3VnaHRUeXBlU2NoZW1hLFxufSk7XG4vKiogSW5jcmVtZW50YWwgR2VuaWUgcmVhc29uaW5nIGV2ZW50IGRlcml2ZWQgZnJvbSBxdWVyeSB0aG91Z2h0cy4gKi9cbmV4cG9ydCB0eXBlIFRoaW5raW5nRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBUaGlua2luZ0V2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBBIHRleHQtYXR0YWNobWVudCBgY29udGVudGAgZmllbGQgYXBwZWFyZWQgb3IgY2hhbmdlZFxuICogKGBhdHRhY2htZW50c1tpXS50ZXh0LmNvbnRlbnRgKS4gRmlyZXMgd2hlbmV2ZXIgdGhlIHNuYXBzaG90XG4gKiB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHByZXZpb3VzIG9uZSBmb3IgdGhlIHNhbWUgYXR0YWNobWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRFdmVudFNjaGVtYSA9IEdlbmllQ2hhdExvY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gIHRleHQ6IHouc3RyaW5nKCksXG59KTtcbi8qKiBOYXJyYXRpdmUgYW5zd2VyIGZyYWdtZW50IGVtaXR0ZWQgZnJvbSBhIEdlbmllIHRleHQgYXR0YWNobWVudC4gKi9cbmV4cG9ydCB0eXBlIFRleHRFdmVudCA9IHouaW5mZXI8dHlwZW9mIFRleHRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogU1FMIHdhcyBmaW5hbGl6ZWQgb24gYSBxdWVyeSBhdHRhY2htZW50XG4gKiAoYGF0dGFjaG1lbnRzW2ldLnF1ZXJ5LnF1ZXJ5YCkuIEZpcmVzIG9uY2Ugd2hlbiB0aGUgU1FMIHN0cmluZ1xuICogdHJhbnNpdGlvbnMgZnJvbSB1bmRlZmluZWQgdG8gZGVmaW5lZCwgYW5kIGFnYWluIGlmIEdlbmllIGV2ZXJcbiAqIHJld3JpdGVzIGl0LiBgdGl0bGVgIGFuZCBgZGVzY3JpcHRpb25gIGFyZSBkZW5vcm1hbGlzZWQgb2ZmIHRoZVxuICogYXR0YWNobWVudCdzIGBxdWVyeS50aXRsZWAgLyBgcXVlcnkuZGVzY3JpcHRpb25gIHNvIGNvbnN1bWVyc1xuICogY2FuIGxhYmVsIHRoZSBTUUwgcGlsbCB3aXRob3V0IHJlLXdhbGtpbmcgdGhlIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBRdWVyeUV2ZW50U2NoZW1hID0gR2VuaWVDaGF0TG9jYXRpb25TY2hlbWEuZXh0ZW5kKHtcbiAgdHlwZTogei5saXRlcmFsKFwicXVlcnlcIiksXG4gIHNxbDogei5zdHJpbmcoKSxcbiAgdGl0bGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIEZpbmFsaXplZCBvciByZXdyaXR0ZW4gU1FMIGVtaXR0ZWQgZm9yIGEgR2VuaWUgcXVlcnkgYXR0YWNobWVudC4gKi9cbmV4cG9ydCB0eXBlIFF1ZXJ5RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBTUUwgd2FzIHN1Ym1pdHRlZCB0byBhIFNRTCB3YXJlaG91c2UgYW5kIGEgc3RhdGVtZW50IGlkIHdhc1xuICogYXNzaWduZWQgKGBhdHRhY2htZW50c1tpXS5xdWVyeS5zdGF0ZW1lbnRfaWRgKS4gRmlyZXMgd2hlbiB0aGVcbiAqIHN0YXRlbWVudCBpZCB0cmFuc2l0aW9ucyBmcm9tIHVuZGVmaW5lZCB0byBkZWZpbmVkIC0gdGhpcyBpcyB0aGVcbiAqIHBvaW50IGF0IHdoaWNoIGBjbGllbnQuc3RhdGVtZW50RXhlY3V0aW9uLmdldFN0YXRlbWVudCh7IHN0YXRlbWVudF9pZCB9KWBcbiAqIGJlY29tZXMgYSB2YWxpZCBjYWxsLlxuICovXG5leHBvcnQgY29uc3QgU3RhdGVtZW50RXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdGF0ZW1lbnRcIiksXG4gIHN0YXRlbWVudF9pZDogei5zdHJpbmcoKSxcbn0pO1xuLyoqIEV2ZW50IGluZGljYXRpbmcgdGhhdCBhIHF1ZXJ5IHJlY2VpdmVkIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IGlkLiAqL1xuZXhwb3J0IHR5cGUgU3RhdGVtZW50RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBTdGF0ZW1lbnRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogUm93IGNvdW50IGZvciBhIHF1ZXJ5IGF0dGFjaG1lbnQncyByZXN1bHQgY2hhbmdlZFxuICogKGBhdHRhY2htZW50c1tpXS5xdWVyeS5xdWVyeV9yZXN1bHRfbWV0YWRhdGEucm93X2NvdW50YCkuIEZpcmVzXG4gKiBvbiBldmVyeSBjaGFuZ2UsIGluY2x1ZGluZyB0aGUgaW5pdGlhbCBgdW5kZWZpbmVkIC0+IDBgIGFuZCB0aGVcbiAqIGxhdGVyIGAwIC0+IE5gIG9uY2UgdGhlIHdhcmVob3VzZSBmaW5pc2hlcyBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBSb3dzRXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5leHRlbmQoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJyb3dzXCIpLFxuICByb3dfY291bnQ6IHoubnVtYmVyKCksXG4gIHByZXZpb3VzX3Jvd19jb3VudDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBzdGF0ZW1lbnRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIFJvdy1jb3VudCB0cmFuc2l0aW9uIGZvciBhIEdlbmllIHF1ZXJ5IHJlc3VsdC4gKi9cbmV4cG9ydCB0eXBlIFJvd3NFdmVudCA9IHouaW5mZXI8dHlwZW9mIFJvd3NFdmVudFNjaGVtYT47XG5cbi8qKlxuICogR2VuaWUgcHJvZHVjZWQgYSBmb2xsb3ctdXAgc3VnZ2VzdGVkLXF1ZXN0aW9ucyBsaXN0XG4gKiAoYGF0dGFjaG1lbnRzW2ldLnN1Z2dlc3RlZF9xdWVzdGlvbnMucXVlc3Rpb25zW11gKS4gRmlyZXMgb25jZVxuICogd2hlbiB0aGUgbGlzdCBhcHBlYXJzLCBhbmQgYWdhaW4gaWYgR2VuaWUgcmV3cml0ZXMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBTdWdnZXN0ZWRRdWVzdGlvbnNFdmVudFNjaGVtYSA9IEdlbmllQ2hhdExvY2F0aW9uU2NoZW1hLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInN1Z2dlc3RlZF9xdWVzdGlvbnNcIiksXG4gIHF1ZXN0aW9uczogei5hcnJheSh6LnN0cmluZygpKSxcbn0pO1xuLyoqIEZvbGxvdy11cCBxdWVzdGlvbiBsaXN0IGVtaXR0ZWQgd2hlbiBHZW5pZSBhZGRzIG9yIHJld3JpdGVzIHN1Z2dlc3Rpb25zLiAqL1xuZXhwb3J0IHR5cGUgU3VnZ2VzdGVkUXVlc3Rpb25zRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBTdWdnZXN0ZWRRdWVzdGlvbnNFdmVudFNjaGVtYT47XG5cbi8qKlxuICogVGhlIGFjdGl2ZSB0dXJuIHJlYWNoZWQgYSB0ZXJtaW5hbCBzdGF0dXMuIEFsd2F5cyBmaXJlcyBvbmNlXG4gKiBwZXIgdHVybiAoaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRlcm1pbmFsIGBtZXNzYWdlYCBldmVudCkuXG4gKiBDYXJyaWVzIHRoZSBmaW5hbCBgR2VuaWVNZXNzYWdlYCBzbmFwc2hvdCBpbmxpbmUgc28gc3Vic2NyaWJlcnNcbiAqIGRvbid0IG5lZWQgdG8ga2VlcCB0aGVpciBvd24gY29weSBvZiB0aGUgbGFzdCBtZXNzYWdlLlxuICovXG5leHBvcnQgY29uc3QgUmVzdWx0RXZlbnRTY2hlbWEgPSBHZW5pZUNoYXRMb2NhdGlvblNjaGVtYS5vbWl0KHtcbiAgYXR0YWNobWVudF9pZDogdHJ1ZSxcbn0pLmV4dGVuZCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcInJlc3VsdFwiKSxcbiAgc3RhdHVzOiBUZXJtaW5hbFN0YXR1c1NjaGVtYSxcbiAgbWVzc2FnZTogR2VuaWVNZXNzYWdlU2NoZW1hLFxufSk7XG4vKiogRmluYWwgZXZlbnQgZm9yIGEgR2VuaWUgdHVybiwgY2FycnlpbmcgaXRzIHRlcm1pbmFsIHN0YXR1cyBhbmQgbWVzc2FnZSBzbmFwc2hvdC4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdEV2ZW50ID0gei5pbmZlcjx0eXBlb2YgUmVzdWx0RXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIERpc2NyaW1pbmF0ZWQgdW5pb24geWllbGRlZCBieSBgZ2VuaWVFdmVudENoYXRgLiBFYWNoIHZhcmlhbnRcbiAqIGlzIGEgc2luZ2xlIGZsYXQgb2JqZWN0IHdpdGggYHR5cGVgIGFzIHRoZSBkaXNjcmltaW5hdG9yIGFuZFxuICogdGhlIHBheWxvYWQgZmllbGRzIGhvaXN0ZWQgZGlyZWN0bHkgdG8gdGhlIHRvcCBsZXZlbCAtIG5vXG4gKiBgcGF5bG9hZGAgd3JhcHBlci4gQ29uc3VtZXJzIG5hcnJvdyBvbiBgdHlwZWAgYW5kIHJlYWQgZmllbGRzXG4gKiBpbmxpbmU6XG4gKlxuICogQGV4YW1wbGVcbiAqIGZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2YgZ2VuaWVFdmVudENoYXQoc3BhY2VJZCwgXCJUb3Agc3RvcmVzP1wiKSkge1xuICogICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAqICAgICBjYXNlIFwidGhpbmtpbmdcIjpcbiAqICAgICAgIGNvbnNvbGUubG9nKGV2ZW50LnRob3VnaHRfdHlwZSwgZXZlbnQudGV4dCk7XG4gKiAgICAgICBicmVhaztcbiAqICAgICBjYXNlIFwicmVzdWx0XCI6XG4gKiAgICAgICBjb25zb2xlLmxvZyhcImRvbmU6XCIsIGV2ZW50LnN0YXR1cyk7XG4gKiAgICAgICBicmVhaztcbiAqICAgfVxuICogfVxuICpcbiAqIFN0cmVhbSBvcmRlciBwZXIgdHVybjpcbiAqXG4gKiAgIDEuIGBxdWVzdGlvbmAsIGVtaXR0ZWQgd2l0aCB0aGUgZmlyc3QgYG1lc3NhZ2VgIHlpZWxkIChkZWZlcnJlZCBzb1xuICogICAgICB0aGUgYXNzaWduZWQgYG1lc3NhZ2VfaWRgIGlzIGF2YWlsYWJsZSksIGNhcnJ5aW5nIHRoZSBwcm9tcHRcbiAqICAgICAgdGhpcyB0dXJuIHNlbnQgdG8gR2VuaWUuXG4gKiAgIDIuIGBtZXNzYWdlYCBmb3IgZXZlcnkgcG9sbCB5aWVsZCAocmF3IGBHZW5pZU1lc3NhZ2VgIG9uXG4gKiAgICAgIGBldmVudC5tZXNzYWdlYCkuXG4gKiAgIDMuIEFueSBkZXJpdmVkIGV2ZW50cyB0aGUgc25hcHNob3QgZGlmZiBwcm9kdWNlZCAoYHN0YXR1c2AsXG4gKiAgICAgIGBhdHRhY2htZW50YCwgYHRoaW5raW5nYCwgYHRleHRgLCBgcXVlcnlgLCBgc3RhdGVtZW50YCxcbiAqICAgICAgYHJvd3NgLCBgc3VnZ2VzdGVkX3F1ZXN0aW9uc2ApIGluIHRoYXQgZml4ZWQgb3JkZXIuXG4gKiAgIDQuIE9uIHRoZSB0ZXJtaW5hbCBzbmFwc2hvdCwgYSBmaW5hbCBgcmVzdWx0YCBldmVudC5cbiAqXG4gKiBFcnJvcnMgcHJvcGFnYXRlIHZpYSB0aGUgZ2VuZXJhdG9yIHRocm93aW5nIChgdHJ5YC9gY2F0Y2hgIHRoZVxuICogYGZvciBhd2FpdGApLCBub3QgdmlhIGFuIGBlcnJvcmAgdmFyaWFudCBvbiB0aGlzIHVuaW9uLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVDaGF0RXZlbnRTY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBRdWVzdGlvbkV2ZW50U2NoZW1hLFxuICBNZXNzYWdlRXZlbnRTY2hlbWEsXG4gIFN0YXR1c0V2ZW50U2NoZW1hLFxuICBBdHRhY2htZW50RXZlbnRTY2hlbWEsXG4gIFRoaW5raW5nRXZlbnRTY2hlbWEsXG4gIFRleHRFdmVudFNjaGVtYSxcbiAgUXVlcnlFdmVudFNjaGVtYSxcbiAgU3RhdGVtZW50RXZlbnRTY2hlbWEsXG4gIFJvd3NFdmVudFNjaGVtYSxcbiAgU3VnZ2VzdGVkUXVlc3Rpb25zRXZlbnRTY2hlbWEsXG4gIFJlc3VsdEV2ZW50U2NoZW1hLFxuXSk7XG4vKiogT3JkZXJlZCBldmVudCB1bmlvbiB5aWVsZGVkIGJ5IGBnZW5pZUV2ZW50Q2hhdGA7IGZhaWx1cmVzIGFyZSB0aHJvd24sIG5vdCBlbWl0dGVkLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVDaGF0RXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUNoYXRFdmVudFNjaGVtYT47XG5cbi8qKiBEaXNjcmltaW5hdG9yIHR5cGUgZm9yIHtAbGluayBHZW5pZUNoYXRFdmVudH0uICovXG5leHBvcnQgdHlwZSBHZW5pZUNoYXRFdmVudFR5cGUgPSBHZW5pZUNoYXRFdmVudFtcInR5cGVcIl07XG5cbi8qKlxuICogRmllbGQgc2V0IGZvciBhIGdpdmVuIHtAbGluayBHZW5pZUNoYXRFdmVudFR5cGV9IC0gdGhlIHZhcmlhbnRcbiAqIHdpdGggdGhlIGB0eXBlYCBkaXNjcmltaW5hdG9yIHN0cmlwcGVkLiBVc2VkIGJ5IGRldGVjdG9ycyBpblxuICogYGV2ZW50LnRzYCBzbyBlYWNoIGRldGVjdG9yIHJldHVybnMganVzdCB0aGUgcGF5bG9hZCBmaWVsZHMgYW5kXG4gKiB0aGUgb3JjaGVzdHJhdG9yIHN0YW1wcyBgdHlwZWAgYXQgeWllbGQgdGltZS5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVDaGF0RXZlbnRGaWVsZHM8VCBleHRlbmRzIEdlbmllQ2hhdEV2ZW50VHlwZT4gPSBPbWl0PFxuICBFeHRyYWN0PEdlbmllQ2hhdEV2ZW50LCB7IHR5cGU6IFQgfT4sXG4gIFwidHlwZVwiXG4+O1xuIl19
package/package.json CHANGED
@@ -23,7 +23,7 @@
23
23
  "typescript": "^5.9.3"
24
24
  },
25
25
  "dependencies": {
26
- "@dbx-tools/shared-core": "^0.9.129",
26
+ "@dbx-tools/shared-core": "^0.9.131",
27
27
  "zod": "4.3.6"
28
28
  },
29
29
  "main": "./lib/index.js",
@@ -60,7 +60,7 @@
60
60
  "./package.json": "./package.json"
61
61
  }
62
62
  },
63
- "version": "0.9.129",
63
+ "version": "0.9.131",
64
64
  "types": "./lib/index.d.ts",
65
65
  "dbxToolsConfig": {
66
66
  "tags": [
package/src/agent-mode.ts CHANGED
@@ -36,10 +36,27 @@ export const GenieAgentOutputItemSchema = z
36
36
  arguments: z.string().optional(),
37
37
  output: z.string().optional(),
38
38
  status: z.string().optional(),
39
+ role: z.string().optional(),
39
40
  content: z.array(GenieAgentContentSchema).optional(),
41
+ metadata: z.unknown().optional(),
42
+ created_at: z.number().optional(),
40
43
  })
41
44
  .loose();
42
45
 
46
+ /** One page of an Agent Mode conversation's item history. */
47
+ export const GenieAgentConversationItemsSchema = z
48
+ .object({
49
+ data: z.array(GenieAgentOutputItemSchema).describe("Conversation items, oldest first."),
50
+ has_more: z.boolean().optional().describe("Whether another page follows `last_id`."),
51
+ last_id: z.string().optional().describe("Item id that the next page starts after."),
52
+ status: z.string().optional().describe("Current status of the conversation's latest response."),
53
+ })
54
+ .loose()
55
+ .describe("Page of Agent Mode conversation items.");
56
+
57
+ /** Validated Agent Mode conversation item page. */
58
+ export type GenieAgentConversationItems = z.infer<typeof GenieAgentConversationItemsSchema>;
59
+
43
60
  /** Genie Agent Mode response carried by lifecycle events. */
44
61
  export const GenieAgentResponseSchema = z
45
62
  .object({
@@ -142,19 +159,95 @@ export function projectAgentModeMessage(
142
159
  : typeof response.error === "string"
143
160
  ? response.error
144
161
  : undefined;
162
+ const messageId = items.map(itemMessageId).find((id) => id !== undefined) ?? response.id;
145
163
  return GenieMessageSchema.parse({
146
- id: response.id,
147
- message_id: response.id,
164
+ id: messageId,
165
+ message_id: messageId,
148
166
  space_id: spaceId,
149
167
  conversation_id: response.conversation_id ?? "",
150
168
  content,
151
169
  status: agentModeStatus(response.status, items),
152
- attachments: items.flatMap(itemAttachments),
170
+ attachments: withStatementIds(items.flatMap(itemAttachments), items),
153
171
  ...(response.created_at !== undefined ? { created_timestamp: response.created_at } : {}),
154
172
  ...(errorMessage ? { error: { error: errorMessage } } : {}),
155
173
  });
156
174
  }
157
175
 
176
+ /**
177
+ * Project an Agent Mode conversation's item history onto one Genie message per
178
+ * turn. Items are grouped by their `metadata.message_id`; each turn's user
179
+ * `message` item supplies the question.
180
+ */
181
+ export function projectAgentModeConversation(
182
+ spaceId: string,
183
+ conversationId: string,
184
+ items: GenieAgentOutputItem[],
185
+ status = "completed",
186
+ ): GenieMessage[] {
187
+ const turns: Array<{
188
+ messageId: string;
189
+ question: GenieAgentOutputItem;
190
+ items: GenieAgentOutputItem[];
191
+ }> = [];
192
+ let current: (typeof turns)[number] | undefined;
193
+ for (const item of items) {
194
+ if (item.type === "message" && item.role === "user") {
195
+ const messageId =
196
+ itemMessageId(item) ??
197
+ (item.id?.endsWith("_input") ? item.id.slice(0, -"_input".length) : item.id);
198
+ if (!messageId) continue;
199
+ current = { messageId, question: item, items: [] };
200
+ turns.push(current);
201
+ continue;
202
+ }
203
+ current?.items.push(item);
204
+ }
205
+ return turns.map((turn, index) => {
206
+ const failed = turn.items.some((item) => item.status === "failed");
207
+ const turnStatus = failed ? "failed" : index === turns.length - 1 ? status : "completed";
208
+ return projectAgentModeMessage(
209
+ spaceId,
210
+ contentText(turn.question.content, "input_text").join("\n"),
211
+ {
212
+ id: turn.messageId,
213
+ status: turnStatus,
214
+ conversation_id: conversationId,
215
+ ...(turn.question.created_at !== undefined ? { created_at: turn.question.created_at } : {}),
216
+ },
217
+ turn.items,
218
+ );
219
+ });
220
+ }
221
+
222
+ function itemMetadata(item: GenieAgentOutputItem): Record<string, unknown> | undefined {
223
+ return object.isRecord(item.metadata) ? item.metadata : undefined;
224
+ }
225
+
226
+ function itemMessageId(item: GenieAgentOutputItem): string | undefined {
227
+ const messageId = itemMetadata(item)?.message_id;
228
+ return typeof messageId === "string" ? messageId : undefined;
229
+ }
230
+
231
+ /** Copy each query output's `statement_id` onto the query attachment it answers. */
232
+ function withStatementIds(
233
+ attachments: GenieAttachment[],
234
+ items: GenieAgentOutputItem[],
235
+ ): GenieAttachment[] {
236
+ const statements = new Map<string, string>();
237
+ for (const item of items) {
238
+ const statementId = itemMetadata(item)?.statement_id;
239
+ if (item.type === "function_call_output" && item.call_id && typeof statementId === "string") {
240
+ statements.set(item.call_id, statementId);
241
+ }
242
+ }
243
+ return attachments.map((attachment) => {
244
+ const statementId = attachment.query && statements.get(attachment.attachment_id ?? "");
245
+ return statementId && attachment.query
246
+ ? { ...attachment, query: { ...attachment.query, statement_id: statementId } }
247
+ : attachment;
248
+ });
249
+ }
250
+
158
251
  function agentModeStatus(value: string, items: GenieAgentOutputItem[]): GenieMessage["status"] {
159
252
  if (value === "completed") return "COMPLETED";
160
253
  if (value === "failed") return "FAILED";
@@ -177,6 +270,7 @@ function itemAttachments(item: GenieAgentOutputItem): GenieAttachment[] {
177
270
  : [{ attachment_id: id, attachment_type: "query", query: { id, thoughts } }];
178
271
  }
179
272
  if (item.type === "function_call") {
273
+ const callId = item.call_id ?? item.id;
180
274
  const argumentsValue = json.parseRecord(item.arguments);
181
275
  const query =
182
276
  typeof argumentsValue?.sql === "string"
@@ -188,10 +282,10 @@ function itemAttachments(item: GenieAgentOutputItem): GenieAttachment[] {
188
282
  return query
189
283
  ? [
190
284
  {
191
- attachment_id: id,
285
+ attachment_id: callId,
192
286
  attachment_type: "query",
193
287
  query: {
194
- id,
288
+ id: callId,
195
289
  query,
196
290
  ...(title ? { title } : {}),
197
291
  },
@@ -200,7 +294,22 @@ function itemAttachments(item: GenieAgentOutputItem): GenieAttachment[] {
200
294
  : [];
201
295
  }
202
296
  if (item.type === "function_call_output" && item.output !== undefined) {
203
- return [textAttachment(id, item.output)];
297
+ const viz = itemMetadata(item)?.viz;
298
+ if (object.isRecord(viz) && typeof viz.attachment_id === "string") {
299
+ return [
300
+ {
301
+ attachment_id: viz.attachment_id,
302
+ attachment_type: "viz",
303
+ viz: {
304
+ ...(item.output ? { title: item.output } : {}),
305
+ ...(typeof viz.query_attachment_id === "string"
306
+ ? { query_attachment_id: viz.query_attachment_id }
307
+ : {}),
308
+ },
309
+ },
310
+ ];
311
+ }
312
+ return [textAttachment(id, item.output, item.metadata)];
204
313
  }
205
314
  if (item.type === "message") {
206
315
  return (item.content ?? []).flatMap((part) =>
@@ -125,6 +125,7 @@ export const ATTACHMENT_TYPES = [
125
125
  "query",
126
126
  "text",
127
127
  "suggested_questions",
128
+ "viz",
128
129
  ] as const satisfies readonly string[];
129
130
 
130
131
  export const KnownAttachmentTypeSchema = z
@@ -181,6 +182,23 @@ export const GenieTextAttachmentSchema = dashboards.textAttachmentSchema.extend(
181
182
  /** Narrative text attachment, including its optional semantic purpose. */
182
183
  export type GenieTextAttachment = z.infer<typeof GenieTextAttachmentSchema>;
183
184
 
185
+ /**
186
+ * Visualization Genie requested for one of its query results. Genie stores only
187
+ * the title and the query attachment it charts; the client draws the chart from
188
+ * that query's statement rows.
189
+ */
190
+ export const GenieVizAttachmentSchema = z
191
+ .object({
192
+ title: z.string().optional().describe("Display title Genie chose for the chart."),
193
+ query_attachment_id: z
194
+ .string()
195
+ .optional()
196
+ .describe("`attachment_id` of the query attachment whose rows the chart plots."),
197
+ })
198
+ .describe("Genie visualization request over one query attachment.");
199
+ /** Genie visualization request over one query attachment. */
200
+ export type GenieVizAttachment = z.infer<typeof GenieVizAttachmentSchema>;
201
+
184
202
  /**
185
203
  * `GenieAttachment` with:
186
204
  *
@@ -204,6 +222,7 @@ export type GenieTextAttachment = z.infer<typeof GenieTextAttachmentSchema>;
204
222
  export const GenieAttachmentSchema = SDKGenieAttachmentSchema.extend({
205
223
  query: GenieQueryAttachmentSchema.optional(),
206
224
  text: GenieTextAttachmentSchema.optional(),
225
+ viz: GenieVizAttachmentSchema.optional(),
207
226
  attachment_type: AttachmentTypeSchema.optional(),
208
227
  });
209
228
  /** Genie message attachment with an optional computed discriminator. */
@@ -343,6 +362,7 @@ export function detectAttachmentType(att: GenieAttachment): AttachmentType {
343
362
  if (att.query) return "query";
344
363
  if (att.text) return "text";
345
364
  if (att.suggested_questions) return "suggested_questions";
365
+ if (att.viz) return "viz";
346
366
  for (const k of Object.keys(att)) {
347
367
  if (k !== "attachment_id" && k !== "attachment_type") return k;
348
368
  }