diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index 86d99d599..319702826 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed `cursor-agent` streams stalling with "Provider stream stalled while waiting for the next event" when Cursor asked the client to approve a hosted WebFetch / web search (reproduced on `cursor-grok-4.6-xhigh` after "I'll fetch the page…"). Those `interaction_query` frames — including the newer WebFetch field 9 this proto did not name — were dropped, so the server waited forever and the idle watchdog aborted a live connection. Permission queries are now answered; hosted search/fetch is approved, unnamed permission fields get an `approved` reply on the same field number, and prompts this client cannot serve are rejected so the turn can continue. + ## [17.3.5] - 2026-08-16 ### Added diff --git a/packages/ai/src/providers/cursor.ts b/packages/ai/src/providers/cursor.ts index de00062c8..cb1291e85 100644 --- a/packages/ai/src/providers/cursor.ts +++ b/packages/ai/src/providers/cursor.ts @@ -12,6 +12,9 @@ import { AgentServerMessageSchema, AgentStoreConflictErrorSchema, AgentStoreConflictResultSchema, + AskQuestionInteractionResponseSchema, + AskQuestionRejectedSchema, + AskQuestionResultSchema, AssistantMessageSchema, BackgroundShellSpawnResultSchema, CanvasDiagnosticsErrorSchema, @@ -26,6 +29,9 @@ import { ConversationStateStructureSchema, ConversationStepSchema, ConversationTurnStructureSchema, + CreatePlanErrorSchema, + CreatePlanRequestResponseSchema, + CreatePlanResultSchema, DeleteErrorSchema, DeleteRejectedSchema, DeleteResultSchema, @@ -34,6 +40,10 @@ import { DiagnosticsRejectedSchema, DiagnosticsResultSchema, DiagnosticsSuccessSchema, + ExaFetchRequestResponse_ApprovedSchema, + ExaFetchRequestResponseSchema, + ExaSearchRequestResponse_ApprovedSchema, + ExaSearchRequestResponseSchema, ExecClientControlMessageSchema, type ExecClientMessage, ExecClientMessageSchema, @@ -59,6 +69,9 @@ import { GrepSuccessSchema, type GrepUnionResult, GrepUnionResultSchema, + type InteractionQuery, + type InteractionResponse, + InteractionResponseSchema, KvClientMessageSchema, type KvServerMessage, ListMcpResourcesErrorSchema, @@ -109,6 +122,8 @@ import { SelectedContextSchema, SelectedImageSchema, SetBlobResultSchema, + SetupVmEnvironmentResultSchema, + SetupVmEnvironmentSuccessSchema, ShellAllowlistPrecheckResultSchema, type ShellArgs, ShellFailureSchema, @@ -128,11 +143,17 @@ import { SubagentAwaitResultSchema, SubagentErrorSchema, SubagentResultSchema, + SwitchModeRequestResponse_RejectedSchema, + SwitchModeRequestResponseSchema, ThinkingMessageSchema, ToolCallSchema, UserMessageActionSchema, UserMessageSchema, WebFetchAllowlistPrecheckResultSchema, + WebFetchRequestResponse_ApprovedSchema, + WebFetchRequestResponseSchema, + WebSearchRequestResponse_ApprovedSchema, + WebSearchRequestResponseSchema, WriteErrorSchema, WriteRejectedSchema, WriteResultSchema, @@ -940,7 +961,7 @@ export type ToolCallState = ToolCall & { [kStreamingBlockIndex]: number; [kStreamingPartialJson]?: string; [kStreamingLastParseLen]?: number; - [kStreamingBlockKind]: "mcp" | "todo" | "cursor-exec" | "connect-scm"; + [kStreamingBlockKind]: "mcp" | "todo" | "cursor-exec" | "connect-scm" | "web-fetch"; [kStreamingEnvelopeId]?: string; [kCursorExecResolved]?: true; }; @@ -1024,11 +1045,213 @@ export async function handleServerMessage( state, ), ); + } else if (msgCase === "interactionQuery") { + // Cursor asks the client to approve native web search / Exa fetch / etc. + // before it will continue the turn. Dropping the frame leaves the server + // waiting on a reply that never comes; the lazy idle watchdog then + // aborts a live stream with "Provider stream stalled while waiting for + // the next event" (cursor-grok-4.6-xhigh after a WebFetch/WebSearch + // permission prompt). + handleInteractionQuery(msg.message.value, h2Request); } else if (msgCase === "conversationCheckpointUpdate") { handleConversationCheckpointUpdate(msg.message.value, output, usageState, onConversationCheckpoint); } } +function handleInteractionQuery(query: InteractionQuery, h2Request: http2.ClientHttp2Stream): void { + const queryCase = query.query.case; + log("interactionQuery", queryCase, query.query.value); + if (!queryCase) { + // Newer Cursor builds add query variants this proto has not named yet + // (WebFetch was field 9). The server still blocks on a same-number + // InteractionResponse. Permission-shaped queries use Approved/Rejected + // like Exa fetch; answering `approved` unblocks the turn. + const unknown = protoUnknownFields(query).find(field => field.wireType === 2 && field.no >= 2); + if (unknown) { + log("warn", "unknownInteractionQueryApproved", { id: query.id, field: unknown.no }); + sendUnknownApprovedInteractionResponse(h2Request, query.id, unknown.no); + return; + } + log("warn", "unknownInteractionQuery", { id: query.id }); + return; + } + + switch (queryCase) { + case "webSearchRequestQuery": + // Permission gate, not "please run the search". Approve so Cursor + // performs the hosted search and the turn continues. + sendInteractionResponse(h2Request, query.id, { + case: "webSearchRequestResponse", + value: create(WebSearchRequestResponseSchema, { + result: { case: "approved", value: create(WebSearchRequestResponse_ApprovedSchema, {}) }, + }), + }); + return; + case "exaSearchRequestQuery": + sendInteractionResponse(h2Request, query.id, { + case: "exaSearchRequestResponse", + value: create(ExaSearchRequestResponseSchema, { + result: { case: "approved", value: create(ExaSearchRequestResponse_ApprovedSchema, {}) }, + }), + }); + return; + case "exaFetchRequestQuery": + sendInteractionResponse(h2Request, query.id, { + case: "exaFetchRequestResponse", + value: create(ExaFetchRequestResponseSchema, { + result: { case: "approved", value: create(ExaFetchRequestResponse_ApprovedSchema, {}) }, + }), + }); + return; + case "webFetchRequestQuery": + // Hosted WebFetch permission prompt. Field 9 is what cursor-grok-4.6-xhigh + // sends after "I'll fetch the page…"; answering lets the server continue. + sendInteractionResponse(h2Request, query.id, { + case: "webFetchRequestResponse", + value: create(WebFetchRequestResponseSchema, { + result: { case: "approved", value: create(WebFetchRequestResponse_ApprovedSchema, {}) }, + }), + }); + return; + case "askQuestionInteractionQuery": + sendInteractionResponse(h2Request, query.id, { + case: "askQuestionInteractionResponse", + value: create(AskQuestionInteractionResponseSchema, { + result: create(AskQuestionResultSchema, { + result: { + case: "rejected", + value: create(AskQuestionRejectedSchema, { + reason: `Interactive questions are ${NOT_IMPLEMENTED_SUFFIX}`, + }), + }, + }), + }), + }); + return; + case "switchModeRequestQuery": + sendInteractionResponse(h2Request, query.id, { + case: "switchModeRequestResponse", + value: create(SwitchModeRequestResponseSchema, { + result: { + case: "rejected", + value: create(SwitchModeRequestResponse_RejectedSchema, { + reason: `Mode switches are ${NOT_IMPLEMENTED_SUFFIX}`, + }), + }, + }), + }); + return; + case "createPlanRequestQuery": + sendInteractionResponse(h2Request, query.id, { + case: "createPlanRequestResponse", + value: create(CreatePlanRequestResponseSchema, { + result: create(CreatePlanResultSchema, { + result: { + case: "error", + value: create(CreatePlanErrorSchema, { + error: `Plan files are ${NOT_IMPLEMENTED_SUFFIX}`, + }), + }, + }), + }), + }); + return; + case "setupVmEnvironmentArgs": + // Result oneof has only `success`. Answering is still required: silence + // strands the query id the same way an unanswered search approval does. + log("warn", "setupVmEnvironmentApprovedEmpty", { id: query.id }); + sendInteractionResponse(h2Request, query.id, { + case: "setupVmEnvironmentResult", + value: create(SetupVmEnvironmentResultSchema, { + result: { case: "success", value: create(SetupVmEnvironmentSuccessSchema, {}) }, + }), + }); + return; + default: { + const _exhaustive: never = queryCase; + log("warn", "unhandledInteractionQuery", { queryCase: _exhaustive, id: query.id }); + } + } +} + +type ProtoUnknownField = { no: number; wireType: number; data: Uint8Array }; + +type HostedFetchCall = { + args?: { url?: string; toolCallId?: string }; + result?: { result?: { case?: string; value?: { content?: string; error?: string; url?: string } } }; +}; + +function selectHostedFetchCall( + toolCall: { tool?: { case?: string; value?: HostedFetchCall } } | undefined, +): HostedFetchCall | undefined { + const oneof = toolCall?.tool; + if (oneof?.case === "fetchToolCall" || oneof?.case === "webFetchToolCall") return oneof.value; + return undefined; +} + +function hostedFetchUnknown(toolCall: object | undefined): boolean { + if (!toolCall) return false; + return ( + protoUnknownFields(toolCall).some(field => field.no === 37) || + protoUnknownFields((toolCall as { tool?: object }).tool ?? {}).some(field => field.no === 37) + ); +} + +function extractHttpUrlFromUnknown(message: object): string | undefined { + for (const field of protoUnknownFields(message)) { + const match = new TextDecoder().decode(field.data).match(/https?:\/\/[^\x00-\x1f]+/); + if (match) return match[0]; + } + const nested = (message as { tool?: object }).tool; + return nested ? extractHttpUrlFromUnknown(nested) : undefined; +} + +function describeHostedFetchResult(call: HostedFetchCall | undefined): { text: string; isError: boolean } { + const result = call?.result?.result; + if (result?.case === "success") { + return { text: result.value?.content || result.value?.url || "Fetched", isError: false }; + } + if (result?.case === "error") { + return { text: result.value?.error || "Fetch failed", isError: true }; + } + return { text: "Fetch completed", isError: false }; +} + +function protoUnknownFields(message: object): ProtoUnknownField[] { + const raw = (message as { $unknown?: ProtoUnknownField[] }).$unknown; + return Array.isArray(raw) ? raw : []; +} + +function sendUnknownApprovedInteractionResponse( + h2Request: http2.ClientHttp2Stream, + queryId: number, + fieldNo: number, +): void { + // `approved {}` on the matching response oneof: field 1, empty message. + const response = create(InteractionResponseSchema, { id: queryId }); + (response as { $unknown?: ProtoUnknownField[] }).$unknown = [ + { no: fieldNo, wireType: 2, data: new Uint8Array([0x0a, 0x00]) }, + ]; + const clientMessage = create(AgentClientMessageSchema, { + message: { case: "interactionResponse", value: response }, + }); + h2Request.write(frameConnectMessage(toBinary(AgentClientMessageSchema, clientMessage))); + log("interactionResponse", "unknownApproved", { id: queryId, field: fieldNo }); +} + +function sendInteractionResponse( + h2Request: http2.ClientHttp2Stream, + queryId: number, + result: InteractionResponse["result"], +): void { + const response = create(InteractionResponseSchema, { id: queryId, result }); + const clientMessage = create(AgentClientMessageSchema, { + message: { case: "interactionResponse", value: response }, + }); + h2Request.write(frameConnectMessage(toBinary(AgentClientMessageSchema, clientMessage))); + log("interactionResponse", result.case, { id: queryId }); +} + function handleKvServerMessage( kvMsg: KvServerMessage, blobStore: Map, @@ -3905,6 +4128,28 @@ export function processInteractionUpdate( output.content.push(block); retainStreamedCall(state, block, update.message.value.callId); stream.push({ type: "toolcall_start", contentIndex: output.content.length - 1, partial: output }); + return; + } + + const fetchCall = selectHostedFetchCall(toolCall); + if (fetchCall || hostedFetchUnknown(toolCall)) { + // Hosted WebFetch / Fetch is permission-gated via InteractionQuery, then + // run server-side. Stamp resolved so agent-loop does not try a local tool. + const url = fetchCall?.args?.url || extractHttpUrlFromUnknown(toolCall); + const callId = fetchCall?.args?.toolCallId || update.message.value.callId || crypto.randomUUID(); + const block: ToolCallState = { + type: "toolCall", + id: callId, + name: "web_fetch", + arguments: url ? { url } : {}, + [kStreamingBlockIndex]: output.content.length, + [kStreamingBlockKind]: "web-fetch", + [kStreamingEnvelopeId]: update.message.value.callId || undefined, + [kCursorExecResolved]: true, + }; + output.content.push(block); + retainStreamedCall(state, block, update.message.value.callId); + stream.push({ type: "toolcall_start", contentIndex: output.content.length - 1, partial: output }); } } } else if (updateCase === "toolCallDelta" || updateCase === "partialToolCall") { @@ -3982,6 +4227,19 @@ export function processInteractionUpdate( isError, timestamp: Date.now(), }); + } else if (settled[kStreamingBlockKind] === "web-fetch") { + const fetchCall = selectHostedFetchCall(toolCall); + const url = fetchCall?.args?.url || extractHttpUrlFromUnknown(toolCall ?? {}); + if (url) settled.arguments = { url }; + const { text, isError } = describeHostedFetchResult(fetchCall); + state.onToolResult?.({ + role: "toolResult", + toolCallId: settled.id, + toolName: "web_fetch", + content: [{ type: "text", text }], + isError, + timestamp: Date.now(), + }); } else if (settled[kStreamingBlockKind] === "todo") { // Only the server's success snapshot is authoritative: the request args // may differ from what was actually stored after a merge, and on diff --git a/packages/ai/src/providers/cursor/proto/agent.proto b/packages/ai/src/providers/cursor/proto/agent.proto index 47c37aeac..82ff27268 100644 --- a/packages/ai/src/providers/cursor/proto/agent.proto +++ b/packages/ai/src/providers/cursor/proto/agent.proto @@ -426,11 +426,13 @@ message ToolCall { PiLsToolCall pi_ls_tool_call = 67; ConnectScmToolCall connect_scm_tool_call = 68; SearchConversationsToolCall search_conversations_tool_call = 69; + FetchToolCall web_fetch_tool_call = 37; } // Modern builds carry the call id on the envelope instead of inside each - // variant's args. Fields 37-53, 55, 56, 58 (further tool variants) and 54 - // (hook_additional_contexts), 59/60 (started_at_ms/completed_at_ms) are not - // modelled and decode into unknown fields; do not reuse those numbers. + // variant's args. Field 37 is the hosted WebFetch tool. Fields 38-53, 55, + // 56, 58 (further tool variants) and 54 (hook_additional_contexts), + // 59/60 (started_at_ms/completed_at_ms) are not modelled and decode into + // unknown fields; do not reuse those numbers. optional string tool_call_id = 57; } @@ -883,6 +885,7 @@ message InteractionQuery { ExaFetchRequestQuery exa_fetch_request_query = 6; CreatePlanRequestQuery create_plan_request_query = 7; SetupVmEnvironmentArgs setup_vm_environment_args = 8; + WebFetchRequestQuery web_fetch_request_query = 9; } } @@ -896,9 +899,28 @@ message InteractionResponse { ExaFetchRequestResponse exa_fetch_request_response = 6; CreatePlanRequestResponse create_plan_request_response = 7; SetupVmEnvironmentResult setup_vm_environment_result = 8; + WebFetchRequestResponse web_fetch_request_response = 9; } } +message WebFetchRequestQuery { + FetchArgs args = 1; +} + +message WebFetchRequestResponse { + oneof result { + WebFetchRequestResponse_Approved approved = 1; + WebFetchRequestResponse_Rejected rejected = 2; + } +} + +message WebFetchRequestResponse_Approved { +} + +message WebFetchRequestResponse_Rejected { + string reason = 1; +} + message AskQuestionInteractionQuery { AskQuestionArgs args = 1; string tool_call_id = 2; diff --git a/packages/ai/test/cursor-interaction-query.test.ts b/packages/ai/test/cursor-interaction-query.test.ts new file mode 100644 index 000000000..540e52c2a --- /dev/null +++ b/packages/ai/test/cursor-interaction-query.test.ts @@ -0,0 +1,262 @@ +import { describe, expect, it } from "bun:test"; +import { create, fromBinary } from "@bufbuild/protobuf"; +import { type BlockState, handleServerMessage, type ToolCallState } from "@oh-my-pi/pi-ai/providers/cursor"; +import type { AssistantMessage } from "@oh-my-pi/pi-ai/types"; +import { AssistantMessageEventStream } from "@oh-my-pi/pi-ai/utils/event-stream"; +import type { InteractionQuery, InteractionResponse } from "@oh-my-pi/pi-catalog/discovery/cursor-gen/agent_pb"; +import { + type AgentClientMessage, + AgentClientMessageSchema, + AgentServerMessageSchema, + AskQuestionInteractionQuerySchema, + CreatePlanRequestQuerySchema, + ExaFetchArgsSchema, + ExaFetchRequestQuerySchema, + ExaSearchArgsSchema, + ExaSearchRequestQuerySchema, + FetchArgsSchema, + InteractionQuerySchema, + SwitchModeRequestQuerySchema, + WebFetchRequestQuerySchema, + WebSearchArgsSchema, + WebSearchRequestQuerySchema, +} from "@oh-my-pi/pi-catalog/discovery/cursor-gen/agent_pb"; + +function cursorAssistantMessage(): AssistantMessage { + return { + role: "assistant", + content: [], + api: "cursor-agent", + provider: "cursor", + model: "cursor-grok-4.6-xhigh-fast", + usage: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + totalTokens: 0, + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }, + }, + stopReason: "stop", + timestamp: 0, + }; +} + +function newBlockState(): BlockState { + let textBlock: BlockState["currentTextBlock"] = null; + let thinkingBlock: BlockState["currentThinkingBlock"] = null; + let toolCall: ToolCallState | null = null; + return { + get currentTextBlock() { + return textBlock; + }, + get currentThinkingBlock() { + return thinkingBlock; + }, + get currentToolCall() { + return toolCall; + }, + openToolCalls: new Map(), + resolvedMcpToolCallIds: new Set(), + firstTokenTime: undefined, + setTextBlock: b => { + textBlock = b; + }, + setThinkingBlock: b => { + thinkingBlock = b; + }, + setToolCall: t => { + toolCall = t; + }, + setFirstTokenTime: () => {}, + }; +} + +function decodeClientFrame(frame: Buffer): AgentClientMessage { + const length = frame.readUInt32BE(1); + return fromBinary(AgentClientMessageSchema, frame.subarray(5, 5 + length)); +} + +function expectInteractionResponse(frames: AgentClientMessage[]): InteractionResponse { + expect(frames).toHaveLength(1); + const frame = frames[0]; + if (frame?.message.case !== "interactionResponse") { + throw new Error("expected an interactionResponse frame"); + } + return frame.message.value; +} + +async function dispatchQuery(query: InteractionQuery): Promise { + const written: Buffer[] = []; + const h2Request = { + write: (chunk: Buffer) => { + written.push(chunk); + return true; + }, + } as unknown as Parameters[5]; + + await handleServerMessage( + create(AgentServerMessageSchema, { + message: { + case: "interactionQuery", + value: query, + }, + }), + cursorAssistantMessage(), + new AssistantMessageEventStream(), + newBlockState(), + new Map(), + h2Request, + undefined, + undefined, + { sawTokenDelta: false }, + [], + ); + + return written.map(decodeClientFrame); +} + +describe("Cursor interaction queries", () => { + it("approves hosted web search so the turn is not left waiting on permission", async () => { + const response = expectInteractionResponse( + await dispatchQuery( + create(InteractionQuerySchema, { + id: 11, + query: { + case: "webSearchRequestQuery", + value: create(WebSearchRequestQuerySchema, { + args: create(WebSearchArgsSchema, { searchTerm: "Grok Bot use cases", toolCallId: "ws-1" }), + }), + }, + }), + ), + ); + expect(response.id).toBe(11); + expect(response.result.case).toBe("webSearchRequestResponse"); + if (response.result.case !== "webSearchRequestResponse") return; + expect(response.result.value.result.case).toBe("approved"); + }); + + it("approves Exa fetch, the permission prompt that stalled cursor-grok-4.6-xhigh", async () => { + const response = expectInteractionResponse( + await dispatchQuery( + create(InteractionQuerySchema, { + id: 12, + query: { + case: "exaFetchRequestQuery", + value: create(ExaFetchRequestQuerySchema, { + args: create(ExaFetchArgsSchema, { + ids: ["https://docs.x.ai/grok-bot/use-cases"], + toolCallId: "fetch-1", + }), + }), + }, + }), + ), + ); + expect(response.id).toBe(12); + expect(response.result.case).toBe("exaFetchRequestResponse"); + if (response.result.case !== "exaFetchRequestResponse") return; + expect(response.result.value.result.case).toBe("approved"); + }); + + it("approves Exa search", async () => { + const response = expectInteractionResponse( + await dispatchQuery( + create(InteractionQuerySchema, { + id: 13, + query: { + case: "exaSearchRequestQuery", + value: create(ExaSearchRequestQuerySchema, { + args: create(ExaSearchArgsSchema, { + query: "Grok Bot", + type: "auto", + numResults: 5, + toolCallId: "es-1", + }), + }), + }, + }), + ), + ); + expect(response.result.case).toBe("exaSearchRequestResponse"); + if (response.result.case !== "exaSearchRequestResponse") return; + expect(response.result.value.result.case).toBe("approved"); + }); + + it("rejects ask-question instead of leaving the query unanswered", async () => { + const response = expectInteractionResponse( + await dispatchQuery( + create(InteractionQuerySchema, { + id: 14, + query: { + case: "askQuestionInteractionQuery", + value: create(AskQuestionInteractionQuerySchema, { toolCallId: "ask-1" }), + }, + }), + ), + ); + expect(response.result.case).toBe("askQuestionInteractionResponse"); + if (response.result.case !== "askQuestionInteractionResponse") return; + expect(response.result.value.result?.result.case).toBe("rejected"); + }); + + it("rejects mode switches", async () => { + const response = expectInteractionResponse( + await dispatchQuery( + create(InteractionQuerySchema, { + id: 15, + query: { + case: "switchModeRequestQuery", + value: create(SwitchModeRequestQuerySchema, {}), + }, + }), + ), + ); + expect(response.result.case).toBe("switchModeRequestResponse"); + if (response.result.case !== "switchModeRequestResponse") return; + expect(response.result.value.result.case).toBe("rejected"); + }); + + it("errors create-plan so the server is not blocked on a plan URI", async () => { + const response = expectInteractionResponse( + await dispatchQuery( + create(InteractionQuerySchema, { + id: 16, + query: { + case: "createPlanRequestQuery", + value: create(CreatePlanRequestQuerySchema, { toolCallId: "plan-1" }), + }, + }), + ), + ); + expect(response.result.case).toBe("createPlanRequestResponse"); + if (response.result.case !== "createPlanRequestResponse") return; + expect(response.result.value.result?.result.case).toBe("error"); + }); + + it("approves hosted WebFetch permission queries", async () => { + const response = expectInteractionResponse( + await dispatchQuery( + create(InteractionQuerySchema, { + id: 18, + query: { + case: "webFetchRequestQuery", + value: create(WebFetchRequestQuerySchema, { + args: create(FetchArgsSchema, { url: "https://example.com", toolCallId: "fetch-2" }), + }), + }, + }), + ), + ); + expect(response.id).toBe(18); + expect(response.result.case).toBe("webFetchRequestResponse"); + if (response.result.case !== "webFetchRequestResponse") return; + expect(response.result.value.result.case).toBe("approved"); + }); + + it("does not invent a reply for an unknown query variant", async () => { + const frames = await dispatchQuery(create(InteractionQuerySchema, { id: 17 })); + expect(frames).toHaveLength(0); + }); +}); diff --git a/packages/catalog/CHANGELOG.md b/packages/catalog/CHANGELOG.md index 288b1940c..e8db4f06a 100644 --- a/packages/catalog/CHANGELOG.md +++ b/packages/catalog/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Added + +- Regenerated the Cursor agent protobufs to model hosted WebFetch permission queries (`interaction_query` / `interaction_response` field 9) and the matching `ToolCall` variant (field 37). + ## [17.3.6] - 2026-08-17 ### Changed diff --git a/packages/catalog/src/discovery/cursor-gen/agent_pb.ts b/packages/catalog/src/discovery/cursor-gen/agent_pb.ts index 21e4d8244..6dfdccf30 100644 --- a/packages/catalog/src/discovery/cursor-gen/agent_pb.ts +++ b/packages/catalog/src/discovery/cursor-gen/agent_pb.ts @@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file agent.proto. */ export const file_agent: GenFile = /*@__PURE__*/ - fileDesc("CgthZ2VudC5wcm90bxIIYWdlbnQudjEicgoOR2xvYlRvb2xSZXN1bHQSLAoHc3VjY2VzcxgBIAEoCzIZLmFnZW50LnYxLkdsb2JUb29sU3VjY2Vzc0gAEigKBWVycm9yGAIgASgLMhcuYWdlbnQudjEuR2xvYlRvb2xFcnJvckgAQggKBnJlc3VsdCIeCg1HbG9iVG9vbEVycm9yEg0KBWVycm9yGAEgASgJIokBCg9HbG9iVG9vbFN1Y2Nlc3MSDwoHcGF0dGVybhgBIAEoCRIMCgRwYXRoGAIgASgJEg0KBWZpbGVzGAMgAygJEhMKC3RvdGFsX2ZpbGVzGAQgASgFEhgKEGNsaWVudF90cnVuY2F0ZWQYBSABKAgSGQoRcmlwZ3JlcF90cnVuY2F0ZWQYBiABKAgiRgoMR2xvYlRvb2xDYWxsEgwKBGFyZ3MYASABKAwSKAoGcmVzdWx0GAIgASgLMhguYWdlbnQudjEuR2xvYlRvb2xSZXN1bHQibQoRUmVhZExpbnRzVG9vbENhbGwSKQoEYXJncxgBIAEoCzIbLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xBcmdzEi0KBnJlc3VsdBgCIAEoCzIdLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xSZXN1bHQiIgoRUmVhZExpbnRzVG9vbEFyZ3MSDQoFcGF0aHMYASADKAkigQEKE1JlYWRMaW50c1Rvb2xSZXN1bHQSMQoHc3VjY2VzcxgBIAEoCzIeLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xTdWNjZXNzSAASLQoFZXJyb3IYAiABKAsyHC5hZ2VudC52MS5SZWFkTGludHNUb29sRXJyb3JIAEIICgZyZXN1bHQiewoUUmVhZExpbnRzVG9vbFN1Y2Nlc3MSMwoQZmlsZV9kaWFnbm9zdGljcxgBIAMoCzIZLmFnZW50LnYxLkZpbGVEaWFnbm9zdGljcxITCgt0b3RhbF9maWxlcxgCIAEoBRIZChF0b3RhbF9kaWFnbm9zdGljcxgDIAEoBSJpCg9GaWxlRGlhZ25vc3RpY3MSDAoEcGF0aBgBIAEoCRItCgtkaWFnbm9zdGljcxgCIAMoCzIYLmFnZW50LnYxLkRpYWdub3N0aWNJdGVtEhkKEWRpYWdub3N0aWNzX2NvdW50GAMgASgFIqsBCg5EaWFnbm9zdGljSXRlbRIuCghzZXZlcml0eRgBIAEoDjIcLmFnZW50LnYxLkRpYWdub3N0aWNTZXZlcml0eRIoCgVyYW5nZRgCIAEoCzIZLmFnZW50LnYxLkRpYWdub3N0aWNSYW5nZRIPCgdtZXNzYWdlGAMgASgJEg4KBnNvdXJjZRgEIAEoCRIMCgRjb2RlGAUgASgJEhAKCGlzX3N0YWxlGAYgASgIIlUKD0RpYWdub3N0aWNSYW5nZRIhCgVzdGFydBgBIAEoCzISLmFnZW50LnYxLlBvc2l0aW9uEh8KA2VuZBgCIAEoCzISLmFnZW50LnYxLlBvc2l0aW9uIisKElJlYWRMaW50c1Rvb2xFcnJvchIVCg1lcnJvcl9tZXNzYWdlGAEgASgJIj0KDE1jcFRvb2xFcnJvchINCgVlcnJvchgBIAEoCRIeChZyZWFkX3Rvb2xfZGVmX3JlbWluZGVyGAIgASgJItIBCg1NY3BUb29sUmVzdWx0EicKB3N1Y2Nlc3MYASABKAsyFC5hZ2VudC52MS5NY3BTdWNjZXNzSAASJwoFZXJyb3IYAiABKAsyFi5hZ2VudC52MS5NY3BUb29sRXJyb3JIABIpCghyZWplY3RlZBgDIAEoCzIVLmFnZW50LnYxLk1jcFJlamVjdGVkSAASOgoRcGVybWlzc2lvbl9kZW5pZWQYBCABKAsyHS5hZ2VudC52MS5NY3BQZXJtaXNzaW9uRGVuaWVkSABCCAoGcmVzdWx0IoEBCgtNY3BUb29sQ2FsbBIfCgRhcmdzGAEgASgLMhEuYWdlbnQudjEuTWNwQXJncxInCgZyZXN1bHQYAiABKAsyFy5hZ2VudC52MS5NY3BUb29sUmVzdWx0EhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQFCDgoMX2Rlc2NyaXB0aW9uIm0KEVNlbVNlYXJjaFRvb2xDYWxsEikKBGFyZ3MYASABKAsyGy5hZ2VudC52MS5TZW1TZWFyY2hUb29sQXJncxItCgZyZXN1bHQYAiABKAsyHS5hZ2VudC52MS5TZW1TZWFyY2hUb29sUmVzdWx0IlMKEVNlbVNlYXJjaFRvb2xBcmdzEg0KBXF1ZXJ5GAEgASgJEhoKEnRhcmdldF9kaXJlY3RvcmllcxgCIAMoCRITCgtleHBsYW5hdGlvbhgDIAEoCSKBAQoTU2VtU2VhcmNoVG9vbFJlc3VsdBIxCgdzdWNjZXNzGAEgASgLMh4uYWdlbnQudjEuU2VtU2VhcmNoVG9vbFN1Y2Nlc3NIABItCgVlcnJvchgCIAEoCzIcLmFnZW50LnYxLlNlbVNlYXJjaFRvb2xFcnJvckgAQggKBnJlc3VsdCI9ChRTZW1TZWFyY2hUb29sU3VjY2VzcxIPCgdyZXN1bHRzGAEgASgJEhQKDGNvZGVfcmVzdWx0cxgCIAMoDCIrChJTZW1TZWFyY2hUb29sRXJyb3ISFQoNZXJyb3JfbWVzc2FnZRgBIAEoCSKCAQoYTGlzdE1jcFJlc291cmNlc1Rvb2xDYWxsEjAKBGFyZ3MYASABKAsyIi5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzRXhlY0FyZ3MSNAoGcmVzdWx0GAIgASgLMiQuYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc0V4ZWNSZXN1bHQifwoXUmVhZE1jcFJlc291cmNlVG9vbENhbGwSLwoEYXJncxgBIAEoCzIhLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZUV4ZWNBcmdzEjMKBnJlc3VsdBgCIAEoCzIjLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZUV4ZWNSZXN1bHQiWQoNRmV0Y2hUb29sQ2FsbBIhCgRhcmdzGAEgASgLMhMuYWdlbnQudjEuRmV0Y2hBcmdzEiUKBnJlc3VsdBgCIAEoCzIVLmFnZW50LnYxLkZldGNoUmVzdWx0Im4KFFJlY29yZFNjcmVlblRvb2xDYWxsEigKBGFyZ3MYASABKAsyGi5hZ2VudC52MS5SZWNvcmRTY3JlZW5BcmdzEiwKBnJlc3VsdBgCIAEoCzIcLmFnZW50LnYxLlJlY29yZFNjcmVlblJlc3VsdCJ3ChdXcml0ZVNoZWxsU3RkaW5Ub29sQ2FsbBIrCgRhcmdzGAEgASgLMh0uYWdlbnQudjEuV3JpdGVTaGVsbFN0ZGluQXJncxIvCgZyZXN1bHQYAiABKAsyHy5hZ2VudC52MS5Xcml0ZVNoZWxsU3RkaW5SZXN1bHQisQEKC1JlZmxlY3RBcmdzEiIKGnVuZXhwZWN0ZWRfYWN0aW9uX291dGNvbWVzGAEgASgJEh0KFXJlbGV2YW50X2luc3RydWN0aW9ucxgCIAEoCRIZChFzY2VuYXJpb19hbmFseXNpcxgDIAEoCRIaChJjcml0aWNhbF9zeW50aGVzaXMYBCABKAkSEgoKbmV4dF9zdGVwcxgFIAEoCRIUCgx0b29sX2NhbGxfaWQYBiABKAkibwoNUmVmbGVjdFJlc3VsdBIrCgdzdWNjZXNzGAEgASgLMhguYWdlbnQudjEuUmVmbGVjdFN1Y2Nlc3NIABInCgVlcnJvchgCIAEoCzIWLmFnZW50LnYxLlJlZmxlY3RFcnJvckgAQggKBnJlc3VsdCIQCg5SZWZsZWN0U3VjY2VzcyIdCgxSZWZsZWN0RXJyb3ISDQoFZXJyb3IYASABKAkiXwoPUmVmbGVjdFRvb2xDYWxsEiMKBGFyZ3MYASABKAsyFS5hZ2VudC52MS5SZWZsZWN0QXJncxInCgZyZXN1bHQYAiABKAsyFy5hZ2VudC52MS5SZWZsZWN0UmVzdWx0IlkKF1N0YXJ0R3JpbmRFeGVjdXRpb25BcmdzEhgKC2V4cGxhbmF0aW9uGAEgASgJSACIAQESFAoMdG9vbF9jYWxsX2lkGAIgASgJQg4KDF9leHBsYW5hdGlvbiKTAQoZU3RhcnRHcmluZEV4ZWN1dGlvblJlc3VsdBI3CgdzdWNjZXNzGAEgASgLMiQuYWdlbnQudjEuU3RhcnRHcmluZEV4ZWN1dGlvblN1Y2Nlc3NIABIzCgVlcnJvchgCIAEoCzIiLmFnZW50LnYxLlN0YXJ0R3JpbmRFeGVjdXRpb25FcnJvckgAQggKBnJlc3VsdCIcChpTdGFydEdyaW5kRXhlY3V0aW9uU3VjY2VzcyIpChhTdGFydEdyaW5kRXhlY3V0aW9uRXJyb3ISDQoFZXJyb3IYASABKAkigwEKG1N0YXJ0R3JpbmRFeGVjdXRpb25Ub29sQ2FsbBIvCgRhcmdzGAEgASgLMiEuYWdlbnQudjEuU3RhcnRHcmluZEV4ZWN1dGlvbkFyZ3MSMwoGcmVzdWx0GAIgASgLMiMuYWdlbnQudjEuU3RhcnRHcmluZEV4ZWN1dGlvblJlc3VsdCJYChZTdGFydEdyaW5kUGxhbm5pbmdBcmdzEhgKC2V4cGxhbmF0aW9uGAEgASgJSACIAQESFAoMdG9vbF9jYWxsX2lkGAIgASgJQg4KDF9leHBsYW5hdGlvbiKQAQoYU3RhcnRHcmluZFBsYW5uaW5nUmVzdWx0EjYKB3N1Y2Nlc3MYASABKAsyIy5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdTdWNjZXNzSAASMgoFZXJyb3IYAiABKAsyIS5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdFcnJvckgAQggKBnJlc3VsdCIbChlTdGFydEdyaW5kUGxhbm5pbmdTdWNjZXNzIigKF1N0YXJ0R3JpbmRQbGFubmluZ0Vycm9yEg0KBWVycm9yGAEgASgJIoABChpTdGFydEdyaW5kUGxhbm5pbmdUb29sQ2FsbBIuCgRhcmdzGAEgASgLMiAuYWdlbnQudjEuU3RhcnRHcmluZFBsYW5uaW5nQXJncxIyCgZyZXN1bHQYAiABKAsyIi5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdSZXN1bHQinAEKCFRhc2tBcmdzEhMKC2Rlc2NyaXB0aW9uGAEgASgJEg4KBnByb21wdBgCIAEoCRItCg1zdWJhZ2VudF90eXBlGAMgASgLMhYuYWdlbnQudjEuU3ViYWdlbnRUeXBlEhIKBW1vZGVsGAQgASgJSACIAQESEwoGcmVzdW1lGAUgASgJSAGIAQFCCAoGX21vZGVsQgkKB19yZXN1bWUiqgEKC1Rhc2tTdWNjZXNzEjYKEmNvbnZlcnNhdGlvbl9zdGVwcxgBIAMoCzIaLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0ZXASFQoIYWdlbnRfaWQYAiABKAlIAIgBARIVCg1pc19iYWNrZ3JvdW5kGAMgASgIEhgKC2R1cmF0aW9uX21zGAQgASgESAGIAQFCCwoJX2FnZW50X2lkQg4KDF9kdXJhdGlvbl9tcyIaCglUYXNrRXJyb3ISDQoFZXJyb3IYASABKAkiZgoKVGFza1Jlc3VsdBIoCgdzdWNjZXNzGAEgASgLMhUuYWdlbnQudjEuVGFza1N1Y2Nlc3NIABIkCgVlcnJvchgCIAEoCzITLmFnZW50LnYxLlRhc2tFcnJvckgAQggKBnJlc3VsdCJWCgxUYXNrVG9vbENhbGwSIAoEYXJncxgBIAEoCzISLmFnZW50LnYxLlRhc2tBcmdzEiQKBnJlc3VsdBgCIAEoCzIULmFnZW50LnYxLlRhc2tSZXN1bHQiTAoRVGFza1Rvb2xDYWxsRGVsdGESNwoSaW50ZXJhY3Rpb25fdXBkYXRlGAEgASgLMhsuYWdlbnQudjEuSW50ZXJhY3Rpb25VcGRhdGUihhQKCFRvb2xDYWxsEjIKD3NoZWxsX3Rvb2xfY2FsbBgBIAEoCzIXLmFnZW50LnYxLlNoZWxsVG9vbENhbGxIABI0ChBkZWxldGVfdG9vbF9jYWxsGAMgASgLMhguYWdlbnQudjEuRGVsZXRlVG9vbENhbGxIABIwCg5nbG9iX3Rvb2xfY2FsbBgEIAEoCzIWLmFnZW50LnYxLkdsb2JUb29sQ2FsbEgAEjAKDmdyZXBfdG9vbF9jYWxsGAUgASgLMhYuYWdlbnQudjEuR3JlcFRvb2xDYWxsSAASMAoOcmVhZF90b29sX2NhbGwYCCABKAsyFi5hZ2VudC52MS5SZWFkVG9vbENhbGxIABI/ChZ1cGRhdGVfdG9kb3NfdG9vbF9jYWxsGAkgASgLMh0uYWdlbnQudjEuVXBkYXRlVG9kb3NUb29sQ2FsbEgAEjsKFHJlYWRfdG9kb3NfdG9vbF9jYWxsGAogASgLMhsuYWdlbnQudjEuUmVhZFRvZG9zVG9vbENhbGxIABIwCg5lZGl0X3Rvb2xfY2FsbBgMIAEoCzIWLmFnZW50LnYxLkVkaXRUb29sQ2FsbEgAEiwKDGxzX3Rvb2xfY2FsbBgNIAEoCzIULmFnZW50LnYxLkxzVG9vbENhbGxIABI7ChRyZWFkX2xpbnRzX3Rvb2xfY2FsbBgOIAEoCzIbLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xDYWxsSAASLgoNbWNwX3Rvb2xfY2FsbBgPIAEoCzIVLmFnZW50LnYxLk1jcFRvb2xDYWxsSAASOwoUc2VtX3NlYXJjaF90b29sX2NhbGwYECABKAsyGy5hZ2VudC52MS5TZW1TZWFyY2hUb29sQ2FsbEgAEj0KFWNyZWF0ZV9wbGFuX3Rvb2xfY2FsbBgRIAEoCzIcLmFnZW50LnYxLkNyZWF0ZVBsYW5Ub29sQ2FsbEgAEjsKFHdlYl9zZWFyY2hfdG9vbF9jYWxsGBIgASgLMhsuYWdlbnQudjEuV2ViU2VhcmNoVG9vbENhbGxIABIwCg50YXNrX3Rvb2xfY2FsbBgTIAEoCzIWLmFnZW50LnYxLlRhc2tUb29sQ2FsbEgAEkoKHGxpc3RfbWNwX3Jlc291cmNlc190b29sX2NhbGwYFCABKAsyIi5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzVG9vbENhbGxIABJIChtyZWFkX21jcF9yZXNvdXJjZV90b29sX2NhbGwYFSABKAsyIS5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VUb29sQ2FsbEgAEkYKGmFwcGx5X2FnZW50X2RpZmZfdG9vbF9jYWxsGBYgASgLMiAuYWdlbnQudjEuQXBwbHlBZ2VudERpZmZUb29sQ2FsbEgAEj8KFmFza19xdWVzdGlvbl90b29sX2NhbGwYFyABKAsyHS5hZ2VudC52MS5Bc2tRdWVzdGlvblRvb2xDYWxsSAASMgoPZmV0Y2hfdG9vbF9jYWxsGBggASgLMhcuYWdlbnQudjEuRmV0Y2hUb29sQ2FsbEgAEj0KFXN3aXRjaF9tb2RlX3Rvb2xfY2FsbBgZIAEoCzIcLmFnZW50LnYxLlN3aXRjaE1vZGVUb29sQ2FsbEgAEjsKFGV4YV9zZWFyY2hfdG9vbF9jYWxsGBogASgLMhsuYWdlbnQudjEuRXhhU2VhcmNoVG9vbENhbGxIABI5ChNleGFfZmV0Y2hfdG9vbF9jYWxsGBsgASgLMhouYWdlbnQudjEuRXhhRmV0Y2hUb29sQ2FsbEgAEkMKGGdlbmVyYXRlX2ltYWdlX3Rvb2xfY2FsbBgcIAEoCzIfLmFnZW50LnYxLkdlbmVyYXRlSW1hZ2VUb29sQ2FsbEgAEkEKF3JlY29yZF9zY3JlZW5fdG9vbF9jYWxsGB0gASgLMh4uYWdlbnQudjEuUmVjb3JkU2NyZWVuVG9vbENhbGxIABI/ChZjb21wdXRlcl91c2VfdG9vbF9jYWxsGB4gASgLMh0uYWdlbnQudjEuQ29tcHV0ZXJVc2VUb29sQ2FsbEgAEkgKG3dyaXRlX3NoZWxsX3N0ZGluX3Rvb2xfY2FsbBgfIAEoCzIhLmFnZW50LnYxLldyaXRlU2hlbGxTdGRpblRvb2xDYWxsSAASNgoRcmVmbGVjdF90b29sX2NhbGwYICABKAsyGS5hZ2VudC52MS5SZWZsZWN0VG9vbENhbGxIABJOCh5zZXR1cF92bV9lbnZpcm9ubWVudF90b29sX2NhbGwYISABKAsyJC5hZ2VudC52MS5TZXR1cFZtRW52aXJvbm1lbnRUb29sQ2FsbEgAEjoKE3RydW5jYXRlZF90b29sX2NhbGwYIiABKAsyGy5hZ2VudC52MS5UcnVuY2F0ZWRUb29sQ2FsbEgAElAKH3N0YXJ0X2dyaW5kX2V4ZWN1dGlvbl90b29sX2NhbGwYIyABKAsyJS5hZ2VudC52MS5TdGFydEdyaW5kRXhlY3V0aW9uVG9vbENhbGxIABJOCh5zdGFydF9ncmluZF9wbGFubmluZ190b29sX2NhbGwYJCABKAsyJC5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdUb29sQ2FsbEgAEjUKEXBpX3JlYWRfdG9vbF9jYWxsGD0gASgLMhguYWdlbnQudjEuUGlSZWFkVG9vbENhbGxIABI1ChFwaV9iYXNoX3Rvb2xfY2FsbBg+IAEoCzIYLmFnZW50LnYxLlBpQmFzaFRvb2xDYWxsSAASNQoRcGlfZWRpdF90b29sX2NhbGwYPyABKAsyGC5hZ2VudC52MS5QaUVkaXRUb29sQ2FsbEgAEjcKEnBpX3dyaXRlX3Rvb2xfY2FsbBhAIAEoCzIZLmFnZW50LnYxLlBpV3JpdGVUb29sQ2FsbEgAEjUKEXBpX2dyZXBfdG9vbF9jYWxsGEEgASgLMhguYWdlbnQudjEuUGlHcmVwVG9vbENhbGxIABI1ChFwaV9maW5kX3Rvb2xfY2FsbBhCIAEoCzIYLmFnZW50LnYxLlBpRmluZFRvb2xDYWxsSAASMQoPcGlfbHNfdG9vbF9jYWxsGEMgASgLMhYuYWdlbnQudjEuUGlMc1Rvb2xDYWxsSAASPQoVY29ubmVjdF9zY21fdG9vbF9jYWxsGEQgASgLMhwuYWdlbnQudjEuQ29ubmVjdFNjbVRvb2xDYWxsSAASTwoec2VhcmNoX2NvbnZlcnNhdGlvbnNfdG9vbF9jYWxsGEUgASgLMiUuYWdlbnQudjEuU2VhcmNoQ29udmVyc2F0aW9uc1Rvb2xDYWxsSAASGQoMdG9vbF9jYWxsX2lkGDkgASgJSAGIAQFCBgoEdG9vbEIPCg1fdG9vbF9jYWxsX2lkIhcKFVRydW5jYXRlZFRvb2xDYWxsQXJncyIaChhUcnVuY2F0ZWRUb29sQ2FsbFN1Y2Nlc3MiJwoWVHJ1bmNhdGVkVG9vbENhbGxFcnJvchINCgVlcnJvchgBIAEoCSKNAQoXVHJ1bmNhdGVkVG9vbENhbGxSZXN1bHQSNQoHc3VjY2VzcxgBIAEoCzIiLmFnZW50LnYxLlRydW5jYXRlZFRvb2xDYWxsU3VjY2Vzc0gAEjEKBWVycm9yGAIgASgLMiAuYWdlbnQudjEuVHJ1bmNhdGVkVG9vbENhbGxFcnJvckgAQggKBnJlc3VsdCKUAQoRVHJ1bmNhdGVkVG9vbENhbGwSHQoVb3JpZ2luYWxfc3RlcF9ibG9iX2lkGAEgASgMEi0KBGFyZ3MYAiABKAsyHy5hZ2VudC52MS5UcnVuY2F0ZWRUb29sQ2FsbEFyZ3MSMQoGcmVzdWx0GAMgASgLMiEuYWdlbnQudjEuVHJ1bmNhdGVkVG9vbENhbGxSZXN1bHQi0QEKDVRvb2xDYWxsRGVsdGESPQoVc2hlbGxfdG9vbF9jYWxsX2RlbHRhGAEgASgLMhwuYWdlbnQudjEuU2hlbGxUb29sQ2FsbERlbHRhSAASOwoUdGFza190b29sX2NhbGxfZGVsdGEYAiABKAsyGy5hZ2VudC52MS5UYXNrVG9vbENhbGxEZWx0YUgAEjsKFGVkaXRfdG9vbF9jYWxsX2RlbHRhGAMgASgLMhsuYWdlbnQudjEuRWRpdFRvb2xDYWxsRGVsdGFIAEIHCgVkZWx0YSK2AQoQQ29udmVyc2F0aW9uU3RlcBI3ChFhc3Npc3RhbnRfbWVzc2FnZRgBIAEoCzIaLmFnZW50LnYxLkFzc2lzdGFudE1lc3NhZ2VIABInCgl0b29sX2NhbGwYAiABKAsyEi5hZ2VudC52MS5Ub29sQ2FsbEgAEjUKEHRoaW5raW5nX21lc3NhZ2UYAyABKAsyGS5hZ2VudC52MS5UaGlua2luZ01lc3NhZ2VIAEIJCgdtZXNzYWdlIoEEChJDb252ZXJzYXRpb25BY3Rpb24SOgoTdXNlcl9tZXNzYWdlX2FjdGlvbhgBIAEoCzIbLmFnZW50LnYxLlVzZXJNZXNzYWdlQWN0aW9uSAASLwoNcmVzdW1lX2FjdGlvbhgCIAEoCzIWLmFnZW50LnYxLlJlc3VtZUFjdGlvbkgAEi8KDWNhbmNlbF9hY3Rpb24YAyABKAsyFi5hZ2VudC52MS5DYW5jZWxBY3Rpb25IABI1ChBzdW1tYXJpemVfYWN0aW9uGAQgASgLMhkuYWdlbnQudjEuU3VtbWFyaXplQWN0aW9uSAASPAoUc2hlbGxfY29tbWFuZF9hY3Rpb24YBSABKAsyHC5hZ2VudC52MS5TaGVsbENvbW1hbmRBY3Rpb25IABI2ChFzdGFydF9wbGFuX2FjdGlvbhgGIAEoCzIZLmFnZW50LnYxLlN0YXJ0UGxhbkFjdGlvbkgAEjoKE2V4ZWN1dGVfcGxhbl9hY3Rpb24YByABKAsyGy5hZ2VudC52MS5FeGVjdXRlUGxhbkFjdGlvbkgAEloKJGFzeW5jX2Fza19xdWVzdGlvbl9jb21wbGV0aW9uX2FjdGlvbhgIIAEoCzIqLmFnZW50LnYxLkFzeW5jQXNrUXVlc3Rpb25Db21wbGV0aW9uQWN0aW9uSABCCAoGYWN0aW9uIr8BChFVc2VyTWVzc2FnZUFjdGlvbhIrCgx1c2VyX21lc3NhZ2UYASABKAsyFS5hZ2VudC52MS5Vc2VyTWVzc2FnZRIxCg9yZXF1ZXN0X2NvbnRleHQYAiABKAsyGC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dBIpChxzZW5kX3RvX2ludGVyYWN0aW9uX2xpc3RlbmVyGAMgASgISACIAQFCHwodX3NlbmRfdG9faW50ZXJhY3Rpb25fbGlzdGVuZXIiDgoMQ2FuY2VsQWN0aW9uIkEKDFJlc3VtZUFjdGlvbhIxCg9yZXF1ZXN0X2NvbnRleHQYAiABKAsyGC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dCKgAQogQXN5bmNBc2tRdWVzdGlvbkNvbXBsZXRpb25BY3Rpb24SHQoVb3JpZ2luYWxfdG9vbF9jYWxsX2lkGAEgASgJEjAKDW9yaWdpbmFsX2FyZ3MYAiABKAsyGS5hZ2VudC52MS5Bc2tRdWVzdGlvbkFyZ3MSKwoGcmVzdWx0GAMgASgLMhsuYWdlbnQudjEuQXNrUXVlc3Rpb25SZXN1bHQiEQoPU3VtbWFyaXplQWN0aW9uIlQKElNoZWxsQ29tbWFuZEFjdGlvbhItCg1zaGVsbF9jb21tYW5kGAEgASgLMhYuYWdlbnQudjEuU2hlbGxDb21tYW5kEg8KB2V4ZWNfaWQYAiABKAkiggEKD1N0YXJ0UGxhbkFjdGlvbhIrCgx1c2VyX21lc3NhZ2UYASABKAsyFS5hZ2VudC52MS5Vc2VyTWVzc2FnZRIxCg9yZXF1ZXN0X2NvbnRleHQYAiABKAsyGC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dBIPCgdpc19zcGVjGAMgASgIIuIBChFFeGVjdXRlUGxhbkFjdGlvbhIxCg9yZXF1ZXN0X2NvbnRleHQYASABKAsyGC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dBItCgRwbGFuGAIgASgLMhouYWdlbnQudjEuQ29udmVyc2F0aW9uUGxhbkgAiAEBEhoKDXBsYW5fZmlsZV91cmkYAyABKAlIAYgBARIeChFwbGFuX2ZpbGVfY29udGVudBgEIAEoCUgCiAEBQgcKBV9wbGFuQhAKDl9wbGFuX2ZpbGVfdXJpQhQKEl9wbGFuX2ZpbGVfY29udGVudCLoAgoLVXNlck1lc3NhZ2USDAoEdGV4dBgBIAEoCRISCgptZXNzYWdlX2lkGAIgASgJEjgKEHNlbGVjdGVkX2NvbnRleHQYAyABKAsyGS5hZ2VudC52MS5TZWxlY3RlZENvbnRleHRIAIgBARIMCgRtb2RlGAQgASgFEh0KEGlzX3NpbXVsYXRlZF9tc2cYBSABKAhIAYgBARIfChJiZXN0X29mX25fZ3JvdXBfaWQYBiABKAlIAogBARIoCht0cnlfdXNlX2Jlc3Rfb2Zfbl9wcm9tb3Rpb24YByABKAhIA4gBARIWCglyaWNoX3RleHQYCCABKAlIBIgBAUITChFfc2VsZWN0ZWRfY29udGV4dEITChFfaXNfc2ltdWxhdGVkX21zZ0IVChNfYmVzdF9vZl9uX2dyb3VwX2lkQh4KHF90cnlfdXNlX2Jlc3Rfb2Zfbl9wcm9tb3Rpb25CDAoKX3JpY2hfdGV4dCIgChBBc3Npc3RhbnRNZXNzYWdlEgwKBHRleHQYASABKAkiNAoPVGhpbmtpbmdNZXNzYWdlEgwKBHRleHQYASABKAkSEwoLZHVyYXRpb25fbXMYAiABKA0iHwoMU2hlbGxDb21tYW5kEg8KB2NvbW1hbmQYASABKAkiQAoLU2hlbGxPdXRwdXQSDgoGc3Rkb3V0GAEgASgJEg4KBnN0ZGVychgCIAEoCRIRCglleGl0X2NvZGUYAyABKAUiogEKEENvbnZlcnNhdGlvblR1cm4SQgoXYWdlbnRfY29udmVyc2F0aW9uX3R1cm4YASABKAsyHy5hZ2VudC52MS5BZ2VudENvbnZlcnNhdGlvblR1cm5IABJCChdzaGVsbF9jb252ZXJzYXRpb25fdHVybhgCIAEoCzIfLmFnZW50LnYxLlNoZWxsQ29udmVyc2F0aW9uVHVybkgAQgYKBHR1cm4iIAoQQ29udmVyc2F0aW9uUGxhbhIMCgRwbGFuGAEgASgJIr0BChlDb252ZXJzYXRpb25UdXJuU3RydWN0dXJlEksKF2FnZW50X2NvbnZlcnNhdGlvbl90dXJuGAEgASgLMiguYWdlbnQudjEuQWdlbnRDb252ZXJzYXRpb25UdXJuU3RydWN0dXJlSAASSwoXc2hlbGxfY29udmVyc2F0aW9uX3R1cm4YAiABKAsyKC5hZ2VudC52MS5TaGVsbENvbnZlcnNhdGlvblR1cm5TdHJ1Y3R1cmVIAEIGCgR0dXJuIpcBChVBZ2VudENvbnZlcnNhdGlvblR1cm4SKwoMdXNlcl9tZXNzYWdlGAEgASgLMhUuYWdlbnQudjEuVXNlck1lc3NhZ2USKQoFc3RlcHMYAiADKAsyGi5hZ2VudC52MS5Db252ZXJzYXRpb25TdGVwEhcKCnJlcXVlc3RfaWQYAyABKAlIAIgBAUINCgtfcmVxdWVzdF9pZCJtCh5BZ2VudENvbnZlcnNhdGlvblR1cm5TdHJ1Y3R1cmUSFAoMdXNlcl9tZXNzYWdlGAEgASgMEg0KBXN0ZXBzGAIgAygMEhcKCnJlcXVlc3RfaWQYAyABKAlIAIgBAUINCgtfcmVxdWVzdF9pZCJzChVTaGVsbENvbnZlcnNhdGlvblR1cm4SLQoNc2hlbGxfY29tbWFuZBgBIAEoCzIWLmFnZW50LnYxLlNoZWxsQ29tbWFuZBIrCgxzaGVsbF9vdXRwdXQYAiABKAsyFS5hZ2VudC52MS5TaGVsbE91dHB1dCJNCh5TaGVsbENvbnZlcnNhdGlvblR1cm5TdHJ1Y3R1cmUSFQoNc2hlbGxfY29tbWFuZBgBIAEoDBIUCgxzaGVsbF9vdXRwdXQYAiABKAwiJgoTQ29udmVyc2F0aW9uU3VtbWFyeRIPCgdzdW1tYXJ5GAEgASgJIngKGkNvbnZlcnNhdGlvblN1bW1hcnlBcmNoaXZlEhsKE3N1bW1hcml6ZWRfbWVzc2FnZXMYASADKAwSDwoHc3VtbWFyeRgCIAEoCRITCgt3aW5kb3dfdGFpbBgDIAEoDRIXCg9zdW1tYXJ5X21lc3NhZ2UYBCABKAwiQwoYQ29udmVyc2F0aW9uVG9rZW5EZXRhaWxzEhMKC3VzZWRfdG9rZW5zGAEgASgNEhIKCm1heF90b2tlbnMYAiABKA0iXwoJRmlsZVN0YXRlEhQKB2NvbnRlbnQYASABKAlIAIgBARIcCg9pbml0aWFsX2NvbnRlbnQYAiABKAlIAYgBAUIKCghfY29udGVudEISChBfaW5pdGlhbF9jb250ZW50ImgKEkZpbGVTdGF0ZVN0cnVjdHVyZRIUCgdjb250ZW50GAEgASgMSACIAQESHAoPaW5pdGlhbF9jb250ZW50GAIgASgMSAGIAQFCCgoIX2NvbnRlbnRCEgoQX2luaXRpYWxfY29udGVudCI3CgpTdGVwVGltaW5nEhMKC2R1cmF0aW9uX21zGAEgASgEEhQKDHRpbWVzdGFtcF9tcxgCIAEoBCL2BAoRQ29udmVyc2F0aW9uU3RhdGUSIQoZcm9vdF9wcm9tcHRfbWVzc2FnZXNfanNvbhgBIAMoCRIpCgV0dXJucxgIIAMoCzIaLmFnZW50LnYxLkNvbnZlcnNhdGlvblR1cm4SIQoFdG9kb3MYAyADKAsyEi5hZ2VudC52MS5Ub2RvSXRlbRIaChJwZW5kaW5nX3Rvb2xfY2FsbHMYBCADKAkSOQoNdG9rZW5fZGV0YWlscxgFIAEoCzIiLmFnZW50LnYxLkNvbnZlcnNhdGlvblRva2VuRGV0YWlscxIzCgdzdW1tYXJ5GAYgASgLMh0uYWdlbnQudjEuQ29udmVyc2F0aW9uU3VtbWFyeUgAiAEBEi0KBHBsYW4YByABKAsyGi5hZ2VudC52MS5Db252ZXJzYXRpb25QbGFuSAGIAQESQgoPc3VtbWFyeV9hcmNoaXZlGAkgASgLMiQuYWdlbnQudjEuQ29udmVyc2F0aW9uU3VtbWFyeUFyY2hpdmVIAogBARJACgtmaWxlX3N0YXRlcxgKIAMoCzIrLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0YXRlLkZpbGVTdGF0ZXNFbnRyeRI+ChBzdW1tYXJ5X2FyY2hpdmVzGAsgAygLMiQuYWdlbnQudjEuQ29udmVyc2F0aW9uU3VtbWFyeUFyY2hpdmUaRgoPRmlsZVN0YXRlc0VudHJ5EgsKA2tleRgBIAEoCRIiCgV2YWx1ZRgCIAEoCzITLmFnZW50LnYxLkZpbGVTdGF0ZToCOAFCCgoIX3N1bW1hcnlCBwoFX3BsYW5CEgoQX3N1bW1hcnlfYXJjaGl2ZSLHAQoWU3ViYWdlbnRQZXJzaXN0ZWRTdGF0ZRJAChJjb252ZXJzYXRpb25fc3RhdGUYASABKAsyJC5hZ2VudC52MS5Db252ZXJzYXRpb25TdGF0ZVN0cnVjdHVyZRIcChRjcmVhdGVkX3RpbWVzdGFtcF9tcxgCIAEoBBIeChZsYXN0X3VzZWRfdGltZXN0YW1wX21zGAMgASgEEi0KDXN1YmFnZW50X3R5cGUYBCABKAsyFi5hZ2VudC52MS5TdWJhZ2VudFR5cGUitwcKGkNvbnZlcnNhdGlvblN0YXRlU3RydWN0dXJlEhEKCXR1cm5zX29sZBgCIAMoDBIhChlyb290X3Byb21wdF9tZXNzYWdlc19qc29uGAEgAygMEg0KBXR1cm5zGAggAygMEg0KBXRvZG9zGAMgAygMEhoKEnBlbmRpbmdfdG9vbF9jYWxscxgEIAMoCRI5Cg10b2tlbl9kZXRhaWxzGAUgASgLMiIuYWdlbnQudjEuQ29udmVyc2F0aW9uVG9rZW5EZXRhaWxzEhQKB3N1bW1hcnkYBiABKAxIAIgBARIRCgRwbGFuGAcgASgMSAGIAQESHwoXcHJldmlvdXNfd29ya3NwYWNlX3VyaXMYCSADKAkSEQoEbW9kZRgKIAEoBUgCiAEBEhwKD3N1bW1hcnlfYXJjaGl2ZRgLIAEoDEgDiAEBEkkKC2ZpbGVfc3RhdGVzGAwgAygLMjQuYWdlbnQudjEuQ29udmVyc2F0aW9uU3RhdGVTdHJ1Y3R1cmUuRmlsZVN0YXRlc0VudHJ5Ek4KDmZpbGVfc3RhdGVzX3YyGA8gAygLMjYuYWdlbnQudjEuQ29udmVyc2F0aW9uU3RhdGVTdHJ1Y3R1cmUuRmlsZVN0YXRlc1YyRW50cnkSGAoQc3VtbWFyeV9hcmNoaXZlcxgNIAMoDBIqCgx0dXJuX3RpbWluZ3MYDiADKAsyFC5hZ2VudC52MS5TdGVwVGltaW5nElEKD3N1YmFnZW50X3N0YXRlcxgQIAMoCzI4LmFnZW50LnYxLkNvbnZlcnNhdGlvblN0YXRlU3RydWN0dXJlLlN1YmFnZW50U3RhdGVzRW50cnkSGgoSc2VsZl9zdW1tYXJ5X2NvdW50GBEgASgNEhIKCnJlYWRfcGF0aHMYEiADKAkaMQoPRmlsZVN0YXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoDDoCOAEaUQoRRmlsZVN0YXRlc1YyRW50cnkSCwoDa2V5GAEgASgJEisKBXZhbHVlGAIgASgLMhwuYWdlbnQudjEuRmlsZVN0YXRlU3RydWN0dXJlOgI4ARpXChNTdWJhZ2VudFN0YXRlc0VudHJ5EgsKA2tleRgBIAEoCRIvCgV2YWx1ZRgCIAEoCzIgLmFnZW50LnYxLlN1YmFnZW50UGVyc2lzdGVkU3RhdGU6AjgBQgoKCF9zdW1tYXJ5QgcKBV9wbGFuQgcKBV9tb2RlQhIKEF9zdW1tYXJ5X2FyY2hpdmUiEQoPVGhpbmtpbmdEZXRhaWxzIkgKEUFwaUtleUNyZWRlbnRpYWxzEg8KB2FwaV9rZXkYASABKAkSFQoIYmFzZV91cmwYAiABKAlIAIgBAUILCglfYmFzZV91cmwiSQoQQXp1cmVDcmVkZW50aWFscxIPCgdhcGlfa2V5GAEgASgJEhAKCGJhc2VfdXJsGAIgASgJEhIKCmRlcGxveW1lbnQYAyABKAkiegoSQmVkcm9ja0NyZWRlbnRpYWxzEhIKCmFjY2Vzc19rZXkYASABKAkSEgoKc2VjcmV0X2tleRgCIAEoCRIOCgZyZWdpb24YAyABKAkSGgoNc2Vzc2lvbl90b2tlbhgEIAEoCUgAiAEBQhAKDl9zZXNzaW9uX3Rva2VuIrEDCgxNb2RlbERldGFpbHMSEAoIbW9kZWxfaWQYASABKAkSGAoQZGlzcGxheV9tb2RlbF9pZBgDIAEoCRIUCgxkaXNwbGF5X25hbWUYBCABKAkSGgoSZGlzcGxheV9uYW1lX3Nob3J0GAUgASgJEg8KB2FsaWFzZXMYBiADKAkSOAoQdGhpbmtpbmdfZGV0YWlscxgCIAEoCzIZLmFnZW50LnYxLlRoaW5raW5nRGV0YWlsc0gBiAEBEhUKCG1heF9tb2RlGAcgASgISAKIAQESOgoTYXBpX2tleV9jcmVkZW50aWFscxgIIAEoCzIbLmFnZW50LnYxLkFwaUtleUNyZWRlbnRpYWxzSAASNwoRYXp1cmVfY3JlZGVudGlhbHMYCSABKAsyGi5hZ2VudC52MS5BenVyZUNyZWRlbnRpYWxzSAASOwoTYmVkcm9ja19jcmVkZW50aWFscxgKIAEoCzIcLmFnZW50LnYxLkJlZHJvY2tDcmVkZW50aWFsc0gAQg0KC2NyZWRlbnRpYWxzQhMKEV90aGlua2luZ19kZXRhaWxzQgsKCV9tYXhfbW9kZSK3AgoOUmVxdWVzdGVkTW9kZWwSEAoIbW9kZWxfaWQYASABKAkSEAoIbWF4X21vZGUYAiABKAgSQAoKcGFyYW1ldGVycxgDIAMoCzIsLmFnZW50LnYxLlJlcXVlc3RlZE1vZGVsX01vZGVsUGFyYW1ldGVyYnl0ZXMSOgoTYXBpX2tleV9jcmVkZW50aWFscxgEIAEoCzIbLmFnZW50LnYxLkFwaUtleUNyZWRlbnRpYWxzSAASNwoRYXp1cmVfY3JlZGVudGlhbHMYBSABKAsyGi5hZ2VudC52MS5BenVyZUNyZWRlbnRpYWxzSAASOwoTYmVkcm9ja19jcmVkZW50aWFscxgGIAEoCzIcLmFnZW50LnYxLkJlZHJvY2tDcmVkZW50aWFsc0gAQg0KC2NyZWRlbnRpYWxzIj8KIlJlcXVlc3RlZE1vZGVsX01vZGVsUGFyYW1ldGVyYnl0ZXMSCgoCaWQYASABKAkSDQoFdmFsdWUYAiABKAkiuQQKD0FnZW50UnVuUmVxdWVzdBJAChJjb252ZXJzYXRpb25fc3RhdGUYASABKAsyJC5hZ2VudC52MS5Db252ZXJzYXRpb25TdGF0ZVN0cnVjdHVyZRIsCgZhY3Rpb24YAiABKAsyHC5hZ2VudC52MS5Db252ZXJzYXRpb25BY3Rpb24SLQoNbW9kZWxfZGV0YWlscxgDIAEoCzIWLmFnZW50LnYxLk1vZGVsRGV0YWlscxI2Cg9yZXF1ZXN0ZWRfbW9kZWwYCSABKAsyGC5hZ2VudC52MS5SZXF1ZXN0ZWRNb2RlbEgAiAEBEiUKCW1jcF90b29scxgEIAEoCzISLmFnZW50LnYxLk1jcFRvb2xzEhwKD2NvbnZlcnNhdGlvbl9pZBgFIAEoCUgBiAEBEkQKF21jcF9maWxlX3N5c3RlbV9vcHRpb25zGAYgASgLMh4uYWdlbnQudjEuTWNwRmlsZVN5c3RlbU9wdGlvbnNIAogBARIyCg1za2lsbF9vcHRpb25zGAcgASgLMhYuYWdlbnQudjEuU2tpbGxPcHRpb25zSAOIAQESIQoUY3VzdG9tX3N5c3RlbV9wcm9tcHQYCCABKAlIBIgBAUISChBfcmVxdWVzdGVkX21vZGVsQhIKEF9jb252ZXJzYXRpb25faWRCGgoYX21jcF9maWxlX3N5c3RlbV9vcHRpb25zQhAKDl9za2lsbF9vcHRpb25zQhcKFV9jdXN0b21fc3lzdGVtX3Byb21wdCIfCg9UZXh0RGVsdGFVcGRhdGUSDAoEdGV4dBgBIAEoCSJmChVUb29sQ2FsbFN0YXJ0ZWRVcGRhdGUSDwoHY2FsbF9pZBgBIAEoCRIlCgl0b29sX2NhbGwYAiABKAsyEi5hZ2VudC52MS5Ub29sQ2FsbBIVCg1tb2RlbF9jYWxsX2lkGAMgASgJImgKF1Rvb2xDYWxsQ29tcGxldGVkVXBkYXRlEg8KB2NhbGxfaWQYASABKAkSJQoJdG9vbF9jYWxsGAIgASgLMhIuYWdlbnQudjEuVG9vbENhbGwSFQoNbW9kZWxfY2FsbF9pZBgDIAEoCSJvChNUb29sQ2FsbERlbHRhVXBkYXRlEg8KB2NhbGxfaWQYASABKAkSMAoPdG9vbF9jYWxsX2RlbHRhGAIgASgLMhcuYWdlbnQudjEuVG9vbENhbGxEZWx0YRIVCg1tb2RlbF9jYWxsX2lkGAMgASgJIn8KFVBhcnRpYWxUb29sQ2FsbFVwZGF0ZRIPCgdjYWxsX2lkGAEgASgJEiUKCXRvb2xfY2FsbBgCIAEoCzISLmFnZW50LnYxLlRvb2xDYWxsEhcKD2FyZ3NfdGV4dF9kZWx0YRgDIAEoCRIVCg1tb2RlbF9jYWxsX2lkGAQgASgJIiMKE1RoaW5raW5nRGVsdGFVcGRhdGUSDAoEdGV4dBgBIAEoCSI3ChdUaGlua2luZ0NvbXBsZXRlZFVwZGF0ZRIcChR0aGlua2luZ19kdXJhdGlvbl9tcxgBIAEoBSIiChBUb2tlbkRlbHRhVXBkYXRlEg4KBnRva2VucxgBIAEoBSIgCg1TdW1tYXJ5VXBkYXRlEg8KB3N1bW1hcnkYASABKAkiFgoUU3VtbWFyeVN0YXJ0ZWRVcGRhdGUiEQoPSGVhcnRiZWF0VXBkYXRlIhgKFlN1bW1hcnlDb21wbGV0ZWRVcGRhdGUi1wEKFlNoZWxsT3V0cHV0RGVsdGFVcGRhdGUSLQoGc3Rkb3V0GAEgASgLMhsuYWdlbnQudjEuU2hlbGxTdHJlYW1TdGRvdXRIABItCgZzdGRlcnIYAiABKAsyGy5hZ2VudC52MS5TaGVsbFN0cmVhbVN0ZGVyckgAEikKBGV4aXQYAyABKAsyGS5hZ2VudC52MS5TaGVsbFN0cmVhbUV4aXRIABIrCgVzdGFydBgEIAEoCzIaLmFnZW50LnYxLlNoZWxsU3RyZWFtU3RhcnRIAEIHCgVldmVudCIRCg9UdXJuRW5kZWRVcGRhdGUiSAoZVXNlck1lc3NhZ2VBcHBlbmRlZFVwZGF0ZRIrCgx1c2VyX21lc3NhZ2UYASABKAsyFS5hZ2VudC52MS5Vc2VyTWVzc2FnZSIkChFTdGVwU3RhcnRlZFVwZGF0ZRIPCgdzdGVwX2lkGAEgASgEIkAKE1N0ZXBDb21wbGV0ZWRVcGRhdGUSDwoHc3RlcF9pZBgBIAEoBBIYChBzdGVwX2R1cmF0aW9uX21zGAIgASgDIu8HChFJbnRlcmFjdGlvblVwZGF0ZRIvCgp0ZXh0X2RlbHRhGAEgASgLMhkuYWdlbnQudjEuVGV4dERlbHRhVXBkYXRlSAASPAoRcGFydGlhbF90b29sX2NhbGwYByABKAsyHy5hZ2VudC52MS5QYXJ0aWFsVG9vbENhbGxVcGRhdGVIABI4Cg90b29sX2NhbGxfZGVsdGEYDyABKAsyHS5hZ2VudC52MS5Ub29sQ2FsbERlbHRhVXBkYXRlSAASPAoRdG9vbF9jYWxsX3N0YXJ0ZWQYAiABKAsyHy5hZ2VudC52MS5Ub29sQ2FsbFN0YXJ0ZWRVcGRhdGVIABJAChN0b29sX2NhbGxfY29tcGxldGVkGAMgASgLMiEuYWdlbnQudjEuVG9vbENhbGxDb21wbGV0ZWRVcGRhdGVIABI3Cg50aGlua2luZ19kZWx0YRgEIAEoCzIdLmFnZW50LnYxLlRoaW5raW5nRGVsdGFVcGRhdGVIABI/ChJ0aGlua2luZ19jb21wbGV0ZWQYBSABKAsyIS5hZ2VudC52MS5UaGlua2luZ0NvbXBsZXRlZFVwZGF0ZUgAEkQKFXVzZXJfbWVzc2FnZV9hcHBlbmRlZBgGIAEoCzIjLmFnZW50LnYxLlVzZXJNZXNzYWdlQXBwZW5kZWRVcGRhdGVIABIxCgt0b2tlbl9kZWx0YRgIIAEoCzIaLmFnZW50LnYxLlRva2VuRGVsdGFVcGRhdGVIABIqCgdzdW1tYXJ5GAkgASgLMhcuYWdlbnQudjEuU3VtbWFyeVVwZGF0ZUgAEjkKD3N1bW1hcnlfc3RhcnRlZBgKIAEoCzIeLmFnZW50LnYxLlN1bW1hcnlTdGFydGVkVXBkYXRlSAASPQoRc3VtbWFyeV9jb21wbGV0ZWQYCyABKAsyIC5hZ2VudC52MS5TdW1tYXJ5Q29tcGxldGVkVXBkYXRlSAASPgoSc2hlbGxfb3V0cHV0X2RlbHRhGAwgASgLMiAuYWdlbnQudjEuU2hlbGxPdXRwdXREZWx0YVVwZGF0ZUgAEi4KCWhlYXJ0YmVhdBgNIAEoCzIZLmFnZW50LnYxLkhlYXJ0YmVhdFVwZGF0ZUgAEi8KCnR1cm5fZW5kZWQYDiABKAsyGS5hZ2VudC52MS5UdXJuRW5kZWRVcGRhdGVIABIzCgxzdGVwX3N0YXJ0ZWQYECABKAsyGy5hZ2VudC52MS5TdGVwU3RhcnRlZFVwZGF0ZUgAEjcKDnN0ZXBfY29tcGxldGVkGBEgASgLMh0uYWdlbnQudjEuU3RlcENvbXBsZXRlZFVwZGF0ZUgAQgkKB21lc3NhZ2UimgQKEEludGVyYWN0aW9uUXVlcnkSCgoCaWQYASABKA0SQwoYd2ViX3NlYXJjaF9yZXF1ZXN0X3F1ZXJ5GAIgASgLMh8uYWdlbnQudjEuV2ViU2VhcmNoUmVxdWVzdFF1ZXJ5SAASTwoeYXNrX3F1ZXN0aW9uX2ludGVyYWN0aW9uX3F1ZXJ5GAMgASgLMiUuYWdlbnQudjEuQXNrUXVlc3Rpb25JbnRlcmFjdGlvblF1ZXJ5SAASRQoZc3dpdGNoX21vZGVfcmVxdWVzdF9xdWVyeRgEIAEoCzIgLmFnZW50LnYxLlN3aXRjaE1vZGVSZXF1ZXN0UXVlcnlIABJDChhleGFfc2VhcmNoX3JlcXVlc3RfcXVlcnkYBSABKAsyHy5hZ2VudC52MS5FeGFTZWFyY2hSZXF1ZXN0UXVlcnlIABJBChdleGFfZmV0Y2hfcmVxdWVzdF9xdWVyeRgGIAEoCzIeLmFnZW50LnYxLkV4YUZldGNoUmVxdWVzdFF1ZXJ5SAASRQoZY3JlYXRlX3BsYW5fcmVxdWVzdF9xdWVyeRgHIAEoCzIgLmFnZW50LnYxLkNyZWF0ZVBsYW5SZXF1ZXN0UXVlcnlIABJFChlzZXR1cF92bV9lbnZpcm9ubWVudF9hcmdzGAggASgLMiAuYWdlbnQudjEuU2V0dXBWbUVudmlyb25tZW50QXJnc0gAQgcKBXF1ZXJ5IsYEChNJbnRlcmFjdGlvblJlc3BvbnNlEgoKAmlkGAEgASgNEkkKG3dlYl9zZWFyY2hfcmVxdWVzdF9yZXNwb25zZRgCIAEoCzIiLmFnZW50LnYxLldlYlNlYXJjaFJlcXVlc3RSZXNwb25zZUgAElUKIWFza19xdWVzdGlvbl9pbnRlcmFjdGlvbl9yZXNwb25zZRgDIAEoCzIoLmFnZW50LnYxLkFza1F1ZXN0aW9uSW50ZXJhY3Rpb25SZXNwb25zZUgAEksKHHN3aXRjaF9tb2RlX3JlcXVlc3RfcmVzcG9uc2UYBCABKAsyIy5hZ2VudC52MS5Td2l0Y2hNb2RlUmVxdWVzdFJlc3BvbnNlSAASSQobZXhhX3NlYXJjaF9yZXF1ZXN0X3Jlc3BvbnNlGAUgASgLMiIuYWdlbnQudjEuRXhhU2VhcmNoUmVxdWVzdFJlc3BvbnNlSAASRwoaZXhhX2ZldGNoX3JlcXVlc3RfcmVzcG9uc2UYBiABKAsyIS5hZ2VudC52MS5FeGFGZXRjaFJlcXVlc3RSZXNwb25zZUgAEksKHGNyZWF0ZV9wbGFuX3JlcXVlc3RfcmVzcG9uc2UYByABKAsyIy5hZ2VudC52MS5DcmVhdGVQbGFuUmVxdWVzdFJlc3BvbnNlSAASSQobc2V0dXBfdm1fZW52aXJvbm1lbnRfcmVzdWx0GAggASgLMiIuYWdlbnQudjEuU2V0dXBWbUVudmlyb25tZW50UmVzdWx0SABCCAoGcmVzdWx0IlwKG0Fza1F1ZXN0aW9uSW50ZXJhY3Rpb25RdWVyeRInCgRhcmdzGAEgASgLMhkuYWdlbnQudjEuQXNrUXVlc3Rpb25BcmdzEhQKDHRvb2xfY2FsbF9pZBgCIAEoCSJNCh5Bc2tRdWVzdGlvbkludGVyYWN0aW9uUmVzcG9uc2USKwoGcmVzdWx0GAEgASgLMhsuYWdlbnQudjEuQXNrUXVlc3Rpb25SZXN1bHQiEQoPQ2xpZW50SGVhcnRiZWF0IsYECg5QcmV3YXJtUmVxdWVzdBItCg1tb2RlbF9kZXRhaWxzGAEgASgLMhYuYWdlbnQudjEuTW9kZWxEZXRhaWxzEjYKD3JlcXVlc3RlZF9tb2RlbBgJIAEoCzIYLmFnZW50LnYxLlJlcXVlc3RlZE1vZGVsSACIAQESHAoPY29udmVyc2F0aW9uX2lkGAIgASgJSAGIAQESQAoSY29udmVyc2F0aW9uX3N0YXRlGAMgASgLMiQuYWdlbnQudjEuQ29udmVyc2F0aW9uU3RhdGVTdHJ1Y3R1cmUSJQoJbWNwX3Rvb2xzGAQgASgLMhIuYWdlbnQudjEuTWNwVG9vbHMSRAoXbWNwX2ZpbGVfc3lzdGVtX29wdGlvbnMYBSABKAsyHi5hZ2VudC52MS5NY3BGaWxlU3lzdGVtT3B0aW9uc0gCiAEBEh8KEmJlc3Rfb2Zfbl9ncm91cF9pZBgGIAEoCUgDiAEBEigKG3RyeV91c2VfYmVzdF9vZl9uX3Byb21vdGlvbhgHIAEoCEgEiAEBEiEKFGN1c3RvbV9zeXN0ZW1fcHJvbXB0GAggASgJSAWIAQFCEgoQX3JlcXVlc3RlZF9tb2RlbEISChBfY29udmVyc2F0aW9uX2lkQhoKGF9tY3BfZmlsZV9zeXN0ZW1fb3B0aW9uc0IVChNfYmVzdF9vZl9uX2dyb3VwX2lkQh4KHF90cnlfdXNlX2Jlc3Rfb2Zfbl9wcm9tb3Rpb25CFwoVX2N1c3RvbV9zeXN0ZW1fcHJvbXB0Ih0KD0V4ZWNTZXJ2ZXJBYm9ydBIKCgJpZBgBIAEoDSJRChhFeGVjU2VydmVyQ29udHJvbE1lc3NhZ2USKgoFYWJvcnQYASABKAsyGS5hZ2VudC52MS5FeGVjU2VydmVyQWJvcnRIAEIJCgdtZXNzYWdlIvgDChJBZ2VudENsaWVudE1lc3NhZ2USMAoLcnVuX3JlcXVlc3QYASABKAsyGS5hZ2VudC52MS5BZ2VudFJ1blJlcXVlc3RIABI6ChNleGVjX2NsaWVudF9tZXNzYWdlGAIgASgLMhsuYWdlbnQudjEuRXhlY0NsaWVudE1lc3NhZ2VIABJJChtleGVjX2NsaWVudF9jb250cm9sX21lc3NhZ2UYBSABKAsyIi5hZ2VudC52MS5FeGVjQ2xpZW50Q29udHJvbE1lc3NhZ2VIABI2ChFrdl9jbGllbnRfbWVzc2FnZRgDIAEoCzIZLmFnZW50LnYxLkt2Q2xpZW50TWVzc2FnZUgAEjsKE2NvbnZlcnNhdGlvbl9hY3Rpb24YBCABKAsyHC5hZ2VudC52MS5Db252ZXJzYXRpb25BY3Rpb25IABI9ChRpbnRlcmFjdGlvbl9yZXNwb25zZRgGIAEoCzIdLmFnZW50LnYxLkludGVyYWN0aW9uUmVzcG9uc2VIABI1ChBjbGllbnRfaGVhcnRiZWF0GAcgASgLMhkuYWdlbnQudjEuQ2xpZW50SGVhcnRiZWF0SAASMwoPcHJld2FybV9yZXF1ZXN0GAggASgLMhguYWdlbnQudjEuUHJld2FybVJlcXVlc3RIAEIJCgdtZXNzYWdlIqIDChJBZ2VudFNlcnZlck1lc3NhZ2USOQoSaW50ZXJhY3Rpb25fdXBkYXRlGAEgASgLMhsuYWdlbnQudjEuSW50ZXJhY3Rpb25VcGRhdGVIABI6ChNleGVjX3NlcnZlcl9tZXNzYWdlGAIgASgLMhsuYWdlbnQudjEuRXhlY1NlcnZlck1lc3NhZ2VIABJJChtleGVjX3NlcnZlcl9jb250cm9sX21lc3NhZ2UYBSABKAsyIi5hZ2VudC52MS5FeGVjU2VydmVyQ29udHJvbE1lc3NhZ2VIABJOCh5jb252ZXJzYXRpb25fY2hlY2twb2ludF91cGRhdGUYAyABKAsyJC5hZ2VudC52MS5Db252ZXJzYXRpb25TdGF0ZVN0cnVjdHVyZUgAEjYKEWt2X3NlcnZlcl9tZXNzYWdlGAQgASgLMhkuYWdlbnQudjEuS3ZTZXJ2ZXJNZXNzYWdlSAASNwoRaW50ZXJhY3Rpb25fcXVlcnkYByABKAsyGi5hZ2VudC52MS5JbnRlcmFjdGlvblF1ZXJ5SABCCQoHbWVzc2FnZSIoChBOYW1lQWdlbnRSZXF1ZXN0EhQKDHVzZXJfbWVzc2FnZRgBIAEoCSIhChFOYW1lQWdlbnRSZXNwb25zZRIMCgRuYW1lGAEgASgJIjIKFkdldFVzYWJsZU1vZGVsc1JlcXVlc3QSGAoQY3VzdG9tX21vZGVsX2lkcxgBIAMoCSJBChdHZXRVc2FibGVNb2RlbHNSZXNwb25zZRImCgZtb2RlbHMYASADKAsyFi5hZ2VudC52MS5Nb2RlbERldGFpbHMiHgocR2V0RGVmYXVsdE1vZGVsRm9yQ2xpUmVxdWVzdCJGCh1HZXREZWZhdWx0TW9kZWxGb3JDbGlSZXNwb25zZRIlCgVtb2RlbBgBIAEoCzIWLmFnZW50LnYxLk1vZGVsRGV0YWlscyIfCh1HZXRBbGxvd2VkTW9kZWxJbnRlbnRzUmVxdWVzdCI3Ch5HZXRBbGxvd2VkTW9kZWxJbnRlbnRzUmVzcG9uc2USFQoNbW9kZWxfaW50ZW50cxgBIAMoCSKXAgoTSWRlRWRpdG9yc1N0YXRlRmlsZRIVCg1yZWxhdGl2ZV9wYXRoGAEgASgJEhUKDWFic29sdXRlX3BhdGgYAiABKAkSIQoUaXNfY3VycmVudGx5X2ZvY3VzZWQYAyABKAhIAIgBARIgChNjdXJyZW50X2xpbmVfbnVtYmVyGAQgASgFSAGIAQESHgoRY3VycmVudF9saW5lX3RleHQYBSABKAlIAogBARIXCgpsaW5lX2NvdW50GAYgASgFSAOIAQFCFwoVX2lzX2N1cnJlbnRseV9mb2N1c2VkQhYKFF9jdXJyZW50X2xpbmVfbnVtYmVyQhQKEl9jdXJyZW50X2xpbmVfdGV4dEINCgtfbGluZV9jb3VudCJTChNJZGVFZGl0b3JzU3RhdGVMaXRlEjwKFXJlY2VudGx5X3ZpZXdlZF9maWxlcxgBIAMoCzIdLmFnZW50LnYxLklkZUVkaXRvcnNTdGF0ZUZpbGUidAoWQXBwbHlBZ2VudERpZmZUb29sQ2FsbBIqCgRhcmdzGAEgASgLMhwuYWdlbnQudjEuQXBwbHlBZ2VudERpZmZBcmdzEi4KBnJlc3VsdBgCIAEoCzIeLmFnZW50LnYxLkFwcGx5QWdlbnREaWZmUmVzdWx0IiYKEkFwcGx5QWdlbnREaWZmQXJncxIQCghhZ2VudF9pZBgBIAEoCSKEAQoUQXBwbHlBZ2VudERpZmZSZXN1bHQSMgoHc3VjY2VzcxgBIAEoCzIfLmFnZW50LnYxLkFwcGx5QWdlbnREaWZmU3VjY2Vzc0gAEi4KBWVycm9yGAIgASgLMh0uYWdlbnQudjEuQXBwbHlBZ2VudERpZmZFcnJvckgAQggKBnJlc3VsdCJOChVBcHBseUFnZW50RGlmZlN1Y2Nlc3MSNQoPYXBwbGllZF9jaGFuZ2VzGAEgAygLMhwuYWdlbnQudjEuQXBwbGllZEFnZW50Q2hhbmdlIukBChJBcHBsaWVkQWdlbnRDaGFuZ2USDAoEcGF0aBgBIAEoCRITCgtjaGFuZ2VfdHlwZRgCIAEoBRIbCg5iZWZvcmVfY29udGVudBgDIAEoCUgAiAEBEhoKDWFmdGVyX2NvbnRlbnQYBCABKAlIAYgBARISCgVlcnJvchgFIAEoCUgCiAEBEh4KEW1lc3NhZ2VfZm9yX21vZGVsGAYgASgJSAOIAQFCEQoPX2JlZm9yZV9jb250ZW50QhAKDl9hZnRlcl9jb250ZW50QggKBl9lcnJvckIUChJfbWVzc2FnZV9mb3JfbW9kZWwiWwoTQXBwbHlBZ2VudERpZmZFcnJvchINCgVlcnJvchgBIAEoCRI1Cg9hcHBsaWVkX2NoYW5nZXMYAiADKAsyHC5hZ2VudC52MS5BcHBsaWVkQWdlbnRDaGFuZ2UiawoTQXNrUXVlc3Rpb25Ub29sQ2FsbBInCgRhcmdzGAEgASgLMhkuYWdlbnQudjEuQXNrUXVlc3Rpb25BcmdzEisKBnJlc3VsdBgCIAEoCzIbLmFnZW50LnYxLkFza1F1ZXN0aW9uUmVzdWx0Io8BCg9Bc2tRdWVzdGlvbkFyZ3MSDQoFdGl0bGUYASABKAkSNQoJcXVlc3Rpb25zGAIgAygLMiIuYWdlbnQudjEuQXNrUXVlc3Rpb25BcmdzX1F1ZXN0aW9uEhEKCXJ1bl9hc3luYxgFIAEoCBIjChthc3luY19vcmlnaW5hbF90b29sX2NhbGxfaWQYBiABKAkigQEKGEFza1F1ZXN0aW9uQXJnc19RdWVzdGlvbhIKCgJpZBgBIAEoCRIOCgZwcm9tcHQYAiABKAkSMQoHb3B0aW9ucxgDIAMoCzIgLmFnZW50LnYxLkFza1F1ZXN0aW9uQXJnc19PcHRpb24SFgoOYWxsb3dfbXVsdGlwbGUYBCABKAgiMwoWQXNrUXVlc3Rpb25BcmdzX09wdGlvbhIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCSISChBBc2tRdWVzdGlvbkFzeW5jItsBChFBc2tRdWVzdGlvblJlc3VsdBIvCgdzdWNjZXNzGAEgASgLMhwuYWdlbnQudjEuQXNrUXVlc3Rpb25TdWNjZXNzSAASKwoFZXJyb3IYAiABKAsyGi5hZ2VudC52MS5Bc2tRdWVzdGlvbkVycm9ySAASMQoIcmVqZWN0ZWQYAyABKAsyHS5hZ2VudC52MS5Bc2tRdWVzdGlvblJlamVjdGVkSAASKwoFYXN5bmMYBCABKAsyGi5hZ2VudC52MS5Bc2tRdWVzdGlvbkFzeW5jSABCCAoGcmVzdWx0IkoKEkFza1F1ZXN0aW9uU3VjY2VzcxI0CgdhbnN3ZXJzGAEgAygLMiMuYWdlbnQudjEuQXNrUXVlc3Rpb25TdWNjZXNzX0Fuc3dlciJNChlBc2tRdWVzdGlvblN1Y2Nlc3NfQW5zd2VyEhMKC3F1ZXN0aW9uX2lkGAEgASgJEhsKE3NlbGVjdGVkX29wdGlvbl9pZHMYAiADKAkiKQoQQXNrUXVlc3Rpb25FcnJvchIVCg1lcnJvcl9tZXNzYWdlGAEgASgJIiUKE0Fza1F1ZXN0aW9uUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIv0FChhCYWNrZ3JvdW5kU2hlbGxTcGF3bkFyZ3MSDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRIUCgx0b29sX2NhbGxfaWQYAyABKAkSOwoOcGFyc2luZ19yZXN1bHQYBCABKAsyIy5hZ2VudC52MS5TaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0EjQKDnNhbmRib3hfcG9saWN5GAUgASgLMhcuYWdlbnQudjEuU2FuZGJveFBvbGljeUgAiAEBEiUKHWVuYWJsZV93cml0ZV9zaGVsbF9zdGRpbl90b29sGAYgASgIEhgKC2Rlc2NyaXB0aW9uGAcgASgJSAGIAQESQQoRY2xhc3NpZmllcl9yZXN1bHQYCCABKAsyIS5hZ2VudC52MS5Db21tYW5kQ2xhc3NpZmllclJlc3VsdEgCiAEBEkkKE291dHB1dF9ub3RpZmljYXRpb24YCSABKAsyJy5hZ2VudC52MS5TaGVsbE91dHB1dE5vdGlmaWNhdGlvbkNvbmZpZ0gDiAEBEj0KE3NtYXJ0X21vZGVfYXBwcm92YWwYCiABKAsyGy5hZ2VudC52MS5TbWFydE1vZGVBcHByb3ZhbEgEiAEBEk4KGWhvb2tfYXBwcm92YWxfcmVxdWlyZW1lbnQYCyABKAsyJi5hZ2VudC52MS5TaGVsbEhvb2tBcHByb3ZhbFJlcXVpcmVtZW50SAWIAQESFQoNc2tpcF9hcHByb3ZhbBgMIAEoCBIcCg9jb252ZXJzYXRpb25faWQYDSABKAlIBogBAUIRCg9fc2FuZGJveF9wb2xpY3lCDgoMX2Rlc2NyaXB0aW9uQhQKEl9jbGFzc2lmaWVyX3Jlc3VsdEIWChRfb3V0cHV0X25vdGlmaWNhdGlvbkIWChRfc21hcnRfbW9kZV9hcHByb3ZhbEIcChpfaG9va19hcHByb3ZhbF9yZXF1aXJlbWVudEISChBfY29udmVyc2F0aW9uX2lkIoECChpCYWNrZ3JvdW5kU2hlbGxTcGF3blJlc3VsdBI4CgdzdWNjZXNzGAEgASgLMiUuYWdlbnQudjEuQmFja2dyb3VuZFNoZWxsU3Bhd25TdWNjZXNzSAASNAoFZXJyb3IYAiABKAsyIy5hZ2VudC52MS5CYWNrZ3JvdW5kU2hlbGxTcGF3bkVycm9ySAASKwoIcmVqZWN0ZWQYAyABKAsyFy5hZ2VudC52MS5TaGVsbFJlamVjdGVkSAASPAoRcGVybWlzc2lvbl9kZW5pZWQYBCABKAsyHy5hZ2VudC52MS5TaGVsbFBlcm1pc3Npb25EZW5pZWRIAEIICgZyZXN1bHQidQobQmFja2dyb3VuZFNoZWxsU3Bhd25TdWNjZXNzEhAKCHNoZWxsX2lkGAEgASgNEg8KB2NvbW1hbmQYAiABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAyABKAkSEAoDcGlkGAQgASgNSACIAQFCBgoEX3BpZCJWChlCYWNrZ3JvdW5kU2hlbGxTcGF3bkVycm9yEg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSDQoFZXJyb3IYAyABKAkiNgoTV3JpdGVTaGVsbFN0ZGluQXJncxIQCghzaGVsbF9pZBgBIAEoDRINCgVjaGFycxgCIAEoCSKHAQoVV3JpdGVTaGVsbFN0ZGluUmVzdWx0EjMKB3N1Y2Nlc3MYASABKAsyIC5hZ2VudC52MS5Xcml0ZVNoZWxsU3RkaW5TdWNjZXNzSAASLwoFZXJyb3IYAiABKAsyHi5hZ2VudC52MS5Xcml0ZVNoZWxsU3RkaW5FcnJvckgAQggKBnJlc3VsdCJdChZXcml0ZVNoZWxsU3RkaW5TdWNjZXNzEhAKCHNoZWxsX2lkGAEgASgNEjEKKXRlcm1pbmFsX2ZpbGVfbGVuZ3RoX2JlZm9yZV9pbnB1dF93cml0dGVuGAIgASgNIiUKFFdyaXRlU2hlbGxTdGRpbkVycm9yEg0KBWVycm9yGAEgASgJIiIKCkNvb3JkaW5hdGUSCQoBeBgBIAEoBRIJCgF5GAIgASgFIlUKD0NvbXB1dGVyVXNlQXJncxIUCgx0b29sX2NhbGxfaWQYASABKAkSLAoHYWN0aW9ucxgCIAMoCzIbLmFnZW50LnYxLkNvbXB1dGVyVXNlQWN0aW9uIoEEChFDb21wdXRlclVzZUFjdGlvbhIvCgptb3VzZV9tb3ZlGAEgASgLMhkuYWdlbnQudjEuTW91c2VNb3ZlQWN0aW9uSAASJgoFY2xpY2sYAiABKAsyFS5hZ2VudC52MS5DbGlja0FjdGlvbkgAEi8KCm1vdXNlX2Rvd24YAyABKAsyGS5hZ2VudC52MS5Nb3VzZURvd25BY3Rpb25IABIrCghtb3VzZV91cBgEIAEoCzIXLmFnZW50LnYxLk1vdXNlVXBBY3Rpb25IABIkCgRkcmFnGAUgASgLMhQuYWdlbnQudjEuRHJhZ0FjdGlvbkgAEigKBnNjcm9sbBgGIAEoCzIWLmFnZW50LnYxLlNjcm9sbEFjdGlvbkgAEiQKBHR5cGUYByABKAsyFC5hZ2VudC52MS5UeXBlQWN0aW9uSAASIgoDa2V5GAggASgLMhMuYWdlbnQudjEuS2V5QWN0aW9uSAASJAoEd2FpdBgJIAEoCzIULmFnZW50LnYxLldhaXRBY3Rpb25IABIwCgpzY3JlZW5zaG90GAogASgLMhouYWdlbnQudjEuU2NyZWVuc2hvdEFjdGlvbkgAEjkKD2N1cnNvcl9wb3NpdGlvbhgLIAEoCzIeLmFnZW50LnYxLkN1cnNvclBvc2l0aW9uQWN0aW9uSABCCAoGYWN0aW9uIjsKD01vdXNlTW92ZUFjdGlvbhIoCgpjb29yZGluYXRlGAEgASgLMhQuYWdlbnQudjEuQ29vcmRpbmF0ZSKYAQoLQ2xpY2tBY3Rpb24SLQoKY29vcmRpbmF0ZRgBIAEoCzIULmFnZW50LnYxLkNvb3JkaW5hdGVIAIgBARIOCgZidXR0b24YAiABKAUSDQoFY291bnQYAyABKAUSGgoNbW9kaWZpZXJfa2V5cxgEIAEoCUgBiAEBQg0KC19jb29yZGluYXRlQhAKDl9tb2RpZmllcl9rZXlzIiEKD01vdXNlRG93bkFjdGlvbhIOCgZidXR0b24YASABKAUiHwoNTW91c2VVcEFjdGlvbhIOCgZidXR0b24YASABKAUiQAoKRHJhZ0FjdGlvbhIiCgRwYXRoGAEgAygLMhQuYWdlbnQudjEuQ29vcmRpbmF0ZRIOCgZidXR0b24YAiABKAUinQEKDFNjcm9sbEFjdGlvbhItCgpjb29yZGluYXRlGAEgASgLMhQuYWdlbnQudjEuQ29vcmRpbmF0ZUgAiAEBEhEKCWRpcmVjdGlvbhgCIAEoBRIOCgZhbW91bnQYAyABKAUSGgoNbW9kaWZpZXJfa2V5cxgEIAEoCUgBiAEBQg0KC19jb29yZGluYXRlQhAKDl9tb2RpZmllcl9rZXlzIhoKClR5cGVBY3Rpb24SDAoEdGV4dBgBIAEoCSJMCglLZXlBY3Rpb24SCwoDa2V5GAEgASgJEh0KEGhvbGRfZHVyYXRpb25fbXMYAiABKAVIAIgBAUITChFfaG9sZF9kdXJhdGlvbl9tcyIhCgpXYWl0QWN0aW9uEhMKC2R1cmF0aW9uX21zGAEgASgFIhIKEFNjcmVlbnNob3RBY3Rpb24iFgoUQ3Vyc29yUG9zaXRpb25BY3Rpb24iewoRQ29tcHV0ZXJVc2VSZXN1bHQSLwoHc3VjY2VzcxgBIAEoCzIcLmFnZW50LnYxLkNvbXB1dGVyVXNlU3VjY2Vzc0gAEisKBWVycm9yGAIgASgLMhouYWdlbnQudjEuQ29tcHV0ZXJVc2VFcnJvckgAQggKBnJlc3VsdCL7AQoSQ29tcHV0ZXJVc2VTdWNjZXNzEhQKDGFjdGlvbl9jb3VudBgBIAEoBRITCgtkdXJhdGlvbl9tcxgCIAEoBRIXCgpzY3JlZW5zaG90GAMgASgJSACIAQESEAoDbG9nGAQgASgJSAGIAQESHAoPc2NyZWVuc2hvdF9wYXRoGAUgASgJSAKIAQESMgoPY3Vyc29yX3Bvc2l0aW9uGAYgASgLMhQuYWdlbnQudjEuQ29vcmRpbmF0ZUgDiAEBQg0KC19zY3JlZW5zaG90QgYKBF9sb2dCEgoQX3NjcmVlbnNob3RfcGF0aEISChBfY3Vyc29yX3Bvc2l0aW9uIsABChBDb21wdXRlclVzZUVycm9yEg0KBWVycm9yGAEgASgJEhQKDGFjdGlvbl9jb3VudBgCIAEoBRITCgtkdXJhdGlvbl9tcxgDIAEoBRIQCgNsb2cYBCABKAlIAIgBARIXCgpzY3JlZW5zaG90GAUgASgJSAGIAQESHAoPc2NyZWVuc2hvdF9wYXRoGAYgASgJSAKIAQFCBgoEX2xvZ0INCgtfc2NyZWVuc2hvdEISChBfc2NyZWVuc2hvdF9wYXRoImsKE0NvbXB1dGVyVXNlVG9vbENhbGwSJwoEYXJncxgBIAEoCzIZLmFnZW50LnYxLkNvbXB1dGVyVXNlQXJncxIrCgZyZXN1bHQYAiABKAsyGy5hZ2VudC52MS5Db21wdXRlclVzZVJlc3VsdCJoChJDcmVhdGVQbGFuVG9vbENhbGwSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLkNyZWF0ZVBsYW5BcmdzEioKBnJlc3VsdBgCIAEoCzIaLmFnZW50LnYxLkNyZWF0ZVBsYW5SZXN1bHQiOAoFUGhhc2USDAoEbmFtZRgBIAEoCRIhCgV0b2RvcxgCIAMoCzISLmFnZW50LnYxLlRvZG9JdGVtIpYBCg5DcmVhdGVQbGFuQXJncxIMCgRwbGFuGAEgASgJEiEKBXRvZG9zGAIgAygLMhIuYWdlbnQudjEuVG9kb0l0ZW0SEAoIb3ZlcnZpZXcYAyABKAkSDAoEbmFtZRgEIAEoCRISCgppc19wcm9qZWN0GAUgASgIEh8KBnBoYXNlcxgGIAMoCzIPLmFnZW50LnYxLlBoYXNlIooBChBDcmVhdGVQbGFuUmVzdWx0EhAKCHBsYW5fdXJpGAMgASgJEi4KB3N1Y2Nlc3MYASABKAsyGy5hZ2VudC52MS5DcmVhdGVQbGFuU3VjY2Vzc0gAEioKBWVycm9yGAIgASgLMhkuYWdlbnQudjEuQ3JlYXRlUGxhbkVycm9ySABCCAoGcmVzdWx0IhMKEUNyZWF0ZVBsYW5TdWNjZXNzIiAKD0NyZWF0ZVBsYW5FcnJvchINCgVlcnJvchgBIAEoCSJWChZDcmVhdGVQbGFuUmVxdWVzdFF1ZXJ5EiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5DcmVhdGVQbGFuQXJncxIUCgx0b29sX2NhbGxfaWQYAiABKAkiRwoZQ3JlYXRlUGxhblJlcXVlc3RSZXNwb25zZRIqCgZyZXN1bHQYASABKAsyGi5hZ2VudC52MS5DcmVhdGVQbGFuUmVzdWx0IhYKFEN1cnNvclJ1bGVUeXBlR2xvYmFsIigKF0N1cnNvclJ1bGVUeXBlRmlsZUdsb2JzEg0KBWdsb2JzGAEgAygJIjEKGkN1cnNvclJ1bGVUeXBlQWdlbnRGZXRjaGVkEhMKC2Rlc2NyaXB0aW9uGAEgASgJIiAKHkN1cnNvclJ1bGVUeXBlTWFudWFsbHlBdHRhY2hlZCKLAgoOQ3Vyc29yUnVsZVR5cGUSMAoGZ2xvYmFsGAEgASgLMh4uYWdlbnQudjEuQ3Vyc29yUnVsZVR5cGVHbG9iYWxIABI5CgxmaWxlX2dsb2JiZWQYAiABKAsyIS5hZ2VudC52MS5DdXJzb3JSdWxlVHlwZUZpbGVHbG9ic0gAEj0KDWFnZW50X2ZldGNoZWQYAyABKAsyJC5hZ2VudC52MS5DdXJzb3JSdWxlVHlwZUFnZW50RmV0Y2hlZEgAEkUKEW1hbnVhbGx5X2F0dGFjaGVkGAQgASgLMiguYWdlbnQudjEuQ3Vyc29yUnVsZVR5cGVNYW51YWxseUF0dGFjaGVkSABCBgoEdHlwZSLIAQoKQ3Vyc29yUnVsZRIRCglmdWxsX3BhdGgYASABKAkSDwoHY29udGVudBgCIAEoCRImCgR0eXBlGAMgASgLMhguYWdlbnQudjEuQ3Vyc29yUnVsZVR5cGUSDgoGc291cmNlGAQgASgFEh4KEWdpdF9yZW1vdGVfb3JpZ2luGAUgASgJSACIAQESGAoLcGFyc2VfZXJyb3IYBiABKAlIAYgBAUIUChJfZ2l0X3JlbW90ZV9vcmlnaW5CDgoMX3BhcnNlX2Vycm9yIjAKCkRlbGV0ZUFyZ3MSDAoEcGF0aBgBIAEoCRIUCgx0b29sX2NhbGxfaWQYAiABKAki7QIKDERlbGV0ZVJlc3VsdBIqCgdzdWNjZXNzGAEgASgLMhcuYWdlbnQudjEuRGVsZXRlU3VjY2Vzc0gAEjYKDmZpbGVfbm90X2ZvdW5kGAIgASgLMhwuYWdlbnQudjEuRGVsZXRlRmlsZU5vdEZvdW5kSAASKwoIbm90X2ZpbGUYAyABKAsyFy5hZ2VudC52MS5EZWxldGVOb3RGaWxlSAASPQoRcGVybWlzc2lvbl9kZW5pZWQYBCABKAsyIC5hZ2VudC52MS5EZWxldGVQZXJtaXNzaW9uRGVuaWVkSAASLQoJZmlsZV9idXN5GAUgASgLMhguYWdlbnQudjEuRGVsZXRlRmlsZUJ1c3lIABIsCghyZWplY3RlZBgGIAEoCzIYLmFnZW50LnYxLkRlbGV0ZVJlamVjdGVkSAASJgoFZXJyb3IYByABKAsyFS5hZ2VudC52MS5EZWxldGVFcnJvckgAQggKBnJlc3VsdCJcCg1EZWxldGVTdWNjZXNzEgwKBHBhdGgYASABKAkSFAoMZGVsZXRlZF9maWxlGAIgASgJEhEKCWZpbGVfc2l6ZRgDIAEoAxIUCgxwcmV2X2NvbnRlbnQYBCABKAkiIgoSRGVsZXRlRmlsZU5vdEZvdW5kEgwKBHBhdGgYASABKAkiMgoNRGVsZXRlTm90RmlsZRIMCgRwYXRoGAEgASgJEhMKC2FjdHVhbF90eXBlGAIgASgJIlkKFkRlbGV0ZVBlcm1pc3Npb25EZW5pZWQSDAoEcGF0aBgBIAEoCRIcChRjbGllbnRfdmlzaWJsZV9lcnJvchgCIAEoCRITCgtpc19yZWFkb25seRgDIAEoCCIeCg5EZWxldGVGaWxlQnVzeRIMCgRwYXRoGAEgASgJIi4KDkRlbGV0ZVJlamVjdGVkEgwKBHBhdGgYASABKAkSDgoGcmVhc29uGAIgASgJIioKC0RlbGV0ZUVycm9yEgwKBHBhdGgYASABKAkSDQoFZXJyb3IYAiABKAkiXAoORGVsZXRlVG9vbENhbGwSIgoEYXJncxgBIAEoCzIULmFnZW50LnYxLkRlbGV0ZUFyZ3MSJgoGcmVzdWx0GAIgASgLMhYuYWdlbnQudjEuRGVsZXRlUmVzdWx0IjUKD0RpYWdub3N0aWNzQXJncxIMCgRwYXRoGAEgASgJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCSKvAgoRRGlhZ25vc3RpY3NSZXN1bHQSLwoHc3VjY2VzcxgBIAEoCzIcLmFnZW50LnYxLkRpYWdub3N0aWNzU3VjY2Vzc0gAEisKBWVycm9yGAIgASgLMhouYWdlbnQudjEuRGlhZ25vc3RpY3NFcnJvckgAEjEKCHJlamVjdGVkGAMgASgLMh0uYWdlbnQudjEuRGlhZ25vc3RpY3NSZWplY3RlZEgAEjsKDmZpbGVfbm90X2ZvdW5kGAQgASgLMiEuYWdlbnQudjEuRGlhZ25vc3RpY3NGaWxlTm90Rm91bmRIABJCChFwZXJtaXNzaW9uX2RlbmllZBgFIAEoCzIlLmFnZW50LnYxLkRpYWdub3N0aWNzUGVybWlzc2lvbkRlbmllZEgAQggKBnJlc3VsdCJoChJEaWFnbm9zdGljc1N1Y2Nlc3MSDAoEcGF0aBgBIAEoCRIpCgtkaWFnbm9zdGljcxgCIAMoCzIULmFnZW50LnYxLkRpYWdub3N0aWMSGQoRdG90YWxfZGlhZ25vc3RpY3MYAyABKAUifwoKRGlhZ25vc3RpYxIQCghzZXZlcml0eRgBIAEoBRIeCgVyYW5nZRgCIAEoCzIPLmFnZW50LnYxLlJhbmdlEg8KB21lc3NhZ2UYAyABKAkSDgoGc291cmNlGAQgASgJEgwKBGNvZGUYBSABKAkSEAoIaXNfc3RhbGUYBiABKAgiLwoQRGlhZ25vc3RpY3NFcnJvchIMCgRwYXRoGAEgASgJEg0KBWVycm9yGAIgASgJIjMKE0RpYWdub3N0aWNzUmVqZWN0ZWQSDAoEcGF0aBgBIAEoCRIOCgZyZWFzb24YAiABKAkiJwoXRGlhZ25vc3RpY3NGaWxlTm90Rm91bmQSDAoEcGF0aBgBIAEoCSIrChtEaWFnbm9zdGljc1Blcm1pc3Npb25EZW5pZWQSDAoEcGF0aBgBIAEoCSJICghFZGl0QXJncxIMCgRwYXRoGAEgASgJEhsKDnN0cmVhbV9jb250ZW50GAYgASgJSACIAQFCEQoPX3N0cmVhbV9jb250ZW50ItYCCgpFZGl0UmVzdWx0EigKB3N1Y2Nlc3MYASABKAsyFS5hZ2VudC52MS5FZGl0U3VjY2Vzc0gAEjQKDmZpbGVfbm90X2ZvdW5kGAIgASgLMhouYWdlbnQudjEuRWRpdEZpbGVOb3RGb3VuZEgAEkQKFnJlYWRfcGVybWlzc2lvbl9kZW5pZWQYAyABKAsyIi5hZ2VudC52MS5FZGl0UmVhZFBlcm1pc3Npb25EZW5pZWRIABJGChd3cml0ZV9wZXJtaXNzaW9uX2RlbmllZBgEIAEoCzIjLmFnZW50LnYxLkVkaXRXcml0ZVBlcm1pc3Npb25EZW5pZWRIABIqCghyZWplY3RlZBgGIAEoCzIWLmFnZW50LnYxLkVkaXRSZWplY3RlZEgAEiQKBWVycm9yGAcgASgLMhMuYWdlbnQudjEuRWRpdEVycm9ySABCCAoGcmVzdWx0IqQCCgtFZGl0U3VjY2VzcxIMCgRwYXRoGAEgASgJEhgKC2xpbmVzX2FkZGVkGAMgASgFSACIAQESGgoNbGluZXNfcmVtb3ZlZBgEIAEoBUgBiAEBEhgKC2RpZmZfc3RyaW5nGAUgASgJSAKIAQESJQoYYmVmb3JlX2Z1bGxfZmlsZV9jb250ZW50GAYgASgJSAOIAQESHwoXYWZ0ZXJfZnVsbF9maWxlX2NvbnRlbnQYByABKAkSFAoHbWVzc2FnZRgIIAEoCUgEiAEBQg4KDF9saW5lc19hZGRlZEIQCg5fbGluZXNfcmVtb3ZlZEIOCgxfZGlmZl9zdHJpbmdCGwoZX2JlZm9yZV9mdWxsX2ZpbGVfY29udGVudEIKCghfbWVzc2FnZSIgChBFZGl0RmlsZU5vdEZvdW5kEgwKBHBhdGgYASABKAkiKAoYRWRpdFJlYWRQZXJtaXNzaW9uRGVuaWVkEgwKBHBhdGgYASABKAkiTQoZRWRpdFdyaXRlUGVybWlzc2lvbkRlbmllZBIMCgRwYXRoGAEgASgJEg0KBWVycm9yGAIgASgJEhMKC2lzX3JlYWRvbmx5GAMgASgIIiwKDEVkaXRSZWplY3RlZBIMCgRwYXRoGAEgASgJEg4KBnJlYXNvbhgCIAEoCSJiCglFZGl0RXJyb3ISDAoEcGF0aBgBIAEoCRINCgVlcnJvchgCIAEoCRIgChNtb2RlbF92aXNpYmxlX2Vycm9yGAUgASgJSACIAQFCFgoUX21vZGVsX3Zpc2libGVfZXJyb3IiVgoMRWRpdFRvb2xDYWxsEiAKBGFyZ3MYASABKAsyEi5hZ2VudC52MS5FZGl0QXJncxIkCgZyZXN1bHQYAiABKAsyFC5hZ2VudC52MS5FZGl0UmVzdWx0IjEKEUVkaXRUb29sQ2FsbERlbHRhEhwKFHN0cmVhbV9jb250ZW50X2RlbHRhGAEgASgJIjEKDEV4YUZldGNoQXJncxILCgNpZHMYASADKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJIqIBCg5FeGFGZXRjaFJlc3VsdBIsCgdzdWNjZXNzGAEgASgLMhkuYWdlbnQudjEuRXhhRmV0Y2hTdWNjZXNzSAASKAoFZXJyb3IYAiABKAsyFy5hZ2VudC52MS5FeGFGZXRjaEVycm9ySAASLgoIcmVqZWN0ZWQYAyABKAsyGi5hZ2VudC52MS5FeGFGZXRjaFJlamVjdGVkSABCCAoGcmVzdWx0Ij4KD0V4YUZldGNoU3VjY2VzcxIrCghjb250ZW50cxgBIAMoCzIZLmFnZW50LnYxLkV4YUZldGNoQ29udGVudCIeCg1FeGFGZXRjaEVycm9yEg0KBWVycm9yGAEgASgJIiIKEEV4YUZldGNoUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlMKD0V4YUZldGNoQ29udGVudBINCgV0aXRsZRgBIAEoCRILCgN1cmwYAiABKAkSDAoEdGV4dBgDIAEoCRIWCg5wdWJsaXNoZWRfZGF0ZRgEIAEoCSJiChBFeGFGZXRjaFRvb2xDYWxsEiQKBGFyZ3MYASABKAsyFi5hZ2VudC52MS5FeGFGZXRjaEFyZ3MSKAoGcmVzdWx0GAIgASgLMhguYWdlbnQudjEuRXhhRmV0Y2hSZXN1bHQiPAoURXhhRmV0Y2hSZXF1ZXN0UXVlcnkSJAoEYXJncxgBIAEoCzIWLmFnZW50LnYxLkV4YUZldGNoQXJncyKjAQoXRXhhRmV0Y2hSZXF1ZXN0UmVzcG9uc2USPgoIYXBwcm92ZWQYASABKAsyKi5hZ2VudC52MS5FeGFGZXRjaFJlcXVlc3RSZXNwb25zZV9BcHByb3ZlZEgAEj4KCHJlamVjdGVkGAIgASgLMiouYWdlbnQudjEuRXhhRmV0Y2hSZXF1ZXN0UmVzcG9uc2VfUmVqZWN0ZWRIAEIICgZyZXN1bHQiIgogRXhhRmV0Y2hSZXF1ZXN0UmVzcG9uc2VfQXBwcm92ZWQiMgogRXhhRmV0Y2hSZXF1ZXN0UmVzcG9uc2VfUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlcKDUV4YVNlYXJjaEFyZ3MSDQoFcXVlcnkYASABKAkSDAoEdHlwZRgCIAEoCRITCgtudW1fcmVzdWx0cxgDIAEoBRIUCgx0b29sX2NhbGxfaWQYBCABKAkipgEKD0V4YVNlYXJjaFJlc3VsdBItCgdzdWNjZXNzGAEgASgLMhouYWdlbnQudjEuRXhhU2VhcmNoU3VjY2Vzc0gAEikKBWVycm9yGAIgASgLMhguYWdlbnQudjEuRXhhU2VhcmNoRXJyb3JIABIvCghyZWplY3RlZBgDIAEoCzIbLmFnZW50LnYxLkV4YVNlYXJjaFJlamVjdGVkSABCCAoGcmVzdWx0IkQKEEV4YVNlYXJjaFN1Y2Nlc3MSMAoKcmVmZXJlbmNlcxgBIAMoCzIcLmFnZW50LnYxLkV4YVNlYXJjaFJlZmVyZW5jZSIfCg5FeGFTZWFyY2hFcnJvchINCgVlcnJvchgBIAEoCSIjChFFeGFTZWFyY2hSZWplY3RlZBIOCgZyZWFzb24YASABKAkiVgoSRXhhU2VhcmNoUmVmZXJlbmNlEg0KBXRpdGxlGAEgASgJEgsKA3VybBgCIAEoCRIMCgR0ZXh0GAMgASgJEhYKDnB1Ymxpc2hlZF9kYXRlGAQgASgJImUKEUV4YVNlYXJjaFRvb2xDYWxsEiUKBGFyZ3MYASABKAsyFy5hZ2VudC52MS5FeGFTZWFyY2hBcmdzEikKBnJlc3VsdBgCIAEoCzIZLmFnZW50LnYxLkV4YVNlYXJjaFJlc3VsdCI+ChVFeGFTZWFyY2hSZXF1ZXN0UXVlcnkSJQoEYXJncxgBIAEoCzIXLmFnZW50LnYxLkV4YVNlYXJjaEFyZ3MipgEKGEV4YVNlYXJjaFJlcXVlc3RSZXNwb25zZRI/CghhcHByb3ZlZBgBIAEoCzIrLmFnZW50LnYxLkV4YVNlYXJjaFJlcXVlc3RSZXNwb25zZV9BcHByb3ZlZEgAEj8KCHJlamVjdGVkGAIgASgLMisuYWdlbnQudjEuRXhhU2VhcmNoUmVxdWVzdFJlc3BvbnNlX1JlamVjdGVkSABCCAoGcmVzdWx0IiMKIUV4YVNlYXJjaFJlcXVlc3RSZXNwb25zZV9BcHByb3ZlZCIzCiFFeGFTZWFyY2hSZXF1ZXN0UmVzcG9uc2VfUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIiMKFUV4ZWNDbGllbnRTdHJlYW1DbG9zZRIKCgJpZBgBIAEoDSJ+Cg9FeGVjQ2xpZW50VGhyb3cSCgoCaWQYASABKA0SDQoFZXJyb3IYAiABKAkSGAoLc3RhY2tfdHJhY2UYAyABKAlIAIgBARIXCgplcnJvcl9jb2RlGAQgASgJSAGIAQFCDgoMX3N0YWNrX3RyYWNlQg0KC19lcnJvcl9jb2RlIiEKE0V4ZWNDbGllbnRIZWFydGJlYXQSCgoCaWQYASABKA0ivgEKGEV4ZWNDbGllbnRDb250cm9sTWVzc2FnZRI3CgxzdHJlYW1fY2xvc2UYASABKAsyHy5hZ2VudC52MS5FeGVjQ2xpZW50U3RyZWFtQ2xvc2VIABIqCgV0aHJvdxgCIAEoCzIZLmFnZW50LnYxLkV4ZWNDbGllbnRUaHJvd0gAEjIKCWhlYXJ0YmVhdBgDIAEoCzIdLmFnZW50LnYxLkV4ZWNDbGllbnRIZWFydGJlYXRIAEIJCgdtZXNzYWdlIoQBCgtTcGFuQ29udGV4dBIQCgh0cmFjZV9pZBgBIAEoCRIPCgdzcGFuX2lkGAIgASgJEhgKC3RyYWNlX2ZsYWdzGAMgASgNSACIAQESGAoLdHJhY2Vfc3RhdGUYBCABKAlIAYgBAUIOCgxfdHJhY2VfZmxhZ3NCDgoMX3RyYWNlX3N0YXRlIgsKCUFib3J0QXJncyINCgtBYm9ydFJlc3VsdCLaEwoRRXhlY1NlcnZlck1lc3NhZ2USCgoCaWQYASABKA0SDwoHZXhlY19pZBgPIAEoCRIwCgxzcGFuX2NvbnRleHQYEyABKAsyFS5hZ2VudC52MS5TcGFuQ29udGV4dEgBiAEBEikKCnNoZWxsX2FyZ3MYAiABKAsyEy5hZ2VudC52MS5TaGVsbEFyZ3NIABIpCgp3cml0ZV9hcmdzGAMgASgLMhMuYWdlbnQudjEuV3JpdGVBcmdzSAASKwoLZGVsZXRlX2FyZ3MYBCABKAsyFC5hZ2VudC52MS5EZWxldGVBcmdzSAASJwoJZ3JlcF9hcmdzGAUgASgLMhIuYWdlbnQudjEuR3JlcEFyZ3NIABInCglyZWFkX2FyZ3MYByABKAsyEi5hZ2VudC52MS5SZWFkQXJnc0gAEiMKB2xzX2FyZ3MYCCABKAsyEC5hZ2VudC52MS5Mc0FyZ3NIABI1ChBkaWFnbm9zdGljc19hcmdzGAkgASgLMhkuYWdlbnQudjEuRGlhZ25vc3RpY3NBcmdzSAASPAoUcmVxdWVzdF9jb250ZXh0X2FyZ3MYCiABKAsyHC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dEFyZ3NIABIlCghtY3BfYXJncxgLIAEoCzIRLmFnZW50LnYxLk1jcEFyZ3NIABIwChFzaGVsbF9zdHJlYW1fYXJncxgOIAEoCzITLmFnZW50LnYxLlNoZWxsQXJnc0gAEkkKG2JhY2tncm91bmRfc2hlbGxfc3Bhd25fYXJncxgQIAEoCzIiLmFnZW50LnYxLkJhY2tncm91bmRTaGVsbFNwYXduQXJnc0gAEkoKHGxpc3RfbWNwX3Jlc291cmNlc19leGVjX2FyZ3MYESABKAsyIi5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzRXhlY0FyZ3NIABJIChtyZWFkX21jcF9yZXNvdXJjZV9leGVjX2FyZ3MYEiABKAsyIS5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VFeGVjQXJnc0gAEikKCmZldGNoX2FyZ3MYFCABKAsyEy5hZ2VudC52MS5GZXRjaEFyZ3NIABI4ChJyZWNvcmRfc2NyZWVuX2FyZ3MYFSABKAsyGi5hZ2VudC52MS5SZWNvcmRTY3JlZW5BcmdzSAASNgoRY29tcHV0ZXJfdXNlX2FyZ3MYFiABKAsyGS5hZ2VudC52MS5Db21wdXRlclVzZUFyZ3NIABI/ChZ3cml0ZV9zaGVsbF9zdGRpbl9hcmdzGBcgASgLMh0uYWdlbnQudjEuV3JpdGVTaGVsbFN0ZGluQXJnc0gAEjAKEnJlZGFjdGVkX3JlYWRfYXJncxgdIAEoCzISLmFnZW50LnYxLlJlYWRBcmdzSAASOQoTbWNwX3N0YXRlX2V4ZWNfYXJncxgkIAEoCzIaLmFnZW50LnYxLk1jcFN0YXRlRXhlY0FyZ3NIABI2ChFleGVjdXRlX2hvb2tfYXJncxgbIAEoCzIZLmFnZW50LnYxLkV4ZWN1dGVIb29rQXJnc0gAEi8KDXN1YmFnZW50X2FyZ3MYHCABKAsyFi5hZ2VudC52MS5TdWJhZ2VudEFyZ3NIABJJChtmb3JjZV9iYWNrZ3JvdW5kX3NoZWxsX2FyZ3MYHiABKAsyIi5hZ2VudC52MS5Gb3JjZUJhY2tncm91bmRTaGVsbEFyZ3NIABJPCh5mb3JjZV9iYWNrZ3JvdW5kX3N1YmFnZW50X2FyZ3MYHyABKAsyJS5hZ2VudC52MS5Gb3JjZUJhY2tncm91bmRTdWJhZ2VudEFyZ3NIABI6ChNzdWJhZ2VudF9hd2FpdF9hcmdzGCUgASgLMhsuYWdlbnQudjEuU3ViYWdlbnRBd2FpdEFyZ3NIABJHChpzbWFydF9tb2RlX2NsYXNzaWZpZXJfYXJncxgmIAEoCzIhLmFnZW50LnYxLlNtYXJ0TW9kZUNsYXNzaWZpZXJBcmdzSAASQgoXY2FudmFzX2RpYWdub3N0aWNzX2FyZ3MYKCABKAsyHy5hZ2VudC52MS5DYW52YXNEaWFnbm9zdGljc0FyZ3NIABJNCh1zaGVsbF9hbGxvd2xpc3RfcHJlY2hlY2tfYXJncxgpIAEoCzIkLmFnZW50LnYxLlNoZWxsQWxsb3dsaXN0UHJlY2hlY2tBcmdzSAASSQobbWNwX2FsbG93bGlzdF9wcmVjaGVja19hcmdzGCogASgLMiIuYWdlbnQudjEuTWNwQWxsb3dsaXN0UHJlY2hlY2tBcmdzSAASVAohd2ViX2ZldGNoX2FsbG93bGlzdF9wcmVjaGVja19hcmdzGCsgASgLMicuYWdlbnQudjEuV2ViRmV0Y2hBbGxvd2xpc3RQcmVjaGVja0FyZ3NIABI0ChBnaXRfZGlmZl9yZXF1ZXN0GCwgASgLMhguYWdlbnQudjEuR2V0RGlmZlJlcXVlc3RIABIwCgxwaV9yZWFkX2FyZ3MYLSABKAsyGC5hZ2VudC52MS5QaVJlYWRFeGVjQXJnc0gAEjAKDHBpX2Jhc2hfYXJncxguIAEoCzIYLmFnZW50LnYxLlBpQmFzaEV4ZWNBcmdzSAASMAoMcGlfZWRpdF9hcmdzGC8gASgLMhguYWdlbnQudjEuUGlFZGl0RXhlY0FyZ3NIABIyCg1waV93cml0ZV9hcmdzGDAgASgLMhkuYWdlbnQudjEuUGlXcml0ZUV4ZWNBcmdzSAASMAoMcGlfZ3JlcF9hcmdzGDEgASgLMhguYWdlbnQudjEuUGlHcmVwRXhlY0FyZ3NIABIwCgxwaV9maW5kX2FyZ3MYMiABKAsyGC5hZ2VudC52MS5QaUZpbmRFeGVjQXJnc0gAEiwKCnBpX2xzX2FyZ3MYMyABKAsyFi5hZ2VudC52MS5QaUxzRXhlY0FyZ3NIABI3ChhtaW5pX3N3ZV9hZ2VudF9iYXNoX2FyZ3MYNCABKAsyEy5hZ2VudC52MS5TaGVsbEFyZ3NIABJEChhjb252ZXJzYXRpb25fc2VhcmNoX2FyZ3MYNSABKAsyIC5hZ2VudC52MS5Db252ZXJzYXRpb25TZWFyY2hBcmdzSAASRQoZYWdlbnRfc3RvcmVfY29uZmxpY3RfYXJncxg2IAEoCzIgLmFnZW50LnYxLkFnZW50U3RvcmVDb25mbGljdEFyZ3NIABIsCh9hY2NlcHRfaG9va19hZGRpdGlvbmFsX2NvbnRleHRzGDcgASgISAKIAQFCCQoHbWVzc2FnZUIPCg1fc3Bhbl9jb250ZXh0QiIKIF9hY2NlcHRfaG9va19hZGRpdGlvbmFsX2NvbnRleHRzIuEUChFFeGVjQ2xpZW50TWVzc2FnZRIKCgJpZBgBIAEoDRIPCgdleGVjX2lkGA8gASgJEi0KDHNoZWxsX3Jlc3VsdBgCIAEoCzIVLmFnZW50LnYxLlNoZWxsUmVzdWx0SAASLQoMd3JpdGVfcmVzdWx0GAMgASgLMhUuYWdlbnQudjEuV3JpdGVSZXN1bHRIABIvCg1kZWxldGVfcmVzdWx0GAQgASgLMhYuYWdlbnQudjEuRGVsZXRlUmVzdWx0SAASKwoLZ3JlcF9yZXN1bHQYBSABKAsyFC5hZ2VudC52MS5HcmVwUmVzdWx0SAASKwoLcmVhZF9yZXN1bHQYByABKAsyFC5hZ2VudC52MS5SZWFkUmVzdWx0SAASJwoJbHNfcmVzdWx0GAggASgLMhIuYWdlbnQudjEuTHNSZXN1bHRIABI5ChJkaWFnbm9zdGljc19yZXN1bHQYCSABKAsyGy5hZ2VudC52MS5EaWFnbm9zdGljc1Jlc3VsdEgAEkAKFnJlcXVlc3RfY29udGV4dF9yZXN1bHQYCiABKAsyHi5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dFJlc3VsdEgAEikKCm1jcF9yZXN1bHQYCyABKAsyEy5hZ2VudC52MS5NY3BSZXN1bHRIABItCgxzaGVsbF9zdHJlYW0YDiABKAsyFS5hZ2VudC52MS5TaGVsbFN0cmVhbUgAEk0KHWJhY2tncm91bmRfc2hlbGxfc3Bhd25fcmVzdWx0GBAgASgLMiQuYWdlbnQudjEuQmFja2dyb3VuZFNoZWxsU3Bhd25SZXN1bHRIABJOCh5saXN0X21jcF9yZXNvdXJjZXNfZXhlY19yZXN1bHQYESABKAsyJC5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzRXhlY1Jlc3VsdEgAEkwKHXJlYWRfbWNwX3Jlc291cmNlX2V4ZWNfcmVzdWx0GBIgASgLMiMuYWdlbnQudjEuUmVhZE1jcFJlc291cmNlRXhlY1Jlc3VsdEgAEi0KDGZldGNoX3Jlc3VsdBgUIAEoCzIVLmFnZW50LnYxLkZldGNoUmVzdWx0SAASPAoUcmVjb3JkX3NjcmVlbl9yZXN1bHQYFSABKAsyHC5hZ2VudC52MS5SZWNvcmRTY3JlZW5SZXN1bHRIABI6ChNjb21wdXRlcl91c2VfcmVzdWx0GBYgASgLMhsuYWdlbnQudjEuQ29tcHV0ZXJVc2VSZXN1bHRIABJDChh3cml0ZV9zaGVsbF9zdGRpbl9yZXN1bHQYFyABKAsyHy5hZ2VudC52MS5Xcml0ZVNoZWxsU3RkaW5SZXN1bHRIABI0ChRyZWRhY3RlZF9yZWFkX3Jlc3VsdBgdIAEoCzIULmFnZW50LnYxLlJlYWRSZXN1bHRIABI9ChVtY3Bfc3RhdGVfZXhlY19yZXN1bHQYJCABKAsyHC5hZ2VudC52MS5NY3BTdGF0ZUV4ZWNSZXN1bHRIABI6ChNleGVjdXRlX2hvb2tfcmVzdWx0GBsgASgLMhsuYWdlbnQudjEuRXhlY3V0ZUhvb2tSZXN1bHRIABIzCg9zdWJhZ2VudF9yZXN1bHQYHCABKAsyGC5hZ2VudC52MS5TdWJhZ2VudFJlc3VsdEgAEk0KHWZvcmNlX2JhY2tncm91bmRfc2hlbGxfcmVzdWx0GB4gASgLMiQuYWdlbnQudjEuRm9yY2VCYWNrZ3JvdW5kU2hlbGxSZXN1bHRIABJTCiBmb3JjZV9iYWNrZ3JvdW5kX3N1YmFnZW50X3Jlc3VsdBgfIAEoCzInLmFnZW50LnYxLkZvcmNlQmFja2dyb3VuZFN1YmFnZW50UmVzdWx0SAASPgoVc3ViYWdlbnRfYXdhaXRfcmVzdWx0GCUgASgLMh0uYWdlbnQudjEuU3ViYWdlbnRBd2FpdFJlc3VsdEgAEksKHHNtYXJ0X21vZGVfY2xhc3NpZmllcl9yZXN1bHQYJiABKAsyIy5hZ2VudC52MS5TbWFydE1vZGVDbGFzc2lmaWVyUmVzdWx0SAASRgoZY2FudmFzX2RpYWdub3N0aWNzX3Jlc3VsdBgoIAEoCzIhLmFnZW50LnYxLkNhbnZhc0RpYWdub3N0aWNzUmVzdWx0SAASUQofc2hlbGxfYWxsb3dsaXN0X3ByZWNoZWNrX3Jlc3VsdBgpIAEoCzImLmFnZW50LnYxLlNoZWxsQWxsb3dsaXN0UHJlY2hlY2tSZXN1bHRIABJNCh1tY3BfYWxsb3dsaXN0X3ByZWNoZWNrX3Jlc3VsdBgqIAEoCzIkLmFnZW50LnYxLk1jcEFsbG93bGlzdFByZWNoZWNrUmVzdWx0SAASWAojd2ViX2ZldGNoX2FsbG93bGlzdF9wcmVjaGVja19yZXN1bHQYKyABKAsyKS5hZ2VudC52MS5XZWJGZXRjaEFsbG93bGlzdFByZWNoZWNrUmVzdWx0SAASNgoRZ2l0X2RpZmZfcmVzcG9uc2UYLCABKAsyGS5hZ2VudC52MS5HZXREaWZmUmVzcG9uc2VIABI0Cg5waV9yZWFkX3Jlc3VsdBguIAEoCzIaLmFnZW50LnYxLlBpUmVhZEV4ZWNSZXN1bHRIABI0Cg5waV9iYXNoX3Jlc3VsdBgvIAEoCzIaLmFnZW50LnYxLlBpQmFzaEV4ZWNSZXN1bHRIABI0Cg5waV9lZGl0X3Jlc3VsdBgwIAEoCzIaLmFnZW50LnYxLlBpRWRpdEV4ZWNSZXN1bHRIABI2Cg9waV93cml0ZV9yZXN1bHQYMSABKAsyGy5hZ2VudC52MS5QaVdyaXRlRXhlY1Jlc3VsdEgAEjQKDnBpX2dyZXBfcmVzdWx0GDIgASgLMhouYWdlbnQudjEuUGlHcmVwRXhlY1Jlc3VsdEgAEjQKDnBpX2ZpbmRfcmVzdWx0GDMgASgLMhouYWdlbnQudjEuUGlGaW5kRXhlY1Jlc3VsdEgAEjAKDHBpX2xzX3Jlc3VsdBg0IAEoCzIYLmFnZW50LnYxLlBpTHNFeGVjUmVzdWx0SAASSAoaY29udmVyc2F0aW9uX3NlYXJjaF9yZXN1bHQYNSABKAsyIi5hZ2VudC52MS5Db252ZXJzYXRpb25TZWFyY2hSZXN1bHRIABJJChthZ2VudF9zdG9yZV9jb25mbGljdF9yZXN1bHQYNiABKAsyIi5hZ2VudC52MS5BZ2VudFN0b3JlQ29uZmxpY3RSZXN1bHRIABI7ChptaW5pX3N3ZV9hZ2VudF9iYXNoX3Jlc3VsdBg3IAEoCzIVLmFnZW50LnYxLlNoZWxsUmVzdWx0SAASJAoXbG9jYWxfZXhlY3V0aW9uX3RpbWVfbXMYJyABKAVIAYgBARJBChhob29rX2FkZGl0aW9uYWxfY29udGV4dHMYLSADKAsyHy5hZ2VudC52MS5Ib29rQWRkaXRpb25hbENvbnRleHRCCQoHbWVzc2FnZUIaChhfbG9jYWxfZXhlY3V0aW9uX3RpbWVfbXMiLgoJRmV0Y2hBcmdzEgsKA3VybBgBIAEoCRIUCgx0b29sX2NhbGxfaWQYAiABKAkiaQoLRmV0Y2hSZXN1bHQSKQoHc3VjY2VzcxgBIAEoCzIWLmFnZW50LnYxLkZldGNoU3VjY2Vzc0gAEiUKBWVycm9yGAIgASgLMhQuYWdlbnQudjEuRmV0Y2hFcnJvckgAQggKBnJlc3VsdCJXCgxGZXRjaFN1Y2Nlc3MSCwoDdXJsGAEgASgJEg8KB2NvbnRlbnQYAiABKAkSEwoLc3RhdHVzX2NvZGUYAyABKAUSFAoMY29udGVudF90eXBlGAQgASgJIigKCkZldGNoRXJyb3ISCwoDdXJsGAEgASgJEg0KBWVycm9yGAIgASgJIm0KEUdlbmVyYXRlSW1hZ2VBcmdzEhMKC2Rlc2NyaXB0aW9uGAEgASgJEhYKCWZpbGVfcGF0aBgCIAEoCUgAiAEBEh0KFXJlZmVyZW5jZV9pbWFnZV9wYXRocxgFIAMoCUIMCgpfZmlsZV9wYXRoIoEBChNHZW5lcmF0ZUltYWdlUmVzdWx0EjEKB3N1Y2Nlc3MYASABKAsyHi5hZ2VudC52MS5HZW5lcmF0ZUltYWdlU3VjY2Vzc0gAEi0KBWVycm9yGAIgASgLMhwuYWdlbnQudjEuR2VuZXJhdGVJbWFnZUVycm9ySABCCAoGcmVzdWx0Ij0KFEdlbmVyYXRlSW1hZ2VTdWNjZXNzEhEKCWZpbGVfcGF0aBgBIAEoCRISCgppbWFnZV9kYXRhGAIgASgJIiMKEkdlbmVyYXRlSW1hZ2VFcnJvchINCgVlcnJvchgBIAEoCSJxChVHZW5lcmF0ZUltYWdlVG9vbENhbGwSKQoEYXJncxgBIAEoCzIbLmFnZW50LnYxLkdlbmVyYXRlSW1hZ2VBcmdzEi0KBnJlc3VsdBgCIAEoCzIdLmFnZW50LnYxLkdlbmVyYXRlSW1hZ2VSZXN1bHQi5gQKCEdyZXBBcmdzEg8KB3BhdHRlcm4YASABKAkSEQoEcGF0aBgCIAEoCUgAiAEBEhEKBGdsb2IYAyABKAlIAYgBARIYCgtvdXRwdXRfbW9kZRgEIAEoCUgCiAEBEhsKDmNvbnRleHRfYmVmb3JlGAUgASgFSAOIAQESGgoNY29udGV4dF9hZnRlchgGIAEoBUgEiAEBEhQKB2NvbnRleHQYByABKAVIBYgBARIdChBjYXNlX2luc2Vuc2l0aXZlGAggASgISAaIAQESEQoEdHlwZRgJIAEoCUgHiAEBEhcKCmhlYWRfbGltaXQYCiABKAVICIgBARIWCgltdWx0aWxpbmUYCyABKAhICYgBARIRCgRzb3J0GAwgASgJSAqIAQESGwoOc29ydF9hc2NlbmRpbmcYDSABKAhIC4gBARIUCgx0b29sX2NhbGxfaWQYDiABKAkSNAoOc2FuZGJveF9wb2xpY3kYDyABKAsyFy5hZ2VudC52MS5TYW5kYm94UG9saWN5SAyIAQESEwoGb2Zmc2V0GBAgASgFSA2IAQFCBwoFX3BhdGhCBwoFX2dsb2JCDgoMX291dHB1dF9tb2RlQhEKD19jb250ZXh0X2JlZm9yZUIQCg5fY29udGV4dF9hZnRlckIKCghfY29udGV4dEITChFfY2FzZV9pbnNlbnNpdGl2ZUIHCgVfdHlwZUINCgtfaGVhZF9saW1pdEIMCgpfbXVsdGlsaW5lQgcKBV9zb3J0QhEKD19zb3J0X2FzY2VuZGluZ0IRCg9fc2FuZGJveF9wb2xpY3lCCQoHX29mZnNldCJmCgpHcmVwUmVzdWx0EigKB3N1Y2Nlc3MYASABKAsyFS5hZ2VudC52MS5HcmVwU3VjY2Vzc0gAEiQKBWVycm9yGAIgASgLMhMuYWdlbnQudjEuR3JlcEVycm9ySABCCAoGcmVzdWx0IhoKCUdyZXBFcnJvchINCgVlcnJvchgBIAEoCSK0AgoLR3JlcFN1Y2Nlc3MSDwoHcGF0dGVybhgBIAEoCRIMCgRwYXRoGAIgASgJEhMKC291dHB1dF9tb2RlGAMgASgJEkYKEXdvcmtzcGFjZV9yZXN1bHRzGAQgAygLMisuYWdlbnQudjEuR3JlcFN1Y2Nlc3MuV29ya3NwYWNlUmVzdWx0c0VudHJ5EjwKFGFjdGl2ZV9lZGl0b3JfcmVzdWx0GAUgASgLMhkuYWdlbnQudjEuR3JlcFVuaW9uUmVzdWx0SACIAQEaUgoVV29ya3NwYWNlUmVzdWx0c0VudHJ5EgsKA2tleRgBIAEoCRIoCgV2YWx1ZRgCIAEoCzIZLmFnZW50LnYxLkdyZXBVbmlvblJlc3VsdDoCOAFCFwoVX2FjdGl2ZV9lZGl0b3JfcmVzdWx0IqMBCg9HcmVwVW5pb25SZXN1bHQSKgoFY291bnQYASABKAsyGS5hZ2VudC52MS5HcmVwQ291bnRSZXN1bHRIABIqCgVmaWxlcxgCIAEoCzIZLmFnZW50LnYxLkdyZXBGaWxlc1Jlc3VsdEgAEi4KB2NvbnRlbnQYAyABKAsyGy5hZ2VudC52MS5HcmVwQ29udGVudFJlc3VsdEgAQggKBnJlc3VsdCKDAgoPR3JlcENvdW50UmVzdWx0EicKBmNvdW50cxgBIAMoCzIXLmFnZW50LnYxLkdyZXBGaWxlQ291bnQSEwoLdG90YWxfZmlsZXMYAiABKAUSFQoNdG90YWxfbWF0Y2hlcxgDIAEoBRIYChBjbGllbnRfdHJ1bmNhdGVkGAQgASgIEhkKEXJpcGdyZXBfdHJ1bmNhdGVkGAUgASgIEh8KEmhlYWRfbGltaXRfYXBwbGllZBgGIAEoBUgAiAEBEhsKDm9mZnNldF9hcHBsaWVkGAcgASgFSAGIAQFCFQoTX2hlYWRfbGltaXRfYXBwbGllZEIRCg9fb2Zmc2V0X2FwcGxpZWQiLAoNR3JlcEZpbGVDb3VudBIMCgRmaWxlGAEgASgJEg0KBWNvdW50GAIgASgFItIBCg9HcmVwRmlsZXNSZXN1bHQSDQoFZmlsZXMYASADKAkSEwoLdG90YWxfZmlsZXMYAiABKAUSGAoQY2xpZW50X3RydW5jYXRlZBgDIAEoCBIZChFyaXBncmVwX3RydW5jYXRlZBgEIAEoCBIfChJoZWFkX2xpbWl0X2FwcGxpZWQYBSABKAVIAIgBARIbCg5vZmZzZXRfYXBwbGllZBgGIAEoBUgBiAEBQhUKE19oZWFkX2xpbWl0X2FwcGxpZWRCEQoPX29mZnNldF9hcHBsaWVkIowCChFHcmVwQ29udGVudFJlc3VsdBIoCgdtYXRjaGVzGAEgAygLMhcuYWdlbnQudjEuR3JlcEZpbGVNYXRjaBITCgt0b3RhbF9saW5lcxgCIAEoBRIbChN0b3RhbF9tYXRjaGVkX2xpbmVzGAMgASgFEhgKEGNsaWVudF90cnVuY2F0ZWQYBCABKAgSGQoRcmlwZ3JlcF90cnVuY2F0ZWQYBSABKAgSHwoSaGVhZF9saW1pdF9hcHBsaWVkGAYgASgFSACIAQESGwoOb2Zmc2V0X2FwcGxpZWQYByABKAVIAYgBAUIVChNfaGVhZF9saW1pdF9hcHBsaWVkQhEKD19vZmZzZXRfYXBwbGllZCJKCg1HcmVwRmlsZU1hdGNoEgwKBGZpbGUYASABKAkSKwoHbWF0Y2hlcxgCIAMoCzIaLmFnZW50LnYxLkdyZXBDb250ZW50TWF0Y2gibAoQR3JlcENvbnRlbnRNYXRjaBITCgtsaW5lX251bWJlchgBIAEoBRIPCgdjb250ZW50GAIgASgJEhkKEWNvbnRlbnRfdHJ1bmNhdGVkGAMgASgIEhcKD2lzX2NvbnRleHRfbGluZRgEIAEoCCIdCgpHcmVwU3RyZWFtEg8KB3BhdHRlcm4YASABKAkiVgoMR3JlcFRvb2xDYWxsEiAKBGFyZ3MYASABKAsyEi5hZ2VudC52MS5HcmVwQXJncxIkCgZyZXN1bHQYAiABKAsyFC5hZ2VudC52MS5HcmVwUmVzdWx0Ih4KC0dldEJsb2JBcmdzEg8KB2Jsb2JfaWQYASABKAwiNQoNR2V0QmxvYlJlc3VsdBIWCglibG9iX2RhdGEYASABKAxIAIgBAUIMCgpfYmxvYl9kYXRhIjEKC1NldEJsb2JBcmdzEg8KB2Jsb2JfaWQYASABKAwSEQoJYmxvYl9kYXRhGAIgASgMIj4KDVNldEJsb2JSZXN1bHQSIwoFZXJyb3IYASABKAsyDy5hZ2VudC52MS5FcnJvckgAiAEBQggKBl9lcnJvciLLAQoPS3ZTZXJ2ZXJNZXNzYWdlEgoKAmlkGAEgASgNEjAKDHNwYW5fY29udGV4dBgEIAEoCzIVLmFnZW50LnYxLlNwYW5Db250ZXh0SAGIAQESLgoNZ2V0X2Jsb2JfYXJncxgCIAEoCzIVLmFnZW50LnYxLkdldEJsb2JBcmdzSAASLgoNc2V0X2Jsb2JfYXJncxgDIAEoCzIVLmFnZW50LnYxLlNldEJsb2JBcmdzSABCCQoHbWVzc2FnZUIPCg1fc3Bhbl9jb250ZXh0IpABCg9LdkNsaWVudE1lc3NhZ2USCgoCaWQYASABKA0SMgoPZ2V0X2Jsb2JfcmVzdWx0GAIgASgLMhcuYWdlbnQudjEuR2V0QmxvYlJlc3VsdEgAEjIKD3NldF9ibG9iX3Jlc3VsdBgDIAEoCzIXLmFnZW50LnYxLlNldEJsb2JSZXN1bHRIAEIJCgdtZXNzYWdlIq0BCgZMc0FyZ3MSDAoEcGF0aBgBIAEoCRIOCgZpZ25vcmUYAiADKAkSFAoMdG9vbF9jYWxsX2lkGAMgASgJEjQKDnNhbmRib3hfcG9saWN5GAQgASgLMhcuYWdlbnQudjEuU2FuZGJveFBvbGljeUgAiAEBEhcKCnRpbWVvdXRfbXMYBSABKA1IAYgBAUIRCg9fc2FuZGJveF9wb2xpY3lCDQoLX3RpbWVvdXRfbXMisgEKCExzUmVzdWx0EiYKB3N1Y2Nlc3MYASABKAsyEy5hZ2VudC52MS5Mc1N1Y2Nlc3NIABIiCgVlcnJvchgCIAEoCzIRLmFnZW50LnYxLkxzRXJyb3JIABIoCghyZWplY3RlZBgDIAEoCzIULmFnZW50LnYxLkxzUmVqZWN0ZWRIABImCgd0aW1lb3V0GAQgASgLMhMuYWdlbnQudjEuTHNUaW1lb3V0SABCCAoGcmVzdWx0IkcKCUxzU3VjY2VzcxI6ChNkaXJlY3RvcnlfdHJlZV9yb290GAEgASgLMh0uYWdlbnQudjEuTHNEaXJlY3RvcnlUcmVlTm9kZSL2AgoTTHNEaXJlY3RvcnlUcmVlTm9kZRIQCghhYnNfcGF0aBgBIAEoCRI0Cg1jaGlsZHJlbl9kaXJzGAIgAygLMh0uYWdlbnQudjEuTHNEaXJlY3RvcnlUcmVlTm9kZRI6Cg5jaGlsZHJlbl9maWxlcxgDIAMoCzIiLmFnZW50LnYxLkxzRGlyZWN0b3J5VHJlZU5vZGVfRmlsZRIfChdjaGlsZHJlbl93ZXJlX3Byb2Nlc3NlZBgEIAEoCBJkCh1mdWxsX3N1YnRyZWVfZXh0ZW5zaW9uX2NvdW50cxgFIAMoCzI9LmFnZW50LnYxLkxzRGlyZWN0b3J5VHJlZU5vZGUuRnVsbFN1YnRyZWVFeHRlbnNpb25Db3VudHNFbnRyeRIRCgludW1fZmlsZXMYBiABKAUaQQofRnVsbFN1YnRyZWVFeHRlbnNpb25Db3VudHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAU6AjgBInoKGExzRGlyZWN0b3J5VHJlZU5vZGVfRmlsZRIMCgRuYW1lGAEgASgJEjoKEXRlcm1pbmFsX21ldGFkYXRhGAIgASgLMhouYWdlbnQudjEuVGVybWluYWxNZXRhZGF0YUgAiAEBQhQKEl90ZXJtaW5hbF9tZXRhZGF0YSImCgdMc0Vycm9yEgwKBHBhdGgYASABKAkSDQoFZXJyb3IYAiABKAkiKgoKTHNSZWplY3RlZBIMCgRwYXRoGAEgASgJEg4KBnJlYXNvbhgCIAEoCSJHCglMc1RpbWVvdXQSOgoTZGlyZWN0b3J5X3RyZWVfcm9vdBgBIAEoCzIdLmFnZW50LnYxLkxzRGlyZWN0b3J5VHJlZU5vZGUi8QEKEFRlcm1pbmFsTWV0YWRhdGESEAoDY3dkGAEgASgJSACIAQESOQoNbGFzdF9jb21tYW5kcxgCIAMoCzIiLmFnZW50LnYxLlRlcm1pbmFsTWV0YWRhdGFfQ29tbWFuZBIdChBsYXN0X21vZGlmaWVkX21zGAMgASgDSAGIAQESQAoPY3VycmVudF9jb21tYW5kGAQgASgLMiIuYWdlbnQudjEuVGVybWluYWxNZXRhZGF0YV9Db21tYW5kSAKIAQFCBgoEX2N3ZEITChFfbGFzdF9tb2RpZmllZF9tc0ISChBfY3VycmVudF9jb21tYW5kIqcBChhUZXJtaW5hbE1ldGFkYXRhX0NvbW1hbmQSDwoHY29tbWFuZBgBIAEoCRIWCglleGl0X2NvZGUYAiABKAVIAIgBARIZCgx0aW1lc3RhbXBfbXMYAyABKANIAYgBARIYCgtkdXJhdGlvbl9tcxgEIAEoA0gCiAEBQgwKCl9leGl0X2NvZGVCDwoNX3RpbWVzdGFtcF9tc0IOCgxfZHVyYXRpb25fbXMiUAoKTHNUb29sQ2FsbBIeCgRhcmdzGAEgASgLMhAuYWdlbnQudjEuTHNBcmdzEiIKBnJlc3VsdBgCIAEoCzISLmFnZW50LnYxLkxzUmVzdWx0IuACCgdNY3BBcmdzEgwKBG5hbWUYASABKAkSKQoEYXJncxgCIAMoCzIbLmFnZW50LnYxLk1jcEFyZ3MuQXJnc0VudHJ5EhQKDHRvb2xfY2FsbF9pZBgDIAEoCRIbChNwcm92aWRlcl9pZGVudGlmaWVyGAQgASgJEhEKCXRvb2xfbmFtZRgFIAEoCRI9ChNzbWFydF9tb2RlX2FwcHJvdmFsGAYgASgLMhsuYWdlbnQudjEuU21hcnRNb2RlQXBwcm92YWxIAIgBARIgChhzbWFydF9tb2RlX2FwcHJvdmFsX29ubHkYByABKAgSFQoNc2tpcF9hcHByb3ZhbBgIIAEoCBIZChFzZXJ2ZXJfaWRlbnRpZmllchgJIAEoCRorCglBcmdzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgMOgI4AUIWChRfc21hcnRfbW9kZV9hcHByb3ZhbCLjAgoJTWNwUmVzdWx0EicKB3N1Y2Nlc3MYASABKAsyFC5hZ2VudC52MS5NY3BTdWNjZXNzSAASIwoFZXJyb3IYAiABKAsyEi5hZ2VudC52MS5NY3BFcnJvckgAEikKCHJlamVjdGVkGAMgASgLMhUuYWdlbnQudjEuTWNwUmVqZWN0ZWRIABI6ChFwZXJtaXNzaW9uX2RlbmllZBgEIAEoCzIdLmFnZW50LnYxLk1jcFBlcm1pc3Npb25EZW5pZWRIABIzCg50b29sX25vdF9mb3VuZBgFIAEoCzIZLmFnZW50LnYxLk1jcFRvb2xOb3RGb3VuZEgAEjcKEHNlcnZlcl9ub3RfZm91bmQYBiABKAsyGy5hZ2VudC52MS5NY3BTZXJ2ZXJOb3RGb3VuZEgAEikKCGFwcHJvdmVkGAcgASgLMhUuYWdlbnQudjEuTWNwQXBwcm92ZWRIAEIICgZyZXN1bHQiOAoPTWNwVG9vbE5vdEZvdW5kEgwKBG5hbWUYASABKAkSFwoPYXZhaWxhYmxlX3Rvb2xzGAIgAygJImoKDk1jcFRleHRDb250ZW50EgwKBHRleHQYASABKAkSNgoPb3V0cHV0X2xvY2F0aW9uGAIgASgLMhguYWdlbnQudjEuT3V0cHV0TG9jYXRpb25IAIgBAUISChBfb3V0cHV0X2xvY2F0aW9uIjIKD01jcEltYWdlQ29udGVudBIMCgRkYXRhGAEgASgMEhEKCW1pbWVfdHlwZRgCIAEoCSJ7ChhNY3BUb29sUmVzdWx0Q29udGVudEl0ZW0SKAoEdGV4dBgBIAEoCzIYLmFnZW50LnYxLk1jcFRleHRDb250ZW50SAASKgoFaW1hZ2UYAiABKAsyGS5hZ2VudC52MS5NY3BJbWFnZUNvbnRlbnRIAEIJCgdjb250ZW50IlMKCk1jcFN1Y2Nlc3MSMwoHY29udGVudBgBIAMoCzIiLmFnZW50LnYxLk1jcFRvb2xSZXN1bHRDb250ZW50SXRlbRIQCghpc19lcnJvchgCIAEoCCIZCghNY3BFcnJvchINCgVlcnJvchgBIAEoCSIyCgtNY3BSZWplY3RlZBIOCgZyZWFzb24YASABKAkSEwoLaXNfcmVhZG9ubHkYAiABKAgiOQoTTWNwUGVybWlzc2lvbkRlbmllZBINCgVlcnJvchgBIAEoCRITCgtpc19yZWFkb25seRgCIAEoCCI6ChhMaXN0TWNwUmVzb3VyY2VzRXhlY0FyZ3MSEwoGc2VydmVyGAEgASgJSACIAQFCCQoHX3NlcnZlciLGAQoaTGlzdE1jcFJlc291cmNlc0V4ZWNSZXN1bHQSNAoHc3VjY2VzcxgBIAEoCzIhLmFnZW50LnYxLkxpc3RNY3BSZXNvdXJjZXNTdWNjZXNzSAASMAoFZXJyb3IYAiABKAsyHy5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzRXJyb3JIABI2CghyZWplY3RlZBgDIAEoCzIiLmFnZW50LnYxLkxpc3RNY3BSZXNvdXJjZXNSZWplY3RlZEgAQggKBnJlc3VsdCK9AgomTGlzdE1jcFJlc291cmNlc0V4ZWNSZXN1bHRfTWNwUmVzb3VyY2USCwoDdXJpGAEgASgJEhEKBG5hbWUYAiABKAlIAIgBARIYCgtkZXNjcmlwdGlvbhgDIAEoCUgBiAEBEhYKCW1pbWVfdHlwZRgEIAEoCUgCiAEBEg4KBnNlcnZlchgFIAEoCRJWCgthbm5vdGF0aW9ucxgGIAMoCzJBLmFnZW50LnYxLkxpc3RNY3BSZXNvdXJjZXNFeGVjUmVzdWx0X01jcFJlc291cmNlLkFubm90YXRpb25zRW50cnkaMgoQQW5ub3RhdGlvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIMCgpfbWltZV90eXBlIl4KF0xpc3RNY3BSZXNvdXJjZXNTdWNjZXNzEkMKCXJlc291cmNlcxgBIAMoCzIwLmFnZW50LnYxLkxpc3RNY3BSZXNvdXJjZXNFeGVjUmVzdWx0X01jcFJlc291cmNlIiYKFUxpc3RNY3BSZXNvdXJjZXNFcnJvchINCgVlcnJvchgBIAEoCSIqChhMaXN0TWNwUmVzb3VyY2VzUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJItEBChdSZWFkTWNwUmVzb3VyY2VFeGVjQXJncxIOCgZzZXJ2ZXIYASABKAkSCwoDdXJpGAIgASgJEhoKDWRvd25sb2FkX3BhdGgYAyABKAlIAIgBARIUCgx0b29sX2NhbGxfaWQYBCABKAkSPQoTc21hcnRfbW9kZV9hcHByb3ZhbBgFIAEoCzIbLmFnZW50LnYxLlNtYXJ0TW9kZUFwcHJvdmFsSAGIAQFCEAoOX2Rvd25sb2FkX3BhdGhCFgoUX3NtYXJ0X21vZGVfYXBwcm92YWwi+gEKGVJlYWRNY3BSZXNvdXJjZUV4ZWNSZXN1bHQSMwoHc3VjY2VzcxgBIAEoCzIgLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZVN1Y2Nlc3NIABIvCgVlcnJvchgCIAEoCzIeLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZUVycm9ySAASNQoIcmVqZWN0ZWQYAyABKAsyIS5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VSZWplY3RlZEgAEjYKCW5vdF9mb3VuZBgEIAEoCzIhLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZU5vdEZvdW5kSABCCAoGcmVzdWx0IrIDChZSZWFkTWNwUmVzb3VyY2VTdWNjZXNzEgsKA3VyaRgBIAEoCRIRCgRuYW1lGAIgASgJSAGIAQESGAoLZGVzY3JpcHRpb24YAyABKAlIAogBARIWCgltaW1lX3R5cGUYBCABKAlIA4gBARJGCgthbm5vdGF0aW9ucxgHIAMoCzIxLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZVN1Y2Nlc3MuQW5ub3RhdGlvbnNFbnRyeRIaCg1kb3dubG9hZF9wYXRoGAggASgJSASIAQESDgoEdGV4dBgFIAEoCUgAEg4KBGJsb2IYBiABKAxIABI2Cg9vdXRwdXRfbG9jYXRpb24YCSABKAsyGC5hZ2VudC52MS5PdXRwdXRMb2NhdGlvbkgFiAEBGjIKEEFubm90YXRpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIJCgdjb250ZW50QgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbkIMCgpfbWltZV90eXBlQhAKDl9kb3dubG9hZF9wYXRoQhIKEF9vdXRwdXRfbG9jYXRpb24iMgoUUmVhZE1jcFJlc291cmNlRXJyb3ISCwoDdXJpGAEgASgJEg0KBWVycm9yGAIgASgJIjYKF1JlYWRNY3BSZXNvdXJjZVJlamVjdGVkEgsKA3VyaRgBIAEoCRIOCgZyZWFzb24YAiABKAkiJgoXUmVhZE1jcFJlc291cmNlTm90Rm91bmQSCwoDdXJpGAEgASgJIrIBChFNY3BUb29sRGVmaW5pdGlvbhIMCgRuYW1lGAEgASgJEhsKE3Byb3ZpZGVyX2lkZW50aWZpZXIYBCABKAkSEQoJdG9vbF9uYW1lGAUgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhQKDGlucHV0X3NjaGVtYRgDIAEoDBIeChFpbnB1dF9zY2hlbWFfanNvbhgGIAEoCUgAiAEBQhQKEl9pbnB1dF9zY2hlbWFfanNvbiI6CghNY3BUb29scxIuCgltY3BfdG9vbHMYASADKAsyGy5hZ2VudC52MS5NY3BUb29sRGVmaW5pdGlvbiJXCg9NY3BJbnN0cnVjdGlvbnMSEwoLc2VydmVyX25hbWUYASABKAkSFAoMaW5zdHJ1Y3Rpb25zGAIgASgJEhkKEXNlcnZlcl9pZGVudGlmaWVyGAMgASgJIv0CCg1NY3BEZXNjcmlwdG9yEhMKC3NlcnZlcl9uYW1lGAEgASgJEhkKEXNlcnZlcl9pZGVudGlmaWVyGAIgASgJEhgKC2ZvbGRlcl9wYXRoGAMgASgJSACIAQESJAoXc2VydmVyX3VzZV9pbnN0cnVjdGlvbnMYBCABKAlIAYgBARIqCgV0b29scxgFIAMoCzIbLmFnZW50LnYxLk1jcFRvb2xEZXNjcmlwdG9yEhMKBnBsdWdpbhgHIAEoCUgCiAEBEhgKC21hcmtldHBsYWNlGAggASgJSAOIAQESGQoMcGx1Z2luX2RiX2lkGAkgASgJSASIAQESGwoObWFya2V0cGxhY2VfaWQYCiABKAlIBYgBAUIOCgxfZm9sZGVyX3BhdGhCGgoYX3NlcnZlcl91c2VfaW5zdHJ1Y3Rpb25zQgkKB19wbHVnaW5CDgoMX21hcmtldHBsYWNlQg8KDV9wbHVnaW5fZGJfaWRCEQoPX21hcmtldHBsYWNlX2lkIrgBChFNY3BUb29sRGVzY3JpcHRvchIRCgl0b29sX25hbWUYASABKAkSHAoPZGVmaW5pdGlvbl9wYXRoGAIgASgJSACIAQESGAoLZGVzY3JpcHRpb24YAyABKAlIAYgBARIeChFpbnB1dF9zY2hlbWFfanNvbhgFIAEoCUgCiAEBQhIKEF9kZWZpbml0aW9uX3BhdGhCDgoMX2Rlc2NyaXB0aW9uQhQKEl9pbnB1dF9zY2hlbWFfanNvbiJ4ChRNY3BGaWxlU3lzdGVtT3B0aW9ucxIPCgdlbmFibGVkGAEgASgIEh0KFXdvcmtzcGFjZV9wcm9qZWN0X2RpchgCIAEoCRIwCg9tY3BfZGVzY3JpcHRvcnMYAyADKAsyFy5hZ2VudC52MS5NY3BEZXNjcmlwdG9yIpoBCghSZWFkQXJncxIMCgRwYXRoGAEgASgJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCRITCgZvZmZzZXQYBCABKAVIAIgBARISCgVsaW1pdBgFIAEoDUgBiAEBEhoKDWVuY29kaW5nX2hpbnQYBiABKAlIAogBAUIJCgdfb2Zmc2V0QggKBl9saW1pdEIQCg5fZW5jb2RpbmdfaGludCK4AgoKUmVhZFJlc3VsdBIoCgdzdWNjZXNzGAEgASgLMhUuYWdlbnQudjEuUmVhZFN1Y2Nlc3NIABIkCgVlcnJvchgCIAEoCzITLmFnZW50LnYxLlJlYWRFcnJvckgAEioKCHJlamVjdGVkGAMgASgLMhYuYWdlbnQudjEuUmVhZFJlamVjdGVkSAASNAoOZmlsZV9ub3RfZm91bmQYBCABKAsyGi5hZ2VudC52MS5SZWFkRmlsZU5vdEZvdW5kSAASOwoRcGVybWlzc2lvbl9kZW5pZWQYBSABKAsyHi5hZ2VudC52MS5SZWFkUGVybWlzc2lvbkRlbmllZEgAEjEKDGludmFsaWRfZmlsZRgGIAEoCzIZLmFnZW50LnYxLlJlYWRJbnZhbGlkRmlsZUgAQggKBnJlc3VsdCLKAQoLUmVhZFN1Y2Nlc3MSDAoEcGF0aBgBIAEoCRITCgt0b3RhbF9saW5lcxgDIAEoBRIRCglmaWxlX3NpemUYBCABKAMSEQoJdHJ1bmNhdGVkGAYgASgIEhsKDm91dHB1dF9ibG9iX2lkGAcgASgMSAGIAQESEQoHY29udGVudBgCIAEoCUgAEg4KBGRhdGEYBSABKAxIABIVCg1yYW5nZV9hcHBsaWVkGAggASgIQggKBm91dHB1dEIRCg9fb3V0cHV0X2Jsb2JfaWQiKAoJUmVhZEVycm9yEgwKBHBhdGgYASABKAkSDQoFZXJyb3IYAiABKAkiLAoMUmVhZFJlamVjdGVkEgwKBHBhdGgYASABKAkSDgoGcmVhc29uGAIgASgJIiAKEFJlYWRGaWxlTm90Rm91bmQSDAoEcGF0aBgBIAEoCSIkChRSZWFkUGVybWlzc2lvbkRlbmllZBIMCgRwYXRoGAEgASgJIi8KD1JlYWRJbnZhbGlkRmlsZRIMCgRwYXRoGAEgASgJEg4KBnJlYXNvbhgCIAEoCSJeCgxSZWFkVG9vbENhbGwSJAoEYXJncxgBIAEoCzIWLmFnZW50LnYxLlJlYWRUb29sQXJncxIoCgZyZXN1bHQYAiABKAsyGC5hZ2VudC52MS5SZWFkVG9vbFJlc3VsdCJaCgxSZWFkVG9vbEFyZ3MSDAoEcGF0aBgBIAEoCRITCgZvZmZzZXQYAiABKAVIAIgBARISCgVsaW1pdBgDIAEoBUgBiAEBQgkKB19vZmZzZXRCCAoGX2xpbWl0InIKDlJlYWRUb29sUmVzdWx0EiwKB3N1Y2Nlc3MYASABKAsyGS5hZ2VudC52MS5SZWFkVG9vbFN1Y2Nlc3NIABIoCgVlcnJvchgCIAEoCzIXLmFnZW50LnYxLlJlYWRUb29sRXJyb3JIAEIICgZyZXN1bHQiMQoJUmVhZFJhbmdlEhIKCnN0YXJ0X2xpbmUYASABKA0SEAoIZW5kX2xpbmUYAiABKA0ijgIKD1JlYWRUb29sU3VjY2VzcxIQCghpc19lbXB0eRgCIAEoCBIWCg5leGNlZWRlZF9saW1pdBgDIAEoCBITCgt0b3RhbF9saW5lcxgEIAEoDRIRCglmaWxlX3NpemUYBSABKA0SDAoEcGF0aBgHIAEoCRIsCgpyZWFkX3JhbmdlGAggASgLMhMuYWdlbnQudjEuUmVhZFJhbmdlSAGIAQESEQoHY29udGVudBgBIAEoCUgAEg4KBGRhdGEYBiABKAxIABIWCgxkYXRhX2Jsb2JfaWQYCSABKAxIABIZCg9jb250ZW50X2Jsb2JfaWQYCiABKAxIAEIICgZvdXRwdXRCDQoLX3JlYWRfcmFuZ2UiJgoNUmVhZFRvb2xFcnJvchIVCg1lcnJvcl9tZXNzYWdlGAEgASgJImoKEFJlY29yZFNjcmVlbkFyZ3MSDAoEbW9kZRgBIAEoBRIUCgx0b29sX2NhbGxfaWQYAiABKAkSHQoQc2F2ZV9hc19maWxlbmFtZRgDIAEoCUgAiAEBQhMKEV9zYXZlX2FzX2ZpbGVuYW1lIokCChJSZWNvcmRTY3JlZW5SZXN1bHQSOwoNc3RhcnRfc3VjY2VzcxgBIAEoCzIiLmFnZW50LnYxLlJlY29yZFNjcmVlblN0YXJ0U3VjY2Vzc0gAEjkKDHNhdmVfc3VjY2VzcxgCIAEoCzIhLmFnZW50LnYxLlJlY29yZFNjcmVlblNhdmVTdWNjZXNzSAASPwoPZGlzY2FyZF9zdWNjZXNzGAMgASgLMiQuYWdlbnQudjEuUmVjb3JkU2NyZWVuRGlzY2FyZFN1Y2Nlc3NIABIwCgdmYWlsdXJlGAQgASgLMh0uYWdlbnQudjEuUmVjb3JkU2NyZWVuRmFpbHVyZUgAQggKBnJlc3VsdCJnChhSZWNvcmRTY3JlZW5TdGFydFN1Y2Nlc3MSJQodd2FzX3ByaW9yX3JlY29yZGluZ19jYW5jZWxsZWQYASABKAgSJAocd2FzX3NhdmVfYXNfZmlsZW5hbWVfaWdub3JlZBgCIAEoCCKgAQoXUmVjb3JkU2NyZWVuU2F2ZVN1Y2Nlc3MSDAoEcGF0aBgBIAEoCRIdChVyZWNvcmRpbmdfZHVyYXRpb25fbXMYAiABKAMSMAojcmVxdWVzdGVkX2ZpbGVfcGF0aF9yZWplY3RlZF9yZWFzb24YAyABKAVIAIgBAUImCiRfcmVxdWVzdGVkX2ZpbGVfcGF0aF9yZWplY3RlZF9yZWFzb24iHAoaUmVjb3JkU2NyZWVuRGlzY2FyZFN1Y2Nlc3MiJAoTUmVjb3JkU2NyZWVuRmFpbHVyZRINCgVlcnJvchgBIAEoCSI2ChNDdXJzb3JQYWNrYWdlUHJvbXB0EgwKBG5hbWUYASABKAkSEQoJZmlsZV9wYXRoGAIgASgJIuIBCg1DdXJzb3JQYWNrYWdlEgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSEwoLZm9sZGVyX3BhdGgYAyABKAkSDwoHZW5hYmxlZBgEIAEoCBIYCgtwYXJzZV9lcnJvchgFIAEoCUgAiAEBEi4KB3Byb21wdHMYBiADKAsyHS5hZ2VudC52MS5DdXJzb3JQYWNrYWdlUHJvbXB0EhgKEHJlYWRtZV9maWxlX3BhdGgYByABKAkSFAoMcGFja2FnZV90eXBlGAggASgFQg4KDF9wYXJzZV9lcnJvciKrAgoWUmVwb3NpdG9yeUluZGV4aW5nSW5mbxIfChdyZWxhdGl2ZV93b3Jrc3BhY2VfcGF0aBgBIAEoCRITCgtyZW1vdGVfdXJscxgCIAMoCRIUCgxyZW1vdGVfbmFtZXMYAyADKAkSEQoJcmVwb19uYW1lGAQgASgJEhIKCnJlcG9fb3duZXIYBSABKAkSEgoKaXNfdHJhY2tlZBgGIAEoCBIQCghpc19sb2NhbBgHIAEoCBImChlvcnRob2dvbmFsX3RyYW5zZm9ybV9zZWVkGAggASgBSACIAQESFQoNd29ya3NwYWNlX3VyaRgJIAEoCRIbChNwYXRoX2VuY3J5cHRpb25fa2V5GAogASgJQhwKGl9vcnRob2dvbmFsX3RyYW5zZm9ybV9zZWVkIqwCChJSZXF1ZXN0Q29udGV4dEFyZ3MSHQoQbm90ZXNfc2Vzc2lvbl9pZBgCIAEoCUgAiAEBEhkKDHdvcmtzcGFjZV9pZBgDIAEoCUgBiAEBEiYKGXJlYWRfb25seV9waW5uZWRfdHJlZV9zaGEYBCABKAlIAogBARIoChtyZWFkX29ubHlfcGx1Z2luX2NhY2hlX3Jvb3QYBSABKAlIA4gBARIXCgp1c2VfY2FjaGVkGAcgASgISASIAQFCEwoRX25vdGVzX3Nlc3Npb25faWRCDwoNX3dvcmtzcGFjZV9pZEIcChpfcmVhZF9vbmx5X3Bpbm5lZF90cmVlX3NoYUIeChxfcmVhZF9vbmx5X3BsdWdpbl9jYWNoZV9yb290Qg0KC191c2VfY2FjaGVkIroBChRSZXF1ZXN0Q29udGV4dFJlc3VsdBIyCgdzdWNjZXNzGAEgASgLMh8uYWdlbnQudjEuUmVxdWVzdENvbnRleHRTdWNjZXNzSAASLgoFZXJyb3IYAiABKAsyHS5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dEVycm9ySAASNAoIcmVqZWN0ZWQYAyABKAsyIC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dFJlamVjdGVkSABCCAoGcmVzdWx0IooBChVSZXF1ZXN0Q29udGV4dFN1Y2Nlc3MSMQoPcmVxdWVzdF9jb250ZXh0GAEgASgLMhguYWdlbnQudjEuUmVxdWVzdENvbnRleHQSIwoWc2VydmVkX2Zyb21fZGlza19jYWNoZRgCIAEoCEgAiAEBQhkKF19zZXJ2ZWRfZnJvbV9kaXNrX2NhY2hlIiQKE1JlcXVlc3RDb250ZXh0RXJyb3ISDQoFZXJyb3IYASABKAkiKAoWUmVxdWVzdENvbnRleHRSZWplY3RlZBIOCgZyZWFzb24YASABKAkiwgEKCkltYWdlUHJvdG8SDAoEZGF0YRgBIAEoDBIMCgR1dWlkGAIgASgJEgwKBHBhdGgYAyABKAkSMQoJZGltZW5zaW9uGAQgASgLMh4uYWdlbnQudjEuSW1hZ2VQcm90b19EaW1lbnNpb24SJgoZdGFza19zcGVjaWZpY19kZXNjcmlwdGlvbhgGIAEoCUgAiAEBEhEKCW1pbWVfdHlwZRgHIAEoCUIcChpfdGFza19zcGVjaWZpY19kZXNjcmlwdGlvbiI1ChRJbWFnZVByb3RvX0RpbWVuc2lvbhINCgV3aWR0aBgBIAEoBRIOCgZoZWlnaHQYAiABKAUiaAoLR2l0UmVwb0luZm8SDAoEcGF0aBgBIAEoCRIOCgZzdGF0dXMYAiABKAkSEwoLYnJhbmNoX25hbWUYAyABKAkSFwoKcmVtb3RlX3VybBgEIAEoCUgAiAEBQg0KC19yZW1vdGVfdXJsIpsCChFSZXF1ZXN0Q29udGV4dEVudhISCgpvc192ZXJzaW9uGAEgASgJEhcKD3dvcmtzcGFjZV9wYXRocxgCIAMoCRINCgVzaGVsbBgDIAEoCRIXCg9zYW5kYm94X2VuYWJsZWQYBSABKAgSGAoQdGVybWluYWxzX2ZvbGRlchgHIAEoCRIhChlhZ2VudF9zaGFyZWRfbm90ZXNfZm9sZGVyGAggASgJEicKH2FnZW50X2NvbnZlcnNhdGlvbl9ub3Rlc19mb2xkZXIYCSABKAkSEQoJdGltZV96b25lGAogASgJEhYKDnByb2plY3RfZm9sZGVyGAsgASgJEiAKGGFnZW50X3RyYW5zY3JpcHRzX2ZvbGRlchgMIAEoCSI8Cg9EZWJ1Z01vZGVDb25maWcSEAoIbG9nX3BhdGgYASABKAkSFwoPc2VydmVyX2VuZHBvaW50GAIgASgJIrQBCg9Ta2lsbERlc2NyaXB0b3ISDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRITCgtmb2xkZXJfcGF0aBgDIAEoCRIPCgdlbmFibGVkGAQgASgIEhgKC3BhcnNlX2Vycm9yGAUgASgJSACIAQESGAoQcmVhZG1lX2ZpbGVfcGF0aBgGIAEoCRIUCgxwYWNrYWdlX3R5cGUYByABKAVCDgoMX3BhcnNlX2Vycm9yIkQKDFNraWxsT3B0aW9ucxI0ChFza2lsbF9kZXNjcmlwdG9ycxgBIAMoCzIZLmFnZW50LnYxLlNraWxsRGVzY3JpcHRvciL2CAoOUmVxdWVzdENvbnRleHQSIwoFcnVsZXMYAiADKAsyFC5hZ2VudC52MS5DdXJzb3JSdWxlEigKA2VudhgEIAEoCzIbLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0RW52EjkKD3JlcG9zaXRvcnlfaW5mbxgGIAMoCzIgLmFnZW50LnYxLlJlcG9zaXRvcnlJbmRleGluZ0luZm8SKgoFdG9vbHMYByADKAsyGy5hZ2VudC52MS5NY3BUb29sRGVmaW5pdGlvbhInChpjb252ZXJzYXRpb25fbm90ZXNfbGlzdGluZxgIIAEoCUgAiAEBEiEKFHNoYXJlZF9ub3Rlc19saXN0aW5nGAkgASgJSAGIAQESKAoJZ2l0X3JlcG9zGAsgAygLMhUuYWdlbnQudjEuR2l0UmVwb0luZm8SNgoPcHJvamVjdF9sYXlvdXRzGA0gAygLMh0uYWdlbnQudjEuTHNEaXJlY3RvcnlUcmVlTm9kZRIzChBtY3BfaW5zdHJ1Y3Rpb25zGA4gAygLMhkuYWdlbnQudjEuTWNwSW5zdHJ1Y3Rpb25zEjkKEWRlYnVnX21vZGVfY29uZmlnGA8gASgLMhkuYWdlbnQudjEuRGVidWdNb2RlQ29uZmlnSAKIAQESFwoKY2xvdWRfcnVsZRgQIAEoCUgDiAEBEh8KEndlYl9zZWFyY2hfZW5hYmxlZBgRIAEoCEgEiAEBEjIKDXNraWxsX29wdGlvbnMYEiABKAsyFi5hZ2VudC52MS5Ta2lsbE9wdGlvbnNIBYgBARIuCiFyZXBvc2l0b3J5X2luZm9fc2hvdWxkX3F1ZXJ5X3Byb2QYEyABKAhIBogBARJBCg1maWxlX2NvbnRlbnRzGBQgAygLMiouYWdlbnQudjEuUmVxdWVzdENvbnRleHQuRmlsZUNvbnRlbnRzRW50cnkSIAoTdXNlcl9pbnRlbnRfc3VtbWFyeRgVIAEoCUgHiAEBEjIKEGN1c3RvbV9zdWJhZ2VudHMYFiADKAsyGC5hZ2VudC52MS5DdXN0b21TdWJhZ2VudBJEChdtY3BfZmlsZV9zeXN0ZW1fb3B0aW9ucxgXIAEoCzIeLmFnZW50LnYxLk1jcEZpbGVTeXN0ZW1PcHRpb25zSAiIAQEaMwoRRmlsZUNvbnRlbnRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIdChtfY29udmVyc2F0aW9uX25vdGVzX2xpc3RpbmdCFwoVX3NoYXJlZF9ub3Rlc19saXN0aW5nQhQKEl9kZWJ1Z19tb2RlX2NvbmZpZ0INCgtfY2xvdWRfcnVsZUIVChNfd2ViX3NlYXJjaF9lbmFibGVkQhAKDl9za2lsbF9vcHRpb25zQiQKIl9yZXBvc2l0b3J5X2luZm9fc2hvdWxkX3F1ZXJ5X3Byb2RCFgoUX3VzZXJfaW50ZW50X3N1bW1hcnlCGgoYX21jcF9maWxlX3N5c3RlbV9vcHRpb25zIrICCg1TYW5kYm94UG9saWN5EgwKBHR5cGUYASABKAUSGwoObmV0d29ya19hY2Nlc3MYAiABKAhIAIgBARIiChphZGRpdGlvbmFsX3JlYWR3cml0ZV9wYXRocxgDIAMoCRIhChlhZGRpdGlvbmFsX3JlYWRvbmx5X3BhdGhzGAQgAygJEh0KEGRlYnVnX291dHB1dF9kaXIYBSABKAlIAYgBARIdChBibG9ja19naXRfd3JpdGVzGAYgASgISAKIAQESHgoRZGlzYWJsZV90bXBfd3JpdGUYByABKAhIA4gBAUIRCg9fbmV0d29ya19hY2Nlc3NCEwoRX2RlYnVnX291dHB1dF9kaXJCEwoRX2Jsb2NrX2dpdF93cml0ZXNCFAoSX2Rpc2FibGVfdG1wX3dyaXRlIu8BCg1TZWxlY3RlZEltYWdlEgwKBHV1aWQYAiABKAkSDAoEcGF0aBgDIAEoCRI0CglkaW1lbnNpb24YBCABKAsyIS5hZ2VudC52MS5TZWxlY3RlZEltYWdlX0RpbWVuc2lvbhIRCgltaW1lX3R5cGUYByABKAkSEQoHYmxvYl9pZBgBIAEoDEgAEg4KBGRhdGEYCCABKAxIABJDChFibG9iX2lkX3dpdGhfZGF0YRgJIAEoCzImLmFnZW50LnYxLlNlbGVjdGVkSW1hZ2VfQmxvYklkV2l0aERhdGFIAEIRCg9kYXRhX29yX2Jsb2JfaWQiPQocU2VsZWN0ZWRJbWFnZV9CbG9iSWRXaXRoRGF0YRIPCgdibG9iX2lkGAEgASgMEgwKBGRhdGEYAiABKAwiOAoXU2VsZWN0ZWRJbWFnZV9EaW1lbnNpb24SDQoFd2lkdGgYASABKAUSDgoGaGVpZ2h0GAIgASgFIkkKEUV4dHJhQ29udGV4dEVudHJ5Eg4KBGRhdGEYASABKAlIABIRCgdibG9iX2lkGAIgASgMSABCEQoPZGF0YV9vcl9ibG9iX2lkIlsKDFNlbGVjdGVkRmlsZRIPCgdjb250ZW50GAEgASgJEgwKBHBhdGgYAiABKAkSGgoNcmVsYXRpdmVfcGF0aBgDIAEoCUgAiAEBQhAKDl9yZWxhdGl2ZV9wYXRoIoQBChVTZWxlY3RlZENvZGVTZWxlY3Rpb24SDwoHY29udGVudBgBIAEoCRIMCgRwYXRoGAIgASgJEhoKDXJlbGF0aXZlX3BhdGgYAyABKAlIAIgBARIeCgVyYW5nZRgEIAEoCzIPLmFnZW50LnYxLlJhbmdlQhAKDl9yZWxhdGl2ZV9wYXRoIl0KEFNlbGVjdGVkVGVybWluYWwSDwoHY29udGVudBgBIAEoCRISCgV0aXRsZRgCIAEoCUgAiAEBEhEKBHBhdGgYAyABKAlIAYgBAUIICgZfdGl0bGVCBwoFX3BhdGgihgEKGVNlbGVjdGVkVGVybWluYWxTZWxlY3Rpb24SDwoHY29udGVudBgBIAEoCRISCgV0aXRsZRgCIAEoCUgAiAEBEhEKBHBhdGgYAyABKAlIAYgBARIeCgVyYW5nZRgEIAEoCzIPLmFnZW50LnYxLlJhbmdlQggKBl90aXRsZUIHCgVfcGF0aCKDAQoOU2VsZWN0ZWRGb2xkZXISDAoEcGF0aBgBIAEoCRIaCg1yZWxhdGl2ZV9wYXRoGAIgASgJSACIAQESNQoOZGlyZWN0b3J5X3RyZWUYAyABKAsyHS5hZ2VudC52MS5Mc0RpcmVjdG9yeVRyZWVOb2RlQhAKDl9yZWxhdGl2ZV9wYXRoIp8BChRTZWxlY3RlZEV4dGVybmFsTGluaxILCgN1cmwYASABKAkSDAoEdXVpZBgCIAEoCRIYCgtwZGZfY29udGVudBgDIAEoCUgAiAEBEhMKBmlzX3BkZhgEIAEoCEgBiAEBEhUKCGZpbGVuYW1lGAUgASgJSAKIAQFCDgoMX3BkZl9jb250ZW50QgkKB19pc19wZGZCCwoJX2ZpbGVuYW1lIjgKElNlbGVjdGVkQ3Vyc29yUnVsZRIiCgRydWxlGAEgASgLMhQuYWdlbnQudjEuQ3Vyc29yUnVsZSIiCg9TZWxlY3RlZEdpdERpZmYSDwoHY29udGVudBgBIAEoCSIyCh9TZWxlY3RlZEdpdERpZmZGcm9tQnJhbmNoVG9NYWluEg8KB2NvbnRlbnQYASABKAkiaQoRU2VsZWN0ZWRHaXRDb21taXQSCwoDc2hhGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARIMCgRkaWZmGAQgASgJQg4KDF9kZXNjcmlwdGlvbiLdAQoTU2VsZWN0ZWRQdWxsUmVxdWVzdBIOCgZudW1iZXIYASABKAUSCwoDdXJsGAIgASgJEhIKBXRpdGxlGAMgASgJSACIAQESEwoLZm9sZGVyX3BhdGgYBCABKAkSGQoMc3VtbWFyeV9qc29uGAUgASgJSAGIAQESGAoLZGVzY3JpcHRpb24YBiABKAlIAogBARIUCgdibG9iX2lkGAcgASgMSAOIAQFCCAoGX3RpdGxlQg8KDV9zdW1tYXJ5X2pzb25CDgoMX2Rlc2NyaXB0aW9uQgoKCF9ibG9iX2lkIrMBChpTZWxlY3RlZEdpdFBSRGlmZlNlbGVjdGlvbhIOCgZwcl91cmwYASABKAkSEQoJZmlsZV9wYXRoGAIgASgJEhIKCnN0YXJ0X2xpbmUYAyABKAUSEAoIZW5kX2xpbmUYBCABKAUSGQoMZGlmZl9jb250ZW50GAUgASgJSACIAQESFAoHYmxvYl9pZBgGIAEoDEgBiAEBQg8KDV9kaWZmX2NvbnRlbnRCCgoIX2Jsb2JfaWQiNgoVU2VsZWN0ZWRDdXJzb3JDb21tYW5kEgwKBG5hbWUYASABKAkSDwoHY29udGVudBgCIAEoCSI1ChVTZWxlY3RlZERvY3VtZW50YXRpb24SDgoGZG9jX2lkGAEgASgJEgwKBG5hbWUYAiABKAkiMgoQU2VsZWN0ZWRQYXN0Q2hhdBIQCghhZ2VudF9pZBgBIAEoCRIMCgRuYW1lGAIgASgJIqsBCglDYWxsRnJhbWUSGgoNZnVuY3Rpb25fbmFtZRgBIAEoCUgAiAEBEhAKA3VybBgCIAEoCUgBiAEBEhgKC2xpbmVfbnVtYmVyGAMgASgFSAKIAQESGgoNY29sdW1uX251bWJlchgEIAEoBUgDiAEBQhAKDl9mdW5jdGlvbl9uYW1lQgYKBF91cmxCDgoMX2xpbmVfbnVtYmVyQhAKDl9jb2x1bW5fbnVtYmVyImgKClN0YWNrVHJhY2USKAoLY2FsbF9mcmFtZXMYASADKAsyEy5hZ2VudC52MS5DYWxsRnJhbWUSHAoPcmF3X3N0YWNrX3RyYWNlGAIgASgJSACIAQFCEgoQX3Jhd19zdGFja190cmFjZSLkAQoSU2VsZWN0ZWRDb25zb2xlTG9nEg8KB21lc3NhZ2UYASABKAkSEQoJdGltZXN0YW1wGAIgASgBEg0KBWxldmVsGAMgASgJEhMKC2NsaWVudF9uYW1lGAQgASgJEhIKCnNlc3Npb25faWQYBSABKAkSLgoLc3RhY2tfdHJhY2UYBiABKAsyFC5hZ2VudC52MS5TdGFja1RyYWNlSACIAQESHQoQb2JqZWN0X2RhdGFfanNvbhgHIAEoCUgBiAEBQg4KDF9zdGFja190cmFjZUITChFfb2JqZWN0X2RhdGFfanNvbiK6AQoRU2VsZWN0ZWRVSUVsZW1lbnQSDwoHZWxlbWVudBgBIAEoCRINCgV4cGF0aBgCIAEoCRIUCgx0ZXh0X2NvbnRlbnQYAyABKAkSDQoFZXh0cmEYBCABKAkSFgoJY29tcG9uZW50GAUgASgJSACIAQESIQoUY29tcG9uZW50X3Byb3BzX2pzb24YBiABKAlIAYgBAUIMCgpfY29tcG9uZW50QhcKFV9jb21wb25lbnRfcHJvcHNfanNvbiIgChBTZWxlY3RlZFN1YmFnZW50EgwKBG5hbWUYASABKAkiggoKD1NlbGVjdGVkQ29udGV4dBIwCg9zZWxlY3RlZF9pbWFnZXMYASADKAsyFy5hZ2VudC52MS5TZWxlY3RlZEltYWdlEjwKEmludm9jYXRpb25fY29udGV4dBgCIAEoCzIbLmFnZW50LnYxLkludm9jYXRpb25Db250ZXh0SACIAQESFQoNZXh0cmFfY29udGV4dBgDIAMoCRI6ChVleHRyYV9jb250ZXh0X2VudHJpZXMYECADKAsyGy5hZ2VudC52MS5FeHRyYUNvbnRleHRFbnRyeRIlCgVmaWxlcxgEIAMoCzIWLmFnZW50LnYxLlNlbGVjdGVkRmlsZRI4Cg9jb2RlX3NlbGVjdGlvbnMYBSADKAsyHy5hZ2VudC52MS5TZWxlY3RlZENvZGVTZWxlY3Rpb24SLQoJdGVybWluYWxzGAYgAygLMhouYWdlbnQudjEuU2VsZWN0ZWRUZXJtaW5hbBJAChN0ZXJtaW5hbF9zZWxlY3Rpb25zGAcgAygLMiMuYWdlbnQudjEuU2VsZWN0ZWRUZXJtaW5hbFNlbGVjdGlvbhIpCgdmb2xkZXJzGAggAygLMhguYWdlbnQudjEuU2VsZWN0ZWRGb2xkZXISNgoOZXh0ZXJuYWxfbGlua3MYCSADKAsyHi5hZ2VudC52MS5TZWxlY3RlZEV4dGVybmFsTGluaxIyCgxjdXJzb3JfcnVsZXMYCiADKAsyHC5hZ2VudC52MS5TZWxlY3RlZEN1cnNvclJ1bGUSMAoIZ2l0X2RpZmYYEiABKAsyGS5hZ2VudC52MS5TZWxlY3RlZEdpdERpZmZIAYgBARJUChxnaXRfZGlmZl9mcm9tX2JyYW5jaF90b19tYWluGAsgASgLMikuYWdlbnQudjEuU2VsZWN0ZWRHaXREaWZmRnJvbUJyYW5jaFRvTWFpbkgCiAEBEjgKD2N1cnNvcl9jb21tYW5kcxgMIAMoCzIfLmFnZW50LnYxLlNlbGVjdGVkQ3Vyc29yQ29tbWFuZBI3Cg5kb2N1bWVudGF0aW9ucxgNIAMoCzIfLmFnZW50LnYxLlNlbGVjdGVkRG9jdW1lbnRhdGlvbhIwCgt1aV9lbGVtZW50cxgOIAMoCzIbLmFnZW50LnYxLlNlbGVjdGVkVUlFbGVtZW50EjIKDGNvbnNvbGVfbG9ncxgPIAMoCzIcLmFnZW50LnYxLlNlbGVjdGVkQ29uc29sZUxvZxIwCgtnaXRfY29tbWl0cxgRIAMoCzIbLmFnZW50LnYxLlNlbGVjdGVkR2l0Q29tbWl0Ei4KCnBhc3RfY2hhdHMYEyADKAsyGi5hZ2VudC52MS5TZWxlY3RlZFBhc3RDaGF0EkQKFmdpdF9wcl9kaWZmX3NlbGVjdGlvbnMYFCADKAsyJC5hZ2VudC52MS5TZWxlY3RlZEdpdFBSRGlmZlNlbGVjdGlvbhI9ChZzZWxlY3RlZF9wdWxsX3JlcXVlc3RzGBUgAygLMh0uYWdlbnQudjEuU2VsZWN0ZWRQdWxsUmVxdWVzdBI2ChJzZWxlY3RlZF9zdWJhZ2VudHMYFiADKAsyGi5hZ2VudC52MS5TZWxlY3RlZFN1YmFnZW50QhUKE19pbnZvY2F0aW9uX2NvbnRleHRCCwoJX2dpdF9kaWZmQh8KHV9naXRfZGlmZl9mcm9tX2JyYW5jaF90b19tYWluIuUBChFJbnZvY2F0aW9uQ29udGV4dBI/CgxzbGFja190aHJlYWQYASABKAsyJy5hZ2VudC52MS5JbnZvY2F0aW9uQ29udGV4dF9TbGFja1RocmVhZEgAEjkKCWdpdGh1Yl9wchgCIAEoCzIkLmFnZW50LnYxLkludm9jYXRpb25Db250ZXh0X0dpdGh1YlBSSAASOQoJaWRlX3N0YXRlGAMgASgLMiQuYWdlbnQudjEuSW52b2NhdGlvbkNvbnRleHRfSWRlU3RhdGVIABIRCgdibG9iX2lkGAogASgMSABCBgoEZGF0YSK7AQodSW52b2NhdGlvbkNvbnRleHRfU2xhY2tUaHJlYWQSDgoGdGhyZWFkGAEgASgJEhkKDGNoYW5uZWxfbmFtZRgCIAEoCUgAiAEBEhwKD2NoYW5uZWxfcHVycG9zZRgDIAEoCUgBiAEBEhoKDWNoYW5uZWxfdG9waWMYBCABKAlIAogBAUIPCg1fY2hhbm5lbF9uYW1lQhIKEF9jaGFubmVsX3B1cnBvc2VCEAoOX2NoYW5uZWxfdG9waWMifAoaSW52b2NhdGlvbkNvbnRleHRfR2l0aHViUFISDQoFdGl0bGUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSEAoIY29tbWVudHMYAyABKAkSGAoLY2lfZmFpbHVyZXMYBCABKAlIAIgBAUIOCgxfY2lfZmFpbHVyZXMi/gEKGkludm9jYXRpb25Db250ZXh0X0lkZVN0YXRlEkAKDXZpc2libGVfZmlsZXMYASADKAsyKS5hZ2VudC52MS5JbnZvY2F0aW9uQ29udGV4dF9JZGVTdGF0ZV9GaWxlEkgKFXJlY2VudGx5X3ZpZXdlZF9maWxlcxgCIAMoCzIpLmFnZW50LnYxLkludm9jYXRpb25Db250ZXh0X0lkZVN0YXRlX0ZpbGUSVAoUY3VycmVudGx5X3ZpZXdlZF9wcnMYAyADKAsyNi5hZ2VudC52MS5JbnZvY2F0aW9uQ29udGV4dF9JZGVTdGF0ZV9WaWV3ZWRQdWxsUmVxdWVzdCKOAgofSW52b2NhdGlvbkNvbnRleHRfSWRlU3RhdGVfRmlsZRIMCgRwYXRoGAEgASgJEhoKDXJlbGF0aXZlX3BhdGgYAiABKAlIAIgBARJWCg9jdXJzb3JfcG9zaXRpb24YAyABKAsyOC5hZ2VudC52MS5JbnZvY2F0aW9uQ29udGV4dF9JZGVTdGF0ZV9GaWxlX0N1cnNvclBvc2l0aW9uSAGIAQESEwoLdG90YWxfbGluZXMYBCABKAUSGwoOYWN0aXZlX2NvbW1hbmQYBSABKAlIAogBAUIQCg5fcmVsYXRpdmVfcGF0aEISChBfY3Vyc29yX3Bvc2l0aW9uQhEKD19hY3RpdmVfY29tbWFuZCJMCi5JbnZvY2F0aW9uQ29udGV4dF9JZGVTdGF0ZV9GaWxlX0N1cnNvclBvc2l0aW9uEgwKBGxpbmUYASABKAUSDAoEdGV4dBgCIAEoCSLpAQosSW52b2NhdGlvbkNvbnRleHRfSWRlU3RhdGVfVmlld2VkUHVsbFJlcXVlc3QSDgoGbnVtYmVyGAEgASgFEgsKA3VybBgCIAEoCRISCgV0aXRsZRgDIAEoCUgAiAEBEhgKC2ZvbGRlcl9wYXRoGAQgASgJSAGIAQESGQoMc3VtbWFyeV9qc29uGAUgASgJSAKIAQESGAoLZGVzY3JpcHRpb24YBiABKAlIA4gBAUIICgZfdGl0bGVCDgoMX2ZvbGRlcl9wYXRoQg8KDV9zdW1tYXJ5X2pzb25CDgoMX2Rlc2NyaXB0aW9uIkgKFlNldHVwVm1FbnZpcm9ubWVudEFyZ3MSFwoPaW5zdGFsbF9jb21tYW5kGAIgASgJEhUKDXN0YXJ0X2NvbW1hbmQYAyABKAkiXAoYU2V0dXBWbUVudmlyb25tZW50UmVzdWx0EjYKB3N1Y2Nlc3MYASABKAsyIy5hZ2VudC52MS5TZXR1cFZtRW52aXJvbm1lbnRTdWNjZXNzSABCCAoGcmVzdWx0IhsKGVNldHVwVm1FbnZpcm9ubWVudFN1Y2Nlc3MigAEKGlNldHVwVm1FbnZpcm9ubWVudFRvb2xDYWxsEi4KBGFyZ3MYASABKAsyIC5hZ2VudC52MS5TZXR1cFZtRW52aXJvbm1lbnRBcmdzEjIKBnJlc3VsdBgCIAEoCzIiLmFnZW50LnYxLlNldHVwVm1FbnZpcm9ubWVudFJlc3VsdCLJAgoZU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdBIWCg5wYXJzaW5nX2ZhaWxlZBgBIAEoCBJSChNleGVjdXRhYmxlX2NvbW1hbmRzGAIgAygLMjUuYWdlbnQudjEuU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdF9FeGVjdXRhYmxlQ29tbWFuZBIVCg1oYXNfcmVkaXJlY3RzGAMgASgIEiAKGGhhc19jb21tYW5kX3N1YnN0aXR1dGlvbhgEIAEoCBInChphbGxfcmVkaXJlY3RzX2FyZV9kZXZfbnVsbBgFIAEoCEgAiAEBEj8KCXJlZGlyZWN0cxgGIAMoCzIsLmFnZW50LnYxLlNoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHRfUmVkaXJlY3RCHQobX2FsbF9yZWRpcmVjdHNfYXJlX2Rldl9udWxsIk0KLlNoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHRfRXhlY3V0YWJsZUNvbW1hbmRBcmcSDAoEdHlwZRgBIAEoCRINCgV2YWx1ZRgCIAEoCSKWAQorU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdF9FeGVjdXRhYmxlQ29tbWFuZBIMCgRuYW1lGAEgASgJEkYKBGFyZ3MYAiADKAsyOC5hZ2VudC52MS5TaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0X0V4ZWN1dGFibGVDb21tYW5kQXJnEhEKCWZ1bGxfdGV4dBgDIAEoCSL6BwoJU2hlbGxBcmdzEg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSDwoHdGltZW91dBgDIAEoBRIUCgx0b29sX2NhbGxfaWQYBCABKAkSFwoPc2ltcGxlX2NvbW1hbmRzGAUgAygJEhoKEmhhc19pbnB1dF9yZWRpcmVjdBgGIAEoCBIbChNoYXNfb3V0cHV0X3JlZGlyZWN0GAcgASgIEjsKDnBhcnNpbmdfcmVzdWx0GAggASgLMiMuYWdlbnQudjEuU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdBI+ChhyZXF1ZXN0ZWRfc2FuZGJveF9wb2xpY3kYCSABKAsyFy5hZ2VudC52MS5TYW5kYm94UG9saWN5SACIAQESKAobZmlsZV9vdXRwdXRfdGhyZXNob2xkX2J5dGVzGAogASgESAGIAQESFQoNaXNfYmFja2dyb3VuZBgLIAEoCBIVCg1za2lwX2FwcHJvdmFsGAwgASgIEhgKEHRpbWVvdXRfYmVoYXZpb3IYDSABKAUSGQoMaGFyZF90aW1lb3V0GA4gASgFSAKIAQESGAoLZGVzY3JpcHRpb24YDyABKAlIA4gBARJBChFjbGFzc2lmaWVyX3Jlc3VsdBgQIAEoCzIhLmFnZW50LnYxLkNvbW1hbmRDbGFzc2lmaWVyUmVzdWx0SASIAQESEwoLY2xvc2Vfc3RkaW4YESABKAgSSQoTb3V0cHV0X25vdGlmaWNhdGlvbhgSIAEoCzInLmFnZW50LnYxLlNoZWxsT3V0cHV0Tm90aWZpY2F0aW9uQ29uZmlnSAWIAQESPQoTc21hcnRfbW9kZV9hcHByb3ZhbBgTIAEoCzIbLmFnZW50LnYxLlNtYXJ0TW9kZUFwcHJvdmFsSAaIAQESTgoZaG9va19hcHByb3ZhbF9yZXF1aXJlbWVudBgUIAEoCzImLmFnZW50LnYxLlNoZWxsSG9va0FwcHJvdmFsUmVxdWlyZW1lbnRIB4gBARIcCg9jb252ZXJzYXRpb25faWQYFSABKAlICIgBAUIbChlfcmVxdWVzdGVkX3NhbmRib3hfcG9saWN5Qh4KHF9maWxlX291dHB1dF90aHJlc2hvbGRfYnl0ZXNCDwoNX2hhcmRfdGltZW91dEIOCgxfZGVzY3JpcHRpb25CFAoSX2NsYXNzaWZpZXJfcmVzdWx0QhYKFF9vdXRwdXRfbm90aWZpY2F0aW9uQhYKFF9zbWFydF9tb2RlX2FwcHJvdmFsQhwKGl9ob29rX2FwcHJvdmFsX3JlcXVpcmVtZW50QhIKEF9jb252ZXJzYXRpb25faWQi+gMKC1NoZWxsUmVzdWx0EjQKDnNhbmRib3hfcG9saWN5GGUgASgLMhcuYWdlbnQudjEuU2FuZGJveFBvbGljeUgBiAEBEhoKDWlzX2JhY2tncm91bmQYZiABKAhIAogBARIdChB0ZXJtaW5hbHNfZm9sZGVyGGcgASgJSAOIAQESEAoDcGlkGGggASgNSASIAQESKQoHc3VjY2VzcxgBIAEoCzIWLmFnZW50LnYxLlNoZWxsU3VjY2Vzc0gAEikKB2ZhaWx1cmUYAiABKAsyFi5hZ2VudC52MS5TaGVsbEZhaWx1cmVIABIpCgd0aW1lb3V0GAMgASgLMhYuYWdlbnQudjEuU2hlbGxUaW1lb3V0SAASKwoIcmVqZWN0ZWQYBCABKAsyFy5hZ2VudC52MS5TaGVsbFJlamVjdGVkSAASMAoLc3Bhd25fZXJyb3IYBSABKAsyGS5hZ2VudC52MS5TaGVsbFNwYXduRXJyb3JIABI8ChFwZXJtaXNzaW9uX2RlbmllZBgHIAEoCzIfLmFnZW50LnYxLlNoZWxsUGVybWlzc2lvbkRlbmllZEgAQggKBnJlc3VsdEIRCg9fc2FuZGJveF9wb2xpY3lCEAoOX2lzX2JhY2tncm91bmRCEwoRX3Rlcm1pbmFsc19mb2xkZXJCBgoEX3BpZCIhChFTaGVsbFN0cmVhbVN0ZG91dBIMCgRkYXRhGAEgASgJIiEKEVNoZWxsU3RyZWFtU3RkZXJyEgwKBGRhdGEYASABKAki9wEKD1NoZWxsU3RyZWFtRXhpdBIMCgRjb2RlGAEgASgNEgsKA2N3ZBgCIAEoCRI2Cg9vdXRwdXRfbG9jYXRpb24YAyABKAsyGC5hZ2VudC52MS5PdXRwdXRMb2NhdGlvbkgAiAEBEg8KB2Fib3J0ZWQYBCABKAgSGQoMYWJvcnRfcmVhc29uGAUgASgFSAGIAQESJAoXbG9jYWxfZXhlY3V0aW9uX3RpbWVfbXMYBiABKAVIAogBAUISChBfb3V0cHV0X2xvY2F0aW9uQg8KDV9hYm9ydF9yZWFzb25CGgoYX2xvY2FsX2V4ZWN1dGlvbl90aW1lX21zIlsKEFNoZWxsU3RyZWFtU3RhcnQSNAoOc2FuZGJveF9wb2xpY3kYASABKAsyFy5hZ2VudC52MS5TYW5kYm94UG9saWN5SACIAQFCEQoPX3NhbmRib3hfcG9saWN5ItoBChdTaGVsbFN0cmVhbUJhY2tncm91bmRlZBIQCghzaGVsbF9pZBgBIAEoDRIPCgdjb21tYW5kGAIgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAMgASgJEhAKA3BpZBgEIAEoDUgAiAEBEhcKCm1zX3RvX3dhaXQYBSABKAVIAYgBARI0CgZyZWFzb24YBiABKA4yHy5hZ2VudC52MS5TaGVsbEJhY2tncm91bmRSZWFzb25IAogBAUIGCgRfcGlkQg0KC19tc190b193YWl0QgkKB19yZWFzb24irAMKC1NoZWxsU3RyZWFtEi0KBnN0ZG91dBgBIAEoCzIbLmFnZW50LnYxLlNoZWxsU3RyZWFtU3Rkb3V0SAASLQoGc3RkZXJyGAIgASgLMhsuYWdlbnQudjEuU2hlbGxTdHJlYW1TdGRlcnJIABIpCgRleGl0GAMgASgLMhkuYWdlbnQudjEuU2hlbGxTdHJlYW1FeGl0SAASKwoFc3RhcnQYBCABKAsyGi5hZ2VudC52MS5TaGVsbFN0cmVhbVN0YXJ0SAASKwoIcmVqZWN0ZWQYBSABKAsyFy5hZ2VudC52MS5TaGVsbFJlamVjdGVkSAASPAoRcGVybWlzc2lvbl9kZW5pZWQYBiABKAsyHy5hZ2VudC52MS5TaGVsbFBlcm1pc3Npb25EZW5pZWRIABI5CgxiYWNrZ3JvdW5kZWQYByABKAsyIS5hZ2VudC52MS5TaGVsbFN0cmVhbUJhY2tncm91bmRlZEgAEjgKDGhvb2tfY29udGV4dBgIIAEoCzIgLmFnZW50LnYxLlNoZWxsU3RyZWFtSG9va0NvbnRleHRIAEIHCgVldmVudCJLCg5PdXRwdXRMb2NhdGlvbhIRCglmaWxlX3BhdGgYASABKAkSEgoKc2l6ZV9ieXRlcxgCIAEoAxISCgpsaW5lX2NvdW50GAMgASgDIpgFCgxTaGVsbFN1Y2Nlc3MSDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRIRCglleGl0X2NvZGUYAyABKAUSDgoGc2lnbmFsGAQgASgJEg4KBnN0ZG91dBgFIAEoCRIOCgZzdGRlcnIYBiABKAkSFgoOZXhlY3V0aW9uX3RpbWUYByABKAUSNgoPb3V0cHV0X2xvY2F0aW9uGAggASgLMhguYWdlbnQudjEuT3V0cHV0TG9jYXRpb25IAIgBARIVCghzaGVsbF9pZBgJIAEoDUgBiAEBEh8KEmludGVybGVhdmVkX291dHB1dBgKIAEoCUgCiAEBEhAKA3BpZBgLIAEoDUgDiAEBEhcKCm1zX3RvX3dhaXQYDCABKAVIBIgBARIkChdsb2NhbF9leGVjdXRpb25fdGltZV9tcxgNIAEoBUgFiAEBEj8KEWJhY2tncm91bmRfcmVhc29uGA4gASgOMh8uYWdlbnQudjEuU2hlbGxCYWNrZ3JvdW5kUmVhc29uSAaIAQESGAoLb3V0cHV0X2hlYWQYDyABKAlIB4gBARIYCgtvdXRwdXRfdGFpbBgQIAEoCUgIiAEBEhkKDGVsaWRlZF9jaGFycxgRIAEoDUgJiAEBQhIKEF9vdXRwdXRfbG9jYXRpb25CCwoJX3NoZWxsX2lkQhUKE19pbnRlcmxlYXZlZF9vdXRwdXRCBgoEX3BpZEINCgtfbXNfdG9fd2FpdEIaChhfbG9jYWxfZXhlY3V0aW9uX3RpbWVfbXNCFAoSX2JhY2tncm91bmRfcmVhc29uQg4KDF9vdXRwdXRfaGVhZEIOCgxfb3V0cHV0X3RhaWxCDwoNX2VsaWRlZF9jaGFycyKYBAoMU2hlbGxGYWlsdXJlEg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSEQoJZXhpdF9jb2RlGAMgASgFEg4KBnNpZ25hbBgEIAEoCRIOCgZzdGRvdXQYBSABKAkSDgoGc3RkZXJyGAYgASgJEhYKDmV4ZWN1dGlvbl90aW1lGAcgASgFEjYKD291dHB1dF9sb2NhdGlvbhgIIAEoCzIYLmFnZW50LnYxLk91dHB1dExvY2F0aW9uSACIAQESHwoSaW50ZXJsZWF2ZWRfb3V0cHV0GAkgASgJSAGIAQESGQoMYWJvcnRfcmVhc29uGAogASgFSAKIAQESDwoHYWJvcnRlZBgLIAEoCBIkChdsb2NhbF9leGVjdXRpb25fdGltZV9tcxgMIAEoBUgDiAEBEhgKC291dHB1dF9oZWFkGA0gASgJSASIAQESGAoLb3V0cHV0X3RhaWwYDiABKAlIBYgBARIZCgxlbGlkZWRfY2hhcnMYDyABKA1IBogBAUISChBfb3V0cHV0X2xvY2F0aW9uQhUKE19pbnRlcmxlYXZlZF9vdXRwdXRCDwoNX2Fib3J0X3JlYXNvbkIaChhfbG9jYWxfZXhlY3V0aW9uX3RpbWVfbXNCDgoMX291dHB1dF9oZWFkQg4KDF9vdXRwdXRfdGFpbEIPCg1fZWxpZGVkX2NoYXJzIk4KDFNoZWxsVGltZW91dBIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEhIKCnRpbWVvdXRfbXMYAyABKAUiYAoNU2hlbGxSZWplY3RlZBIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEg4KBnJlYXNvbhgDIAEoCRITCgtpc19yZWFkb25seRgEIAEoCCJnChVTaGVsbFBlcm1pc3Npb25EZW5pZWQSDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRINCgVlcnJvchgDIAEoCRITCgtpc19yZWFkb25seRgEIAEoCCJMCg9TaGVsbFNwYXduRXJyb3ISDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRINCgVlcnJvchgDIAEoCSJAChJTaGVsbFBhcnRpYWxSZXN1bHQSFAoMc3Rkb3V0X2RlbHRhGAEgASgJEhQKDHN0ZGVycl9kZWx0YRgCIAEoCSJZCg1TaGVsbFRvb2xDYWxsEiEKBGFyZ3MYASABKAsyEy5hZ2VudC52MS5TaGVsbEFyZ3MSJQoGcmVzdWx0GAIgASgLMhUuYWdlbnQudjEuU2hlbGxSZXN1bHQiKwoYU2hlbGxUb29sQ2FsbFN0ZG91dERlbHRhEg8KB2NvbnRlbnQYASABKAkiKwoYU2hlbGxUb29sQ2FsbFN0ZGVyckRlbHRhEg8KB2NvbnRlbnQYASABKAkiiQEKElNoZWxsVG9vbENhbGxEZWx0YRI0CgZzdGRvdXQYASABKAsyIi5hZ2VudC52MS5TaGVsbFRvb2xDYWxsU3Rkb3V0RGVsdGFIABI0CgZzdGRlcnIYAiABKAsyIi5hZ2VudC52MS5TaGVsbFRvb2xDYWxsU3RkZXJyRGVsdGFIAEIHCgVkZWx0YSLtAQoMU3ViYWdlbnRUeXBlEjgKC3Vuc3BlY2lmaWVkGAEgASgLMiEuYWdlbnQudjEuU3ViYWdlbnRUeXBlVW5zcGVjaWZpZWRIABI5Cgxjb21wdXRlcl91c2UYAiABKAsyIS5hZ2VudC52MS5TdWJhZ2VudFR5cGVDb21wdXRlclVzZUgAEi4KBmN1c3RvbRgDIAEoCzIcLmFnZW50LnYxLlN1YmFnZW50VHlwZUN1c3RvbUgAEjAKB2V4cGxvcmUYBCABKAsyHS5hZ2VudC52MS5TdWJhZ2VudFR5cGVFeHBsb3JlSABCBgoEdHlwZSIZChdTdWJhZ2VudFR5cGVVbnNwZWNpZmllZCIZChdTdWJhZ2VudFR5cGVDb21wdXRlclVzZSIVChNTdWJhZ2VudFR5cGVFeHBsb3JlIiIKElN1YmFnZW50VHlwZUN1c3RvbRIMCgRuYW1lGAEgASgJIo0BCg5DdXN0b21TdWJhZ2VudBIRCglmdWxsX3BhdGgYASABKAkSDAoEbmFtZRgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRINCgV0b29scxgEIAMoCRINCgVtb2RlbBgFIAEoCRIOCgZwcm9tcHQYBiABKAkSFwoPcGVybWlzc2lvbl9tb2RlGAcgASgFImgKDlN3aXRjaE1vZGVBcmdzEhYKDnRhcmdldF9tb2RlX2lkGAEgASgJEhgKC2V4cGxhbmF0aW9uGAIgASgJSACIAQESFAoMdG9vbF9jYWxsX2lkGAMgASgJQg4KDF9leHBsYW5hdGlvbiKqAQoQU3dpdGNoTW9kZVJlc3VsdBIuCgdzdWNjZXNzGAEgASgLMhsuYWdlbnQudjEuU3dpdGNoTW9kZVN1Y2Nlc3NIABIqCgVlcnJvchgCIAEoCzIZLmFnZW50LnYxLlN3aXRjaE1vZGVFcnJvckgAEjAKCHJlamVjdGVkGAMgASgLMhwuYWdlbnQudjEuU3dpdGNoTW9kZVJlamVjdGVkSABCCAoGcmVzdWx0Ij0KEVN3aXRjaE1vZGVTdWNjZXNzEhQKDGZyb21fbW9kZV9pZBgBIAEoCRISCgp0b19tb2RlX2lkGAIgASgJIiAKD1N3aXRjaE1vZGVFcnJvchINCgVlcnJvchgBIAEoCSIkChJTd2l0Y2hNb2RlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJImgKElN3aXRjaE1vZGVUb29sQ2FsbBImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuU3dpdGNoTW9kZUFyZ3MSKgoGcmVzdWx0GAIgASgLMhouYWdlbnQudjEuU3dpdGNoTW9kZVJlc3VsdCJAChZTd2l0Y2hNb2RlUmVxdWVzdFF1ZXJ5EiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5Td2l0Y2hNb2RlQXJncyKpAQoZU3dpdGNoTW9kZVJlcXVlc3RSZXNwb25zZRJACghhcHByb3ZlZBgBIAEoCzIsLmFnZW50LnYxLlN3aXRjaE1vZGVSZXF1ZXN0UmVzcG9uc2VfQXBwcm92ZWRIABJACghyZWplY3RlZBgCIAEoCzIsLmFnZW50LnYxLlN3aXRjaE1vZGVSZXF1ZXN0UmVzcG9uc2VfUmVqZWN0ZWRIAEIICgZyZXN1bHQiJAoiU3dpdGNoTW9kZVJlcXVlc3RSZXNwb25zZV9BcHByb3ZlZCI0CiJTd2l0Y2hNb2RlUmVxdWVzdFJlc3BvbnNlX1JlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSJ1CghUb2RvSXRlbRIKCgJpZBgBIAEoCRIPCgdjb250ZW50GAIgASgJEg4KBnN0YXR1cxgDIAEoBRISCgpjcmVhdGVkX2F0GAQgASgDEhIKCnVwZGF0ZWRfYXQYBSABKAMSFAoMZGVwZW5kZW5jaWVzGAYgAygJImsKE1VwZGF0ZVRvZG9zVG9vbENhbGwSJwoEYXJncxgBIAEoCzIZLmFnZW50LnYxLlVwZGF0ZVRvZG9zQXJncxIrCgZyZXN1bHQYAiABKAsyGy5hZ2VudC52MS5VcGRhdGVUb2Rvc1Jlc3VsdCJDCg9VcGRhdGVUb2Rvc0FyZ3MSIQoFdG9kb3MYASADKAsyEi5hZ2VudC52MS5Ub2RvSXRlbRINCgVtZXJnZRgCIAEoCCJ7ChFVcGRhdGVUb2Rvc1Jlc3VsdBIvCgdzdWNjZXNzGAEgASgLMhwuYWdlbnQudjEuVXBkYXRlVG9kb3NTdWNjZXNzSAASKwoFZXJyb3IYAiABKAsyGi5hZ2VudC52MS5VcGRhdGVUb2Rvc0Vycm9ySABCCAoGcmVzdWx0Il8KElVwZGF0ZVRvZG9zU3VjY2VzcxIhCgV0b2RvcxgBIAMoCzISLmFnZW50LnYxLlRvZG9JdGVtEhMKC3RvdGFsX2NvdW50GAIgASgFEhEKCXdhc19tZXJnZRgDIAEoCCIhChBVcGRhdGVUb2Rvc0Vycm9yEg0KBWVycm9yGAEgASgJImUKEVJlYWRUb2Rvc1Rvb2xDYWxsEiUKBGFyZ3MYASABKAsyFy5hZ2VudC52MS5SZWFkVG9kb3NBcmdzEikKBnJlc3VsdBgCIAEoCzIZLmFnZW50LnYxLlJlYWRUb2Rvc1Jlc3VsdCI5Cg1SZWFkVG9kb3NBcmdzEhUKDXN0YXR1c19maWx0ZXIYASADKAUSEQoJaWRfZmlsdGVyGAIgAygJInUKD1JlYWRUb2Rvc1Jlc3VsdBItCgdzdWNjZXNzGAEgASgLMhouYWdlbnQudjEuUmVhZFRvZG9zU3VjY2Vzc0gAEikKBWVycm9yGAIgASgLMhguYWdlbnQudjEuUmVhZFRvZG9zRXJyb3JIAEIICgZyZXN1bHQiSgoQUmVhZFRvZG9zU3VjY2VzcxIhCgV0b2RvcxgBIAMoCzISLmFnZW50LnYxLlRvZG9JdGVtEhMKC3RvdGFsX2NvdW50GAIgASgFIh8KDlJlYWRUb2Rvc0Vycm9yEg0KBWVycm9yGAEgASgJIksKBVJhbmdlEiEKBXN0YXJ0GAEgASgLMhIuYWdlbnQudjEuUG9zaXRpb24SHwoDZW5kGAIgASgLMhIuYWdlbnQudjEuUG9zaXRpb24iKAoIUG9zaXRpb24SDAoEbGluZRgBIAEoDRIOCgZjb2x1bW4YAiABKA0iGAoFRXJyb3ISDwoHbWVzc2FnZRgBIAEoCSI6Cg1XZWJTZWFyY2hBcmdzEhMKC3NlYXJjaF90ZXJtGAEgASgJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCSKmAQoPV2ViU2VhcmNoUmVzdWx0Ei0KB3N1Y2Nlc3MYASABKAsyGi5hZ2VudC52MS5XZWJTZWFyY2hTdWNjZXNzSAASKQoFZXJyb3IYAiABKAsyGC5hZ2VudC52MS5XZWJTZWFyY2hFcnJvckgAEi8KCHJlamVjdGVkGAMgASgLMhsuYWdlbnQudjEuV2ViU2VhcmNoUmVqZWN0ZWRIAEIICgZyZXN1bHQiRAoQV2ViU2VhcmNoU3VjY2VzcxIwCgpyZWZlcmVuY2VzGAEgAygLMhwuYWdlbnQudjEuV2ViU2VhcmNoUmVmZXJlbmNlIh8KDldlYlNlYXJjaEVycm9yEg0KBWVycm9yGAEgASgJIiMKEVdlYlNlYXJjaFJlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSI/ChJXZWJTZWFyY2hSZWZlcmVuY2USDQoFdGl0bGUYASABKAkSCwoDdXJsGAIgASgJEg0KBWNodW5rGAMgASgJImUKEVdlYlNlYXJjaFRvb2xDYWxsEiUKBGFyZ3MYASABKAsyFy5hZ2VudC52MS5XZWJTZWFyY2hBcmdzEikKBnJlc3VsdBgCIAEoCzIZLmFnZW50LnYxLldlYlNlYXJjaFJlc3VsdCI+ChVXZWJTZWFyY2hSZXF1ZXN0UXVlcnkSJQoEYXJncxgBIAEoCzIXLmFnZW50LnYxLldlYlNlYXJjaEFyZ3MipgEKGFdlYlNlYXJjaFJlcXVlc3RSZXNwb25zZRI/CghhcHByb3ZlZBgBIAEoCzIrLmFnZW50LnYxLldlYlNlYXJjaFJlcXVlc3RSZXNwb25zZV9BcHByb3ZlZEgAEj8KCHJlamVjdGVkGAIgASgLMisuYWdlbnQudjEuV2ViU2VhcmNoUmVxdWVzdFJlc3BvbnNlX1JlamVjdGVkSABCCAoGcmVzdWx0IiMKIVdlYlNlYXJjaFJlcXVlc3RSZXNwb25zZV9BcHByb3ZlZCIzCiFXZWJTZWFyY2hSZXF1ZXN0UmVzcG9uc2VfUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIq0BCglXcml0ZUFyZ3MSDAoEcGF0aBgBIAEoCRIRCglmaWxlX3RleHQYAiABKAkSFAoMdG9vbF9jYWxsX2lkGAMgASgJEicKH3JldHVybl9maWxlX2NvbnRlbnRfYWZ0ZXJfd3JpdGUYBCABKAgSEgoKZmlsZV9ieXRlcxgFIAEoDBIaCg1lbmNvZGluZ19oaW50GAYgASgJSACIAQFCEAoOX2VuY29kaW5nX2hpbnQigAIKC1dyaXRlUmVzdWx0EikKB3N1Y2Nlc3MYASABKAsyFi5hZ2VudC52MS5Xcml0ZVN1Y2Nlc3NIABI8ChFwZXJtaXNzaW9uX2RlbmllZBgDIAEoCzIfLmFnZW50LnYxLldyaXRlUGVybWlzc2lvbkRlbmllZEgAEioKCG5vX3NwYWNlGAQgASgLMhYuYWdlbnQudjEuV3JpdGVOb1NwYWNlSAASJQoFZXJyb3IYBSABKAsyFC5hZ2VudC52MS5Xcml0ZUVycm9ySAASKwoIcmVqZWN0ZWQYBiABKAsyFy5hZ2VudC52MS5Xcml0ZVJlamVjdGVkSABCCAoGcmVzdWx0IooBCgxXcml0ZVN1Y2Nlc3MSDAoEcGF0aBgBIAEoCRIVCg1saW5lc19jcmVhdGVkGAIgASgFEhEKCWZpbGVfc2l6ZRgDIAEoBRIlChhmaWxlX2NvbnRlbnRfYWZ0ZXJfd3JpdGUYBCABKAlIAIgBAUIbChlfZmlsZV9jb250ZW50X2FmdGVyX3dyaXRlIm8KFVdyaXRlUGVybWlzc2lvbkRlbmllZBIMCgRwYXRoGAEgASgJEhEKCWRpcmVjdG9yeRgCIAEoCRIRCglvcGVyYXRpb24YAyABKAkSDQoFZXJyb3IYBCABKAkSEwoLaXNfcmVhZG9ubHkYBSABKAgiHAoMV3JpdGVOb1NwYWNlEgwKBHBhdGgYASABKAkiKQoKV3JpdGVFcnJvchIMCgRwYXRoGAEgASgJEg0KBWVycm9yGAIgASgJIi0KDVdyaXRlUmVqZWN0ZWQSDAoEcGF0aBgBIAEoCRIOCgZyZWFzb24YAiABKAkigwEKF0Jvb3RzdHJhcFN0YXRzaWdSZXF1ZXN0Eh4KEWlnbm9yZV9kZXZfc3RhdHVzGAEgASgISACIAQESHQoQb3BlcmF0aW5nX3N5c3RlbRgCIAEoBUgBiAEBQhQKEl9pZ25vcmVfZGV2X3N0YXR1c0ITChFfb3BlcmF0aW5nX3N5c3RlbSIOCgxQaW5nUmVzcG9uc2UitwEKC0V4ZWNSZXF1ZXN0Eg8KB2NvbW1hbmQYASABKAkSEAoDY3dkGAIgASgJSACIAQESDAoEYXJncxgDIAMoCRI7CgtlbnZpcm9ubWVudBgEIAMoCzImLmFnZW50LnYxLkV4ZWNSZXF1ZXN0LkVudmlyb25tZW50RW50cnkaMgoQRW52aXJvbm1lbnRFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgYKBF9jd2QioAEKDEV4ZWNSZXNwb25zZRItCgxzdGRvdXRfZXZlbnQYASABKAsyFS5hZ2VudC52MS5TdGRvdXRFdmVudEgAEi0KDHN0ZGVycl9ldmVudBgCIAEoCzIVLmFnZW50LnYxLlN0ZGVyckV2ZW50SAASKQoKZXhpdF9ldmVudBgDIAEoCzITLmFnZW50LnYxLkV4aXRFdmVudEgAQgcKBWV2ZW50IhsKC1N0ZG91dEV2ZW50EgwKBGRhdGEYASABKAkiGwoLU3RkZXJyRXZlbnQSDAoEZGF0YRgBIAEoCSIeCglFeGl0RXZlbnQSEQoJZXhpdF9jb2RlGAEgASgFIiMKE1JlYWRUZXh0RmlsZVJlcXVlc3QSDAoEcGF0aBgBIAEoCSInChRSZWFkVGV4dEZpbGVSZXNwb25zZRIPCgdjb250ZW50GAEgASgJIjUKFFdyaXRlVGV4dEZpbGVSZXF1ZXN0EgwKBHBhdGgYASABKAkSDwoHY29udGVudBgCIAEoCSIXChVXcml0ZVRleHRGaWxlUmVzcG9uc2UiJQoVUmVhZEJpbmFyeUZpbGVSZXF1ZXN0EgwKBHBhdGgYASABKAkiKQoWUmVhZEJpbmFyeUZpbGVSZXNwb25zZRIPCgdjb250ZW50GAEgASgMIjcKFldyaXRlQmluYXJ5RmlsZVJlcXVlc3QSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgMIhkKF1dyaXRlQmluYXJ5RmlsZVJlc3BvbnNlIkUKHkdldFdvcmtzcGFjZUNoYW5nZXNIYXNoUmVxdWVzdBIRCglyb290X3BhdGgYASABKAkSEAoIYmFzZV9yZWYYAiABKAkiLwofR2V0V29ya3NwYWNlQ2hhbmdlc0hhc2hSZXNwb25zZRIMCgRoYXNoGAEgASgJIlAKH1JlZnJlc2hHaXRodWJBY2Nlc3NUb2tlblJlcXVlc3QSGwoTZ2l0aHViX2FjY2Vzc190b2tlbhgBIAEoCRIQCghob3N0bmFtZRgCIAEoCSIiCiBSZWZyZXNoR2l0aHViQWNjZXNzVG9rZW5SZXNwb25zZSJXCh1XYXJtUmVtb3RlQWNjZXNzU2VydmVyUmVxdWVzdBIOCgZjb21taXQYASABKAkSDAoEcG9ydBgCIAEoBRIYChBjb25uZWN0aW9uX3Rva2VuGAMgASgJIiAKHldhcm1SZW1vdGVBY2Nlc3NTZXJ2ZXJSZXNwb25zZSIWChRMaXN0QXJ0aWZhY3RzUmVxdWVzdCKKAgoWQXJ0aWZhY3RVcGxvYWRNZXRhZGF0YRIVCg1hYnNvbHV0ZV9wYXRoGAEgASgJEhIKCnNpemVfYnl0ZXMYAiABKAQSGgoSdXBkYXRlZF9hdF91bml4X21zGAMgASgDEg4KBnN0YXR1cxgEIAEoBRIWCg5ieXRlc191cGxvYWRlZBgFIAEoBBISCgpsYXN0X2Vycm9yGAYgASgJEhcKD3VwbG9hZF9hdHRlbXB0cxgHIAEoDRIfChdsYXN0X3N0YXJ0ZWRfYXRfdW5peF9tcxgIIAEoAxIgChhsYXN0X2ZpbmlzaGVkX2F0X3VuaXhfbXMYCSABKAMSEQoJdXBsb2FkX2lkGAogASgJIkwKFUxpc3RBcnRpZmFjdHNSZXNwb25zZRIzCglhcnRpZmFjdHMYASADKAsyIC5hZ2VudC52MS5BcnRpZmFjdFVwbG9hZE1ldGFkYXRhIk4KFlVwbG9hZEFydGlmYWN0c1JlcXVlc3QSNAoHdXBsb2FkcxgBIAMoCzIjLmFnZW50LnYxLkFydGlmYWN0VXBsb2FkSW5zdHJ1Y3Rpb24i1wIKGUFydGlmYWN0VXBsb2FkSW5zdHJ1Y3Rpb24SFQoNYWJzb2x1dGVfcGF0aBgBIAEoCRISCgp1cGxvYWRfdXJsGAIgASgJEg4KBm1ldGhvZBgDIAEoCRJBCgdoZWFkZXJzGAQgAygLMjAuYWdlbnQudjEuQXJ0aWZhY3RVcGxvYWRJbnN0cnVjdGlvbi5IZWFkZXJzRW50cnkSGQoMY29udGVudF90eXBlGAUgASgJSACIAQESHQoQc2xhY2tfdXBsb2FkX3VybBgGIAEoCUgBiAEBEhoKDXNsYWNrX2ZpbGVfaWQYByABKAlIAogBARouCgxIZWFkZXJzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIPCg1fY29udGVudF90eXBlQhMKEV9zbGFja191cGxvYWRfdXJsQhAKDl9zbGFja19maWxlX2lkIoQBChxBcnRpZmFjdFVwbG9hZERpc3BhdGNoUmVzdWx0EhUKDWFic29sdXRlX3BhdGgYASABKAkSDgoGc3RhdHVzGAIgASgFEg8KB21lc3NhZ2UYAyABKAkSGgoNc2xhY2tfZmlsZV9pZBgEIAEoCUgAiAEBQhAKDl9zbGFja19maWxlX2lkIlIKF1VwbG9hZEFydGlmYWN0c1Jlc3BvbnNlEjcKB3Jlc3VsdHMYASADKAsyJi5hZ2VudC52MS5BcnRpZmFjdFVwbG9hZERpc3BhdGNoUmVzdWx0IhwKGkdldE1jcFJlZnJlc2hUb2tlbnNSZXF1ZXN0IqUBChtHZXRNY3BSZWZyZXNoVG9rZW5zUmVzcG9uc2USUAoOcmVmcmVzaF90b2tlbnMYASADKAsyOC5hZ2VudC52MS5HZXRNY3BSZWZyZXNoVG9rZW5zUmVzcG9uc2UuUmVmcmVzaFRva2Vuc0VudHJ5GjQKElJlZnJlc2hUb2tlbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIqMBCiFVcGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlc1JlcXVlc3QSQQoDZW52GAEgAygLMjQuYWdlbnQudjEuVXBkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXNSZXF1ZXN0LkVudkVudHJ5Eg8KB3JlcGxhY2UYAiABKAgaKgoIRW52RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJGCiJVcGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlc1Jlc3BvbnNlEg8KB2FwcGxpZWQYASABKA0SDwoHcmVtb3ZlZBgCIAEoDSKDAQoSTWNwT0F1dGhTdG9yZWREYXRhEhUKDXJlZnJlc2hfdG9rZW4YASABKAkSEQoJY2xpZW50X2lkGAIgASgJEhoKDWNsaWVudF9zZWNyZXQYAyABKAlIAIgBARIVCg1yZWRpcmVjdF91cmlzGAQgAygJQhAKDl9jbGllbnRfc2VjcmV0Ik4KBUZyYW1lEgoKAmlkGAEgASgJEg4KBm1ldGhvZBgCIAEoCRIMCgRkYXRhGAMgASgMEgwKBGtpbmQYBCABKAUSDQoFZXJyb3IYBSABKAkiBwoFRW1wdHkiIwoNQmlkaVJlcXVlc3RJZBISCgpyZXF1ZXN0X2lkGAEgASgJIoECCgxQaVRydW5jYXRpb24SEQoJdHJ1bmNhdGVkGAEgASgIEhQKDHRydW5jYXRlZF9ieRgCIAEoCRITCgt0b3RhbF9saW5lcxgDIAEoDRIUCgxvdXRwdXRfbGluZXMYBCABKA0SFAoMb3V0cHV0X2J5dGVzGAUgASgNEhYKCW1heF9saW5lcxgGIAEoDUgAiAEBEhYKCW1heF9ieXRlcxgHIAEoDUgBiAEBEiAKGGZpcnN0X2xpbmVfZXhjZWVkc19saW1pdBgIIAEoCBIZChFsYXN0X2xpbmVfcGFydGlhbBgJIAEoCEIMCgpfbWF4X2xpbmVzQgwKCl9tYXhfYnl0ZXMiNwoRUGlFZGl0UmVwbGFjZW1lbnQSEAoIb2xkX3RleHQYASABKAkSEAoIbmV3X3RleHQYAiABKAkiXAoOUGlSZWFkRXhlY0FyZ3MSDAoEcGF0aBgBIAEoCRITCgZvZmZzZXQYAiABKAVIAIgBARISCgVsaW1pdBgDIAEoBUgBiAEBQgkKB19vZmZzZXRCCAoGX2xpbWl0ImMKEVBpUmVhZEV4ZWNTdWNjZXNzEg4KBm91dHB1dBgBIAEoCRIvCgp0cnVuY2F0aW9uGAIgASgLMhYuYWdlbnQudjEuUGlUcnVuY2F0aW9uSACIAQFCDQoLX3RydW5jYXRpb24iIAoPUGlSZWFkRXhlY0Vycm9yEg0KBWVycm9yGAEgASgJIngKEFBpUmVhZEV4ZWNSZXN1bHQSLgoHc3VjY2VzcxgBIAEoCzIbLmFnZW50LnYxLlBpUmVhZEV4ZWNTdWNjZXNzSAASKgoFZXJyb3IYAiABKAsyGS5hZ2VudC52MS5QaVJlYWRFeGVjRXJyb3JIAEIICgZyZXN1bHQiQwoOUGlCYXNoRXhlY0FyZ3MSDwoHY29tbWFuZBgBIAEoCRIUCgd0aW1lb3V0GAIgASgBSACIAQFCCgoIX3RpbWVvdXQilwEKEVBpQmFzaEV4ZWNTdWNjZXNzEg4KBm91dHB1dBgBIAEoCRIvCgp0cnVuY2F0aW9uGAIgASgLMhYuYWdlbnQudjEuUGlUcnVuY2F0aW9uSACIAQESHQoQZnVsbF9vdXRwdXRfcGF0aBgDIAEoCUgBiAEBQg0KC190cnVuY2F0aW9uQhMKEV9mdWxsX291dHB1dF9wYXRoIpQBCg9QaUJhc2hFeGVjRXJyb3ISDQoFZXJyb3IYASABKAkSLwoKdHJ1bmNhdGlvbhgCIAEoCzIWLmFnZW50LnYxLlBpVHJ1bmNhdGlvbkgAiAEBEh0KEGZ1bGxfb3V0cHV0X3BhdGgYAyABKAlIAYgBAUINCgtfdHJ1bmNhdGlvbkITChFfZnVsbF9vdXRwdXRfcGF0aCJ4ChBQaUJhc2hFeGVjUmVzdWx0Ei4KB3N1Y2Nlc3MYASABKAsyGy5hZ2VudC52MS5QaUJhc2hFeGVjU3VjY2Vzc0gAEioKBWVycm9yGAIgASgLMhkuYWdlbnQudjEuUGlCYXNoRXhlY0Vycm9ySABCCAoGcmVzdWx0IkoKDlBpRWRpdEV4ZWNBcmdzEgwKBHBhdGgYASABKAkSKgoFZWRpdHMYAiADKAsyGy5hZ2VudC52MS5QaUVkaXRSZXBsYWNlbWVudCJ4ChFQaUVkaXRFeGVjU3VjY2VzcxIOCgZvdXRwdXQYASABKAkSDAoEZGlmZhgCIAEoCRINCgVwYXRjaBgDIAEoCRIfChJmaXJzdF9jaGFuZ2VkX2xpbmUYBCABKA1IAIgBAUIVChNfZmlyc3RfY2hhbmdlZF9saW5lIiAKD1BpRWRpdEV4ZWNFcnJvchINCgVlcnJvchgBIAEoCSIkChJQaUVkaXRFeGVjUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIqoBChBQaUVkaXRFeGVjUmVzdWx0Ei4KB3N1Y2Nlc3MYASABKAsyGy5hZ2VudC52MS5QaUVkaXRFeGVjU3VjY2Vzc0gAEioKBWVycm9yGAIgASgLMhkuYWdlbnQudjEuUGlFZGl0RXhlY0Vycm9ySAASMAoIcmVqZWN0ZWQYAyABKAsyHC5hZ2VudC52MS5QaUVkaXRFeGVjUmVqZWN0ZWRIAEIICgZyZXN1bHQiMAoPUGlXcml0ZUV4ZWNBcmdzEgwKBHBhdGgYASABKAkSDwoHY29udGVudBgCIAEoCSIkChJQaVdyaXRlRXhlY1N1Y2Nlc3MSDgoGb3V0cHV0GAEgASgJIiEKEFBpV3JpdGVFeGVjRXJyb3ISDQoFZXJyb3IYASABKAkiJQoTUGlXcml0ZUV4ZWNSZWplY3RlZBIOCgZyZWFzb24YASABKAkirgEKEVBpV3JpdGVFeGVjUmVzdWx0Ei8KB3N1Y2Nlc3MYASABKAsyHC5hZ2VudC52MS5QaVdyaXRlRXhlY1N1Y2Nlc3NIABIrCgVlcnJvchgCIAEoCzIaLmFnZW50LnYxLlBpV3JpdGVFeGVjRXJyb3JIABIxCghyZWplY3RlZBgDIAEoCzIdLmFnZW50LnYxLlBpV3JpdGVFeGVjUmVqZWN0ZWRIAEIICgZyZXN1bHQi5QEKDlBpR3JlcEV4ZWNBcmdzEg8KB3BhdHRlcm4YASABKAkSEQoEcGF0aBgCIAEoCUgAiAEBEhEKBGdsb2IYAyABKAlIAYgBARIYCgtpZ25vcmVfY2FzZRgEIAEoCEgCiAEBEhQKB2xpdGVyYWwYBSABKAhIA4gBARIUCgdjb250ZXh0GAYgASgFSASIAQESEgoFbGltaXQYByABKAVIBYgBAUIHCgVfcGF0aEIHCgVfZ2xvYkIOCgxfaWdub3JlX2Nhc2VCCgoIX2xpdGVyYWxCCgoIX2NvbnRleHRCCAoGX2xpbWl0IrYBChFQaUdyZXBFeGVjU3VjY2VzcxIOCgZvdXRwdXQYASABKAkSLwoKdHJ1bmNhdGlvbhgCIAEoCzIWLmFnZW50LnYxLlBpVHJ1bmNhdGlvbkgAiAEBEiAKE21hdGNoX2xpbWl0X3JlYWNoZWQYAyABKA1IAYgBARIXCg9saW5lc190cnVuY2F0ZWQYBCABKAhCDQoLX3RydW5jYXRpb25CFgoUX21hdGNoX2xpbWl0X3JlYWNoZWQiIAoPUGlHcmVwRXhlY0Vycm9yEg0KBWVycm9yGAEgASgJIngKEFBpR3JlcEV4ZWNSZXN1bHQSLgoHc3VjY2VzcxgBIAEoCzIbLmFnZW50LnYxLlBpR3JlcEV4ZWNTdWNjZXNzSAASKgoFZXJyb3IYAiABKAsyGS5hZ2VudC52MS5QaUdyZXBFeGVjRXJyb3JIAEIICgZyZXN1bHQiWwoOUGlGaW5kRXhlY0FyZ3MSDwoHcGF0dGVybhgBIAEoCRIRCgRwYXRoGAIgASgJSACIAQESEgoFbGltaXQYAyABKAVIAYgBAUIHCgVfcGF0aEIICgZfbGltaXQinwEKEVBpRmluZEV4ZWNTdWNjZXNzEg4KBm91dHB1dBgBIAEoCRIvCgp0cnVuY2F0aW9uGAIgASgLMhYuYWdlbnQudjEuUGlUcnVuY2F0aW9uSACIAQESIQoUcmVzdWx0X2xpbWl0X3JlYWNoZWQYAyABKA1IAYgBAUINCgtfdHJ1bmNhdGlvbkIXChVfcmVzdWx0X2xpbWl0X3JlYWNoZWQiIAoPUGlGaW5kRXhlY0Vycm9yEg0KBWVycm9yGAEgASgJIngKEFBpRmluZEV4ZWNSZXN1bHQSLgoHc3VjY2VzcxgBIAEoCzIbLmFnZW50LnYxLlBpRmluZEV4ZWNTdWNjZXNzSAASKgoFZXJyb3IYAiABKAsyGS5hZ2VudC52MS5QaUZpbmRFeGVjRXJyb3JIAEIICgZyZXN1bHQiSAoMUGlMc0V4ZWNBcmdzEhEKBHBhdGgYASABKAlIAIgBARISCgVsaW1pdBgCIAEoBUgBiAEBQgcKBV9wYXRoQggKBl9saW1pdCKbAQoPUGlMc0V4ZWNTdWNjZXNzEg4KBm91dHB1dBgBIAEoCRIvCgp0cnVuY2F0aW9uGAIgASgLMhYuYWdlbnQudjEuUGlUcnVuY2F0aW9uSACIAQESIAoTZW50cnlfbGltaXRfcmVhY2hlZBgDIAEoDUgBiAEBQg0KC190cnVuY2F0aW9uQhYKFF9lbnRyeV9saW1pdF9yZWFjaGVkIh4KDVBpTHNFeGVjRXJyb3ISDQoFZXJyb3IYASABKAkicgoOUGlMc0V4ZWNSZXN1bHQSLAoHc3VjY2VzcxgBIAEoCzIZLmFnZW50LnYxLlBpTHNFeGVjU3VjY2Vzc0gAEigKBWVycm9yGAIgASgLMhcuYWdlbnQudjEuUGlMc0V4ZWNFcnJvckgAQggKBnJlc3VsdCI8ChFNY3BTZXJ2ZXJOb3RGb3VuZBIMCgRuYW1lGAEgASgJEhkKEWF2YWlsYWJsZV9zZXJ2ZXJzGAIgAygJIg0KC01jcEFwcHJvdmVkIkEKEE1jcFN0YXRlRXhlY0FyZ3MSGgoSc2VydmVyX2lkZW50aWZpZXJzGAEgAygJEhEKCWtpY2tfb25seRgCIAEoCCKHAgoOTWNwU3RhdGVTZXJ2ZXISEwoLc2VydmVyX25hbWUYASABKAkSGQoRc2VydmVyX2lkZW50aWZpZXIYAiABKAkSEwoGcGx1Z2luGAMgASgJSACIAQESGAoLbWFya2V0cGxhY2UYBCABKAlIAYgBARIqCgV0b29scxgFIAMoCzIbLmFnZW50LnYxLk1jcFRvb2xEZWZpbml0aW9uEi8KDGluc3RydWN0aW9ucxgGIAMoCzIZLmFnZW50LnYxLk1jcEluc3RydWN0aW9ucxITCgZzdGF0dXMYByABKAlIAogBAUIJCgdfcGx1Z2luQg4KDF9tYXJrZXRwbGFjZUIJCgdfc3RhdHVzIjwKD01jcFN0YXRlU3VjY2VzcxIpCgdzZXJ2ZXJzGAEgAygLMhguYWdlbnQudjEuTWNwU3RhdGVTZXJ2ZXIiHgoNTWNwU3RhdGVFcnJvchINCgVlcnJvchgBIAEoCSIiChBNY3BTdGF0ZVJlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSKmAQoSTWNwU3RhdGVFeGVjUmVzdWx0EiwKB3N1Y2Nlc3MYASABKAsyGS5hZ2VudC52MS5NY3BTdGF0ZVN1Y2Nlc3NIABIoCgVlcnJvchgCIAEoCzIXLmFnZW50LnYxLk1jcFN0YXRlRXJyb3JIABIuCghyZWplY3RlZBgDIAEoCzIaLmFnZW50LnYxLk1jcFN0YXRlUmVqZWN0ZWRIAEIICgZyZXN1bHQirQEKKUNvbW1hbmRDbGFzc2lmaWVyUmVzdWx0X0NsYXNzaWZpZWRDb21tYW5kEgwKBG5hbWUYASABKAkSEQoJYXJndW1lbnRzGAIgAygJEiYKGXN1Z2dlc3RlZF9hbGxvd2xpc3RfZW50cnkYAyABKAlIAIgBARIZChFzdWJjb21tYW5kX3Rva2VucxgEIAMoCUIcChpfc3VnZ2VzdGVkX2FsbG93bGlzdF9lbnRyeSLXAQoXQ29tbWFuZENsYXNzaWZpZXJSZXN1bHQSRQoIY29tbWFuZHMYASADKAsyMy5hZ2VudC52MS5Db21tYW5kQ2xhc3NpZmllclJlc3VsdF9DbGFzc2lmaWVkQ29tbWFuZBJWChZzdWdnZXN0ZWRfc2FuZGJveF9tb2RlGAIgASgOMjYuYWdlbnQudjEuQ29tbWFuZENsYXNzaWZpZXJSZXN1bHRfU3VnZ2VzdGVkU2FuZGJveE1vZGUSHQoVY2xhc3NpZmljYXRpb25fZmFpbGVkGAMgASgIIpMBCiJTaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0X1JlZGlyZWN0EhAKCG9wZXJhdG9yGAEgASgJEhcKD2Rlc3RpbmF0aW9uX2ZkcxgCIAMoDRIYChB0YXJnZXRfbm9kZV90eXBlGAMgASgJEhgKC3RhcmdldF90ZXh0GAQgASgJSACIAQFCDgoMX3RhcmdldF90ZXh0IooCChpTaGVsbEFsbG93bGlzdFByZWNoZWNrQXJncxIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEjsKDnBhcnNpbmdfcmVzdWx0GAMgASgLMiMuYWdlbnQudjEuU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdBJBChFjbGFzc2lmaWVyX3Jlc3VsdBgEIAEoCzIhLmFnZW50LnYxLkNvbW1hbmRDbGFzc2lmaWVyUmVzdWx0SACIAQESGQoMdG9vbF9jYWxsX2lkGAUgASgJSAGIAQFCFAoSX2NsYXNzaWZpZXJfcmVzdWx0Qg8KDV90b29sX2NhbGxfaWQiMwocU2hlbGxBbGxvd2xpc3RQcmVjaGVja1Jlc3VsdBITCgthbGxvd2xpc3RlZBgBIAEoCCJ2ChhNY3BBbGxvd2xpc3RQcmVjaGVja0FyZ3MSGwoTcHJvdmlkZXJfaWRlbnRpZmllchgBIAEoCRIRCgl0b29sX25hbWUYAiABKAkSGQoMdG9vbF9jYWxsX2lkGAMgASgJSACIAQFCDwoNX3Rvb2xfY2FsbF9pZCIxChpNY3BBbGxvd2xpc3RQcmVjaGVja1Jlc3VsdBITCgthbGxvd2xpc3RlZBgBIAEoCCJYCh1XZWJGZXRjaEFsbG93bGlzdFByZWNoZWNrQXJncxILCgN1cmwYASABKAkSGQoMdG9vbF9jYWxsX2lkGAIgASgJSACIAQFCDwoNX3Rvb2xfY2FsbF9pZCI2Ch9XZWJGZXRjaEFsbG93bGlzdFByZWNoZWNrUmVzdWx0EhMKC2FsbG93bGlzdGVkGAEgASgIIjcKEVNtYXJ0TW9kZUFwcHJvdmFsEhIKCnJlcXVlc3RfaWQYASABKAkSDgoGcmVhc29uGAIgASgJIpwBCh1TaGVsbE91dHB1dE5vdGlmaWNhdGlvbkNvbmZpZxIPCgdwYXR0ZXJuGAEgASgJEg4KBnJlYXNvbhgCIAEoCRIVCghkZWJvdW5jZRgDIAEoAUgAiAEBEh8KEm5vdGlmaWNhdGlvbl9saW1pdBgEIAEoBUgBiAEBQgsKCV9kZWJvdW5jZUIVChNfbm90aWZpY2F0aW9uX2xpbWl0InkKHFNoZWxsSG9va0FwcHJvdmFsUmVxdWlyZW1lbnQSOQoEa2luZBgBIAEoDjIrLmFnZW50LnYxLlNoZWxsSG9va0FwcHJvdmFsUmVxdWlyZW1lbnRfS2luZBITCgZyZWFzb24YAiABKAlIAIgBAUIJCgdfcmVhc29uIjAKGEZvcmNlQmFja2dyb3VuZFNoZWxsQXJncxIUCgx0b29sX2NhbGxfaWQYASABKAkilQEKGkZvcmNlQmFja2dyb3VuZFNoZWxsUmVzdWx0EjQKBnN0YXR1cxgBIAEoDjIkLmFnZW50LnYxLkZvcmNlQmFja2dyb3VuZFNoZWxsU3RhdHVzEjAKDHNoZWxsX3Jlc3VsdBgCIAEoCzIVLmFnZW50LnYxLlNoZWxsUmVzdWx0SACIAQFCDwoNX3NoZWxsX3Jlc3VsdCJBChVIb29rQWRkaXRpb25hbENvbnRleHQSFwoPaG9va19ldmVudF9uYW1lGAEgASgJEg8KB2NvbnRlbnQYAiABKAkiWwoWU2hlbGxTdHJlYW1Ib29rQ29udGV4dBJBChhob29rX2FkZGl0aW9uYWxfY29udGV4dHMYASADKAsyHy5hZ2VudC52MS5Ib29rQWRkaXRpb25hbENvbnRleHQiSwoMU3ViYWdlbnRBcmdzEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRIVCg1zdWJhZ2VudF90eXBlGAIgASgJEg4KBnByb21wdBgEIAEoCSLbAQoPU3ViYWdlbnRTdWNjZXNzEhAKCGFnZW50X2lkGAEgASgJEhoKDWZpbmFsX21lc3NhZ2UYAiABKAlIAIgBARIXCg90b29sX2NhbGxfY291bnQYAyABKAUSPQoRYmFja2dyb3VuZF9yZWFzb24YBCABKA4yIi5hZ2VudC52MS5TdWJhZ2VudEJhY2tncm91bmRSZWFzb24SHAoPdHJhbnNjcmlwdF9wYXRoGAUgASgJSAGIAQFCEAoOX2ZpbmFsX21lc3NhZ2VCEgoQX3RyYW5zY3JpcHRfcGF0aCJCCg1TdWJhZ2VudEVycm9yEhUKCGFnZW50X2lkGAEgASgJSACIAQESDQoFZXJyb3IYAiABKAlCCwoJX2FnZW50X2lkInIKDlN1YmFnZW50UmVzdWx0EiwKB3N1Y2Nlc3MYASABKAsyGS5hZ2VudC52MS5TdWJhZ2VudFN1Y2Nlc3NIABIoCgVlcnJvchgCIAEoCzIXLmFnZW50LnYxLlN1YmFnZW50RXJyb3JIAEIICgZyZXN1bHQiOQoRU3ViYWdlbnRBd2FpdEFyZ3MSEAoIYWdlbnRfaWQYASABKAkSEgoKdGltZW91dF9tcxgCIAEoDSKiAQoVU3ViYWdlbnRBd2FpdENvbXBsZXRlEhAKCGFnZW50X2lkGAEgASgJEhwKD3RyYW5zY3JpcHRfcGF0aBgCIAEoCUgAiAEBEhcKD3Rvb2xfY2FsbF9jb3VudBgDIAEoBRIaCg1maW5hbF9tZXNzYWdlGAQgASgJSAGIAQFCEgoQX3RyYW5zY3JpcHRfcGF0aEIQCg5fZmluYWxfbWVzc2FnZSJfChlTdWJhZ2VudEF3YWl0U3RpbGxSdW5uaW5nEhAKCGFnZW50X2lkGAEgASgJEhwKD3RyYW5zY3JpcHRfcGF0aBgCIAEoCUgAiAEBQhIKEF90cmFuc2NyaXB0X3BhdGgiKQoVU3ViYWdlbnRBd2FpdE5vdEZvdW5kEhAKCGFnZW50X2lkGAEgASgJIkcKElN1YmFnZW50QXdhaXRFcnJvchIVCghhZ2VudF9pZBgBIAEoCUgAiAEBEg0KBWVycm9yGAIgASgJQgsKCV9hZ2VudF9pZCL3AQoTU3ViYWdlbnRBd2FpdFJlc3VsdBIzCghjb21wbGV0ZRgBIAEoCzIfLmFnZW50LnYxLlN1YmFnZW50QXdhaXRDb21wbGV0ZUgAEjwKDXN0aWxsX3J1bm5pbmcYAiABKAsyIy5hZ2VudC52MS5TdWJhZ2VudEF3YWl0U3RpbGxSdW5uaW5nSAASNAoJbm90X2ZvdW5kGAMgASgLMh8uYWdlbnQudjEuU3ViYWdlbnRBd2FpdE5vdEZvdW5kSAASLQoFZXJyb3IYBCABKAsyHC5hZ2VudC52MS5TdWJhZ2VudEF3YWl0RXJyb3JIAEIICgZyZXN1bHQiMwobRm9yY2VCYWNrZ3JvdW5kU3ViYWdlbnRBcmdzEhQKDHRvb2xfY2FsbF9pZBgBIAEoCSJYCh1Gb3JjZUJhY2tncm91bmRTdWJhZ2VudFJlc3VsdBI3CgZzdGF0dXMYASABKA4yJy5hZ2VudC52MS5Gb3JjZUJhY2tncm91bmRTdWJhZ2VudFN0YXR1cyIYChZQcmVDb21wYWN0UmVxdWVzdFF1ZXJ5IhsKGVN1YmFnZW50U3RhcnRSZXF1ZXN0UXVlcnkiGgoYU3ViYWdlbnRTdG9wUmVxdWVzdFF1ZXJ5IhgKFlByZVRvb2xVc2VSZXF1ZXN0UXVlcnkiGQoXUG9zdFRvb2xVc2VSZXF1ZXN0UXVlcnkiIAoeUG9zdFRvb2xVc2VGYWlsdXJlUmVxdWVzdFF1ZXJ5IiAKHkJlZm9yZVN1Ym1pdFByb21wdFJlcXVlc3RRdWVyeSIgCh5BZnRlckFnZW50UmVzcG9uc2VSZXF1ZXN0UXVlcnkiHwodQWZ0ZXJBZ2VudFRob3VnaHRSZXF1ZXN0UXVlcnkiEgoQU3RvcFJlcXVlc3RRdWVyeSJHChlQcmVDb21wYWN0UmVxdWVzdFJlc3BvbnNlEhkKDHVzZXJfbWVzc2FnZRgBIAEoCUgAiAEBQg8KDV91c2VyX21lc3NhZ2UiqgEKHFN1YmFnZW50U3RhcnRSZXF1ZXN0UmVzcG9uc2USFwoKcGVybWlzc2lvbhgBIAEoCUgAiAEBEhkKDHVzZXJfbWVzc2FnZRgCIAEoCUgBiAEBEh8KEmFkZGl0aW9uYWxfY29udGV4dBgDIAEoCUgCiAEBQg0KC19wZXJtaXNzaW9uQg8KDV91c2VyX21lc3NhZ2VCFQoTX2FkZGl0aW9uYWxfY29udGV4dCKJAQobU3ViYWdlbnRTdG9wUmVxdWVzdFJlc3BvbnNlEh0KEGZvbGxvd3VwX21lc3NhZ2UYASABKAlIAIgBARIfChJhZGRpdGlvbmFsX2NvbnRleHQYAiABKAlIAYgBAUITChFfZm9sbG93dXBfbWVzc2FnZUIVChNfYWRkaXRpb25hbF9jb250ZXh0IoMCChlQcmVUb29sVXNlUmVxdWVzdFJlc3BvbnNlEhcKCnBlcm1pc3Npb24YASABKAlIAIgBARIZCgx1c2VyX21lc3NhZ2UYAiABKAlIAYgBARIaCg1hZ2VudF9tZXNzYWdlGAMgASgJSAKIAQESGgoNdXBkYXRlZF9pbnB1dBgEIAEoCUgDiAEBEh8KEmFkZGl0aW9uYWxfY29udGV4dBgFIAEoCUgEiAEBQg0KC19wZXJtaXNzaW9uQg8KDV91c2VyX21lc3NhZ2VCEAoOX2FnZW50X21lc3NhZ2VCEAoOX3VwZGF0ZWRfaW5wdXRCFQoTX2FkZGl0aW9uYWxfY29udGV4dCJUChpQb3N0VG9vbFVzZVJlcXVlc3RSZXNwb25zZRIfChJhZGRpdGlvbmFsX2NvbnRleHQYASABKAlIAIgBAUIVChNfYWRkaXRpb25hbF9jb250ZXh0IlsKIVBvc3RUb29sVXNlRmFpbHVyZVJlcXVlc3RSZXNwb25zZRIfChJhZGRpdGlvbmFsX2NvbnRleHQYASABKAlIAIgBAUIVChNfYWRkaXRpb25hbF9jb250ZXh0IqsBCiFCZWZvcmVTdWJtaXRQcm9tcHRSZXF1ZXN0UmVzcG9uc2USFQoIY29udGludWUYASABKAhIAIgBARIZCgx1c2VyX21lc3NhZ2UYAiABKAlIAYgBARIfChJhZGRpdGlvbmFsX2NvbnRleHQYAyABKAlIAogBAUILCglfY29udGludWVCDwoNX3VzZXJfbWVzc2FnZUIVChNfYWRkaXRpb25hbF9jb250ZXh0IiMKIUFmdGVyQWdlbnRSZXNwb25zZVJlcXVlc3RSZXNwb25zZSIiCiBBZnRlckFnZW50VGhvdWdodFJlcXVlc3RSZXNwb25zZSJJChNTdG9wUmVxdWVzdFJlc3BvbnNlEh0KEGZvbGxvd3VwX21lc3NhZ2UYASABKAlIAIgBAUITChFfZm9sbG93dXBfbWVzc2FnZSKdBQoSRXhlY3V0ZUhvb2tSZXF1ZXN0EjcKC3ByZV9jb21wYWN0GAEgASgLMiAuYWdlbnQudjEuUHJlQ29tcGFjdFJlcXVlc3RRdWVyeUgAEj0KDnN1YmFnZW50X3N0YXJ0GAIgASgLMiMuYWdlbnQudjEuU3ViYWdlbnRTdGFydFJlcXVlc3RRdWVyeUgAEjsKDXN1YmFnZW50X3N0b3AYAyABKAsyIi5hZ2VudC52MS5TdWJhZ2VudFN0b3BSZXF1ZXN0UXVlcnlIABI4CgxwcmVfdG9vbF91c2UYBCABKAsyIC5hZ2VudC52MS5QcmVUb29sVXNlUmVxdWVzdFF1ZXJ5SAASOgoNcG9zdF90b29sX3VzZRgFIAEoCzIhLmFnZW50LnYxLlBvc3RUb29sVXNlUmVxdWVzdFF1ZXJ5SAASSQoVcG9zdF90b29sX3VzZV9mYWlsdXJlGAYgASgLMiguYWdlbnQudjEuUG9zdFRvb2xVc2VGYWlsdXJlUmVxdWVzdFF1ZXJ5SAASSAoUYmVmb3JlX3N1Ym1pdF9wcm9tcHQYByABKAsyKC5hZ2VudC52MS5CZWZvcmVTdWJtaXRQcm9tcHRSZXF1ZXN0UXVlcnlIABJIChRhZnRlcl9hZ2VudF9yZXNwb25zZRgIIAEoCzIoLmFnZW50LnYxLkFmdGVyQWdlbnRSZXNwb25zZVJlcXVlc3RRdWVyeUgAEkYKE2FmdGVyX2FnZW50X3Rob3VnaHQYCSABKAsyJy5hZ2VudC52MS5BZnRlckFnZW50VGhvdWdodFJlcXVlc3RRdWVyeUgAEioKBHN0b3AYCyABKAsyGi5hZ2VudC52MS5TdG9wUmVxdWVzdFF1ZXJ5SABCCQoHcmVxdWVzdCK9BQoTRXhlY3V0ZUhvb2tSZXNwb25zZRI6CgtwcmVfY29tcGFjdBgBIAEoCzIjLmFnZW50LnYxLlByZUNvbXBhY3RSZXF1ZXN0UmVzcG9uc2VIABJACg5zdWJhZ2VudF9zdGFydBgCIAEoCzImLmFnZW50LnYxLlN1YmFnZW50U3RhcnRSZXF1ZXN0UmVzcG9uc2VIABI+Cg1zdWJhZ2VudF9zdG9wGAMgASgLMiUuYWdlbnQudjEuU3ViYWdlbnRTdG9wUmVxdWVzdFJlc3BvbnNlSAASOwoMcHJlX3Rvb2xfdXNlGAQgASgLMiMuYWdlbnQudjEuUHJlVG9vbFVzZVJlcXVlc3RSZXNwb25zZUgAEj0KDXBvc3RfdG9vbF91c2UYBSABKAsyJC5hZ2VudC52MS5Qb3N0VG9vbFVzZVJlcXVlc3RSZXNwb25zZUgAEkwKFXBvc3RfdG9vbF91c2VfZmFpbHVyZRgGIAEoCzIrLmFnZW50LnYxLlBvc3RUb29sVXNlRmFpbHVyZVJlcXVlc3RSZXNwb25zZUgAEksKFGJlZm9yZV9zdWJtaXRfcHJvbXB0GAcgASgLMisuYWdlbnQudjEuQmVmb3JlU3VibWl0UHJvbXB0UmVxdWVzdFJlc3BvbnNlSAASSwoUYWZ0ZXJfYWdlbnRfcmVzcG9uc2UYCCABKAsyKy5hZ2VudC52MS5BZnRlckFnZW50UmVzcG9uc2VSZXF1ZXN0UmVzcG9uc2VIABJJChNhZnRlcl9hZ2VudF90aG91Z2h0GAkgASgLMiouYWdlbnQudjEuQWZ0ZXJBZ2VudFRob3VnaHRSZXF1ZXN0UmVzcG9uc2VIABItCgRzdG9wGAsgASgLMh0uYWdlbnQudjEuU3RvcFJlcXVlc3RSZXNwb25zZUgAQgoKCHJlc3BvbnNlIkAKD0V4ZWN1dGVIb29rQXJncxItCgdyZXF1ZXN0GAEgASgLMhwuYWdlbnQudjEuRXhlY3V0ZUhvb2tSZXF1ZXN0IkQKEUV4ZWN1dGVIb29rUmVzdWx0Ei8KCHJlc3BvbnNlGAEgASgLMh0uYWdlbnQudjEuRXhlY3V0ZUhvb2tSZXNwb25zZSIlChNTbWFydE1vZGVSaXNrVGFyZ2V0Eg4KBmFjdGlvbhgBIAEoCSJHCiZTbWFydE1vZGVDbGFzc2lmaWVyQ29udmVyc2F0aW9uTWVzc2FnZRIMCgRyb2xlGAEgASgJEg8KB2NvbnRlbnQYAiABKAki7gEKF1NtYXJ0TW9kZUNsYXNzaWZpZXJBcmdzEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRIjChZwYXJlbnRfY29udmVyc2F0aW9uX2lkGAIgASgJSACIAQESLQoGdGFyZ2V0GAMgASgLMh0uYWdlbnQudjEuU21hcnRNb2RlUmlza1RhcmdldBJOChRjb252ZXJzYXRpb25fY29udGV4dBgEIAMoCzIwLmFnZW50LnYxLlNtYXJ0TW9kZUNsYXNzaWZpZXJDb252ZXJzYXRpb25NZXNzYWdlQhkKF19wYXJlbnRfY29udmVyc2F0aW9uX2lkIoEBChpTbWFydE1vZGVDbGFzc2lmaWVyU3VjY2VzcxI3CghkZWNpc2lvbhgBIAEoDjIlLmFnZW50LnYxLlNtYXJ0TW9kZUNsYXNzaWZpZXJEZWNpc2lvbhIZCgxibG9ja19yZWFzb24YAiABKAlIAIgBAUIPCg1fYmxvY2tfcmVhc29uIikKGFNtYXJ0TW9kZUNsYXNzaWZpZXJFcnJvchINCgVlcnJvchgBIAEoCSKTAQoZU21hcnRNb2RlQ2xhc3NpZmllclJlc3VsdBI3CgdzdWNjZXNzGAEgASgLMiQuYWdlbnQudjEuU21hcnRNb2RlQ2xhc3NpZmllclN1Y2Nlc3NIABIzCgVlcnJvchgCIAEoCzIiLmFnZW50LnYxLlNtYXJ0TW9kZUNsYXNzaWZpZXJFcnJvckgAQggKBnJlc3VsdCI7ChVDYW52YXNEaWFnbm9zdGljc0FyZ3MSDAoEcGF0aBgBIAEoCRIUCgx0b29sX2NhbGxfaWQYAiABKAkiUwoYQ2FudmFzRGlhZ25vc3RpY3NTdWNjZXNzEgwKBHBhdGgYASABKAkSKQoLZGlhZ25vc3RpY3MYAiADKAsyFC5hZ2VudC52MS5EaWFnbm9zdGljIjUKFkNhbnZhc0RpYWdub3N0aWNzRXJyb3ISDAoEcGF0aBgBIAEoCRINCgVlcnJvchgCIAEoCSKNAQoXQ2FudmFzRGlhZ25vc3RpY3NSZXN1bHQSNQoHc3VjY2VzcxgBIAEoCzIiLmFnZW50LnYxLkNhbnZhc0RpYWdub3N0aWNzU3VjY2Vzc0gAEjEKBWVycm9yGAIgASgLMiAuYWdlbnQudjEuQ2FudmFzRGlhZ25vc3RpY3NFcnJvckgAQggKBnJlc3VsdCKsAQoVQ29udmVyc2F0aW9uU2VhcmNoSGl0EhcKD2NvbnZlcnNhdGlvbl9pZBgBIAEoCRINCgV0aXRsZRgCIAEoCRIyCgZzb3VyY2UYAyABKA4yIi5hZ2VudC52MS5Db252ZXJzYXRpb25TZWFyY2hTb3VyY2USFQoNdXBkYXRlZF9hdF9tcxgEIAEoAxIUCgdzbmlwcGV0GAUgASgJSACIAQFCCgoIX3NuaXBwZXQiggEKGUNvbnZlcnNhdGlvblNlYXJjaFN1Y2Nlc3MSLQoEaGl0cxgBIAMoCzIfLmFnZW50LnYxLkNvbnZlcnNhdGlvblNlYXJjaEhpdBIRCgl0cnVuY2F0ZWQYAiABKAgSDwoHcGFydGlhbBgDIAEoCBISCgpyZWJ1aWxkaW5nGAQgASgIIigKF0NvbnZlcnNhdGlvblNlYXJjaEVycm9yEg0KBWVycm9yGAEgASgJIlsKFkNvbnZlcnNhdGlvblNlYXJjaEFyZ3MSDQoFcXVlcnkYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJEhIKBWxpbWl0GAMgASgFSACIAQFCCAoGX2xpbWl0IpABChhDb252ZXJzYXRpb25TZWFyY2hSZXN1bHQSNgoHc3VjY2VzcxgBIAEoCzIjLmFnZW50LnYxLkNvbnZlcnNhdGlvblNlYXJjaFN1Y2Nlc3NIABIyCgVlcnJvchgCIAEoCzIhLmFnZW50LnYxLkNvbnZlcnNhdGlvblNlYXJjaEVycm9ySABCCAoGcmVzdWx0IlUKGEFnZW50U3RvcmVDb25mbGljdEN1cnNvchIVCg1qb3VybmFsX2Vwb2NoGAEgASgJEgsKA3NlcRgCIAEoBBIVCg1sYXN0X2V2ZW50X2lkGAMgASgJIqUDChdBZ2VudFN0b3JlQ29uZmxpY3RFdmVudBIJCgF2GAEgASgNEhAKCGV2ZW50X2lkGAIgASgJEhUKDWpvdXJuYWxfZXBvY2gYAyABKAkSCwoDc2VxGAQgASgEEg0KBXRzX21zGAUgASgEEgwKBGtpbmQYBiABKAkSFQoIc3RvcmVfaWQYByABKAlIAIgBARIeChFvcmlnaW5hbF9yZWxfcGF0aBgIIAEoCUgBiAEBEh4KEWNvbmZsaWN0X3JlbF9wYXRoGAkgASgJSAKIAQESHgoRb3JpZ2luYWxfYWJzX3BhdGgYCiABKAlIA4gBARIeChFjb25mbGljdF9hYnNfcGF0aBgLIAEoCUgEiAEBEhwKD3ByZXNlcnZlZF9ieXRlcxgMIAEoBEgFiAEBQgsKCV9zdG9yZV9pZEIUChJfb3JpZ2luYWxfcmVsX3BhdGhCFAoSX2NvbmZsaWN0X3JlbF9wYXRoQhQKEl9vcmlnaW5hbF9hYnNfcGF0aEIUChJfY29uZmxpY3RfYWJzX3BhdGhCEgoQX3ByZXNlcnZlZF9ieXRlcyKUAQoZQWdlbnRTdG9yZUNvbmZsaWN0U3VjY2VzcxIxCgZldmVudHMYASADKAsyIS5hZ2VudC52MS5BZ2VudFN0b3JlQ29uZmxpY3RFdmVudBI3CgtuZXh0X2N1cnNvchgCIAEoCzIiLmFnZW50LnYxLkFnZW50U3RvcmVDb25mbGljdEN1cnNvchILCgNnYXAYAyABKAgiKAoXQWdlbnRTdG9yZUNvbmZsaWN0RXJyb3ISDQoFZXJyb3IYASABKAkifgoWQWdlbnRTdG9yZUNvbmZsaWN0QXJncxI3CgZjdXJzb3IYASABKAsyIi5hZ2VudC52MS5BZ2VudFN0b3JlQ29uZmxpY3RDdXJzb3JIAIgBARIUCgdhZHZhbmNlGAIgASgISAGIAQFCCQoHX2N1cnNvckIKCghfYWR2YW5jZSKQAQoYQWdlbnRTdG9yZUNvbmZsaWN0UmVzdWx0EjYKB3N1Y2Nlc3MYASABKAsyIy5hZ2VudC52MS5BZ2VudFN0b3JlQ29uZmxpY3RTdWNjZXNzSAASMgoFZXJyb3IYAiABKAsyIS5hZ2VudC52MS5BZ2VudFN0b3JlQ29uZmxpY3RFcnJvckgAQggKBnJlc3VsdCJ8Cg5GaWxlRGlmZl9DaHVuaxIPCgdjb250ZW50GAEgASgJEg0KBWxpbmVzGAIgAygJEhEKCW9sZF9zdGFydBgDIAEoBRIRCglvbGRfbGluZXMYBCABKAUSEQoJbmV3X3N0YXJ0GAUgASgFEhEKCW5ld19saW5lcxgGIAEoBSKQAgoIRmlsZURpZmYSDQoFYWRkZWQYBCABKAUSDwoHcmVtb3ZlZBgFIAEoBRIMCgRmcm9tGAEgASgJEgoKAnRvGAIgASgJEigKBmNodW5rcxgDIAMoCzIYLmFnZW50LnYxLkZpbGVEaWZmX0NodW5rEiEKFGJlZm9yZV9maWxlX2NvbnRlbnRzGAYgASgJSACIAQESIAoTYWZ0ZXJfZmlsZV9jb250ZW50cxgHIAEoCUgBiAEBEhkKDGlzX2dlbmVyYXRlZBgIIAEoCEgCiAEBQhcKFV9iZWZvcmVfZmlsZV9jb250ZW50c0IWChRfYWZ0ZXJfZmlsZV9jb250ZW50c0IPCg1faXNfZ2VuZXJhdGVkIlsKB0dpdERpZmYSIQoFZGlmZnMYASADKAsyEi5hZ2VudC52MS5GaWxlRGlmZhItCglkaWZmX3R5cGUYAiABKA4yGi5hZ2VudC52MS5HaXREaWZmX0RpZmZUeXBlImgKHUdldERpZmZSZXNwb25zZV9TdWJtb2R1bGVEaWZmEhUKDXJlbGF0aXZlX3BhdGgYASABKAkSHwoEZGlmZhgCIAEoCzIRLmFnZW50LnYxLkdpdERpZmYSDwoHZXJyb3JlZBgDIAEoCCLyAwoOR2V0RGlmZlJlcXVlc3QSCwoDY3dkGAEgASgJEgsKA3JlZhgCIAEoCRIQCghiYXNlX3JlZhgDIAEoCRISCgptZXJnZV9iYXNlGAQgASgIEhQKDHRhcmdldF9wYXRocxgFIAMoCRIiChV1bmlmaWVkX2NvbnRleHRfbGluZXMYBiABKAVIAIgBARIbChNtYXhfdW50cmFja2VkX2ZpbGVzGAcgASgFEh8KF3N1Ym1vZHVsZV9yZWN1cnNlX2RlcHRoGAkgASgFEh0KFWluY2x1ZGVfc3BhY2VfY2hhbmdlcxgKIAEoCBIWCg5jb21taXR0ZWRfb25seRgLIAEoCBIYChBjb21wdXRlX3BhdGNoX2lkGAwgASgIEhwKD3JldHVybl9oZWFkX3NoYRgNIAEoCEgBiAEBEh8KEm1heF9yZXNwb25zZV9ieXRlcxgOIAEoBUgCiAEBEkEKDW91dHB1dF9mb3JtYXQYCCABKA4yJS5hZ2VudC52MS5HZXREaWZmUmVxdWVzdF9PdXRwdXRGb3JtYXRIA4gBAUIYChZfdW5pZmllZF9jb250ZXh0X2xpbmVzQhIKEF9yZXR1cm5faGVhZF9zaGFCFQoTX21heF9yZXNwb25zZV9ieXRlc0IQCg5fb3V0cHV0X2Zvcm1hdCL+AQoPR2V0RGlmZlJlc3BvbnNlEh8KBGRpZmYYASABKAsyES5hZ2VudC52MS5HaXREaWZmEkAKD3N1Ym1vZHVsZV9kaWZmcxgCIAMoCzInLmFnZW50LnYxLkdldERpZmZSZXNwb25zZV9TdWJtb2R1bGVEaWZmEhUKCHBhdGNoX2lkGAMgASgJSACIAQESFQoIaGVhZF9zaGEYBCABKAlIAYgBARIkChdoYXNfdW5jb21taXR0ZWRfY2hhbmdlcxgFIAEoCEgCiAEBQgsKCV9wYXRjaF9pZEILCglfaGVhZF9zaGFCGgoYX2hhc191bmNvbW1pdHRlZF9jaGFuZ2VzImQKDlBpUmVhZFRvb2xDYWxsEiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5QaVJlYWRFeGVjQXJncxIqCgZyZXN1bHQYAiABKAsyGi5hZ2VudC52MS5QaVJlYWRFeGVjUmVzdWx0ImQKDlBpQmFzaFRvb2xDYWxsEiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5QaUJhc2hFeGVjQXJncxIqCgZyZXN1bHQYAiABKAsyGi5hZ2VudC52MS5QaUJhc2hFeGVjUmVzdWx0ImQKDlBpRWRpdFRvb2xDYWxsEiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5QaUVkaXRFeGVjQXJncxIqCgZyZXN1bHQYAiABKAsyGi5hZ2VudC52MS5QaUVkaXRFeGVjUmVzdWx0ImcKD1BpV3JpdGVUb29sQ2FsbBInCgRhcmdzGAEgASgLMhkuYWdlbnQudjEuUGlXcml0ZUV4ZWNBcmdzEisKBnJlc3VsdBgCIAEoCzIbLmFnZW50LnYxLlBpV3JpdGVFeGVjUmVzdWx0ImQKDlBpR3JlcFRvb2xDYWxsEiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5QaUdyZXBFeGVjQXJncxIqCgZyZXN1bHQYAiABKAsyGi5hZ2VudC52MS5QaUdyZXBFeGVjUmVzdWx0ImQKDlBpRmluZFRvb2xDYWxsEiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5QaUZpbmRFeGVjQXJncxIqCgZyZXN1bHQYAiABKAsyGi5hZ2VudC52MS5QaUZpbmRFeGVjUmVzdWx0Il4KDFBpTHNUb29sQ2FsbBIkCgRhcmdzGAEgASgLMhYuYWdlbnQudjEuUGlMc0V4ZWNBcmdzEigKBnJlc3VsdBgCIAEoCzIYLmFnZW50LnYxLlBpTHNFeGVjUmVzdWx0IoEBChtTZWFyY2hDb252ZXJzYXRpb25zVG9vbENhbGwSLgoEYXJncxgBIAEoCzIgLmFnZW50LnYxLkNvbnZlcnNhdGlvblNlYXJjaEFyZ3MSMgoGcmVzdWx0GAIgASgLMiIuYWdlbnQudjEuQ29udmVyc2F0aW9uU2VhcmNoUmVzdWx0IjkKGkNvbm5lY3RTY21HaXRodWJSZXBvc2l0b3J5Eg0KBW93bmVyGAEgASgJEgwKBHJlcG8YAiABKAkifgoQQ29ubmVjdFNjbUdpdGh1YhI4CgpyZXBvc2l0b3J5GAEgASgLMiQuYWdlbnQudjEuQ29ubmVjdFNjbUdpdGh1YlJlcG9zaXRvcnkSHAoPZ2hlX2FwcGxpY2F0aW9uGAIgASgJSACIAQFCEgoQX2doZV9hcHBsaWNhdGlvbiJeCg5Db25uZWN0U2NtQXJncxIUCgx0b29sX2NhbGxfaWQYASABKAkSLAoGZ2l0aHViGAIgASgLMhouYWdlbnQudjEuQ29ubmVjdFNjbUdpdGh1YkgAQggKBnRhcmdldCITChFDb25uZWN0U2NtU3VjY2VzcyIgCg9Db25uZWN0U2NtRXJyb3ISDQoFZXJyb3IYASABKAkiJAoSQ29ubmVjdFNjbVJlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSKqAQoQQ29ubmVjdFNjbVJlc3VsdBIuCgdzdWNjZXNzGAEgASgLMhsuYWdlbnQudjEuQ29ubmVjdFNjbVN1Y2Nlc3NIABIqCgVlcnJvchgCIAEoCzIZLmFnZW50LnYxLkNvbm5lY3RTY21FcnJvckgAEjAKCHJlamVjdGVkGAMgASgLMhwuYWdlbnQudjEuQ29ubmVjdFNjbVJlamVjdGVkSABCCAoGcmVzdWx0ImgKEkNvbm5lY3RTY21Ub29sQ2FsbBImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuQ29ubmVjdFNjbUFyZ3MSKgoGcmVzdWx0GAIgASgLMhouYWdlbnQudjEuQ29ubmVjdFNjbVJlc3VsdCqIAQodQXBwbGllZEFnZW50Q2hhbmdlX0NoYW5nZVR5cGUSGwoXQ0hBTkdFX1RZUEVfVU5TUEVDSUZJRUQQABIXChNDSEFOR0VfVFlQRV9DUkVBVEVEEAESGAoUQ0hBTkdFX1RZUEVfTU9ESUZJRUQQAhIXChNDSEFOR0VfVFlQRV9ERUxFVEVEEAMqpAEKC01vdXNlQnV0dG9uEhwKGE1PVVNFX0JVVFRPTl9VTlNQRUNJRklFRBAAEhUKEU1PVVNFX0JVVFRPTl9MRUZUEAESFgoSTU9VU0VfQlVUVE9OX1JJR0hUEAISFwoTTU9VU0VfQlVUVE9OX01JRERMRRADEhUKEU1PVVNFX0JVVFRPTl9CQUNLEAQSGAoUTU9VU0VfQlVUVE9OX0ZPUldBUkQQBSqeAQoPU2Nyb2xsRGlyZWN0aW9uEiAKHFNDUk9MTF9ESVJFQ1RJT05fVU5TUEVDSUZJRUQQABIXChNTQ1JPTExfRElSRUNUSU9OX1VQEAESGQoVU0NST0xMX0RJUkVDVElPTl9ET1dOEAISGQoVU0NST0xMX0RJUkVDVElPTl9MRUZUEAMSGgoWU0NST0xMX0RJUkVDVElPTl9SSUdIVBAEKnAKEEN1cnNvclJ1bGVTb3VyY2USIgoeQ1VSU09SX1JVTEVfU09VUkNFX1VOU1BFQ0lGSUVEEAASGwoXQ1VSU09SX1JVTEVfU09VUkNFX1RFQU0QARIbChdDVVJTT1JfUlVMRV9TT1VSQ0VfVVNFUhACKrwBChJEaWFnbm9zdGljU2V2ZXJpdHkSIwofRElBR05PU1RJQ19TRVZFUklUWV9VTlNQRUNJRklFRBAAEh0KGURJQUdOT1NUSUNfU0VWRVJJVFlfRVJST1IQARIfChtESUFHTk9TVElDX1NFVkVSSVRZX1dBUk5JTkcQAhIjCh9ESUFHTk9TVElDX1NFVkVSSVRZX0lORk9STUFUSU9OEAMSHAoYRElBR05PU1RJQ19TRVZFUklUWV9ISU5UEAQqnAEKDVJlY29yZGluZ01vZGUSHgoaUkVDT1JESU5HX01PREVfVU5TUEVDSUZJRUQQABIiCh5SRUNPUkRJTkdfTU9ERV9TVEFSVF9SRUNPUkRJTkcQARIhCh1SRUNPUkRJTkdfTU9ERV9TQVZFX1JFQ09SRElORxACEiQKIFJFQ09SRElOR19NT0RFX0RJU0NBUkRfUkVDT1JESU5HEAMqkwEKH1JlcXVlc3RlZEZpbGVQYXRoUmVqZWN0ZWRSZWFzb24SMwovUkVRVUVTVEVEX0ZJTEVfUEFUSF9SRUpFQ1RFRF9SRUFTT05fVU5TUEVDSUZJRUQQABI7CjdSRVFVRVNURURfRklMRV9QQVRIX1JFSkVDVEVEX1JFQVNPTl9TTEFTSEVTX05PVF9BTExPV0VEEAEqrQEKC1BhY2thZ2VUeXBlEhwKGFBBQ0tBR0VfVFlQRV9VTlNQRUNJRklFRBAAEh8KG1BBQ0tBR0VfVFlQRV9DVVJTT1JfUFJPSkVDVBABEiAKHFBBQ0tBR0VfVFlQRV9DVVJTT1JfUEVSU09OQUwQAhIdChlQQUNLQUdFX1RZUEVfQ0xBVURFX1NLSUxMEAMSHgoaUEFDS0FHRV9UWVBFX0NMQVVERV9QTFVHSU4QBCp9ChJTYW5kYm94UG9saWN5X1R5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhYKElRZUEVfSU5TRUNVUkVfTk9ORRABEhwKGFRZUEVfV09SS1NQQUNFX1JFQURXUklURRACEhsKF1RZUEVfV09SS1NQQUNFX1JFQURPTkxZEAMqcQoPVGltZW91dEJlaGF2aW9yEiAKHFRJTUVPVVRfQkVIQVZJT1JfVU5TUEVDSUZJRUQQABIbChdUSU1FT1VUX0JFSEFWSU9SX0NBTkNFTBABEh8KG1RJTUVPVVRfQkVIQVZJT1JfQkFDS0dST1VORBACKnkKEFNoZWxsQWJvcnRSZWFzb24SIgoeU0hFTExfQUJPUlRfUkVBU09OX1VOU1BFQ0lGSUVEEAASIQodU0hFTExfQUJPUlRfUkVBU09OX1VTRVJfQUJPUlQQARIeChpTSEVMTF9BQk9SVF9SRUFTT05fVElNRU9VVBACKqoBChxDdXN0b21TdWJhZ2VudFBlcm1pc3Npb25Nb2RlEi8KK0NVU1RPTV9TVUJBR0VOVF9QRVJNSVNTSU9OX01PREVfVU5TUEVDSUZJRUQQABIrCidDVVNUT01fU1VCQUdFTlRfUEVSTUlTU0lPTl9NT0RFX0RFRkFVTFQQARIsCihDVVNUT01fU1VCQUdFTlRfUEVSTUlTU0lPTl9NT0RFX1JFQURPTkxZEAIqlQEKClRvZG9TdGF0dXMSGwoXVE9ET19TVEFUVVNfVU5TUEVDSUZJRUQQABIXChNUT0RPX1NUQVRVU19QRU5ESU5HEAESGwoXVE9ET19TVEFUVVNfSU5fUFJPR1JFU1MQAhIZChVUT0RPX1NUQVRVU19DT01QTEVURUQQAxIZChVUT0RPX1NUQVRVU19DQU5DRUxMRUQQBCpmCghDbGllbnRPUxIZChVDTElFTlRfT1NfVU5TUEVDSUZJRUQQABIVChFDTElFTlRfT1NfV0lORE9XUxABEhMKD0NMSUVOVF9PU19NQUNPUxACEhMKD0NMSUVOVF9PU19MSU5VWBADKuwBChxBcnRpZmFjdFVwbG9hZERpc3BhdGNoU3RhdHVzEi8KK0FSVElGQUNUX1VQTE9BRF9ESVNQQVRDSF9TVEFUVVNfVU5TUEVDSUZJRUQQABIsCihBUlRJRkFDVF9VUExPQURfRElTUEFUQ0hfU1RBVFVTX0FDQ0VQVEVEEAESLAooQVJUSUZBQ1RfVVBMT0FEX0RJU1BBVENIX1NUQVRVU19SRUpFQ1RFRBACEj8KO0FSVElGQUNUX1VQTE9BRF9ESVNQQVRDSF9TVEFUVVNfU0tJUFBFRF9BTFJFQURZX0lOX1BST0dSRVNTEAMqVwoKRnJhbWVfS2luZBIUChBLSU5EX1VOU1BFQ0lGSUVEEAASEAoMS0lORF9SRVFVRVNUEAESEQoNS0lORF9SRVNQT05TRRACEg4KCktJTkRfRVJST1IQAyqwAgoXQnVnYm90RGVlcGxpbmtFdmVudEtpbmQSKgomQlVHQk9UX0RFRVBMSU5LX0VWRU5UX0tJTkRfVU5TUEVDSUZJRUQQABImCiJCVUdCT1RfREVFUExJTktfRVZFTlRfS0lORF9DTElDS0VEEAESMwovQlVHQk9UX0RFRVBMSU5LX0VWRU5UX0tJTkRfSEFORExFRF9ESUFMT0dfU0hPV04QAhIzCi9CVUdCT1RfREVFUExJTktfRVZFTlRfS0lORF9IQU5ETEVEX0NIQVRfQ1JFQVRFRBADEiQKIEJVR0JPVF9ERUVQTElOS19FVkVOVF9LSU5EX0VSUk9SEAQSMQotQlVHQk9UX0RFRVBMSU5LX0VWRU5UX0tJTkRfSEFORExFRF9GSVhfSU5fV0VCEAUqygEKLENvbW1hbmRDbGFzc2lmaWVyUmVzdWx0X1N1Z2dlc3RlZFNhbmRib3hNb2RlEiYKIlNVR0dFU1RFRF9TQU5EQk9YX01PREVfVU5TUEVDSUZJRUQQABIiCh5TVUdHRVNURURfU0FOREJPWF9NT0RFX1NBTkRCT1gQARIlCiFTVUdHRVNURURfU0FOREJPWF9NT0RFX05PX1NBTkRCT1gQAhInCiNTVUdHRVNURURfU0FOREJPWF9NT0RFX1VOREVURVJNSU5FRBADKpABCiFTaGVsbEhvb2tBcHByb3ZhbFJlcXVpcmVtZW50X0tpbmQSNAowU0hFTExfSE9PS19BUFBST1ZBTF9SRVFVSVJFTUVOVF9LSU5EX1VOU1BFQ0lGSUVEEAASNQoxU0hFTExfSE9PS19BUFBST1ZBTF9SRVFVSVJFTUVOVF9LSU5EX0ZPUkNFX1BST01QVBABKo8BChVTaGVsbEJhY2tncm91bmRSZWFzb24SJwojU0hFTExfQkFDS0dST1VORF9SRUFTT05fVU5TUEVDSUZJRUQQABIjCh9TSEVMTF9CQUNLR1JPVU5EX1JFQVNPTl9USU1FT1VUEAESKAokU0hFTExfQkFDS0dST1VORF9SRUFTT05fVVNFUl9SRVFVRVNUEAIqpAEKGkZvcmNlQmFja2dyb3VuZFNoZWxsU3RhdHVzEi0KKUZPUkNFX0JBQ0tHUk9VTkRfU0hFTExfU1RBVFVTX1VOU1BFQ0lGSUVEEAASKgomRk9SQ0VfQkFDS0dST1VORF9TSEVMTF9TVEFUVVNfQUNDRVBURUQQARIrCidGT1JDRV9CQUNLR1JPVU5EX1NIRUxMX1NUQVRVU19OT1RfRk9VTkQQAirSAQoYU3ViYWdlbnRCYWNrZ3JvdW5kUmVhc29uEioKJlNVQkFHRU5UX0JBQ0tHUk9VTkRfUkVBU09OX1VOU1BFQ0lGSUVEEAASLAooU1VCQUdFTlRfQkFDS0dST1VORF9SRUFTT05fQUdFTlRfUkVRVUVTVBABEisKJ1NVQkFHRU5UX0JBQ0tHUk9VTkRfUkVBU09OX1VTRVJfUkVRVUVTVBACEi8KK1NVQkFHRU5UX0JBQ0tHUk9VTkRfUkVBU09OX1FVRVVFRF9GT0xMT1dfVVAQAyqwAQodRm9yY2VCYWNrZ3JvdW5kU3ViYWdlbnRTdGF0dXMSMAosRk9SQ0VfQkFDS0dST1VORF9TVUJBR0VOVF9TVEFUVVNfVU5TUEVDSUZJRUQQABItCilGT1JDRV9CQUNLR1JPVU5EX1NVQkFHRU5UX1NUQVRVU19BQ0NFUFRFRBABEi4KKkZPUkNFX0JBQ0tHUk9VTkRfU1VCQUdFTlRfU1RBVFVTX05PVF9GT1VORBACKqEBChtTbWFydE1vZGVDbGFzc2lmaWVyRGVjaXNpb24SLgoqU01BUlRfTU9ERV9DTEFTU0lGSUVSX0RFQ0lTSU9OX1VOU1BFQ0lGSUVEEAASKAokU01BUlRfTU9ERV9DTEFTU0lGSUVSX0RFQ0lTSU9OX0FMTE9XEAESKAokU01BUlRfTU9ERV9DTEFTU0lGSUVSX0RFQ0lTSU9OX0JMT0NLEAIqmAEKGENvbnZlcnNhdGlvblNlYXJjaFNvdXJjZRIqCiZDT05WRVJTQVRJT05fU0VBUkNIX1NPVVJDRV9VTlNQRUNJRklFRBAAEiQKIENPTlZFUlNBVElPTl9TRUFSQ0hfU09VUkNFX0xPQ0FMEAESKgomQ09OVkVSU0FUSU9OX1NFQVJDSF9TT1VSQ0VfQ0xPVURfQ0FDSEUQAirTAQobR2V0RGlmZlJlcXVlc3RfT3V0cHV0Rm9ybWF0Eh0KGU9VVFBVVF9GT1JNQVRfVU5TUEVDSUZJRUQQABIdChlPVVRQVVRfRk9STUFUX05BTUVfU1RBVFVTEAESKQolT1VUUFVUX0ZPUk1BVF9OQU1FX1NUQVRVU19BTkRfTlVNU1RBVBACEhwKGE9VVFBVVF9GT1JNQVRfRklMRV9ESUZGUxADEi0KKU9VVFBVVF9GT1JNQVRfRElGRlNfV0lUSF9CRUZPUkVfQU5EX0FGVEVSEAQqcQoQR2l0RGlmZl9EaWZmVHlwZRIZChVESUZGX1RZUEVfVU5TUEVDSUZJRUQQABIaChZESUZGX1RZUEVfRElGRl9UT19IRUFEEAESJgoiRElGRl9UWVBFX0RJRkZfRlJPTV9CUkFOQ0hfVE9fTUFJThACMocECgxBZ2VudFNlcnZpY2USQQoDUnVuEhwuYWdlbnQudjEuQWdlbnRDbGllbnRNZXNzYWdlGhwuYWdlbnQudjEuQWdlbnRTZXJ2ZXJNZXNzYWdlEj8KBlJ1blNTRRIXLmFnZW50LnYxLkJpZGlSZXF1ZXN0SWQaHC5hZ2VudC52MS5BZ2VudFNlcnZlck1lc3NhZ2USRAoJTmFtZUFnZW50EhouYWdlbnQudjEuTmFtZUFnZW50UmVxdWVzdBobLmFnZW50LnYxLk5hbWVBZ2VudFJlc3BvbnNlElYKD0dldFVzYWJsZU1vZGVscxIgLmFnZW50LnYxLkdldFVzYWJsZU1vZGVsc1JlcXVlc3QaIS5hZ2VudC52MS5HZXRVc2FibGVNb2RlbHNSZXNwb25zZRJoChVHZXREZWZhdWx0TW9kZWxGb3JDbGkSJi5hZ2VudC52MS5HZXREZWZhdWx0TW9kZWxGb3JDbGlSZXF1ZXN0GicuYWdlbnQudjEuR2V0RGVmYXVsdE1vZGVsRm9yQ2xpUmVzcG9uc2USawoWR2V0QWxsb3dlZE1vZGVsSW50ZW50cxInLmFnZW50LnYxLkdldEFsbG93ZWRNb2RlbEludGVudHNSZXF1ZXN0GiguYWdlbnQudjEuR2V0QWxsb3dlZE1vZGVsSW50ZW50c1Jlc3BvbnNlMrUICg5Db250cm9sU2VydmljZRJNCgxSZWFkVGV4dEZpbGUSHS5hZ2VudC52MS5SZWFkVGV4dEZpbGVSZXF1ZXN0Gh4uYWdlbnQudjEuUmVhZFRleHRGaWxlUmVzcG9uc2USUAoNV3JpdGVUZXh0RmlsZRIeLmFnZW50LnYxLldyaXRlVGV4dEZpbGVSZXF1ZXN0Gh8uYWdlbnQudjEuV3JpdGVUZXh0RmlsZVJlc3BvbnNlElMKDlJlYWRCaW5hcnlGaWxlEh8uYWdlbnQudjEuUmVhZEJpbmFyeUZpbGVSZXF1ZXN0GiAuYWdlbnQudjEuUmVhZEJpbmFyeUZpbGVSZXNwb25zZRJWCg9Xcml0ZUJpbmFyeUZpbGUSIC5hZ2VudC52MS5Xcml0ZUJpbmFyeUZpbGVSZXF1ZXN0GiEuYWdlbnQudjEuV3JpdGVCaW5hcnlGaWxlUmVzcG9uc2USbgoXR2V0V29ya3NwYWNlQ2hhbmdlc0hhc2gSKC5hZ2VudC52MS5HZXRXb3Jrc3BhY2VDaGFuZ2VzSGFzaFJlcXVlc3QaKS5hZ2VudC52MS5HZXRXb3Jrc3BhY2VDaGFuZ2VzSGFzaFJlc3BvbnNlEnEKGFJlZnJlc2hHaXRodWJBY2Nlc3NUb2tlbhIpLmFnZW50LnYxLlJlZnJlc2hHaXRodWJBY2Nlc3NUb2tlblJlcXVlc3QaKi5hZ2VudC52MS5SZWZyZXNoR2l0aHViQWNjZXNzVG9rZW5SZXNwb25zZRJrChZXYXJtUmVtb3RlQWNjZXNzU2VydmVyEicuYWdlbnQudjEuV2FybVJlbW90ZUFjY2Vzc1NlcnZlclJlcXVlc3QaKC5hZ2VudC52MS5XYXJtUmVtb3RlQWNjZXNzU2VydmVyUmVzcG9uc2USUAoNTGlzdEFydGlmYWN0cxIeLmFnZW50LnYxLkxpc3RBcnRpZmFjdHNSZXF1ZXN0Gh8uYWdlbnQudjEuTGlzdEFydGlmYWN0c1Jlc3BvbnNlElYKD1VwbG9hZEFydGlmYWN0cxIgLmFnZW50LnYxLlVwbG9hZEFydGlmYWN0c1JlcXVlc3QaIS5hZ2VudC52MS5VcGxvYWRBcnRpZmFjdHNSZXNwb25zZRJiChNHZXRNY3BSZWZyZXNoVG9rZW5zEiQuYWdlbnQudjEuR2V0TWNwUmVmcmVzaFRva2Vuc1JlcXVlc3QaJS5hZ2VudC52MS5HZXRNY3BSZWZyZXNoVG9rZW5zUmVzcG9uc2USdwoaVXBkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXMSKy5hZ2VudC52MS5VcGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlc1JlcXVlc3QaLC5hZ2VudC52MS5VcGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlc1Jlc3BvbnNlMg0KC0V4ZWNTZXJ2aWNlMlEKIlByaXZhdGVXb3JrZXJCcmlkZ2VFeHRlcm5hbFNlcnZpY2USKwoHQ29ubmVjdBIPLmFnZW50LnYxLkZyYW1lGg8uYWdlbnQudjEuRnJhbWUyeAoQTGlmZWN5Y2xlU2VydmljZRIxCg1SZXNldEluc3RhbmNlEg8uYWdlbnQudjEuRW1wdHkaDy5hZ2VudC52MS5FbXB0eRIxCg1SZW5ld0luc3RhbmNlEg8uYWdlbnQudjEuRW1wdHkaDy5hZ2VudC52MS5FbXB0eWIGcHJvdG8z"); + fileDesc("CgthZ2VudC5wcm90bxIIYWdlbnQudjEicgoOR2xvYlRvb2xSZXN1bHQSLAoHc3VjY2VzcxgBIAEoCzIZLmFnZW50LnYxLkdsb2JUb29sU3VjY2Vzc0gAEigKBWVycm9yGAIgASgLMhcuYWdlbnQudjEuR2xvYlRvb2xFcnJvckgAQggKBnJlc3VsdCIeCg1HbG9iVG9vbEVycm9yEg0KBWVycm9yGAEgASgJIokBCg9HbG9iVG9vbFN1Y2Nlc3MSDwoHcGF0dGVybhgBIAEoCRIMCgRwYXRoGAIgASgJEg0KBWZpbGVzGAMgAygJEhMKC3RvdGFsX2ZpbGVzGAQgASgFEhgKEGNsaWVudF90cnVuY2F0ZWQYBSABKAgSGQoRcmlwZ3JlcF90cnVuY2F0ZWQYBiABKAgiRgoMR2xvYlRvb2xDYWxsEgwKBGFyZ3MYASABKAwSKAoGcmVzdWx0GAIgASgLMhguYWdlbnQudjEuR2xvYlRvb2xSZXN1bHQibQoRUmVhZExpbnRzVG9vbENhbGwSKQoEYXJncxgBIAEoCzIbLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xBcmdzEi0KBnJlc3VsdBgCIAEoCzIdLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xSZXN1bHQiIgoRUmVhZExpbnRzVG9vbEFyZ3MSDQoFcGF0aHMYASADKAkigQEKE1JlYWRMaW50c1Rvb2xSZXN1bHQSMQoHc3VjY2VzcxgBIAEoCzIeLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xTdWNjZXNzSAASLQoFZXJyb3IYAiABKAsyHC5hZ2VudC52MS5SZWFkTGludHNUb29sRXJyb3JIAEIICgZyZXN1bHQiewoUUmVhZExpbnRzVG9vbFN1Y2Nlc3MSMwoQZmlsZV9kaWFnbm9zdGljcxgBIAMoCzIZLmFnZW50LnYxLkZpbGVEaWFnbm9zdGljcxITCgt0b3RhbF9maWxlcxgCIAEoBRIZChF0b3RhbF9kaWFnbm9zdGljcxgDIAEoBSJpCg9GaWxlRGlhZ25vc3RpY3MSDAoEcGF0aBgBIAEoCRItCgtkaWFnbm9zdGljcxgCIAMoCzIYLmFnZW50LnYxLkRpYWdub3N0aWNJdGVtEhkKEWRpYWdub3N0aWNzX2NvdW50GAMgASgFIqsBCg5EaWFnbm9zdGljSXRlbRIuCghzZXZlcml0eRgBIAEoDjIcLmFnZW50LnYxLkRpYWdub3N0aWNTZXZlcml0eRIoCgVyYW5nZRgCIAEoCzIZLmFnZW50LnYxLkRpYWdub3N0aWNSYW5nZRIPCgdtZXNzYWdlGAMgASgJEg4KBnNvdXJjZRgEIAEoCRIMCgRjb2RlGAUgASgJEhAKCGlzX3N0YWxlGAYgASgIIlUKD0RpYWdub3N0aWNSYW5nZRIhCgVzdGFydBgBIAEoCzISLmFnZW50LnYxLlBvc2l0aW9uEh8KA2VuZBgCIAEoCzISLmFnZW50LnYxLlBvc2l0aW9uIisKElJlYWRMaW50c1Rvb2xFcnJvchIVCg1lcnJvcl9tZXNzYWdlGAEgASgJIj0KDE1jcFRvb2xFcnJvchINCgVlcnJvchgBIAEoCRIeChZyZWFkX3Rvb2xfZGVmX3JlbWluZGVyGAIgASgJItIBCg1NY3BUb29sUmVzdWx0EicKB3N1Y2Nlc3MYASABKAsyFC5hZ2VudC52MS5NY3BTdWNjZXNzSAASJwoFZXJyb3IYAiABKAsyFi5hZ2VudC52MS5NY3BUb29sRXJyb3JIABIpCghyZWplY3RlZBgDIAEoCzIVLmFnZW50LnYxLk1jcFJlamVjdGVkSAASOgoRcGVybWlzc2lvbl9kZW5pZWQYBCABKAsyHS5hZ2VudC52MS5NY3BQZXJtaXNzaW9uRGVuaWVkSABCCAoGcmVzdWx0IoEBCgtNY3BUb29sQ2FsbBIfCgRhcmdzGAEgASgLMhEuYWdlbnQudjEuTWNwQXJncxInCgZyZXN1bHQYAiABKAsyFy5hZ2VudC52MS5NY3BUb29sUmVzdWx0EhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQFCDgoMX2Rlc2NyaXB0aW9uIm0KEVNlbVNlYXJjaFRvb2xDYWxsEikKBGFyZ3MYASABKAsyGy5hZ2VudC52MS5TZW1TZWFyY2hUb29sQXJncxItCgZyZXN1bHQYAiABKAsyHS5hZ2VudC52MS5TZW1TZWFyY2hUb29sUmVzdWx0IlMKEVNlbVNlYXJjaFRvb2xBcmdzEg0KBXF1ZXJ5GAEgASgJEhoKEnRhcmdldF9kaXJlY3RvcmllcxgCIAMoCRITCgtleHBsYW5hdGlvbhgDIAEoCSKBAQoTU2VtU2VhcmNoVG9vbFJlc3VsdBIxCgdzdWNjZXNzGAEgASgLMh4uYWdlbnQudjEuU2VtU2VhcmNoVG9vbFN1Y2Nlc3NIABItCgVlcnJvchgCIAEoCzIcLmFnZW50LnYxLlNlbVNlYXJjaFRvb2xFcnJvckgAQggKBnJlc3VsdCI9ChRTZW1TZWFyY2hUb29sU3VjY2VzcxIPCgdyZXN1bHRzGAEgASgJEhQKDGNvZGVfcmVzdWx0cxgCIAMoDCIrChJTZW1TZWFyY2hUb29sRXJyb3ISFQoNZXJyb3JfbWVzc2FnZRgBIAEoCSKCAQoYTGlzdE1jcFJlc291cmNlc1Rvb2xDYWxsEjAKBGFyZ3MYASABKAsyIi5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzRXhlY0FyZ3MSNAoGcmVzdWx0GAIgASgLMiQuYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc0V4ZWNSZXN1bHQifwoXUmVhZE1jcFJlc291cmNlVG9vbENhbGwSLwoEYXJncxgBIAEoCzIhLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZUV4ZWNBcmdzEjMKBnJlc3VsdBgCIAEoCzIjLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZUV4ZWNSZXN1bHQiWQoNRmV0Y2hUb29sQ2FsbBIhCgRhcmdzGAEgASgLMhMuYWdlbnQudjEuRmV0Y2hBcmdzEiUKBnJlc3VsdBgCIAEoCzIVLmFnZW50LnYxLkZldGNoUmVzdWx0Im4KFFJlY29yZFNjcmVlblRvb2xDYWxsEigKBGFyZ3MYASABKAsyGi5hZ2VudC52MS5SZWNvcmRTY3JlZW5BcmdzEiwKBnJlc3VsdBgCIAEoCzIcLmFnZW50LnYxLlJlY29yZFNjcmVlblJlc3VsdCJ3ChdXcml0ZVNoZWxsU3RkaW5Ub29sQ2FsbBIrCgRhcmdzGAEgASgLMh0uYWdlbnQudjEuV3JpdGVTaGVsbFN0ZGluQXJncxIvCgZyZXN1bHQYAiABKAsyHy5hZ2VudC52MS5Xcml0ZVNoZWxsU3RkaW5SZXN1bHQisQEKC1JlZmxlY3RBcmdzEiIKGnVuZXhwZWN0ZWRfYWN0aW9uX291dGNvbWVzGAEgASgJEh0KFXJlbGV2YW50X2luc3RydWN0aW9ucxgCIAEoCRIZChFzY2VuYXJpb19hbmFseXNpcxgDIAEoCRIaChJjcml0aWNhbF9zeW50aGVzaXMYBCABKAkSEgoKbmV4dF9zdGVwcxgFIAEoCRIUCgx0b29sX2NhbGxfaWQYBiABKAkibwoNUmVmbGVjdFJlc3VsdBIrCgdzdWNjZXNzGAEgASgLMhguYWdlbnQudjEuUmVmbGVjdFN1Y2Nlc3NIABInCgVlcnJvchgCIAEoCzIWLmFnZW50LnYxLlJlZmxlY3RFcnJvckgAQggKBnJlc3VsdCIQCg5SZWZsZWN0U3VjY2VzcyIdCgxSZWZsZWN0RXJyb3ISDQoFZXJyb3IYASABKAkiXwoPUmVmbGVjdFRvb2xDYWxsEiMKBGFyZ3MYASABKAsyFS5hZ2VudC52MS5SZWZsZWN0QXJncxInCgZyZXN1bHQYAiABKAsyFy5hZ2VudC52MS5SZWZsZWN0UmVzdWx0IlkKF1N0YXJ0R3JpbmRFeGVjdXRpb25BcmdzEhgKC2V4cGxhbmF0aW9uGAEgASgJSACIAQESFAoMdG9vbF9jYWxsX2lkGAIgASgJQg4KDF9leHBsYW5hdGlvbiKTAQoZU3RhcnRHcmluZEV4ZWN1dGlvblJlc3VsdBI3CgdzdWNjZXNzGAEgASgLMiQuYWdlbnQudjEuU3RhcnRHcmluZEV4ZWN1dGlvblN1Y2Nlc3NIABIzCgVlcnJvchgCIAEoCzIiLmFnZW50LnYxLlN0YXJ0R3JpbmRFeGVjdXRpb25FcnJvckgAQggKBnJlc3VsdCIcChpTdGFydEdyaW5kRXhlY3V0aW9uU3VjY2VzcyIpChhTdGFydEdyaW5kRXhlY3V0aW9uRXJyb3ISDQoFZXJyb3IYASABKAkigwEKG1N0YXJ0R3JpbmRFeGVjdXRpb25Ub29sQ2FsbBIvCgRhcmdzGAEgASgLMiEuYWdlbnQudjEuU3RhcnRHcmluZEV4ZWN1dGlvbkFyZ3MSMwoGcmVzdWx0GAIgASgLMiMuYWdlbnQudjEuU3RhcnRHcmluZEV4ZWN1dGlvblJlc3VsdCJYChZTdGFydEdyaW5kUGxhbm5pbmdBcmdzEhgKC2V4cGxhbmF0aW9uGAEgASgJSACIAQESFAoMdG9vbF9jYWxsX2lkGAIgASgJQg4KDF9leHBsYW5hdGlvbiKQAQoYU3RhcnRHcmluZFBsYW5uaW5nUmVzdWx0EjYKB3N1Y2Nlc3MYASABKAsyIy5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdTdWNjZXNzSAASMgoFZXJyb3IYAiABKAsyIS5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdFcnJvckgAQggKBnJlc3VsdCIbChlTdGFydEdyaW5kUGxhbm5pbmdTdWNjZXNzIigKF1N0YXJ0R3JpbmRQbGFubmluZ0Vycm9yEg0KBWVycm9yGAEgASgJIoABChpTdGFydEdyaW5kUGxhbm5pbmdUb29sQ2FsbBIuCgRhcmdzGAEgASgLMiAuYWdlbnQudjEuU3RhcnRHcmluZFBsYW5uaW5nQXJncxIyCgZyZXN1bHQYAiABKAsyIi5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdSZXN1bHQinAEKCFRhc2tBcmdzEhMKC2Rlc2NyaXB0aW9uGAEgASgJEg4KBnByb21wdBgCIAEoCRItCg1zdWJhZ2VudF90eXBlGAMgASgLMhYuYWdlbnQudjEuU3ViYWdlbnRUeXBlEhIKBW1vZGVsGAQgASgJSACIAQESEwoGcmVzdW1lGAUgASgJSAGIAQFCCAoGX21vZGVsQgkKB19yZXN1bWUiqgEKC1Rhc2tTdWNjZXNzEjYKEmNvbnZlcnNhdGlvbl9zdGVwcxgBIAMoCzIaLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0ZXASFQoIYWdlbnRfaWQYAiABKAlIAIgBARIVCg1pc19iYWNrZ3JvdW5kGAMgASgIEhgKC2R1cmF0aW9uX21zGAQgASgESAGIAQFCCwoJX2FnZW50X2lkQg4KDF9kdXJhdGlvbl9tcyIaCglUYXNrRXJyb3ISDQoFZXJyb3IYASABKAkiZgoKVGFza1Jlc3VsdBIoCgdzdWNjZXNzGAEgASgLMhUuYWdlbnQudjEuVGFza1N1Y2Nlc3NIABIkCgVlcnJvchgCIAEoCzITLmFnZW50LnYxLlRhc2tFcnJvckgAQggKBnJlc3VsdCJWCgxUYXNrVG9vbENhbGwSIAoEYXJncxgBIAEoCzISLmFnZW50LnYxLlRhc2tBcmdzEiQKBnJlc3VsdBgCIAEoCzIULmFnZW50LnYxLlRhc2tSZXN1bHQiTAoRVGFza1Rvb2xDYWxsRGVsdGESNwoSaW50ZXJhY3Rpb25fdXBkYXRlGAEgASgLMhsuYWdlbnQudjEuSW50ZXJhY3Rpb25VcGRhdGUivhQKCFRvb2xDYWxsEjIKD3NoZWxsX3Rvb2xfY2FsbBgBIAEoCzIXLmFnZW50LnYxLlNoZWxsVG9vbENhbGxIABI0ChBkZWxldGVfdG9vbF9jYWxsGAMgASgLMhguYWdlbnQudjEuRGVsZXRlVG9vbENhbGxIABIwCg5nbG9iX3Rvb2xfY2FsbBgEIAEoCzIWLmFnZW50LnYxLkdsb2JUb29sQ2FsbEgAEjAKDmdyZXBfdG9vbF9jYWxsGAUgASgLMhYuYWdlbnQudjEuR3JlcFRvb2xDYWxsSAASMAoOcmVhZF90b29sX2NhbGwYCCABKAsyFi5hZ2VudC52MS5SZWFkVG9vbENhbGxIABI/ChZ1cGRhdGVfdG9kb3NfdG9vbF9jYWxsGAkgASgLMh0uYWdlbnQudjEuVXBkYXRlVG9kb3NUb29sQ2FsbEgAEjsKFHJlYWRfdG9kb3NfdG9vbF9jYWxsGAogASgLMhsuYWdlbnQudjEuUmVhZFRvZG9zVG9vbENhbGxIABIwCg5lZGl0X3Rvb2xfY2FsbBgMIAEoCzIWLmFnZW50LnYxLkVkaXRUb29sQ2FsbEgAEiwKDGxzX3Rvb2xfY2FsbBgNIAEoCzIULmFnZW50LnYxLkxzVG9vbENhbGxIABI7ChRyZWFkX2xpbnRzX3Rvb2xfY2FsbBgOIAEoCzIbLmFnZW50LnYxLlJlYWRMaW50c1Rvb2xDYWxsSAASLgoNbWNwX3Rvb2xfY2FsbBgPIAEoCzIVLmFnZW50LnYxLk1jcFRvb2xDYWxsSAASOwoUc2VtX3NlYXJjaF90b29sX2NhbGwYECABKAsyGy5hZ2VudC52MS5TZW1TZWFyY2hUb29sQ2FsbEgAEj0KFWNyZWF0ZV9wbGFuX3Rvb2xfY2FsbBgRIAEoCzIcLmFnZW50LnYxLkNyZWF0ZVBsYW5Ub29sQ2FsbEgAEjsKFHdlYl9zZWFyY2hfdG9vbF9jYWxsGBIgASgLMhsuYWdlbnQudjEuV2ViU2VhcmNoVG9vbENhbGxIABIwCg50YXNrX3Rvb2xfY2FsbBgTIAEoCzIWLmFnZW50LnYxLlRhc2tUb29sQ2FsbEgAEkoKHGxpc3RfbWNwX3Jlc291cmNlc190b29sX2NhbGwYFCABKAsyIi5hZ2VudC52MS5MaXN0TWNwUmVzb3VyY2VzVG9vbENhbGxIABJIChtyZWFkX21jcF9yZXNvdXJjZV90b29sX2NhbGwYFSABKAsyIS5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VUb29sQ2FsbEgAEkYKGmFwcGx5X2FnZW50X2RpZmZfdG9vbF9jYWxsGBYgASgLMiAuYWdlbnQudjEuQXBwbHlBZ2VudERpZmZUb29sQ2FsbEgAEj8KFmFza19xdWVzdGlvbl90b29sX2NhbGwYFyABKAsyHS5hZ2VudC52MS5Bc2tRdWVzdGlvblRvb2xDYWxsSAASMgoPZmV0Y2hfdG9vbF9jYWxsGBggASgLMhcuYWdlbnQudjEuRmV0Y2hUb29sQ2FsbEgAEj0KFXN3aXRjaF9tb2RlX3Rvb2xfY2FsbBgZIAEoCzIcLmFnZW50LnYxLlN3aXRjaE1vZGVUb29sQ2FsbEgAEjsKFGV4YV9zZWFyY2hfdG9vbF9jYWxsGBogASgLMhsuYWdlbnQudjEuRXhhU2VhcmNoVG9vbENhbGxIABI5ChNleGFfZmV0Y2hfdG9vbF9jYWxsGBsgASgLMhouYWdlbnQudjEuRXhhRmV0Y2hUb29sQ2FsbEgAEkMKGGdlbmVyYXRlX2ltYWdlX3Rvb2xfY2FsbBgcIAEoCzIfLmFnZW50LnYxLkdlbmVyYXRlSW1hZ2VUb29sQ2FsbEgAEkEKF3JlY29yZF9zY3JlZW5fdG9vbF9jYWxsGB0gASgLMh4uYWdlbnQudjEuUmVjb3JkU2NyZWVuVG9vbENhbGxIABI/ChZjb21wdXRlcl91c2VfdG9vbF9jYWxsGB4gASgLMh0uYWdlbnQudjEuQ29tcHV0ZXJVc2VUb29sQ2FsbEgAEkgKG3dyaXRlX3NoZWxsX3N0ZGluX3Rvb2xfY2FsbBgfIAEoCzIhLmFnZW50LnYxLldyaXRlU2hlbGxTdGRpblRvb2xDYWxsSAASNgoRcmVmbGVjdF90b29sX2NhbGwYICABKAsyGS5hZ2VudC52MS5SZWZsZWN0VG9vbENhbGxIABJOCh5zZXR1cF92bV9lbnZpcm9ubWVudF90b29sX2NhbGwYISABKAsyJC5hZ2VudC52MS5TZXR1cFZtRW52aXJvbm1lbnRUb29sQ2FsbEgAEjoKE3RydW5jYXRlZF90b29sX2NhbGwYIiABKAsyGy5hZ2VudC52MS5UcnVuY2F0ZWRUb29sQ2FsbEgAElAKH3N0YXJ0X2dyaW5kX2V4ZWN1dGlvbl90b29sX2NhbGwYIyABKAsyJS5hZ2VudC52MS5TdGFydEdyaW5kRXhlY3V0aW9uVG9vbENhbGxIABJOCh5zdGFydF9ncmluZF9wbGFubmluZ190b29sX2NhbGwYJCABKAsyJC5hZ2VudC52MS5TdGFydEdyaW5kUGxhbm5pbmdUb29sQ2FsbEgAEjUKEXBpX3JlYWRfdG9vbF9jYWxsGD0gASgLMhguYWdlbnQudjEuUGlSZWFkVG9vbENhbGxIABI1ChFwaV9iYXNoX3Rvb2xfY2FsbBg+IAEoCzIYLmFnZW50LnYxLlBpQmFzaFRvb2xDYWxsSAASNQoRcGlfZWRpdF90b29sX2NhbGwYPyABKAsyGC5hZ2VudC52MS5QaUVkaXRUb29sQ2FsbEgAEjcKEnBpX3dyaXRlX3Rvb2xfY2FsbBhAIAEoCzIZLmFnZW50LnYxLlBpV3JpdGVUb29sQ2FsbEgAEjUKEXBpX2dyZXBfdG9vbF9jYWxsGEEgASgLMhguYWdlbnQudjEuUGlHcmVwVG9vbENhbGxIABI1ChFwaV9maW5kX3Rvb2xfY2FsbBhCIAEoCzIYLmFnZW50LnYxLlBpRmluZFRvb2xDYWxsSAASMQoPcGlfbHNfdG9vbF9jYWxsGEMgASgLMhYuYWdlbnQudjEuUGlMc1Rvb2xDYWxsSAASPQoVY29ubmVjdF9zY21fdG9vbF9jYWxsGEQgASgLMhwuYWdlbnQudjEuQ29ubmVjdFNjbVRvb2xDYWxsSAASTwoec2VhcmNoX2NvbnZlcnNhdGlvbnNfdG9vbF9jYWxsGEUgASgLMiUuYWdlbnQudjEuU2VhcmNoQ29udmVyc2F0aW9uc1Rvb2xDYWxsSAASNgoTd2ViX2ZldGNoX3Rvb2xfY2FsbBglIAEoCzIXLmFnZW50LnYxLkZldGNoVG9vbENhbGxIABIZCgx0b29sX2NhbGxfaWQYOSABKAlIAYgBAUIGCgR0b29sQg8KDV90b29sX2NhbGxfaWQiFwoVVHJ1bmNhdGVkVG9vbENhbGxBcmdzIhoKGFRydW5jYXRlZFRvb2xDYWxsU3VjY2VzcyInChZUcnVuY2F0ZWRUb29sQ2FsbEVycm9yEg0KBWVycm9yGAEgASgJIo0BChdUcnVuY2F0ZWRUb29sQ2FsbFJlc3VsdBI1CgdzdWNjZXNzGAEgASgLMiIuYWdlbnQudjEuVHJ1bmNhdGVkVG9vbENhbGxTdWNjZXNzSAASMQoFZXJyb3IYAiABKAsyIC5hZ2VudC52MS5UcnVuY2F0ZWRUb29sQ2FsbEVycm9ySABCCAoGcmVzdWx0IpQBChFUcnVuY2F0ZWRUb29sQ2FsbBIdChVvcmlnaW5hbF9zdGVwX2Jsb2JfaWQYASABKAwSLQoEYXJncxgCIAEoCzIfLmFnZW50LnYxLlRydW5jYXRlZFRvb2xDYWxsQXJncxIxCgZyZXN1bHQYAyABKAsyIS5hZ2VudC52MS5UcnVuY2F0ZWRUb29sQ2FsbFJlc3VsdCLRAQoNVG9vbENhbGxEZWx0YRI9ChVzaGVsbF90b29sX2NhbGxfZGVsdGEYASABKAsyHC5hZ2VudC52MS5TaGVsbFRvb2xDYWxsRGVsdGFIABI7ChR0YXNrX3Rvb2xfY2FsbF9kZWx0YRgCIAEoCzIbLmFnZW50LnYxLlRhc2tUb29sQ2FsbERlbHRhSAASOwoUZWRpdF90b29sX2NhbGxfZGVsdGEYAyABKAsyGy5hZ2VudC52MS5FZGl0VG9vbENhbGxEZWx0YUgAQgcKBWRlbHRhIrYBChBDb252ZXJzYXRpb25TdGVwEjcKEWFzc2lzdGFudF9tZXNzYWdlGAEgASgLMhouYWdlbnQudjEuQXNzaXN0YW50TWVzc2FnZUgAEicKCXRvb2xfY2FsbBgCIAEoCzISLmFnZW50LnYxLlRvb2xDYWxsSAASNQoQdGhpbmtpbmdfbWVzc2FnZRgDIAEoCzIZLmFnZW50LnYxLlRoaW5raW5nTWVzc2FnZUgAQgkKB21lc3NhZ2UigQQKEkNvbnZlcnNhdGlvbkFjdGlvbhI6ChN1c2VyX21lc3NhZ2VfYWN0aW9uGAEgASgLMhsuYWdlbnQudjEuVXNlck1lc3NhZ2VBY3Rpb25IABIvCg1yZXN1bWVfYWN0aW9uGAIgASgLMhYuYWdlbnQudjEuUmVzdW1lQWN0aW9uSAASLwoNY2FuY2VsX2FjdGlvbhgDIAEoCzIWLmFnZW50LnYxLkNhbmNlbEFjdGlvbkgAEjUKEHN1bW1hcml6ZV9hY3Rpb24YBCABKAsyGS5hZ2VudC52MS5TdW1tYXJpemVBY3Rpb25IABI8ChRzaGVsbF9jb21tYW5kX2FjdGlvbhgFIAEoCzIcLmFnZW50LnYxLlNoZWxsQ29tbWFuZEFjdGlvbkgAEjYKEXN0YXJ0X3BsYW5fYWN0aW9uGAYgASgLMhkuYWdlbnQudjEuU3RhcnRQbGFuQWN0aW9uSAASOgoTZXhlY3V0ZV9wbGFuX2FjdGlvbhgHIAEoCzIbLmFnZW50LnYxLkV4ZWN1dGVQbGFuQWN0aW9uSAASWgokYXN5bmNfYXNrX3F1ZXN0aW9uX2NvbXBsZXRpb25fYWN0aW9uGAggASgLMiouYWdlbnQudjEuQXN5bmNBc2tRdWVzdGlvbkNvbXBsZXRpb25BY3Rpb25IAEIICgZhY3Rpb24ivwEKEVVzZXJNZXNzYWdlQWN0aW9uEisKDHVzZXJfbWVzc2FnZRgBIAEoCzIVLmFnZW50LnYxLlVzZXJNZXNzYWdlEjEKD3JlcXVlc3RfY29udGV4dBgCIAEoCzIYLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0EikKHHNlbmRfdG9faW50ZXJhY3Rpb25fbGlzdGVuZXIYAyABKAhIAIgBAUIfCh1fc2VuZF90b19pbnRlcmFjdGlvbl9saXN0ZW5lciIOCgxDYW5jZWxBY3Rpb24iQQoMUmVzdW1lQWN0aW9uEjEKD3JlcXVlc3RfY29udGV4dBgCIAEoCzIYLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0IqABCiBBc3luY0Fza1F1ZXN0aW9uQ29tcGxldGlvbkFjdGlvbhIdChVvcmlnaW5hbF90b29sX2NhbGxfaWQYASABKAkSMAoNb3JpZ2luYWxfYXJncxgCIAEoCzIZLmFnZW50LnYxLkFza1F1ZXN0aW9uQXJncxIrCgZyZXN1bHQYAyABKAsyGy5hZ2VudC52MS5Bc2tRdWVzdGlvblJlc3VsdCIRCg9TdW1tYXJpemVBY3Rpb24iVAoSU2hlbGxDb21tYW5kQWN0aW9uEi0KDXNoZWxsX2NvbW1hbmQYASABKAsyFi5hZ2VudC52MS5TaGVsbENvbW1hbmQSDwoHZXhlY19pZBgCIAEoCSKCAQoPU3RhcnRQbGFuQWN0aW9uEisKDHVzZXJfbWVzc2FnZRgBIAEoCzIVLmFnZW50LnYxLlVzZXJNZXNzYWdlEjEKD3JlcXVlc3RfY29udGV4dBgCIAEoCzIYLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0Eg8KB2lzX3NwZWMYAyABKAgi4gEKEUV4ZWN1dGVQbGFuQWN0aW9uEjEKD3JlcXVlc3RfY29udGV4dBgBIAEoCzIYLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0Ei0KBHBsYW4YAiABKAsyGi5hZ2VudC52MS5Db252ZXJzYXRpb25QbGFuSACIAQESGgoNcGxhbl9maWxlX3VyaRgDIAEoCUgBiAEBEh4KEXBsYW5fZmlsZV9jb250ZW50GAQgASgJSAKIAQFCBwoFX3BsYW5CEAoOX3BsYW5fZmlsZV91cmlCFAoSX3BsYW5fZmlsZV9jb250ZW50IugCCgtVc2VyTWVzc2FnZRIMCgR0ZXh0GAEgASgJEhIKCm1lc3NhZ2VfaWQYAiABKAkSOAoQc2VsZWN0ZWRfY29udGV4dBgDIAEoCzIZLmFnZW50LnYxLlNlbGVjdGVkQ29udGV4dEgAiAEBEgwKBG1vZGUYBCABKAUSHQoQaXNfc2ltdWxhdGVkX21zZxgFIAEoCEgBiAEBEh8KEmJlc3Rfb2Zfbl9ncm91cF9pZBgGIAEoCUgCiAEBEigKG3RyeV91c2VfYmVzdF9vZl9uX3Byb21vdGlvbhgHIAEoCEgDiAEBEhYKCXJpY2hfdGV4dBgIIAEoCUgEiAEBQhMKEV9zZWxlY3RlZF9jb250ZXh0QhMKEV9pc19zaW11bGF0ZWRfbXNnQhUKE19iZXN0X29mX25fZ3JvdXBfaWRCHgocX3RyeV91c2VfYmVzdF9vZl9uX3Byb21vdGlvbkIMCgpfcmljaF90ZXh0IiAKEEFzc2lzdGFudE1lc3NhZ2USDAoEdGV4dBgBIAEoCSI0Cg9UaGlua2luZ01lc3NhZ2USDAoEdGV4dBgBIAEoCRITCgtkdXJhdGlvbl9tcxgCIAEoDSIfCgxTaGVsbENvbW1hbmQSDwoHY29tbWFuZBgBIAEoCSJACgtTaGVsbE91dHB1dBIOCgZzdGRvdXQYASABKAkSDgoGc3RkZXJyGAIgASgJEhEKCWV4aXRfY29kZRgDIAEoBSKiAQoQQ29udmVyc2F0aW9uVHVybhJCChdhZ2VudF9jb252ZXJzYXRpb25fdHVybhgBIAEoCzIfLmFnZW50LnYxLkFnZW50Q29udmVyc2F0aW9uVHVybkgAEkIKF3NoZWxsX2NvbnZlcnNhdGlvbl90dXJuGAIgASgLMh8uYWdlbnQudjEuU2hlbGxDb252ZXJzYXRpb25UdXJuSABCBgoEdHVybiIgChBDb252ZXJzYXRpb25QbGFuEgwKBHBsYW4YASABKAkivQEKGUNvbnZlcnNhdGlvblR1cm5TdHJ1Y3R1cmUSSwoXYWdlbnRfY29udmVyc2F0aW9uX3R1cm4YASABKAsyKC5hZ2VudC52MS5BZ2VudENvbnZlcnNhdGlvblR1cm5TdHJ1Y3R1cmVIABJLChdzaGVsbF9jb252ZXJzYXRpb25fdHVybhgCIAEoCzIoLmFnZW50LnYxLlNoZWxsQ29udmVyc2F0aW9uVHVyblN0cnVjdHVyZUgAQgYKBHR1cm4ilwEKFUFnZW50Q29udmVyc2F0aW9uVHVybhIrCgx1c2VyX21lc3NhZ2UYASABKAsyFS5hZ2VudC52MS5Vc2VyTWVzc2FnZRIpCgVzdGVwcxgCIAMoCzIaLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0ZXASFwoKcmVxdWVzdF9pZBgDIAEoCUgAiAEBQg0KC19yZXF1ZXN0X2lkIm0KHkFnZW50Q29udmVyc2F0aW9uVHVyblN0cnVjdHVyZRIUCgx1c2VyX21lc3NhZ2UYASABKAwSDQoFc3RlcHMYAiADKAwSFwoKcmVxdWVzdF9pZBgDIAEoCUgAiAEBQg0KC19yZXF1ZXN0X2lkInMKFVNoZWxsQ29udmVyc2F0aW9uVHVybhItCg1zaGVsbF9jb21tYW5kGAEgASgLMhYuYWdlbnQudjEuU2hlbGxDb21tYW5kEisKDHNoZWxsX291dHB1dBgCIAEoCzIVLmFnZW50LnYxLlNoZWxsT3V0cHV0Ik0KHlNoZWxsQ29udmVyc2F0aW9uVHVyblN0cnVjdHVyZRIVCg1zaGVsbF9jb21tYW5kGAEgASgMEhQKDHNoZWxsX291dHB1dBgCIAEoDCImChNDb252ZXJzYXRpb25TdW1tYXJ5Eg8KB3N1bW1hcnkYASABKAkieAoaQ29udmVyc2F0aW9uU3VtbWFyeUFyY2hpdmUSGwoTc3VtbWFyaXplZF9tZXNzYWdlcxgBIAMoDBIPCgdzdW1tYXJ5GAIgASgJEhMKC3dpbmRvd190YWlsGAMgASgNEhcKD3N1bW1hcnlfbWVzc2FnZRgEIAEoDCJDChhDb252ZXJzYXRpb25Ub2tlbkRldGFpbHMSEwoLdXNlZF90b2tlbnMYASABKA0SEgoKbWF4X3Rva2VucxgCIAEoDSJfCglGaWxlU3RhdGUSFAoHY29udGVudBgBIAEoCUgAiAEBEhwKD2luaXRpYWxfY29udGVudBgCIAEoCUgBiAEBQgoKCF9jb250ZW50QhIKEF9pbml0aWFsX2NvbnRlbnQiaAoSRmlsZVN0YXRlU3RydWN0dXJlEhQKB2NvbnRlbnQYASABKAxIAIgBARIcCg9pbml0aWFsX2NvbnRlbnQYAiABKAxIAYgBAUIKCghfY29udGVudEISChBfaW5pdGlhbF9jb250ZW50IjcKClN0ZXBUaW1pbmcSEwoLZHVyYXRpb25fbXMYASABKAQSFAoMdGltZXN0YW1wX21zGAIgASgEIvYEChFDb252ZXJzYXRpb25TdGF0ZRIhChlyb290X3Byb21wdF9tZXNzYWdlc19qc29uGAEgAygJEikKBXR1cm5zGAggAygLMhouYWdlbnQudjEuQ29udmVyc2F0aW9uVHVybhIhCgV0b2RvcxgDIAMoCzISLmFnZW50LnYxLlRvZG9JdGVtEhoKEnBlbmRpbmdfdG9vbF9jYWxscxgEIAMoCRI5Cg10b2tlbl9kZXRhaWxzGAUgASgLMiIuYWdlbnQudjEuQ29udmVyc2F0aW9uVG9rZW5EZXRhaWxzEjMKB3N1bW1hcnkYBiABKAsyHS5hZ2VudC52MS5Db252ZXJzYXRpb25TdW1tYXJ5SACIAQESLQoEcGxhbhgHIAEoCzIaLmFnZW50LnYxLkNvbnZlcnNhdGlvblBsYW5IAYgBARJCCg9zdW1tYXJ5X2FyY2hpdmUYCSABKAsyJC5hZ2VudC52MS5Db252ZXJzYXRpb25TdW1tYXJ5QXJjaGl2ZUgCiAEBEkAKC2ZpbGVfc3RhdGVzGAogAygLMisuYWdlbnQudjEuQ29udmVyc2F0aW9uU3RhdGUuRmlsZVN0YXRlc0VudHJ5Ej4KEHN1bW1hcnlfYXJjaGl2ZXMYCyADKAsyJC5hZ2VudC52MS5Db252ZXJzYXRpb25TdW1tYXJ5QXJjaGl2ZRpGCg9GaWxlU3RhdGVzRW50cnkSCwoDa2V5GAEgASgJEiIKBXZhbHVlGAIgASgLMhMuYWdlbnQudjEuRmlsZVN0YXRlOgI4AUIKCghfc3VtbWFyeUIHCgVfcGxhbkISChBfc3VtbWFyeV9hcmNoaXZlIscBChZTdWJhZ2VudFBlcnNpc3RlZFN0YXRlEkAKEmNvbnZlcnNhdGlvbl9zdGF0ZRgBIAEoCzIkLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0YXRlU3RydWN0dXJlEhwKFGNyZWF0ZWRfdGltZXN0YW1wX21zGAIgASgEEh4KFmxhc3RfdXNlZF90aW1lc3RhbXBfbXMYAyABKAQSLQoNc3ViYWdlbnRfdHlwZRgEIAEoCzIWLmFnZW50LnYxLlN1YmFnZW50VHlwZSK3BwoaQ29udmVyc2F0aW9uU3RhdGVTdHJ1Y3R1cmUSEQoJdHVybnNfb2xkGAIgAygMEiEKGXJvb3RfcHJvbXB0X21lc3NhZ2VzX2pzb24YASADKAwSDQoFdHVybnMYCCADKAwSDQoFdG9kb3MYAyADKAwSGgoScGVuZGluZ190b29sX2NhbGxzGAQgAygJEjkKDXRva2VuX2RldGFpbHMYBSABKAsyIi5hZ2VudC52MS5Db252ZXJzYXRpb25Ub2tlbkRldGFpbHMSFAoHc3VtbWFyeRgGIAEoDEgAiAEBEhEKBHBsYW4YByABKAxIAYgBARIfChdwcmV2aW91c193b3Jrc3BhY2VfdXJpcxgJIAMoCRIRCgRtb2RlGAogASgFSAKIAQESHAoPc3VtbWFyeV9hcmNoaXZlGAsgASgMSAOIAQESSQoLZmlsZV9zdGF0ZXMYDCADKAsyNC5hZ2VudC52MS5Db252ZXJzYXRpb25TdGF0ZVN0cnVjdHVyZS5GaWxlU3RhdGVzRW50cnkSTgoOZmlsZV9zdGF0ZXNfdjIYDyADKAsyNi5hZ2VudC52MS5Db252ZXJzYXRpb25TdGF0ZVN0cnVjdHVyZS5GaWxlU3RhdGVzVjJFbnRyeRIYChBzdW1tYXJ5X2FyY2hpdmVzGA0gAygMEioKDHR1cm5fdGltaW5ncxgOIAMoCzIULmFnZW50LnYxLlN0ZXBUaW1pbmcSUQoPc3ViYWdlbnRfc3RhdGVzGBAgAygLMjguYWdlbnQudjEuQ29udmVyc2F0aW9uU3RhdGVTdHJ1Y3R1cmUuU3ViYWdlbnRTdGF0ZXNFbnRyeRIaChJzZWxmX3N1bW1hcnlfY291bnQYESABKA0SEgoKcmVhZF9wYXRocxgSIAMoCRoxCg9GaWxlU3RhdGVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgMOgI4ARpRChFGaWxlU3RhdGVzVjJFbnRyeRILCgNrZXkYASABKAkSKwoFdmFsdWUYAiABKAsyHC5hZ2VudC52MS5GaWxlU3RhdGVTdHJ1Y3R1cmU6AjgBGlcKE1N1YmFnZW50U3RhdGVzRW50cnkSCwoDa2V5GAEgASgJEi8KBXZhbHVlGAIgASgLMiAuYWdlbnQudjEuU3ViYWdlbnRQZXJzaXN0ZWRTdGF0ZToCOAFCCgoIX3N1bW1hcnlCBwoFX3BsYW5CBwoFX21vZGVCEgoQX3N1bW1hcnlfYXJjaGl2ZSIRCg9UaGlua2luZ0RldGFpbHMiSAoRQXBpS2V5Q3JlZGVudGlhbHMSDwoHYXBpX2tleRgBIAEoCRIVCghiYXNlX3VybBgCIAEoCUgAiAEBQgsKCV9iYXNlX3VybCJJChBBenVyZUNyZWRlbnRpYWxzEg8KB2FwaV9rZXkYASABKAkSEAoIYmFzZV91cmwYAiABKAkSEgoKZGVwbG95bWVudBgDIAEoCSJ6ChJCZWRyb2NrQ3JlZGVudGlhbHMSEgoKYWNjZXNzX2tleRgBIAEoCRISCgpzZWNyZXRfa2V5GAIgASgJEg4KBnJlZ2lvbhgDIAEoCRIaCg1zZXNzaW9uX3Rva2VuGAQgASgJSACIAQFCEAoOX3Nlc3Npb25fdG9rZW4isQMKDE1vZGVsRGV0YWlscxIQCghtb2RlbF9pZBgBIAEoCRIYChBkaXNwbGF5X21vZGVsX2lkGAMgASgJEhQKDGRpc3BsYXlfbmFtZRgEIAEoCRIaChJkaXNwbGF5X25hbWVfc2hvcnQYBSABKAkSDwoHYWxpYXNlcxgGIAMoCRI4ChB0aGlua2luZ19kZXRhaWxzGAIgASgLMhkuYWdlbnQudjEuVGhpbmtpbmdEZXRhaWxzSAGIAQESFQoIbWF4X21vZGUYByABKAhIAogBARI6ChNhcGlfa2V5X2NyZWRlbnRpYWxzGAggASgLMhsuYWdlbnQudjEuQXBpS2V5Q3JlZGVudGlhbHNIABI3ChFhenVyZV9jcmVkZW50aWFscxgJIAEoCzIaLmFnZW50LnYxLkF6dXJlQ3JlZGVudGlhbHNIABI7ChNiZWRyb2NrX2NyZWRlbnRpYWxzGAogASgLMhwuYWdlbnQudjEuQmVkcm9ja0NyZWRlbnRpYWxzSABCDQoLY3JlZGVudGlhbHNCEwoRX3RoaW5raW5nX2RldGFpbHNCCwoJX21heF9tb2RlIrcCCg5SZXF1ZXN0ZWRNb2RlbBIQCghtb2RlbF9pZBgBIAEoCRIQCghtYXhfbW9kZRgCIAEoCBJACgpwYXJhbWV0ZXJzGAMgAygLMiwuYWdlbnQudjEuUmVxdWVzdGVkTW9kZWxfTW9kZWxQYXJhbWV0ZXJieXRlcxI6ChNhcGlfa2V5X2NyZWRlbnRpYWxzGAQgASgLMhsuYWdlbnQudjEuQXBpS2V5Q3JlZGVudGlhbHNIABI3ChFhenVyZV9jcmVkZW50aWFscxgFIAEoCzIaLmFnZW50LnYxLkF6dXJlQ3JlZGVudGlhbHNIABI7ChNiZWRyb2NrX2NyZWRlbnRpYWxzGAYgASgLMhwuYWdlbnQudjEuQmVkcm9ja0NyZWRlbnRpYWxzSABCDQoLY3JlZGVudGlhbHMiPwoiUmVxdWVzdGVkTW9kZWxfTW9kZWxQYXJhbWV0ZXJieXRlcxIKCgJpZBgBIAEoCRINCgV2YWx1ZRgCIAEoCSK5BAoPQWdlbnRSdW5SZXF1ZXN0EkAKEmNvbnZlcnNhdGlvbl9zdGF0ZRgBIAEoCzIkLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0YXRlU3RydWN0dXJlEiwKBmFjdGlvbhgCIAEoCzIcLmFnZW50LnYxLkNvbnZlcnNhdGlvbkFjdGlvbhItCg1tb2RlbF9kZXRhaWxzGAMgASgLMhYuYWdlbnQudjEuTW9kZWxEZXRhaWxzEjYKD3JlcXVlc3RlZF9tb2RlbBgJIAEoCzIYLmFnZW50LnYxLlJlcXVlc3RlZE1vZGVsSACIAQESJQoJbWNwX3Rvb2xzGAQgASgLMhIuYWdlbnQudjEuTWNwVG9vbHMSHAoPY29udmVyc2F0aW9uX2lkGAUgASgJSAGIAQESRAoXbWNwX2ZpbGVfc3lzdGVtX29wdGlvbnMYBiABKAsyHi5hZ2VudC52MS5NY3BGaWxlU3lzdGVtT3B0aW9uc0gCiAEBEjIKDXNraWxsX29wdGlvbnMYByABKAsyFi5hZ2VudC52MS5Ta2lsbE9wdGlvbnNIA4gBARIhChRjdXN0b21fc3lzdGVtX3Byb21wdBgIIAEoCUgEiAEBQhIKEF9yZXF1ZXN0ZWRfbW9kZWxCEgoQX2NvbnZlcnNhdGlvbl9pZEIaChhfbWNwX2ZpbGVfc3lzdGVtX29wdGlvbnNCEAoOX3NraWxsX29wdGlvbnNCFwoVX2N1c3RvbV9zeXN0ZW1fcHJvbXB0Ih8KD1RleHREZWx0YVVwZGF0ZRIMCgR0ZXh0GAEgASgJImYKFVRvb2xDYWxsU3RhcnRlZFVwZGF0ZRIPCgdjYWxsX2lkGAEgASgJEiUKCXRvb2xfY2FsbBgCIAEoCzISLmFnZW50LnYxLlRvb2xDYWxsEhUKDW1vZGVsX2NhbGxfaWQYAyABKAkiaAoXVG9vbENhbGxDb21wbGV0ZWRVcGRhdGUSDwoHY2FsbF9pZBgBIAEoCRIlCgl0b29sX2NhbGwYAiABKAsyEi5hZ2VudC52MS5Ub29sQ2FsbBIVCg1tb2RlbF9jYWxsX2lkGAMgASgJIm8KE1Rvb2xDYWxsRGVsdGFVcGRhdGUSDwoHY2FsbF9pZBgBIAEoCRIwCg90b29sX2NhbGxfZGVsdGEYAiABKAsyFy5hZ2VudC52MS5Ub29sQ2FsbERlbHRhEhUKDW1vZGVsX2NhbGxfaWQYAyABKAkifwoVUGFydGlhbFRvb2xDYWxsVXBkYXRlEg8KB2NhbGxfaWQYASABKAkSJQoJdG9vbF9jYWxsGAIgASgLMhIuYWdlbnQudjEuVG9vbENhbGwSFwoPYXJnc190ZXh0X2RlbHRhGAMgASgJEhUKDW1vZGVsX2NhbGxfaWQYBCABKAkiIwoTVGhpbmtpbmdEZWx0YVVwZGF0ZRIMCgR0ZXh0GAEgASgJIjcKF1RoaW5raW5nQ29tcGxldGVkVXBkYXRlEhwKFHRoaW5raW5nX2R1cmF0aW9uX21zGAEgASgFIiIKEFRva2VuRGVsdGFVcGRhdGUSDgoGdG9rZW5zGAEgASgFIiAKDVN1bW1hcnlVcGRhdGUSDwoHc3VtbWFyeRgBIAEoCSIWChRTdW1tYXJ5U3RhcnRlZFVwZGF0ZSIRCg9IZWFydGJlYXRVcGRhdGUiGAoWU3VtbWFyeUNvbXBsZXRlZFVwZGF0ZSLXAQoWU2hlbGxPdXRwdXREZWx0YVVwZGF0ZRItCgZzdGRvdXQYASABKAsyGy5hZ2VudC52MS5TaGVsbFN0cmVhbVN0ZG91dEgAEi0KBnN0ZGVychgCIAEoCzIbLmFnZW50LnYxLlNoZWxsU3RyZWFtU3RkZXJySAASKQoEZXhpdBgDIAEoCzIZLmFnZW50LnYxLlNoZWxsU3RyZWFtRXhpdEgAEisKBXN0YXJ0GAQgASgLMhouYWdlbnQudjEuU2hlbGxTdHJlYW1TdGFydEgAQgcKBWV2ZW50IhEKD1R1cm5FbmRlZFVwZGF0ZSJIChlVc2VyTWVzc2FnZUFwcGVuZGVkVXBkYXRlEisKDHVzZXJfbWVzc2FnZRgBIAEoCzIVLmFnZW50LnYxLlVzZXJNZXNzYWdlIiQKEVN0ZXBTdGFydGVkVXBkYXRlEg8KB3N0ZXBfaWQYASABKAQiQAoTU3RlcENvbXBsZXRlZFVwZGF0ZRIPCgdzdGVwX2lkGAEgASgEEhgKEHN0ZXBfZHVyYXRpb25fbXMYAiABKAMi7wcKEUludGVyYWN0aW9uVXBkYXRlEi8KCnRleHRfZGVsdGEYASABKAsyGS5hZ2VudC52MS5UZXh0RGVsdGFVcGRhdGVIABI8ChFwYXJ0aWFsX3Rvb2xfY2FsbBgHIAEoCzIfLmFnZW50LnYxLlBhcnRpYWxUb29sQ2FsbFVwZGF0ZUgAEjgKD3Rvb2xfY2FsbF9kZWx0YRgPIAEoCzIdLmFnZW50LnYxLlRvb2xDYWxsRGVsdGFVcGRhdGVIABI8ChF0b29sX2NhbGxfc3RhcnRlZBgCIAEoCzIfLmFnZW50LnYxLlRvb2xDYWxsU3RhcnRlZFVwZGF0ZUgAEkAKE3Rvb2xfY2FsbF9jb21wbGV0ZWQYAyABKAsyIS5hZ2VudC52MS5Ub29sQ2FsbENvbXBsZXRlZFVwZGF0ZUgAEjcKDnRoaW5raW5nX2RlbHRhGAQgASgLMh0uYWdlbnQudjEuVGhpbmtpbmdEZWx0YVVwZGF0ZUgAEj8KEnRoaW5raW5nX2NvbXBsZXRlZBgFIAEoCzIhLmFnZW50LnYxLlRoaW5raW5nQ29tcGxldGVkVXBkYXRlSAASRAoVdXNlcl9tZXNzYWdlX2FwcGVuZGVkGAYgASgLMiMuYWdlbnQudjEuVXNlck1lc3NhZ2VBcHBlbmRlZFVwZGF0ZUgAEjEKC3Rva2VuX2RlbHRhGAggASgLMhouYWdlbnQudjEuVG9rZW5EZWx0YVVwZGF0ZUgAEioKB3N1bW1hcnkYCSABKAsyFy5hZ2VudC52MS5TdW1tYXJ5VXBkYXRlSAASOQoPc3VtbWFyeV9zdGFydGVkGAogASgLMh4uYWdlbnQudjEuU3VtbWFyeVN0YXJ0ZWRVcGRhdGVIABI9ChFzdW1tYXJ5X2NvbXBsZXRlZBgLIAEoCzIgLmFnZW50LnYxLlN1bW1hcnlDb21wbGV0ZWRVcGRhdGVIABI+ChJzaGVsbF9vdXRwdXRfZGVsdGEYDCABKAsyIC5hZ2VudC52MS5TaGVsbE91dHB1dERlbHRhVXBkYXRlSAASLgoJaGVhcnRiZWF0GA0gASgLMhkuYWdlbnQudjEuSGVhcnRiZWF0VXBkYXRlSAASLwoKdHVybl9lbmRlZBgOIAEoCzIZLmFnZW50LnYxLlR1cm5FbmRlZFVwZGF0ZUgAEjMKDHN0ZXBfc3RhcnRlZBgQIAEoCzIbLmFnZW50LnYxLlN0ZXBTdGFydGVkVXBkYXRlSAASNwoOc3RlcF9jb21wbGV0ZWQYESABKAsyHS5hZ2VudC52MS5TdGVwQ29tcGxldGVkVXBkYXRlSABCCQoHbWVzc2FnZSLdBAoQSW50ZXJhY3Rpb25RdWVyeRIKCgJpZBgBIAEoDRJDChh3ZWJfc2VhcmNoX3JlcXVlc3RfcXVlcnkYAiABKAsyHy5hZ2VudC52MS5XZWJTZWFyY2hSZXF1ZXN0UXVlcnlIABJPCh5hc2tfcXVlc3Rpb25faW50ZXJhY3Rpb25fcXVlcnkYAyABKAsyJS5hZ2VudC52MS5Bc2tRdWVzdGlvbkludGVyYWN0aW9uUXVlcnlIABJFChlzd2l0Y2hfbW9kZV9yZXF1ZXN0X3F1ZXJ5GAQgASgLMiAuYWdlbnQudjEuU3dpdGNoTW9kZVJlcXVlc3RRdWVyeUgAEkMKGGV4YV9zZWFyY2hfcmVxdWVzdF9xdWVyeRgFIAEoCzIfLmFnZW50LnYxLkV4YVNlYXJjaFJlcXVlc3RRdWVyeUgAEkEKF2V4YV9mZXRjaF9yZXF1ZXN0X3F1ZXJ5GAYgASgLMh4uYWdlbnQudjEuRXhhRmV0Y2hSZXF1ZXN0UXVlcnlIABJFChljcmVhdGVfcGxhbl9yZXF1ZXN0X3F1ZXJ5GAcgASgLMiAuYWdlbnQudjEuQ3JlYXRlUGxhblJlcXVlc3RRdWVyeUgAEkUKGXNldHVwX3ZtX2Vudmlyb25tZW50X2FyZ3MYCCABKAsyIC5hZ2VudC52MS5TZXR1cFZtRW52aXJvbm1lbnRBcmdzSAASQQoXd2ViX2ZldGNoX3JlcXVlc3RfcXVlcnkYCSABKAsyHi5hZ2VudC52MS5XZWJGZXRjaFJlcXVlc3RRdWVyeUgAQgcKBXF1ZXJ5Io8FChNJbnRlcmFjdGlvblJlc3BvbnNlEgoKAmlkGAEgASgNEkkKG3dlYl9zZWFyY2hfcmVxdWVzdF9yZXNwb25zZRgCIAEoCzIiLmFnZW50LnYxLldlYlNlYXJjaFJlcXVlc3RSZXNwb25zZUgAElUKIWFza19xdWVzdGlvbl9pbnRlcmFjdGlvbl9yZXNwb25zZRgDIAEoCzIoLmFnZW50LnYxLkFza1F1ZXN0aW9uSW50ZXJhY3Rpb25SZXNwb25zZUgAEksKHHN3aXRjaF9tb2RlX3JlcXVlc3RfcmVzcG9uc2UYBCABKAsyIy5hZ2VudC52MS5Td2l0Y2hNb2RlUmVxdWVzdFJlc3BvbnNlSAASSQobZXhhX3NlYXJjaF9yZXF1ZXN0X3Jlc3BvbnNlGAUgASgLMiIuYWdlbnQudjEuRXhhU2VhcmNoUmVxdWVzdFJlc3BvbnNlSAASRwoaZXhhX2ZldGNoX3JlcXVlc3RfcmVzcG9uc2UYBiABKAsyIS5hZ2VudC52MS5FeGFGZXRjaFJlcXVlc3RSZXNwb25zZUgAEksKHGNyZWF0ZV9wbGFuX3JlcXVlc3RfcmVzcG9uc2UYByABKAsyIy5hZ2VudC52MS5DcmVhdGVQbGFuUmVxdWVzdFJlc3BvbnNlSAASSQobc2V0dXBfdm1fZW52aXJvbm1lbnRfcmVzdWx0GAggASgLMiIuYWdlbnQudjEuU2V0dXBWbUVudmlyb25tZW50UmVzdWx0SAASRwoad2ViX2ZldGNoX3JlcXVlc3RfcmVzcG9uc2UYCSABKAsyIS5hZ2VudC52MS5XZWJGZXRjaFJlcXVlc3RSZXNwb25zZUgAQggKBnJlc3VsdCI5ChRXZWJGZXRjaFJlcXVlc3RRdWVyeRIhCgRhcmdzGAEgASgLMhMuYWdlbnQudjEuRmV0Y2hBcmdzIqMBChdXZWJGZXRjaFJlcXVlc3RSZXNwb25zZRI+CghhcHByb3ZlZBgBIAEoCzIqLmFnZW50LnYxLldlYkZldGNoUmVxdWVzdFJlc3BvbnNlX0FwcHJvdmVkSAASPgoIcmVqZWN0ZWQYAiABKAsyKi5hZ2VudC52MS5XZWJGZXRjaFJlcXVlc3RSZXNwb25zZV9SZWplY3RlZEgAQggKBnJlc3VsdCIiCiBXZWJGZXRjaFJlcXVlc3RSZXNwb25zZV9BcHByb3ZlZCIyCiBXZWJGZXRjaFJlcXVlc3RSZXNwb25zZV9SZWplY3RlZBIOCgZyZWFzb24YASABKAkiXAobQXNrUXVlc3Rpb25JbnRlcmFjdGlvblF1ZXJ5EicKBGFyZ3MYASABKAsyGS5hZ2VudC52MS5Bc2tRdWVzdGlvbkFyZ3MSFAoMdG9vbF9jYWxsX2lkGAIgASgJIk0KHkFza1F1ZXN0aW9uSW50ZXJhY3Rpb25SZXNwb25zZRIrCgZyZXN1bHQYASABKAsyGy5hZ2VudC52MS5Bc2tRdWVzdGlvblJlc3VsdCIRCg9DbGllbnRIZWFydGJlYXQixgQKDlByZXdhcm1SZXF1ZXN0Ei0KDW1vZGVsX2RldGFpbHMYASABKAsyFi5hZ2VudC52MS5Nb2RlbERldGFpbHMSNgoPcmVxdWVzdGVkX21vZGVsGAkgASgLMhguYWdlbnQudjEuUmVxdWVzdGVkTW9kZWxIAIgBARIcCg9jb252ZXJzYXRpb25faWQYAiABKAlIAYgBARJAChJjb252ZXJzYXRpb25fc3RhdGUYAyABKAsyJC5hZ2VudC52MS5Db252ZXJzYXRpb25TdGF0ZVN0cnVjdHVyZRIlCgltY3BfdG9vbHMYBCABKAsyEi5hZ2VudC52MS5NY3BUb29scxJEChdtY3BfZmlsZV9zeXN0ZW1fb3B0aW9ucxgFIAEoCzIeLmFnZW50LnYxLk1jcEZpbGVTeXN0ZW1PcHRpb25zSAKIAQESHwoSYmVzdF9vZl9uX2dyb3VwX2lkGAYgASgJSAOIAQESKAobdHJ5X3VzZV9iZXN0X29mX25fcHJvbW90aW9uGAcgASgISASIAQESIQoUY3VzdG9tX3N5c3RlbV9wcm9tcHQYCCABKAlIBYgBAUISChBfcmVxdWVzdGVkX21vZGVsQhIKEF9jb252ZXJzYXRpb25faWRCGgoYX21jcF9maWxlX3N5c3RlbV9vcHRpb25zQhUKE19iZXN0X29mX25fZ3JvdXBfaWRCHgocX3RyeV91c2VfYmVzdF9vZl9uX3Byb21vdGlvbkIXChVfY3VzdG9tX3N5c3RlbV9wcm9tcHQiHQoPRXhlY1NlcnZlckFib3J0EgoKAmlkGAEgASgNIlEKGEV4ZWNTZXJ2ZXJDb250cm9sTWVzc2FnZRIqCgVhYm9ydBgBIAEoCzIZLmFnZW50LnYxLkV4ZWNTZXJ2ZXJBYm9ydEgAQgkKB21lc3NhZ2Ui+AMKEkFnZW50Q2xpZW50TWVzc2FnZRIwCgtydW5fcmVxdWVzdBgBIAEoCzIZLmFnZW50LnYxLkFnZW50UnVuUmVxdWVzdEgAEjoKE2V4ZWNfY2xpZW50X21lc3NhZ2UYAiABKAsyGy5hZ2VudC52MS5FeGVjQ2xpZW50TWVzc2FnZUgAEkkKG2V4ZWNfY2xpZW50X2NvbnRyb2xfbWVzc2FnZRgFIAEoCzIiLmFnZW50LnYxLkV4ZWNDbGllbnRDb250cm9sTWVzc2FnZUgAEjYKEWt2X2NsaWVudF9tZXNzYWdlGAMgASgLMhkuYWdlbnQudjEuS3ZDbGllbnRNZXNzYWdlSAASOwoTY29udmVyc2F0aW9uX2FjdGlvbhgEIAEoCzIcLmFnZW50LnYxLkNvbnZlcnNhdGlvbkFjdGlvbkgAEj0KFGludGVyYWN0aW9uX3Jlc3BvbnNlGAYgASgLMh0uYWdlbnQudjEuSW50ZXJhY3Rpb25SZXNwb25zZUgAEjUKEGNsaWVudF9oZWFydGJlYXQYByABKAsyGS5hZ2VudC52MS5DbGllbnRIZWFydGJlYXRIABIzCg9wcmV3YXJtX3JlcXVlc3QYCCABKAsyGC5hZ2VudC52MS5QcmV3YXJtUmVxdWVzdEgAQgkKB21lc3NhZ2UiogMKEkFnZW50U2VydmVyTWVzc2FnZRI5ChJpbnRlcmFjdGlvbl91cGRhdGUYASABKAsyGy5hZ2VudC52MS5JbnRlcmFjdGlvblVwZGF0ZUgAEjoKE2V4ZWNfc2VydmVyX21lc3NhZ2UYAiABKAsyGy5hZ2VudC52MS5FeGVjU2VydmVyTWVzc2FnZUgAEkkKG2V4ZWNfc2VydmVyX2NvbnRyb2xfbWVzc2FnZRgFIAEoCzIiLmFnZW50LnYxLkV4ZWNTZXJ2ZXJDb250cm9sTWVzc2FnZUgAEk4KHmNvbnZlcnNhdGlvbl9jaGVja3BvaW50X3VwZGF0ZRgDIAEoCzIkLmFnZW50LnYxLkNvbnZlcnNhdGlvblN0YXRlU3RydWN0dXJlSAASNgoRa3Zfc2VydmVyX21lc3NhZ2UYBCABKAsyGS5hZ2VudC52MS5LdlNlcnZlck1lc3NhZ2VIABI3ChFpbnRlcmFjdGlvbl9xdWVyeRgHIAEoCzIaLmFnZW50LnYxLkludGVyYWN0aW9uUXVlcnlIAEIJCgdtZXNzYWdlIigKEE5hbWVBZ2VudFJlcXVlc3QSFAoMdXNlcl9tZXNzYWdlGAEgASgJIiEKEU5hbWVBZ2VudFJlc3BvbnNlEgwKBG5hbWUYASABKAkiMgoWR2V0VXNhYmxlTW9kZWxzUmVxdWVzdBIYChBjdXN0b21fbW9kZWxfaWRzGAEgAygJIkEKF0dldFVzYWJsZU1vZGVsc1Jlc3BvbnNlEiYKBm1vZGVscxgBIAMoCzIWLmFnZW50LnYxLk1vZGVsRGV0YWlscyIeChxHZXREZWZhdWx0TW9kZWxGb3JDbGlSZXF1ZXN0IkYKHUdldERlZmF1bHRNb2RlbEZvckNsaVJlc3BvbnNlEiUKBW1vZGVsGAEgASgLMhYuYWdlbnQudjEuTW9kZWxEZXRhaWxzIh8KHUdldEFsbG93ZWRNb2RlbEludGVudHNSZXF1ZXN0IjcKHkdldEFsbG93ZWRNb2RlbEludGVudHNSZXNwb25zZRIVCg1tb2RlbF9pbnRlbnRzGAEgAygJIpcCChNJZGVFZGl0b3JzU3RhdGVGaWxlEhUKDXJlbGF0aXZlX3BhdGgYASABKAkSFQoNYWJzb2x1dGVfcGF0aBgCIAEoCRIhChRpc19jdXJyZW50bHlfZm9jdXNlZBgDIAEoCEgAiAEBEiAKE2N1cnJlbnRfbGluZV9udW1iZXIYBCABKAVIAYgBARIeChFjdXJyZW50X2xpbmVfdGV4dBgFIAEoCUgCiAEBEhcKCmxpbmVfY291bnQYBiABKAVIA4gBAUIXChVfaXNfY3VycmVudGx5X2ZvY3VzZWRCFgoUX2N1cnJlbnRfbGluZV9udW1iZXJCFAoSX2N1cnJlbnRfbGluZV90ZXh0Qg0KC19saW5lX2NvdW50IlMKE0lkZUVkaXRvcnNTdGF0ZUxpdGUSPAoVcmVjZW50bHlfdmlld2VkX2ZpbGVzGAEgAygLMh0uYWdlbnQudjEuSWRlRWRpdG9yc1N0YXRlRmlsZSJ0ChZBcHBseUFnZW50RGlmZlRvb2xDYWxsEioKBGFyZ3MYASABKAsyHC5hZ2VudC52MS5BcHBseUFnZW50RGlmZkFyZ3MSLgoGcmVzdWx0GAIgASgLMh4uYWdlbnQudjEuQXBwbHlBZ2VudERpZmZSZXN1bHQiJgoSQXBwbHlBZ2VudERpZmZBcmdzEhAKCGFnZW50X2lkGAEgASgJIoQBChRBcHBseUFnZW50RGlmZlJlc3VsdBIyCgdzdWNjZXNzGAEgASgLMh8uYWdlbnQudjEuQXBwbHlBZ2VudERpZmZTdWNjZXNzSAASLgoFZXJyb3IYAiABKAsyHS5hZ2VudC52MS5BcHBseUFnZW50RGlmZkVycm9ySABCCAoGcmVzdWx0Ik4KFUFwcGx5QWdlbnREaWZmU3VjY2VzcxI1Cg9hcHBsaWVkX2NoYW5nZXMYASADKAsyHC5hZ2VudC52MS5BcHBsaWVkQWdlbnRDaGFuZ2Ui6QEKEkFwcGxpZWRBZ2VudENoYW5nZRIMCgRwYXRoGAEgASgJEhMKC2NoYW5nZV90eXBlGAIgASgFEhsKDmJlZm9yZV9jb250ZW50GAMgASgJSACIAQESGgoNYWZ0ZXJfY29udGVudBgEIAEoCUgBiAEBEhIKBWVycm9yGAUgASgJSAKIAQESHgoRbWVzc2FnZV9mb3JfbW9kZWwYBiABKAlIA4gBAUIRCg9fYmVmb3JlX2NvbnRlbnRCEAoOX2FmdGVyX2NvbnRlbnRCCAoGX2Vycm9yQhQKEl9tZXNzYWdlX2Zvcl9tb2RlbCJbChNBcHBseUFnZW50RGlmZkVycm9yEg0KBWVycm9yGAEgASgJEjUKD2FwcGxpZWRfY2hhbmdlcxgCIAMoCzIcLmFnZW50LnYxLkFwcGxpZWRBZ2VudENoYW5nZSJrChNBc2tRdWVzdGlvblRvb2xDYWxsEicKBGFyZ3MYASABKAsyGS5hZ2VudC52MS5Bc2tRdWVzdGlvbkFyZ3MSKwoGcmVzdWx0GAIgASgLMhsuYWdlbnQudjEuQXNrUXVlc3Rpb25SZXN1bHQijwEKD0Fza1F1ZXN0aW9uQXJncxINCgV0aXRsZRgBIAEoCRI1CglxdWVzdGlvbnMYAiADKAsyIi5hZ2VudC52MS5Bc2tRdWVzdGlvbkFyZ3NfUXVlc3Rpb24SEQoJcnVuX2FzeW5jGAUgASgIEiMKG2FzeW5jX29yaWdpbmFsX3Rvb2xfY2FsbF9pZBgGIAEoCSKBAQoYQXNrUXVlc3Rpb25BcmdzX1F1ZXN0aW9uEgoKAmlkGAEgASgJEg4KBnByb21wdBgCIAEoCRIxCgdvcHRpb25zGAMgAygLMiAuYWdlbnQudjEuQXNrUXVlc3Rpb25BcmdzX09wdGlvbhIWCg5hbGxvd19tdWx0aXBsZRgEIAEoCCIzChZBc2tRdWVzdGlvbkFyZ3NfT3B0aW9uEgoKAmlkGAEgASgJEg0KBWxhYmVsGAIgASgJIhIKEEFza1F1ZXN0aW9uQXN5bmMi2wEKEUFza1F1ZXN0aW9uUmVzdWx0Ei8KB3N1Y2Nlc3MYASABKAsyHC5hZ2VudC52MS5Bc2tRdWVzdGlvblN1Y2Nlc3NIABIrCgVlcnJvchgCIAEoCzIaLmFnZW50LnYxLkFza1F1ZXN0aW9uRXJyb3JIABIxCghyZWplY3RlZBgDIAEoCzIdLmFnZW50LnYxLkFza1F1ZXN0aW9uUmVqZWN0ZWRIABIrCgVhc3luYxgEIAEoCzIaLmFnZW50LnYxLkFza1F1ZXN0aW9uQXN5bmNIAEIICgZyZXN1bHQiSgoSQXNrUXVlc3Rpb25TdWNjZXNzEjQKB2Fuc3dlcnMYASADKAsyIy5hZ2VudC52MS5Bc2tRdWVzdGlvblN1Y2Nlc3NfQW5zd2VyIk0KGUFza1F1ZXN0aW9uU3VjY2Vzc19BbnN3ZXISEwoLcXVlc3Rpb25faWQYASABKAkSGwoTc2VsZWN0ZWRfb3B0aW9uX2lkcxgCIAMoCSIpChBBc2tRdWVzdGlvbkVycm9yEhUKDWVycm9yX21lc3NhZ2UYASABKAkiJQoTQXNrUXVlc3Rpb25SZWplY3RlZBIOCgZyZWFzb24YASABKAki/QUKGEJhY2tncm91bmRTaGVsbFNwYXduQXJncxIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEhQKDHRvb2xfY2FsbF9pZBgDIAEoCRI7Cg5wYXJzaW5nX3Jlc3VsdBgEIAEoCzIjLmFnZW50LnYxLlNoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHQSNAoOc2FuZGJveF9wb2xpY3kYBSABKAsyFy5hZ2VudC52MS5TYW5kYm94UG9saWN5SACIAQESJQodZW5hYmxlX3dyaXRlX3NoZWxsX3N0ZGluX3Rvb2wYBiABKAgSGAoLZGVzY3JpcHRpb24YByABKAlIAYgBARJBChFjbGFzc2lmaWVyX3Jlc3VsdBgIIAEoCzIhLmFnZW50LnYxLkNvbW1hbmRDbGFzc2lmaWVyUmVzdWx0SAKIAQESSQoTb3V0cHV0X25vdGlmaWNhdGlvbhgJIAEoCzInLmFnZW50LnYxLlNoZWxsT3V0cHV0Tm90aWZpY2F0aW9uQ29uZmlnSAOIAQESPQoTc21hcnRfbW9kZV9hcHByb3ZhbBgKIAEoCzIbLmFnZW50LnYxLlNtYXJ0TW9kZUFwcHJvdmFsSASIAQESTgoZaG9va19hcHByb3ZhbF9yZXF1aXJlbWVudBgLIAEoCzImLmFnZW50LnYxLlNoZWxsSG9va0FwcHJvdmFsUmVxdWlyZW1lbnRIBYgBARIVCg1za2lwX2FwcHJvdmFsGAwgASgIEhwKD2NvbnZlcnNhdGlvbl9pZBgNIAEoCUgGiAEBQhEKD19zYW5kYm94X3BvbGljeUIOCgxfZGVzY3JpcHRpb25CFAoSX2NsYXNzaWZpZXJfcmVzdWx0QhYKFF9vdXRwdXRfbm90aWZpY2F0aW9uQhYKFF9zbWFydF9tb2RlX2FwcHJvdmFsQhwKGl9ob29rX2FwcHJvdmFsX3JlcXVpcmVtZW50QhIKEF9jb252ZXJzYXRpb25faWQigQIKGkJhY2tncm91bmRTaGVsbFNwYXduUmVzdWx0EjgKB3N1Y2Nlc3MYASABKAsyJS5hZ2VudC52MS5CYWNrZ3JvdW5kU2hlbGxTcGF3blN1Y2Nlc3NIABI0CgVlcnJvchgCIAEoCzIjLmFnZW50LnYxLkJhY2tncm91bmRTaGVsbFNwYXduRXJyb3JIABIrCghyZWplY3RlZBgDIAEoCzIXLmFnZW50LnYxLlNoZWxsUmVqZWN0ZWRIABI8ChFwZXJtaXNzaW9uX2RlbmllZBgEIAEoCzIfLmFnZW50LnYxLlNoZWxsUGVybWlzc2lvbkRlbmllZEgAQggKBnJlc3VsdCJ1ChtCYWNrZ3JvdW5kU2hlbGxTcGF3blN1Y2Nlc3MSEAoIc2hlbGxfaWQYASABKA0SDwoHY29tbWFuZBgCIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgDIAEoCRIQCgNwaWQYBCABKA1IAIgBAUIGCgRfcGlkIlYKGUJhY2tncm91bmRTaGVsbFNwYXduRXJyb3ISDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRINCgVlcnJvchgDIAEoCSI2ChNXcml0ZVNoZWxsU3RkaW5BcmdzEhAKCHNoZWxsX2lkGAEgASgNEg0KBWNoYXJzGAIgASgJIocBChVXcml0ZVNoZWxsU3RkaW5SZXN1bHQSMwoHc3VjY2VzcxgBIAEoCzIgLmFnZW50LnYxLldyaXRlU2hlbGxTdGRpblN1Y2Nlc3NIABIvCgVlcnJvchgCIAEoCzIeLmFnZW50LnYxLldyaXRlU2hlbGxTdGRpbkVycm9ySABCCAoGcmVzdWx0Il0KFldyaXRlU2hlbGxTdGRpblN1Y2Nlc3MSEAoIc2hlbGxfaWQYASABKA0SMQopdGVybWluYWxfZmlsZV9sZW5ndGhfYmVmb3JlX2lucHV0X3dyaXR0ZW4YAiABKA0iJQoUV3JpdGVTaGVsbFN0ZGluRXJyb3ISDQoFZXJyb3IYASABKAkiIgoKQ29vcmRpbmF0ZRIJCgF4GAEgASgFEgkKAXkYAiABKAUiVQoPQ29tcHV0ZXJVc2VBcmdzEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRIsCgdhY3Rpb25zGAIgAygLMhsuYWdlbnQudjEuQ29tcHV0ZXJVc2VBY3Rpb24igQQKEUNvbXB1dGVyVXNlQWN0aW9uEi8KCm1vdXNlX21vdmUYASABKAsyGS5hZ2VudC52MS5Nb3VzZU1vdmVBY3Rpb25IABImCgVjbGljaxgCIAEoCzIVLmFnZW50LnYxLkNsaWNrQWN0aW9uSAASLwoKbW91c2VfZG93bhgDIAEoCzIZLmFnZW50LnYxLk1vdXNlRG93bkFjdGlvbkgAEisKCG1vdXNlX3VwGAQgASgLMhcuYWdlbnQudjEuTW91c2VVcEFjdGlvbkgAEiQKBGRyYWcYBSABKAsyFC5hZ2VudC52MS5EcmFnQWN0aW9uSAASKAoGc2Nyb2xsGAYgASgLMhYuYWdlbnQudjEuU2Nyb2xsQWN0aW9uSAASJAoEdHlwZRgHIAEoCzIULmFnZW50LnYxLlR5cGVBY3Rpb25IABIiCgNrZXkYCCABKAsyEy5hZ2VudC52MS5LZXlBY3Rpb25IABIkCgR3YWl0GAkgASgLMhQuYWdlbnQudjEuV2FpdEFjdGlvbkgAEjAKCnNjcmVlbnNob3QYCiABKAsyGi5hZ2VudC52MS5TY3JlZW5zaG90QWN0aW9uSAASOQoPY3Vyc29yX3Bvc2l0aW9uGAsgASgLMh4uYWdlbnQudjEuQ3Vyc29yUG9zaXRpb25BY3Rpb25IAEIICgZhY3Rpb24iOwoPTW91c2VNb3ZlQWN0aW9uEigKCmNvb3JkaW5hdGUYASABKAsyFC5hZ2VudC52MS5Db29yZGluYXRlIpgBCgtDbGlja0FjdGlvbhItCgpjb29yZGluYXRlGAEgASgLMhQuYWdlbnQudjEuQ29vcmRpbmF0ZUgAiAEBEg4KBmJ1dHRvbhgCIAEoBRINCgVjb3VudBgDIAEoBRIaCg1tb2RpZmllcl9rZXlzGAQgASgJSAGIAQFCDQoLX2Nvb3JkaW5hdGVCEAoOX21vZGlmaWVyX2tleXMiIQoPTW91c2VEb3duQWN0aW9uEg4KBmJ1dHRvbhgBIAEoBSIfCg1Nb3VzZVVwQWN0aW9uEg4KBmJ1dHRvbhgBIAEoBSJACgpEcmFnQWN0aW9uEiIKBHBhdGgYASADKAsyFC5hZ2VudC52MS5Db29yZGluYXRlEg4KBmJ1dHRvbhgCIAEoBSKdAQoMU2Nyb2xsQWN0aW9uEi0KCmNvb3JkaW5hdGUYASABKAsyFC5hZ2VudC52MS5Db29yZGluYXRlSACIAQESEQoJZGlyZWN0aW9uGAIgASgFEg4KBmFtb3VudBgDIAEoBRIaCg1tb2RpZmllcl9rZXlzGAQgASgJSAGIAQFCDQoLX2Nvb3JkaW5hdGVCEAoOX21vZGlmaWVyX2tleXMiGgoKVHlwZUFjdGlvbhIMCgR0ZXh0GAEgASgJIkwKCUtleUFjdGlvbhILCgNrZXkYASABKAkSHQoQaG9sZF9kdXJhdGlvbl9tcxgCIAEoBUgAiAEBQhMKEV9ob2xkX2R1cmF0aW9uX21zIiEKCldhaXRBY3Rpb24SEwoLZHVyYXRpb25fbXMYASABKAUiEgoQU2NyZWVuc2hvdEFjdGlvbiIWChRDdXJzb3JQb3NpdGlvbkFjdGlvbiJ7ChFDb21wdXRlclVzZVJlc3VsdBIvCgdzdWNjZXNzGAEgASgLMhwuYWdlbnQudjEuQ29tcHV0ZXJVc2VTdWNjZXNzSAASKwoFZXJyb3IYAiABKAsyGi5hZ2VudC52MS5Db21wdXRlclVzZUVycm9ySABCCAoGcmVzdWx0IvsBChJDb21wdXRlclVzZVN1Y2Nlc3MSFAoMYWN0aW9uX2NvdW50GAEgASgFEhMKC2R1cmF0aW9uX21zGAIgASgFEhcKCnNjcmVlbnNob3QYAyABKAlIAIgBARIQCgNsb2cYBCABKAlIAYgBARIcCg9zY3JlZW5zaG90X3BhdGgYBSABKAlIAogBARIyCg9jdXJzb3JfcG9zaXRpb24YBiABKAsyFC5hZ2VudC52MS5Db29yZGluYXRlSAOIAQFCDQoLX3NjcmVlbnNob3RCBgoEX2xvZ0ISChBfc2NyZWVuc2hvdF9wYXRoQhIKEF9jdXJzb3JfcG9zaXRpb24iwAEKEENvbXB1dGVyVXNlRXJyb3ISDQoFZXJyb3IYASABKAkSFAoMYWN0aW9uX2NvdW50GAIgASgFEhMKC2R1cmF0aW9uX21zGAMgASgFEhAKA2xvZxgEIAEoCUgAiAEBEhcKCnNjcmVlbnNob3QYBSABKAlIAYgBARIcCg9zY3JlZW5zaG90X3BhdGgYBiABKAlIAogBAUIGCgRfbG9nQg0KC19zY3JlZW5zaG90QhIKEF9zY3JlZW5zaG90X3BhdGgiawoTQ29tcHV0ZXJVc2VUb29sQ2FsbBInCgRhcmdzGAEgASgLMhkuYWdlbnQudjEuQ29tcHV0ZXJVc2VBcmdzEisKBnJlc3VsdBgCIAEoCzIbLmFnZW50LnYxLkNvbXB1dGVyVXNlUmVzdWx0ImgKEkNyZWF0ZVBsYW5Ub29sQ2FsbBImCgRhcmdzGAEgASgLMhguYWdlbnQudjEuQ3JlYXRlUGxhbkFyZ3MSKgoGcmVzdWx0GAIgASgLMhouYWdlbnQudjEuQ3JlYXRlUGxhblJlc3VsdCI4CgVQaGFzZRIMCgRuYW1lGAEgASgJEiEKBXRvZG9zGAIgAygLMhIuYWdlbnQudjEuVG9kb0l0ZW0ilgEKDkNyZWF0ZVBsYW5BcmdzEgwKBHBsYW4YASABKAkSIQoFdG9kb3MYAiADKAsyEi5hZ2VudC52MS5Ub2RvSXRlbRIQCghvdmVydmlldxgDIAEoCRIMCgRuYW1lGAQgASgJEhIKCmlzX3Byb2plY3QYBSABKAgSHwoGcGhhc2VzGAYgAygLMg8uYWdlbnQudjEuUGhhc2UiigEKEENyZWF0ZVBsYW5SZXN1bHQSEAoIcGxhbl91cmkYAyABKAkSLgoHc3VjY2VzcxgBIAEoCzIbLmFnZW50LnYxLkNyZWF0ZVBsYW5TdWNjZXNzSAASKgoFZXJyb3IYAiABKAsyGS5hZ2VudC52MS5DcmVhdGVQbGFuRXJyb3JIAEIICgZyZXN1bHQiEwoRQ3JlYXRlUGxhblN1Y2Nlc3MiIAoPQ3JlYXRlUGxhbkVycm9yEg0KBWVycm9yGAEgASgJIlYKFkNyZWF0ZVBsYW5SZXF1ZXN0UXVlcnkSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLkNyZWF0ZVBsYW5BcmdzEhQKDHRvb2xfY2FsbF9pZBgCIAEoCSJHChlDcmVhdGVQbGFuUmVxdWVzdFJlc3BvbnNlEioKBnJlc3VsdBgBIAEoCzIaLmFnZW50LnYxLkNyZWF0ZVBsYW5SZXN1bHQiFgoUQ3Vyc29yUnVsZVR5cGVHbG9iYWwiKAoXQ3Vyc29yUnVsZVR5cGVGaWxlR2xvYnMSDQoFZ2xvYnMYASADKAkiMQoaQ3Vyc29yUnVsZVR5cGVBZ2VudEZldGNoZWQSEwoLZGVzY3JpcHRpb24YASABKAkiIAoeQ3Vyc29yUnVsZVR5cGVNYW51YWxseUF0dGFjaGVkIosCCg5DdXJzb3JSdWxlVHlwZRIwCgZnbG9iYWwYASABKAsyHi5hZ2VudC52MS5DdXJzb3JSdWxlVHlwZUdsb2JhbEgAEjkKDGZpbGVfZ2xvYmJlZBgCIAEoCzIhLmFnZW50LnYxLkN1cnNvclJ1bGVUeXBlRmlsZUdsb2JzSAASPQoNYWdlbnRfZmV0Y2hlZBgDIAEoCzIkLmFnZW50LnYxLkN1cnNvclJ1bGVUeXBlQWdlbnRGZXRjaGVkSAASRQoRbWFudWFsbHlfYXR0YWNoZWQYBCABKAsyKC5hZ2VudC52MS5DdXJzb3JSdWxlVHlwZU1hbnVhbGx5QXR0YWNoZWRIAEIGCgR0eXBlIsgBCgpDdXJzb3JSdWxlEhEKCWZ1bGxfcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgJEiYKBHR5cGUYAyABKAsyGC5hZ2VudC52MS5DdXJzb3JSdWxlVHlwZRIOCgZzb3VyY2UYBCABKAUSHgoRZ2l0X3JlbW90ZV9vcmlnaW4YBSABKAlIAIgBARIYCgtwYXJzZV9lcnJvchgGIAEoCUgBiAEBQhQKEl9naXRfcmVtb3RlX29yaWdpbkIOCgxfcGFyc2VfZXJyb3IiMAoKRGVsZXRlQXJncxIMCgRwYXRoGAEgASgJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCSLtAgoMRGVsZXRlUmVzdWx0EioKB3N1Y2Nlc3MYASABKAsyFy5hZ2VudC52MS5EZWxldGVTdWNjZXNzSAASNgoOZmlsZV9ub3RfZm91bmQYAiABKAsyHC5hZ2VudC52MS5EZWxldGVGaWxlTm90Rm91bmRIABIrCghub3RfZmlsZRgDIAEoCzIXLmFnZW50LnYxLkRlbGV0ZU5vdEZpbGVIABI9ChFwZXJtaXNzaW9uX2RlbmllZBgEIAEoCzIgLmFnZW50LnYxLkRlbGV0ZVBlcm1pc3Npb25EZW5pZWRIABItCglmaWxlX2J1c3kYBSABKAsyGC5hZ2VudC52MS5EZWxldGVGaWxlQnVzeUgAEiwKCHJlamVjdGVkGAYgASgLMhguYWdlbnQudjEuRGVsZXRlUmVqZWN0ZWRIABImCgVlcnJvchgHIAEoCzIVLmFnZW50LnYxLkRlbGV0ZUVycm9ySABCCAoGcmVzdWx0IlwKDURlbGV0ZVN1Y2Nlc3MSDAoEcGF0aBgBIAEoCRIUCgxkZWxldGVkX2ZpbGUYAiABKAkSEQoJZmlsZV9zaXplGAMgASgDEhQKDHByZXZfY29udGVudBgEIAEoCSIiChJEZWxldGVGaWxlTm90Rm91bmQSDAoEcGF0aBgBIAEoCSIyCg1EZWxldGVOb3RGaWxlEgwKBHBhdGgYASABKAkSEwoLYWN0dWFsX3R5cGUYAiABKAkiWQoWRGVsZXRlUGVybWlzc2lvbkRlbmllZBIMCgRwYXRoGAEgASgJEhwKFGNsaWVudF92aXNpYmxlX2Vycm9yGAIgASgJEhMKC2lzX3JlYWRvbmx5GAMgASgIIh4KDkRlbGV0ZUZpbGVCdXN5EgwKBHBhdGgYASABKAkiLgoORGVsZXRlUmVqZWN0ZWQSDAoEcGF0aBgBIAEoCRIOCgZyZWFzb24YAiABKAkiKgoLRGVsZXRlRXJyb3ISDAoEcGF0aBgBIAEoCRINCgVlcnJvchgCIAEoCSJcCg5EZWxldGVUb29sQ2FsbBIiCgRhcmdzGAEgASgLMhQuYWdlbnQudjEuRGVsZXRlQXJncxImCgZyZXN1bHQYAiABKAsyFi5hZ2VudC52MS5EZWxldGVSZXN1bHQiNQoPRGlhZ25vc3RpY3NBcmdzEgwKBHBhdGgYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJIq8CChFEaWFnbm9zdGljc1Jlc3VsdBIvCgdzdWNjZXNzGAEgASgLMhwuYWdlbnQudjEuRGlhZ25vc3RpY3NTdWNjZXNzSAASKwoFZXJyb3IYAiABKAsyGi5hZ2VudC52MS5EaWFnbm9zdGljc0Vycm9ySAASMQoIcmVqZWN0ZWQYAyABKAsyHS5hZ2VudC52MS5EaWFnbm9zdGljc1JlamVjdGVkSAASOwoOZmlsZV9ub3RfZm91bmQYBCABKAsyIS5hZ2VudC52MS5EaWFnbm9zdGljc0ZpbGVOb3RGb3VuZEgAEkIKEXBlcm1pc3Npb25fZGVuaWVkGAUgASgLMiUuYWdlbnQudjEuRGlhZ25vc3RpY3NQZXJtaXNzaW9uRGVuaWVkSABCCAoGcmVzdWx0ImgKEkRpYWdub3N0aWNzU3VjY2VzcxIMCgRwYXRoGAEgASgJEikKC2RpYWdub3N0aWNzGAIgAygLMhQuYWdlbnQudjEuRGlhZ25vc3RpYxIZChF0b3RhbF9kaWFnbm9zdGljcxgDIAEoBSJ/CgpEaWFnbm9zdGljEhAKCHNldmVyaXR5GAEgASgFEh4KBXJhbmdlGAIgASgLMg8uYWdlbnQudjEuUmFuZ2USDwoHbWVzc2FnZRgDIAEoCRIOCgZzb3VyY2UYBCABKAkSDAoEY29kZRgFIAEoCRIQCghpc19zdGFsZRgGIAEoCCIvChBEaWFnbm9zdGljc0Vycm9yEgwKBHBhdGgYASABKAkSDQoFZXJyb3IYAiABKAkiMwoTRGlhZ25vc3RpY3NSZWplY3RlZBIMCgRwYXRoGAEgASgJEg4KBnJlYXNvbhgCIAEoCSInChdEaWFnbm9zdGljc0ZpbGVOb3RGb3VuZBIMCgRwYXRoGAEgASgJIisKG0RpYWdub3N0aWNzUGVybWlzc2lvbkRlbmllZBIMCgRwYXRoGAEgASgJIkgKCEVkaXRBcmdzEgwKBHBhdGgYASABKAkSGwoOc3RyZWFtX2NvbnRlbnQYBiABKAlIAIgBAUIRCg9fc3RyZWFtX2NvbnRlbnQi1gIKCkVkaXRSZXN1bHQSKAoHc3VjY2VzcxgBIAEoCzIVLmFnZW50LnYxLkVkaXRTdWNjZXNzSAASNAoOZmlsZV9ub3RfZm91bmQYAiABKAsyGi5hZ2VudC52MS5FZGl0RmlsZU5vdEZvdW5kSAASRAoWcmVhZF9wZXJtaXNzaW9uX2RlbmllZBgDIAEoCzIiLmFnZW50LnYxLkVkaXRSZWFkUGVybWlzc2lvbkRlbmllZEgAEkYKF3dyaXRlX3Blcm1pc3Npb25fZGVuaWVkGAQgASgLMiMuYWdlbnQudjEuRWRpdFdyaXRlUGVybWlzc2lvbkRlbmllZEgAEioKCHJlamVjdGVkGAYgASgLMhYuYWdlbnQudjEuRWRpdFJlamVjdGVkSAASJAoFZXJyb3IYByABKAsyEy5hZ2VudC52MS5FZGl0RXJyb3JIAEIICgZyZXN1bHQipAIKC0VkaXRTdWNjZXNzEgwKBHBhdGgYASABKAkSGAoLbGluZXNfYWRkZWQYAyABKAVIAIgBARIaCg1saW5lc19yZW1vdmVkGAQgASgFSAGIAQESGAoLZGlmZl9zdHJpbmcYBSABKAlIAogBARIlChhiZWZvcmVfZnVsbF9maWxlX2NvbnRlbnQYBiABKAlIA4gBARIfChdhZnRlcl9mdWxsX2ZpbGVfY29udGVudBgHIAEoCRIUCgdtZXNzYWdlGAggASgJSASIAQFCDgoMX2xpbmVzX2FkZGVkQhAKDl9saW5lc19yZW1vdmVkQg4KDF9kaWZmX3N0cmluZ0IbChlfYmVmb3JlX2Z1bGxfZmlsZV9jb250ZW50QgoKCF9tZXNzYWdlIiAKEEVkaXRGaWxlTm90Rm91bmQSDAoEcGF0aBgBIAEoCSIoChhFZGl0UmVhZFBlcm1pc3Npb25EZW5pZWQSDAoEcGF0aBgBIAEoCSJNChlFZGl0V3JpdGVQZXJtaXNzaW9uRGVuaWVkEgwKBHBhdGgYASABKAkSDQoFZXJyb3IYAiABKAkSEwoLaXNfcmVhZG9ubHkYAyABKAgiLAoMRWRpdFJlamVjdGVkEgwKBHBhdGgYASABKAkSDgoGcmVhc29uGAIgASgJImIKCUVkaXRFcnJvchIMCgRwYXRoGAEgASgJEg0KBWVycm9yGAIgASgJEiAKE21vZGVsX3Zpc2libGVfZXJyb3IYBSABKAlIAIgBAUIWChRfbW9kZWxfdmlzaWJsZV9lcnJvciJWCgxFZGl0VG9vbENhbGwSIAoEYXJncxgBIAEoCzISLmFnZW50LnYxLkVkaXRBcmdzEiQKBnJlc3VsdBgCIAEoCzIULmFnZW50LnYxLkVkaXRSZXN1bHQiMQoRRWRpdFRvb2xDYWxsRGVsdGESHAoUc3RyZWFtX2NvbnRlbnRfZGVsdGEYASABKAkiMQoMRXhhRmV0Y2hBcmdzEgsKA2lkcxgBIAMoCRIUCgx0b29sX2NhbGxfaWQYAiABKAkiogEKDkV4YUZldGNoUmVzdWx0EiwKB3N1Y2Nlc3MYASABKAsyGS5hZ2VudC52MS5FeGFGZXRjaFN1Y2Nlc3NIABIoCgVlcnJvchgCIAEoCzIXLmFnZW50LnYxLkV4YUZldGNoRXJyb3JIABIuCghyZWplY3RlZBgDIAEoCzIaLmFnZW50LnYxLkV4YUZldGNoUmVqZWN0ZWRIAEIICgZyZXN1bHQiPgoPRXhhRmV0Y2hTdWNjZXNzEisKCGNvbnRlbnRzGAEgAygLMhkuYWdlbnQudjEuRXhhRmV0Y2hDb250ZW50Ih4KDUV4YUZldGNoRXJyb3ISDQoFZXJyb3IYASABKAkiIgoQRXhhRmV0Y2hSZWplY3RlZBIOCgZyZWFzb24YASABKAkiUwoPRXhhRmV0Y2hDb250ZW50Eg0KBXRpdGxlGAEgASgJEgsKA3VybBgCIAEoCRIMCgR0ZXh0GAMgASgJEhYKDnB1Ymxpc2hlZF9kYXRlGAQgASgJImIKEEV4YUZldGNoVG9vbENhbGwSJAoEYXJncxgBIAEoCzIWLmFnZW50LnYxLkV4YUZldGNoQXJncxIoCgZyZXN1bHQYAiABKAsyGC5hZ2VudC52MS5FeGFGZXRjaFJlc3VsdCI8ChRFeGFGZXRjaFJlcXVlc3RRdWVyeRIkCgRhcmdzGAEgASgLMhYuYWdlbnQudjEuRXhhRmV0Y2hBcmdzIqMBChdFeGFGZXRjaFJlcXVlc3RSZXNwb25zZRI+CghhcHByb3ZlZBgBIAEoCzIqLmFnZW50LnYxLkV4YUZldGNoUmVxdWVzdFJlc3BvbnNlX0FwcHJvdmVkSAASPgoIcmVqZWN0ZWQYAiABKAsyKi5hZ2VudC52MS5FeGFGZXRjaFJlcXVlc3RSZXNwb25zZV9SZWplY3RlZEgAQggKBnJlc3VsdCIiCiBFeGFGZXRjaFJlcXVlc3RSZXNwb25zZV9BcHByb3ZlZCIyCiBFeGFGZXRjaFJlcXVlc3RSZXNwb25zZV9SZWplY3RlZBIOCgZyZWFzb24YASABKAkiVwoNRXhhU2VhcmNoQXJncxINCgVxdWVyeRgBIAEoCRIMCgR0eXBlGAIgASgJEhMKC251bV9yZXN1bHRzGAMgASgFEhQKDHRvb2xfY2FsbF9pZBgEIAEoCSKmAQoPRXhhU2VhcmNoUmVzdWx0Ei0KB3N1Y2Nlc3MYASABKAsyGi5hZ2VudC52MS5FeGFTZWFyY2hTdWNjZXNzSAASKQoFZXJyb3IYAiABKAsyGC5hZ2VudC52MS5FeGFTZWFyY2hFcnJvckgAEi8KCHJlamVjdGVkGAMgASgLMhsuYWdlbnQudjEuRXhhU2VhcmNoUmVqZWN0ZWRIAEIICgZyZXN1bHQiRAoQRXhhU2VhcmNoU3VjY2VzcxIwCgpyZWZlcmVuY2VzGAEgAygLMhwuYWdlbnQudjEuRXhhU2VhcmNoUmVmZXJlbmNlIh8KDkV4YVNlYXJjaEVycm9yEg0KBWVycm9yGAEgASgJIiMKEUV4YVNlYXJjaFJlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSJWChJFeGFTZWFyY2hSZWZlcmVuY2USDQoFdGl0bGUYASABKAkSCwoDdXJsGAIgASgJEgwKBHRleHQYAyABKAkSFgoOcHVibGlzaGVkX2RhdGUYBCABKAkiZQoRRXhhU2VhcmNoVG9vbENhbGwSJQoEYXJncxgBIAEoCzIXLmFnZW50LnYxLkV4YVNlYXJjaEFyZ3MSKQoGcmVzdWx0GAIgASgLMhkuYWdlbnQudjEuRXhhU2VhcmNoUmVzdWx0Ij4KFUV4YVNlYXJjaFJlcXVlc3RRdWVyeRIlCgRhcmdzGAEgASgLMhcuYWdlbnQudjEuRXhhU2VhcmNoQXJncyKmAQoYRXhhU2VhcmNoUmVxdWVzdFJlc3BvbnNlEj8KCGFwcHJvdmVkGAEgASgLMisuYWdlbnQudjEuRXhhU2VhcmNoUmVxdWVzdFJlc3BvbnNlX0FwcHJvdmVkSAASPwoIcmVqZWN0ZWQYAiABKAsyKy5hZ2VudC52MS5FeGFTZWFyY2hSZXF1ZXN0UmVzcG9uc2VfUmVqZWN0ZWRIAEIICgZyZXN1bHQiIwohRXhhU2VhcmNoUmVxdWVzdFJlc3BvbnNlX0FwcHJvdmVkIjMKIUV4YVNlYXJjaFJlcXVlc3RSZXNwb25zZV9SZWplY3RlZBIOCgZyZWFzb24YASABKAkiIwoVRXhlY0NsaWVudFN0cmVhbUNsb3NlEgoKAmlkGAEgASgNIn4KD0V4ZWNDbGllbnRUaHJvdxIKCgJpZBgBIAEoDRINCgVlcnJvchgCIAEoCRIYCgtzdGFja190cmFjZRgDIAEoCUgAiAEBEhcKCmVycm9yX2NvZGUYBCABKAlIAYgBAUIOCgxfc3RhY2tfdHJhY2VCDQoLX2Vycm9yX2NvZGUiIQoTRXhlY0NsaWVudEhlYXJ0YmVhdBIKCgJpZBgBIAEoDSK+AQoYRXhlY0NsaWVudENvbnRyb2xNZXNzYWdlEjcKDHN0cmVhbV9jbG9zZRgBIAEoCzIfLmFnZW50LnYxLkV4ZWNDbGllbnRTdHJlYW1DbG9zZUgAEioKBXRocm93GAIgASgLMhkuYWdlbnQudjEuRXhlY0NsaWVudFRocm93SAASMgoJaGVhcnRiZWF0GAMgASgLMh0uYWdlbnQudjEuRXhlY0NsaWVudEhlYXJ0YmVhdEgAQgkKB21lc3NhZ2UihAEKC1NwYW5Db250ZXh0EhAKCHRyYWNlX2lkGAEgASgJEg8KB3NwYW5faWQYAiABKAkSGAoLdHJhY2VfZmxhZ3MYAyABKA1IAIgBARIYCgt0cmFjZV9zdGF0ZRgEIAEoCUgBiAEBQg4KDF90cmFjZV9mbGFnc0IOCgxfdHJhY2Vfc3RhdGUiCwoJQWJvcnRBcmdzIg0KC0Fib3J0UmVzdWx0ItoTChFFeGVjU2VydmVyTWVzc2FnZRIKCgJpZBgBIAEoDRIPCgdleGVjX2lkGA8gASgJEjAKDHNwYW5fY29udGV4dBgTIAEoCzIVLmFnZW50LnYxLlNwYW5Db250ZXh0SAGIAQESKQoKc2hlbGxfYXJncxgCIAEoCzITLmFnZW50LnYxLlNoZWxsQXJnc0gAEikKCndyaXRlX2FyZ3MYAyABKAsyEy5hZ2VudC52MS5Xcml0ZUFyZ3NIABIrCgtkZWxldGVfYXJncxgEIAEoCzIULmFnZW50LnYxLkRlbGV0ZUFyZ3NIABInCglncmVwX2FyZ3MYBSABKAsyEi5hZ2VudC52MS5HcmVwQXJnc0gAEicKCXJlYWRfYXJncxgHIAEoCzISLmFnZW50LnYxLlJlYWRBcmdzSAASIwoHbHNfYXJncxgIIAEoCzIQLmFnZW50LnYxLkxzQXJnc0gAEjUKEGRpYWdub3N0aWNzX2FyZ3MYCSABKAsyGS5hZ2VudC52MS5EaWFnbm9zdGljc0FyZ3NIABI8ChRyZXF1ZXN0X2NvbnRleHRfYXJncxgKIAEoCzIcLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0QXJnc0gAEiUKCG1jcF9hcmdzGAsgASgLMhEuYWdlbnQudjEuTWNwQXJnc0gAEjAKEXNoZWxsX3N0cmVhbV9hcmdzGA4gASgLMhMuYWdlbnQudjEuU2hlbGxBcmdzSAASSQobYmFja2dyb3VuZF9zaGVsbF9zcGF3bl9hcmdzGBAgASgLMiIuYWdlbnQudjEuQmFja2dyb3VuZFNoZWxsU3Bhd25BcmdzSAASSgocbGlzdF9tY3BfcmVzb3VyY2VzX2V4ZWNfYXJncxgRIAEoCzIiLmFnZW50LnYxLkxpc3RNY3BSZXNvdXJjZXNFeGVjQXJnc0gAEkgKG3JlYWRfbWNwX3Jlc291cmNlX2V4ZWNfYXJncxgSIAEoCzIhLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZUV4ZWNBcmdzSAASKQoKZmV0Y2hfYXJncxgUIAEoCzITLmFnZW50LnYxLkZldGNoQXJnc0gAEjgKEnJlY29yZF9zY3JlZW5fYXJncxgVIAEoCzIaLmFnZW50LnYxLlJlY29yZFNjcmVlbkFyZ3NIABI2ChFjb21wdXRlcl91c2VfYXJncxgWIAEoCzIZLmFnZW50LnYxLkNvbXB1dGVyVXNlQXJnc0gAEj8KFndyaXRlX3NoZWxsX3N0ZGluX2FyZ3MYFyABKAsyHS5hZ2VudC52MS5Xcml0ZVNoZWxsU3RkaW5BcmdzSAASMAoScmVkYWN0ZWRfcmVhZF9hcmdzGB0gASgLMhIuYWdlbnQudjEuUmVhZEFyZ3NIABI5ChNtY3Bfc3RhdGVfZXhlY19hcmdzGCQgASgLMhouYWdlbnQudjEuTWNwU3RhdGVFeGVjQXJnc0gAEjYKEWV4ZWN1dGVfaG9va19hcmdzGBsgASgLMhkuYWdlbnQudjEuRXhlY3V0ZUhvb2tBcmdzSAASLwoNc3ViYWdlbnRfYXJncxgcIAEoCzIWLmFnZW50LnYxLlN1YmFnZW50QXJnc0gAEkkKG2ZvcmNlX2JhY2tncm91bmRfc2hlbGxfYXJncxgeIAEoCzIiLmFnZW50LnYxLkZvcmNlQmFja2dyb3VuZFNoZWxsQXJnc0gAEk8KHmZvcmNlX2JhY2tncm91bmRfc3ViYWdlbnRfYXJncxgfIAEoCzIlLmFnZW50LnYxLkZvcmNlQmFja2dyb3VuZFN1YmFnZW50QXJnc0gAEjoKE3N1YmFnZW50X2F3YWl0X2FyZ3MYJSABKAsyGy5hZ2VudC52MS5TdWJhZ2VudEF3YWl0QXJnc0gAEkcKGnNtYXJ0X21vZGVfY2xhc3NpZmllcl9hcmdzGCYgASgLMiEuYWdlbnQudjEuU21hcnRNb2RlQ2xhc3NpZmllckFyZ3NIABJCChdjYW52YXNfZGlhZ25vc3RpY3NfYXJncxgoIAEoCzIfLmFnZW50LnYxLkNhbnZhc0RpYWdub3N0aWNzQXJnc0gAEk0KHXNoZWxsX2FsbG93bGlzdF9wcmVjaGVja19hcmdzGCkgASgLMiQuYWdlbnQudjEuU2hlbGxBbGxvd2xpc3RQcmVjaGVja0FyZ3NIABJJChttY3BfYWxsb3dsaXN0X3ByZWNoZWNrX2FyZ3MYKiABKAsyIi5hZ2VudC52MS5NY3BBbGxvd2xpc3RQcmVjaGVja0FyZ3NIABJUCiF3ZWJfZmV0Y2hfYWxsb3dsaXN0X3ByZWNoZWNrX2FyZ3MYKyABKAsyJy5hZ2VudC52MS5XZWJGZXRjaEFsbG93bGlzdFByZWNoZWNrQXJnc0gAEjQKEGdpdF9kaWZmX3JlcXVlc3QYLCABKAsyGC5hZ2VudC52MS5HZXREaWZmUmVxdWVzdEgAEjAKDHBpX3JlYWRfYXJncxgtIAEoCzIYLmFnZW50LnYxLlBpUmVhZEV4ZWNBcmdzSAASMAoMcGlfYmFzaF9hcmdzGC4gASgLMhguYWdlbnQudjEuUGlCYXNoRXhlY0FyZ3NIABIwCgxwaV9lZGl0X2FyZ3MYLyABKAsyGC5hZ2VudC52MS5QaUVkaXRFeGVjQXJnc0gAEjIKDXBpX3dyaXRlX2FyZ3MYMCABKAsyGS5hZ2VudC52MS5QaVdyaXRlRXhlY0FyZ3NIABIwCgxwaV9ncmVwX2FyZ3MYMSABKAsyGC5hZ2VudC52MS5QaUdyZXBFeGVjQXJnc0gAEjAKDHBpX2ZpbmRfYXJncxgyIAEoCzIYLmFnZW50LnYxLlBpRmluZEV4ZWNBcmdzSAASLAoKcGlfbHNfYXJncxgzIAEoCzIWLmFnZW50LnYxLlBpTHNFeGVjQXJnc0gAEjcKGG1pbmlfc3dlX2FnZW50X2Jhc2hfYXJncxg0IAEoCzITLmFnZW50LnYxLlNoZWxsQXJnc0gAEkQKGGNvbnZlcnNhdGlvbl9zZWFyY2hfYXJncxg1IAEoCzIgLmFnZW50LnYxLkNvbnZlcnNhdGlvblNlYXJjaEFyZ3NIABJFChlhZ2VudF9zdG9yZV9jb25mbGljdF9hcmdzGDYgASgLMiAuYWdlbnQudjEuQWdlbnRTdG9yZUNvbmZsaWN0QXJnc0gAEiwKH2FjY2VwdF9ob29rX2FkZGl0aW9uYWxfY29udGV4dHMYNyABKAhIAogBAUIJCgdtZXNzYWdlQg8KDV9zcGFuX2NvbnRleHRCIgogX2FjY2VwdF9ob29rX2FkZGl0aW9uYWxfY29udGV4dHMi4RQKEUV4ZWNDbGllbnRNZXNzYWdlEgoKAmlkGAEgASgNEg8KB2V4ZWNfaWQYDyABKAkSLQoMc2hlbGxfcmVzdWx0GAIgASgLMhUuYWdlbnQudjEuU2hlbGxSZXN1bHRIABItCgx3cml0ZV9yZXN1bHQYAyABKAsyFS5hZ2VudC52MS5Xcml0ZVJlc3VsdEgAEi8KDWRlbGV0ZV9yZXN1bHQYBCABKAsyFi5hZ2VudC52MS5EZWxldGVSZXN1bHRIABIrCgtncmVwX3Jlc3VsdBgFIAEoCzIULmFnZW50LnYxLkdyZXBSZXN1bHRIABIrCgtyZWFkX3Jlc3VsdBgHIAEoCzIULmFnZW50LnYxLlJlYWRSZXN1bHRIABInCglsc19yZXN1bHQYCCABKAsyEi5hZ2VudC52MS5Mc1Jlc3VsdEgAEjkKEmRpYWdub3N0aWNzX3Jlc3VsdBgJIAEoCzIbLmFnZW50LnYxLkRpYWdub3N0aWNzUmVzdWx0SAASQAoWcmVxdWVzdF9jb250ZXh0X3Jlc3VsdBgKIAEoCzIeLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0UmVzdWx0SAASKQoKbWNwX3Jlc3VsdBgLIAEoCzITLmFnZW50LnYxLk1jcFJlc3VsdEgAEi0KDHNoZWxsX3N0cmVhbRgOIAEoCzIVLmFnZW50LnYxLlNoZWxsU3RyZWFtSAASTQodYmFja2dyb3VuZF9zaGVsbF9zcGF3bl9yZXN1bHQYECABKAsyJC5hZ2VudC52MS5CYWNrZ3JvdW5kU2hlbGxTcGF3blJlc3VsdEgAEk4KHmxpc3RfbWNwX3Jlc291cmNlc19leGVjX3Jlc3VsdBgRIAEoCzIkLmFnZW50LnYxLkxpc3RNY3BSZXNvdXJjZXNFeGVjUmVzdWx0SAASTAodcmVhZF9tY3BfcmVzb3VyY2VfZXhlY19yZXN1bHQYEiABKAsyIy5hZ2VudC52MS5SZWFkTWNwUmVzb3VyY2VFeGVjUmVzdWx0SAASLQoMZmV0Y2hfcmVzdWx0GBQgASgLMhUuYWdlbnQudjEuRmV0Y2hSZXN1bHRIABI8ChRyZWNvcmRfc2NyZWVuX3Jlc3VsdBgVIAEoCzIcLmFnZW50LnYxLlJlY29yZFNjcmVlblJlc3VsdEgAEjoKE2NvbXB1dGVyX3VzZV9yZXN1bHQYFiABKAsyGy5hZ2VudC52MS5Db21wdXRlclVzZVJlc3VsdEgAEkMKGHdyaXRlX3NoZWxsX3N0ZGluX3Jlc3VsdBgXIAEoCzIfLmFnZW50LnYxLldyaXRlU2hlbGxTdGRpblJlc3VsdEgAEjQKFHJlZGFjdGVkX3JlYWRfcmVzdWx0GB0gASgLMhQuYWdlbnQudjEuUmVhZFJlc3VsdEgAEj0KFW1jcF9zdGF0ZV9leGVjX3Jlc3VsdBgkIAEoCzIcLmFnZW50LnYxLk1jcFN0YXRlRXhlY1Jlc3VsdEgAEjoKE2V4ZWN1dGVfaG9va19yZXN1bHQYGyABKAsyGy5hZ2VudC52MS5FeGVjdXRlSG9va1Jlc3VsdEgAEjMKD3N1YmFnZW50X3Jlc3VsdBgcIAEoCzIYLmFnZW50LnYxLlN1YmFnZW50UmVzdWx0SAASTQodZm9yY2VfYmFja2dyb3VuZF9zaGVsbF9yZXN1bHQYHiABKAsyJC5hZ2VudC52MS5Gb3JjZUJhY2tncm91bmRTaGVsbFJlc3VsdEgAElMKIGZvcmNlX2JhY2tncm91bmRfc3ViYWdlbnRfcmVzdWx0GB8gASgLMicuYWdlbnQudjEuRm9yY2VCYWNrZ3JvdW5kU3ViYWdlbnRSZXN1bHRIABI+ChVzdWJhZ2VudF9hd2FpdF9yZXN1bHQYJSABKAsyHS5hZ2VudC52MS5TdWJhZ2VudEF3YWl0UmVzdWx0SAASSwocc21hcnRfbW9kZV9jbGFzc2lmaWVyX3Jlc3VsdBgmIAEoCzIjLmFnZW50LnYxLlNtYXJ0TW9kZUNsYXNzaWZpZXJSZXN1bHRIABJGChljYW52YXNfZGlhZ25vc3RpY3NfcmVzdWx0GCggASgLMiEuYWdlbnQudjEuQ2FudmFzRGlhZ25vc3RpY3NSZXN1bHRIABJRCh9zaGVsbF9hbGxvd2xpc3RfcHJlY2hlY2tfcmVzdWx0GCkgASgLMiYuYWdlbnQudjEuU2hlbGxBbGxvd2xpc3RQcmVjaGVja1Jlc3VsdEgAEk0KHW1jcF9hbGxvd2xpc3RfcHJlY2hlY2tfcmVzdWx0GCogASgLMiQuYWdlbnQudjEuTWNwQWxsb3dsaXN0UHJlY2hlY2tSZXN1bHRIABJYCiN3ZWJfZmV0Y2hfYWxsb3dsaXN0X3ByZWNoZWNrX3Jlc3VsdBgrIAEoCzIpLmFnZW50LnYxLldlYkZldGNoQWxsb3dsaXN0UHJlY2hlY2tSZXN1bHRIABI2ChFnaXRfZGlmZl9yZXNwb25zZRgsIAEoCzIZLmFnZW50LnYxLkdldERpZmZSZXNwb25zZUgAEjQKDnBpX3JlYWRfcmVzdWx0GC4gASgLMhouYWdlbnQudjEuUGlSZWFkRXhlY1Jlc3VsdEgAEjQKDnBpX2Jhc2hfcmVzdWx0GC8gASgLMhouYWdlbnQudjEuUGlCYXNoRXhlY1Jlc3VsdEgAEjQKDnBpX2VkaXRfcmVzdWx0GDAgASgLMhouYWdlbnQudjEuUGlFZGl0RXhlY1Jlc3VsdEgAEjYKD3BpX3dyaXRlX3Jlc3VsdBgxIAEoCzIbLmFnZW50LnYxLlBpV3JpdGVFeGVjUmVzdWx0SAASNAoOcGlfZ3JlcF9yZXN1bHQYMiABKAsyGi5hZ2VudC52MS5QaUdyZXBFeGVjUmVzdWx0SAASNAoOcGlfZmluZF9yZXN1bHQYMyABKAsyGi5hZ2VudC52MS5QaUZpbmRFeGVjUmVzdWx0SAASMAoMcGlfbHNfcmVzdWx0GDQgASgLMhguYWdlbnQudjEuUGlMc0V4ZWNSZXN1bHRIABJIChpjb252ZXJzYXRpb25fc2VhcmNoX3Jlc3VsdBg1IAEoCzIiLmFnZW50LnYxLkNvbnZlcnNhdGlvblNlYXJjaFJlc3VsdEgAEkkKG2FnZW50X3N0b3JlX2NvbmZsaWN0X3Jlc3VsdBg2IAEoCzIiLmFnZW50LnYxLkFnZW50U3RvcmVDb25mbGljdFJlc3VsdEgAEjsKGm1pbmlfc3dlX2FnZW50X2Jhc2hfcmVzdWx0GDcgASgLMhUuYWdlbnQudjEuU2hlbGxSZXN1bHRIABIkChdsb2NhbF9leGVjdXRpb25fdGltZV9tcxgnIAEoBUgBiAEBEkEKGGhvb2tfYWRkaXRpb25hbF9jb250ZXh0cxgtIAMoCzIfLmFnZW50LnYxLkhvb2tBZGRpdGlvbmFsQ29udGV4dEIJCgdtZXNzYWdlQhoKGF9sb2NhbF9leGVjdXRpb25fdGltZV9tcyIuCglGZXRjaEFyZ3MSCwoDdXJsGAEgASgJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCSJpCgtGZXRjaFJlc3VsdBIpCgdzdWNjZXNzGAEgASgLMhYuYWdlbnQudjEuRmV0Y2hTdWNjZXNzSAASJQoFZXJyb3IYAiABKAsyFC5hZ2VudC52MS5GZXRjaEVycm9ySABCCAoGcmVzdWx0IlcKDEZldGNoU3VjY2VzcxILCgN1cmwYASABKAkSDwoHY29udGVudBgCIAEoCRITCgtzdGF0dXNfY29kZRgDIAEoBRIUCgxjb250ZW50X3R5cGUYBCABKAkiKAoKRmV0Y2hFcnJvchILCgN1cmwYASABKAkSDQoFZXJyb3IYAiABKAkibQoRR2VuZXJhdGVJbWFnZUFyZ3MSEwoLZGVzY3JpcHRpb24YASABKAkSFgoJZmlsZV9wYXRoGAIgASgJSACIAQESHQoVcmVmZXJlbmNlX2ltYWdlX3BhdGhzGAUgAygJQgwKCl9maWxlX3BhdGgigQEKE0dlbmVyYXRlSW1hZ2VSZXN1bHQSMQoHc3VjY2VzcxgBIAEoCzIeLmFnZW50LnYxLkdlbmVyYXRlSW1hZ2VTdWNjZXNzSAASLQoFZXJyb3IYAiABKAsyHC5hZ2VudC52MS5HZW5lcmF0ZUltYWdlRXJyb3JIAEIICgZyZXN1bHQiPQoUR2VuZXJhdGVJbWFnZVN1Y2Nlc3MSEQoJZmlsZV9wYXRoGAEgASgJEhIKCmltYWdlX2RhdGEYAiABKAkiIwoSR2VuZXJhdGVJbWFnZUVycm9yEg0KBWVycm9yGAEgASgJInEKFUdlbmVyYXRlSW1hZ2VUb29sQ2FsbBIpCgRhcmdzGAEgASgLMhsuYWdlbnQudjEuR2VuZXJhdGVJbWFnZUFyZ3MSLQoGcmVzdWx0GAIgASgLMh0uYWdlbnQudjEuR2VuZXJhdGVJbWFnZVJlc3VsdCLmBAoIR3JlcEFyZ3MSDwoHcGF0dGVybhgBIAEoCRIRCgRwYXRoGAIgASgJSACIAQESEQoEZ2xvYhgDIAEoCUgBiAEBEhgKC291dHB1dF9tb2RlGAQgASgJSAKIAQESGwoOY29udGV4dF9iZWZvcmUYBSABKAVIA4gBARIaCg1jb250ZXh0X2FmdGVyGAYgASgFSASIAQESFAoHY29udGV4dBgHIAEoBUgFiAEBEh0KEGNhc2VfaW5zZW5zaXRpdmUYCCABKAhIBogBARIRCgR0eXBlGAkgASgJSAeIAQESFwoKaGVhZF9saW1pdBgKIAEoBUgIiAEBEhYKCW11bHRpbGluZRgLIAEoCEgJiAEBEhEKBHNvcnQYDCABKAlICogBARIbCg5zb3J0X2FzY2VuZGluZxgNIAEoCEgLiAEBEhQKDHRvb2xfY2FsbF9pZBgOIAEoCRI0Cg5zYW5kYm94X3BvbGljeRgPIAEoCzIXLmFnZW50LnYxLlNhbmRib3hQb2xpY3lIDIgBARITCgZvZmZzZXQYECABKAVIDYgBAUIHCgVfcGF0aEIHCgVfZ2xvYkIOCgxfb3V0cHV0X21vZGVCEQoPX2NvbnRleHRfYmVmb3JlQhAKDl9jb250ZXh0X2FmdGVyQgoKCF9jb250ZXh0QhMKEV9jYXNlX2luc2Vuc2l0aXZlQgcKBV90eXBlQg0KC19oZWFkX2xpbWl0QgwKCl9tdWx0aWxpbmVCBwoFX3NvcnRCEQoPX3NvcnRfYXNjZW5kaW5nQhEKD19zYW5kYm94X3BvbGljeUIJCgdfb2Zmc2V0ImYKCkdyZXBSZXN1bHQSKAoHc3VjY2VzcxgBIAEoCzIVLmFnZW50LnYxLkdyZXBTdWNjZXNzSAASJAoFZXJyb3IYAiABKAsyEy5hZ2VudC52MS5HcmVwRXJyb3JIAEIICgZyZXN1bHQiGgoJR3JlcEVycm9yEg0KBWVycm9yGAEgASgJIrQCCgtHcmVwU3VjY2VzcxIPCgdwYXR0ZXJuGAEgASgJEgwKBHBhdGgYAiABKAkSEwoLb3V0cHV0X21vZGUYAyABKAkSRgoRd29ya3NwYWNlX3Jlc3VsdHMYBCADKAsyKy5hZ2VudC52MS5HcmVwU3VjY2Vzcy5Xb3Jrc3BhY2VSZXN1bHRzRW50cnkSPAoUYWN0aXZlX2VkaXRvcl9yZXN1bHQYBSABKAsyGS5hZ2VudC52MS5HcmVwVW5pb25SZXN1bHRIAIgBARpSChVXb3Jrc3BhY2VSZXN1bHRzRW50cnkSCwoDa2V5GAEgASgJEigKBXZhbHVlGAIgASgLMhkuYWdlbnQudjEuR3JlcFVuaW9uUmVzdWx0OgI4AUIXChVfYWN0aXZlX2VkaXRvcl9yZXN1bHQiowEKD0dyZXBVbmlvblJlc3VsdBIqCgVjb3VudBgBIAEoCzIZLmFnZW50LnYxLkdyZXBDb3VudFJlc3VsdEgAEioKBWZpbGVzGAIgASgLMhkuYWdlbnQudjEuR3JlcEZpbGVzUmVzdWx0SAASLgoHY29udGVudBgDIAEoCzIbLmFnZW50LnYxLkdyZXBDb250ZW50UmVzdWx0SABCCAoGcmVzdWx0IoMCCg9HcmVwQ291bnRSZXN1bHQSJwoGY291bnRzGAEgAygLMhcuYWdlbnQudjEuR3JlcEZpbGVDb3VudBITCgt0b3RhbF9maWxlcxgCIAEoBRIVCg10b3RhbF9tYXRjaGVzGAMgASgFEhgKEGNsaWVudF90cnVuY2F0ZWQYBCABKAgSGQoRcmlwZ3JlcF90cnVuY2F0ZWQYBSABKAgSHwoSaGVhZF9saW1pdF9hcHBsaWVkGAYgASgFSACIAQESGwoOb2Zmc2V0X2FwcGxpZWQYByABKAVIAYgBAUIVChNfaGVhZF9saW1pdF9hcHBsaWVkQhEKD19vZmZzZXRfYXBwbGllZCIsCg1HcmVwRmlsZUNvdW50EgwKBGZpbGUYASABKAkSDQoFY291bnQYAiABKAUi0gEKD0dyZXBGaWxlc1Jlc3VsdBINCgVmaWxlcxgBIAMoCRITCgt0b3RhbF9maWxlcxgCIAEoBRIYChBjbGllbnRfdHJ1bmNhdGVkGAMgASgIEhkKEXJpcGdyZXBfdHJ1bmNhdGVkGAQgASgIEh8KEmhlYWRfbGltaXRfYXBwbGllZBgFIAEoBUgAiAEBEhsKDm9mZnNldF9hcHBsaWVkGAYgASgFSAGIAQFCFQoTX2hlYWRfbGltaXRfYXBwbGllZEIRCg9fb2Zmc2V0X2FwcGxpZWQijAIKEUdyZXBDb250ZW50UmVzdWx0EigKB21hdGNoZXMYASADKAsyFy5hZ2VudC52MS5HcmVwRmlsZU1hdGNoEhMKC3RvdGFsX2xpbmVzGAIgASgFEhsKE3RvdGFsX21hdGNoZWRfbGluZXMYAyABKAUSGAoQY2xpZW50X3RydW5jYXRlZBgEIAEoCBIZChFyaXBncmVwX3RydW5jYXRlZBgFIAEoCBIfChJoZWFkX2xpbWl0X2FwcGxpZWQYBiABKAVIAIgBARIbCg5vZmZzZXRfYXBwbGllZBgHIAEoBUgBiAEBQhUKE19oZWFkX2xpbWl0X2FwcGxpZWRCEQoPX29mZnNldF9hcHBsaWVkIkoKDUdyZXBGaWxlTWF0Y2gSDAoEZmlsZRgBIAEoCRIrCgdtYXRjaGVzGAIgAygLMhouYWdlbnQudjEuR3JlcENvbnRlbnRNYXRjaCJsChBHcmVwQ29udGVudE1hdGNoEhMKC2xpbmVfbnVtYmVyGAEgASgFEg8KB2NvbnRlbnQYAiABKAkSGQoRY29udGVudF90cnVuY2F0ZWQYAyABKAgSFwoPaXNfY29udGV4dF9saW5lGAQgASgIIh0KCkdyZXBTdHJlYW0SDwoHcGF0dGVybhgBIAEoCSJWCgxHcmVwVG9vbENhbGwSIAoEYXJncxgBIAEoCzISLmFnZW50LnYxLkdyZXBBcmdzEiQKBnJlc3VsdBgCIAEoCzIULmFnZW50LnYxLkdyZXBSZXN1bHQiHgoLR2V0QmxvYkFyZ3MSDwoHYmxvYl9pZBgBIAEoDCI1Cg1HZXRCbG9iUmVzdWx0EhYKCWJsb2JfZGF0YRgBIAEoDEgAiAEBQgwKCl9ibG9iX2RhdGEiMQoLU2V0QmxvYkFyZ3MSDwoHYmxvYl9pZBgBIAEoDBIRCglibG9iX2RhdGEYAiABKAwiPgoNU2V0QmxvYlJlc3VsdBIjCgVlcnJvchgBIAEoCzIPLmFnZW50LnYxLkVycm9ySACIAQFCCAoGX2Vycm9yIssBCg9LdlNlcnZlck1lc3NhZ2USCgoCaWQYASABKA0SMAoMc3Bhbl9jb250ZXh0GAQgASgLMhUuYWdlbnQudjEuU3BhbkNvbnRleHRIAYgBARIuCg1nZXRfYmxvYl9hcmdzGAIgASgLMhUuYWdlbnQudjEuR2V0QmxvYkFyZ3NIABIuCg1zZXRfYmxvYl9hcmdzGAMgASgLMhUuYWdlbnQudjEuU2V0QmxvYkFyZ3NIAEIJCgdtZXNzYWdlQg8KDV9zcGFuX2NvbnRleHQikAEKD0t2Q2xpZW50TWVzc2FnZRIKCgJpZBgBIAEoDRIyCg9nZXRfYmxvYl9yZXN1bHQYAiABKAsyFy5hZ2VudC52MS5HZXRCbG9iUmVzdWx0SAASMgoPc2V0X2Jsb2JfcmVzdWx0GAMgASgLMhcuYWdlbnQudjEuU2V0QmxvYlJlc3VsdEgAQgkKB21lc3NhZ2UirQEKBkxzQXJncxIMCgRwYXRoGAEgASgJEg4KBmlnbm9yZRgCIAMoCRIUCgx0b29sX2NhbGxfaWQYAyABKAkSNAoOc2FuZGJveF9wb2xpY3kYBCABKAsyFy5hZ2VudC52MS5TYW5kYm94UG9saWN5SACIAQESFwoKdGltZW91dF9tcxgFIAEoDUgBiAEBQhEKD19zYW5kYm94X3BvbGljeUINCgtfdGltZW91dF9tcyKyAQoITHNSZXN1bHQSJgoHc3VjY2VzcxgBIAEoCzITLmFnZW50LnYxLkxzU3VjY2Vzc0gAEiIKBWVycm9yGAIgASgLMhEuYWdlbnQudjEuTHNFcnJvckgAEigKCHJlamVjdGVkGAMgASgLMhQuYWdlbnQudjEuTHNSZWplY3RlZEgAEiYKB3RpbWVvdXQYBCABKAsyEy5hZ2VudC52MS5Mc1RpbWVvdXRIAEIICgZyZXN1bHQiRwoJTHNTdWNjZXNzEjoKE2RpcmVjdG9yeV90cmVlX3Jvb3QYASABKAsyHS5hZ2VudC52MS5Mc0RpcmVjdG9yeVRyZWVOb2RlIvYCChNMc0RpcmVjdG9yeVRyZWVOb2RlEhAKCGFic19wYXRoGAEgASgJEjQKDWNoaWxkcmVuX2RpcnMYAiADKAsyHS5hZ2VudC52MS5Mc0RpcmVjdG9yeVRyZWVOb2RlEjoKDmNoaWxkcmVuX2ZpbGVzGAMgAygLMiIuYWdlbnQudjEuTHNEaXJlY3RvcnlUcmVlTm9kZV9GaWxlEh8KF2NoaWxkcmVuX3dlcmVfcHJvY2Vzc2VkGAQgASgIEmQKHWZ1bGxfc3VidHJlZV9leHRlbnNpb25fY291bnRzGAUgAygLMj0uYWdlbnQudjEuTHNEaXJlY3RvcnlUcmVlTm9kZS5GdWxsU3VidHJlZUV4dGVuc2lvbkNvdW50c0VudHJ5EhEKCW51bV9maWxlcxgGIAEoBRpBCh9GdWxsU3VidHJlZUV4dGVuc2lvbkNvdW50c0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBToCOAEiegoYTHNEaXJlY3RvcnlUcmVlTm9kZV9GaWxlEgwKBG5hbWUYASABKAkSOgoRdGVybWluYWxfbWV0YWRhdGEYAiABKAsyGi5hZ2VudC52MS5UZXJtaW5hbE1ldGFkYXRhSACIAQFCFAoSX3Rlcm1pbmFsX21ldGFkYXRhIiYKB0xzRXJyb3ISDAoEcGF0aBgBIAEoCRINCgVlcnJvchgCIAEoCSIqCgpMc1JlamVjdGVkEgwKBHBhdGgYASABKAkSDgoGcmVhc29uGAIgASgJIkcKCUxzVGltZW91dBI6ChNkaXJlY3RvcnlfdHJlZV9yb290GAEgASgLMh0uYWdlbnQudjEuTHNEaXJlY3RvcnlUcmVlTm9kZSLxAQoQVGVybWluYWxNZXRhZGF0YRIQCgNjd2QYASABKAlIAIgBARI5Cg1sYXN0X2NvbW1hbmRzGAIgAygLMiIuYWdlbnQudjEuVGVybWluYWxNZXRhZGF0YV9Db21tYW5kEh0KEGxhc3RfbW9kaWZpZWRfbXMYAyABKANIAYgBARJACg9jdXJyZW50X2NvbW1hbmQYBCABKAsyIi5hZ2VudC52MS5UZXJtaW5hbE1ldGFkYXRhX0NvbW1hbmRIAogBAUIGCgRfY3dkQhMKEV9sYXN0X21vZGlmaWVkX21zQhIKEF9jdXJyZW50X2NvbW1hbmQipwEKGFRlcm1pbmFsTWV0YWRhdGFfQ29tbWFuZBIPCgdjb21tYW5kGAEgASgJEhYKCWV4aXRfY29kZRgCIAEoBUgAiAEBEhkKDHRpbWVzdGFtcF9tcxgDIAEoA0gBiAEBEhgKC2R1cmF0aW9uX21zGAQgASgDSAKIAQFCDAoKX2V4aXRfY29kZUIPCg1fdGltZXN0YW1wX21zQg4KDF9kdXJhdGlvbl9tcyJQCgpMc1Rvb2xDYWxsEh4KBGFyZ3MYASABKAsyEC5hZ2VudC52MS5Mc0FyZ3MSIgoGcmVzdWx0GAIgASgLMhIuYWdlbnQudjEuTHNSZXN1bHQi4AIKB01jcEFyZ3MSDAoEbmFtZRgBIAEoCRIpCgRhcmdzGAIgAygLMhsuYWdlbnQudjEuTWNwQXJncy5BcmdzRW50cnkSFAoMdG9vbF9jYWxsX2lkGAMgASgJEhsKE3Byb3ZpZGVyX2lkZW50aWZpZXIYBCABKAkSEQoJdG9vbF9uYW1lGAUgASgJEj0KE3NtYXJ0X21vZGVfYXBwcm92YWwYBiABKAsyGy5hZ2VudC52MS5TbWFydE1vZGVBcHByb3ZhbEgAiAEBEiAKGHNtYXJ0X21vZGVfYXBwcm92YWxfb25seRgHIAEoCBIVCg1za2lwX2FwcHJvdmFsGAggASgIEhkKEXNlcnZlcl9pZGVudGlmaWVyGAkgASgJGisKCUFyZ3NFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAw6AjgBQhYKFF9zbWFydF9tb2RlX2FwcHJvdmFsIuMCCglNY3BSZXN1bHQSJwoHc3VjY2VzcxgBIAEoCzIULmFnZW50LnYxLk1jcFN1Y2Nlc3NIABIjCgVlcnJvchgCIAEoCzISLmFnZW50LnYxLk1jcEVycm9ySAASKQoIcmVqZWN0ZWQYAyABKAsyFS5hZ2VudC52MS5NY3BSZWplY3RlZEgAEjoKEXBlcm1pc3Npb25fZGVuaWVkGAQgASgLMh0uYWdlbnQudjEuTWNwUGVybWlzc2lvbkRlbmllZEgAEjMKDnRvb2xfbm90X2ZvdW5kGAUgASgLMhkuYWdlbnQudjEuTWNwVG9vbE5vdEZvdW5kSAASNwoQc2VydmVyX25vdF9mb3VuZBgGIAEoCzIbLmFnZW50LnYxLk1jcFNlcnZlck5vdEZvdW5kSAASKQoIYXBwcm92ZWQYByABKAsyFS5hZ2VudC52MS5NY3BBcHByb3ZlZEgAQggKBnJlc3VsdCI4Cg9NY3BUb29sTm90Rm91bmQSDAoEbmFtZRgBIAEoCRIXCg9hdmFpbGFibGVfdG9vbHMYAiADKAkiagoOTWNwVGV4dENvbnRlbnQSDAoEdGV4dBgBIAEoCRI2Cg9vdXRwdXRfbG9jYXRpb24YAiABKAsyGC5hZ2VudC52MS5PdXRwdXRMb2NhdGlvbkgAiAEBQhIKEF9vdXRwdXRfbG9jYXRpb24iMgoPTWNwSW1hZ2VDb250ZW50EgwKBGRhdGEYASABKAwSEQoJbWltZV90eXBlGAIgASgJInsKGE1jcFRvb2xSZXN1bHRDb250ZW50SXRlbRIoCgR0ZXh0GAEgASgLMhguYWdlbnQudjEuTWNwVGV4dENvbnRlbnRIABIqCgVpbWFnZRgCIAEoCzIZLmFnZW50LnYxLk1jcEltYWdlQ29udGVudEgAQgkKB2NvbnRlbnQiUwoKTWNwU3VjY2VzcxIzCgdjb250ZW50GAEgAygLMiIuYWdlbnQudjEuTWNwVG9vbFJlc3VsdENvbnRlbnRJdGVtEhAKCGlzX2Vycm9yGAIgASgIIhkKCE1jcEVycm9yEg0KBWVycm9yGAEgASgJIjIKC01jcFJlamVjdGVkEg4KBnJlYXNvbhgBIAEoCRITCgtpc19yZWFkb25seRgCIAEoCCI5ChNNY3BQZXJtaXNzaW9uRGVuaWVkEg0KBWVycm9yGAEgASgJEhMKC2lzX3JlYWRvbmx5GAIgASgIIjoKGExpc3RNY3BSZXNvdXJjZXNFeGVjQXJncxITCgZzZXJ2ZXIYASABKAlIAIgBAUIJCgdfc2VydmVyIsYBChpMaXN0TWNwUmVzb3VyY2VzRXhlY1Jlc3VsdBI0CgdzdWNjZXNzGAEgASgLMiEuYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc1N1Y2Nlc3NIABIwCgVlcnJvchgCIAEoCzIfLmFnZW50LnYxLkxpc3RNY3BSZXNvdXJjZXNFcnJvckgAEjYKCHJlamVjdGVkGAMgASgLMiIuYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc1JlamVjdGVkSABCCAoGcmVzdWx0Ir0CCiZMaXN0TWNwUmVzb3VyY2VzRXhlY1Jlc3VsdF9NY3BSZXNvdXJjZRILCgN1cmkYASABKAkSEQoEbmFtZRgCIAEoCUgAiAEBEhgKC2Rlc2NyaXB0aW9uGAMgASgJSAGIAQESFgoJbWltZV90eXBlGAQgASgJSAKIAQESDgoGc2VydmVyGAUgASgJElYKC2Fubm90YXRpb25zGAYgAygLMkEuYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc0V4ZWNSZXN1bHRfTWNwUmVzb3VyY2UuQW5ub3RhdGlvbnNFbnRyeRoyChBBbm5vdGF0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9taW1lX3R5cGUiXgoXTGlzdE1jcFJlc291cmNlc1N1Y2Nlc3MSQwoJcmVzb3VyY2VzGAEgAygLMjAuYWdlbnQudjEuTGlzdE1jcFJlc291cmNlc0V4ZWNSZXN1bHRfTWNwUmVzb3VyY2UiJgoVTGlzdE1jcFJlc291cmNlc0Vycm9yEg0KBWVycm9yGAEgASgJIioKGExpc3RNY3BSZXNvdXJjZXNSZWplY3RlZBIOCgZyZWFzb24YASABKAki0QEKF1JlYWRNY3BSZXNvdXJjZUV4ZWNBcmdzEg4KBnNlcnZlchgBIAEoCRILCgN1cmkYAiABKAkSGgoNZG93bmxvYWRfcGF0aBgDIAEoCUgAiAEBEhQKDHRvb2xfY2FsbF9pZBgEIAEoCRI9ChNzbWFydF9tb2RlX2FwcHJvdmFsGAUgASgLMhsuYWdlbnQudjEuU21hcnRNb2RlQXBwcm92YWxIAYgBAUIQCg5fZG93bmxvYWRfcGF0aEIWChRfc21hcnRfbW9kZV9hcHByb3ZhbCL6AQoZUmVhZE1jcFJlc291cmNlRXhlY1Jlc3VsdBIzCgdzdWNjZXNzGAEgASgLMiAuYWdlbnQudjEuUmVhZE1jcFJlc291cmNlU3VjY2Vzc0gAEi8KBWVycm9yGAIgASgLMh4uYWdlbnQudjEuUmVhZE1jcFJlc291cmNlRXJyb3JIABI1CghyZWplY3RlZBgDIAEoCzIhLmFnZW50LnYxLlJlYWRNY3BSZXNvdXJjZVJlamVjdGVkSAASNgoJbm90X2ZvdW5kGAQgASgLMiEuYWdlbnQudjEuUmVhZE1jcFJlc291cmNlTm90Rm91bmRIAEIICgZyZXN1bHQisgMKFlJlYWRNY3BSZXNvdXJjZVN1Y2Nlc3MSCwoDdXJpGAEgASgJEhEKBG5hbWUYAiABKAlIAYgBARIYCgtkZXNjcmlwdGlvbhgDIAEoCUgCiAEBEhYKCW1pbWVfdHlwZRgEIAEoCUgDiAEBEkYKC2Fubm90YXRpb25zGAcgAygLMjEuYWdlbnQudjEuUmVhZE1jcFJlc291cmNlU3VjY2Vzcy5Bbm5vdGF0aW9uc0VudHJ5EhoKDWRvd25sb2FkX3BhdGgYCCABKAlIBIgBARIOCgR0ZXh0GAUgASgJSAASDgoEYmxvYhgGIAEoDEgAEjYKD291dHB1dF9sb2NhdGlvbhgJIAEoCzIYLmFnZW50LnYxLk91dHB1dExvY2F0aW9uSAWIAQEaMgoQQW5ub3RhdGlvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgkKB2NvbnRlbnRCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uQgwKCl9taW1lX3R5cGVCEAoOX2Rvd25sb2FkX3BhdGhCEgoQX291dHB1dF9sb2NhdGlvbiIyChRSZWFkTWNwUmVzb3VyY2VFcnJvchILCgN1cmkYASABKAkSDQoFZXJyb3IYAiABKAkiNgoXUmVhZE1jcFJlc291cmNlUmVqZWN0ZWQSCwoDdXJpGAEgASgJEg4KBnJlYXNvbhgCIAEoCSImChdSZWFkTWNwUmVzb3VyY2VOb3RGb3VuZBILCgN1cmkYASABKAkisgEKEU1jcFRvb2xEZWZpbml0aW9uEgwKBG5hbWUYASABKAkSGwoTcHJvdmlkZXJfaWRlbnRpZmllchgEIAEoCRIRCgl0b29sX25hbWUYBSABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSFAoMaW5wdXRfc2NoZW1hGAMgASgMEh4KEWlucHV0X3NjaGVtYV9qc29uGAYgASgJSACIAQFCFAoSX2lucHV0X3NjaGVtYV9qc29uIjoKCE1jcFRvb2xzEi4KCW1jcF90b29scxgBIAMoCzIbLmFnZW50LnYxLk1jcFRvb2xEZWZpbml0aW9uIlcKD01jcEluc3RydWN0aW9ucxITCgtzZXJ2ZXJfbmFtZRgBIAEoCRIUCgxpbnN0cnVjdGlvbnMYAiABKAkSGQoRc2VydmVyX2lkZW50aWZpZXIYAyABKAki/QIKDU1jcERlc2NyaXB0b3ISEwoLc2VydmVyX25hbWUYASABKAkSGQoRc2VydmVyX2lkZW50aWZpZXIYAiABKAkSGAoLZm9sZGVyX3BhdGgYAyABKAlIAIgBARIkChdzZXJ2ZXJfdXNlX2luc3RydWN0aW9ucxgEIAEoCUgBiAEBEioKBXRvb2xzGAUgAygLMhsuYWdlbnQudjEuTWNwVG9vbERlc2NyaXB0b3ISEwoGcGx1Z2luGAcgASgJSAKIAQESGAoLbWFya2V0cGxhY2UYCCABKAlIA4gBARIZCgxwbHVnaW5fZGJfaWQYCSABKAlIBIgBARIbCg5tYXJrZXRwbGFjZV9pZBgKIAEoCUgFiAEBQg4KDF9mb2xkZXJfcGF0aEIaChhfc2VydmVyX3VzZV9pbnN0cnVjdGlvbnNCCQoHX3BsdWdpbkIOCgxfbWFya2V0cGxhY2VCDwoNX3BsdWdpbl9kYl9pZEIRCg9fbWFya2V0cGxhY2VfaWQiuAEKEU1jcFRvb2xEZXNjcmlwdG9yEhEKCXRvb2xfbmFtZRgBIAEoCRIcCg9kZWZpbml0aW9uX3BhdGgYAiABKAlIAIgBARIYCgtkZXNjcmlwdGlvbhgDIAEoCUgBiAEBEh4KEWlucHV0X3NjaGVtYV9qc29uGAUgASgJSAKIAQFCEgoQX2RlZmluaXRpb25fcGF0aEIOCgxfZGVzY3JpcHRpb25CFAoSX2lucHV0X3NjaGVtYV9qc29uIngKFE1jcEZpbGVTeXN0ZW1PcHRpb25zEg8KB2VuYWJsZWQYASABKAgSHQoVd29ya3NwYWNlX3Byb2plY3RfZGlyGAIgASgJEjAKD21jcF9kZXNjcmlwdG9ycxgDIAMoCzIXLmFnZW50LnYxLk1jcERlc2NyaXB0b3IimgEKCFJlYWRBcmdzEgwKBHBhdGgYASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJEhMKBm9mZnNldBgEIAEoBUgAiAEBEhIKBWxpbWl0GAUgASgNSAGIAQESGgoNZW5jb2RpbmdfaGludBgGIAEoCUgCiAEBQgkKB19vZmZzZXRCCAoGX2xpbWl0QhAKDl9lbmNvZGluZ19oaW50IrgCCgpSZWFkUmVzdWx0EigKB3N1Y2Nlc3MYASABKAsyFS5hZ2VudC52MS5SZWFkU3VjY2Vzc0gAEiQKBWVycm9yGAIgASgLMhMuYWdlbnQudjEuUmVhZEVycm9ySAASKgoIcmVqZWN0ZWQYAyABKAsyFi5hZ2VudC52MS5SZWFkUmVqZWN0ZWRIABI0Cg5maWxlX25vdF9mb3VuZBgEIAEoCzIaLmFnZW50LnYxLlJlYWRGaWxlTm90Rm91bmRIABI7ChFwZXJtaXNzaW9uX2RlbmllZBgFIAEoCzIeLmFnZW50LnYxLlJlYWRQZXJtaXNzaW9uRGVuaWVkSAASMQoMaW52YWxpZF9maWxlGAYgASgLMhkuYWdlbnQudjEuUmVhZEludmFsaWRGaWxlSABCCAoGcmVzdWx0IsoBCgtSZWFkU3VjY2VzcxIMCgRwYXRoGAEgASgJEhMKC3RvdGFsX2xpbmVzGAMgASgFEhEKCWZpbGVfc2l6ZRgEIAEoAxIRCgl0cnVuY2F0ZWQYBiABKAgSGwoOb3V0cHV0X2Jsb2JfaWQYByABKAxIAYgBARIRCgdjb250ZW50GAIgASgJSAASDgoEZGF0YRgFIAEoDEgAEhUKDXJhbmdlX2FwcGxpZWQYCCABKAhCCAoGb3V0cHV0QhEKD19vdXRwdXRfYmxvYl9pZCIoCglSZWFkRXJyb3ISDAoEcGF0aBgBIAEoCRINCgVlcnJvchgCIAEoCSIsCgxSZWFkUmVqZWN0ZWQSDAoEcGF0aBgBIAEoCRIOCgZyZWFzb24YAiABKAkiIAoQUmVhZEZpbGVOb3RGb3VuZBIMCgRwYXRoGAEgASgJIiQKFFJlYWRQZXJtaXNzaW9uRGVuaWVkEgwKBHBhdGgYASABKAkiLwoPUmVhZEludmFsaWRGaWxlEgwKBHBhdGgYASABKAkSDgoGcmVhc29uGAIgASgJIl4KDFJlYWRUb29sQ2FsbBIkCgRhcmdzGAEgASgLMhYuYWdlbnQudjEuUmVhZFRvb2xBcmdzEigKBnJlc3VsdBgCIAEoCzIYLmFnZW50LnYxLlJlYWRUb29sUmVzdWx0IloKDFJlYWRUb29sQXJncxIMCgRwYXRoGAEgASgJEhMKBm9mZnNldBgCIAEoBUgAiAEBEhIKBWxpbWl0GAMgASgFSAGIAQFCCQoHX29mZnNldEIICgZfbGltaXQicgoOUmVhZFRvb2xSZXN1bHQSLAoHc3VjY2VzcxgBIAEoCzIZLmFnZW50LnYxLlJlYWRUb29sU3VjY2Vzc0gAEigKBWVycm9yGAIgASgLMhcuYWdlbnQudjEuUmVhZFRvb2xFcnJvckgAQggKBnJlc3VsdCIxCglSZWFkUmFuZ2USEgoKc3RhcnRfbGluZRgBIAEoDRIQCghlbmRfbGluZRgCIAEoDSKOAgoPUmVhZFRvb2xTdWNjZXNzEhAKCGlzX2VtcHR5GAIgASgIEhYKDmV4Y2VlZGVkX2xpbWl0GAMgASgIEhMKC3RvdGFsX2xpbmVzGAQgASgNEhEKCWZpbGVfc2l6ZRgFIAEoDRIMCgRwYXRoGAcgASgJEiwKCnJlYWRfcmFuZ2UYCCABKAsyEy5hZ2VudC52MS5SZWFkUmFuZ2VIAYgBARIRCgdjb250ZW50GAEgASgJSAASDgoEZGF0YRgGIAEoDEgAEhYKDGRhdGFfYmxvYl9pZBgJIAEoDEgAEhkKD2NvbnRlbnRfYmxvYl9pZBgKIAEoDEgAQggKBm91dHB1dEINCgtfcmVhZF9yYW5nZSImCg1SZWFkVG9vbEVycm9yEhUKDWVycm9yX21lc3NhZ2UYASABKAkiagoQUmVjb3JkU2NyZWVuQXJncxIMCgRtb2RlGAEgASgFEhQKDHRvb2xfY2FsbF9pZBgCIAEoCRIdChBzYXZlX2FzX2ZpbGVuYW1lGAMgASgJSACIAQFCEwoRX3NhdmVfYXNfZmlsZW5hbWUiiQIKElJlY29yZFNjcmVlblJlc3VsdBI7Cg1zdGFydF9zdWNjZXNzGAEgASgLMiIuYWdlbnQudjEuUmVjb3JkU2NyZWVuU3RhcnRTdWNjZXNzSAASOQoMc2F2ZV9zdWNjZXNzGAIgASgLMiEuYWdlbnQudjEuUmVjb3JkU2NyZWVuU2F2ZVN1Y2Nlc3NIABI/Cg9kaXNjYXJkX3N1Y2Nlc3MYAyABKAsyJC5hZ2VudC52MS5SZWNvcmRTY3JlZW5EaXNjYXJkU3VjY2Vzc0gAEjAKB2ZhaWx1cmUYBCABKAsyHS5hZ2VudC52MS5SZWNvcmRTY3JlZW5GYWlsdXJlSABCCAoGcmVzdWx0ImcKGFJlY29yZFNjcmVlblN0YXJ0U3VjY2VzcxIlCh13YXNfcHJpb3JfcmVjb3JkaW5nX2NhbmNlbGxlZBgBIAEoCBIkChx3YXNfc2F2ZV9hc19maWxlbmFtZV9pZ25vcmVkGAIgASgIIqABChdSZWNvcmRTY3JlZW5TYXZlU3VjY2VzcxIMCgRwYXRoGAEgASgJEh0KFXJlY29yZGluZ19kdXJhdGlvbl9tcxgCIAEoAxIwCiNyZXF1ZXN0ZWRfZmlsZV9wYXRoX3JlamVjdGVkX3JlYXNvbhgDIAEoBUgAiAEBQiYKJF9yZXF1ZXN0ZWRfZmlsZV9wYXRoX3JlamVjdGVkX3JlYXNvbiIcChpSZWNvcmRTY3JlZW5EaXNjYXJkU3VjY2VzcyIkChNSZWNvcmRTY3JlZW5GYWlsdXJlEg0KBWVycm9yGAEgASgJIjYKE0N1cnNvclBhY2thZ2VQcm9tcHQSDAoEbmFtZRgBIAEoCRIRCglmaWxlX3BhdGgYAiABKAki4gEKDUN1cnNvclBhY2thZ2USDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRITCgtmb2xkZXJfcGF0aBgDIAEoCRIPCgdlbmFibGVkGAQgASgIEhgKC3BhcnNlX2Vycm9yGAUgASgJSACIAQESLgoHcHJvbXB0cxgGIAMoCzIdLmFnZW50LnYxLkN1cnNvclBhY2thZ2VQcm9tcHQSGAoQcmVhZG1lX2ZpbGVfcGF0aBgHIAEoCRIUCgxwYWNrYWdlX3R5cGUYCCABKAVCDgoMX3BhcnNlX2Vycm9yIqsCChZSZXBvc2l0b3J5SW5kZXhpbmdJbmZvEh8KF3JlbGF0aXZlX3dvcmtzcGFjZV9wYXRoGAEgASgJEhMKC3JlbW90ZV91cmxzGAIgAygJEhQKDHJlbW90ZV9uYW1lcxgDIAMoCRIRCglyZXBvX25hbWUYBCABKAkSEgoKcmVwb19vd25lchgFIAEoCRISCgppc190cmFja2VkGAYgASgIEhAKCGlzX2xvY2FsGAcgASgIEiYKGW9ydGhvZ29uYWxfdHJhbnNmb3JtX3NlZWQYCCABKAFIAIgBARIVCg13b3Jrc3BhY2VfdXJpGAkgASgJEhsKE3BhdGhfZW5jcnlwdGlvbl9rZXkYCiABKAlCHAoaX29ydGhvZ29uYWxfdHJhbnNmb3JtX3NlZWQirAIKElJlcXVlc3RDb250ZXh0QXJncxIdChBub3Rlc19zZXNzaW9uX2lkGAIgASgJSACIAQESGQoMd29ya3NwYWNlX2lkGAMgASgJSAGIAQESJgoZcmVhZF9vbmx5X3Bpbm5lZF90cmVlX3NoYRgEIAEoCUgCiAEBEigKG3JlYWRfb25seV9wbHVnaW5fY2FjaGVfcm9vdBgFIAEoCUgDiAEBEhcKCnVzZV9jYWNoZWQYByABKAhIBIgBAUITChFfbm90ZXNfc2Vzc2lvbl9pZEIPCg1fd29ya3NwYWNlX2lkQhwKGl9yZWFkX29ubHlfcGlubmVkX3RyZWVfc2hhQh4KHF9yZWFkX29ubHlfcGx1Z2luX2NhY2hlX3Jvb3RCDQoLX3VzZV9jYWNoZWQiugEKFFJlcXVlc3RDb250ZXh0UmVzdWx0EjIKB3N1Y2Nlc3MYASABKAsyHy5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dFN1Y2Nlc3NIABIuCgVlcnJvchgCIAEoCzIdLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0RXJyb3JIABI0CghyZWplY3RlZBgDIAEoCzIgLmFnZW50LnYxLlJlcXVlc3RDb250ZXh0UmVqZWN0ZWRIAEIICgZyZXN1bHQiigEKFVJlcXVlc3RDb250ZXh0U3VjY2VzcxIxCg9yZXF1ZXN0X2NvbnRleHQYASABKAsyGC5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dBIjChZzZXJ2ZWRfZnJvbV9kaXNrX2NhY2hlGAIgASgISACIAQFCGQoXX3NlcnZlZF9mcm9tX2Rpc2tfY2FjaGUiJAoTUmVxdWVzdENvbnRleHRFcnJvchINCgVlcnJvchgBIAEoCSIoChZSZXF1ZXN0Q29udGV4dFJlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSLCAQoKSW1hZ2VQcm90bxIMCgRkYXRhGAEgASgMEgwKBHV1aWQYAiABKAkSDAoEcGF0aBgDIAEoCRIxCglkaW1lbnNpb24YBCABKAsyHi5hZ2VudC52MS5JbWFnZVByb3RvX0RpbWVuc2lvbhImChl0YXNrX3NwZWNpZmljX2Rlc2NyaXB0aW9uGAYgASgJSACIAQESEQoJbWltZV90eXBlGAcgASgJQhwKGl90YXNrX3NwZWNpZmljX2Rlc2NyaXB0aW9uIjUKFEltYWdlUHJvdG9fRGltZW5zaW9uEg0KBXdpZHRoGAEgASgFEg4KBmhlaWdodBgCIAEoBSJoCgtHaXRSZXBvSW5mbxIMCgRwYXRoGAEgASgJEg4KBnN0YXR1cxgCIAEoCRITCgticmFuY2hfbmFtZRgDIAEoCRIXCgpyZW1vdGVfdXJsGAQgASgJSACIAQFCDQoLX3JlbW90ZV91cmwimwIKEVJlcXVlc3RDb250ZXh0RW52EhIKCm9zX3ZlcnNpb24YASABKAkSFwoPd29ya3NwYWNlX3BhdGhzGAIgAygJEg0KBXNoZWxsGAMgASgJEhcKD3NhbmRib3hfZW5hYmxlZBgFIAEoCBIYChB0ZXJtaW5hbHNfZm9sZGVyGAcgASgJEiEKGWFnZW50X3NoYXJlZF9ub3Rlc19mb2xkZXIYCCABKAkSJwofYWdlbnRfY29udmVyc2F0aW9uX25vdGVzX2ZvbGRlchgJIAEoCRIRCgl0aW1lX3pvbmUYCiABKAkSFgoOcHJvamVjdF9mb2xkZXIYCyABKAkSIAoYYWdlbnRfdHJhbnNjcmlwdHNfZm9sZGVyGAwgASgJIjwKD0RlYnVnTW9kZUNvbmZpZxIQCghsb2dfcGF0aBgBIAEoCRIXCg9zZXJ2ZXJfZW5kcG9pbnQYAiABKAkitAEKD1NraWxsRGVzY3JpcHRvchIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEhMKC2ZvbGRlcl9wYXRoGAMgASgJEg8KB2VuYWJsZWQYBCABKAgSGAoLcGFyc2VfZXJyb3IYBSABKAlIAIgBARIYChByZWFkbWVfZmlsZV9wYXRoGAYgASgJEhQKDHBhY2thZ2VfdHlwZRgHIAEoBUIOCgxfcGFyc2VfZXJyb3IiRAoMU2tpbGxPcHRpb25zEjQKEXNraWxsX2Rlc2NyaXB0b3JzGAEgAygLMhkuYWdlbnQudjEuU2tpbGxEZXNjcmlwdG9yIvYICg5SZXF1ZXN0Q29udGV4dBIjCgVydWxlcxgCIAMoCzIULmFnZW50LnYxLkN1cnNvclJ1bGUSKAoDZW52GAQgASgLMhsuYWdlbnQudjEuUmVxdWVzdENvbnRleHRFbnYSOQoPcmVwb3NpdG9yeV9pbmZvGAYgAygLMiAuYWdlbnQudjEuUmVwb3NpdG9yeUluZGV4aW5nSW5mbxIqCgV0b29scxgHIAMoCzIbLmFnZW50LnYxLk1jcFRvb2xEZWZpbml0aW9uEicKGmNvbnZlcnNhdGlvbl9ub3Rlc19saXN0aW5nGAggASgJSACIAQESIQoUc2hhcmVkX25vdGVzX2xpc3RpbmcYCSABKAlIAYgBARIoCglnaXRfcmVwb3MYCyADKAsyFS5hZ2VudC52MS5HaXRSZXBvSW5mbxI2Cg9wcm9qZWN0X2xheW91dHMYDSADKAsyHS5hZ2VudC52MS5Mc0RpcmVjdG9yeVRyZWVOb2RlEjMKEG1jcF9pbnN0cnVjdGlvbnMYDiADKAsyGS5hZ2VudC52MS5NY3BJbnN0cnVjdGlvbnMSOQoRZGVidWdfbW9kZV9jb25maWcYDyABKAsyGS5hZ2VudC52MS5EZWJ1Z01vZGVDb25maWdIAogBARIXCgpjbG91ZF9ydWxlGBAgASgJSAOIAQESHwoSd2ViX3NlYXJjaF9lbmFibGVkGBEgASgISASIAQESMgoNc2tpbGxfb3B0aW9ucxgSIAEoCzIWLmFnZW50LnYxLlNraWxsT3B0aW9uc0gFiAEBEi4KIXJlcG9zaXRvcnlfaW5mb19zaG91bGRfcXVlcnlfcHJvZBgTIAEoCEgGiAEBEkEKDWZpbGVfY29udGVudHMYFCADKAsyKi5hZ2VudC52MS5SZXF1ZXN0Q29udGV4dC5GaWxlQ29udGVudHNFbnRyeRIgChN1c2VyX2ludGVudF9zdW1tYXJ5GBUgASgJSAeIAQESMgoQY3VzdG9tX3N1YmFnZW50cxgWIAMoCzIYLmFnZW50LnYxLkN1c3RvbVN1YmFnZW50EkQKF21jcF9maWxlX3N5c3RlbV9vcHRpb25zGBcgASgLMh4uYWdlbnQudjEuTWNwRmlsZVN5c3RlbU9wdGlvbnNICIgBARozChFGaWxlQ29udGVudHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQh0KG19jb252ZXJzYXRpb25fbm90ZXNfbGlzdGluZ0IXChVfc2hhcmVkX25vdGVzX2xpc3RpbmdCFAoSX2RlYnVnX21vZGVfY29uZmlnQg0KC19jbG91ZF9ydWxlQhUKE193ZWJfc2VhcmNoX2VuYWJsZWRCEAoOX3NraWxsX29wdGlvbnNCJAoiX3JlcG9zaXRvcnlfaW5mb19zaG91bGRfcXVlcnlfcHJvZEIWChRfdXNlcl9pbnRlbnRfc3VtbWFyeUIaChhfbWNwX2ZpbGVfc3lzdGVtX29wdGlvbnMisgIKDVNhbmRib3hQb2xpY3kSDAoEdHlwZRgBIAEoBRIbCg5uZXR3b3JrX2FjY2VzcxgCIAEoCEgAiAEBEiIKGmFkZGl0aW9uYWxfcmVhZHdyaXRlX3BhdGhzGAMgAygJEiEKGWFkZGl0aW9uYWxfcmVhZG9ubHlfcGF0aHMYBCADKAkSHQoQZGVidWdfb3V0cHV0X2RpchgFIAEoCUgBiAEBEh0KEGJsb2NrX2dpdF93cml0ZXMYBiABKAhIAogBARIeChFkaXNhYmxlX3RtcF93cml0ZRgHIAEoCEgDiAEBQhEKD19uZXR3b3JrX2FjY2Vzc0ITChFfZGVidWdfb3V0cHV0X2RpckITChFfYmxvY2tfZ2l0X3dyaXRlc0IUChJfZGlzYWJsZV90bXBfd3JpdGUi7wEKDVNlbGVjdGVkSW1hZ2USDAoEdXVpZBgCIAEoCRIMCgRwYXRoGAMgASgJEjQKCWRpbWVuc2lvbhgEIAEoCzIhLmFnZW50LnYxLlNlbGVjdGVkSW1hZ2VfRGltZW5zaW9uEhEKCW1pbWVfdHlwZRgHIAEoCRIRCgdibG9iX2lkGAEgASgMSAASDgoEZGF0YRgIIAEoDEgAEkMKEWJsb2JfaWRfd2l0aF9kYXRhGAkgASgLMiYuYWdlbnQudjEuU2VsZWN0ZWRJbWFnZV9CbG9iSWRXaXRoRGF0YUgAQhEKD2RhdGFfb3JfYmxvYl9pZCI9ChxTZWxlY3RlZEltYWdlX0Jsb2JJZFdpdGhEYXRhEg8KB2Jsb2JfaWQYASABKAwSDAoEZGF0YRgCIAEoDCI4ChdTZWxlY3RlZEltYWdlX0RpbWVuc2lvbhINCgV3aWR0aBgBIAEoBRIOCgZoZWlnaHQYAiABKAUiSQoRRXh0cmFDb250ZXh0RW50cnkSDgoEZGF0YRgBIAEoCUgAEhEKB2Jsb2JfaWQYAiABKAxIAEIRCg9kYXRhX29yX2Jsb2JfaWQiWwoMU2VsZWN0ZWRGaWxlEg8KB2NvbnRlbnQYASABKAkSDAoEcGF0aBgCIAEoCRIaCg1yZWxhdGl2ZV9wYXRoGAMgASgJSACIAQFCEAoOX3JlbGF0aXZlX3BhdGgihAEKFVNlbGVjdGVkQ29kZVNlbGVjdGlvbhIPCgdjb250ZW50GAEgASgJEgwKBHBhdGgYAiABKAkSGgoNcmVsYXRpdmVfcGF0aBgDIAEoCUgAiAEBEh4KBXJhbmdlGAQgASgLMg8uYWdlbnQudjEuUmFuZ2VCEAoOX3JlbGF0aXZlX3BhdGgiXQoQU2VsZWN0ZWRUZXJtaW5hbBIPCgdjb250ZW50GAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESEQoEcGF0aBgDIAEoCUgBiAEBQggKBl90aXRsZUIHCgVfcGF0aCKGAQoZU2VsZWN0ZWRUZXJtaW5hbFNlbGVjdGlvbhIPCgdjb250ZW50GAEgASgJEhIKBXRpdGxlGAIgASgJSACIAQESEQoEcGF0aBgDIAEoCUgBiAEBEh4KBXJhbmdlGAQgASgLMg8uYWdlbnQudjEuUmFuZ2VCCAoGX3RpdGxlQgcKBV9wYXRoIoMBCg5TZWxlY3RlZEZvbGRlchIMCgRwYXRoGAEgASgJEhoKDXJlbGF0aXZlX3BhdGgYAiABKAlIAIgBARI1Cg5kaXJlY3RvcnlfdHJlZRgDIAEoCzIdLmFnZW50LnYxLkxzRGlyZWN0b3J5VHJlZU5vZGVCEAoOX3JlbGF0aXZlX3BhdGginwEKFFNlbGVjdGVkRXh0ZXJuYWxMaW5rEgsKA3VybBgBIAEoCRIMCgR1dWlkGAIgASgJEhgKC3BkZl9jb250ZW50GAMgASgJSACIAQESEwoGaXNfcGRmGAQgASgISAGIAQESFQoIZmlsZW5hbWUYBSABKAlIAogBAUIOCgxfcGRmX2NvbnRlbnRCCQoHX2lzX3BkZkILCglfZmlsZW5hbWUiOAoSU2VsZWN0ZWRDdXJzb3JSdWxlEiIKBHJ1bGUYASABKAsyFC5hZ2VudC52MS5DdXJzb3JSdWxlIiIKD1NlbGVjdGVkR2l0RGlmZhIPCgdjb250ZW50GAEgASgJIjIKH1NlbGVjdGVkR2l0RGlmZkZyb21CcmFuY2hUb01haW4SDwoHY29udGVudBgBIAEoCSJpChFTZWxlY3RlZEdpdENvbW1pdBILCgNzaGEYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEgwKBGRpZmYYBCABKAlCDgoMX2Rlc2NyaXB0aW9uIt0BChNTZWxlY3RlZFB1bGxSZXF1ZXN0Eg4KBm51bWJlchgBIAEoBRILCgN1cmwYAiABKAkSEgoFdGl0bGUYAyABKAlIAIgBARITCgtmb2xkZXJfcGF0aBgEIAEoCRIZCgxzdW1tYXJ5X2pzb24YBSABKAlIAYgBARIYCgtkZXNjcmlwdGlvbhgGIAEoCUgCiAEBEhQKB2Jsb2JfaWQYByABKAxIA4gBAUIICgZfdGl0bGVCDwoNX3N1bW1hcnlfanNvbkIOCgxfZGVzY3JpcHRpb25CCgoIX2Jsb2JfaWQiswEKGlNlbGVjdGVkR2l0UFJEaWZmU2VsZWN0aW9uEg4KBnByX3VybBgBIAEoCRIRCglmaWxlX3BhdGgYAiABKAkSEgoKc3RhcnRfbGluZRgDIAEoBRIQCghlbmRfbGluZRgEIAEoBRIZCgxkaWZmX2NvbnRlbnQYBSABKAlIAIgBARIUCgdibG9iX2lkGAYgASgMSAGIAQFCDwoNX2RpZmZfY29udGVudEIKCghfYmxvYl9pZCI2ChVTZWxlY3RlZEN1cnNvckNvbW1hbmQSDAoEbmFtZRgBIAEoCRIPCgdjb250ZW50GAIgASgJIjUKFVNlbGVjdGVkRG9jdW1lbnRhdGlvbhIOCgZkb2NfaWQYASABKAkSDAoEbmFtZRgCIAEoCSIyChBTZWxlY3RlZFBhc3RDaGF0EhAKCGFnZW50X2lkGAEgASgJEgwKBG5hbWUYAiABKAkiqwEKCUNhbGxGcmFtZRIaCg1mdW5jdGlvbl9uYW1lGAEgASgJSACIAQESEAoDdXJsGAIgASgJSAGIAQESGAoLbGluZV9udW1iZXIYAyABKAVIAogBARIaCg1jb2x1bW5fbnVtYmVyGAQgASgFSAOIAQFCEAoOX2Z1bmN0aW9uX25hbWVCBgoEX3VybEIOCgxfbGluZV9udW1iZXJCEAoOX2NvbHVtbl9udW1iZXIiaAoKU3RhY2tUcmFjZRIoCgtjYWxsX2ZyYW1lcxgBIAMoCzITLmFnZW50LnYxLkNhbGxGcmFtZRIcCg9yYXdfc3RhY2tfdHJhY2UYAiABKAlIAIgBAUISChBfcmF3X3N0YWNrX3RyYWNlIuQBChJTZWxlY3RlZENvbnNvbGVMb2cSDwoHbWVzc2FnZRgBIAEoCRIRCgl0aW1lc3RhbXAYAiABKAESDQoFbGV2ZWwYAyABKAkSEwoLY2xpZW50X25hbWUYBCABKAkSEgoKc2Vzc2lvbl9pZBgFIAEoCRIuCgtzdGFja190cmFjZRgGIAEoCzIULmFnZW50LnYxLlN0YWNrVHJhY2VIAIgBARIdChBvYmplY3RfZGF0YV9qc29uGAcgASgJSAGIAQFCDgoMX3N0YWNrX3RyYWNlQhMKEV9vYmplY3RfZGF0YV9qc29uIroBChFTZWxlY3RlZFVJRWxlbWVudBIPCgdlbGVtZW50GAEgASgJEg0KBXhwYXRoGAIgASgJEhQKDHRleHRfY29udGVudBgDIAEoCRINCgVleHRyYRgEIAEoCRIWCgljb21wb25lbnQYBSABKAlIAIgBARIhChRjb21wb25lbnRfcHJvcHNfanNvbhgGIAEoCUgBiAEBQgwKCl9jb21wb25lbnRCFwoVX2NvbXBvbmVudF9wcm9wc19qc29uIiAKEFNlbGVjdGVkU3ViYWdlbnQSDAoEbmFtZRgBIAEoCSKCCgoPU2VsZWN0ZWRDb250ZXh0EjAKD3NlbGVjdGVkX2ltYWdlcxgBIAMoCzIXLmFnZW50LnYxLlNlbGVjdGVkSW1hZ2USPAoSaW52b2NhdGlvbl9jb250ZXh0GAIgASgLMhsuYWdlbnQudjEuSW52b2NhdGlvbkNvbnRleHRIAIgBARIVCg1leHRyYV9jb250ZXh0GAMgAygJEjoKFWV4dHJhX2NvbnRleHRfZW50cmllcxgQIAMoCzIbLmFnZW50LnYxLkV4dHJhQ29udGV4dEVudHJ5EiUKBWZpbGVzGAQgAygLMhYuYWdlbnQudjEuU2VsZWN0ZWRGaWxlEjgKD2NvZGVfc2VsZWN0aW9ucxgFIAMoCzIfLmFnZW50LnYxLlNlbGVjdGVkQ29kZVNlbGVjdGlvbhItCgl0ZXJtaW5hbHMYBiADKAsyGi5hZ2VudC52MS5TZWxlY3RlZFRlcm1pbmFsEkAKE3Rlcm1pbmFsX3NlbGVjdGlvbnMYByADKAsyIy5hZ2VudC52MS5TZWxlY3RlZFRlcm1pbmFsU2VsZWN0aW9uEikKB2ZvbGRlcnMYCCADKAsyGC5hZ2VudC52MS5TZWxlY3RlZEZvbGRlchI2Cg5leHRlcm5hbF9saW5rcxgJIAMoCzIeLmFnZW50LnYxLlNlbGVjdGVkRXh0ZXJuYWxMaW5rEjIKDGN1cnNvcl9ydWxlcxgKIAMoCzIcLmFnZW50LnYxLlNlbGVjdGVkQ3Vyc29yUnVsZRIwCghnaXRfZGlmZhgSIAEoCzIZLmFnZW50LnYxLlNlbGVjdGVkR2l0RGlmZkgBiAEBElQKHGdpdF9kaWZmX2Zyb21fYnJhbmNoX3RvX21haW4YCyABKAsyKS5hZ2VudC52MS5TZWxlY3RlZEdpdERpZmZGcm9tQnJhbmNoVG9NYWluSAKIAQESOAoPY3Vyc29yX2NvbW1hbmRzGAwgAygLMh8uYWdlbnQudjEuU2VsZWN0ZWRDdXJzb3JDb21tYW5kEjcKDmRvY3VtZW50YXRpb25zGA0gAygLMh8uYWdlbnQudjEuU2VsZWN0ZWREb2N1bWVudGF0aW9uEjAKC3VpX2VsZW1lbnRzGA4gAygLMhsuYWdlbnQudjEuU2VsZWN0ZWRVSUVsZW1lbnQSMgoMY29uc29sZV9sb2dzGA8gAygLMhwuYWdlbnQudjEuU2VsZWN0ZWRDb25zb2xlTG9nEjAKC2dpdF9jb21taXRzGBEgAygLMhsuYWdlbnQudjEuU2VsZWN0ZWRHaXRDb21taXQSLgoKcGFzdF9jaGF0cxgTIAMoCzIaLmFnZW50LnYxLlNlbGVjdGVkUGFzdENoYXQSRAoWZ2l0X3ByX2RpZmZfc2VsZWN0aW9ucxgUIAMoCzIkLmFnZW50LnYxLlNlbGVjdGVkR2l0UFJEaWZmU2VsZWN0aW9uEj0KFnNlbGVjdGVkX3B1bGxfcmVxdWVzdHMYFSADKAsyHS5hZ2VudC52MS5TZWxlY3RlZFB1bGxSZXF1ZXN0EjYKEnNlbGVjdGVkX3N1YmFnZW50cxgWIAMoCzIaLmFnZW50LnYxLlNlbGVjdGVkU3ViYWdlbnRCFQoTX2ludm9jYXRpb25fY29udGV4dEILCglfZ2l0X2RpZmZCHwodX2dpdF9kaWZmX2Zyb21fYnJhbmNoX3RvX21haW4i5QEKEUludm9jYXRpb25Db250ZXh0Ej8KDHNsYWNrX3RocmVhZBgBIAEoCzInLmFnZW50LnYxLkludm9jYXRpb25Db250ZXh0X1NsYWNrVGhyZWFkSAASOQoJZ2l0aHViX3ByGAIgASgLMiQuYWdlbnQudjEuSW52b2NhdGlvbkNvbnRleHRfR2l0aHViUFJIABI5CglpZGVfc3RhdGUYAyABKAsyJC5hZ2VudC52MS5JbnZvY2F0aW9uQ29udGV4dF9JZGVTdGF0ZUgAEhEKB2Jsb2JfaWQYCiABKAxIAEIGCgRkYXRhIrsBCh1JbnZvY2F0aW9uQ29udGV4dF9TbGFja1RocmVhZBIOCgZ0aHJlYWQYASABKAkSGQoMY2hhbm5lbF9uYW1lGAIgASgJSACIAQESHAoPY2hhbm5lbF9wdXJwb3NlGAMgASgJSAGIAQESGgoNY2hhbm5lbF90b3BpYxgEIAEoCUgCiAEBQg8KDV9jaGFubmVsX25hbWVCEgoQX2NoYW5uZWxfcHVycG9zZUIQCg5fY2hhbm5lbF90b3BpYyJ8ChpJbnZvY2F0aW9uQ29udGV4dF9HaXRodWJQUhINCgV0aXRsZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRIQCghjb21tZW50cxgDIAEoCRIYCgtjaV9mYWlsdXJlcxgEIAEoCUgAiAEBQg4KDF9jaV9mYWlsdXJlcyL+AQoaSW52b2NhdGlvbkNvbnRleHRfSWRlU3RhdGUSQAoNdmlzaWJsZV9maWxlcxgBIAMoCzIpLmFnZW50LnYxLkludm9jYXRpb25Db250ZXh0X0lkZVN0YXRlX0ZpbGUSSAoVcmVjZW50bHlfdmlld2VkX2ZpbGVzGAIgAygLMikuYWdlbnQudjEuSW52b2NhdGlvbkNvbnRleHRfSWRlU3RhdGVfRmlsZRJUChRjdXJyZW50bHlfdmlld2VkX3BycxgDIAMoCzI2LmFnZW50LnYxLkludm9jYXRpb25Db250ZXh0X0lkZVN0YXRlX1ZpZXdlZFB1bGxSZXF1ZXN0Io4CCh9JbnZvY2F0aW9uQ29udGV4dF9JZGVTdGF0ZV9GaWxlEgwKBHBhdGgYASABKAkSGgoNcmVsYXRpdmVfcGF0aBgCIAEoCUgAiAEBElYKD2N1cnNvcl9wb3NpdGlvbhgDIAEoCzI4LmFnZW50LnYxLkludm9jYXRpb25Db250ZXh0X0lkZVN0YXRlX0ZpbGVfQ3Vyc29yUG9zaXRpb25IAYgBARITCgt0b3RhbF9saW5lcxgEIAEoBRIbCg5hY3RpdmVfY29tbWFuZBgFIAEoCUgCiAEBQhAKDl9yZWxhdGl2ZV9wYXRoQhIKEF9jdXJzb3JfcG9zaXRpb25CEQoPX2FjdGl2ZV9jb21tYW5kIkwKLkludm9jYXRpb25Db250ZXh0X0lkZVN0YXRlX0ZpbGVfQ3Vyc29yUG9zaXRpb24SDAoEbGluZRgBIAEoBRIMCgR0ZXh0GAIgASgJIukBCixJbnZvY2F0aW9uQ29udGV4dF9JZGVTdGF0ZV9WaWV3ZWRQdWxsUmVxdWVzdBIOCgZudW1iZXIYASABKAUSCwoDdXJsGAIgASgJEhIKBXRpdGxlGAMgASgJSACIAQESGAoLZm9sZGVyX3BhdGgYBCABKAlIAYgBARIZCgxzdW1tYXJ5X2pzb24YBSABKAlIAogBARIYCgtkZXNjcmlwdGlvbhgGIAEoCUgDiAEBQggKBl90aXRsZUIOCgxfZm9sZGVyX3BhdGhCDwoNX3N1bW1hcnlfanNvbkIOCgxfZGVzY3JpcHRpb24iSAoWU2V0dXBWbUVudmlyb25tZW50QXJncxIXCg9pbnN0YWxsX2NvbW1hbmQYAiABKAkSFQoNc3RhcnRfY29tbWFuZBgDIAEoCSJcChhTZXR1cFZtRW52aXJvbm1lbnRSZXN1bHQSNgoHc3VjY2VzcxgBIAEoCzIjLmFnZW50LnYxLlNldHVwVm1FbnZpcm9ubWVudFN1Y2Nlc3NIAEIICgZyZXN1bHQiGwoZU2V0dXBWbUVudmlyb25tZW50U3VjY2VzcyKAAQoaU2V0dXBWbUVudmlyb25tZW50VG9vbENhbGwSLgoEYXJncxgBIAEoCzIgLmFnZW50LnYxLlNldHVwVm1FbnZpcm9ubWVudEFyZ3MSMgoGcmVzdWx0GAIgASgLMiIuYWdlbnQudjEuU2V0dXBWbUVudmlyb25tZW50UmVzdWx0IskCChlTaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0EhYKDnBhcnNpbmdfZmFpbGVkGAEgASgIElIKE2V4ZWN1dGFibGVfY29tbWFuZHMYAiADKAsyNS5hZ2VudC52MS5TaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0X0V4ZWN1dGFibGVDb21tYW5kEhUKDWhhc19yZWRpcmVjdHMYAyABKAgSIAoYaGFzX2NvbW1hbmRfc3Vic3RpdHV0aW9uGAQgASgIEicKGmFsbF9yZWRpcmVjdHNfYXJlX2Rldl9udWxsGAUgASgISACIAQESPwoJcmVkaXJlY3RzGAYgAygLMiwuYWdlbnQudjEuU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdF9SZWRpcmVjdEIdChtfYWxsX3JlZGlyZWN0c19hcmVfZGV2X251bGwiTQouU2hlbGxDb21tYW5kUGFyc2luZ1Jlc3VsdF9FeGVjdXRhYmxlQ29tbWFuZEFyZxIMCgR0eXBlGAEgASgJEg0KBXZhbHVlGAIgASgJIpYBCitTaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0X0V4ZWN1dGFibGVDb21tYW5kEgwKBG5hbWUYASABKAkSRgoEYXJncxgCIAMoCzI4LmFnZW50LnYxLlNoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHRfRXhlY3V0YWJsZUNvbW1hbmRBcmcSEQoJZnVsbF90ZXh0GAMgASgJIvoHCglTaGVsbEFyZ3MSDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRIPCgd0aW1lb3V0GAMgASgFEhQKDHRvb2xfY2FsbF9pZBgEIAEoCRIXCg9zaW1wbGVfY29tbWFuZHMYBSADKAkSGgoSaGFzX2lucHV0X3JlZGlyZWN0GAYgASgIEhsKE2hhc19vdXRwdXRfcmVkaXJlY3QYByABKAgSOwoOcGFyc2luZ19yZXN1bHQYCCABKAsyIy5hZ2VudC52MS5TaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0Ej4KGHJlcXVlc3RlZF9zYW5kYm94X3BvbGljeRgJIAEoCzIXLmFnZW50LnYxLlNhbmRib3hQb2xpY3lIAIgBARIoChtmaWxlX291dHB1dF90aHJlc2hvbGRfYnl0ZXMYCiABKARIAYgBARIVCg1pc19iYWNrZ3JvdW5kGAsgASgIEhUKDXNraXBfYXBwcm92YWwYDCABKAgSGAoQdGltZW91dF9iZWhhdmlvchgNIAEoBRIZCgxoYXJkX3RpbWVvdXQYDiABKAVIAogBARIYCgtkZXNjcmlwdGlvbhgPIAEoCUgDiAEBEkEKEWNsYXNzaWZpZXJfcmVzdWx0GBAgASgLMiEuYWdlbnQudjEuQ29tbWFuZENsYXNzaWZpZXJSZXN1bHRIBIgBARITCgtjbG9zZV9zdGRpbhgRIAEoCBJJChNvdXRwdXRfbm90aWZpY2F0aW9uGBIgASgLMicuYWdlbnQudjEuU2hlbGxPdXRwdXROb3RpZmljYXRpb25Db25maWdIBYgBARI9ChNzbWFydF9tb2RlX2FwcHJvdmFsGBMgASgLMhsuYWdlbnQudjEuU21hcnRNb2RlQXBwcm92YWxIBogBARJOChlob29rX2FwcHJvdmFsX3JlcXVpcmVtZW50GBQgASgLMiYuYWdlbnQudjEuU2hlbGxIb29rQXBwcm92YWxSZXF1aXJlbWVudEgHiAEBEhwKD2NvbnZlcnNhdGlvbl9pZBgVIAEoCUgIiAEBQhsKGV9yZXF1ZXN0ZWRfc2FuZGJveF9wb2xpY3lCHgocX2ZpbGVfb3V0cHV0X3RocmVzaG9sZF9ieXRlc0IPCg1faGFyZF90aW1lb3V0Qg4KDF9kZXNjcmlwdGlvbkIUChJfY2xhc3NpZmllcl9yZXN1bHRCFgoUX291dHB1dF9ub3RpZmljYXRpb25CFgoUX3NtYXJ0X21vZGVfYXBwcm92YWxCHAoaX2hvb2tfYXBwcm92YWxfcmVxdWlyZW1lbnRCEgoQX2NvbnZlcnNhdGlvbl9pZCL6AwoLU2hlbGxSZXN1bHQSNAoOc2FuZGJveF9wb2xpY3kYZSABKAsyFy5hZ2VudC52MS5TYW5kYm94UG9saWN5SAGIAQESGgoNaXNfYmFja2dyb3VuZBhmIAEoCEgCiAEBEh0KEHRlcm1pbmFsc19mb2xkZXIYZyABKAlIA4gBARIQCgNwaWQYaCABKA1IBIgBARIpCgdzdWNjZXNzGAEgASgLMhYuYWdlbnQudjEuU2hlbGxTdWNjZXNzSAASKQoHZmFpbHVyZRgCIAEoCzIWLmFnZW50LnYxLlNoZWxsRmFpbHVyZUgAEikKB3RpbWVvdXQYAyABKAsyFi5hZ2VudC52MS5TaGVsbFRpbWVvdXRIABIrCghyZWplY3RlZBgEIAEoCzIXLmFnZW50LnYxLlNoZWxsUmVqZWN0ZWRIABIwCgtzcGF3bl9lcnJvchgFIAEoCzIZLmFnZW50LnYxLlNoZWxsU3Bhd25FcnJvckgAEjwKEXBlcm1pc3Npb25fZGVuaWVkGAcgASgLMh8uYWdlbnQudjEuU2hlbGxQZXJtaXNzaW9uRGVuaWVkSABCCAoGcmVzdWx0QhEKD19zYW5kYm94X3BvbGljeUIQCg5faXNfYmFja2dyb3VuZEITChFfdGVybWluYWxzX2ZvbGRlckIGCgRfcGlkIiEKEVNoZWxsU3RyZWFtU3Rkb3V0EgwKBGRhdGEYASABKAkiIQoRU2hlbGxTdHJlYW1TdGRlcnISDAoEZGF0YRgBIAEoCSL3AQoPU2hlbGxTdHJlYW1FeGl0EgwKBGNvZGUYASABKA0SCwoDY3dkGAIgASgJEjYKD291dHB1dF9sb2NhdGlvbhgDIAEoCzIYLmFnZW50LnYxLk91dHB1dExvY2F0aW9uSACIAQESDwoHYWJvcnRlZBgEIAEoCBIZCgxhYm9ydF9yZWFzb24YBSABKAVIAYgBARIkChdsb2NhbF9leGVjdXRpb25fdGltZV9tcxgGIAEoBUgCiAEBQhIKEF9vdXRwdXRfbG9jYXRpb25CDwoNX2Fib3J0X3JlYXNvbkIaChhfbG9jYWxfZXhlY3V0aW9uX3RpbWVfbXMiWwoQU2hlbGxTdHJlYW1TdGFydBI0Cg5zYW5kYm94X3BvbGljeRgBIAEoCzIXLmFnZW50LnYxLlNhbmRib3hQb2xpY3lIAIgBAUIRCg9fc2FuZGJveF9wb2xpY3ki2gEKF1NoZWxsU3RyZWFtQmFja2dyb3VuZGVkEhAKCHNoZWxsX2lkGAEgASgNEg8KB2NvbW1hbmQYAiABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAyABKAkSEAoDcGlkGAQgASgNSACIAQESFwoKbXNfdG9fd2FpdBgFIAEoBUgBiAEBEjQKBnJlYXNvbhgGIAEoDjIfLmFnZW50LnYxLlNoZWxsQmFja2dyb3VuZFJlYXNvbkgCiAEBQgYKBF9waWRCDQoLX21zX3RvX3dhaXRCCQoHX3JlYXNvbiKsAwoLU2hlbGxTdHJlYW0SLQoGc3Rkb3V0GAEgASgLMhsuYWdlbnQudjEuU2hlbGxTdHJlYW1TdGRvdXRIABItCgZzdGRlcnIYAiABKAsyGy5hZ2VudC52MS5TaGVsbFN0cmVhbVN0ZGVyckgAEikKBGV4aXQYAyABKAsyGS5hZ2VudC52MS5TaGVsbFN0cmVhbUV4aXRIABIrCgVzdGFydBgEIAEoCzIaLmFnZW50LnYxLlNoZWxsU3RyZWFtU3RhcnRIABIrCghyZWplY3RlZBgFIAEoCzIXLmFnZW50LnYxLlNoZWxsUmVqZWN0ZWRIABI8ChFwZXJtaXNzaW9uX2RlbmllZBgGIAEoCzIfLmFnZW50LnYxLlNoZWxsUGVybWlzc2lvbkRlbmllZEgAEjkKDGJhY2tncm91bmRlZBgHIAEoCzIhLmFnZW50LnYxLlNoZWxsU3RyZWFtQmFja2dyb3VuZGVkSAASOAoMaG9va19jb250ZXh0GAggASgLMiAuYWdlbnQudjEuU2hlbGxTdHJlYW1Ib29rQ29udGV4dEgAQgcKBWV2ZW50IksKDk91dHB1dExvY2F0aW9uEhEKCWZpbGVfcGF0aBgBIAEoCRISCgpzaXplX2J5dGVzGAIgASgDEhIKCmxpbmVfY291bnQYAyABKAMimAUKDFNoZWxsU3VjY2VzcxIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEhEKCWV4aXRfY29kZRgDIAEoBRIOCgZzaWduYWwYBCABKAkSDgoGc3Rkb3V0GAUgASgJEg4KBnN0ZGVychgGIAEoCRIWCg5leGVjdXRpb25fdGltZRgHIAEoBRI2Cg9vdXRwdXRfbG9jYXRpb24YCCABKAsyGC5hZ2VudC52MS5PdXRwdXRMb2NhdGlvbkgAiAEBEhUKCHNoZWxsX2lkGAkgASgNSAGIAQESHwoSaW50ZXJsZWF2ZWRfb3V0cHV0GAogASgJSAKIAQESEAoDcGlkGAsgASgNSAOIAQESFwoKbXNfdG9fd2FpdBgMIAEoBUgEiAEBEiQKF2xvY2FsX2V4ZWN1dGlvbl90aW1lX21zGA0gASgFSAWIAQESPwoRYmFja2dyb3VuZF9yZWFzb24YDiABKA4yHy5hZ2VudC52MS5TaGVsbEJhY2tncm91bmRSZWFzb25IBogBARIYCgtvdXRwdXRfaGVhZBgPIAEoCUgHiAEBEhgKC291dHB1dF90YWlsGBAgASgJSAiIAQESGQoMZWxpZGVkX2NoYXJzGBEgASgNSAmIAQFCEgoQX291dHB1dF9sb2NhdGlvbkILCglfc2hlbGxfaWRCFQoTX2ludGVybGVhdmVkX291dHB1dEIGCgRfcGlkQg0KC19tc190b193YWl0QhoKGF9sb2NhbF9leGVjdXRpb25fdGltZV9tc0IUChJfYmFja2dyb3VuZF9yZWFzb25CDgoMX291dHB1dF9oZWFkQg4KDF9vdXRwdXRfdGFpbEIPCg1fZWxpZGVkX2NoYXJzIpgECgxTaGVsbEZhaWx1cmUSDwoHY29tbWFuZBgBIAEoCRIZChF3b3JraW5nX2RpcmVjdG9yeRgCIAEoCRIRCglleGl0X2NvZGUYAyABKAUSDgoGc2lnbmFsGAQgASgJEg4KBnN0ZG91dBgFIAEoCRIOCgZzdGRlcnIYBiABKAkSFgoOZXhlY3V0aW9uX3RpbWUYByABKAUSNgoPb3V0cHV0X2xvY2F0aW9uGAggASgLMhguYWdlbnQudjEuT3V0cHV0TG9jYXRpb25IAIgBARIfChJpbnRlcmxlYXZlZF9vdXRwdXQYCSABKAlIAYgBARIZCgxhYm9ydF9yZWFzb24YCiABKAVIAogBARIPCgdhYm9ydGVkGAsgASgIEiQKF2xvY2FsX2V4ZWN1dGlvbl90aW1lX21zGAwgASgFSAOIAQESGAoLb3V0cHV0X2hlYWQYDSABKAlIBIgBARIYCgtvdXRwdXRfdGFpbBgOIAEoCUgFiAEBEhkKDGVsaWRlZF9jaGFycxgPIAEoDUgGiAEBQhIKEF9vdXRwdXRfbG9jYXRpb25CFQoTX2ludGVybGVhdmVkX291dHB1dEIPCg1fYWJvcnRfcmVhc29uQhoKGF9sb2NhbF9leGVjdXRpb25fdGltZV9tc0IOCgxfb3V0cHV0X2hlYWRCDgoMX291dHB1dF90YWlsQg8KDV9lbGlkZWRfY2hhcnMiTgoMU2hlbGxUaW1lb3V0Eg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSEgoKdGltZW91dF9tcxgDIAEoBSJgCg1TaGVsbFJlamVjdGVkEg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSDgoGcmVhc29uGAMgASgJEhMKC2lzX3JlYWRvbmx5GAQgASgIImcKFVNoZWxsUGVybWlzc2lvbkRlbmllZBIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEg0KBWVycm9yGAMgASgJEhMKC2lzX3JlYWRvbmx5GAQgASgIIkwKD1NoZWxsU3Bhd25FcnJvchIPCgdjb21tYW5kGAEgASgJEhkKEXdvcmtpbmdfZGlyZWN0b3J5GAIgASgJEg0KBWVycm9yGAMgASgJIkAKElNoZWxsUGFydGlhbFJlc3VsdBIUCgxzdGRvdXRfZGVsdGEYASABKAkSFAoMc3RkZXJyX2RlbHRhGAIgASgJIlkKDVNoZWxsVG9vbENhbGwSIQoEYXJncxgBIAEoCzITLmFnZW50LnYxLlNoZWxsQXJncxIlCgZyZXN1bHQYAiABKAsyFS5hZ2VudC52MS5TaGVsbFJlc3VsdCIrChhTaGVsbFRvb2xDYWxsU3Rkb3V0RGVsdGESDwoHY29udGVudBgBIAEoCSIrChhTaGVsbFRvb2xDYWxsU3RkZXJyRGVsdGESDwoHY29udGVudBgBIAEoCSKJAQoSU2hlbGxUb29sQ2FsbERlbHRhEjQKBnN0ZG91dBgBIAEoCzIiLmFnZW50LnYxLlNoZWxsVG9vbENhbGxTdGRvdXREZWx0YUgAEjQKBnN0ZGVychgCIAEoCzIiLmFnZW50LnYxLlNoZWxsVG9vbENhbGxTdGRlcnJEZWx0YUgAQgcKBWRlbHRhIu0BCgxTdWJhZ2VudFR5cGUSOAoLdW5zcGVjaWZpZWQYASABKAsyIS5hZ2VudC52MS5TdWJhZ2VudFR5cGVVbnNwZWNpZmllZEgAEjkKDGNvbXB1dGVyX3VzZRgCIAEoCzIhLmFnZW50LnYxLlN1YmFnZW50VHlwZUNvbXB1dGVyVXNlSAASLgoGY3VzdG9tGAMgASgLMhwuYWdlbnQudjEuU3ViYWdlbnRUeXBlQ3VzdG9tSAASMAoHZXhwbG9yZRgEIAEoCzIdLmFnZW50LnYxLlN1YmFnZW50VHlwZUV4cGxvcmVIAEIGCgR0eXBlIhkKF1N1YmFnZW50VHlwZVVuc3BlY2lmaWVkIhkKF1N1YmFnZW50VHlwZUNvbXB1dGVyVXNlIhUKE1N1YmFnZW50VHlwZUV4cGxvcmUiIgoSU3ViYWdlbnRUeXBlQ3VzdG9tEgwKBG5hbWUYASABKAkijQEKDkN1c3RvbVN1YmFnZW50EhEKCWZ1bGxfcGF0aBgBIAEoCRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBXRvb2xzGAQgAygJEg0KBW1vZGVsGAUgASgJEg4KBnByb21wdBgGIAEoCRIXCg9wZXJtaXNzaW9uX21vZGUYByABKAUiaAoOU3dpdGNoTW9kZUFyZ3MSFgoOdGFyZ2V0X21vZGVfaWQYASABKAkSGAoLZXhwbGFuYXRpb24YAiABKAlIAIgBARIUCgx0b29sX2NhbGxfaWQYAyABKAlCDgoMX2V4cGxhbmF0aW9uIqoBChBTd2l0Y2hNb2RlUmVzdWx0Ei4KB3N1Y2Nlc3MYASABKAsyGy5hZ2VudC52MS5Td2l0Y2hNb2RlU3VjY2Vzc0gAEioKBWVycm9yGAIgASgLMhkuYWdlbnQudjEuU3dpdGNoTW9kZUVycm9ySAASMAoIcmVqZWN0ZWQYAyABKAsyHC5hZ2VudC52MS5Td2l0Y2hNb2RlUmVqZWN0ZWRIAEIICgZyZXN1bHQiPQoRU3dpdGNoTW9kZVN1Y2Nlc3MSFAoMZnJvbV9tb2RlX2lkGAEgASgJEhIKCnRvX21vZGVfaWQYAiABKAkiIAoPU3dpdGNoTW9kZUVycm9yEg0KBWVycm9yGAEgASgJIiQKElN3aXRjaE1vZGVSZWplY3RlZBIOCgZyZWFzb24YASABKAkiaAoSU3dpdGNoTW9kZVRvb2xDYWxsEiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5Td2l0Y2hNb2RlQXJncxIqCgZyZXN1bHQYAiABKAsyGi5hZ2VudC52MS5Td2l0Y2hNb2RlUmVzdWx0IkAKFlN3aXRjaE1vZGVSZXF1ZXN0UXVlcnkSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLlN3aXRjaE1vZGVBcmdzIqkBChlTd2l0Y2hNb2RlUmVxdWVzdFJlc3BvbnNlEkAKCGFwcHJvdmVkGAEgASgLMiwuYWdlbnQudjEuU3dpdGNoTW9kZVJlcXVlc3RSZXNwb25zZV9BcHByb3ZlZEgAEkAKCHJlamVjdGVkGAIgASgLMiwuYWdlbnQudjEuU3dpdGNoTW9kZVJlcXVlc3RSZXNwb25zZV9SZWplY3RlZEgAQggKBnJlc3VsdCIkCiJTd2l0Y2hNb2RlUmVxdWVzdFJlc3BvbnNlX0FwcHJvdmVkIjQKIlN3aXRjaE1vZGVSZXF1ZXN0UmVzcG9uc2VfUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJInUKCFRvZG9JdGVtEgoKAmlkGAEgASgJEg8KB2NvbnRlbnQYAiABKAkSDgoGc3RhdHVzGAMgASgFEhIKCmNyZWF0ZWRfYXQYBCABKAMSEgoKdXBkYXRlZF9hdBgFIAEoAxIUCgxkZXBlbmRlbmNpZXMYBiADKAkiawoTVXBkYXRlVG9kb3NUb29sQ2FsbBInCgRhcmdzGAEgASgLMhkuYWdlbnQudjEuVXBkYXRlVG9kb3NBcmdzEisKBnJlc3VsdBgCIAEoCzIbLmFnZW50LnYxLlVwZGF0ZVRvZG9zUmVzdWx0IkMKD1VwZGF0ZVRvZG9zQXJncxIhCgV0b2RvcxgBIAMoCzISLmFnZW50LnYxLlRvZG9JdGVtEg0KBW1lcmdlGAIgASgIInsKEVVwZGF0ZVRvZG9zUmVzdWx0Ei8KB3N1Y2Nlc3MYASABKAsyHC5hZ2VudC52MS5VcGRhdGVUb2Rvc1N1Y2Nlc3NIABIrCgVlcnJvchgCIAEoCzIaLmFnZW50LnYxLlVwZGF0ZVRvZG9zRXJyb3JIAEIICgZyZXN1bHQiXwoSVXBkYXRlVG9kb3NTdWNjZXNzEiEKBXRvZG9zGAEgAygLMhIuYWdlbnQudjEuVG9kb0l0ZW0SEwoLdG90YWxfY291bnQYAiABKAUSEQoJd2FzX21lcmdlGAMgASgIIiEKEFVwZGF0ZVRvZG9zRXJyb3ISDQoFZXJyb3IYASABKAkiZQoRUmVhZFRvZG9zVG9vbENhbGwSJQoEYXJncxgBIAEoCzIXLmFnZW50LnYxLlJlYWRUb2Rvc0FyZ3MSKQoGcmVzdWx0GAIgASgLMhkuYWdlbnQudjEuUmVhZFRvZG9zUmVzdWx0IjkKDVJlYWRUb2Rvc0FyZ3MSFQoNc3RhdHVzX2ZpbHRlchgBIAMoBRIRCglpZF9maWx0ZXIYAiADKAkidQoPUmVhZFRvZG9zUmVzdWx0Ei0KB3N1Y2Nlc3MYASABKAsyGi5hZ2VudC52MS5SZWFkVG9kb3NTdWNjZXNzSAASKQoFZXJyb3IYAiABKAsyGC5hZ2VudC52MS5SZWFkVG9kb3NFcnJvckgAQggKBnJlc3VsdCJKChBSZWFkVG9kb3NTdWNjZXNzEiEKBXRvZG9zGAEgAygLMhIuYWdlbnQudjEuVG9kb0l0ZW0SEwoLdG90YWxfY291bnQYAiABKAUiHwoOUmVhZFRvZG9zRXJyb3ISDQoFZXJyb3IYASABKAkiSwoFUmFuZ2USIQoFc3RhcnQYASABKAsyEi5hZ2VudC52MS5Qb3NpdGlvbhIfCgNlbmQYAiABKAsyEi5hZ2VudC52MS5Qb3NpdGlvbiIoCghQb3NpdGlvbhIMCgRsaW5lGAEgASgNEg4KBmNvbHVtbhgCIAEoDSIYCgVFcnJvchIPCgdtZXNzYWdlGAEgASgJIjoKDVdlYlNlYXJjaEFyZ3MSEwoLc2VhcmNoX3Rlcm0YASABKAkSFAoMdG9vbF9jYWxsX2lkGAIgASgJIqYBCg9XZWJTZWFyY2hSZXN1bHQSLQoHc3VjY2VzcxgBIAEoCzIaLmFnZW50LnYxLldlYlNlYXJjaFN1Y2Nlc3NIABIpCgVlcnJvchgCIAEoCzIYLmFnZW50LnYxLldlYlNlYXJjaEVycm9ySAASLwoIcmVqZWN0ZWQYAyABKAsyGy5hZ2VudC52MS5XZWJTZWFyY2hSZWplY3RlZEgAQggKBnJlc3VsdCJEChBXZWJTZWFyY2hTdWNjZXNzEjAKCnJlZmVyZW5jZXMYASADKAsyHC5hZ2VudC52MS5XZWJTZWFyY2hSZWZlcmVuY2UiHwoOV2ViU2VhcmNoRXJyb3ISDQoFZXJyb3IYASABKAkiIwoRV2ViU2VhcmNoUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIj8KEldlYlNlYXJjaFJlZmVyZW5jZRINCgV0aXRsZRgBIAEoCRILCgN1cmwYAiABKAkSDQoFY2h1bmsYAyABKAkiZQoRV2ViU2VhcmNoVG9vbENhbGwSJQoEYXJncxgBIAEoCzIXLmFnZW50LnYxLldlYlNlYXJjaEFyZ3MSKQoGcmVzdWx0GAIgASgLMhkuYWdlbnQudjEuV2ViU2VhcmNoUmVzdWx0Ij4KFVdlYlNlYXJjaFJlcXVlc3RRdWVyeRIlCgRhcmdzGAEgASgLMhcuYWdlbnQudjEuV2ViU2VhcmNoQXJncyKmAQoYV2ViU2VhcmNoUmVxdWVzdFJlc3BvbnNlEj8KCGFwcHJvdmVkGAEgASgLMisuYWdlbnQudjEuV2ViU2VhcmNoUmVxdWVzdFJlc3BvbnNlX0FwcHJvdmVkSAASPwoIcmVqZWN0ZWQYAiABKAsyKy5hZ2VudC52MS5XZWJTZWFyY2hSZXF1ZXN0UmVzcG9uc2VfUmVqZWN0ZWRIAEIICgZyZXN1bHQiIwohV2ViU2VhcmNoUmVxdWVzdFJlc3BvbnNlX0FwcHJvdmVkIjMKIVdlYlNlYXJjaFJlcXVlc3RSZXNwb25zZV9SZWplY3RlZBIOCgZyZWFzb24YASABKAkirQEKCVdyaXRlQXJncxIMCgRwYXRoGAEgASgJEhEKCWZpbGVfdGV4dBgCIAEoCRIUCgx0b29sX2NhbGxfaWQYAyABKAkSJwofcmV0dXJuX2ZpbGVfY29udGVudF9hZnRlcl93cml0ZRgEIAEoCBISCgpmaWxlX2J5dGVzGAUgASgMEhoKDWVuY29kaW5nX2hpbnQYBiABKAlIAIgBAUIQCg5fZW5jb2RpbmdfaGludCKAAgoLV3JpdGVSZXN1bHQSKQoHc3VjY2VzcxgBIAEoCzIWLmFnZW50LnYxLldyaXRlU3VjY2Vzc0gAEjwKEXBlcm1pc3Npb25fZGVuaWVkGAMgASgLMh8uYWdlbnQudjEuV3JpdGVQZXJtaXNzaW9uRGVuaWVkSAASKgoIbm9fc3BhY2UYBCABKAsyFi5hZ2VudC52MS5Xcml0ZU5vU3BhY2VIABIlCgVlcnJvchgFIAEoCzIULmFnZW50LnYxLldyaXRlRXJyb3JIABIrCghyZWplY3RlZBgGIAEoCzIXLmFnZW50LnYxLldyaXRlUmVqZWN0ZWRIAEIICgZyZXN1bHQiigEKDFdyaXRlU3VjY2VzcxIMCgRwYXRoGAEgASgJEhUKDWxpbmVzX2NyZWF0ZWQYAiABKAUSEQoJZmlsZV9zaXplGAMgASgFEiUKGGZpbGVfY29udGVudF9hZnRlcl93cml0ZRgEIAEoCUgAiAEBQhsKGV9maWxlX2NvbnRlbnRfYWZ0ZXJfd3JpdGUibwoVV3JpdGVQZXJtaXNzaW9uRGVuaWVkEgwKBHBhdGgYASABKAkSEQoJZGlyZWN0b3J5GAIgASgJEhEKCW9wZXJhdGlvbhgDIAEoCRINCgVlcnJvchgEIAEoCRITCgtpc19yZWFkb25seRgFIAEoCCIcCgxXcml0ZU5vU3BhY2USDAoEcGF0aBgBIAEoCSIpCgpXcml0ZUVycm9yEgwKBHBhdGgYASABKAkSDQoFZXJyb3IYAiABKAkiLQoNV3JpdGVSZWplY3RlZBIMCgRwYXRoGAEgASgJEg4KBnJlYXNvbhgCIAEoCSKDAQoXQm9vdHN0cmFwU3RhdHNpZ1JlcXVlc3QSHgoRaWdub3JlX2Rldl9zdGF0dXMYASABKAhIAIgBARIdChBvcGVyYXRpbmdfc3lzdGVtGAIgASgFSAGIAQFCFAoSX2lnbm9yZV9kZXZfc3RhdHVzQhMKEV9vcGVyYXRpbmdfc3lzdGVtIg4KDFBpbmdSZXNwb25zZSK3AQoLRXhlY1JlcXVlc3QSDwoHY29tbWFuZBgBIAEoCRIQCgNjd2QYAiABKAlIAIgBARIMCgRhcmdzGAMgAygJEjsKC2Vudmlyb25tZW50GAQgAygLMiYuYWdlbnQudjEuRXhlY1JlcXVlc3QuRW52aXJvbm1lbnRFbnRyeRoyChBFbnZpcm9ubWVudEVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCBgoEX2N3ZCKgAQoMRXhlY1Jlc3BvbnNlEi0KDHN0ZG91dF9ldmVudBgBIAEoCzIVLmFnZW50LnYxLlN0ZG91dEV2ZW50SAASLQoMc3RkZXJyX2V2ZW50GAIgASgLMhUuYWdlbnQudjEuU3RkZXJyRXZlbnRIABIpCgpleGl0X2V2ZW50GAMgASgLMhMuYWdlbnQudjEuRXhpdEV2ZW50SABCBwoFZXZlbnQiGwoLU3Rkb3V0RXZlbnQSDAoEZGF0YRgBIAEoCSIbCgtTdGRlcnJFdmVudBIMCgRkYXRhGAEgASgJIh4KCUV4aXRFdmVudBIRCglleGl0X2NvZGUYASABKAUiIwoTUmVhZFRleHRGaWxlUmVxdWVzdBIMCgRwYXRoGAEgASgJIicKFFJlYWRUZXh0RmlsZVJlc3BvbnNlEg8KB2NvbnRlbnQYASABKAkiNQoUV3JpdGVUZXh0RmlsZVJlcXVlc3QSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgJIhcKFVdyaXRlVGV4dEZpbGVSZXNwb25zZSIlChVSZWFkQmluYXJ5RmlsZVJlcXVlc3QSDAoEcGF0aBgBIAEoCSIpChZSZWFkQmluYXJ5RmlsZVJlc3BvbnNlEg8KB2NvbnRlbnQYASABKAwiNwoWV3JpdGVCaW5hcnlGaWxlUmVxdWVzdBIMCgRwYXRoGAEgASgJEg8KB2NvbnRlbnQYAiABKAwiGQoXV3JpdGVCaW5hcnlGaWxlUmVzcG9uc2UiRQoeR2V0V29ya3NwYWNlQ2hhbmdlc0hhc2hSZXF1ZXN0EhEKCXJvb3RfcGF0aBgBIAEoCRIQCghiYXNlX3JlZhgCIAEoCSIvCh9HZXRXb3Jrc3BhY2VDaGFuZ2VzSGFzaFJlc3BvbnNlEgwKBGhhc2gYASABKAkiUAofUmVmcmVzaEdpdGh1YkFjY2Vzc1Rva2VuUmVxdWVzdBIbChNnaXRodWJfYWNjZXNzX3Rva2VuGAEgASgJEhAKCGhvc3RuYW1lGAIgASgJIiIKIFJlZnJlc2hHaXRodWJBY2Nlc3NUb2tlblJlc3BvbnNlIlcKHVdhcm1SZW1vdGVBY2Nlc3NTZXJ2ZXJSZXF1ZXN0Eg4KBmNvbW1pdBgBIAEoCRIMCgRwb3J0GAIgASgFEhgKEGNvbm5lY3Rpb25fdG9rZW4YAyABKAkiIAoeV2FybVJlbW90ZUFjY2Vzc1NlcnZlclJlc3BvbnNlIhYKFExpc3RBcnRpZmFjdHNSZXF1ZXN0IooCChZBcnRpZmFjdFVwbG9hZE1ldGFkYXRhEhUKDWFic29sdXRlX3BhdGgYASABKAkSEgoKc2l6ZV9ieXRlcxgCIAEoBBIaChJ1cGRhdGVkX2F0X3VuaXhfbXMYAyABKAMSDgoGc3RhdHVzGAQgASgFEhYKDmJ5dGVzX3VwbG9hZGVkGAUgASgEEhIKCmxhc3RfZXJyb3IYBiABKAkSFwoPdXBsb2FkX2F0dGVtcHRzGAcgASgNEh8KF2xhc3Rfc3RhcnRlZF9hdF91bml4X21zGAggASgDEiAKGGxhc3RfZmluaXNoZWRfYXRfdW5peF9tcxgJIAEoAxIRCgl1cGxvYWRfaWQYCiABKAkiTAoVTGlzdEFydGlmYWN0c1Jlc3BvbnNlEjMKCWFydGlmYWN0cxgBIAMoCzIgLmFnZW50LnYxLkFydGlmYWN0VXBsb2FkTWV0YWRhdGEiTgoWVXBsb2FkQXJ0aWZhY3RzUmVxdWVzdBI0Cgd1cGxvYWRzGAEgAygLMiMuYWdlbnQudjEuQXJ0aWZhY3RVcGxvYWRJbnN0cnVjdGlvbiLXAgoZQXJ0aWZhY3RVcGxvYWRJbnN0cnVjdGlvbhIVCg1hYnNvbHV0ZV9wYXRoGAEgASgJEhIKCnVwbG9hZF91cmwYAiABKAkSDgoGbWV0aG9kGAMgASgJEkEKB2hlYWRlcnMYBCADKAsyMC5hZ2VudC52MS5BcnRpZmFjdFVwbG9hZEluc3RydWN0aW9uLkhlYWRlcnNFbnRyeRIZCgxjb250ZW50X3R5cGUYBSABKAlIAIgBARIdChBzbGFja191cGxvYWRfdXJsGAYgASgJSAGIAQESGgoNc2xhY2tfZmlsZV9pZBgHIAEoCUgCiAEBGi4KDEhlYWRlcnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQg8KDV9jb250ZW50X3R5cGVCEwoRX3NsYWNrX3VwbG9hZF91cmxCEAoOX3NsYWNrX2ZpbGVfaWQihAEKHEFydGlmYWN0VXBsb2FkRGlzcGF0Y2hSZXN1bHQSFQoNYWJzb2x1dGVfcGF0aBgBIAEoCRIOCgZzdGF0dXMYAiABKAUSDwoHbWVzc2FnZRgDIAEoCRIaCg1zbGFja19maWxlX2lkGAQgASgJSACIAQFCEAoOX3NsYWNrX2ZpbGVfaWQiUgoXVXBsb2FkQXJ0aWZhY3RzUmVzcG9uc2USNwoHcmVzdWx0cxgBIAMoCzImLmFnZW50LnYxLkFydGlmYWN0VXBsb2FkRGlzcGF0Y2hSZXN1bHQiHAoaR2V0TWNwUmVmcmVzaFRva2Vuc1JlcXVlc3QipQEKG0dldE1jcFJlZnJlc2hUb2tlbnNSZXNwb25zZRJQCg5yZWZyZXNoX3Rva2VucxgBIAMoCzI4LmFnZW50LnYxLkdldE1jcFJlZnJlc2hUb2tlbnNSZXNwb25zZS5SZWZyZXNoVG9rZW5zRW50cnkaNAoSUmVmcmVzaFRva2Vuc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiowEKIVVwZGF0ZUVudmlyb25tZW50VmFyaWFibGVzUmVxdWVzdBJBCgNlbnYYASADKAsyNC5hZ2VudC52MS5VcGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlc1JlcXVlc3QuRW52RW50cnkSDwoHcmVwbGFjZRgCIAEoCBoqCghFbnZFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIkYKIlVwZGF0ZUVudmlyb25tZW50VmFyaWFibGVzUmVzcG9uc2USDwoHYXBwbGllZBgBIAEoDRIPCgdyZW1vdmVkGAIgASgNIoMBChJNY3BPQXV0aFN0b3JlZERhdGESFQoNcmVmcmVzaF90b2tlbhgBIAEoCRIRCgljbGllbnRfaWQYAiABKAkSGgoNY2xpZW50X3NlY3JldBgDIAEoCUgAiAEBEhUKDXJlZGlyZWN0X3VyaXMYBCADKAlCEAoOX2NsaWVudF9zZWNyZXQiTgoFRnJhbWUSCgoCaWQYASABKAkSDgoGbWV0aG9kGAIgASgJEgwKBGRhdGEYAyABKAwSDAoEa2luZBgEIAEoBRINCgVlcnJvchgFIAEoCSIHCgVFbXB0eSIjCg1CaWRpUmVxdWVzdElkEhIKCnJlcXVlc3RfaWQYASABKAkigQIKDFBpVHJ1bmNhdGlvbhIRCgl0cnVuY2F0ZWQYASABKAgSFAoMdHJ1bmNhdGVkX2J5GAIgASgJEhMKC3RvdGFsX2xpbmVzGAMgASgNEhQKDG91dHB1dF9saW5lcxgEIAEoDRIUCgxvdXRwdXRfYnl0ZXMYBSABKA0SFgoJbWF4X2xpbmVzGAYgASgNSACIAQESFgoJbWF4X2J5dGVzGAcgASgNSAGIAQESIAoYZmlyc3RfbGluZV9leGNlZWRzX2xpbWl0GAggASgIEhkKEWxhc3RfbGluZV9wYXJ0aWFsGAkgASgIQgwKCl9tYXhfbGluZXNCDAoKX21heF9ieXRlcyI3ChFQaUVkaXRSZXBsYWNlbWVudBIQCghvbGRfdGV4dBgBIAEoCRIQCghuZXdfdGV4dBgCIAEoCSJcCg5QaVJlYWRFeGVjQXJncxIMCgRwYXRoGAEgASgJEhMKBm9mZnNldBgCIAEoBUgAiAEBEhIKBWxpbWl0GAMgASgFSAGIAQFCCQoHX29mZnNldEIICgZfbGltaXQiYwoRUGlSZWFkRXhlY1N1Y2Nlc3MSDgoGb3V0cHV0GAEgASgJEi8KCnRydW5jYXRpb24YAiABKAsyFi5hZ2VudC52MS5QaVRydW5jYXRpb25IAIgBAUINCgtfdHJ1bmNhdGlvbiIgCg9QaVJlYWRFeGVjRXJyb3ISDQoFZXJyb3IYASABKAkieAoQUGlSZWFkRXhlY1Jlc3VsdBIuCgdzdWNjZXNzGAEgASgLMhsuYWdlbnQudjEuUGlSZWFkRXhlY1N1Y2Nlc3NIABIqCgVlcnJvchgCIAEoCzIZLmFnZW50LnYxLlBpUmVhZEV4ZWNFcnJvckgAQggKBnJlc3VsdCJDCg5QaUJhc2hFeGVjQXJncxIPCgdjb21tYW5kGAEgASgJEhQKB3RpbWVvdXQYAiABKAFIAIgBAUIKCghfdGltZW91dCKXAQoRUGlCYXNoRXhlY1N1Y2Nlc3MSDgoGb3V0cHV0GAEgASgJEi8KCnRydW5jYXRpb24YAiABKAsyFi5hZ2VudC52MS5QaVRydW5jYXRpb25IAIgBARIdChBmdWxsX291dHB1dF9wYXRoGAMgASgJSAGIAQFCDQoLX3RydW5jYXRpb25CEwoRX2Z1bGxfb3V0cHV0X3BhdGgilAEKD1BpQmFzaEV4ZWNFcnJvchINCgVlcnJvchgBIAEoCRIvCgp0cnVuY2F0aW9uGAIgASgLMhYuYWdlbnQudjEuUGlUcnVuY2F0aW9uSACIAQESHQoQZnVsbF9vdXRwdXRfcGF0aBgDIAEoCUgBiAEBQg0KC190cnVuY2F0aW9uQhMKEV9mdWxsX291dHB1dF9wYXRoIngKEFBpQmFzaEV4ZWNSZXN1bHQSLgoHc3VjY2VzcxgBIAEoCzIbLmFnZW50LnYxLlBpQmFzaEV4ZWNTdWNjZXNzSAASKgoFZXJyb3IYAiABKAsyGS5hZ2VudC52MS5QaUJhc2hFeGVjRXJyb3JIAEIICgZyZXN1bHQiSgoOUGlFZGl0RXhlY0FyZ3MSDAoEcGF0aBgBIAEoCRIqCgVlZGl0cxgCIAMoCzIbLmFnZW50LnYxLlBpRWRpdFJlcGxhY2VtZW50IngKEVBpRWRpdEV4ZWNTdWNjZXNzEg4KBm91dHB1dBgBIAEoCRIMCgRkaWZmGAIgASgJEg0KBXBhdGNoGAMgASgJEh8KEmZpcnN0X2NoYW5nZWRfbGluZRgEIAEoDUgAiAEBQhUKE19maXJzdF9jaGFuZ2VkX2xpbmUiIAoPUGlFZGl0RXhlY0Vycm9yEg0KBWVycm9yGAEgASgJIiQKElBpRWRpdEV4ZWNSZWplY3RlZBIOCgZyZWFzb24YASABKAkiqgEKEFBpRWRpdEV4ZWNSZXN1bHQSLgoHc3VjY2VzcxgBIAEoCzIbLmFnZW50LnYxLlBpRWRpdEV4ZWNTdWNjZXNzSAASKgoFZXJyb3IYAiABKAsyGS5hZ2VudC52MS5QaUVkaXRFeGVjRXJyb3JIABIwCghyZWplY3RlZBgDIAEoCzIcLmFnZW50LnYxLlBpRWRpdEV4ZWNSZWplY3RlZEgAQggKBnJlc3VsdCIwCg9QaVdyaXRlRXhlY0FyZ3MSDAoEcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgJIiQKElBpV3JpdGVFeGVjU3VjY2VzcxIOCgZvdXRwdXQYASABKAkiIQoQUGlXcml0ZUV4ZWNFcnJvchINCgVlcnJvchgBIAEoCSIlChNQaVdyaXRlRXhlY1JlamVjdGVkEg4KBnJlYXNvbhgBIAEoCSKuAQoRUGlXcml0ZUV4ZWNSZXN1bHQSLwoHc3VjY2VzcxgBIAEoCzIcLmFnZW50LnYxLlBpV3JpdGVFeGVjU3VjY2Vzc0gAEisKBWVycm9yGAIgASgLMhouYWdlbnQudjEuUGlXcml0ZUV4ZWNFcnJvckgAEjEKCHJlamVjdGVkGAMgASgLMh0uYWdlbnQudjEuUGlXcml0ZUV4ZWNSZWplY3RlZEgAQggKBnJlc3VsdCLlAQoOUGlHcmVwRXhlY0FyZ3MSDwoHcGF0dGVybhgBIAEoCRIRCgRwYXRoGAIgASgJSACIAQESEQoEZ2xvYhgDIAEoCUgBiAEBEhgKC2lnbm9yZV9jYXNlGAQgASgISAKIAQESFAoHbGl0ZXJhbBgFIAEoCEgDiAEBEhQKB2NvbnRleHQYBiABKAVIBIgBARISCgVsaW1pdBgHIAEoBUgFiAEBQgcKBV9wYXRoQgcKBV9nbG9iQg4KDF9pZ25vcmVfY2FzZUIKCghfbGl0ZXJhbEIKCghfY29udGV4dEIICgZfbGltaXQitgEKEVBpR3JlcEV4ZWNTdWNjZXNzEg4KBm91dHB1dBgBIAEoCRIvCgp0cnVuY2F0aW9uGAIgASgLMhYuYWdlbnQudjEuUGlUcnVuY2F0aW9uSACIAQESIAoTbWF0Y2hfbGltaXRfcmVhY2hlZBgDIAEoDUgBiAEBEhcKD2xpbmVzX3RydW5jYXRlZBgEIAEoCEINCgtfdHJ1bmNhdGlvbkIWChRfbWF0Y2hfbGltaXRfcmVhY2hlZCIgCg9QaUdyZXBFeGVjRXJyb3ISDQoFZXJyb3IYASABKAkieAoQUGlHcmVwRXhlY1Jlc3VsdBIuCgdzdWNjZXNzGAEgASgLMhsuYWdlbnQudjEuUGlHcmVwRXhlY1N1Y2Nlc3NIABIqCgVlcnJvchgCIAEoCzIZLmFnZW50LnYxLlBpR3JlcEV4ZWNFcnJvckgAQggKBnJlc3VsdCJbCg5QaUZpbmRFeGVjQXJncxIPCgdwYXR0ZXJuGAEgASgJEhEKBHBhdGgYAiABKAlIAIgBARISCgVsaW1pdBgDIAEoBUgBiAEBQgcKBV9wYXRoQggKBl9saW1pdCKfAQoRUGlGaW5kRXhlY1N1Y2Nlc3MSDgoGb3V0cHV0GAEgASgJEi8KCnRydW5jYXRpb24YAiABKAsyFi5hZ2VudC52MS5QaVRydW5jYXRpb25IAIgBARIhChRyZXN1bHRfbGltaXRfcmVhY2hlZBgDIAEoDUgBiAEBQg0KC190cnVuY2F0aW9uQhcKFV9yZXN1bHRfbGltaXRfcmVhY2hlZCIgCg9QaUZpbmRFeGVjRXJyb3ISDQoFZXJyb3IYASABKAkieAoQUGlGaW5kRXhlY1Jlc3VsdBIuCgdzdWNjZXNzGAEgASgLMhsuYWdlbnQudjEuUGlGaW5kRXhlY1N1Y2Nlc3NIABIqCgVlcnJvchgCIAEoCzIZLmFnZW50LnYxLlBpRmluZEV4ZWNFcnJvckgAQggKBnJlc3VsdCJICgxQaUxzRXhlY0FyZ3MSEQoEcGF0aBgBIAEoCUgAiAEBEhIKBWxpbWl0GAIgASgFSAGIAQFCBwoFX3BhdGhCCAoGX2xpbWl0IpsBCg9QaUxzRXhlY1N1Y2Nlc3MSDgoGb3V0cHV0GAEgASgJEi8KCnRydW5jYXRpb24YAiABKAsyFi5hZ2VudC52MS5QaVRydW5jYXRpb25IAIgBARIgChNlbnRyeV9saW1pdF9yZWFjaGVkGAMgASgNSAGIAQFCDQoLX3RydW5jYXRpb25CFgoUX2VudHJ5X2xpbWl0X3JlYWNoZWQiHgoNUGlMc0V4ZWNFcnJvchINCgVlcnJvchgBIAEoCSJyCg5QaUxzRXhlY1Jlc3VsdBIsCgdzdWNjZXNzGAEgASgLMhkuYWdlbnQudjEuUGlMc0V4ZWNTdWNjZXNzSAASKAoFZXJyb3IYAiABKAsyFy5hZ2VudC52MS5QaUxzRXhlY0Vycm9ySABCCAoGcmVzdWx0IjwKEU1jcFNlcnZlck5vdEZvdW5kEgwKBG5hbWUYASABKAkSGQoRYXZhaWxhYmxlX3NlcnZlcnMYAiADKAkiDQoLTWNwQXBwcm92ZWQiQQoQTWNwU3RhdGVFeGVjQXJncxIaChJzZXJ2ZXJfaWRlbnRpZmllcnMYASADKAkSEQoJa2lja19vbmx5GAIgASgIIocCCg5NY3BTdGF0ZVNlcnZlchITCgtzZXJ2ZXJfbmFtZRgBIAEoCRIZChFzZXJ2ZXJfaWRlbnRpZmllchgCIAEoCRITCgZwbHVnaW4YAyABKAlIAIgBARIYCgttYXJrZXRwbGFjZRgEIAEoCUgBiAEBEioKBXRvb2xzGAUgAygLMhsuYWdlbnQudjEuTWNwVG9vbERlZmluaXRpb24SLwoMaW5zdHJ1Y3Rpb25zGAYgAygLMhkuYWdlbnQudjEuTWNwSW5zdHJ1Y3Rpb25zEhMKBnN0YXR1cxgHIAEoCUgCiAEBQgkKB19wbHVnaW5CDgoMX21hcmtldHBsYWNlQgkKB19zdGF0dXMiPAoPTWNwU3RhdGVTdWNjZXNzEikKB3NlcnZlcnMYASADKAsyGC5hZ2VudC52MS5NY3BTdGF0ZVNlcnZlciIeCg1NY3BTdGF0ZUVycm9yEg0KBWVycm9yGAEgASgJIiIKEE1jcFN0YXRlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIqYBChJNY3BTdGF0ZUV4ZWNSZXN1bHQSLAoHc3VjY2VzcxgBIAEoCzIZLmFnZW50LnYxLk1jcFN0YXRlU3VjY2Vzc0gAEigKBWVycm9yGAIgASgLMhcuYWdlbnQudjEuTWNwU3RhdGVFcnJvckgAEi4KCHJlamVjdGVkGAMgASgLMhouYWdlbnQudjEuTWNwU3RhdGVSZWplY3RlZEgAQggKBnJlc3VsdCKtAQopQ29tbWFuZENsYXNzaWZpZXJSZXN1bHRfQ2xhc3NpZmllZENvbW1hbmQSDAoEbmFtZRgBIAEoCRIRCglhcmd1bWVudHMYAiADKAkSJgoZc3VnZ2VzdGVkX2FsbG93bGlzdF9lbnRyeRgDIAEoCUgAiAEBEhkKEXN1YmNvbW1hbmRfdG9rZW5zGAQgAygJQhwKGl9zdWdnZXN0ZWRfYWxsb3dsaXN0X2VudHJ5ItcBChdDb21tYW5kQ2xhc3NpZmllclJlc3VsdBJFCghjb21tYW5kcxgBIAMoCzIzLmFnZW50LnYxLkNvbW1hbmRDbGFzc2lmaWVyUmVzdWx0X0NsYXNzaWZpZWRDb21tYW5kElYKFnN1Z2dlc3RlZF9zYW5kYm94X21vZGUYAiABKA4yNi5hZ2VudC52MS5Db21tYW5kQ2xhc3NpZmllclJlc3VsdF9TdWdnZXN0ZWRTYW5kYm94TW9kZRIdChVjbGFzc2lmaWNhdGlvbl9mYWlsZWQYAyABKAgikwEKIlNoZWxsQ29tbWFuZFBhcnNpbmdSZXN1bHRfUmVkaXJlY3QSEAoIb3BlcmF0b3IYASABKAkSFwoPZGVzdGluYXRpb25fZmRzGAIgAygNEhgKEHRhcmdldF9ub2RlX3R5cGUYAyABKAkSGAoLdGFyZ2V0X3RleHQYBCABKAlIAIgBAUIOCgxfdGFyZ2V0X3RleHQiigIKGlNoZWxsQWxsb3dsaXN0UHJlY2hlY2tBcmdzEg8KB2NvbW1hbmQYASABKAkSGQoRd29ya2luZ19kaXJlY3RvcnkYAiABKAkSOwoOcGFyc2luZ19yZXN1bHQYAyABKAsyIy5hZ2VudC52MS5TaGVsbENvbW1hbmRQYXJzaW5nUmVzdWx0EkEKEWNsYXNzaWZpZXJfcmVzdWx0GAQgASgLMiEuYWdlbnQudjEuQ29tbWFuZENsYXNzaWZpZXJSZXN1bHRIAIgBARIZCgx0b29sX2NhbGxfaWQYBSABKAlIAYgBAUIUChJfY2xhc3NpZmllcl9yZXN1bHRCDwoNX3Rvb2xfY2FsbF9pZCIzChxTaGVsbEFsbG93bGlzdFByZWNoZWNrUmVzdWx0EhMKC2FsbG93bGlzdGVkGAEgASgIInYKGE1jcEFsbG93bGlzdFByZWNoZWNrQXJncxIbChNwcm92aWRlcl9pZGVudGlmaWVyGAEgASgJEhEKCXRvb2xfbmFtZRgCIAEoCRIZCgx0b29sX2NhbGxfaWQYAyABKAlIAIgBAUIPCg1fdG9vbF9jYWxsX2lkIjEKGk1jcEFsbG93bGlzdFByZWNoZWNrUmVzdWx0EhMKC2FsbG93bGlzdGVkGAEgASgIIlgKHVdlYkZldGNoQWxsb3dsaXN0UHJlY2hlY2tBcmdzEgsKA3VybBgBIAEoCRIZCgx0b29sX2NhbGxfaWQYAiABKAlIAIgBAUIPCg1fdG9vbF9jYWxsX2lkIjYKH1dlYkZldGNoQWxsb3dsaXN0UHJlY2hlY2tSZXN1bHQSEwoLYWxsb3dsaXN0ZWQYASABKAgiNwoRU21hcnRNb2RlQXBwcm92YWwSEgoKcmVxdWVzdF9pZBgBIAEoCRIOCgZyZWFzb24YAiABKAkinAEKHVNoZWxsT3V0cHV0Tm90aWZpY2F0aW9uQ29uZmlnEg8KB3BhdHRlcm4YASABKAkSDgoGcmVhc29uGAIgASgJEhUKCGRlYm91bmNlGAMgASgBSACIAQESHwoSbm90aWZpY2F0aW9uX2xpbWl0GAQgASgFSAGIAQFCCwoJX2RlYm91bmNlQhUKE19ub3RpZmljYXRpb25fbGltaXQieQocU2hlbGxIb29rQXBwcm92YWxSZXF1aXJlbWVudBI5CgRraW5kGAEgASgOMisuYWdlbnQudjEuU2hlbGxIb29rQXBwcm92YWxSZXF1aXJlbWVudF9LaW5kEhMKBnJlYXNvbhgCIAEoCUgAiAEBQgkKB19yZWFzb24iMAoYRm9yY2VCYWNrZ3JvdW5kU2hlbGxBcmdzEhQKDHRvb2xfY2FsbF9pZBgBIAEoCSKVAQoaRm9yY2VCYWNrZ3JvdW5kU2hlbGxSZXN1bHQSNAoGc3RhdHVzGAEgASgOMiQuYWdlbnQudjEuRm9yY2VCYWNrZ3JvdW5kU2hlbGxTdGF0dXMSMAoMc2hlbGxfcmVzdWx0GAIgASgLMhUuYWdlbnQudjEuU2hlbGxSZXN1bHRIAIgBAUIPCg1fc2hlbGxfcmVzdWx0IkEKFUhvb2tBZGRpdGlvbmFsQ29udGV4dBIXCg9ob29rX2V2ZW50X25hbWUYASABKAkSDwoHY29udGVudBgCIAEoCSJbChZTaGVsbFN0cmVhbUhvb2tDb250ZXh0EkEKGGhvb2tfYWRkaXRpb25hbF9jb250ZXh0cxgBIAMoCzIfLmFnZW50LnYxLkhvb2tBZGRpdGlvbmFsQ29udGV4dCJLCgxTdWJhZ2VudEFyZ3MSFAoMdG9vbF9jYWxsX2lkGAEgASgJEhUKDXN1YmFnZW50X3R5cGUYAiABKAkSDgoGcHJvbXB0GAQgASgJItsBCg9TdWJhZ2VudFN1Y2Nlc3MSEAoIYWdlbnRfaWQYASABKAkSGgoNZmluYWxfbWVzc2FnZRgCIAEoCUgAiAEBEhcKD3Rvb2xfY2FsbF9jb3VudBgDIAEoBRI9ChFiYWNrZ3JvdW5kX3JlYXNvbhgEIAEoDjIiLmFnZW50LnYxLlN1YmFnZW50QmFja2dyb3VuZFJlYXNvbhIcCg90cmFuc2NyaXB0X3BhdGgYBSABKAlIAYgBAUIQCg5fZmluYWxfbWVzc2FnZUISChBfdHJhbnNjcmlwdF9wYXRoIkIKDVN1YmFnZW50RXJyb3ISFQoIYWdlbnRfaWQYASABKAlIAIgBARINCgVlcnJvchgCIAEoCUILCglfYWdlbnRfaWQicgoOU3ViYWdlbnRSZXN1bHQSLAoHc3VjY2VzcxgBIAEoCzIZLmFnZW50LnYxLlN1YmFnZW50U3VjY2Vzc0gAEigKBWVycm9yGAIgASgLMhcuYWdlbnQudjEuU3ViYWdlbnRFcnJvckgAQggKBnJlc3VsdCI5ChFTdWJhZ2VudEF3YWl0QXJncxIQCghhZ2VudF9pZBgBIAEoCRISCgp0aW1lb3V0X21zGAIgASgNIqIBChVTdWJhZ2VudEF3YWl0Q29tcGxldGUSEAoIYWdlbnRfaWQYASABKAkSHAoPdHJhbnNjcmlwdF9wYXRoGAIgASgJSACIAQESFwoPdG9vbF9jYWxsX2NvdW50GAMgASgFEhoKDWZpbmFsX21lc3NhZ2UYBCABKAlIAYgBAUISChBfdHJhbnNjcmlwdF9wYXRoQhAKDl9maW5hbF9tZXNzYWdlIl8KGVN1YmFnZW50QXdhaXRTdGlsbFJ1bm5pbmcSEAoIYWdlbnRfaWQYASABKAkSHAoPdHJhbnNjcmlwdF9wYXRoGAIgASgJSACIAQFCEgoQX3RyYW5zY3JpcHRfcGF0aCIpChVTdWJhZ2VudEF3YWl0Tm90Rm91bmQSEAoIYWdlbnRfaWQYASABKAkiRwoSU3ViYWdlbnRBd2FpdEVycm9yEhUKCGFnZW50X2lkGAEgASgJSACIAQESDQoFZXJyb3IYAiABKAlCCwoJX2FnZW50X2lkIvcBChNTdWJhZ2VudEF3YWl0UmVzdWx0EjMKCGNvbXBsZXRlGAEgASgLMh8uYWdlbnQudjEuU3ViYWdlbnRBd2FpdENvbXBsZXRlSAASPAoNc3RpbGxfcnVubmluZxgCIAEoCzIjLmFnZW50LnYxLlN1YmFnZW50QXdhaXRTdGlsbFJ1bm5pbmdIABI0Cglub3RfZm91bmQYAyABKAsyHy5hZ2VudC52MS5TdWJhZ2VudEF3YWl0Tm90Rm91bmRIABItCgVlcnJvchgEIAEoCzIcLmFnZW50LnYxLlN1YmFnZW50QXdhaXRFcnJvckgAQggKBnJlc3VsdCIzChtGb3JjZUJhY2tncm91bmRTdWJhZ2VudEFyZ3MSFAoMdG9vbF9jYWxsX2lkGAEgASgJIlgKHUZvcmNlQmFja2dyb3VuZFN1YmFnZW50UmVzdWx0EjcKBnN0YXR1cxgBIAEoDjInLmFnZW50LnYxLkZvcmNlQmFja2dyb3VuZFN1YmFnZW50U3RhdHVzIhgKFlByZUNvbXBhY3RSZXF1ZXN0UXVlcnkiGwoZU3ViYWdlbnRTdGFydFJlcXVlc3RRdWVyeSIaChhTdWJhZ2VudFN0b3BSZXF1ZXN0UXVlcnkiGAoWUHJlVG9vbFVzZVJlcXVlc3RRdWVyeSIZChdQb3N0VG9vbFVzZVJlcXVlc3RRdWVyeSIgCh5Qb3N0VG9vbFVzZUZhaWx1cmVSZXF1ZXN0UXVlcnkiIAoeQmVmb3JlU3VibWl0UHJvbXB0UmVxdWVzdFF1ZXJ5IiAKHkFmdGVyQWdlbnRSZXNwb25zZVJlcXVlc3RRdWVyeSIfCh1BZnRlckFnZW50VGhvdWdodFJlcXVlc3RRdWVyeSISChBTdG9wUmVxdWVzdFF1ZXJ5IkcKGVByZUNvbXBhY3RSZXF1ZXN0UmVzcG9uc2USGQoMdXNlcl9tZXNzYWdlGAEgASgJSACIAQFCDwoNX3VzZXJfbWVzc2FnZSKqAQocU3ViYWdlbnRTdGFydFJlcXVlc3RSZXNwb25zZRIXCgpwZXJtaXNzaW9uGAEgASgJSACIAQESGQoMdXNlcl9tZXNzYWdlGAIgASgJSAGIAQESHwoSYWRkaXRpb25hbF9jb250ZXh0GAMgASgJSAKIAQFCDQoLX3Blcm1pc3Npb25CDwoNX3VzZXJfbWVzc2FnZUIVChNfYWRkaXRpb25hbF9jb250ZXh0IokBChtTdWJhZ2VudFN0b3BSZXF1ZXN0UmVzcG9uc2USHQoQZm9sbG93dXBfbWVzc2FnZRgBIAEoCUgAiAEBEh8KEmFkZGl0aW9uYWxfY29udGV4dBgCIAEoCUgBiAEBQhMKEV9mb2xsb3d1cF9tZXNzYWdlQhUKE19hZGRpdGlvbmFsX2NvbnRleHQigwIKGVByZVRvb2xVc2VSZXF1ZXN0UmVzcG9uc2USFwoKcGVybWlzc2lvbhgBIAEoCUgAiAEBEhkKDHVzZXJfbWVzc2FnZRgCIAEoCUgBiAEBEhoKDWFnZW50X21lc3NhZ2UYAyABKAlIAogBARIaCg11cGRhdGVkX2lucHV0GAQgASgJSAOIAQESHwoSYWRkaXRpb25hbF9jb250ZXh0GAUgASgJSASIAQFCDQoLX3Blcm1pc3Npb25CDwoNX3VzZXJfbWVzc2FnZUIQCg5fYWdlbnRfbWVzc2FnZUIQCg5fdXBkYXRlZF9pbnB1dEIVChNfYWRkaXRpb25hbF9jb250ZXh0IlQKGlBvc3RUb29sVXNlUmVxdWVzdFJlc3BvbnNlEh8KEmFkZGl0aW9uYWxfY29udGV4dBgBIAEoCUgAiAEBQhUKE19hZGRpdGlvbmFsX2NvbnRleHQiWwohUG9zdFRvb2xVc2VGYWlsdXJlUmVxdWVzdFJlc3BvbnNlEh8KEmFkZGl0aW9uYWxfY29udGV4dBgBIAEoCUgAiAEBQhUKE19hZGRpdGlvbmFsX2NvbnRleHQiqwEKIUJlZm9yZVN1Ym1pdFByb21wdFJlcXVlc3RSZXNwb25zZRIVCghjb250aW51ZRgBIAEoCEgAiAEBEhkKDHVzZXJfbWVzc2FnZRgCIAEoCUgBiAEBEh8KEmFkZGl0aW9uYWxfY29udGV4dBgDIAEoCUgCiAEBQgsKCV9jb250aW51ZUIPCg1fdXNlcl9tZXNzYWdlQhUKE19hZGRpdGlvbmFsX2NvbnRleHQiIwohQWZ0ZXJBZ2VudFJlc3BvbnNlUmVxdWVzdFJlc3BvbnNlIiIKIEFmdGVyQWdlbnRUaG91Z2h0UmVxdWVzdFJlc3BvbnNlIkkKE1N0b3BSZXF1ZXN0UmVzcG9uc2USHQoQZm9sbG93dXBfbWVzc2FnZRgBIAEoCUgAiAEBQhMKEV9mb2xsb3d1cF9tZXNzYWdlIp0FChJFeGVjdXRlSG9va1JlcXVlc3QSNwoLcHJlX2NvbXBhY3QYASABKAsyIC5hZ2VudC52MS5QcmVDb21wYWN0UmVxdWVzdFF1ZXJ5SAASPQoOc3ViYWdlbnRfc3RhcnQYAiABKAsyIy5hZ2VudC52MS5TdWJhZ2VudFN0YXJ0UmVxdWVzdFF1ZXJ5SAASOwoNc3ViYWdlbnRfc3RvcBgDIAEoCzIiLmFnZW50LnYxLlN1YmFnZW50U3RvcFJlcXVlc3RRdWVyeUgAEjgKDHByZV90b29sX3VzZRgEIAEoCzIgLmFnZW50LnYxLlByZVRvb2xVc2VSZXF1ZXN0UXVlcnlIABI6Cg1wb3N0X3Rvb2xfdXNlGAUgASgLMiEuYWdlbnQudjEuUG9zdFRvb2xVc2VSZXF1ZXN0UXVlcnlIABJJChVwb3N0X3Rvb2xfdXNlX2ZhaWx1cmUYBiABKAsyKC5hZ2VudC52MS5Qb3N0VG9vbFVzZUZhaWx1cmVSZXF1ZXN0UXVlcnlIABJIChRiZWZvcmVfc3VibWl0X3Byb21wdBgHIAEoCzIoLmFnZW50LnYxLkJlZm9yZVN1Ym1pdFByb21wdFJlcXVlc3RRdWVyeUgAEkgKFGFmdGVyX2FnZW50X3Jlc3BvbnNlGAggASgLMiguYWdlbnQudjEuQWZ0ZXJBZ2VudFJlc3BvbnNlUmVxdWVzdFF1ZXJ5SAASRgoTYWZ0ZXJfYWdlbnRfdGhvdWdodBgJIAEoCzInLmFnZW50LnYxLkFmdGVyQWdlbnRUaG91Z2h0UmVxdWVzdFF1ZXJ5SAASKgoEc3RvcBgLIAEoCzIaLmFnZW50LnYxLlN0b3BSZXF1ZXN0UXVlcnlIAEIJCgdyZXF1ZXN0Ir0FChNFeGVjdXRlSG9va1Jlc3BvbnNlEjoKC3ByZV9jb21wYWN0GAEgASgLMiMuYWdlbnQudjEuUHJlQ29tcGFjdFJlcXVlc3RSZXNwb25zZUgAEkAKDnN1YmFnZW50X3N0YXJ0GAIgASgLMiYuYWdlbnQudjEuU3ViYWdlbnRTdGFydFJlcXVlc3RSZXNwb25zZUgAEj4KDXN1YmFnZW50X3N0b3AYAyABKAsyJS5hZ2VudC52MS5TdWJhZ2VudFN0b3BSZXF1ZXN0UmVzcG9uc2VIABI7CgxwcmVfdG9vbF91c2UYBCABKAsyIy5hZ2VudC52MS5QcmVUb29sVXNlUmVxdWVzdFJlc3BvbnNlSAASPQoNcG9zdF90b29sX3VzZRgFIAEoCzIkLmFnZW50LnYxLlBvc3RUb29sVXNlUmVxdWVzdFJlc3BvbnNlSAASTAoVcG9zdF90b29sX3VzZV9mYWlsdXJlGAYgASgLMisuYWdlbnQudjEuUG9zdFRvb2xVc2VGYWlsdXJlUmVxdWVzdFJlc3BvbnNlSAASSwoUYmVmb3JlX3N1Ym1pdF9wcm9tcHQYByABKAsyKy5hZ2VudC52MS5CZWZvcmVTdWJtaXRQcm9tcHRSZXF1ZXN0UmVzcG9uc2VIABJLChRhZnRlcl9hZ2VudF9yZXNwb25zZRgIIAEoCzIrLmFnZW50LnYxLkFmdGVyQWdlbnRSZXNwb25zZVJlcXVlc3RSZXNwb25zZUgAEkkKE2FmdGVyX2FnZW50X3Rob3VnaHQYCSABKAsyKi5hZ2VudC52MS5BZnRlckFnZW50VGhvdWdodFJlcXVlc3RSZXNwb25zZUgAEi0KBHN0b3AYCyABKAsyHS5hZ2VudC52MS5TdG9wUmVxdWVzdFJlc3BvbnNlSABCCgoIcmVzcG9uc2UiQAoPRXhlY3V0ZUhvb2tBcmdzEi0KB3JlcXVlc3QYASABKAsyHC5hZ2VudC52MS5FeGVjdXRlSG9va1JlcXVlc3QiRAoRRXhlY3V0ZUhvb2tSZXN1bHQSLwoIcmVzcG9uc2UYASABKAsyHS5hZ2VudC52MS5FeGVjdXRlSG9va1Jlc3BvbnNlIiUKE1NtYXJ0TW9kZVJpc2tUYXJnZXQSDgoGYWN0aW9uGAEgASgJIkcKJlNtYXJ0TW9kZUNsYXNzaWZpZXJDb252ZXJzYXRpb25NZXNzYWdlEgwKBHJvbGUYASABKAkSDwoHY29udGVudBgCIAEoCSLuAQoXU21hcnRNb2RlQ2xhc3NpZmllckFyZ3MSFAoMdG9vbF9jYWxsX2lkGAEgASgJEiMKFnBhcmVudF9jb252ZXJzYXRpb25faWQYAiABKAlIAIgBARItCgZ0YXJnZXQYAyABKAsyHS5hZ2VudC52MS5TbWFydE1vZGVSaXNrVGFyZ2V0Ek4KFGNvbnZlcnNhdGlvbl9jb250ZXh0GAQgAygLMjAuYWdlbnQudjEuU21hcnRNb2RlQ2xhc3NpZmllckNvbnZlcnNhdGlvbk1lc3NhZ2VCGQoXX3BhcmVudF9jb252ZXJzYXRpb25faWQigQEKGlNtYXJ0TW9kZUNsYXNzaWZpZXJTdWNjZXNzEjcKCGRlY2lzaW9uGAEgASgOMiUuYWdlbnQudjEuU21hcnRNb2RlQ2xhc3NpZmllckRlY2lzaW9uEhkKDGJsb2NrX3JlYXNvbhgCIAEoCUgAiAEBQg8KDV9ibG9ja19yZWFzb24iKQoYU21hcnRNb2RlQ2xhc3NpZmllckVycm9yEg0KBWVycm9yGAEgASgJIpMBChlTbWFydE1vZGVDbGFzc2lmaWVyUmVzdWx0EjcKB3N1Y2Nlc3MYASABKAsyJC5hZ2VudC52MS5TbWFydE1vZGVDbGFzc2lmaWVyU3VjY2Vzc0gAEjMKBWVycm9yGAIgASgLMiIuYWdlbnQudjEuU21hcnRNb2RlQ2xhc3NpZmllckVycm9ySABCCAoGcmVzdWx0IjsKFUNhbnZhc0RpYWdub3N0aWNzQXJncxIMCgRwYXRoGAEgASgJEhQKDHRvb2xfY2FsbF9pZBgCIAEoCSJTChhDYW52YXNEaWFnbm9zdGljc1N1Y2Nlc3MSDAoEcGF0aBgBIAEoCRIpCgtkaWFnbm9zdGljcxgCIAMoCzIULmFnZW50LnYxLkRpYWdub3N0aWMiNQoWQ2FudmFzRGlhZ25vc3RpY3NFcnJvchIMCgRwYXRoGAEgASgJEg0KBWVycm9yGAIgASgJIo0BChdDYW52YXNEaWFnbm9zdGljc1Jlc3VsdBI1CgdzdWNjZXNzGAEgASgLMiIuYWdlbnQudjEuQ2FudmFzRGlhZ25vc3RpY3NTdWNjZXNzSAASMQoFZXJyb3IYAiABKAsyIC5hZ2VudC52MS5DYW52YXNEaWFnbm9zdGljc0Vycm9ySABCCAoGcmVzdWx0IqwBChVDb252ZXJzYXRpb25TZWFyY2hIaXQSFwoPY29udmVyc2F0aW9uX2lkGAEgASgJEg0KBXRpdGxlGAIgASgJEjIKBnNvdXJjZRgDIAEoDjIiLmFnZW50LnYxLkNvbnZlcnNhdGlvblNlYXJjaFNvdXJjZRIVCg11cGRhdGVkX2F0X21zGAQgASgDEhQKB3NuaXBwZXQYBSABKAlIAIgBAUIKCghfc25pcHBldCKCAQoZQ29udmVyc2F0aW9uU2VhcmNoU3VjY2VzcxItCgRoaXRzGAEgAygLMh8uYWdlbnQudjEuQ29udmVyc2F0aW9uU2VhcmNoSGl0EhEKCXRydW5jYXRlZBgCIAEoCBIPCgdwYXJ0aWFsGAMgASgIEhIKCnJlYnVpbGRpbmcYBCABKAgiKAoXQ29udmVyc2F0aW9uU2VhcmNoRXJyb3ISDQoFZXJyb3IYASABKAkiWwoWQ29udmVyc2F0aW9uU2VhcmNoQXJncxINCgVxdWVyeRgBIAEoCRIUCgx0b29sX2NhbGxfaWQYAiABKAkSEgoFbGltaXQYAyABKAVIAIgBAUIICgZfbGltaXQikAEKGENvbnZlcnNhdGlvblNlYXJjaFJlc3VsdBI2CgdzdWNjZXNzGAEgASgLMiMuYWdlbnQudjEuQ29udmVyc2F0aW9uU2VhcmNoU3VjY2Vzc0gAEjIKBWVycm9yGAIgASgLMiEuYWdlbnQudjEuQ29udmVyc2F0aW9uU2VhcmNoRXJyb3JIAEIICgZyZXN1bHQiVQoYQWdlbnRTdG9yZUNvbmZsaWN0Q3Vyc29yEhUKDWpvdXJuYWxfZXBvY2gYASABKAkSCwoDc2VxGAIgASgEEhUKDWxhc3RfZXZlbnRfaWQYAyABKAkipQMKF0FnZW50U3RvcmVDb25mbGljdEV2ZW50EgkKAXYYASABKA0SEAoIZXZlbnRfaWQYAiABKAkSFQoNam91cm5hbF9lcG9jaBgDIAEoCRILCgNzZXEYBCABKAQSDQoFdHNfbXMYBSABKAQSDAoEa2luZBgGIAEoCRIVCghzdG9yZV9pZBgHIAEoCUgAiAEBEh4KEW9yaWdpbmFsX3JlbF9wYXRoGAggASgJSAGIAQESHgoRY29uZmxpY3RfcmVsX3BhdGgYCSABKAlIAogBARIeChFvcmlnaW5hbF9hYnNfcGF0aBgKIAEoCUgDiAEBEh4KEWNvbmZsaWN0X2Fic19wYXRoGAsgASgJSASIAQESHAoPcHJlc2VydmVkX2J5dGVzGAwgASgESAWIAQFCCwoJX3N0b3JlX2lkQhQKEl9vcmlnaW5hbF9yZWxfcGF0aEIUChJfY29uZmxpY3RfcmVsX3BhdGhCFAoSX29yaWdpbmFsX2Fic19wYXRoQhQKEl9jb25mbGljdF9hYnNfcGF0aEISChBfcHJlc2VydmVkX2J5dGVzIpQBChlBZ2VudFN0b3JlQ29uZmxpY3RTdWNjZXNzEjEKBmV2ZW50cxgBIAMoCzIhLmFnZW50LnYxLkFnZW50U3RvcmVDb25mbGljdEV2ZW50EjcKC25leHRfY3Vyc29yGAIgASgLMiIuYWdlbnQudjEuQWdlbnRTdG9yZUNvbmZsaWN0Q3Vyc29yEgsKA2dhcBgDIAEoCCIoChdBZ2VudFN0b3JlQ29uZmxpY3RFcnJvchINCgVlcnJvchgBIAEoCSJ+ChZBZ2VudFN0b3JlQ29uZmxpY3RBcmdzEjcKBmN1cnNvchgBIAEoCzIiLmFnZW50LnYxLkFnZW50U3RvcmVDb25mbGljdEN1cnNvckgAiAEBEhQKB2FkdmFuY2UYAiABKAhIAYgBAUIJCgdfY3Vyc29yQgoKCF9hZHZhbmNlIpABChhBZ2VudFN0b3JlQ29uZmxpY3RSZXN1bHQSNgoHc3VjY2VzcxgBIAEoCzIjLmFnZW50LnYxLkFnZW50U3RvcmVDb25mbGljdFN1Y2Nlc3NIABIyCgVlcnJvchgCIAEoCzIhLmFnZW50LnYxLkFnZW50U3RvcmVDb25mbGljdEVycm9ySABCCAoGcmVzdWx0InwKDkZpbGVEaWZmX0NodW5rEg8KB2NvbnRlbnQYASABKAkSDQoFbGluZXMYAiADKAkSEQoJb2xkX3N0YXJ0GAMgASgFEhEKCW9sZF9saW5lcxgEIAEoBRIRCgluZXdfc3RhcnQYBSABKAUSEQoJbmV3X2xpbmVzGAYgASgFIpACCghGaWxlRGlmZhINCgVhZGRlZBgEIAEoBRIPCgdyZW1vdmVkGAUgASgFEgwKBGZyb20YASABKAkSCgoCdG8YAiABKAkSKAoGY2h1bmtzGAMgAygLMhguYWdlbnQudjEuRmlsZURpZmZfQ2h1bmsSIQoUYmVmb3JlX2ZpbGVfY29udGVudHMYBiABKAlIAIgBARIgChNhZnRlcl9maWxlX2NvbnRlbnRzGAcgASgJSAGIAQESGQoMaXNfZ2VuZXJhdGVkGAggASgISAKIAQFCFwoVX2JlZm9yZV9maWxlX2NvbnRlbnRzQhYKFF9hZnRlcl9maWxlX2NvbnRlbnRzQg8KDV9pc19nZW5lcmF0ZWQiWwoHR2l0RGlmZhIhCgVkaWZmcxgBIAMoCzISLmFnZW50LnYxLkZpbGVEaWZmEi0KCWRpZmZfdHlwZRgCIAEoDjIaLmFnZW50LnYxLkdpdERpZmZfRGlmZlR5cGUiaAodR2V0RGlmZlJlc3BvbnNlX1N1Ym1vZHVsZURpZmYSFQoNcmVsYXRpdmVfcGF0aBgBIAEoCRIfCgRkaWZmGAIgASgLMhEuYWdlbnQudjEuR2l0RGlmZhIPCgdlcnJvcmVkGAMgASgIIvIDCg5HZXREaWZmUmVxdWVzdBILCgNjd2QYASABKAkSCwoDcmVmGAIgASgJEhAKCGJhc2VfcmVmGAMgASgJEhIKCm1lcmdlX2Jhc2UYBCABKAgSFAoMdGFyZ2V0X3BhdGhzGAUgAygJEiIKFXVuaWZpZWRfY29udGV4dF9saW5lcxgGIAEoBUgAiAEBEhsKE21heF91bnRyYWNrZWRfZmlsZXMYByABKAUSHwoXc3VibW9kdWxlX3JlY3Vyc2VfZGVwdGgYCSABKAUSHQoVaW5jbHVkZV9zcGFjZV9jaGFuZ2VzGAogASgIEhYKDmNvbW1pdHRlZF9vbmx5GAsgASgIEhgKEGNvbXB1dGVfcGF0Y2hfaWQYDCABKAgSHAoPcmV0dXJuX2hlYWRfc2hhGA0gASgISAGIAQESHwoSbWF4X3Jlc3BvbnNlX2J5dGVzGA4gASgFSAKIAQESQQoNb3V0cHV0X2Zvcm1hdBgIIAEoDjIlLmFnZW50LnYxLkdldERpZmZSZXF1ZXN0X091dHB1dEZvcm1hdEgDiAEBQhgKFl91bmlmaWVkX2NvbnRleHRfbGluZXNCEgoQX3JldHVybl9oZWFkX3NoYUIVChNfbWF4X3Jlc3BvbnNlX2J5dGVzQhAKDl9vdXRwdXRfZm9ybWF0Iv4BCg9HZXREaWZmUmVzcG9uc2USHwoEZGlmZhgBIAEoCzIRLmFnZW50LnYxLkdpdERpZmYSQAoPc3VibW9kdWxlX2RpZmZzGAIgAygLMicuYWdlbnQudjEuR2V0RGlmZlJlc3BvbnNlX1N1Ym1vZHVsZURpZmYSFQoIcGF0Y2hfaWQYAyABKAlIAIgBARIVCghoZWFkX3NoYRgEIAEoCUgBiAEBEiQKF2hhc191bmNvbW1pdHRlZF9jaGFuZ2VzGAUgASgISAKIAQFCCwoJX3BhdGNoX2lkQgsKCV9oZWFkX3NoYUIaChhfaGFzX3VuY29tbWl0dGVkX2NoYW5nZXMiZAoOUGlSZWFkVG9vbENhbGwSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLlBpUmVhZEV4ZWNBcmdzEioKBnJlc3VsdBgCIAEoCzIaLmFnZW50LnYxLlBpUmVhZEV4ZWNSZXN1bHQiZAoOUGlCYXNoVG9vbENhbGwSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLlBpQmFzaEV4ZWNBcmdzEioKBnJlc3VsdBgCIAEoCzIaLmFnZW50LnYxLlBpQmFzaEV4ZWNSZXN1bHQiZAoOUGlFZGl0VG9vbENhbGwSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLlBpRWRpdEV4ZWNBcmdzEioKBnJlc3VsdBgCIAEoCzIaLmFnZW50LnYxLlBpRWRpdEV4ZWNSZXN1bHQiZwoPUGlXcml0ZVRvb2xDYWxsEicKBGFyZ3MYASABKAsyGS5hZ2VudC52MS5QaVdyaXRlRXhlY0FyZ3MSKwoGcmVzdWx0GAIgASgLMhsuYWdlbnQudjEuUGlXcml0ZUV4ZWNSZXN1bHQiZAoOUGlHcmVwVG9vbENhbGwSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLlBpR3JlcEV4ZWNBcmdzEioKBnJlc3VsdBgCIAEoCzIaLmFnZW50LnYxLlBpR3JlcEV4ZWNSZXN1bHQiZAoOUGlGaW5kVG9vbENhbGwSJgoEYXJncxgBIAEoCzIYLmFnZW50LnYxLlBpRmluZEV4ZWNBcmdzEioKBnJlc3VsdBgCIAEoCzIaLmFnZW50LnYxLlBpRmluZEV4ZWNSZXN1bHQiXgoMUGlMc1Rvb2xDYWxsEiQKBGFyZ3MYASABKAsyFi5hZ2VudC52MS5QaUxzRXhlY0FyZ3MSKAoGcmVzdWx0GAIgASgLMhguYWdlbnQudjEuUGlMc0V4ZWNSZXN1bHQigQEKG1NlYXJjaENvbnZlcnNhdGlvbnNUb29sQ2FsbBIuCgRhcmdzGAEgASgLMiAuYWdlbnQudjEuQ29udmVyc2F0aW9uU2VhcmNoQXJncxIyCgZyZXN1bHQYAiABKAsyIi5hZ2VudC52MS5Db252ZXJzYXRpb25TZWFyY2hSZXN1bHQiOQoaQ29ubmVjdFNjbUdpdGh1YlJlcG9zaXRvcnkSDQoFb3duZXIYASABKAkSDAoEcmVwbxgCIAEoCSJ+ChBDb25uZWN0U2NtR2l0aHViEjgKCnJlcG9zaXRvcnkYASABKAsyJC5hZ2VudC52MS5Db25uZWN0U2NtR2l0aHViUmVwb3NpdG9yeRIcCg9naGVfYXBwbGljYXRpb24YAiABKAlIAIgBAUISChBfZ2hlX2FwcGxpY2F0aW9uIl4KDkNvbm5lY3RTY21BcmdzEhQKDHRvb2xfY2FsbF9pZBgBIAEoCRIsCgZnaXRodWIYAiABKAsyGi5hZ2VudC52MS5Db25uZWN0U2NtR2l0aHViSABCCAoGdGFyZ2V0IhMKEUNvbm5lY3RTY21TdWNjZXNzIiAKD0Nvbm5lY3RTY21FcnJvchINCgVlcnJvchgBIAEoCSIkChJDb25uZWN0U2NtUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIqoBChBDb25uZWN0U2NtUmVzdWx0Ei4KB3N1Y2Nlc3MYASABKAsyGy5hZ2VudC52MS5Db25uZWN0U2NtU3VjY2Vzc0gAEioKBWVycm9yGAIgASgLMhkuYWdlbnQudjEuQ29ubmVjdFNjbUVycm9ySAASMAoIcmVqZWN0ZWQYAyABKAsyHC5hZ2VudC52MS5Db25uZWN0U2NtUmVqZWN0ZWRIAEIICgZyZXN1bHQiaAoSQ29ubmVjdFNjbVRvb2xDYWxsEiYKBGFyZ3MYASABKAsyGC5hZ2VudC52MS5Db25uZWN0U2NtQXJncxIqCgZyZXN1bHQYAiABKAsyGi5hZ2VudC52MS5Db25uZWN0U2NtUmVzdWx0KogBCh1BcHBsaWVkQWdlbnRDaGFuZ2VfQ2hhbmdlVHlwZRIbChdDSEFOR0VfVFlQRV9VTlNQRUNJRklFRBAAEhcKE0NIQU5HRV9UWVBFX0NSRUFURUQQARIYChRDSEFOR0VfVFlQRV9NT0RJRklFRBACEhcKE0NIQU5HRV9UWVBFX0RFTEVURUQQAyqkAQoLTW91c2VCdXR0b24SHAoYTU9VU0VfQlVUVE9OX1VOU1BFQ0lGSUVEEAASFQoRTU9VU0VfQlVUVE9OX0xFRlQQARIWChJNT1VTRV9CVVRUT05fUklHSFQQAhIXChNNT1VTRV9CVVRUT05fTUlERExFEAMSFQoRTU9VU0VfQlVUVE9OX0JBQ0sQBBIYChRNT1VTRV9CVVRUT05fRk9SV0FSRBAFKp4BCg9TY3JvbGxEaXJlY3Rpb24SIAocU0NST0xMX0RJUkVDVElPTl9VTlNQRUNJRklFRBAAEhcKE1NDUk9MTF9ESVJFQ1RJT05fVVAQARIZChVTQ1JPTExfRElSRUNUSU9OX0RPV04QAhIZChVTQ1JPTExfRElSRUNUSU9OX0xFRlQQAxIaChZTQ1JPTExfRElSRUNUSU9OX1JJR0hUEAQqcAoQQ3Vyc29yUnVsZVNvdXJjZRIiCh5DVVJTT1JfUlVMRV9TT1VSQ0VfVU5TUEVDSUZJRUQQABIbChdDVVJTT1JfUlVMRV9TT1VSQ0VfVEVBTRABEhsKF0NVUlNPUl9SVUxFX1NPVVJDRV9VU0VSEAIqvAEKEkRpYWdub3N0aWNTZXZlcml0eRIjCh9ESUFHTk9TVElDX1NFVkVSSVRZX1VOU1BFQ0lGSUVEEAASHQoZRElBR05PU1RJQ19TRVZFUklUWV9FUlJPUhABEh8KG0RJQUdOT1NUSUNfU0VWRVJJVFlfV0FSTklORxACEiMKH0RJQUdOT1NUSUNfU0VWRVJJVFlfSU5GT1JNQVRJT04QAxIcChhESUFHTk9TVElDX1NFVkVSSVRZX0hJTlQQBCqcAQoNUmVjb3JkaW5nTW9kZRIeChpSRUNPUkRJTkdfTU9ERV9VTlNQRUNJRklFRBAAEiIKHlJFQ09SRElOR19NT0RFX1NUQVJUX1JFQ09SRElORxABEiEKHVJFQ09SRElOR19NT0RFX1NBVkVfUkVDT1JESU5HEAISJAogUkVDT1JESU5HX01PREVfRElTQ0FSRF9SRUNPUkRJTkcQAyqTAQofUmVxdWVzdGVkRmlsZVBhdGhSZWplY3RlZFJlYXNvbhIzCi9SRVFVRVNURURfRklMRV9QQVRIX1JFSkVDVEVEX1JFQVNPTl9VTlNQRUNJRklFRBAAEjsKN1JFUVVFU1RFRF9GSUxFX1BBVEhfUkVKRUNURURfUkVBU09OX1NMQVNIRVNfTk9UX0FMTE9XRUQQASqtAQoLUGFja2FnZVR5cGUSHAoYUEFDS0FHRV9UWVBFX1VOU1BFQ0lGSUVEEAASHwobUEFDS0FHRV9UWVBFX0NVUlNPUl9QUk9KRUNUEAESIAocUEFDS0FHRV9UWVBFX0NVUlNPUl9QRVJTT05BTBACEh0KGVBBQ0tBR0VfVFlQRV9DTEFVREVfU0tJTEwQAxIeChpQQUNLQUdFX1RZUEVfQ0xBVURFX1BMVUdJThAEKn0KElNhbmRib3hQb2xpY3lfVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASFgoSVFlQRV9JTlNFQ1VSRV9OT05FEAESHAoYVFlQRV9XT1JLU1BBQ0VfUkVBRFdSSVRFEAISGwoXVFlQRV9XT1JLU1BBQ0VfUkVBRE9OTFkQAypxCg9UaW1lb3V0QmVoYXZpb3ISIAocVElNRU9VVF9CRUhBVklPUl9VTlNQRUNJRklFRBAAEhsKF1RJTUVPVVRfQkVIQVZJT1JfQ0FOQ0VMEAESHwobVElNRU9VVF9CRUhBVklPUl9CQUNLR1JPVU5EEAIqeQoQU2hlbGxBYm9ydFJlYXNvbhIiCh5TSEVMTF9BQk9SVF9SRUFTT05fVU5TUEVDSUZJRUQQABIhCh1TSEVMTF9BQk9SVF9SRUFTT05fVVNFUl9BQk9SVBABEh4KGlNIRUxMX0FCT1JUX1JFQVNPTl9USU1FT1VUEAIqqgEKHEN1c3RvbVN1YmFnZW50UGVybWlzc2lvbk1vZGUSLworQ1VTVE9NX1NVQkFHRU5UX1BFUk1JU1NJT05fTU9ERV9VTlNQRUNJRklFRBAAEisKJ0NVU1RPTV9TVUJBR0VOVF9QRVJNSVNTSU9OX01PREVfREVGQVVMVBABEiwKKENVU1RPTV9TVUJBR0VOVF9QRVJNSVNTSU9OX01PREVfUkVBRE9OTFkQAiqVAQoKVG9kb1N0YXR1cxIbChdUT0RPX1NUQVRVU19VTlNQRUNJRklFRBAAEhcKE1RPRE9fU1RBVFVTX1BFTkRJTkcQARIbChdUT0RPX1NUQVRVU19JTl9QUk9HUkVTUxACEhkKFVRPRE9fU1RBVFVTX0NPTVBMRVRFRBADEhkKFVRPRE9fU1RBVFVTX0NBTkNFTExFRBAEKmYKCENsaWVudE9TEhkKFUNMSUVOVF9PU19VTlNQRUNJRklFRBAAEhUKEUNMSUVOVF9PU19XSU5ET1dTEAESEwoPQ0xJRU5UX09TX01BQ09TEAISEwoPQ0xJRU5UX09TX0xJTlVYEAMq7AEKHEFydGlmYWN0VXBsb2FkRGlzcGF0Y2hTdGF0dXMSLworQVJUSUZBQ1RfVVBMT0FEX0RJU1BBVENIX1NUQVRVU19VTlNQRUNJRklFRBAAEiwKKEFSVElGQUNUX1VQTE9BRF9ESVNQQVRDSF9TVEFUVVNfQUNDRVBURUQQARIsCihBUlRJRkFDVF9VUExPQURfRElTUEFUQ0hfU1RBVFVTX1JFSkVDVEVEEAISPwo7QVJUSUZBQ1RfVVBMT0FEX0RJU1BBVENIX1NUQVRVU19TS0lQUEVEX0FMUkVBRFlfSU5fUFJPR1JFU1MQAypXCgpGcmFtZV9LaW5kEhQKEEtJTkRfVU5TUEVDSUZJRUQQABIQCgxLSU5EX1JFUVVFU1QQARIRCg1LSU5EX1JFU1BPTlNFEAISDgoKS0lORF9FUlJPUhADKrACChdCdWdib3REZWVwbGlua0V2ZW50S2luZBIqCiZCVUdCT1RfREVFUExJTktfRVZFTlRfS0lORF9VTlNQRUNJRklFRBAAEiYKIkJVR0JPVF9ERUVQTElOS19FVkVOVF9LSU5EX0NMSUNLRUQQARIzCi9CVUdCT1RfREVFUExJTktfRVZFTlRfS0lORF9IQU5ETEVEX0RJQUxPR19TSE9XThACEjMKL0JVR0JPVF9ERUVQTElOS19FVkVOVF9LSU5EX0hBTkRMRURfQ0hBVF9DUkVBVEVEEAMSJAogQlVHQk9UX0RFRVBMSU5LX0VWRU5UX0tJTkRfRVJST1IQBBIxCi1CVUdCT1RfREVFUExJTktfRVZFTlRfS0lORF9IQU5ETEVEX0ZJWF9JTl9XRUIQBSrKAQosQ29tbWFuZENsYXNzaWZpZXJSZXN1bHRfU3VnZ2VzdGVkU2FuZGJveE1vZGUSJgoiU1VHR0VTVEVEX1NBTkRCT1hfTU9ERV9VTlNQRUNJRklFRBAAEiIKHlNVR0dFU1RFRF9TQU5EQk9YX01PREVfU0FOREJPWBABEiUKIVNVR0dFU1RFRF9TQU5EQk9YX01PREVfTk9fU0FOREJPWBACEicKI1NVR0dFU1RFRF9TQU5EQk9YX01PREVfVU5ERVRFUk1JTkVEEAMqkAEKIVNoZWxsSG9va0FwcHJvdmFsUmVxdWlyZW1lbnRfS2luZBI0CjBTSEVMTF9IT09LX0FQUFJPVkFMX1JFUVVJUkVNRU5UX0tJTkRfVU5TUEVDSUZJRUQQABI1CjFTSEVMTF9IT09LX0FQUFJPVkFMX1JFUVVJUkVNRU5UX0tJTkRfRk9SQ0VfUFJPTVBUEAEqjwEKFVNoZWxsQmFja2dyb3VuZFJlYXNvbhInCiNTSEVMTF9CQUNLR1JPVU5EX1JFQVNPTl9VTlNQRUNJRklFRBAAEiMKH1NIRUxMX0JBQ0tHUk9VTkRfUkVBU09OX1RJTUVPVVQQARIoCiRTSEVMTF9CQUNLR1JPVU5EX1JFQVNPTl9VU0VSX1JFUVVFU1QQAiqkAQoaRm9yY2VCYWNrZ3JvdW5kU2hlbGxTdGF0dXMSLQopRk9SQ0VfQkFDS0dST1VORF9TSEVMTF9TVEFUVVNfVU5TUEVDSUZJRUQQABIqCiZGT1JDRV9CQUNLR1JPVU5EX1NIRUxMX1NUQVRVU19BQ0NFUFRFRBABEisKJ0ZPUkNFX0JBQ0tHUk9VTkRfU0hFTExfU1RBVFVTX05PVF9GT1VORBACKtIBChhTdWJhZ2VudEJhY2tncm91bmRSZWFzb24SKgomU1VCQUdFTlRfQkFDS0dST1VORF9SRUFTT05fVU5TUEVDSUZJRUQQABIsCihTVUJBR0VOVF9CQUNLR1JPVU5EX1JFQVNPTl9BR0VOVF9SRVFVRVNUEAESKwonU1VCQUdFTlRfQkFDS0dST1VORF9SRUFTT05fVVNFUl9SRVFVRVNUEAISLworU1VCQUdFTlRfQkFDS0dST1VORF9SRUFTT05fUVVFVUVEX0ZPTExPV19VUBADKrABCh1Gb3JjZUJhY2tncm91bmRTdWJhZ2VudFN0YXR1cxIwCixGT1JDRV9CQUNLR1JPVU5EX1NVQkFHRU5UX1NUQVRVU19VTlNQRUNJRklFRBAAEi0KKUZPUkNFX0JBQ0tHUk9VTkRfU1VCQUdFTlRfU1RBVFVTX0FDQ0VQVEVEEAESLgoqRk9SQ0VfQkFDS0dST1VORF9TVUJBR0VOVF9TVEFUVVNfTk9UX0ZPVU5EEAIqoQEKG1NtYXJ0TW9kZUNsYXNzaWZpZXJEZWNpc2lvbhIuCipTTUFSVF9NT0RFX0NMQVNTSUZJRVJfREVDSVNJT05fVU5TUEVDSUZJRUQQABIoCiRTTUFSVF9NT0RFX0NMQVNTSUZJRVJfREVDSVNJT05fQUxMT1cQARIoCiRTTUFSVF9NT0RFX0NMQVNTSUZJRVJfREVDSVNJT05fQkxPQ0sQAiqYAQoYQ29udmVyc2F0aW9uU2VhcmNoU291cmNlEioKJkNPTlZFUlNBVElPTl9TRUFSQ0hfU09VUkNFX1VOU1BFQ0lGSUVEEAASJAogQ09OVkVSU0FUSU9OX1NFQVJDSF9TT1VSQ0VfTE9DQUwQARIqCiZDT05WRVJTQVRJT05fU0VBUkNIX1NPVVJDRV9DTE9VRF9DQUNIRRACKtMBChtHZXREaWZmUmVxdWVzdF9PdXRwdXRGb3JtYXQSHQoZT1VUUFVUX0ZPUk1BVF9VTlNQRUNJRklFRBAAEh0KGU9VVFBVVF9GT1JNQVRfTkFNRV9TVEFUVVMQARIpCiVPVVRQVVRfRk9STUFUX05BTUVfU1RBVFVTX0FORF9OVU1TVEFUEAISHAoYT1VUUFVUX0ZPUk1BVF9GSUxFX0RJRkZTEAMSLQopT1VUUFVUX0ZPUk1BVF9ESUZGU19XSVRIX0JFRk9SRV9BTkRfQUZURVIQBCpxChBHaXREaWZmX0RpZmZUeXBlEhkKFURJRkZfVFlQRV9VTlNQRUNJRklFRBAAEhoKFkRJRkZfVFlQRV9ESUZGX1RPX0hFQUQQARImCiJESUZGX1RZUEVfRElGRl9GUk9NX0JSQU5DSF9UT19NQUlOEAIyhwQKDEFnZW50U2VydmljZRJBCgNSdW4SHC5hZ2VudC52MS5BZ2VudENsaWVudE1lc3NhZ2UaHC5hZ2VudC52MS5BZ2VudFNlcnZlck1lc3NhZ2USPwoGUnVuU1NFEhcuYWdlbnQudjEuQmlkaVJlcXVlc3RJZBocLmFnZW50LnYxLkFnZW50U2VydmVyTWVzc2FnZRJECglOYW1lQWdlbnQSGi5hZ2VudC52MS5OYW1lQWdlbnRSZXF1ZXN0GhsuYWdlbnQudjEuTmFtZUFnZW50UmVzcG9uc2USVgoPR2V0VXNhYmxlTW9kZWxzEiAuYWdlbnQudjEuR2V0VXNhYmxlTW9kZWxzUmVxdWVzdBohLmFnZW50LnYxLkdldFVzYWJsZU1vZGVsc1Jlc3BvbnNlEmgKFUdldERlZmF1bHRNb2RlbEZvckNsaRImLmFnZW50LnYxLkdldERlZmF1bHRNb2RlbEZvckNsaVJlcXVlc3QaJy5hZ2VudC52MS5HZXREZWZhdWx0TW9kZWxGb3JDbGlSZXNwb25zZRJrChZHZXRBbGxvd2VkTW9kZWxJbnRlbnRzEicuYWdlbnQudjEuR2V0QWxsb3dlZE1vZGVsSW50ZW50c1JlcXVlc3QaKC5hZ2VudC52MS5HZXRBbGxvd2VkTW9kZWxJbnRlbnRzUmVzcG9uc2UytQgKDkNvbnRyb2xTZXJ2aWNlEk0KDFJlYWRUZXh0RmlsZRIdLmFnZW50LnYxLlJlYWRUZXh0RmlsZVJlcXVlc3QaHi5hZ2VudC52MS5SZWFkVGV4dEZpbGVSZXNwb25zZRJQCg1Xcml0ZVRleHRGaWxlEh4uYWdlbnQudjEuV3JpdGVUZXh0RmlsZVJlcXVlc3QaHy5hZ2VudC52MS5Xcml0ZVRleHRGaWxlUmVzcG9uc2USUwoOUmVhZEJpbmFyeUZpbGUSHy5hZ2VudC52MS5SZWFkQmluYXJ5RmlsZVJlcXVlc3QaIC5hZ2VudC52MS5SZWFkQmluYXJ5RmlsZVJlc3BvbnNlElYKD1dyaXRlQmluYXJ5RmlsZRIgLmFnZW50LnYxLldyaXRlQmluYXJ5RmlsZVJlcXVlc3QaIS5hZ2VudC52MS5Xcml0ZUJpbmFyeUZpbGVSZXNwb25zZRJuChdHZXRXb3Jrc3BhY2VDaGFuZ2VzSGFzaBIoLmFnZW50LnYxLkdldFdvcmtzcGFjZUNoYW5nZXNIYXNoUmVxdWVzdBopLmFnZW50LnYxLkdldFdvcmtzcGFjZUNoYW5nZXNIYXNoUmVzcG9uc2UScQoYUmVmcmVzaEdpdGh1YkFjY2Vzc1Rva2VuEikuYWdlbnQudjEuUmVmcmVzaEdpdGh1YkFjY2Vzc1Rva2VuUmVxdWVzdBoqLmFnZW50LnYxLlJlZnJlc2hHaXRodWJBY2Nlc3NUb2tlblJlc3BvbnNlEmsKFldhcm1SZW1vdGVBY2Nlc3NTZXJ2ZXISJy5hZ2VudC52MS5XYXJtUmVtb3RlQWNjZXNzU2VydmVyUmVxdWVzdBooLmFnZW50LnYxLldhcm1SZW1vdGVBY2Nlc3NTZXJ2ZXJSZXNwb25zZRJQCg1MaXN0QXJ0aWZhY3RzEh4uYWdlbnQudjEuTGlzdEFydGlmYWN0c1JlcXVlc3QaHy5hZ2VudC52MS5MaXN0QXJ0aWZhY3RzUmVzcG9uc2USVgoPVXBsb2FkQXJ0aWZhY3RzEiAuYWdlbnQudjEuVXBsb2FkQXJ0aWZhY3RzUmVxdWVzdBohLmFnZW50LnYxLlVwbG9hZEFydGlmYWN0c1Jlc3BvbnNlEmIKE0dldE1jcFJlZnJlc2hUb2tlbnMSJC5hZ2VudC52MS5HZXRNY3BSZWZyZXNoVG9rZW5zUmVxdWVzdBolLmFnZW50LnYxLkdldE1jcFJlZnJlc2hUb2tlbnNSZXNwb25zZRJ3ChpVcGRhdGVFbnZpcm9ubWVudFZhcmlhYmxlcxIrLmFnZW50LnYxLlVwZGF0ZUVudmlyb25tZW50VmFyaWFibGVzUmVxdWVzdBosLmFnZW50LnYxLlVwZGF0ZUVudmlyb25tZW50VmFyaWFibGVzUmVzcG9uc2UyDQoLRXhlY1NlcnZpY2UyUQoiUHJpdmF0ZVdvcmtlckJyaWRnZUV4dGVybmFsU2VydmljZRIrCgdDb25uZWN0Eg8uYWdlbnQudjEuRnJhbWUaDy5hZ2VudC52MS5GcmFtZTJ4ChBMaWZlY3ljbGVTZXJ2aWNlEjEKDVJlc2V0SW5zdGFuY2USDy5hZ2VudC52MS5FbXB0eRoPLmFnZW50LnYxLkVtcHR5EjEKDVJlbmV3SW5zdGFuY2USDy5hZ2VudC52MS5FbXB0eRoPLmFnZW50LnYxLkVtcHR5YgZwcm90bzM"); /** * @generated from message agent.v1.GlobToolResult @@ -1390,13 +1390,20 @@ export type ToolCall = Message<"agent.v1.ToolCall"> & { */ value: SearchConversationsToolCall; case: "searchConversationsToolCall"; + } | { + /** + * @generated from field: agent.v1.FetchToolCall web_fetch_tool_call = 37; + */ + value: FetchToolCall; + case: "webFetchToolCall"; } | { case: undefined; value?: undefined }; /** * Modern builds carry the call id on the envelope instead of inside each - * variant's args. Fields 37-53, 55, 56, 58 (further tool variants) and 54 - * (hook_additional_contexts), 59/60 (started_at_ms/completed_at_ms) are not - * modelled and decode into unknown fields; do not reuse those numbers. + * variant's args. Field 37 is the hosted WebFetch tool. Fields 38-53, 55, + * 56, 58 (further tool variants) and 54 (hook_additional_contexts), + * 59/60 (started_at_ms/completed_at_ms) are not modelled and decode into + * unknown fields; do not reuse those numbers. * * @generated from field: optional string tool_call_id = 57; */ @@ -3356,6 +3363,12 @@ export type InteractionQuery = Message<"agent.v1.InteractionQuery"> & { */ value: SetupVmEnvironmentArgs; case: "setupVmEnvironmentArgs"; + } | { + /** + * @generated from field: agent.v1.WebFetchRequestQuery web_fetch_request_query = 9; + */ + value: WebFetchRequestQuery; + case: "webFetchRequestQuery"; } | { case: undefined; value?: undefined }; }; @@ -3420,6 +3433,12 @@ export type InteractionResponse = Message<"agent.v1.InteractionResponse"> & { */ value: SetupVmEnvironmentResult; case: "setupVmEnvironmentResult"; + } | { + /** + * @generated from field: agent.v1.WebFetchRequestResponse web_fetch_request_response = 9; + */ + value: WebFetchRequestResponse; + case: "webFetchRequestResponse"; } | { case: undefined; value?: undefined }; }; @@ -3430,6 +3449,82 @@ export type InteractionResponse = Message<"agent.v1.InteractionResponse"> & { export const InteractionResponseSchema: GenMessage = /*@__PURE__*/ messageDesc(file_agent, 111); +/** + * @generated from message agent.v1.WebFetchRequestQuery + */ +export type WebFetchRequestQuery = Message<"agent.v1.WebFetchRequestQuery"> & { + /** + * @generated from field: agent.v1.FetchArgs args = 1; + */ + args?: FetchArgs | undefined; +}; + +/** + * Describes the message agent.v1.WebFetchRequestQuery. + * Use `create(WebFetchRequestQuerySchema)` to create a new message. + */ +export const WebFetchRequestQuerySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_agent, 112); + +/** + * @generated from message agent.v1.WebFetchRequestResponse + */ +export type WebFetchRequestResponse = Message<"agent.v1.WebFetchRequestResponse"> & { + /** + * @generated from oneof agent.v1.WebFetchRequestResponse.result + */ + result: { + /** + * @generated from field: agent.v1.WebFetchRequestResponse_Approved approved = 1; + */ + value: WebFetchRequestResponse_Approved; + case: "approved"; + } | { + /** + * @generated from field: agent.v1.WebFetchRequestResponse_Rejected rejected = 2; + */ + value: WebFetchRequestResponse_Rejected; + case: "rejected"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message agent.v1.WebFetchRequestResponse. + * Use `create(WebFetchRequestResponseSchema)` to create a new message. + */ +export const WebFetchRequestResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_agent, 113); + +/** + * @generated from message agent.v1.WebFetchRequestResponse_Approved + */ +export type WebFetchRequestResponse_Approved = Message<"agent.v1.WebFetchRequestResponse_Approved"> & { +}; + +/** + * Describes the message agent.v1.WebFetchRequestResponse_Approved. + * Use `create(WebFetchRequestResponse_ApprovedSchema)` to create a new message. + */ +export const WebFetchRequestResponse_ApprovedSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_agent, 114); + +/** + * @generated from message agent.v1.WebFetchRequestResponse_Rejected + */ +export type WebFetchRequestResponse_Rejected = Message<"agent.v1.WebFetchRequestResponse_Rejected"> & { + /** + * @generated from field: string reason = 1; + */ + reason: string; +}; + +/** + * Describes the message agent.v1.WebFetchRequestResponse_Rejected. + * Use `create(WebFetchRequestResponse_RejectedSchema)` to create a new message. + */ +export const WebFetchRequestResponse_RejectedSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_agent, 115); + /** * @generated from message agent.v1.AskQuestionInteractionQuery */ @@ -3450,7 +3545,7 @@ export type AskQuestionInteractionQuery = Message<"agent.v1.AskQuestionInteracti * Use `create(AskQuestionInteractionQuerySchema)` to create a new message. */ export const AskQuestionInteractionQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 112); + messageDesc(file_agent, 116); /** * @generated from message agent.v1.AskQuestionInteractionResponse @@ -3467,7 +3562,7 @@ export type AskQuestionInteractionResponse = Message<"agent.v1.AskQuestionIntera * Use `create(AskQuestionInteractionResponseSchema)` to create a new message. */ export const AskQuestionInteractionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 113); + messageDesc(file_agent, 117); /** * @generated from message agent.v1.ClientHeartbeat @@ -3480,7 +3575,7 @@ export type ClientHeartbeat = Message<"agent.v1.ClientHeartbeat"> & { * Use `create(ClientHeartbeatSchema)` to create a new message. */ export const ClientHeartbeatSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 114); + messageDesc(file_agent, 118); /** * Prewarm request - sent before the actual action to prepare the backend Contains all config needed for auth, model routing, and session building The actual ConversationAction is sent separately after prewarming completes @@ -3543,7 +3638,7 @@ export type PrewarmRequest = Message<"agent.v1.PrewarmRequest"> & { * Use `create(PrewarmRequestSchema)` to create a new message. */ export const PrewarmRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 115); + messageDesc(file_agent, 119); /** * @generated from message agent.v1.ExecServerAbort @@ -3560,7 +3655,7 @@ export type ExecServerAbort = Message<"agent.v1.ExecServerAbort"> & { * Use `create(ExecServerAbortSchema)` to create a new message. */ export const ExecServerAbortSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 116); + messageDesc(file_agent, 120); /** * @generated from message agent.v1.ExecServerControlMessage @@ -3583,7 +3678,7 @@ export type ExecServerControlMessage = Message<"agent.v1.ExecServerControlMessag * Use `create(ExecServerControlMessageSchema)` to create a new message. */ export const ExecServerControlMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 117); + messageDesc(file_agent, 121); /** * @generated from message agent.v1.AgentClientMessage @@ -3648,7 +3743,7 @@ export type AgentClientMessage = Message<"agent.v1.AgentClientMessage"> & { * Use `create(AgentClientMessageSchema)` to create a new message. */ export const AgentClientMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 118); + messageDesc(file_agent, 122); /** * @generated from message agent.v1.AgentServerMessage @@ -3701,7 +3796,7 @@ export type AgentServerMessage = Message<"agent.v1.AgentServerMessage"> & { * Use `create(AgentServerMessageSchema)` to create a new message. */ export const AgentServerMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 119); + messageDesc(file_agent, 123); /** * New unary API for naming an agent from a user message @@ -3720,7 +3815,7 @@ export type NameAgentRequest = Message<"agent.v1.NameAgentRequest"> & { * Use `create(NameAgentRequestSchema)` to create a new message. */ export const NameAgentRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 120); + messageDesc(file_agent, 124); /** * @generated from message agent.v1.NameAgentResponse @@ -3737,7 +3832,7 @@ export type NameAgentResponse = Message<"agent.v1.NameAgentResponse"> & { * Use `create(NameAgentResponseSchema)` to create a new message. */ export const NameAgentResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 121); + messageDesc(file_agent, 125); /** * @generated from message agent.v1.GetUsableModelsRequest @@ -3756,7 +3851,7 @@ export type GetUsableModelsRequest = Message<"agent.v1.GetUsableModelsRequest"> * Use `create(GetUsableModelsRequestSchema)` to create a new message. */ export const GetUsableModelsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 122); + messageDesc(file_agent, 126); /** * @generated from message agent.v1.GetUsableModelsResponse @@ -3773,7 +3868,7 @@ export type GetUsableModelsResponse = Message<"agent.v1.GetUsableModelsResponse" * Use `create(GetUsableModelsResponseSchema)` to create a new message. */ export const GetUsableModelsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 123); + messageDesc(file_agent, 127); /** * @generated from message agent.v1.GetDefaultModelForCliRequest @@ -3786,7 +3881,7 @@ export type GetDefaultModelForCliRequest = Message<"agent.v1.GetDefaultModelForC * Use `create(GetDefaultModelForCliRequestSchema)` to create a new message. */ export const GetDefaultModelForCliRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 124); + messageDesc(file_agent, 128); /** * @generated from message agent.v1.GetDefaultModelForCliResponse @@ -3803,7 +3898,7 @@ export type GetDefaultModelForCliResponse = Message<"agent.v1.GetDefaultModelFor * Use `create(GetDefaultModelForCliResponseSchema)` to create a new message. */ export const GetDefaultModelForCliResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 125); + messageDesc(file_agent, 129); /** * Internal endpoint: returns all allowed model intents for devs @@ -3818,7 +3913,7 @@ export type GetAllowedModelIntentsRequest = Message<"agent.v1.GetAllowedModelInt * Use `create(GetAllowedModelIntentsRequestSchema)` to create a new message. */ export const GetAllowedModelIntentsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 126); + messageDesc(file_agent, 130); /** * @generated from message agent.v1.GetAllowedModelIntentsResponse @@ -3835,7 +3930,7 @@ export type GetAllowedModelIntentsResponse = Message<"agent.v1.GetAllowedModelIn * Use `create(GetAllowedModelIntentsResponseSchema)` to create a new message. */ export const GetAllowedModelIntentsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 127); + messageDesc(file_agent, 131); /** * IDE state persistence for clients (CLI / VSCode integration) Mirrors a subset of aiserver.v1.ConversationMessage.IdeEditorsState, but only contains the recently viewed files and avoids any deprecated fields. @@ -3879,7 +3974,7 @@ export type IdeEditorsStateFile = Message<"agent.v1.IdeEditorsStateFile"> & { * Use `create(IdeEditorsStateFileSchema)` to create a new message. */ export const IdeEditorsStateFileSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 128); + messageDesc(file_agent, 132); /** * @generated from message agent.v1.IdeEditorsStateLite @@ -3896,7 +3991,7 @@ export type IdeEditorsStateLite = Message<"agent.v1.IdeEditorsStateLite"> & { * Use `create(IdeEditorsStateLiteSchema)` to create a new message. */ export const IdeEditorsStateLiteSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 129); + messageDesc(file_agent, 133); /** * @generated from message agent.v1.ApplyAgentDiffToolCall @@ -3918,7 +4013,7 @@ export type ApplyAgentDiffToolCall = Message<"agent.v1.ApplyAgentDiffToolCall"> * Use `create(ApplyAgentDiffToolCallSchema)` to create a new message. */ export const ApplyAgentDiffToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 130); + messageDesc(file_agent, 134); /** * @generated from message agent.v1.ApplyAgentDiffArgs @@ -3935,7 +4030,7 @@ export type ApplyAgentDiffArgs = Message<"agent.v1.ApplyAgentDiffArgs"> & { * Use `create(ApplyAgentDiffArgsSchema)` to create a new message. */ export const ApplyAgentDiffArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 131); + messageDesc(file_agent, 135); /** * @generated from message agent.v1.ApplyAgentDiffResult @@ -3964,7 +4059,7 @@ export type ApplyAgentDiffResult = Message<"agent.v1.ApplyAgentDiffResult"> & { * Use `create(ApplyAgentDiffResultSchema)` to create a new message. */ export const ApplyAgentDiffResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 132); + messageDesc(file_agent, 136); /** * @generated from message agent.v1.ApplyAgentDiffSuccess @@ -3981,7 +4076,7 @@ export type ApplyAgentDiffSuccess = Message<"agent.v1.ApplyAgentDiffSuccess"> & * Use `create(ApplyAgentDiffSuccessSchema)` to create a new message. */ export const ApplyAgentDiffSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 133); + messageDesc(file_agent, 137); /** * @generated from message agent.v1.AppliedAgentChange @@ -4025,7 +4120,7 @@ export type AppliedAgentChange = Message<"agent.v1.AppliedAgentChange"> & { * Use `create(AppliedAgentChangeSchema)` to create a new message. */ export const AppliedAgentChangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 134); + messageDesc(file_agent, 138); /** * @generated from message agent.v1.ApplyAgentDiffError @@ -4047,7 +4142,7 @@ export type ApplyAgentDiffError = Message<"agent.v1.ApplyAgentDiffError"> & { * Use `create(ApplyAgentDiffErrorSchema)` to create a new message. */ export const ApplyAgentDiffErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 135); + messageDesc(file_agent, 139); /** * @generated from message agent.v1.AskQuestionToolCall @@ -4069,7 +4164,7 @@ export type AskQuestionToolCall = Message<"agent.v1.AskQuestionToolCall"> & { * Use `create(AskQuestionToolCallSchema)` to create a new message. */ export const AskQuestionToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 136); + messageDesc(file_agent, 140); /** * @generated from message agent.v1.AskQuestionArgs @@ -4109,7 +4204,7 @@ export type AskQuestionArgs = Message<"agent.v1.AskQuestionArgs"> & { * Use `create(AskQuestionArgsSchema)` to create a new message. */ export const AskQuestionArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 137); + messageDesc(file_agent, 141); /** * @generated from message agent.v1.AskQuestionArgs_Question @@ -4149,7 +4244,7 @@ export type AskQuestionArgs_Question = Message<"agent.v1.AskQuestionArgs_Questio * Use `create(AskQuestionArgs_QuestionSchema)` to create a new message. */ export const AskQuestionArgs_QuestionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 138); + messageDesc(file_agent, 142); /** * @generated from message agent.v1.AskQuestionArgs_Option @@ -4175,7 +4270,7 @@ export type AskQuestionArgs_Option = Message<"agent.v1.AskQuestionArgs_Option"> * Use `create(AskQuestionArgs_OptionSchema)` to create a new message. */ export const AskQuestionArgs_OptionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 139); + messageDesc(file_agent, 143); /** * Marker indicating that questions have been sent asynchronously Answers will arrive later as a separate ask_question tool call @@ -4190,7 +4285,7 @@ export type AskQuestionAsync = Message<"agent.v1.AskQuestionAsync"> & { * Use `create(AskQuestionAsyncSchema)` to create a new message. */ export const AskQuestionAsyncSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 140); + messageDesc(file_agent, 144); /** * @generated from message agent.v1.AskQuestionResult @@ -4231,7 +4326,7 @@ export type AskQuestionResult = Message<"agent.v1.AskQuestionResult"> & { * Use `create(AskQuestionResultSchema)` to create a new message. */ export const AskQuestionResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 141); + messageDesc(file_agent, 145); /** * @generated from message agent.v1.AskQuestionSuccess @@ -4248,7 +4343,7 @@ export type AskQuestionSuccess = Message<"agent.v1.AskQuestionSuccess"> & { * Use `create(AskQuestionSuccessSchema)` to create a new message. */ export const AskQuestionSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 142); + messageDesc(file_agent, 146); /** * @generated from message agent.v1.AskQuestionSuccess_Answer @@ -4272,7 +4367,7 @@ export type AskQuestionSuccess_Answer = Message<"agent.v1.AskQuestionSuccess_Ans * Use `create(AskQuestionSuccess_AnswerSchema)` to create a new message. */ export const AskQuestionSuccess_AnswerSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 143); + messageDesc(file_agent, 147); /** * @generated from message agent.v1.AskQuestionError @@ -4289,7 +4384,7 @@ export type AskQuestionError = Message<"agent.v1.AskQuestionError"> & { * Use `create(AskQuestionErrorSchema)` to create a new message. */ export const AskQuestionErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 144); + messageDesc(file_agent, 148); /** * @generated from message agent.v1.AskQuestionRejected @@ -4306,7 +4401,7 @@ export type AskQuestionRejected = Message<"agent.v1.AskQuestionRejected"> & { * Use `create(AskQuestionRejectedSchema)` to create a new message. */ export const AskQuestionRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 145); + messageDesc(file_agent, 149); /** * @generated from message agent.v1.BackgroundShellSpawnArgs @@ -4383,7 +4478,7 @@ export type BackgroundShellSpawnArgs = Message<"agent.v1.BackgroundShellSpawnArg * Use `create(BackgroundShellSpawnArgsSchema)` to create a new message. */ export const BackgroundShellSpawnArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 146); + messageDesc(file_agent, 150); /** * Result of spawning a background shell @@ -4426,7 +4521,7 @@ export type BackgroundShellSpawnResult = Message<"agent.v1.BackgroundShellSpawnR * Use `create(BackgroundShellSpawnResultSchema)` to create a new message. */ export const BackgroundShellSpawnResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 147); + messageDesc(file_agent, 151); /** * @generated from message agent.v1.BackgroundShellSpawnSuccess @@ -4460,7 +4555,7 @@ export type BackgroundShellSpawnSuccess = Message<"agent.v1.BackgroundShellSpawn * Use `create(BackgroundShellSpawnSuccessSchema)` to create a new message. */ export const BackgroundShellSpawnSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 148); + messageDesc(file_agent, 152); /** * @generated from message agent.v1.BackgroundShellSpawnError @@ -4487,7 +4582,7 @@ export type BackgroundShellSpawnError = Message<"agent.v1.BackgroundShellSpawnEr * Use `create(BackgroundShellSpawnErrorSchema)` to create a new message. */ export const BackgroundShellSpawnErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 149); + messageDesc(file_agent, 153); /** * @generated from message agent.v1.WriteShellStdinArgs @@ -4509,7 +4604,7 @@ export type WriteShellStdinArgs = Message<"agent.v1.WriteShellStdinArgs"> & { * Use `create(WriteShellStdinArgsSchema)` to create a new message. */ export const WriteShellStdinArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 150); + messageDesc(file_agent, 154); /** * @generated from message agent.v1.WriteShellStdinResult @@ -4538,7 +4633,7 @@ export type WriteShellStdinResult = Message<"agent.v1.WriteShellStdinResult"> & * Use `create(WriteShellStdinResultSchema)` to create a new message. */ export const WriteShellStdinResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 151); + messageDesc(file_agent, 155); /** * @generated from message agent.v1.WriteShellStdinSuccess @@ -4560,7 +4655,7 @@ export type WriteShellStdinSuccess = Message<"agent.v1.WriteShellStdinSuccess"> * Use `create(WriteShellStdinSuccessSchema)` to create a new message. */ export const WriteShellStdinSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 152); + messageDesc(file_agent, 156); /** * @generated from message agent.v1.WriteShellStdinError @@ -4577,7 +4672,7 @@ export type WriteShellStdinError = Message<"agent.v1.WriteShellStdinError"> & { * Use `create(WriteShellStdinErrorSchema)` to create a new message. */ export const WriteShellStdinErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 153); + messageDesc(file_agent, 157); /** * @generated from message agent.v1.Coordinate @@ -4599,7 +4694,7 @@ export type Coordinate = Message<"agent.v1.Coordinate"> & { * Use `create(CoordinateSchema)` to create a new message. */ export const CoordinateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 154); + messageDesc(file_agent, 158); /** * Arguments for the computer-use tool @@ -4623,7 +4718,7 @@ export type ComputerUseArgs = Message<"agent.v1.ComputerUseArgs"> & { * Use `create(ComputerUseArgsSchema)` to create a new message. */ export const ComputerUseArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 155); + messageDesc(file_agent, 159); /** * A single computer-use action. This is our internal canonical representation. Provider-specific formats are converted to this by adapters. @@ -4708,7 +4803,7 @@ export type ComputerUseAction = Message<"agent.v1.ComputerUseAction"> & { * Use `create(ComputerUseActionSchema)` to create a new message. */ export const ComputerUseActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 156); + messageDesc(file_agent, 160); /** * Move mouse to coordinate (required) @@ -4727,7 +4822,7 @@ export type MouseMoveAction = Message<"agent.v1.MouseMoveAction"> & { * Use `create(MouseMoveActionSchema)` to create a new message. */ export const MouseMoveActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 157); + messageDesc(file_agent, 161); /** * Unified click action - coordinate: optional, clicks at current cursor if omitted - button: which mouse button (default: LEFT) - count: click count (1=single, 2=double, 3=triple, default: 1) - modifier_keys: optional, held during click (e.g., "ctrl", "shift", "ctrl+shift") @@ -4761,7 +4856,7 @@ export type ClickAction = Message<"agent.v1.ClickAction"> & { * Use `create(ClickActionSchema)` to create a new message. */ export const ClickActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 158); + messageDesc(file_agent, 162); /** * Press mouse button down (for fine-grained drag control) @@ -4780,7 +4875,7 @@ export type MouseDownAction = Message<"agent.v1.MouseDownAction"> & { * Use `create(MouseDownActionSchema)` to create a new message. */ export const MouseDownActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 159); + messageDesc(file_agent, 163); /** * Release mouse button (for fine-grained drag control) @@ -4799,7 +4894,7 @@ export type MouseUpAction = Message<"agent.v1.MouseUpAction"> & { * Use `create(MouseUpActionSchema)` to create a new message. */ export const MouseUpActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 160); + messageDesc(file_agent, 164); /** * Drag action - path of coordinates (at least 2 points: [start, ..., end]) @@ -4823,7 +4918,7 @@ export type DragAction = Message<"agent.v1.DragAction"> & { * Use `create(DragActionSchema)` to create a new message. */ export const DragActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 161); + messageDesc(file_agent, 165); /** * Scroll action - coordinate: optional, scrolls at current cursor if omitted - direction: scroll direction (required) - amount: number of scroll "clicks" (default: 3) - modifier_keys: optional, held during scroll (e.g., "ctrl" for zoom) @@ -4857,7 +4952,7 @@ export type ScrollAction = Message<"agent.v1.ScrollAction"> & { * Use `create(ScrollActionSchema)` to create a new message. */ export const ScrollActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 162); + messageDesc(file_agent, 166); /** * Type text @@ -4876,7 +4971,7 @@ export type TypeAction = Message<"agent.v1.TypeAction"> & { * Use `create(TypeActionSchema)` to create a new message. */ export const TypeActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 163); + messageDesc(file_agent, 167); /** * Press key or key combination (xdotool-style: "ctrl+a", "Return", "Alt+Left") If hold_duration_ms is set, holds the key for that duration @@ -4900,7 +4995,7 @@ export type KeyAction = Message<"agent.v1.KeyAction"> & { * Use `create(KeyActionSchema)` to create a new message. */ export const KeyActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 164); + messageDesc(file_agent, 168); /** * Wait for a duration @@ -4919,7 +5014,7 @@ export type WaitAction = Message<"agent.v1.WaitAction"> & { * Use `create(WaitActionSchema)` to create a new message. */ export const WaitActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 165); + messageDesc(file_agent, 169); /** * Take a screenshot @@ -4934,7 +5029,7 @@ export type ScreenshotAction = Message<"agent.v1.ScreenshotAction"> & { * Use `create(ScreenshotActionSchema)` to create a new message. */ export const ScreenshotActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 166); + messageDesc(file_agent, 170); /** * Get current cursor position @@ -4949,7 +5044,7 @@ export type CursorPositionAction = Message<"agent.v1.CursorPositionAction"> & { * Use `create(CursorPositionActionSchema)` to create a new message. */ export const CursorPositionActionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 167); + messageDesc(file_agent, 171); /** * Result of computer-use execution @@ -4980,7 +5075,7 @@ export type ComputerUseResult = Message<"agent.v1.ComputerUseResult"> & { * Use `create(ComputerUseResultSchema)` to create a new message. */ export const ComputerUseResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 168); + messageDesc(file_agent, 172); /** * @generated from message agent.v1.ComputerUseSuccess @@ -5026,7 +5121,7 @@ export type ComputerUseSuccess = Message<"agent.v1.ComputerUseSuccess"> & { * Use `create(ComputerUseSuccessSchema)` to create a new message. */ export const ComputerUseSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 169); + messageDesc(file_agent, 173); /** * @generated from message agent.v1.ComputerUseError @@ -5072,7 +5167,7 @@ export type ComputerUseError = Message<"agent.v1.ComputerUseError"> & { * Use `create(ComputerUseErrorSchema)` to create a new message. */ export const ComputerUseErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 170); + messageDesc(file_agent, 174); /** * @generated from message agent.v1.ComputerUseToolCall @@ -5094,7 +5189,7 @@ export type ComputerUseToolCall = Message<"agent.v1.ComputerUseToolCall"> & { * Use `create(ComputerUseToolCallSchema)` to create a new message. */ export const ComputerUseToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 171); + messageDesc(file_agent, 175); /** * @generated from message agent.v1.CreatePlanToolCall @@ -5116,7 +5211,7 @@ export type CreatePlanToolCall = Message<"agent.v1.CreatePlanToolCall"> & { * Use `create(CreatePlanToolCallSchema)` to create a new message. */ export const CreatePlanToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 172); + messageDesc(file_agent, 176); /** * A phase groups related todos together for project-mode plans @@ -5140,7 +5235,7 @@ export type Phase = Message<"agent.v1.Phase"> & { * Use `create(PhaseSchema)` to create a new message. */ export const PhaseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 173); + messageDesc(file_agent, 177); /** * @generated from message agent.v1.CreatePlanArgs @@ -5186,7 +5281,7 @@ export type CreatePlanArgs = Message<"agent.v1.CreatePlanArgs"> & { * Use `create(CreatePlanArgsSchema)` to create a new message. */ export const CreatePlanArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 174); + messageDesc(file_agent, 178); /** * @generated from message agent.v1.CreatePlanResult @@ -5222,7 +5317,7 @@ export type CreatePlanResult = Message<"agent.v1.CreatePlanResult"> & { * Use `create(CreatePlanResultSchema)` to create a new message. */ export const CreatePlanResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 175); + messageDesc(file_agent, 179); /** * @generated from message agent.v1.CreatePlanSuccess @@ -5235,7 +5330,7 @@ export type CreatePlanSuccess = Message<"agent.v1.CreatePlanSuccess"> & { * Use `create(CreatePlanSuccessSchema)` to create a new message. */ export const CreatePlanSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 176); + messageDesc(file_agent, 180); /** * @generated from message agent.v1.CreatePlanError @@ -5252,7 +5347,7 @@ export type CreatePlanError = Message<"agent.v1.CreatePlanError"> & { * Use `create(CreatePlanErrorSchema)` to create a new message. */ export const CreatePlanErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 177); + messageDesc(file_agent, 181); /** * Query sent from server to client to create a plan file @@ -5276,7 +5371,7 @@ export type CreatePlanRequestQuery = Message<"agent.v1.CreatePlanRequestQuery"> * Use `create(CreatePlanRequestQuerySchema)` to create a new message. */ export const CreatePlanRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 178); + messageDesc(file_agent, 182); /** * Response from client with the created plan URI @@ -5295,7 +5390,7 @@ export type CreatePlanRequestResponse = Message<"agent.v1.CreatePlanRequestRespo * Use `create(CreatePlanRequestResponseSchema)` to create a new message. */ export const CreatePlanRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 179); + messageDesc(file_agent, 183); /** * @generated from message agent.v1.CursorRuleTypeGlobal @@ -5308,7 +5403,7 @@ export type CursorRuleTypeGlobal = Message<"agent.v1.CursorRuleTypeGlobal"> & { * Use `create(CursorRuleTypeGlobalSchema)` to create a new message. */ export const CursorRuleTypeGlobalSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 180); + messageDesc(file_agent, 184); /** * @generated from message agent.v1.CursorRuleTypeFileGlobs @@ -5325,7 +5420,7 @@ export type CursorRuleTypeFileGlobs = Message<"agent.v1.CursorRuleTypeFileGlobs" * Use `create(CursorRuleTypeFileGlobsSchema)` to create a new message. */ export const CursorRuleTypeFileGlobsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 181); + messageDesc(file_agent, 185); /** * @generated from message agent.v1.CursorRuleTypeAgentFetched @@ -5342,7 +5437,7 @@ export type CursorRuleTypeAgentFetched = Message<"agent.v1.CursorRuleTypeAgentFe * Use `create(CursorRuleTypeAgentFetchedSchema)` to create a new message. */ export const CursorRuleTypeAgentFetchedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 182); + messageDesc(file_agent, 186); /** * @generated from message agent.v1.CursorRuleTypeManuallyAttached @@ -5355,7 +5450,7 @@ export type CursorRuleTypeManuallyAttached = Message<"agent.v1.CursorRuleTypeMan * Use `create(CursorRuleTypeManuallyAttachedSchema)` to create a new message. */ export const CursorRuleTypeManuallyAttachedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 183); + messageDesc(file_agent, 187); /** * @generated from message agent.v1.CursorRuleType @@ -5396,7 +5491,7 @@ export type CursorRuleType = Message<"agent.v1.CursorRuleType"> & { * Use `create(CursorRuleTypeSchema)` to create a new message. */ export const CursorRuleTypeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 184); + messageDesc(file_agent, 188); /** * @generated from message agent.v1.CursorRule @@ -5448,7 +5543,7 @@ export type CursorRule = Message<"agent.v1.CursorRule"> & { * Use `create(CursorRuleSchema)` to create a new message. */ export const CursorRuleSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 185); + messageDesc(file_agent, 189); /** * @generated from message agent.v1.DeleteArgs @@ -5470,7 +5565,7 @@ export type DeleteArgs = Message<"agent.v1.DeleteArgs"> & { * Use `create(DeleteArgsSchema)` to create a new message. */ export const DeleteArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 186); + messageDesc(file_agent, 190); /** * @generated from message agent.v1.DeleteResult @@ -5529,7 +5624,7 @@ export type DeleteResult = Message<"agent.v1.DeleteResult"> & { * Use `create(DeleteResultSchema)` to create a new message. */ export const DeleteResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 187); + messageDesc(file_agent, 191); /** * @generated from message agent.v1.DeleteSuccess @@ -5561,7 +5656,7 @@ export type DeleteSuccess = Message<"agent.v1.DeleteSuccess"> & { * Use `create(DeleteSuccessSchema)` to create a new message. */ export const DeleteSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 188); + messageDesc(file_agent, 192); /** * @generated from message agent.v1.DeleteFileNotFound @@ -5578,7 +5673,7 @@ export type DeleteFileNotFound = Message<"agent.v1.DeleteFileNotFound"> & { * Use `create(DeleteFileNotFoundSchema)` to create a new message. */ export const DeleteFileNotFoundSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 189); + messageDesc(file_agent, 193); /** * @generated from message agent.v1.DeleteNotFile @@ -5602,7 +5697,7 @@ export type DeleteNotFile = Message<"agent.v1.DeleteNotFile"> & { * Use `create(DeleteNotFileSchema)` to create a new message. */ export const DeleteNotFileSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 190); + messageDesc(file_agent, 194); /** * @generated from message agent.v1.DeletePermissionDenied @@ -5629,7 +5724,7 @@ export type DeletePermissionDenied = Message<"agent.v1.DeletePermissionDenied"> * Use `create(DeletePermissionDeniedSchema)` to create a new message. */ export const DeletePermissionDeniedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 191); + messageDesc(file_agent, 195); /** * @generated from message agent.v1.DeleteFileBusy @@ -5646,7 +5741,7 @@ export type DeleteFileBusy = Message<"agent.v1.DeleteFileBusy"> & { * Use `create(DeleteFileBusySchema)` to create a new message. */ export const DeleteFileBusySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 192); + messageDesc(file_agent, 196); /** * @generated from message agent.v1.DeleteRejected @@ -5668,7 +5763,7 @@ export type DeleteRejected = Message<"agent.v1.DeleteRejected"> & { * Use `create(DeleteRejectedSchema)` to create a new message. */ export const DeleteRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 193); + messageDesc(file_agent, 197); /** * @generated from message agent.v1.DeleteError @@ -5690,7 +5785,7 @@ export type DeleteError = Message<"agent.v1.DeleteError"> & { * Use `create(DeleteErrorSchema)` to create a new message. */ export const DeleteErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 194); + messageDesc(file_agent, 198); /** * @generated from message agent.v1.DeleteToolCall @@ -5712,7 +5807,7 @@ export type DeleteToolCall = Message<"agent.v1.DeleteToolCall"> & { * Use `create(DeleteToolCallSchema)` to create a new message. */ export const DeleteToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 195); + messageDesc(file_agent, 199); /** * @generated from message agent.v1.DiagnosticsArgs @@ -5734,7 +5829,7 @@ export type DiagnosticsArgs = Message<"agent.v1.DiagnosticsArgs"> & { * Use `create(DiagnosticsArgsSchema)` to create a new message. */ export const DiagnosticsArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 196); + messageDesc(file_agent, 200); /** * @generated from message agent.v1.DiagnosticsResult @@ -5781,7 +5876,7 @@ export type DiagnosticsResult = Message<"agent.v1.DiagnosticsResult"> & { * Use `create(DiagnosticsResultSchema)` to create a new message. */ export const DiagnosticsResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 197); + messageDesc(file_agent, 201); /** * @generated from message agent.v1.DiagnosticsSuccess @@ -5808,7 +5903,7 @@ export type DiagnosticsSuccess = Message<"agent.v1.DiagnosticsSuccess"> & { * Use `create(DiagnosticsSuccessSchema)` to create a new message. */ export const DiagnosticsSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 198); + messageDesc(file_agent, 202); /** * @generated from message agent.v1.Diagnostic @@ -5850,7 +5945,7 @@ export type Diagnostic = Message<"agent.v1.Diagnostic"> & { * Use `create(DiagnosticSchema)` to create a new message. */ export const DiagnosticSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 199); + messageDesc(file_agent, 203); /** * @generated from message agent.v1.DiagnosticsError @@ -5872,7 +5967,7 @@ export type DiagnosticsError = Message<"agent.v1.DiagnosticsError"> & { * Use `create(DiagnosticsErrorSchema)` to create a new message. */ export const DiagnosticsErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 200); + messageDesc(file_agent, 204); /** * @generated from message agent.v1.DiagnosticsRejected @@ -5894,7 +5989,7 @@ export type DiagnosticsRejected = Message<"agent.v1.DiagnosticsRejected"> & { * Use `create(DiagnosticsRejectedSchema)` to create a new message. */ export const DiagnosticsRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 201); + messageDesc(file_agent, 205); /** * @generated from message agent.v1.DiagnosticsFileNotFound @@ -5911,7 +6006,7 @@ export type DiagnosticsFileNotFound = Message<"agent.v1.DiagnosticsFileNotFound" * Use `create(DiagnosticsFileNotFoundSchema)` to create a new message. */ export const DiagnosticsFileNotFoundSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 202); + messageDesc(file_agent, 206); /** * @generated from message agent.v1.DiagnosticsPermissionDenied @@ -5928,7 +6023,7 @@ export type DiagnosticsPermissionDenied = Message<"agent.v1.DiagnosticsPermissio * Use `create(DiagnosticsPermissionDeniedSchema)` to create a new message. */ export const DiagnosticsPermissionDeniedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 203); + messageDesc(file_agent, 207); /** * @generated from message agent.v1.EditArgs @@ -5950,7 +6045,7 @@ export type EditArgs = Message<"agent.v1.EditArgs"> & { * Use `create(EditArgsSchema)` to create a new message. */ export const EditArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 204); + messageDesc(file_agent, 208); /** * @generated from message agent.v1.EditResult @@ -6003,7 +6098,7 @@ export type EditResult = Message<"agent.v1.EditResult"> & { * Use `create(EditResultSchema)` to create a new message. */ export const EditResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 205); + messageDesc(file_agent, 209); /** * @generated from message agent.v1.EditSuccess @@ -6056,7 +6151,7 @@ export type EditSuccess = Message<"agent.v1.EditSuccess"> & { * Use `create(EditSuccessSchema)` to create a new message. */ export const EditSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 206); + messageDesc(file_agent, 210); /** * @generated from message agent.v1.EditFileNotFound @@ -6073,7 +6168,7 @@ export type EditFileNotFound = Message<"agent.v1.EditFileNotFound"> & { * Use `create(EditFileNotFoundSchema)` to create a new message. */ export const EditFileNotFoundSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 207); + messageDesc(file_agent, 211); /** * @generated from message agent.v1.EditReadPermissionDenied @@ -6090,7 +6185,7 @@ export type EditReadPermissionDenied = Message<"agent.v1.EditReadPermissionDenie * Use `create(EditReadPermissionDeniedSchema)` to create a new message. */ export const EditReadPermissionDeniedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 208); + messageDesc(file_agent, 212); /** * @generated from message agent.v1.EditWritePermissionDenied @@ -6117,7 +6212,7 @@ export type EditWritePermissionDenied = Message<"agent.v1.EditWritePermissionDen * Use `create(EditWritePermissionDeniedSchema)` to create a new message. */ export const EditWritePermissionDeniedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 209); + messageDesc(file_agent, 213); /** * @generated from message agent.v1.EditRejected @@ -6139,7 +6234,7 @@ export type EditRejected = Message<"agent.v1.EditRejected"> & { * Use `create(EditRejectedSchema)` to create a new message. */ export const EditRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 210); + messageDesc(file_agent, 214); /** * @generated from message agent.v1.EditError @@ -6166,7 +6261,7 @@ export type EditError = Message<"agent.v1.EditError"> & { * Use `create(EditErrorSchema)` to create a new message. */ export const EditErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 211); + messageDesc(file_agent, 215); /** * @generated from message agent.v1.EditToolCall @@ -6188,7 +6283,7 @@ export type EditToolCall = Message<"agent.v1.EditToolCall"> & { * Use `create(EditToolCallSchema)` to create a new message. */ export const EditToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 212); + messageDesc(file_agent, 216); /** * @generated from message agent.v1.EditToolCallDelta @@ -6205,7 +6300,7 @@ export type EditToolCallDelta = Message<"agent.v1.EditToolCallDelta"> & { * Use `create(EditToolCallDeltaSchema)` to create a new message. */ export const EditToolCallDeltaSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 213); + messageDesc(file_agent, 217); /** * @generated from message agent.v1.ExaFetchArgs @@ -6227,7 +6322,7 @@ export type ExaFetchArgs = Message<"agent.v1.ExaFetchArgs"> & { * Use `create(ExaFetchArgsSchema)` to create a new message. */ export const ExaFetchArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 214); + messageDesc(file_agent, 218); /** * @generated from message agent.v1.ExaFetchResult @@ -6262,7 +6357,7 @@ export type ExaFetchResult = Message<"agent.v1.ExaFetchResult"> & { * Use `create(ExaFetchResultSchema)` to create a new message. */ export const ExaFetchResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 215); + messageDesc(file_agent, 219); /** * @generated from message agent.v1.ExaFetchSuccess @@ -6279,7 +6374,7 @@ export type ExaFetchSuccess = Message<"agent.v1.ExaFetchSuccess"> & { * Use `create(ExaFetchSuccessSchema)` to create a new message. */ export const ExaFetchSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 216); + messageDesc(file_agent, 220); /** * @generated from message agent.v1.ExaFetchError @@ -6296,7 +6391,7 @@ export type ExaFetchError = Message<"agent.v1.ExaFetchError"> & { * Use `create(ExaFetchErrorSchema)` to create a new message. */ export const ExaFetchErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 217); + messageDesc(file_agent, 221); /** * @generated from message agent.v1.ExaFetchRejected @@ -6313,7 +6408,7 @@ export type ExaFetchRejected = Message<"agent.v1.ExaFetchRejected"> & { * Use `create(ExaFetchRejectedSchema)` to create a new message. */ export const ExaFetchRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 218); + messageDesc(file_agent, 222); /** * @generated from message agent.v1.ExaFetchContent @@ -6345,7 +6440,7 @@ export type ExaFetchContent = Message<"agent.v1.ExaFetchContent"> & { * Use `create(ExaFetchContentSchema)` to create a new message. */ export const ExaFetchContentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 219); + messageDesc(file_agent, 223); /** * @generated from message agent.v1.ExaFetchToolCall @@ -6367,7 +6462,7 @@ export type ExaFetchToolCall = Message<"agent.v1.ExaFetchToolCall"> & { * Use `create(ExaFetchToolCallSchema)` to create a new message. */ export const ExaFetchToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 220); + messageDesc(file_agent, 224); /** * @generated from message agent.v1.ExaFetchRequestQuery @@ -6384,7 +6479,7 @@ export type ExaFetchRequestQuery = Message<"agent.v1.ExaFetchRequestQuery"> & { * Use `create(ExaFetchRequestQuerySchema)` to create a new message. */ export const ExaFetchRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 221); + messageDesc(file_agent, 225); /** * @generated from message agent.v1.ExaFetchRequestResponse @@ -6413,7 +6508,7 @@ export type ExaFetchRequestResponse = Message<"agent.v1.ExaFetchRequestResponse" * Use `create(ExaFetchRequestResponseSchema)` to create a new message. */ export const ExaFetchRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 222); + messageDesc(file_agent, 226); /** * @generated from message agent.v1.ExaFetchRequestResponse_Approved @@ -6426,7 +6521,7 @@ export type ExaFetchRequestResponse_Approved = Message<"agent.v1.ExaFetchRequest * Use `create(ExaFetchRequestResponse_ApprovedSchema)` to create a new message. */ export const ExaFetchRequestResponse_ApprovedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 223); + messageDesc(file_agent, 227); /** * @generated from message agent.v1.ExaFetchRequestResponse_Rejected @@ -6443,7 +6538,7 @@ export type ExaFetchRequestResponse_Rejected = Message<"agent.v1.ExaFetchRequest * Use `create(ExaFetchRequestResponse_RejectedSchema)` to create a new message. */ export const ExaFetchRequestResponse_RejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 224); + messageDesc(file_agent, 228); /** * @generated from message agent.v1.ExaSearchArgs @@ -6477,7 +6572,7 @@ export type ExaSearchArgs = Message<"agent.v1.ExaSearchArgs"> & { * Use `create(ExaSearchArgsSchema)` to create a new message. */ export const ExaSearchArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 225); + messageDesc(file_agent, 229); /** * @generated from message agent.v1.ExaSearchResult @@ -6512,7 +6607,7 @@ export type ExaSearchResult = Message<"agent.v1.ExaSearchResult"> & { * Use `create(ExaSearchResultSchema)` to create a new message. */ export const ExaSearchResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 226); + messageDesc(file_agent, 230); /** * @generated from message agent.v1.ExaSearchSuccess @@ -6529,7 +6624,7 @@ export type ExaSearchSuccess = Message<"agent.v1.ExaSearchSuccess"> & { * Use `create(ExaSearchSuccessSchema)` to create a new message. */ export const ExaSearchSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 227); + messageDesc(file_agent, 231); /** * @generated from message agent.v1.ExaSearchError @@ -6546,7 +6641,7 @@ export type ExaSearchError = Message<"agent.v1.ExaSearchError"> & { * Use `create(ExaSearchErrorSchema)` to create a new message. */ export const ExaSearchErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 228); + messageDesc(file_agent, 232); /** * @generated from message agent.v1.ExaSearchRejected @@ -6563,7 +6658,7 @@ export type ExaSearchRejected = Message<"agent.v1.ExaSearchRejected"> & { * Use `create(ExaSearchRejectedSchema)` to create a new message. */ export const ExaSearchRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 229); + messageDesc(file_agent, 233); /** * @generated from message agent.v1.ExaSearchReference @@ -6595,7 +6690,7 @@ export type ExaSearchReference = Message<"agent.v1.ExaSearchReference"> & { * Use `create(ExaSearchReferenceSchema)` to create a new message. */ export const ExaSearchReferenceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 230); + messageDesc(file_agent, 234); /** * @generated from message agent.v1.ExaSearchToolCall @@ -6617,7 +6712,7 @@ export type ExaSearchToolCall = Message<"agent.v1.ExaSearchToolCall"> & { * Use `create(ExaSearchToolCallSchema)` to create a new message. */ export const ExaSearchToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 231); + messageDesc(file_agent, 235); /** * @generated from message agent.v1.ExaSearchRequestQuery @@ -6634,7 +6729,7 @@ export type ExaSearchRequestQuery = Message<"agent.v1.ExaSearchRequestQuery"> & * Use `create(ExaSearchRequestQuerySchema)` to create a new message. */ export const ExaSearchRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 232); + messageDesc(file_agent, 236); /** * @generated from message agent.v1.ExaSearchRequestResponse @@ -6663,7 +6758,7 @@ export type ExaSearchRequestResponse = Message<"agent.v1.ExaSearchRequestRespons * Use `create(ExaSearchRequestResponseSchema)` to create a new message. */ export const ExaSearchRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 233); + messageDesc(file_agent, 237); /** * @generated from message agent.v1.ExaSearchRequestResponse_Approved @@ -6676,7 +6771,7 @@ export type ExaSearchRequestResponse_Approved = Message<"agent.v1.ExaSearchReque * Use `create(ExaSearchRequestResponse_ApprovedSchema)` to create a new message. */ export const ExaSearchRequestResponse_ApprovedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 234); + messageDesc(file_agent, 238); /** * @generated from message agent.v1.ExaSearchRequestResponse_Rejected @@ -6693,7 +6788,7 @@ export type ExaSearchRequestResponse_Rejected = Message<"agent.v1.ExaSearchReque * Use `create(ExaSearchRequestResponse_RejectedSchema)` to create a new message. */ export const ExaSearchRequestResponse_RejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 235); + messageDesc(file_agent, 239); /** * @generated from message agent.v1.ExecClientStreamClose @@ -6710,7 +6805,7 @@ export type ExecClientStreamClose = Message<"agent.v1.ExecClientStreamClose"> & * Use `create(ExecClientStreamCloseSchema)` to create a new message. */ export const ExecClientStreamCloseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 236); + messageDesc(file_agent, 240); /** * @generated from message agent.v1.ExecClientThrow @@ -6742,7 +6837,7 @@ export type ExecClientThrow = Message<"agent.v1.ExecClientThrow"> & { * Use `create(ExecClientThrowSchema)` to create a new message. */ export const ExecClientThrowSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 237); + messageDesc(file_agent, 241); /** * @generated from message agent.v1.ExecClientHeartbeat @@ -6759,7 +6854,7 @@ export type ExecClientHeartbeat = Message<"agent.v1.ExecClientHeartbeat"> & { * Use `create(ExecClientHeartbeatSchema)` to create a new message. */ export const ExecClientHeartbeatSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 238); + messageDesc(file_agent, 242); /** * @generated from message agent.v1.ExecClientControlMessage @@ -6794,7 +6889,7 @@ export type ExecClientControlMessage = Message<"agent.v1.ExecClientControlMessag * Use `create(ExecClientControlMessageSchema)` to create a new message. */ export const ExecClientControlMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 239); + messageDesc(file_agent, 243); /** * Simplified span context for tracing exec calls @@ -6836,7 +6931,7 @@ export type SpanContext = Message<"agent.v1.SpanContext"> & { * Use `create(SpanContextSchema)` to create a new message. */ export const SpanContextSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 240); + messageDesc(file_agent, 244); /** * Empty abort message for aborting running execs @@ -6851,7 +6946,7 @@ export type AbortArgs = Message<"agent.v1.AbortArgs"> & { * Use `create(AbortArgsSchema)` to create a new message. */ export const AbortArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 241); + messageDesc(file_agent, 245); /** * @generated from message agent.v1.AbortResult @@ -6864,7 +6959,7 @@ export type AbortResult = Message<"agent.v1.AbortResult"> & { * Use `create(AbortResultSchema)` to create a new message. */ export const AbortResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 242); + messageDesc(file_agent, 246); /** * @generated from message agent.v1.ExecServerMessage @@ -7145,7 +7240,7 @@ export type ExecServerMessage = Message<"agent.v1.ExecServerMessage"> & { * Use `create(ExecServerMessageSchema)` to create a new message. */ export const ExecServerMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 243); + messageDesc(file_agent, 247); /** * @generated from message agent.v1.ExecClientMessage @@ -7424,7 +7519,7 @@ export type ExecClientMessage = Message<"agent.v1.ExecClientMessage"> & { * Use `create(ExecClientMessageSchema)` to create a new message. */ export const ExecClientMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 244); + messageDesc(file_agent, 248); /** * @generated from message agent.v1.FetchArgs @@ -7446,7 +7541,7 @@ export type FetchArgs = Message<"agent.v1.FetchArgs"> & { * Use `create(FetchArgsSchema)` to create a new message. */ export const FetchArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 245); + messageDesc(file_agent, 249); /** * @generated from message agent.v1.FetchResult @@ -7475,7 +7570,7 @@ export type FetchResult = Message<"agent.v1.FetchResult"> & { * Use `create(FetchResultSchema)` to create a new message. */ export const FetchResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 246); + messageDesc(file_agent, 250); /** * @generated from message agent.v1.FetchSuccess @@ -7507,7 +7602,7 @@ export type FetchSuccess = Message<"agent.v1.FetchSuccess"> & { * Use `create(FetchSuccessSchema)` to create a new message. */ export const FetchSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 247); + messageDesc(file_agent, 251); /** * @generated from message agent.v1.FetchError @@ -7529,7 +7624,7 @@ export type FetchError = Message<"agent.v1.FetchError"> & { * Use `create(FetchErrorSchema)` to create a new message. */ export const FetchErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 248); + messageDesc(file_agent, 252); /** * @generated from message agent.v1.GenerateImageArgs @@ -7558,7 +7653,7 @@ export type GenerateImageArgs = Message<"agent.v1.GenerateImageArgs"> & { * Use `create(GenerateImageArgsSchema)` to create a new message. */ export const GenerateImageArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 249); + messageDesc(file_agent, 253); /** * @generated from message agent.v1.GenerateImageResult @@ -7587,7 +7682,7 @@ export type GenerateImageResult = Message<"agent.v1.GenerateImageResult"> & { * Use `create(GenerateImageResultSchema)` to create a new message. */ export const GenerateImageResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 250); + messageDesc(file_agent, 254); /** * @generated from message agent.v1.GenerateImageSuccess @@ -7613,7 +7708,7 @@ export type GenerateImageSuccess = Message<"agent.v1.GenerateImageSuccess"> & { * Use `create(GenerateImageSuccessSchema)` to create a new message. */ export const GenerateImageSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 251); + messageDesc(file_agent, 255); /** * @generated from message agent.v1.GenerateImageError @@ -7630,7 +7725,7 @@ export type GenerateImageError = Message<"agent.v1.GenerateImageError"> & { * Use `create(GenerateImageErrorSchema)` to create a new message. */ export const GenerateImageErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 252); + messageDesc(file_agent, 256); /** * @generated from message agent.v1.GenerateImageToolCall @@ -7652,7 +7747,7 @@ export type GenerateImageToolCall = Message<"agent.v1.GenerateImageToolCall"> & * Use `create(GenerateImageToolCallSchema)` to create a new message. */ export const GenerateImageToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 253); + messageDesc(file_agent, 257); /** * @generated from message agent.v1.GrepArgs @@ -7756,7 +7851,7 @@ export type GrepArgs = Message<"agent.v1.GrepArgs"> & { * Use `create(GrepArgsSchema)` to create a new message. */ export const GrepArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 254); + messageDesc(file_agent, 258); /** * @generated from message agent.v1.GrepResult @@ -7785,7 +7880,7 @@ export type GrepResult = Message<"agent.v1.GrepResult"> & { * Use `create(GrepResultSchema)` to create a new message. */ export const GrepResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 255); + messageDesc(file_agent, 259); /** * @generated from message agent.v1.GrepError @@ -7802,7 +7897,7 @@ export type GrepError = Message<"agent.v1.GrepError"> & { * Use `create(GrepErrorSchema)` to create a new message. */ export const GrepErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 256); + messageDesc(file_agent, 260); /** * @generated from message agent.v1.GrepSuccess @@ -7841,7 +7936,7 @@ export type GrepSuccess = Message<"agent.v1.GrepSuccess"> & { * Use `create(GrepSuccessSchema)` to create a new message. */ export const GrepSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 257); + messageDesc(file_agent, 261); /** * @generated from message agent.v1.GrepUnionResult @@ -7876,7 +7971,7 @@ export type GrepUnionResult = Message<"agent.v1.GrepUnionResult"> & { * Use `create(GrepUnionResultSchema)` to create a new message. */ export const GrepUnionResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 258); + messageDesc(file_agent, 262); /** * @generated from message agent.v1.GrepCountResult @@ -7933,7 +8028,7 @@ export type GrepCountResult = Message<"agent.v1.GrepCountResult"> & { * Use `create(GrepCountResultSchema)` to create a new message. */ export const GrepCountResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 259); + messageDesc(file_agent, 263); /** * @generated from message agent.v1.GrepFileCount @@ -7955,7 +8050,7 @@ export type GrepFileCount = Message<"agent.v1.GrepFileCount"> & { * Use `create(GrepFileCountSchema)` to create a new message. */ export const GrepFileCountSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 260); + messageDesc(file_agent, 264); /** * @generated from message agent.v1.GrepFilesResult @@ -8005,7 +8100,7 @@ export type GrepFilesResult = Message<"agent.v1.GrepFilesResult"> & { * Use `create(GrepFilesResultSchema)` to create a new message. */ export const GrepFilesResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 261); + messageDesc(file_agent, 265); /** * @generated from message agent.v1.GrepContentResult @@ -8062,7 +8157,7 @@ export type GrepContentResult = Message<"agent.v1.GrepContentResult"> & { * Use `create(GrepContentResultSchema)` to create a new message. */ export const GrepContentResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 262); + messageDesc(file_agent, 266); /** * @generated from message agent.v1.GrepFileMatch @@ -8084,7 +8179,7 @@ export type GrepFileMatch = Message<"agent.v1.GrepFileMatch"> & { * Use `create(GrepFileMatchSchema)` to create a new message. */ export const GrepFileMatchSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 263); + messageDesc(file_agent, 267); /** * @generated from message agent.v1.GrepContentMatch @@ -8118,7 +8213,7 @@ export type GrepContentMatch = Message<"agent.v1.GrepContentMatch"> & { * Use `create(GrepContentMatchSchema)` to create a new message. */ export const GrepContentMatchSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 264); + messageDesc(file_agent, 268); /** * @generated from message agent.v1.GrepStream @@ -8135,7 +8230,7 @@ export type GrepStream = Message<"agent.v1.GrepStream"> & { * Use `create(GrepStreamSchema)` to create a new message. */ export const GrepStreamSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 265); + messageDesc(file_agent, 269); /** * @generated from message agent.v1.GrepToolCall @@ -8157,7 +8252,7 @@ export type GrepToolCall = Message<"agent.v1.GrepToolCall"> & { * Use `create(GrepToolCallSchema)` to create a new message. */ export const GrepToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 266); + messageDesc(file_agent, 270); /** * @generated from message agent.v1.GetBlobArgs @@ -8174,7 +8269,7 @@ export type GetBlobArgs = Message<"agent.v1.GetBlobArgs"> & { * Use `create(GetBlobArgsSchema)` to create a new message. */ export const GetBlobArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 267); + messageDesc(file_agent, 271); /** * @generated from message agent.v1.GetBlobResult @@ -8191,7 +8286,7 @@ export type GetBlobResult = Message<"agent.v1.GetBlobResult"> & { * Use `create(GetBlobResultSchema)` to create a new message. */ export const GetBlobResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 268); + messageDesc(file_agent, 272); /** * @generated from message agent.v1.SetBlobArgs @@ -8213,7 +8308,7 @@ export type SetBlobArgs = Message<"agent.v1.SetBlobArgs"> & { * Use `create(SetBlobArgsSchema)` to create a new message. */ export const SetBlobArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 269); + messageDesc(file_agent, 273); /** * @generated from message agent.v1.SetBlobResult @@ -8230,7 +8325,7 @@ export type SetBlobResult = Message<"agent.v1.SetBlobResult"> & { * Use `create(SetBlobResultSchema)` to create a new message. */ export const SetBlobResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 270); + messageDesc(file_agent, 274); /** * @generated from message agent.v1.KvServerMessage @@ -8271,7 +8366,7 @@ export type KvServerMessage = Message<"agent.v1.KvServerMessage"> & { * Use `create(KvServerMessageSchema)` to create a new message. */ export const KvServerMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 271); + messageDesc(file_agent, 275); /** * @generated from message agent.v1.KvClientMessage @@ -8305,7 +8400,7 @@ export type KvClientMessage = Message<"agent.v1.KvClientMessage"> & { * Use `create(KvClientMessageSchema)` to create a new message. */ export const KvClientMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 272); + messageDesc(file_agent, 276); /** * @generated from message agent.v1.LsArgs @@ -8344,7 +8439,7 @@ export type LsArgs = Message<"agent.v1.LsArgs"> & { * Use `create(LsArgsSchema)` to create a new message. */ export const LsArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 273); + messageDesc(file_agent, 277); /** * @generated from message agent.v1.LsResult @@ -8385,7 +8480,7 @@ export type LsResult = Message<"agent.v1.LsResult"> & { * Use `create(LsResultSchema)` to create a new message. */ export const LsResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 274); + messageDesc(file_agent, 278); /** * @generated from message agent.v1.LsSuccess @@ -8402,7 +8497,7 @@ export type LsSuccess = Message<"agent.v1.LsSuccess"> & { * Use `create(LsSuccessSchema)` to create a new message. */ export const LsSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 275); + messageDesc(file_agent, 279); /** * @generated from message agent.v1.LsDirectoryTreeNode @@ -8448,7 +8543,7 @@ export type LsDirectoryTreeNode = Message<"agent.v1.LsDirectoryTreeNode"> & { * Use `create(LsDirectoryTreeNodeSchema)` to create a new message. */ export const LsDirectoryTreeNodeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 276); + messageDesc(file_agent, 280); /** * @generated from message agent.v1.LsDirectoryTreeNode_File @@ -8470,7 +8565,7 @@ export type LsDirectoryTreeNode_File = Message<"agent.v1.LsDirectoryTreeNode_Fil * Use `create(LsDirectoryTreeNode_FileSchema)` to create a new message. */ export const LsDirectoryTreeNode_FileSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 277); + messageDesc(file_agent, 281); /** * @generated from message agent.v1.LsError @@ -8492,7 +8587,7 @@ export type LsError = Message<"agent.v1.LsError"> & { * Use `create(LsErrorSchema)` to create a new message. */ export const LsErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 278); + messageDesc(file_agent, 282); /** * @generated from message agent.v1.LsRejected @@ -8514,7 +8609,7 @@ export type LsRejected = Message<"agent.v1.LsRejected"> & { * Use `create(LsRejectedSchema)` to create a new message. */ export const LsRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 279); + messageDesc(file_agent, 283); /** * Returned when ls operation timed out. Contains partial results gathered before timeout. @@ -8533,7 +8628,7 @@ export type LsTimeout = Message<"agent.v1.LsTimeout"> & { * Use `create(LsTimeoutSchema)` to create a new message. */ export const LsTimeoutSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 280); + messageDesc(file_agent, 284); /** * @generated from message agent.v1.TerminalMetadata @@ -8565,7 +8660,7 @@ export type TerminalMetadata = Message<"agent.v1.TerminalMetadata"> & { * Use `create(TerminalMetadataSchema)` to create a new message. */ export const TerminalMetadataSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 281); + messageDesc(file_agent, 285); /** * @generated from message agent.v1.TerminalMetadata_Command @@ -8597,7 +8692,7 @@ export type TerminalMetadata_Command = Message<"agent.v1.TerminalMetadata_Comman * Use `create(TerminalMetadata_CommandSchema)` to create a new message. */ export const TerminalMetadata_CommandSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 282); + messageDesc(file_agent, 286); /** * @generated from message agent.v1.LsToolCall @@ -8619,7 +8714,7 @@ export type LsToolCall = Message<"agent.v1.LsToolCall"> & { * Use `create(LsToolCallSchema)` to create a new message. */ export const LsToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 283); + messageDesc(file_agent, 287); /** * @generated from message agent.v1.McpArgs @@ -8676,7 +8771,7 @@ export type McpArgs = Message<"agent.v1.McpArgs"> & { * Use `create(McpArgsSchema)` to create a new message. */ export const McpArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 284); + messageDesc(file_agent, 288); /** * @generated from message agent.v1.McpResult @@ -8735,7 +8830,7 @@ export type McpResult = Message<"agent.v1.McpResult"> & { * Use `create(McpResultSchema)` to create a new message. */ export const McpResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 285); + messageDesc(file_agent, 289); /** * @generated from message agent.v1.McpToolNotFound @@ -8757,7 +8852,7 @@ export type McpToolNotFound = Message<"agent.v1.McpToolNotFound"> & { * Use `create(McpToolNotFoundSchema)` to create a new message. */ export const McpToolNotFoundSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 286); + messageDesc(file_agent, 290); /** * Text content item @@ -8783,7 +8878,7 @@ export type McpTextContent = Message<"agent.v1.McpTextContent"> & { * Use `create(McpTextContentSchema)` to create a new message. */ export const McpTextContentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 287); + messageDesc(file_agent, 291); /** * Image content item @@ -8811,7 +8906,7 @@ export type McpImageContent = Message<"agent.v1.McpImageContent"> & { * Use `create(McpImageContentSchema)` to create a new message. */ export const McpImageContentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 288); + messageDesc(file_agent, 292); /** * A single tool result content item: either text or image @@ -8842,7 +8937,7 @@ export type McpToolResultContentItem = Message<"agent.v1.McpToolResultContentIte * Use `create(McpToolResultContentItemSchema)` to create a new message. */ export const McpToolResultContentItemSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 289); + messageDesc(file_agent, 293); /** * Equivalent to the requested McpToolResult TypeScript type @@ -8866,7 +8961,7 @@ export type McpSuccess = Message<"agent.v1.McpSuccess"> & { * Use `create(McpSuccessSchema)` to create a new message. */ export const McpSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 290); + messageDesc(file_agent, 294); /** * @generated from message agent.v1.McpError @@ -8883,7 +8978,7 @@ export type McpError = Message<"agent.v1.McpError"> & { * Use `create(McpErrorSchema)` to create a new message. */ export const McpErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 291); + messageDesc(file_agent, 295); /** * @generated from message agent.v1.McpRejected @@ -8905,7 +9000,7 @@ export type McpRejected = Message<"agent.v1.McpRejected"> & { * Use `create(McpRejectedSchema)` to create a new message. */ export const McpRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 292); + messageDesc(file_agent, 296); /** * @generated from message agent.v1.McpPermissionDenied @@ -8927,7 +9022,7 @@ export type McpPermissionDenied = Message<"agent.v1.McpPermissionDenied"> & { * Use `create(McpPermissionDeniedSchema)` to create a new message. */ export const McpPermissionDeniedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 293); + messageDesc(file_agent, 297); /** * List MCP resources exec args @@ -8948,7 +9043,7 @@ export type ListMcpResourcesExecArgs = Message<"agent.v1.ListMcpResourcesExecArg * Use `create(ListMcpResourcesExecArgsSchema)` to create a new message. */ export const ListMcpResourcesExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 294); + messageDesc(file_agent, 298); /** * List MCP resources exec result @@ -8985,7 +9080,7 @@ export type ListMcpResourcesExecResult = Message<"agent.v1.ListMcpResourcesExecR * Use `create(ListMcpResourcesExecResultSchema)` to create a new message. */ export const ListMcpResourcesExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 295); + messageDesc(file_agent, 299); /** * @generated from message agent.v1.ListMcpResourcesExecResult_McpResource @@ -9031,7 +9126,7 @@ export type ListMcpResourcesExecResult_McpResource = Message<"agent.v1.ListMcpRe * Use `create(ListMcpResourcesExecResult_McpResourceSchema)` to create a new message. */ export const ListMcpResourcesExecResult_McpResourceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 296); + messageDesc(file_agent, 300); /** * @generated from message agent.v1.ListMcpResourcesSuccess @@ -9048,7 +9143,7 @@ export type ListMcpResourcesSuccess = Message<"agent.v1.ListMcpResourcesSuccess" * Use `create(ListMcpResourcesSuccessSchema)` to create a new message. */ export const ListMcpResourcesSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 297); + messageDesc(file_agent, 301); /** * @generated from message agent.v1.ListMcpResourcesError @@ -9065,7 +9160,7 @@ export type ListMcpResourcesError = Message<"agent.v1.ListMcpResourcesError"> & * Use `create(ListMcpResourcesErrorSchema)` to create a new message. */ export const ListMcpResourcesErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 298); + messageDesc(file_agent, 302); /** * @generated from message agent.v1.ListMcpResourcesRejected @@ -9082,7 +9177,7 @@ export type ListMcpResourcesRejected = Message<"agent.v1.ListMcpResourcesRejecte * Use `create(ListMcpResourcesRejectedSchema)` to create a new message. */ export const ListMcpResourcesRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 299); + messageDesc(file_agent, 303); /** * Read MCP resource exec args @@ -9127,7 +9222,7 @@ export type ReadMcpResourceExecArgs = Message<"agent.v1.ReadMcpResourceExecArgs" * Use `create(ReadMcpResourceExecArgsSchema)` to create a new message. */ export const ReadMcpResourceExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 300); + messageDesc(file_agent, 304); /** * Read MCP resource exec result @@ -9170,7 +9265,7 @@ export type ReadMcpResourceExecResult = Message<"agent.v1.ReadMcpResourceExecRes * Use `create(ReadMcpResourceExecResultSchema)` to create a new message. */ export const ReadMcpResourceExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 301); + messageDesc(file_agent, 305); /** * @generated from message agent.v1.ReadMcpResourceSuccess @@ -9238,7 +9333,7 @@ export type ReadMcpResourceSuccess = Message<"agent.v1.ReadMcpResourceSuccess"> * Use `create(ReadMcpResourceSuccessSchema)` to create a new message. */ export const ReadMcpResourceSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 302); + messageDesc(file_agent, 306); /** * @generated from message agent.v1.ReadMcpResourceError @@ -9260,7 +9355,7 @@ export type ReadMcpResourceError = Message<"agent.v1.ReadMcpResourceError"> & { * Use `create(ReadMcpResourceErrorSchema)` to create a new message. */ export const ReadMcpResourceErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 303); + messageDesc(file_agent, 307); /** * @generated from message agent.v1.ReadMcpResourceRejected @@ -9282,7 +9377,7 @@ export type ReadMcpResourceRejected = Message<"agent.v1.ReadMcpResourceRejected" * Use `create(ReadMcpResourceRejectedSchema)` to create a new message. */ export const ReadMcpResourceRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 304); + messageDesc(file_agent, 308); /** * @generated from message agent.v1.ReadMcpResourceNotFound @@ -9299,7 +9394,7 @@ export type ReadMcpResourceNotFound = Message<"agent.v1.ReadMcpResourceNotFound" * Use `create(ReadMcpResourceNotFoundSchema)` to create a new message. */ export const ReadMcpResourceNotFoundSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 305); + messageDesc(file_agent, 309); /** * @generated from message agent.v1.McpToolDefinition @@ -9341,7 +9436,7 @@ export type McpToolDefinition = Message<"agent.v1.McpToolDefinition"> & { * Use `create(McpToolDefinitionSchema)` to create a new message. */ export const McpToolDefinitionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 306); + messageDesc(file_agent, 310); /** * @generated from message agent.v1.McpTools @@ -9358,7 +9453,7 @@ export type McpTools = Message<"agent.v1.McpTools"> & { * Use `create(McpToolsSchema)` to create a new message. */ export const McpToolsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 307); + messageDesc(file_agent, 311); /** * Represents MCP-provided instructions from a specific server @@ -9387,7 +9482,7 @@ export type McpInstructions = Message<"agent.v1.McpInstructions"> & { * Use `create(McpInstructionsSchema)` to create a new message. */ export const McpInstructionsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 308); + messageDesc(file_agent, 312); /** * @generated from message agent.v1.McpDescriptor @@ -9448,7 +9543,7 @@ export type McpDescriptor = Message<"agent.v1.McpDescriptor"> & { * Use `create(McpDescriptorSchema)` to create a new message. */ export const McpDescriptorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 309); + messageDesc(file_agent, 313); /** * @generated from message agent.v1.McpToolDescriptor @@ -9480,7 +9575,7 @@ export type McpToolDescriptor = Message<"agent.v1.McpToolDescriptor"> & { * Use `create(McpToolDescriptorSchema)` to create a new message. */ export const McpToolDescriptorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 310); + messageDesc(file_agent, 314); /** * @generated from message agent.v1.McpFileSystemOptions @@ -9507,7 +9602,7 @@ export type McpFileSystemOptions = Message<"agent.v1.McpFileSystemOptions"> & { * Use `create(McpFileSystemOptionsSchema)` to create a new message. */ export const McpFileSystemOptionsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 311); + messageDesc(file_agent, 315); /** * @generated from message agent.v1.ReadArgs @@ -9544,7 +9639,7 @@ export type ReadArgs = Message<"agent.v1.ReadArgs"> & { * Use `create(ReadArgsSchema)` to create a new message. */ export const ReadArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 312); + messageDesc(file_agent, 316); /** * @generated from message agent.v1.ReadResult @@ -9597,7 +9692,7 @@ export type ReadResult = Message<"agent.v1.ReadResult"> & { * Use `create(ReadResultSchema)` to create a new message. */ export const ReadResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 313); + messageDesc(file_agent, 317); /** * @generated from message agent.v1.ReadSuccess @@ -9660,7 +9755,7 @@ export type ReadSuccess = Message<"agent.v1.ReadSuccess"> & { * Use `create(ReadSuccessSchema)` to create a new message. */ export const ReadSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 314); + messageDesc(file_agent, 318); /** * @generated from message agent.v1.ReadError @@ -9682,7 +9777,7 @@ export type ReadError = Message<"agent.v1.ReadError"> & { * Use `create(ReadErrorSchema)` to create a new message. */ export const ReadErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 315); + messageDesc(file_agent, 319); /** * @generated from message agent.v1.ReadRejected @@ -9704,7 +9799,7 @@ export type ReadRejected = Message<"agent.v1.ReadRejected"> & { * Use `create(ReadRejectedSchema)` to create a new message. */ export const ReadRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 316); + messageDesc(file_agent, 320); /** * @generated from message agent.v1.ReadFileNotFound @@ -9721,7 +9816,7 @@ export type ReadFileNotFound = Message<"agent.v1.ReadFileNotFound"> & { * Use `create(ReadFileNotFoundSchema)` to create a new message. */ export const ReadFileNotFoundSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 317); + messageDesc(file_agent, 321); /** * @generated from message agent.v1.ReadPermissionDenied @@ -9738,7 +9833,7 @@ export type ReadPermissionDenied = Message<"agent.v1.ReadPermissionDenied"> & { * Use `create(ReadPermissionDeniedSchema)` to create a new message. */ export const ReadPermissionDeniedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 318); + messageDesc(file_agent, 322); /** * @generated from message agent.v1.ReadInvalidFile @@ -9762,7 +9857,7 @@ export type ReadInvalidFile = Message<"agent.v1.ReadInvalidFile"> & { * Use `create(ReadInvalidFileSchema)` to create a new message. */ export const ReadInvalidFileSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 319); + messageDesc(file_agent, 323); /** * @generated from message agent.v1.ReadToolCall @@ -9784,7 +9879,7 @@ export type ReadToolCall = Message<"agent.v1.ReadToolCall"> & { * Use `create(ReadToolCallSchema)` to create a new message. */ export const ReadToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 320); + messageDesc(file_agent, 324); /** * @generated from message agent.v1.ReadToolArgs @@ -9811,7 +9906,7 @@ export type ReadToolArgs = Message<"agent.v1.ReadToolArgs"> & { * Use `create(ReadToolArgsSchema)` to create a new message. */ export const ReadToolArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 321); + messageDesc(file_agent, 325); /** * @generated from message agent.v1.ReadToolResult @@ -9840,7 +9935,7 @@ export type ReadToolResult = Message<"agent.v1.ReadToolResult"> & { * Use `create(ReadToolResultSchema)` to create a new message. */ export const ReadToolResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 322); + messageDesc(file_agent, 326); /** * @generated from message agent.v1.ReadRange @@ -9862,7 +9957,7 @@ export type ReadRange = Message<"agent.v1.ReadRange"> & { * Use `create(ReadRangeSchema)` to create a new message. */ export const ReadRangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 323); + messageDesc(file_agent, 327); /** * @generated from message agent.v1.ReadToolSuccess @@ -9933,7 +10028,7 @@ export type ReadToolSuccess = Message<"agent.v1.ReadToolSuccess"> & { * Use `create(ReadToolSuccessSchema)` to create a new message. */ export const ReadToolSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 324); + messageDesc(file_agent, 328); /** * @generated from message agent.v1.ReadToolError @@ -9950,7 +10045,7 @@ export type ReadToolError = Message<"agent.v1.ReadToolError"> & { * Use `create(ReadToolErrorSchema)` to create a new message. */ export const ReadToolErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 325); + messageDesc(file_agent, 329); /** * @generated from message agent.v1.RecordScreenArgs @@ -9979,7 +10074,7 @@ export type RecordScreenArgs = Message<"agent.v1.RecordScreenArgs"> & { * Use `create(RecordScreenArgsSchema)` to create a new message. */ export const RecordScreenArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 326); + messageDesc(file_agent, 330); /** * @generated from message agent.v1.RecordScreenResult @@ -10020,7 +10115,7 @@ export type RecordScreenResult = Message<"agent.v1.RecordScreenResult"> & { * Use `create(RecordScreenResultSchema)` to create a new message. */ export const RecordScreenResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 327); + messageDesc(file_agent, 331); /** * @generated from message agent.v1.RecordScreenStartSuccess @@ -10046,7 +10141,7 @@ export type RecordScreenStartSuccess = Message<"agent.v1.RecordScreenStartSucces * Use `create(RecordScreenStartSuccessSchema)` to create a new message. */ export const RecordScreenStartSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 328); + messageDesc(file_agent, 332); /** * @generated from message agent.v1.RecordScreenSaveSuccess @@ -10079,7 +10174,7 @@ export type RecordScreenSaveSuccess = Message<"agent.v1.RecordScreenSaveSuccess" * Use `create(RecordScreenSaveSuccessSchema)` to create a new message. */ export const RecordScreenSaveSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 329); + messageDesc(file_agent, 333); /** * Empty message - recording discarded successfully @@ -10094,7 +10189,7 @@ export type RecordScreenDiscardSuccess = Message<"agent.v1.RecordScreenDiscardSu * Use `create(RecordScreenDiscardSuccessSchema)` to create a new message. */ export const RecordScreenDiscardSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 330); + messageDesc(file_agent, 334); /** * @generated from message agent.v1.RecordScreenFailure @@ -10113,7 +10208,7 @@ export type RecordScreenFailure = Message<"agent.v1.RecordScreenFailure"> & { * Use `create(RecordScreenFailureSchema)` to create a new message. */ export const RecordScreenFailureSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 331); + messageDesc(file_agent, 335); /** * @generated from message agent.v1.CursorPackagePrompt @@ -10135,7 +10230,7 @@ export type CursorPackagePrompt = Message<"agent.v1.CursorPackagePrompt"> & { * Use `create(CursorPackagePromptSchema)` to create a new message. */ export const CursorPackagePromptSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 332); + messageDesc(file_agent, 336); /** * @generated from message agent.v1.CursorPackage @@ -10187,7 +10282,7 @@ export type CursorPackage = Message<"agent.v1.CursorPackage"> & { * Use `create(CursorPackageSchema)` to create a new message. */ export const CursorPackageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 333); + messageDesc(file_agent, 337); /** * TODO: you should be able to override / configure this list in your .vscode settings not exactly sure what that should look like... but i guess you should be able to specify an override URL because we use URLs for identifying repos and maybe you should be able to specify additional buckets too... like in the jane street case: i guess jane street should have some default buckets @@ -10263,7 +10358,7 @@ export type RepositoryIndexingInfo = Message<"agent.v1.RepositoryIndexingInfo"> * Use `create(RepositoryIndexingInfoSchema)` to create a new message. */ export const RepositoryIndexingInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 334); + messageDesc(file_agent, 338); /** * @generated from message agent.v1.RequestContextArgs @@ -10300,7 +10395,7 @@ export type RequestContextArgs = Message<"agent.v1.RequestContextArgs"> & { * Use `create(RequestContextArgsSchema)` to create a new message. */ export const RequestContextArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 335); + messageDesc(file_agent, 339); /** * @generated from message agent.v1.RequestContextResult @@ -10335,7 +10430,7 @@ export type RequestContextResult = Message<"agent.v1.RequestContextResult"> & { * Use `create(RequestContextResultSchema)` to create a new message. */ export const RequestContextResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 336); + messageDesc(file_agent, 340); /** * @generated from message agent.v1.RequestContextSuccess @@ -10357,7 +10452,7 @@ export type RequestContextSuccess = Message<"agent.v1.RequestContextSuccess"> & * Use `create(RequestContextSuccessSchema)` to create a new message. */ export const RequestContextSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 337); + messageDesc(file_agent, 341); /** * @generated from message agent.v1.RequestContextError @@ -10374,7 +10469,7 @@ export type RequestContextError = Message<"agent.v1.RequestContextError"> & { * Use `create(RequestContextErrorSchema)` to create a new message. */ export const RequestContextErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 338); + messageDesc(file_agent, 342); /** * @generated from message agent.v1.RequestContextRejected @@ -10391,7 +10486,7 @@ export type RequestContextRejected = Message<"agent.v1.RequestContextRejected"> * Use `create(RequestContextRejectedSchema)` to create a new message. */ export const RequestContextRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 339); + messageDesc(file_agent, 343); /** * same as SelectedImage, but with the data field is the full image data @@ -10435,7 +10530,7 @@ export type ImageProto = Message<"agent.v1.ImageProto"> & { * Use `create(ImageProtoSchema)` to create a new message. */ export const ImageProtoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 340); + messageDesc(file_agent, 344); /** * @generated from message agent.v1.ImageProto_Dimension @@ -10457,7 +10552,7 @@ export type ImageProto_Dimension = Message<"agent.v1.ImageProto_Dimension"> & { * Use `create(ImageProto_DimensionSchema)` to create a new message. */ export const ImageProto_DimensionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 341); + messageDesc(file_agent, 345); /** * Git repository information for a workspace @@ -10491,7 +10586,7 @@ export type GitRepoInfo = Message<"agent.v1.GitRepoInfo"> & { * Use `create(GitRepoInfoSchema)` to create a new message. */ export const GitRepoInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 342); + messageDesc(file_agent, 346); /** * Environment details for system prompt/context @@ -10559,7 +10654,7 @@ export type RequestContextEnv = Message<"agent.v1.RequestContextEnv"> & { * Use `create(RequestContextEnvSchema)` to create a new message. */ export const RequestContextEnvSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 343); + messageDesc(file_agent, 347); /** * @generated from message agent.v1.DebugModeConfig @@ -10581,7 +10676,7 @@ export type DebugModeConfig = Message<"agent.v1.DebugModeConfig"> & { * Use `create(DebugModeConfigSchema)` to create a new message. */ export const DebugModeConfigSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 344); + messageDesc(file_agent, 348); /** * @generated from message agent.v1.SkillDescriptor @@ -10628,7 +10723,7 @@ export type SkillDescriptor = Message<"agent.v1.SkillDescriptor"> & { * Use `create(SkillDescriptorSchema)` to create a new message. */ export const SkillDescriptorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 345); + messageDesc(file_agent, 349); /** * @generated from message agent.v1.SkillOptions @@ -10645,7 +10740,7 @@ export type SkillOptions = Message<"agent.v1.SkillOptions"> & { * Use `create(SkillOptionsSchema)` to create a new message. */ export const SkillOptionsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 346); + messageDesc(file_agent, 350); /** * @generated from message agent.v1.RequestContext @@ -10755,7 +10850,7 @@ export type RequestContext = Message<"agent.v1.RequestContext"> & { * Use `create(RequestContextSchema)` to create a new message. */ export const RequestContextSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 347); + messageDesc(file_agent, 351); /** * @generated from message agent.v1.SandboxPolicy @@ -10804,7 +10899,7 @@ export type SandboxPolicy = Message<"agent.v1.SandboxPolicy"> & { * Use `create(SandboxPolicySchema)` to create a new message. */ export const SandboxPolicySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 348); + messageDesc(file_agent, 352); /** * @generated from message agent.v1.SelectedImage @@ -10859,7 +10954,7 @@ export type SelectedImage = Message<"agent.v1.SelectedImage"> & { * Use `create(SelectedImageSchema)` to create a new message. */ export const SelectedImageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 349); + messageDesc(file_agent, 353); /** * Contains both blob_id and data together, for when the client has both and wants to populate the server-side cache without re-uploading @@ -10883,7 +10978,7 @@ export type SelectedImage_BlobIdWithData = Message<"agent.v1.SelectedImage_BlobI * Use `create(SelectedImage_BlobIdWithDataSchema)` to create a new message. */ export const SelectedImage_BlobIdWithDataSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 350); + messageDesc(file_agent, 354); /** * @generated from message agent.v1.SelectedImage_Dimension @@ -10905,7 +11000,7 @@ export type SelectedImage_Dimension = Message<"agent.v1.SelectedImage_Dimension" * Use `create(SelectedImage_DimensionSchema)` to create a new message. */ export const SelectedImage_DimensionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 351); + messageDesc(file_agent, 355); /** * Extra context entry that can be stored inline or as a blob reference @@ -10936,7 +11031,7 @@ export type ExtraContextEntry = Message<"agent.v1.ExtraContextEntry"> & { * Use `create(ExtraContextEntrySchema)` to create a new message. */ export const ExtraContextEntrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 352); + messageDesc(file_agent, 356); /** * A selected file from the UI @@ -10967,7 +11062,7 @@ export type SelectedFile = Message<"agent.v1.SelectedFile"> & { * Use `create(SelectedFileSchema)` to create a new message. */ export const SelectedFileSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 353); + messageDesc(file_agent, 357); /** * A selected code selection from the UI @@ -11003,7 +11098,7 @@ export type SelectedCodeSelection = Message<"agent.v1.SelectedCodeSelection"> & * Use `create(SelectedCodeSelectionSchema)` to create a new message. */ export const SelectedCodeSelectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 354); + messageDesc(file_agent, 358); /** * A selected terminal from the UI @@ -11032,7 +11127,7 @@ export type SelectedTerminal = Message<"agent.v1.SelectedTerminal"> & { * Use `create(SelectedTerminalSchema)` to create a new message. */ export const SelectedTerminalSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 355); + messageDesc(file_agent, 359); /** * A selected terminal selection from the UI @@ -11066,7 +11161,7 @@ export type SelectedTerminalSelection = Message<"agent.v1.SelectedTerminalSelect * Use `create(SelectedTerminalSelectionSchema)` to create a new message. */ export const SelectedTerminalSelectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 356); + messageDesc(file_agent, 360); /** * A selected folder from the UI @@ -11097,7 +11192,7 @@ export type SelectedFolder = Message<"agent.v1.SelectedFolder"> & { * Use `create(SelectedFolderSchema)` to create a new message. */ export const SelectedFolderSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 357); + messageDesc(file_agent, 361); /** * An external link manually attached by the user @@ -11138,7 +11233,7 @@ export type SelectedExternalLink = Message<"agent.v1.SelectedExternalLink"> & { * Use `create(SelectedExternalLinkSchema)` to create a new message. */ export const SelectedExternalLinkSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 358); + messageDesc(file_agent, 362); /** * A cursor rule manually attached by the user @@ -11157,7 +11252,7 @@ export type SelectedCursorRule = Message<"agent.v1.SelectedCursorRule"> & { * Use `create(SelectedCursorRuleSchema)` to create a new message. */ export const SelectedCursorRuleSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 359); + messageDesc(file_agent, 363); /** * Git diff (uncommitted changes in working tree) @@ -11178,7 +11273,7 @@ export type SelectedGitDiff = Message<"agent.v1.SelectedGitDiff"> & { * Use `create(SelectedGitDiffSchema)` to create a new message. */ export const SelectedGitDiffSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 360); + messageDesc(file_agent, 364); /** * Git diff from branch to main @@ -11199,7 +11294,7 @@ export type SelectedGitDiffFromBranchToMain = Message<"agent.v1.SelectedGitDiffF * Use `create(SelectedGitDiffFromBranchToMainSchema)` to create a new message. */ export const SelectedGitDiffFromBranchToMainSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 361); + messageDesc(file_agent, 365); /** * A git commit manually attached by the user @@ -11235,7 +11330,7 @@ export type SelectedGitCommit = Message<"agent.v1.SelectedGitCommit"> & { * Use `create(SelectedGitCommitSchema)` to create a new message. */ export const SelectedGitCommitSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 362); + messageDesc(file_agent, 366); /** * A pull request manually attached by the user via @mention Uses the same folder structure as ViewedPullRequest for consistency @@ -11292,7 +11387,7 @@ export type SelectedPullRequest = Message<"agent.v1.SelectedPullRequest"> & { * Use `create(SelectedPullRequestSchema)` to create a new message. */ export const SelectedPullRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 363); + messageDesc(file_agent, 367); /** * A selection from a pull request diff (for files that may not exist on disk) @@ -11348,7 +11443,7 @@ export type SelectedGitPRDiffSelection = Message<"agent.v1.SelectedGitPRDiffSele * Use `create(SelectedGitPRDiffSelectionSchema)` to create a new message. */ export const SelectedGitPRDiffSelectionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 364); + messageDesc(file_agent, 368); /** * A cursor command manually attached by the user @@ -11372,7 +11467,7 @@ export type SelectedCursorCommand = Message<"agent.v1.SelectedCursorCommand"> & * Use `create(SelectedCursorCommandSchema)` to create a new message. */ export const SelectedCursorCommandSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 365); + messageDesc(file_agent, 369); /** * A documentation manually attached by the user @@ -11396,7 +11491,7 @@ export type SelectedDocumentation = Message<"agent.v1.SelectedDocumentation"> & * Use `create(SelectedDocumentationSchema)` to create a new message. */ export const SelectedDocumentationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 366); + messageDesc(file_agent, 370); /** * A past chat manually attached by the user (transcript file) @@ -11420,7 +11515,7 @@ export type SelectedPastChat = Message<"agent.v1.SelectedPastChat"> & { * Use `create(SelectedPastChatSchema)` to create a new message. */ export const SelectedPastChatSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 367); + messageDesc(file_agent, 371); /** * A call frame from a stack trace @@ -11454,7 +11549,7 @@ export type CallFrame = Message<"agent.v1.CallFrame"> & { * Use `create(CallFrameSchema)` to create a new message. */ export const CallFrameSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 368); + messageDesc(file_agent, 372); /** * A stack trace @@ -11478,7 +11573,7 @@ export type StackTrace = Message<"agent.v1.StackTrace"> & { * Use `create(StackTraceSchema)` to create a new message. */ export const StackTraceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 369); + messageDesc(file_agent, 373); /** * A console log entry from the runtime @@ -11529,7 +11624,7 @@ export type SelectedConsoleLog = Message<"agent.v1.SelectedConsoleLog"> & { * Use `create(SelectedConsoleLogSchema)` to create a new message. */ export const SelectedConsoleLogSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 370); + messageDesc(file_agent, 374); /** * A UI element picked by the user from the runtime @@ -11573,7 +11668,7 @@ export type SelectedUIElement = Message<"agent.v1.SelectedUIElement"> & { * Use `create(SelectedUIElementSchema)` to create a new message. */ export const SelectedUIElementSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 371); + messageDesc(file_agent, 375); /** * A subagent selected by the user from the slash menu @@ -11592,7 +11687,7 @@ export type SelectedSubagent = Message<"agent.v1.SelectedSubagent"> & { * Use `create(SelectedSubagentSchema)` to create a new message. */ export const SelectedSubagentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 372); + messageDesc(file_agent, 376); /** * Container for selected context from the UI @@ -11720,7 +11815,7 @@ export type SelectedContext = Message<"agent.v1.SelectedContext"> & { * Use `create(SelectedContextSchema)` to create a new message. */ export const SelectedContextSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 373); + messageDesc(file_agent, 377); /** * InvocationContext represents the context from the external app/integration that triggered this agent request. @@ -11763,7 +11858,7 @@ export type InvocationContext = Message<"agent.v1.InvocationContext"> & { * Use `create(InvocationContextSchema)` to create a new message. */ export const InvocationContextSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 374); + messageDesc(file_agent, 378); /** * @generated from message agent.v1.InvocationContext_SlackThread @@ -11795,7 +11890,7 @@ export type InvocationContext_SlackThread = Message<"agent.v1.InvocationContext_ * Use `create(InvocationContext_SlackThreadSchema)` to create a new message. */ export const InvocationContext_SlackThreadSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 375); + messageDesc(file_agent, 379); /** * @generated from message agent.v1.InvocationContext_GithubPR @@ -11827,7 +11922,7 @@ export type InvocationContext_GithubPR = Message<"agent.v1.InvocationContext_Git * Use `create(InvocationContext_GithubPRSchema)` to create a new message. */ export const InvocationContext_GithubPRSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 376); + messageDesc(file_agent, 380); /** * @generated from message agent.v1.InvocationContext_IdeState @@ -11856,7 +11951,7 @@ export type InvocationContext_IdeState = Message<"agent.v1.InvocationContext_Ide * Use `create(InvocationContext_IdeStateSchema)` to create a new message. */ export const InvocationContext_IdeStateSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 377); + messageDesc(file_agent, 381); /** * @generated from message agent.v1.InvocationContext_IdeState_File @@ -11899,7 +11994,7 @@ export type InvocationContext_IdeState_File = Message<"agent.v1.InvocationContex * Use `create(InvocationContext_IdeState_FileSchema)` to create a new message. */ export const InvocationContext_IdeState_FileSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 378); + messageDesc(file_agent, 382); /** * @generated from message agent.v1.InvocationContext_IdeState_File_CursorPosition @@ -11921,7 +12016,7 @@ export type InvocationContext_IdeState_File_CursorPosition = Message<"agent.v1.I * Use `create(InvocationContext_IdeState_File_CursorPositionSchema)` to create a new message. */ export const InvocationContext_IdeState_File_CursorPositionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 379); + messageDesc(file_agent, 383); /** * Information about a PR currently being viewed in a review editor @@ -11971,7 +12066,7 @@ export type InvocationContext_IdeState_ViewedPullRequest = Message<"agent.v1.Inv * Use `create(InvocationContext_IdeState_ViewedPullRequestSchema)` to create a new message. */ export const InvocationContext_IdeState_ViewedPullRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 380); + messageDesc(file_agent, 384); /** * @generated from message agent.v1.SetupVmEnvironmentArgs @@ -11995,7 +12090,7 @@ export type SetupVmEnvironmentArgs = Message<"agent.v1.SetupVmEnvironmentArgs"> * Use `create(SetupVmEnvironmentArgsSchema)` to create a new message. */ export const SetupVmEnvironmentArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 381); + messageDesc(file_agent, 385); /** * Result of VM environment setup operations @@ -12020,7 +12115,7 @@ export type SetupVmEnvironmentResult = Message<"agent.v1.SetupVmEnvironmentResul * Use `create(SetupVmEnvironmentResultSchema)` to create a new message. */ export const SetupVmEnvironmentResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 382); + messageDesc(file_agent, 386); /** * Successful VM environment setup result @@ -12035,7 +12130,7 @@ export type SetupVmEnvironmentSuccess = Message<"agent.v1.SetupVmEnvironmentSucc * Use `create(SetupVmEnvironmentSuccessSchema)` to create a new message. */ export const SetupVmEnvironmentSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 383); + messageDesc(file_agent, 387); /** * Tool call structure for SetupVmEnvironment @@ -12063,7 +12158,7 @@ export type SetupVmEnvironmentToolCall = Message<"agent.v1.SetupVmEnvironmentToo * Use `create(SetupVmEnvironmentToolCallSchema)` to create a new message. */ export const SetupVmEnvironmentToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 384); + messageDesc(file_agent, 388); /** * @generated from message agent.v1.ShellCommandParsingResult @@ -12105,7 +12200,7 @@ export type ShellCommandParsingResult = Message<"agent.v1.ShellCommandParsingRes * Use `create(ShellCommandParsingResultSchema)` to create a new message. */ export const ShellCommandParsingResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 385); + messageDesc(file_agent, 389); /** * @generated from message agent.v1.ShellCommandParsingResult_ExecutableCommandArg @@ -12127,7 +12222,7 @@ export type ShellCommandParsingResult_ExecutableCommandArg = Message<"agent.v1.S * Use `create(ShellCommandParsingResult_ExecutableCommandArgSchema)` to create a new message. */ export const ShellCommandParsingResult_ExecutableCommandArgSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 386); + messageDesc(file_agent, 390); /** * @generated from message agent.v1.ShellCommandParsingResult_ExecutableCommand @@ -12154,7 +12249,7 @@ export type ShellCommandParsingResult_ExecutableCommand = Message<"agent.v1.Shel * Use `create(ShellCommandParsingResult_ExecutableCommandSchema)` to create a new message. */ export const ShellCommandParsingResult_ExecutableCommandSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 387); + messageDesc(file_agent, 391); /** * @generated from message agent.v1.ShellArgs @@ -12277,7 +12372,7 @@ export type ShellArgs = Message<"agent.v1.ShellArgs"> & { * Use `create(ShellArgsSchema)` to create a new message. */ export const ShellArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 388); + messageDesc(file_agent, 392); /** * @generated from message agent.v1.ShellResult @@ -12356,7 +12451,7 @@ export type ShellResult = Message<"agent.v1.ShellResult"> & { * Use `create(ShellResultSchema)` to create a new message. */ export const ShellResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 389); + messageDesc(file_agent, 393); /** * @generated from message agent.v1.ShellStreamStdout @@ -12373,7 +12468,7 @@ export type ShellStreamStdout = Message<"agent.v1.ShellStreamStdout"> & { * Use `create(ShellStreamStdoutSchema)` to create a new message. */ export const ShellStreamStdoutSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 390); + messageDesc(file_agent, 394); /** * @generated from message agent.v1.ShellStreamStderr @@ -12390,7 +12485,7 @@ export type ShellStreamStderr = Message<"agent.v1.ShellStreamStderr"> & { * Use `create(ShellStreamStderrSchema)` to create a new message. */ export const ShellStreamStderrSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 391); + messageDesc(file_agent, 395); /** * @generated from message agent.v1.ShellStreamExit @@ -12434,7 +12529,7 @@ export type ShellStreamExit = Message<"agent.v1.ShellStreamExit"> & { * Use `create(ShellStreamExitSchema)` to create a new message. */ export const ShellStreamExitSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 392); + messageDesc(file_agent, 396); /** * @generated from message agent.v1.ShellStreamStart @@ -12451,7 +12546,7 @@ export type ShellStreamStart = Message<"agent.v1.ShellStreamStart"> & { * Use `create(ShellStreamStartSchema)` to create a new message. */ export const ShellStreamStartSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 393); + messageDesc(file_agent, 397); /** * @generated from message agent.v1.ShellStreamBackgrounded @@ -12495,7 +12590,7 @@ export type ShellStreamBackgrounded = Message<"agent.v1.ShellStreamBackgrounded" * Use `create(ShellStreamBackgroundedSchema)` to create a new message. */ export const ShellStreamBackgroundedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 394); + messageDesc(file_agent, 398); /** * @generated from message agent.v1.ShellStream @@ -12560,7 +12655,7 @@ export type ShellStream = Message<"agent.v1.ShellStream"> & { * Use `create(ShellStreamSchema)` to create a new message. */ export const ShellStreamSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 395); + messageDesc(file_agent, 399); /** * @generated from message agent.v1.OutputLocation @@ -12593,7 +12688,7 @@ export type OutputLocation = Message<"agent.v1.OutputLocation"> & { * Use `create(OutputLocationSchema)` to create a new message. */ export const OutputLocationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 396); + messageDesc(file_agent, 400); /** * @generated from message agent.v1.ShellSuccess @@ -12702,7 +12797,7 @@ export type ShellSuccess = Message<"agent.v1.ShellSuccess"> & { * Use `create(ShellSuccessSchema)` to create a new message. */ export const ShellSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 397); + messageDesc(file_agent, 401); /** * @generated from message agent.v1.ShellFailure @@ -12799,7 +12894,7 @@ export type ShellFailure = Message<"agent.v1.ShellFailure"> & { * Use `create(ShellFailureSchema)` to create a new message. */ export const ShellFailureSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 398); + messageDesc(file_agent, 402); /** * @generated from message agent.v1.ShellTimeout @@ -12826,7 +12921,7 @@ export type ShellTimeout = Message<"agent.v1.ShellTimeout"> & { * Use `create(ShellTimeoutSchema)` to create a new message. */ export const ShellTimeoutSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 399); + messageDesc(file_agent, 403); /** * @generated from message agent.v1.ShellRejected @@ -12858,7 +12953,7 @@ export type ShellRejected = Message<"agent.v1.ShellRejected"> & { * Use `create(ShellRejectedSchema)` to create a new message. */ export const ShellRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 400); + messageDesc(file_agent, 404); /** * @generated from message agent.v1.ShellPermissionDenied @@ -12890,7 +12985,7 @@ export type ShellPermissionDenied = Message<"agent.v1.ShellPermissionDenied"> & * Use `create(ShellPermissionDeniedSchema)` to create a new message. */ export const ShellPermissionDeniedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 401); + messageDesc(file_agent, 405); /** * @generated from message agent.v1.ShellSpawnError @@ -12917,7 +13012,7 @@ export type ShellSpawnError = Message<"agent.v1.ShellSpawnError"> & { * Use `create(ShellSpawnErrorSchema)` to create a new message. */ export const ShellSpawnErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 402); + messageDesc(file_agent, 406); /** * @generated from message agent.v1.ShellPartialResult @@ -12939,7 +13034,7 @@ export type ShellPartialResult = Message<"agent.v1.ShellPartialResult"> & { * Use `create(ShellPartialResultSchema)` to create a new message. */ export const ShellPartialResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 403); + messageDesc(file_agent, 407); /** * @generated from message agent.v1.ShellToolCall @@ -12961,7 +13056,7 @@ export type ShellToolCall = Message<"agent.v1.ShellToolCall"> & { * Use `create(ShellToolCallSchema)` to create a new message. */ export const ShellToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 404); + messageDesc(file_agent, 408); /** * @generated from message agent.v1.ShellToolCallStdoutDelta @@ -12978,7 +13073,7 @@ export type ShellToolCallStdoutDelta = Message<"agent.v1.ShellToolCallStdoutDelt * Use `create(ShellToolCallStdoutDeltaSchema)` to create a new message. */ export const ShellToolCallStdoutDeltaSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 405); + messageDesc(file_agent, 409); /** * @generated from message agent.v1.ShellToolCallStderrDelta @@ -12995,7 +13090,7 @@ export type ShellToolCallStderrDelta = Message<"agent.v1.ShellToolCallStderrDelt * Use `create(ShellToolCallStderrDeltaSchema)` to create a new message. */ export const ShellToolCallStderrDeltaSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 406); + messageDesc(file_agent, 410); /** * @generated from message agent.v1.ShellToolCallDelta @@ -13024,7 +13119,7 @@ export type ShellToolCallDelta = Message<"agent.v1.ShellToolCallDelta"> & { * Use `create(ShellToolCallDeltaSchema)` to create a new message. */ export const ShellToolCallDeltaSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 407); + messageDesc(file_agent, 411); /** * @generated from message agent.v1.SubagentType @@ -13065,7 +13160,7 @@ export type SubagentType = Message<"agent.v1.SubagentType"> & { * Use `create(SubagentTypeSchema)` to create a new message. */ export const SubagentTypeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 408); + messageDesc(file_agent, 412); /** * Empty message for unspecified subagent type @@ -13080,7 +13175,7 @@ export type SubagentTypeUnspecified = Message<"agent.v1.SubagentTypeUnspecified" * Use `create(SubagentTypeUnspecifiedSchema)` to create a new message. */ export const SubagentTypeUnspecifiedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 409); + messageDesc(file_agent, 413); /** * Empty message for computer use subagent type @@ -13095,7 +13190,7 @@ export type SubagentTypeComputerUse = Message<"agent.v1.SubagentTypeComputerUse" * Use `create(SubagentTypeComputerUseSchema)` to create a new message. */ export const SubagentTypeComputerUseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 410); + messageDesc(file_agent, 414); /** * Empty message for explore subagent type (read-only codebase exploration) @@ -13110,7 +13205,7 @@ export type SubagentTypeExplore = Message<"agent.v1.SubagentTypeExplore"> & { * Use `create(SubagentTypeExploreSchema)` to create a new message. */ export const SubagentTypeExploreSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 411); + messageDesc(file_agent, 415); /** * Custom subagent type with a name field @@ -13131,7 +13226,7 @@ export type SubagentTypeCustom = Message<"agent.v1.SubagentTypeCustom"> & { * Use `create(SubagentTypeCustomSchema)` to create a new message. */ export const SubagentTypeCustomSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 412); + messageDesc(file_agent, 416); /** * Custom subagent definition loaded from local workspace configuration. @@ -13194,7 +13289,7 @@ export type CustomSubagent = Message<"agent.v1.CustomSubagent"> & { * Use `create(CustomSubagentSchema)` to create a new message. */ export const CustomSubagentSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 413); + messageDesc(file_agent, 417); /** * @generated from message agent.v1.SwitchModeArgs @@ -13225,7 +13320,7 @@ export type SwitchModeArgs = Message<"agent.v1.SwitchModeArgs"> & { * Use `create(SwitchModeArgsSchema)` to create a new message. */ export const SwitchModeArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 414); + messageDesc(file_agent, 418); /** * @generated from message agent.v1.SwitchModeResult @@ -13260,7 +13355,7 @@ export type SwitchModeResult = Message<"agent.v1.SwitchModeResult"> & { * Use `create(SwitchModeResultSchema)` to create a new message. */ export const SwitchModeResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 415); + messageDesc(file_agent, 419); /** * @generated from message agent.v1.SwitchModeSuccess @@ -13286,7 +13381,7 @@ export type SwitchModeSuccess = Message<"agent.v1.SwitchModeSuccess"> & { * Use `create(SwitchModeSuccessSchema)` to create a new message. */ export const SwitchModeSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 416); + messageDesc(file_agent, 420); /** * @generated from message agent.v1.SwitchModeError @@ -13303,7 +13398,7 @@ export type SwitchModeError = Message<"agent.v1.SwitchModeError"> & { * Use `create(SwitchModeErrorSchema)` to create a new message. */ export const SwitchModeErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 417); + messageDesc(file_agent, 421); /** * @generated from message agent.v1.SwitchModeRejected @@ -13320,7 +13415,7 @@ export type SwitchModeRejected = Message<"agent.v1.SwitchModeRejected"> & { * Use `create(SwitchModeRejectedSchema)` to create a new message. */ export const SwitchModeRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 418); + messageDesc(file_agent, 422); /** * @generated from message agent.v1.SwitchModeToolCall @@ -13342,7 +13437,7 @@ export type SwitchModeToolCall = Message<"agent.v1.SwitchModeToolCall"> & { * Use `create(SwitchModeToolCallSchema)` to create a new message. */ export const SwitchModeToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 419); + messageDesc(file_agent, 423); /** * @generated from message agent.v1.SwitchModeRequestQuery @@ -13359,7 +13454,7 @@ export type SwitchModeRequestQuery = Message<"agent.v1.SwitchModeRequestQuery"> * Use `create(SwitchModeRequestQuerySchema)` to create a new message. */ export const SwitchModeRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 420); + messageDesc(file_agent, 424); /** * @generated from message agent.v1.SwitchModeRequestResponse @@ -13388,7 +13483,7 @@ export type SwitchModeRequestResponse = Message<"agent.v1.SwitchModeRequestRespo * Use `create(SwitchModeRequestResponseSchema)` to create a new message. */ export const SwitchModeRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 421); + messageDesc(file_agent, 425); /** * @generated from message agent.v1.SwitchModeRequestResponse_Approved @@ -13401,7 +13496,7 @@ export type SwitchModeRequestResponse_Approved = Message<"agent.v1.SwitchModeReq * Use `create(SwitchModeRequestResponse_ApprovedSchema)` to create a new message. */ export const SwitchModeRequestResponse_ApprovedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 422); + messageDesc(file_agent, 426); /** * @generated from message agent.v1.SwitchModeRequestResponse_Rejected @@ -13418,7 +13513,7 @@ export type SwitchModeRequestResponse_Rejected = Message<"agent.v1.SwitchModeReq * Use `create(SwitchModeRequestResponse_RejectedSchema)` to create a new message. */ export const SwitchModeRequestResponse_RejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 423); + messageDesc(file_agent, 427); /** * @generated from message agent.v1.TodoItem @@ -13462,7 +13557,7 @@ export type TodoItem = Message<"agent.v1.TodoItem"> & { * Use `create(TodoItemSchema)` to create a new message. */ export const TodoItemSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 424); + messageDesc(file_agent, 428); /** * UpdateTodos tool call @@ -13486,7 +13581,7 @@ export type UpdateTodosToolCall = Message<"agent.v1.UpdateTodosToolCall"> & { * Use `create(UpdateTodosToolCallSchema)` to create a new message. */ export const UpdateTodosToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 425); + messageDesc(file_agent, 429); /** * @generated from message agent.v1.UpdateTodosArgs @@ -13508,7 +13603,7 @@ export type UpdateTodosArgs = Message<"agent.v1.UpdateTodosArgs"> & { * Use `create(UpdateTodosArgsSchema)` to create a new message. */ export const UpdateTodosArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 426); + messageDesc(file_agent, 430); /** * @generated from message agent.v1.UpdateTodosResult @@ -13537,7 +13632,7 @@ export type UpdateTodosResult = Message<"agent.v1.UpdateTodosResult"> & { * Use `create(UpdateTodosResultSchema)` to create a new message. */ export const UpdateTodosResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 427); + messageDesc(file_agent, 431); /** * @generated from message agent.v1.UpdateTodosSuccess @@ -13566,7 +13661,7 @@ export type UpdateTodosSuccess = Message<"agent.v1.UpdateTodosSuccess"> & { * Use `create(UpdateTodosSuccessSchema)` to create a new message. */ export const UpdateTodosSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 428); + messageDesc(file_agent, 432); /** * @generated from message agent.v1.UpdateTodosError @@ -13583,7 +13678,7 @@ export type UpdateTodosError = Message<"agent.v1.UpdateTodosError"> & { * Use `create(UpdateTodosErrorSchema)` to create a new message. */ export const UpdateTodosErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 429); + messageDesc(file_agent, 433); /** * ReadTodos tool call @@ -13607,7 +13702,7 @@ export type ReadTodosToolCall = Message<"agent.v1.ReadTodosToolCall"> & { * Use `create(ReadTodosToolCallSchema)` to create a new message. */ export const ReadTodosToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 430); + messageDesc(file_agent, 434); /** * @generated from message agent.v1.ReadTodosArgs @@ -13633,7 +13728,7 @@ export type ReadTodosArgs = Message<"agent.v1.ReadTodosArgs"> & { * Use `create(ReadTodosArgsSchema)` to create a new message. */ export const ReadTodosArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 431); + messageDesc(file_agent, 435); /** * @generated from message agent.v1.ReadTodosResult @@ -13662,7 +13757,7 @@ export type ReadTodosResult = Message<"agent.v1.ReadTodosResult"> & { * Use `create(ReadTodosResultSchema)` to create a new message. */ export const ReadTodosResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 432); + messageDesc(file_agent, 436); /** * @generated from message agent.v1.ReadTodosSuccess @@ -13684,7 +13779,7 @@ export type ReadTodosSuccess = Message<"agent.v1.ReadTodosSuccess"> & { * Use `create(ReadTodosSuccessSchema)` to create a new message. */ export const ReadTodosSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 433); + messageDesc(file_agent, 437); /** * @generated from message agent.v1.ReadTodosError @@ -13701,7 +13796,7 @@ export type ReadTodosError = Message<"agent.v1.ReadTodosError"> & { * Use `create(ReadTodosErrorSchema)` to create a new message. */ export const ReadTodosErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 434); + messageDesc(file_agent, 438); /** * @generated from message agent.v1.Range @@ -13723,7 +13818,7 @@ export type Range = Message<"agent.v1.Range"> & { * Use `create(RangeSchema)` to create a new message. */ export const RangeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 435); + messageDesc(file_agent, 439); /** * @generated from message agent.v1.Position @@ -13745,7 +13840,7 @@ export type Position = Message<"agent.v1.Position"> & { * Use `create(PositionSchema)` to create a new message. */ export const PositionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 436); + messageDesc(file_agent, 440); /** * @generated from message agent.v1.Error @@ -13762,7 +13857,7 @@ export type Error = Message<"agent.v1.Error"> & { * Use `create(ErrorSchema)` to create a new message. */ export const ErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 437); + messageDesc(file_agent, 441); /** * @generated from message agent.v1.WebSearchArgs @@ -13784,7 +13879,7 @@ export type WebSearchArgs = Message<"agent.v1.WebSearchArgs"> & { * Use `create(WebSearchArgsSchema)` to create a new message. */ export const WebSearchArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 438); + messageDesc(file_agent, 442); /** * @generated from message agent.v1.WebSearchResult @@ -13819,7 +13914,7 @@ export type WebSearchResult = Message<"agent.v1.WebSearchResult"> & { * Use `create(WebSearchResultSchema)` to create a new message. */ export const WebSearchResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 439); + messageDesc(file_agent, 443); /** * @generated from message agent.v1.WebSearchSuccess @@ -13836,7 +13931,7 @@ export type WebSearchSuccess = Message<"agent.v1.WebSearchSuccess"> & { * Use `create(WebSearchSuccessSchema)` to create a new message. */ export const WebSearchSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 440); + messageDesc(file_agent, 444); /** * @generated from message agent.v1.WebSearchError @@ -13853,7 +13948,7 @@ export type WebSearchError = Message<"agent.v1.WebSearchError"> & { * Use `create(WebSearchErrorSchema)` to create a new message. */ export const WebSearchErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 441); + messageDesc(file_agent, 445); /** * @generated from message agent.v1.WebSearchRejected @@ -13870,7 +13965,7 @@ export type WebSearchRejected = Message<"agent.v1.WebSearchRejected"> & { * Use `create(WebSearchRejectedSchema)` to create a new message. */ export const WebSearchRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 442); + messageDesc(file_agent, 446); /** * @generated from message agent.v1.WebSearchReference @@ -13897,7 +13992,7 @@ export type WebSearchReference = Message<"agent.v1.WebSearchReference"> & { * Use `create(WebSearchReferenceSchema)` to create a new message. */ export const WebSearchReferenceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 443); + messageDesc(file_agent, 447); /** * @generated from message agent.v1.WebSearchToolCall @@ -13919,7 +14014,7 @@ export type WebSearchToolCall = Message<"agent.v1.WebSearchToolCall"> & { * Use `create(WebSearchToolCallSchema)` to create a new message. */ export const WebSearchToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 444); + messageDesc(file_agent, 448); /** * @generated from message agent.v1.WebSearchRequestQuery @@ -13936,7 +14031,7 @@ export type WebSearchRequestQuery = Message<"agent.v1.WebSearchRequestQuery"> & * Use `create(WebSearchRequestQuerySchema)` to create a new message. */ export const WebSearchRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 445); + messageDesc(file_agent, 449); /** * @generated from message agent.v1.WebSearchRequestResponse @@ -13965,7 +14060,7 @@ export type WebSearchRequestResponse = Message<"agent.v1.WebSearchRequestRespons * Use `create(WebSearchRequestResponseSchema)` to create a new message. */ export const WebSearchRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 446); + messageDesc(file_agent, 450); /** * @generated from message agent.v1.WebSearchRequestResponse_Approved @@ -13978,7 +14073,7 @@ export type WebSearchRequestResponse_Approved = Message<"agent.v1.WebSearchReque * Use `create(WebSearchRequestResponse_ApprovedSchema)` to create a new message. */ export const WebSearchRequestResponse_ApprovedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 447); + messageDesc(file_agent, 451); /** * @generated from message agent.v1.WebSearchRequestResponse_Rejected @@ -13995,7 +14090,7 @@ export type WebSearchRequestResponse_Rejected = Message<"agent.v1.WebSearchReque * Use `create(WebSearchRequestResponse_RejectedSchema)` to create a new message. */ export const WebSearchRequestResponse_RejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 448); + messageDesc(file_agent, 452); /** * @generated from message agent.v1.WriteArgs @@ -14039,7 +14134,7 @@ export type WriteArgs = Message<"agent.v1.WriteArgs"> & { * Use `create(WriteArgsSchema)` to create a new message. */ export const WriteArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 449); + messageDesc(file_agent, 453); /** * @generated from message agent.v1.WriteResult @@ -14086,7 +14181,7 @@ export type WriteResult = Message<"agent.v1.WriteResult"> & { * Use `create(WriteResultSchema)` to create a new message. */ export const WriteResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 450); + messageDesc(file_agent, 454); /** * @generated from message agent.v1.WriteSuccess @@ -14118,7 +14213,7 @@ export type WriteSuccess = Message<"agent.v1.WriteSuccess"> & { * Use `create(WriteSuccessSchema)` to create a new message. */ export const WriteSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 451); + messageDesc(file_agent, 455); /** * @generated from message agent.v1.WritePermissionDenied @@ -14157,7 +14252,7 @@ export type WritePermissionDenied = Message<"agent.v1.WritePermissionDenied"> & * Use `create(WritePermissionDeniedSchema)` to create a new message. */ export const WritePermissionDeniedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 452); + messageDesc(file_agent, 456); /** * @generated from message agent.v1.WriteNoSpace @@ -14174,7 +14269,7 @@ export type WriteNoSpace = Message<"agent.v1.WriteNoSpace"> & { * Use `create(WriteNoSpaceSchema)` to create a new message. */ export const WriteNoSpaceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 453); + messageDesc(file_agent, 457); /** * @generated from message agent.v1.WriteError @@ -14196,7 +14291,7 @@ export type WriteError = Message<"agent.v1.WriteError"> & { * Use `create(WriteErrorSchema)` to create a new message. */ export const WriteErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 454); + messageDesc(file_agent, 458); /** * @generated from message agent.v1.WriteRejected @@ -14218,7 +14313,7 @@ export type WriteRejected = Message<"agent.v1.WriteRejected"> & { * Use `create(WriteRejectedSchema)` to create a new message. */ export const WriteRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 455); + messageDesc(file_agent, 459); /** * @generated from message agent.v1.BootstrapStatsigRequest @@ -14242,7 +14337,7 @@ export type BootstrapStatsigRequest = Message<"agent.v1.BootstrapStatsigRequest" * Use `create(BootstrapStatsigRequestSchema)` to create a new message. */ export const BootstrapStatsigRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 456); + messageDesc(file_agent, 460); /** * @generated from message agent.v1.PingResponse @@ -14255,7 +14350,7 @@ export type PingResponse = Message<"agent.v1.PingResponse"> & { * Use `create(PingResponseSchema)` to create a new message. */ export const PingResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 457); + messageDesc(file_agent, 461); /** * @generated from message agent.v1.ExecRequest @@ -14287,7 +14382,7 @@ export type ExecRequest = Message<"agent.v1.ExecRequest"> & { * Use `create(ExecRequestSchema)` to create a new message. */ export const ExecRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 458); + messageDesc(file_agent, 462); /** * @generated from message agent.v1.ExecResponse @@ -14322,7 +14417,7 @@ export type ExecResponse = Message<"agent.v1.ExecResponse"> & { * Use `create(ExecResponseSchema)` to create a new message. */ export const ExecResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 459); + messageDesc(file_agent, 463); /** * @generated from message agent.v1.StdoutEvent @@ -14339,7 +14434,7 @@ export type StdoutEvent = Message<"agent.v1.StdoutEvent"> & { * Use `create(StdoutEventSchema)` to create a new message. */ export const StdoutEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 460); + messageDesc(file_agent, 464); /** * @generated from message agent.v1.StderrEvent @@ -14356,7 +14451,7 @@ export type StderrEvent = Message<"agent.v1.StderrEvent"> & { * Use `create(StderrEventSchema)` to create a new message. */ export const StderrEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 461); + messageDesc(file_agent, 465); /** * @generated from message agent.v1.ExitEvent @@ -14373,7 +14468,7 @@ export type ExitEvent = Message<"agent.v1.ExitEvent"> & { * Use `create(ExitEventSchema)` to create a new message. */ export const ExitEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 462); + messageDesc(file_agent, 466); /** * @generated from message agent.v1.ReadTextFileRequest @@ -14390,7 +14485,7 @@ export type ReadTextFileRequest = Message<"agent.v1.ReadTextFileRequest"> & { * Use `create(ReadTextFileRequestSchema)` to create a new message. */ export const ReadTextFileRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 463); + messageDesc(file_agent, 467); /** * @generated from message agent.v1.ReadTextFileResponse @@ -14407,7 +14502,7 @@ export type ReadTextFileResponse = Message<"agent.v1.ReadTextFileResponse"> & { * Use `create(ReadTextFileResponseSchema)` to create a new message. */ export const ReadTextFileResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 464); + messageDesc(file_agent, 468); /** * @generated from message agent.v1.WriteTextFileRequest @@ -14429,7 +14524,7 @@ export type WriteTextFileRequest = Message<"agent.v1.WriteTextFileRequest"> & { * Use `create(WriteTextFileRequestSchema)` to create a new message. */ export const WriteTextFileRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 465); + messageDesc(file_agent, 469); /** * Empty response - success is implied by RPC completion @@ -14444,7 +14539,7 @@ export type WriteTextFileResponse = Message<"agent.v1.WriteTextFileResponse"> & * Use `create(WriteTextFileResponseSchema)` to create a new message. */ export const WriteTextFileResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 466); + messageDesc(file_agent, 470); /** * @generated from message agent.v1.ReadBinaryFileRequest @@ -14461,7 +14556,7 @@ export type ReadBinaryFileRequest = Message<"agent.v1.ReadBinaryFileRequest"> & * Use `create(ReadBinaryFileRequestSchema)` to create a new message. */ export const ReadBinaryFileRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 467); + messageDesc(file_agent, 471); /** * @generated from message agent.v1.ReadBinaryFileResponse @@ -14478,7 +14573,7 @@ export type ReadBinaryFileResponse = Message<"agent.v1.ReadBinaryFileResponse"> * Use `create(ReadBinaryFileResponseSchema)` to create a new message. */ export const ReadBinaryFileResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 468); + messageDesc(file_agent, 472); /** * @generated from message agent.v1.WriteBinaryFileRequest @@ -14500,7 +14595,7 @@ export type WriteBinaryFileRequest = Message<"agent.v1.WriteBinaryFileRequest"> * Use `create(WriteBinaryFileRequestSchema)` to create a new message. */ export const WriteBinaryFileRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 469); + messageDesc(file_agent, 473); /** * Empty response - success is implied by RPC completion @@ -14515,7 +14610,7 @@ export type WriteBinaryFileResponse = Message<"agent.v1.WriteBinaryFileResponse" * Use `create(WriteBinaryFileResponseSchema)` to create a new message. */ export const WriteBinaryFileResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 470); + messageDesc(file_agent, 474); /** * @generated from message agent.v1.GetWorkspaceChangesHashRequest @@ -14537,7 +14632,7 @@ export type GetWorkspaceChangesHashRequest = Message<"agent.v1.GetWorkspaceChang * Use `create(GetWorkspaceChangesHashRequestSchema)` to create a new message. */ export const GetWorkspaceChangesHashRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 471); + messageDesc(file_agent, 475); /** * @generated from message agent.v1.GetWorkspaceChangesHashResponse @@ -14554,7 +14649,7 @@ export type GetWorkspaceChangesHashResponse = Message<"agent.v1.GetWorkspaceChan * Use `create(GetWorkspaceChangesHashResponseSchema)` to create a new message. */ export const GetWorkspaceChangesHashResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 472); + messageDesc(file_agent, 476); /** * @generated from message agent.v1.RefreshGithubAccessTokenRequest @@ -14578,7 +14673,7 @@ export type RefreshGithubAccessTokenRequest = Message<"agent.v1.RefreshGithubAcc * Use `create(RefreshGithubAccessTokenRequestSchema)` to create a new message. */ export const RefreshGithubAccessTokenRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 473); + messageDesc(file_agent, 477); /** * Empty response - success is implied by RPC completion @@ -14593,7 +14688,7 @@ export type RefreshGithubAccessTokenResponse = Message<"agent.v1.RefreshGithubAc * Use `create(RefreshGithubAccessTokenResponseSchema)` to create a new message. */ export const RefreshGithubAccessTokenResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 474); + messageDesc(file_agent, 478); /** * @generated from message agent.v1.WarmRemoteAccessServerRequest @@ -14620,7 +14715,7 @@ export type WarmRemoteAccessServerRequest = Message<"agent.v1.WarmRemoteAccessSe * Use `create(WarmRemoteAccessServerRequestSchema)` to create a new message. */ export const WarmRemoteAccessServerRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 475); + messageDesc(file_agent, 479); /** * Empty response - success is implied by RPC completion @@ -14635,7 +14730,7 @@ export type WarmRemoteAccessServerResponse = Message<"agent.v1.WarmRemoteAccessS * Use `create(WarmRemoteAccessServerResponseSchema)` to create a new message. */ export const WarmRemoteAccessServerResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 476); + messageDesc(file_agent, 480); /** * @generated from message agent.v1.ListArtifactsRequest @@ -14648,7 +14743,7 @@ export type ListArtifactsRequest = Message<"agent.v1.ListArtifactsRequest"> & { * Use `create(ListArtifactsRequestSchema)` to create a new message. */ export const ListArtifactsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 477); + messageDesc(file_agent, 481); /** * @generated from message agent.v1.ArtifactUploadMetadata @@ -14710,7 +14805,7 @@ export type ArtifactUploadMetadata = Message<"agent.v1.ArtifactUploadMetadata"> * Use `create(ArtifactUploadMetadataSchema)` to create a new message. */ export const ArtifactUploadMetadataSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 478); + messageDesc(file_agent, 482); /** * @generated from message agent.v1.ListArtifactsResponse @@ -14727,7 +14822,7 @@ export type ListArtifactsResponse = Message<"agent.v1.ListArtifactsResponse"> & * Use `create(ListArtifactsResponseSchema)` to create a new message. */ export const ListArtifactsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 479); + messageDesc(file_agent, 483); /** * @generated from message agent.v1.UploadArtifactsRequest @@ -14744,7 +14839,7 @@ export type UploadArtifactsRequest = Message<"agent.v1.UploadArtifactsRequest"> * Use `create(UploadArtifactsRequestSchema)` to create a new message. */ export const UploadArtifactsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 480); + messageDesc(file_agent, 484); /** * @generated from message agent.v1.ArtifactUploadInstruction @@ -14791,7 +14886,7 @@ export type ArtifactUploadInstruction = Message<"agent.v1.ArtifactUploadInstruct * Use `create(ArtifactUploadInstructionSchema)` to create a new message. */ export const ArtifactUploadInstructionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 481); + messageDesc(file_agent, 485); /** * @generated from message agent.v1.ArtifactUploadDispatchResult @@ -14823,7 +14918,7 @@ export type ArtifactUploadDispatchResult = Message<"agent.v1.ArtifactUploadDispa * Use `create(ArtifactUploadDispatchResultSchema)` to create a new message. */ export const ArtifactUploadDispatchResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 482); + messageDesc(file_agent, 486); /** * @generated from message agent.v1.UploadArtifactsResponse @@ -14840,7 +14935,7 @@ export type UploadArtifactsResponse = Message<"agent.v1.UploadArtifactsResponse" * Use `create(UploadArtifactsResponseSchema)` to create a new message. */ export const UploadArtifactsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 483); + messageDesc(file_agent, 487); /** * @generated from message agent.v1.GetMcpRefreshTokensRequest @@ -14853,7 +14948,7 @@ export type GetMcpRefreshTokensRequest = Message<"agent.v1.GetMcpRefreshTokensRe * Use `create(GetMcpRefreshTokensRequestSchema)` to create a new message. */ export const GetMcpRefreshTokensRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 484); + messageDesc(file_agent, 488); /** * @generated from message agent.v1.GetMcpRefreshTokensResponse @@ -14872,7 +14967,7 @@ export type GetMcpRefreshTokensResponse = Message<"agent.v1.GetMcpRefreshTokensR * Use `create(GetMcpRefreshTokensResponseSchema)` to create a new message. */ export const GetMcpRefreshTokensResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 485); + messageDesc(file_agent, 489); /** * @generated from message agent.v1.UpdateEnvironmentVariablesRequest @@ -14898,7 +14993,7 @@ export type UpdateEnvironmentVariablesRequest = Message<"agent.v1.UpdateEnvironm * Use `create(UpdateEnvironmentVariablesRequestSchema)` to create a new message. */ export const UpdateEnvironmentVariablesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 486); + messageDesc(file_agent, 490); /** * @generated from message agent.v1.UpdateEnvironmentVariablesResponse @@ -14920,7 +15015,7 @@ export type UpdateEnvironmentVariablesResponse = Message<"agent.v1.UpdateEnviron * Use `create(UpdateEnvironmentVariablesResponseSchema)` to create a new message. */ export const UpdateEnvironmentVariablesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 487); + messageDesc(file_agent, 491); /** * Check if an error is caused by the client disconnecting (e.g., due to timeout or abort). This includes errors like ERR_STREAM_DESTROYED which occur when the HTTP response stream is closed by the client while the server is still writing to it. function isClientDisconnectError(error) { if (!(error instanceof Error)) { return false; const code = error.code; return (code === "ERR_STREAM_DESTROYED" || code === "ERR_STREAM_PREMATURE_CLOSE" || code === "ECONNRESET" || code === "EPIPE"); ;// ../proto/dist/generated/aiserver/v1/mcp_pb.js // @ts-nocheck @@ -14954,7 +15049,7 @@ export type McpOAuthStoredData = Message<"agent.v1.McpOAuthStoredData"> & { * Use `create(McpOAuthStoredDataSchema)` to create a new message. */ export const McpOAuthStoredDataSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 488); + messageDesc(file_agent, 492); /** * @generated from message agent.v1.Frame @@ -14999,7 +15094,7 @@ export type Frame = Message<"agent.v1.Frame"> & { * Use `create(FrameSchema)` to create a new message. */ export const FrameSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 489); + messageDesc(file_agent, 493); /** * var Frame_Kind; (function (Frame_Kind) { Frame_Kind[Frame_Kind["UNSPECIFIED"] = 0] = "UNSPECIFIED"; Frame_Kind[Frame_Kind["REQUEST"] = 1] = "REQUEST"; Frame_Kind[Frame_Kind["RESPONSE"] = 2] = "RESPONSE"; Frame_Kind[Frame_Kind["ERROR"] = 3] = "ERROR"; })(Frame_Kind || (Frame_Kind = {})); // Retrieve enum metadata with: proto3.getEnumType(Frame_Kind) proto3/* int32 *\/.C.util.setEnumType(Frame_Kind, "agent.v1.Frame.Kind", [ { no: 0, name: "KIND_UNSPECIFIED" }, { no: 1, name: "KIND_REQUEST" }, { no: 2, name: "KIND_RESPONSE" }, { no: 3, name: "KIND_ERROR" }, ]); @@ -15014,7 +15109,7 @@ export type Empty = Message<"agent.v1.Empty"> & { * Use `create(EmptySchema)` to create a new message. */ export const EmptySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 490); + messageDesc(file_agent, 494); /** * @generated from message agent.v1.BidiRequestId @@ -15031,7 +15126,7 @@ export type BidiRequestId = Message<"agent.v1.BidiRequestId"> & { * Use `create(BidiRequestIdSchema)` to create a new message. */ export const BidiRequestIdSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 491); + messageDesc(file_agent, 495); /** * @generated from message agent.v1.PiTruncation @@ -15088,7 +15183,7 @@ export type PiTruncation = Message<"agent.v1.PiTruncation"> & { * Use `create(PiTruncationSchema)` to create a new message. */ export const PiTruncationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 492); + messageDesc(file_agent, 496); /** * @generated from message agent.v1.PiEditReplacement @@ -15110,7 +15205,7 @@ export type PiEditReplacement = Message<"agent.v1.PiEditReplacement"> & { * Use `create(PiEditReplacementSchema)` to create a new message. */ export const PiEditReplacementSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 493); + messageDesc(file_agent, 497); /** * @generated from message agent.v1.PiReadExecArgs @@ -15137,7 +15232,7 @@ export type PiReadExecArgs = Message<"agent.v1.PiReadExecArgs"> & { * Use `create(PiReadExecArgsSchema)` to create a new message. */ export const PiReadExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 494); + messageDesc(file_agent, 498); /** * @generated from message agent.v1.PiReadExecSuccess @@ -15159,7 +15254,7 @@ export type PiReadExecSuccess = Message<"agent.v1.PiReadExecSuccess"> & { * Use `create(PiReadExecSuccessSchema)` to create a new message. */ export const PiReadExecSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 495); + messageDesc(file_agent, 499); /** * @generated from message agent.v1.PiReadExecError @@ -15176,7 +15271,7 @@ export type PiReadExecError = Message<"agent.v1.PiReadExecError"> & { * Use `create(PiReadExecErrorSchema)` to create a new message. */ export const PiReadExecErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 496); + messageDesc(file_agent, 500); /** * @generated from message agent.v1.PiReadExecResult @@ -15205,7 +15300,7 @@ export type PiReadExecResult = Message<"agent.v1.PiReadExecResult"> & { * Use `create(PiReadExecResultSchema)` to create a new message. */ export const PiReadExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 497); + messageDesc(file_agent, 501); /** * @generated from message agent.v1.PiBashExecArgs @@ -15227,7 +15322,7 @@ export type PiBashExecArgs = Message<"agent.v1.PiBashExecArgs"> & { * Use `create(PiBashExecArgsSchema)` to create a new message. */ export const PiBashExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 498); + messageDesc(file_agent, 502); /** * @generated from message agent.v1.PiBashExecSuccess @@ -15254,7 +15349,7 @@ export type PiBashExecSuccess = Message<"agent.v1.PiBashExecSuccess"> & { * Use `create(PiBashExecSuccessSchema)` to create a new message. */ export const PiBashExecSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 499); + messageDesc(file_agent, 503); /** * @generated from message agent.v1.PiBashExecError @@ -15281,7 +15376,7 @@ export type PiBashExecError = Message<"agent.v1.PiBashExecError"> & { * Use `create(PiBashExecErrorSchema)` to create a new message. */ export const PiBashExecErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 500); + messageDesc(file_agent, 504); /** * @generated from message agent.v1.PiBashExecResult @@ -15310,7 +15405,7 @@ export type PiBashExecResult = Message<"agent.v1.PiBashExecResult"> & { * Use `create(PiBashExecResultSchema)` to create a new message. */ export const PiBashExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 501); + messageDesc(file_agent, 505); /** * @generated from message agent.v1.PiEditExecArgs @@ -15332,7 +15427,7 @@ export type PiEditExecArgs = Message<"agent.v1.PiEditExecArgs"> & { * Use `create(PiEditExecArgsSchema)` to create a new message. */ export const PiEditExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 502); + messageDesc(file_agent, 506); /** * @generated from message agent.v1.PiEditExecSuccess @@ -15364,7 +15459,7 @@ export type PiEditExecSuccess = Message<"agent.v1.PiEditExecSuccess"> & { * Use `create(PiEditExecSuccessSchema)` to create a new message. */ export const PiEditExecSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 503); + messageDesc(file_agent, 507); /** * @generated from message agent.v1.PiEditExecError @@ -15381,7 +15476,7 @@ export type PiEditExecError = Message<"agent.v1.PiEditExecError"> & { * Use `create(PiEditExecErrorSchema)` to create a new message. */ export const PiEditExecErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 504); + messageDesc(file_agent, 508); /** * @generated from message agent.v1.PiEditExecRejected @@ -15398,7 +15493,7 @@ export type PiEditExecRejected = Message<"agent.v1.PiEditExecRejected"> & { * Use `create(PiEditExecRejectedSchema)` to create a new message. */ export const PiEditExecRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 505); + messageDesc(file_agent, 509); /** * @generated from message agent.v1.PiEditExecResult @@ -15433,7 +15528,7 @@ export type PiEditExecResult = Message<"agent.v1.PiEditExecResult"> & { * Use `create(PiEditExecResultSchema)` to create a new message. */ export const PiEditExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 506); + messageDesc(file_agent, 510); /** * @generated from message agent.v1.PiWriteExecArgs @@ -15455,7 +15550,7 @@ export type PiWriteExecArgs = Message<"agent.v1.PiWriteExecArgs"> & { * Use `create(PiWriteExecArgsSchema)` to create a new message. */ export const PiWriteExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 507); + messageDesc(file_agent, 511); /** * @generated from message agent.v1.PiWriteExecSuccess @@ -15472,7 +15567,7 @@ export type PiWriteExecSuccess = Message<"agent.v1.PiWriteExecSuccess"> & { * Use `create(PiWriteExecSuccessSchema)` to create a new message. */ export const PiWriteExecSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 508); + messageDesc(file_agent, 512); /** * @generated from message agent.v1.PiWriteExecError @@ -15489,7 +15584,7 @@ export type PiWriteExecError = Message<"agent.v1.PiWriteExecError"> & { * Use `create(PiWriteExecErrorSchema)` to create a new message. */ export const PiWriteExecErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 509); + messageDesc(file_agent, 513); /** * @generated from message agent.v1.PiWriteExecRejected @@ -15506,7 +15601,7 @@ export type PiWriteExecRejected = Message<"agent.v1.PiWriteExecRejected"> & { * Use `create(PiWriteExecRejectedSchema)` to create a new message. */ export const PiWriteExecRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 510); + messageDesc(file_agent, 514); /** * @generated from message agent.v1.PiWriteExecResult @@ -15541,7 +15636,7 @@ export type PiWriteExecResult = Message<"agent.v1.PiWriteExecResult"> & { * Use `create(PiWriteExecResultSchema)` to create a new message. */ export const PiWriteExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 511); + messageDesc(file_agent, 515); /** * @generated from message agent.v1.PiGrepExecArgs @@ -15588,7 +15683,7 @@ export type PiGrepExecArgs = Message<"agent.v1.PiGrepExecArgs"> & { * Use `create(PiGrepExecArgsSchema)` to create a new message. */ export const PiGrepExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 512); + messageDesc(file_agent, 516); /** * @generated from message agent.v1.PiGrepExecSuccess @@ -15620,7 +15715,7 @@ export type PiGrepExecSuccess = Message<"agent.v1.PiGrepExecSuccess"> & { * Use `create(PiGrepExecSuccessSchema)` to create a new message. */ export const PiGrepExecSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 513); + messageDesc(file_agent, 517); /** * @generated from message agent.v1.PiGrepExecError @@ -15637,7 +15732,7 @@ export type PiGrepExecError = Message<"agent.v1.PiGrepExecError"> & { * Use `create(PiGrepExecErrorSchema)` to create a new message. */ export const PiGrepExecErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 514); + messageDesc(file_agent, 518); /** * @generated from message agent.v1.PiGrepExecResult @@ -15666,7 +15761,7 @@ export type PiGrepExecResult = Message<"agent.v1.PiGrepExecResult"> & { * Use `create(PiGrepExecResultSchema)` to create a new message. */ export const PiGrepExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 515); + messageDesc(file_agent, 519); /** * @generated from message agent.v1.PiFindExecArgs @@ -15693,7 +15788,7 @@ export type PiFindExecArgs = Message<"agent.v1.PiFindExecArgs"> & { * Use `create(PiFindExecArgsSchema)` to create a new message. */ export const PiFindExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 516); + messageDesc(file_agent, 520); /** * @generated from message agent.v1.PiFindExecSuccess @@ -15720,7 +15815,7 @@ export type PiFindExecSuccess = Message<"agent.v1.PiFindExecSuccess"> & { * Use `create(PiFindExecSuccessSchema)` to create a new message. */ export const PiFindExecSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 517); + messageDesc(file_agent, 521); /** * @generated from message agent.v1.PiFindExecError @@ -15737,7 +15832,7 @@ export type PiFindExecError = Message<"agent.v1.PiFindExecError"> & { * Use `create(PiFindExecErrorSchema)` to create a new message. */ export const PiFindExecErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 518); + messageDesc(file_agent, 522); /** * @generated from message agent.v1.PiFindExecResult @@ -15766,7 +15861,7 @@ export type PiFindExecResult = Message<"agent.v1.PiFindExecResult"> & { * Use `create(PiFindExecResultSchema)` to create a new message. */ export const PiFindExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 519); + messageDesc(file_agent, 523); /** * @generated from message agent.v1.PiLsExecArgs @@ -15788,7 +15883,7 @@ export type PiLsExecArgs = Message<"agent.v1.PiLsExecArgs"> & { * Use `create(PiLsExecArgsSchema)` to create a new message. */ export const PiLsExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 520); + messageDesc(file_agent, 524); /** * @generated from message agent.v1.PiLsExecSuccess @@ -15815,7 +15910,7 @@ export type PiLsExecSuccess = Message<"agent.v1.PiLsExecSuccess"> & { * Use `create(PiLsExecSuccessSchema)` to create a new message. */ export const PiLsExecSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 521); + messageDesc(file_agent, 525); /** * @generated from message agent.v1.PiLsExecError @@ -15832,7 +15927,7 @@ export type PiLsExecError = Message<"agent.v1.PiLsExecError"> & { * Use `create(PiLsExecErrorSchema)` to create a new message. */ export const PiLsExecErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 522); + messageDesc(file_agent, 526); /** * @generated from message agent.v1.PiLsExecResult @@ -15861,7 +15956,7 @@ export type PiLsExecResult = Message<"agent.v1.PiLsExecResult"> & { * Use `create(PiLsExecResultSchema)` to create a new message. */ export const PiLsExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 523); + messageDesc(file_agent, 527); /** * @generated from message agent.v1.McpServerNotFound @@ -15883,7 +15978,7 @@ export type McpServerNotFound = Message<"agent.v1.McpServerNotFound"> & { * Use `create(McpServerNotFoundSchema)` to create a new message. */ export const McpServerNotFoundSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 524); + messageDesc(file_agent, 528); /** * @generated from message agent.v1.McpApproved @@ -15896,7 +15991,7 @@ export type McpApproved = Message<"agent.v1.McpApproved"> & { * Use `create(McpApprovedSchema)` to create a new message. */ export const McpApprovedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 525); + messageDesc(file_agent, 529); /** * @generated from message agent.v1.McpStateExecArgs @@ -15918,7 +16013,7 @@ export type McpStateExecArgs = Message<"agent.v1.McpStateExecArgs"> & { * Use `create(McpStateExecArgsSchema)` to create a new message. */ export const McpStateExecArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 526); + messageDesc(file_agent, 530); /** * @generated from message agent.v1.McpStateServer @@ -15965,7 +16060,7 @@ export type McpStateServer = Message<"agent.v1.McpStateServer"> & { * Use `create(McpStateServerSchema)` to create a new message. */ export const McpStateServerSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 527); + messageDesc(file_agent, 531); /** * @generated from message agent.v1.McpStateSuccess @@ -15982,7 +16077,7 @@ export type McpStateSuccess = Message<"agent.v1.McpStateSuccess"> & { * Use `create(McpStateSuccessSchema)` to create a new message. */ export const McpStateSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 528); + messageDesc(file_agent, 532); /** * @generated from message agent.v1.McpStateError @@ -15999,7 +16094,7 @@ export type McpStateError = Message<"agent.v1.McpStateError"> & { * Use `create(McpStateErrorSchema)` to create a new message. */ export const McpStateErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 529); + messageDesc(file_agent, 533); /** * @generated from message agent.v1.McpStateRejected @@ -16016,7 +16111,7 @@ export type McpStateRejected = Message<"agent.v1.McpStateRejected"> & { * Use `create(McpStateRejectedSchema)` to create a new message. */ export const McpStateRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 530); + messageDesc(file_agent, 534); /** * @generated from message agent.v1.McpStateExecResult @@ -16051,7 +16146,7 @@ export type McpStateExecResult = Message<"agent.v1.McpStateExecResult"> & { * Use `create(McpStateExecResultSchema)` to create a new message. */ export const McpStateExecResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 531); + messageDesc(file_agent, 535); /** * @generated from message agent.v1.CommandClassifierResult_ClassifiedCommand @@ -16083,7 +16178,7 @@ export type CommandClassifierResult_ClassifiedCommand = Message<"agent.v1.Comman * Use `create(CommandClassifierResult_ClassifiedCommandSchema)` to create a new message. */ export const CommandClassifierResult_ClassifiedCommandSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 532); + messageDesc(file_agent, 536); /** * @generated from message agent.v1.CommandClassifierResult @@ -16110,7 +16205,7 @@ export type CommandClassifierResult = Message<"agent.v1.CommandClassifierResult" * Use `create(CommandClassifierResultSchema)` to create a new message. */ export const CommandClassifierResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 533); + messageDesc(file_agent, 537); /** * @generated from message agent.v1.ShellCommandParsingResult_Redirect @@ -16142,7 +16237,7 @@ export type ShellCommandParsingResult_Redirect = Message<"agent.v1.ShellCommandP * Use `create(ShellCommandParsingResult_RedirectSchema)` to create a new message. */ export const ShellCommandParsingResult_RedirectSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 534); + messageDesc(file_agent, 538); /** * @generated from message agent.v1.ShellAllowlistPrecheckArgs @@ -16179,7 +16274,7 @@ export type ShellAllowlistPrecheckArgs = Message<"agent.v1.ShellAllowlistPrechec * Use `create(ShellAllowlistPrecheckArgsSchema)` to create a new message. */ export const ShellAllowlistPrecheckArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 535); + messageDesc(file_agent, 539); /** * @generated from message agent.v1.ShellAllowlistPrecheckResult @@ -16196,7 +16291,7 @@ export type ShellAllowlistPrecheckResult = Message<"agent.v1.ShellAllowlistPrech * Use `create(ShellAllowlistPrecheckResultSchema)` to create a new message. */ export const ShellAllowlistPrecheckResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 536); + messageDesc(file_agent, 540); /** * @generated from message agent.v1.McpAllowlistPrecheckArgs @@ -16223,7 +16318,7 @@ export type McpAllowlistPrecheckArgs = Message<"agent.v1.McpAllowlistPrecheckArg * Use `create(McpAllowlistPrecheckArgsSchema)` to create a new message. */ export const McpAllowlistPrecheckArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 537); + messageDesc(file_agent, 541); /** * @generated from message agent.v1.McpAllowlistPrecheckResult @@ -16240,7 +16335,7 @@ export type McpAllowlistPrecheckResult = Message<"agent.v1.McpAllowlistPrecheckR * Use `create(McpAllowlistPrecheckResultSchema)` to create a new message. */ export const McpAllowlistPrecheckResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 538); + messageDesc(file_agent, 542); /** * @generated from message agent.v1.WebFetchAllowlistPrecheckArgs @@ -16262,7 +16357,7 @@ export type WebFetchAllowlistPrecheckArgs = Message<"agent.v1.WebFetchAllowlistP * Use `create(WebFetchAllowlistPrecheckArgsSchema)` to create a new message. */ export const WebFetchAllowlistPrecheckArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 539); + messageDesc(file_agent, 543); /** * @generated from message agent.v1.WebFetchAllowlistPrecheckResult @@ -16279,7 +16374,7 @@ export type WebFetchAllowlistPrecheckResult = Message<"agent.v1.WebFetchAllowlis * Use `create(WebFetchAllowlistPrecheckResultSchema)` to create a new message. */ export const WebFetchAllowlistPrecheckResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 540); + messageDesc(file_agent, 544); /** * @generated from message agent.v1.SmartModeApproval @@ -16301,7 +16396,7 @@ export type SmartModeApproval = Message<"agent.v1.SmartModeApproval"> & { * Use `create(SmartModeApprovalSchema)` to create a new message. */ export const SmartModeApprovalSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 541); + messageDesc(file_agent, 545); /** * @generated from message agent.v1.ShellOutputNotificationConfig @@ -16333,7 +16428,7 @@ export type ShellOutputNotificationConfig = Message<"agent.v1.ShellOutputNotific * Use `create(ShellOutputNotificationConfigSchema)` to create a new message. */ export const ShellOutputNotificationConfigSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 542); + messageDesc(file_agent, 546); /** * @generated from message agent.v1.ShellHookApprovalRequirement @@ -16355,7 +16450,7 @@ export type ShellHookApprovalRequirement = Message<"agent.v1.ShellHookApprovalRe * Use `create(ShellHookApprovalRequirementSchema)` to create a new message. */ export const ShellHookApprovalRequirementSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 543); + messageDesc(file_agent, 547); /** * @generated from message agent.v1.ForceBackgroundShellArgs @@ -16372,7 +16467,7 @@ export type ForceBackgroundShellArgs = Message<"agent.v1.ForceBackgroundShellArg * Use `create(ForceBackgroundShellArgsSchema)` to create a new message. */ export const ForceBackgroundShellArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 544); + messageDesc(file_agent, 548); /** * @generated from message agent.v1.ForceBackgroundShellResult @@ -16394,7 +16489,7 @@ export type ForceBackgroundShellResult = Message<"agent.v1.ForceBackgroundShellR * Use `create(ForceBackgroundShellResultSchema)` to create a new message. */ export const ForceBackgroundShellResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 545); + messageDesc(file_agent, 549); /** * @generated from message agent.v1.HookAdditionalContext @@ -16416,7 +16511,7 @@ export type HookAdditionalContext = Message<"agent.v1.HookAdditionalContext"> & * Use `create(HookAdditionalContextSchema)` to create a new message. */ export const HookAdditionalContextSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 546); + messageDesc(file_agent, 550); /** * @generated from message agent.v1.ShellStreamHookContext @@ -16433,7 +16528,7 @@ export type ShellStreamHookContext = Message<"agent.v1.ShellStreamHookContext"> * Use `create(ShellStreamHookContextSchema)` to create a new message. */ export const ShellStreamHookContextSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 547); + messageDesc(file_agent, 551); /** * Subset: only the fields this client reads. Upstream also defines model_id=3, readonly=5, @@ -16466,7 +16561,7 @@ export type SubagentArgs = Message<"agent.v1.SubagentArgs"> & { * Use `create(SubagentArgsSchema)` to create a new message. */ export const SubagentArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 548); + messageDesc(file_agent, 552); /** * @generated from message agent.v1.SubagentSuccess @@ -16503,7 +16598,7 @@ export type SubagentSuccess = Message<"agent.v1.SubagentSuccess"> & { * Use `create(SubagentSuccessSchema)` to create a new message. */ export const SubagentSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 549); + messageDesc(file_agent, 553); /** * @generated from message agent.v1.SubagentError @@ -16525,7 +16620,7 @@ export type SubagentError = Message<"agent.v1.SubagentError"> & { * Use `create(SubagentErrorSchema)` to create a new message. */ export const SubagentErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 550); + messageDesc(file_agent, 554); /** * @generated from message agent.v1.SubagentResult @@ -16554,7 +16649,7 @@ export type SubagentResult = Message<"agent.v1.SubagentResult"> & { * Use `create(SubagentResultSchema)` to create a new message. */ export const SubagentResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 551); + messageDesc(file_agent, 555); /** * @generated from message agent.v1.SubagentAwaitArgs @@ -16576,7 +16671,7 @@ export type SubagentAwaitArgs = Message<"agent.v1.SubagentAwaitArgs"> & { * Use `create(SubagentAwaitArgsSchema)` to create a new message. */ export const SubagentAwaitArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 552); + messageDesc(file_agent, 556); /** * @generated from message agent.v1.SubagentAwaitComplete @@ -16608,7 +16703,7 @@ export type SubagentAwaitComplete = Message<"agent.v1.SubagentAwaitComplete"> & * Use `create(SubagentAwaitCompleteSchema)` to create a new message. */ export const SubagentAwaitCompleteSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 553); + messageDesc(file_agent, 557); /** * @generated from message agent.v1.SubagentAwaitStillRunning @@ -16630,7 +16725,7 @@ export type SubagentAwaitStillRunning = Message<"agent.v1.SubagentAwaitStillRunn * Use `create(SubagentAwaitStillRunningSchema)` to create a new message. */ export const SubagentAwaitStillRunningSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 554); + messageDesc(file_agent, 558); /** * @generated from message agent.v1.SubagentAwaitNotFound @@ -16647,7 +16742,7 @@ export type SubagentAwaitNotFound = Message<"agent.v1.SubagentAwaitNotFound"> & * Use `create(SubagentAwaitNotFoundSchema)` to create a new message. */ export const SubagentAwaitNotFoundSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 555); + messageDesc(file_agent, 559); /** * @generated from message agent.v1.SubagentAwaitError @@ -16669,7 +16764,7 @@ export type SubagentAwaitError = Message<"agent.v1.SubagentAwaitError"> & { * Use `create(SubagentAwaitErrorSchema)` to create a new message. */ export const SubagentAwaitErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 556); + messageDesc(file_agent, 560); /** * @generated from message agent.v1.SubagentAwaitResult @@ -16710,7 +16805,7 @@ export type SubagentAwaitResult = Message<"agent.v1.SubagentAwaitResult"> & { * Use `create(SubagentAwaitResultSchema)` to create a new message. */ export const SubagentAwaitResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 557); + messageDesc(file_agent, 561); /** * @generated from message agent.v1.ForceBackgroundSubagentArgs @@ -16727,7 +16822,7 @@ export type ForceBackgroundSubagentArgs = Message<"agent.v1.ForceBackgroundSubag * Use `create(ForceBackgroundSubagentArgsSchema)` to create a new message. */ export const ForceBackgroundSubagentArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 558); + messageDesc(file_agent, 562); /** * @generated from message agent.v1.ForceBackgroundSubagentResult @@ -16744,7 +16839,7 @@ export type ForceBackgroundSubagentResult = Message<"agent.v1.ForceBackgroundSub * Use `create(ForceBackgroundSubagentResultSchema)` to create a new message. */ export const ForceBackgroundSubagentResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 559); + messageDesc(file_agent, 563); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16759,7 +16854,7 @@ export type PreCompactRequestQuery = Message<"agent.v1.PreCompactRequestQuery"> * Use `create(PreCompactRequestQuerySchema)` to create a new message. */ export const PreCompactRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 560); + messageDesc(file_agent, 564); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16774,7 +16869,7 @@ export type SubagentStartRequestQuery = Message<"agent.v1.SubagentStartRequestQu * Use `create(SubagentStartRequestQuerySchema)` to create a new message. */ export const SubagentStartRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 561); + messageDesc(file_agent, 565); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16789,7 +16884,7 @@ export type SubagentStopRequestQuery = Message<"agent.v1.SubagentStopRequestQuer * Use `create(SubagentStopRequestQuerySchema)` to create a new message. */ export const SubagentStopRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 562); + messageDesc(file_agent, 566); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16804,7 +16899,7 @@ export type PreToolUseRequestQuery = Message<"agent.v1.PreToolUseRequestQuery"> * Use `create(PreToolUseRequestQuerySchema)` to create a new message. */ export const PreToolUseRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 563); + messageDesc(file_agent, 567); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16819,7 +16914,7 @@ export type PostToolUseRequestQuery = Message<"agent.v1.PostToolUseRequestQuery" * Use `create(PostToolUseRequestQuerySchema)` to create a new message. */ export const PostToolUseRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 564); + messageDesc(file_agent, 568); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16834,7 +16929,7 @@ export type PostToolUseFailureRequestQuery = Message<"agent.v1.PostToolUseFailur * Use `create(PostToolUseFailureRequestQuerySchema)` to create a new message. */ export const PostToolUseFailureRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 565); + messageDesc(file_agent, 569); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16849,7 +16944,7 @@ export type BeforeSubmitPromptRequestQuery = Message<"agent.v1.BeforeSubmitPromp * Use `create(BeforeSubmitPromptRequestQuerySchema)` to create a new message. */ export const BeforeSubmitPromptRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 566); + messageDesc(file_agent, 570); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16864,7 +16959,7 @@ export type AfterAgentResponseRequestQuery = Message<"agent.v1.AfterAgentRespons * Use `create(AfterAgentResponseRequestQuerySchema)` to create a new message. */ export const AfterAgentResponseRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 567); + messageDesc(file_agent, 571); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16879,7 +16974,7 @@ export type AfterAgentThoughtRequestQuery = Message<"agent.v1.AfterAgentThoughtR * Use `create(AfterAgentThoughtRequestQuerySchema)` to create a new message. */ export const AfterAgentThoughtRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 568); + messageDesc(file_agent, 572); /** * Payload not modelled: this client runs no Cursor hooks and only reads the oneof case. @@ -16894,7 +16989,7 @@ export type StopRequestQuery = Message<"agent.v1.StopRequestQuery"> & { * Use `create(StopRequestQuerySchema)` to create a new message. */ export const StopRequestQuerySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 569); + messageDesc(file_agent, 573); /** * @generated from message agent.v1.PreCompactRequestResponse @@ -16911,7 +17006,7 @@ export type PreCompactRequestResponse = Message<"agent.v1.PreCompactRequestRespo * Use `create(PreCompactRequestResponseSchema)` to create a new message. */ export const PreCompactRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 570); + messageDesc(file_agent, 574); /** * @generated from message agent.v1.SubagentStartRequestResponse @@ -16938,7 +17033,7 @@ export type SubagentStartRequestResponse = Message<"agent.v1.SubagentStartReques * Use `create(SubagentStartRequestResponseSchema)` to create a new message. */ export const SubagentStartRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 571); + messageDesc(file_agent, 575); /** * @generated from message agent.v1.SubagentStopRequestResponse @@ -16960,7 +17055,7 @@ export type SubagentStopRequestResponse = Message<"agent.v1.SubagentStopRequestR * Use `create(SubagentStopRequestResponseSchema)` to create a new message. */ export const SubagentStopRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 572); + messageDesc(file_agent, 576); /** * @generated from message agent.v1.PreToolUseRequestResponse @@ -16997,7 +17092,7 @@ export type PreToolUseRequestResponse = Message<"agent.v1.PreToolUseRequestRespo * Use `create(PreToolUseRequestResponseSchema)` to create a new message. */ export const PreToolUseRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 573); + messageDesc(file_agent, 577); /** * @generated from message agent.v1.PostToolUseRequestResponse @@ -17014,7 +17109,7 @@ export type PostToolUseRequestResponse = Message<"agent.v1.PostToolUseRequestRes * Use `create(PostToolUseRequestResponseSchema)` to create a new message. */ export const PostToolUseRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 574); + messageDesc(file_agent, 578); /** * @generated from message agent.v1.PostToolUseFailureRequestResponse @@ -17031,7 +17126,7 @@ export type PostToolUseFailureRequestResponse = Message<"agent.v1.PostToolUseFai * Use `create(PostToolUseFailureRequestResponseSchema)` to create a new message. */ export const PostToolUseFailureRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 575); + messageDesc(file_agent, 579); /** * @generated from message agent.v1.BeforeSubmitPromptRequestResponse @@ -17058,7 +17153,7 @@ export type BeforeSubmitPromptRequestResponse = Message<"agent.v1.BeforeSubmitPr * Use `create(BeforeSubmitPromptRequestResponseSchema)` to create a new message. */ export const BeforeSubmitPromptRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 576); + messageDesc(file_agent, 580); /** * @generated from message agent.v1.AfterAgentResponseRequestResponse @@ -17071,7 +17166,7 @@ export type AfterAgentResponseRequestResponse = Message<"agent.v1.AfterAgentResp * Use `create(AfterAgentResponseRequestResponseSchema)` to create a new message. */ export const AfterAgentResponseRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 577); + messageDesc(file_agent, 581); /** * @generated from message agent.v1.AfterAgentThoughtRequestResponse @@ -17084,7 +17179,7 @@ export type AfterAgentThoughtRequestResponse = Message<"agent.v1.AfterAgentThoug * Use `create(AfterAgentThoughtRequestResponseSchema)` to create a new message. */ export const AfterAgentThoughtRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 578); + messageDesc(file_agent, 582); /** * @generated from message agent.v1.StopRequestResponse @@ -17101,7 +17196,7 @@ export type StopRequestResponse = Message<"agent.v1.StopRequestResponse"> & { * Use `create(StopRequestResponseSchema)` to create a new message. */ export const StopRequestResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 579); + messageDesc(file_agent, 583); /** * @generated from message agent.v1.ExecuteHookRequest @@ -17178,7 +17273,7 @@ export type ExecuteHookRequest = Message<"agent.v1.ExecuteHookRequest"> & { * Use `create(ExecuteHookRequestSchema)` to create a new message. */ export const ExecuteHookRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 580); + messageDesc(file_agent, 584); /** * @generated from message agent.v1.ExecuteHookResponse @@ -17255,7 +17350,7 @@ export type ExecuteHookResponse = Message<"agent.v1.ExecuteHookResponse"> & { * Use `create(ExecuteHookResponseSchema)` to create a new message. */ export const ExecuteHookResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 581); + messageDesc(file_agent, 585); /** * @generated from message agent.v1.ExecuteHookArgs @@ -17272,7 +17367,7 @@ export type ExecuteHookArgs = Message<"agent.v1.ExecuteHookArgs"> & { * Use `create(ExecuteHookArgsSchema)` to create a new message. */ export const ExecuteHookArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 582); + messageDesc(file_agent, 586); /** * @generated from message agent.v1.ExecuteHookResult @@ -17289,7 +17384,7 @@ export type ExecuteHookResult = Message<"agent.v1.ExecuteHookResult"> & { * Use `create(ExecuteHookResultSchema)` to create a new message. */ export const ExecuteHookResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 583); + messageDesc(file_agent, 587); /** * Subset: arguments=2 (google.protobuf.Struct) decodes into unknown fields; do not reuse. @@ -17308,7 +17403,7 @@ export type SmartModeRiskTarget = Message<"agent.v1.SmartModeRiskTarget"> & { * Use `create(SmartModeRiskTargetSchema)` to create a new message. */ export const SmartModeRiskTargetSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 584); + messageDesc(file_agent, 588); /** * @generated from message agent.v1.SmartModeClassifierConversationMessage @@ -17330,7 +17425,7 @@ export type SmartModeClassifierConversationMessage = Message<"agent.v1.SmartMode * Use `create(SmartModeClassifierConversationMessageSchema)` to create a new message. */ export const SmartModeClassifierConversationMessageSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 585); + messageDesc(file_agent, 589); /** * @generated from message agent.v1.SmartModeClassifierArgs @@ -17362,7 +17457,7 @@ export type SmartModeClassifierArgs = Message<"agent.v1.SmartModeClassifierArgs" * Use `create(SmartModeClassifierArgsSchema)` to create a new message. */ export const SmartModeClassifierArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 586); + messageDesc(file_agent, 590); /** * @generated from message agent.v1.SmartModeClassifierSuccess @@ -17384,7 +17479,7 @@ export type SmartModeClassifierSuccess = Message<"agent.v1.SmartModeClassifierSu * Use `create(SmartModeClassifierSuccessSchema)` to create a new message. */ export const SmartModeClassifierSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 587); + messageDesc(file_agent, 591); /** * @generated from message agent.v1.SmartModeClassifierError @@ -17401,7 +17496,7 @@ export type SmartModeClassifierError = Message<"agent.v1.SmartModeClassifierErro * Use `create(SmartModeClassifierErrorSchema)` to create a new message. */ export const SmartModeClassifierErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 588); + messageDesc(file_agent, 592); /** * @generated from message agent.v1.SmartModeClassifierResult @@ -17430,7 +17525,7 @@ export type SmartModeClassifierResult = Message<"agent.v1.SmartModeClassifierRes * Use `create(SmartModeClassifierResultSchema)` to create a new message. */ export const SmartModeClassifierResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 589); + messageDesc(file_agent, 593); /** * @generated from message agent.v1.CanvasDiagnosticsArgs @@ -17452,7 +17547,7 @@ export type CanvasDiagnosticsArgs = Message<"agent.v1.CanvasDiagnosticsArgs"> & * Use `create(CanvasDiagnosticsArgsSchema)` to create a new message. */ export const CanvasDiagnosticsArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 590); + messageDesc(file_agent, 594); /** * @generated from message agent.v1.CanvasDiagnosticsSuccess @@ -17474,7 +17569,7 @@ export type CanvasDiagnosticsSuccess = Message<"agent.v1.CanvasDiagnosticsSucces * Use `create(CanvasDiagnosticsSuccessSchema)` to create a new message. */ export const CanvasDiagnosticsSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 591); + messageDesc(file_agent, 595); /** * @generated from message agent.v1.CanvasDiagnosticsError @@ -17496,7 +17591,7 @@ export type CanvasDiagnosticsError = Message<"agent.v1.CanvasDiagnosticsError"> * Use `create(CanvasDiagnosticsErrorSchema)` to create a new message. */ export const CanvasDiagnosticsErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 592); + messageDesc(file_agent, 596); /** * @generated from message agent.v1.CanvasDiagnosticsResult @@ -17525,7 +17620,7 @@ export type CanvasDiagnosticsResult = Message<"agent.v1.CanvasDiagnosticsResult" * Use `create(CanvasDiagnosticsResultSchema)` to create a new message. */ export const CanvasDiagnosticsResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 593); + messageDesc(file_agent, 597); /** * @generated from message agent.v1.ConversationSearchHit @@ -17562,7 +17657,7 @@ export type ConversationSearchHit = Message<"agent.v1.ConversationSearchHit"> & * Use `create(ConversationSearchHitSchema)` to create a new message. */ export const ConversationSearchHitSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 594); + messageDesc(file_agent, 598); /** * @generated from message agent.v1.ConversationSearchSuccess @@ -17594,7 +17689,7 @@ export type ConversationSearchSuccess = Message<"agent.v1.ConversationSearchSucc * Use `create(ConversationSearchSuccessSchema)` to create a new message. */ export const ConversationSearchSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 595); + messageDesc(file_agent, 599); /** * @generated from message agent.v1.ConversationSearchError @@ -17611,7 +17706,7 @@ export type ConversationSearchError = Message<"agent.v1.ConversationSearchError" * Use `create(ConversationSearchErrorSchema)` to create a new message. */ export const ConversationSearchErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 596); + messageDesc(file_agent, 600); /** * @generated from message agent.v1.ConversationSearchArgs @@ -17638,7 +17733,7 @@ export type ConversationSearchArgs = Message<"agent.v1.ConversationSearchArgs"> * Use `create(ConversationSearchArgsSchema)` to create a new message. */ export const ConversationSearchArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 597); + messageDesc(file_agent, 601); /** * @generated from message agent.v1.ConversationSearchResult @@ -17667,7 +17762,7 @@ export type ConversationSearchResult = Message<"agent.v1.ConversationSearchResul * Use `create(ConversationSearchResultSchema)` to create a new message. */ export const ConversationSearchResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 598); + messageDesc(file_agent, 602); /** * @generated from message agent.v1.AgentStoreConflictCursor @@ -17694,7 +17789,7 @@ export type AgentStoreConflictCursor = Message<"agent.v1.AgentStoreConflictCurso * Use `create(AgentStoreConflictCursorSchema)` to create a new message. */ export const AgentStoreConflictCursorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 599); + messageDesc(file_agent, 603); /** * @generated from message agent.v1.AgentStoreConflictEvent @@ -17766,7 +17861,7 @@ export type AgentStoreConflictEvent = Message<"agent.v1.AgentStoreConflictEvent" * Use `create(AgentStoreConflictEventSchema)` to create a new message. */ export const AgentStoreConflictEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 600); + messageDesc(file_agent, 604); /** * @generated from message agent.v1.AgentStoreConflictSuccess @@ -17793,7 +17888,7 @@ export type AgentStoreConflictSuccess = Message<"agent.v1.AgentStoreConflictSucc * Use `create(AgentStoreConflictSuccessSchema)` to create a new message. */ export const AgentStoreConflictSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 601); + messageDesc(file_agent, 605); /** * @generated from message agent.v1.AgentStoreConflictError @@ -17810,7 +17905,7 @@ export type AgentStoreConflictError = Message<"agent.v1.AgentStoreConflictError" * Use `create(AgentStoreConflictErrorSchema)` to create a new message. */ export const AgentStoreConflictErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 602); + messageDesc(file_agent, 606); /** * @generated from message agent.v1.AgentStoreConflictArgs @@ -17832,7 +17927,7 @@ export type AgentStoreConflictArgs = Message<"agent.v1.AgentStoreConflictArgs"> * Use `create(AgentStoreConflictArgsSchema)` to create a new message. */ export const AgentStoreConflictArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 603); + messageDesc(file_agent, 607); /** * @generated from message agent.v1.AgentStoreConflictResult @@ -17861,7 +17956,7 @@ export type AgentStoreConflictResult = Message<"agent.v1.AgentStoreConflictResul * Use `create(AgentStoreConflictResultSchema)` to create a new message. */ export const AgentStoreConflictResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 604); + messageDesc(file_agent, 608); /** * @generated from message agent.v1.FileDiff_Chunk @@ -17903,7 +17998,7 @@ export type FileDiff_Chunk = Message<"agent.v1.FileDiff_Chunk"> & { * Use `create(FileDiff_ChunkSchema)` to create a new message. */ export const FileDiff_ChunkSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 605); + messageDesc(file_agent, 609); /** * @generated from message agent.v1.FileDiff @@ -17955,7 +18050,7 @@ export type FileDiff = Message<"agent.v1.FileDiff"> & { * Use `create(FileDiffSchema)` to create a new message. */ export const FileDiffSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 606); + messageDesc(file_agent, 610); /** * @generated from message agent.v1.GitDiff @@ -17977,7 +18072,7 @@ export type GitDiff = Message<"agent.v1.GitDiff"> & { * Use `create(GitDiffSchema)` to create a new message. */ export const GitDiffSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 607); + messageDesc(file_agent, 611); /** * @generated from message agent.v1.GetDiffResponse_SubmoduleDiff @@ -18004,7 +18099,7 @@ export type GetDiffResponse_SubmoduleDiff = Message<"agent.v1.GetDiffResponse_Su * Use `create(GetDiffResponse_SubmoduleDiffSchema)` to create a new message. */ export const GetDiffResponse_SubmoduleDiffSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 608); + messageDesc(file_agent, 612); /** * @generated from message agent.v1.GetDiffRequest @@ -18086,7 +18181,7 @@ export type GetDiffRequest = Message<"agent.v1.GetDiffRequest"> & { * Use `create(GetDiffRequestSchema)` to create a new message. */ export const GetDiffRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 609); + messageDesc(file_agent, 613); /** * @generated from message agent.v1.GetDiffResponse @@ -18123,7 +18218,7 @@ export type GetDiffResponse = Message<"agent.v1.GetDiffResponse"> & { * Use `create(GetDiffResponseSchema)` to create a new message. */ export const GetDiffResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 610); + messageDesc(file_agent, 614); /** * @generated from message agent.v1.PiReadToolCall @@ -18145,7 +18240,7 @@ export type PiReadToolCall = Message<"agent.v1.PiReadToolCall"> & { * Use `create(PiReadToolCallSchema)` to create a new message. */ export const PiReadToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 611); + messageDesc(file_agent, 615); /** * @generated from message agent.v1.PiBashToolCall @@ -18167,7 +18262,7 @@ export type PiBashToolCall = Message<"agent.v1.PiBashToolCall"> & { * Use `create(PiBashToolCallSchema)` to create a new message. */ export const PiBashToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 612); + messageDesc(file_agent, 616); /** * @generated from message agent.v1.PiEditToolCall @@ -18189,7 +18284,7 @@ export type PiEditToolCall = Message<"agent.v1.PiEditToolCall"> & { * Use `create(PiEditToolCallSchema)` to create a new message. */ export const PiEditToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 613); + messageDesc(file_agent, 617); /** * @generated from message agent.v1.PiWriteToolCall @@ -18211,7 +18306,7 @@ export type PiWriteToolCall = Message<"agent.v1.PiWriteToolCall"> & { * Use `create(PiWriteToolCallSchema)` to create a new message. */ export const PiWriteToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 614); + messageDesc(file_agent, 618); /** * @generated from message agent.v1.PiGrepToolCall @@ -18233,7 +18328,7 @@ export type PiGrepToolCall = Message<"agent.v1.PiGrepToolCall"> & { * Use `create(PiGrepToolCallSchema)` to create a new message. */ export const PiGrepToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 615); + messageDesc(file_agent, 619); /** * @generated from message agent.v1.PiFindToolCall @@ -18255,7 +18350,7 @@ export type PiFindToolCall = Message<"agent.v1.PiFindToolCall"> & { * Use `create(PiFindToolCallSchema)` to create a new message. */ export const PiFindToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 616); + messageDesc(file_agent, 620); /** * @generated from message agent.v1.PiLsToolCall @@ -18277,7 +18372,7 @@ export type PiLsToolCall = Message<"agent.v1.PiLsToolCall"> & { * Use `create(PiLsToolCallSchema)` to create a new message. */ export const PiLsToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 617); + messageDesc(file_agent, 621); /** * @generated from message agent.v1.SearchConversationsToolCall @@ -18299,7 +18394,7 @@ export type SearchConversationsToolCall = Message<"agent.v1.SearchConversationsT * Use `create(SearchConversationsToolCallSchema)` to create a new message. */ export const SearchConversationsToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 618); + messageDesc(file_agent, 622); /** * @generated from message agent.v1.ConnectScmGithubRepository @@ -18321,7 +18416,7 @@ export type ConnectScmGithubRepository = Message<"agent.v1.ConnectScmGithubRepos * Use `create(ConnectScmGithubRepositorySchema)` to create a new message. */ export const ConnectScmGithubRepositorySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 619); + messageDesc(file_agent, 623); /** * @generated from message agent.v1.ConnectScmGithub @@ -18343,7 +18438,7 @@ export type ConnectScmGithub = Message<"agent.v1.ConnectScmGithub"> & { * Use `create(ConnectScmGithubSchema)` to create a new message. */ export const ConnectScmGithubSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 620); + messageDesc(file_agent, 624); /** * @generated from message agent.v1.ConnectScmArgs @@ -18371,7 +18466,7 @@ export type ConnectScmArgs = Message<"agent.v1.ConnectScmArgs"> & { * Use `create(ConnectScmArgsSchema)` to create a new message. */ export const ConnectScmArgsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 621); + messageDesc(file_agent, 625); /** * @generated from message agent.v1.ConnectScmSuccess @@ -18384,7 +18479,7 @@ export type ConnectScmSuccess = Message<"agent.v1.ConnectScmSuccess"> & { * Use `create(ConnectScmSuccessSchema)` to create a new message. */ export const ConnectScmSuccessSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 622); + messageDesc(file_agent, 626); /** * @generated from message agent.v1.ConnectScmError @@ -18401,7 +18496,7 @@ export type ConnectScmError = Message<"agent.v1.ConnectScmError"> & { * Use `create(ConnectScmErrorSchema)` to create a new message. */ export const ConnectScmErrorSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 623); + messageDesc(file_agent, 627); /** * @generated from message agent.v1.ConnectScmRejected @@ -18418,7 +18513,7 @@ export type ConnectScmRejected = Message<"agent.v1.ConnectScmRejected"> & { * Use `create(ConnectScmRejectedSchema)` to create a new message. */ export const ConnectScmRejectedSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 624); + messageDesc(file_agent, 628); /** * @generated from message agent.v1.ConnectScmResult @@ -18453,7 +18548,7 @@ export type ConnectScmResult = Message<"agent.v1.ConnectScmResult"> & { * Use `create(ConnectScmResultSchema)` to create a new message. */ export const ConnectScmResultSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 625); + messageDesc(file_agent, 629); /** * @generated from message agent.v1.ConnectScmToolCall @@ -18475,7 +18570,7 @@ export type ConnectScmToolCall = Message<"agent.v1.ConnectScmToolCall"> & { * Use `create(ConnectScmToolCallSchema)` to create a new message. */ export const ConnectScmToolCallSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_agent, 626); + messageDesc(file_agent, 630); /** * @generated from enum agent.v1.AppliedAgentChange_ChangeType