@kirkchinese/dsh-citeciter 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -4335,6 +4335,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4335
4335
  }).strict(),
4336
4336
  object({
4337
4337
  action: literal("ask"),
4338
+ requestId: string().min(1).optional(),
4338
4339
  topicSessionId: topicSessionIdSchema,
4339
4340
  question: questionSchema
4340
4341
  }).strict(),
@@ -4428,6 +4429,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4428
4429
  schema: citeCiterRequestSchema
4429
4430
  }
4430
4431
  }],
4432
+ cancellation: { parameter: "signal" },
4431
4433
  result: {
4432
4434
  mode: "strict",
4433
4435
  typeSymbol: "@kirkchinese/dsh-citeciter#CiteCiterResponse",
@@ -4435,7 +4437,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4435
4437
  },
4436
4438
  sourceLocation: {
4437
4439
  file: "src/index.ts",
4438
- line: 63,
4440
+ line: 66,
4439
4441
  column: 3
4440
4442
  }
4441
4443
  }]
@@ -4468,6 +4470,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4468
4470
  const MAX_QUESTION_CHARS = 12e3;
4469
4471
  const NEXT_QUESTIONS_OPEN = "<citeciter-next-questions>";
4470
4472
  const NEXT_QUESTIONS_CLOSE = "</citeciter-next-questions>";
4473
+ const NEXT_QUESTION_MARKERS = [NEXT_QUESTIONS_OPEN, NEXT_QUESTIONS_CLOSE];
4471
4474
  /**
4472
4475
  * Normalize a genuine user question without wrapping it in Citation or role
4473
4476
  * prose. System Tutor and Citation Context travel through their own layers.
@@ -4478,17 +4481,44 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4478
4481
  if (question.length > 12e3) throw new Error(`question exceeds ${MAX_QUESTION_CHARS} characters`);
4479
4482
  return question;
4480
4483
  }
4481
- /** Parse the optional exact first-answer follow-up block without exposing malformed control text as UI. */
4482
- function parseNextQuestions(text) {
4483
- const markers = [text.indexOf(NEXT_QUESTIONS_OPEN), text.indexOf(NEXT_QUESTIONS_CLOSE)].filter((index) => index >= 0);
4484
- if (markers.length === 0) return {
4484
+ function partialMarkerIndex(text) {
4485
+ let earliest = -1;
4486
+ for (const marker of NEXT_QUESTION_MARKERS) for (let length = Math.min(text.length, marker.length - 1); length > 0; length -= 1) {
4487
+ if (!text.endsWith(marker.slice(0, length))) continue;
4488
+ const index = text.length - length;
4489
+ earliest = earliest < 0 ? index : Math.min(earliest, index);
4490
+ break;
4491
+ }
4492
+ return earliest;
4493
+ }
4494
+ /**
4495
+ * Parse optional follow-up control text without exposing complete or partial markers.
4496
+ * @param text - accumulated assistant text.
4497
+ * @param streaming - whether the text may end inside a control marker.
4498
+ * @returns visible answer text, valid shortcut questions, and malformed-control status.
4499
+ */
4500
+ function parseNextQuestions(text, streaming = false) {
4501
+ const openIndex = text.indexOf(NEXT_QUESTIONS_OPEN);
4502
+ const closeIndex = text.indexOf(NEXT_QUESTIONS_CLOSE);
4503
+ const markerIndices = [
4504
+ openIndex,
4505
+ closeIndex,
4506
+ streaming ? partialMarkerIndex(text) : -1
4507
+ ].filter((index) => index >= 0);
4508
+ if (markerIndices.length === 0) return {
4485
4509
  text,
4486
4510
  questions: [],
4487
4511
  invalid: false
4488
4512
  };
4489
- const markerIndex = Math.min(...markers);
4513
+ const markerIndex = Math.min(...markerIndices);
4490
4514
  const visibleText = text.slice(0, markerIndex).trimEnd();
4491
- const match = new RegExp(`^${NEXT_QUESTIONS_OPEN}\\n([\\s\\S]*?)\\n${NEXT_QUESTIONS_CLOSE}\\s*$`, "u").exec(text.slice(markerIndex));
4515
+ const trimmed = text.trimEnd();
4516
+ if (openIndex < 0 || closeIndex < openIndex || openIndex !== trimmed.lastIndexOf(NEXT_QUESTIONS_OPEN) || closeIndex !== trimmed.lastIndexOf(NEXT_QUESTIONS_CLOSE) || !trimmed.endsWith(NEXT_QUESTIONS_CLOSE)) return {
4517
+ text: visibleText,
4518
+ questions: [],
4519
+ invalid: true
4520
+ };
4521
+ const match = new RegExp(`^${NEXT_QUESTIONS_OPEN}[ \\t]*(?:\\r?\\n)?([\\s\\S]*?)[ \\t]*(?:\\r?\\n)?${NEXT_QUESTIONS_CLOSE}[ \\t]*$`, "u").exec(trimmed.slice(openIndex));
4492
4522
  if (match === null) return {
4493
4523
  text: visibleText,
4494
4524
  questions: [],
@@ -4513,6 +4543,97 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4513
4543
  }
4514
4544
  }
4515
4545
  //#endregion
4546
+ //#region lib/types/client/request-guard.js
4547
+ const STORAGE_PREFIX = "citeciter:pending-request:";
4548
+ const memoryIntents = /* @__PURE__ */ new Map();
4549
+ function stableFallbackIntentKey(identity) {
4550
+ let hash = 2166136261;
4551
+ for (const byte of new TextEncoder().encode(identity)) {
4552
+ hash ^= byte;
4553
+ hash = Math.imul(hash, 16777619);
4554
+ }
4555
+ return `${(hash >>> 0).toString(16).padStart(8, "0")}-${identity.length.toString(16)}`;
4556
+ }
4557
+ async function requestIntentKey(identity) {
4558
+ try {
4559
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", new TextEncoder().encode(identity));
4560
+ return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");
4561
+ } catch {
4562
+ return stableFallbackIntentKey(identity);
4563
+ }
4564
+ }
4565
+ async function claimRequestIntent(namespace, identity) {
4566
+ const key = `${namespace}:${await requestIntentKey(identity)}`;
4567
+ const storageKey = STORAGE_PREFIX + key;
4568
+ let stored = null;
4569
+ let persistent = false;
4570
+ try {
4571
+ stored = sessionStorage.getItem(storageKey) ?? memoryIntents.get(key) ?? null;
4572
+ persistent = true;
4573
+ } catch {
4574
+ stored = memoryIntents.get(key) ?? null;
4575
+ }
4576
+ if (stored !== null && stored.startsWith("topic-")) return {
4577
+ key,
4578
+ requestId: stored
4579
+ };
4580
+ let requestId = `topic-${key}`;
4581
+ try {
4582
+ requestId = `topic-${globalThis.crypto.randomUUID()}`;
4583
+ } catch {}
4584
+ if (persistent) try {
4585
+ sessionStorage.setItem(storageKey, requestId);
4586
+ } catch {
4587
+ memoryIntents.set(key, requestId);
4588
+ }
4589
+ else memoryIntents.set(key, requestId);
4590
+ return {
4591
+ key,
4592
+ requestId
4593
+ };
4594
+ }
4595
+ /**
4596
+ * Claim the retry-stable request ID for one pending Topic-creation intent.
4597
+ * @param selection - cited source selection.
4598
+ * @param question - normalized first question.
4599
+ * @param mode - resolved Topic creation mode.
4600
+ * @returns the pending intent key and request ID.
4601
+ */
4602
+ function claimCreateTopicIntent(selection, question, mode) {
4603
+ return claimRequestIntent("create", JSON.stringify([
4604
+ selection.sourceSessionId,
4605
+ selection.anchorKey,
4606
+ selection.startOffset,
4607
+ selection.endOffset,
4608
+ selection.sourceHintText ?? null,
4609
+ selection.prefixText,
4610
+ selection.suffixText,
4611
+ selection.displayText,
4612
+ question,
4613
+ mode
4614
+ ]));
4615
+ }
4616
+ /**
4617
+ * Claim the retry-stable request ID for one pending Topic follow-up.
4618
+ * @param topicSessionId - target private Topic Session.
4619
+ * @param question - normalized follow-up question.
4620
+ * @returns the pending intent key and request ID.
4621
+ */
4622
+ function claimAskIntent(topicSessionId, question) {
4623
+ return claimRequestIntent("ask", JSON.stringify([topicSessionId, question]));
4624
+ }
4625
+ /**
4626
+ * Forget a confirmed request so a later identical submission is a new user intent.
4627
+ * @param intent - confirmed pending intent.
4628
+ */
4629
+ function completeRequestIntent(intent) {
4630
+ memoryIntents.delete(intent.key);
4631
+ try {
4632
+ const storageKey = STORAGE_PREFIX + intent.key;
4633
+ if (sessionStorage.getItem(storageKey) === intent.requestId) sessionStorage.removeItem(storageKey);
4634
+ } catch {}
4635
+ }
4636
+ //#endregion
4516
4637
  //#region lib/types/client/response-guard.js
4517
4638
  /** Return whether an asynchronous Topic response still belongs to the visible source and request. */
4518
4639
  function isCurrentTopicResponse(operationEpoch, currentEpoch, currentSourceSessionId, responseSourceSessionId, responseSessionId, expectedSessionId) {
@@ -4524,7 +4645,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4524
4645
  }
4525
4646
  //#endregion
4526
4647
  //#region lib/types/client/companion-controller.js
4527
- const EMPTY = {
4648
+ /** Initial browser snapshot for the root-scoped CiteCiter controller. */
4649
+ const INITIAL_COMPANION_SNAPSHOT = {
4528
4650
  sourceSessionId: null,
4529
4651
  phase: "idle",
4530
4652
  draftQuote: null,
@@ -4579,8 +4701,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4579
4701
  } catch {}
4580
4702
  }
4581
4703
  /** Bind private Topic Remote calls to one browser snapshot and polling lifecycle. */
4582
- function createCompanionController(sessions, settingsScope, request, onAutoOpen = () => void 0, store = (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)(EMPTY)) {
4704
+ function createCompanionController(sessions, settingsScope, request, onAutoOpen, store) {
4583
4705
  let disposed = false;
4706
+ const lifecycle = new AbortController();
4707
+ const operations = /* @__PURE__ */ new Set();
4708
+ const remoteOperations = /* @__PURE__ */ new Set();
4584
4709
  let visible = false;
4585
4710
  let sourceGeneration = 0;
4586
4711
  let activeGeneration = 0;
@@ -4599,6 +4724,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4599
4724
  let effortOperation = 0;
4600
4725
  let pendingRoute = null;
4601
4726
  let pendingEffort = null;
4727
+ const pendingCreates = /* @__PURE__ */ new Map();
4728
+ const pendingAsks = /* @__PURE__ */ new Map();
4729
+ const track = (pending, operation) => {
4730
+ let tracked;
4731
+ tracked = operation.finally(() => pending.delete(tracked));
4732
+ pending.add(tracked);
4733
+ return tracked;
4734
+ };
4735
+ const admit = (fallback, operation) => {
4736
+ if (disposed) return Promise.resolve(fallback);
4737
+ return track(operations, Promise.resolve().then(() => disposed ? fallback : operation()));
4738
+ };
4602
4739
  const update = (mutator) => {
4603
4740
  if (!disposed) store.update(mutator);
4604
4741
  };
@@ -4650,8 +4787,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4650
4787
  });
4651
4788
  writeLastTopic(topic.topic.sourceSessionId, topic.topic.sessionId);
4652
4789
  };
4653
- const call = async (command) => remoteValue(await request(command));
4790
+ const call = (command) => track(remoteOperations, (async () => {
4791
+ lifecycle.signal.throwIfAborted();
4792
+ const result = await request(command, lifecycle.signal);
4793
+ lifecycle.signal.throwIfAborted();
4794
+ return remoteValue(result);
4795
+ })());
4654
4796
  const openTopic = async (sessionId, operationGeneration = activeGeneration) => {
4797
+ if (disposed) return;
4655
4798
  update((draft) => {
4656
4799
  draft.phase = "creating";
4657
4800
  draft.error = null;
@@ -4668,6 +4811,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4668
4811
  }
4669
4812
  };
4670
4813
  const refreshTopicsOnce = async (showLoading) => {
4814
+ if (disposed) return;
4671
4815
  const snapshot = store.getSnapshot();
4672
4816
  if (snapshot.sourceSessionId === null) return;
4673
4817
  const generation = sourceGeneration;
@@ -4727,6 +4871,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4727
4871
  return refresh;
4728
4872
  };
4729
4873
  const refreshActive = async (operationGeneration = activeGeneration) => {
4874
+ if (disposed) return;
4730
4875
  const active = store.getSnapshot().active;
4731
4876
  if (active === null) return;
4732
4877
  const response = await call({
@@ -4737,6 +4882,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4737
4882
  };
4738
4883
  const poll = async () => {
4739
4884
  if (!visible || disposed || polling) return;
4885
+ const active = store.getSnapshot().active;
4886
+ if (active !== null && pendingAsks.has(active.topic.sessionId)) return;
4740
4887
  polling = true;
4741
4888
  const operationGeneration = activeGeneration;
4742
4889
  try {
@@ -4749,7 +4896,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4749
4896
  }
4750
4897
  };
4751
4898
  const loadModels = async () => {
4752
- if (store.getSnapshot().providers.length > 0) return;
4899
+ if (disposed || store.getSnapshot().providers.length > 0) return;
4753
4900
  const generation = sourceGeneration;
4754
4901
  try {
4755
4902
  const response = await call({ action: "models" });
@@ -4823,9 +4970,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4823
4970
  poll();
4824
4971
  }, 700);
4825
4972
  };
4826
- const create = async (selection, rawQuestion, mode) => {
4827
- if (store.getSnapshot().phase === "creating") return;
4828
- const question = normalizeQuestion(rawQuestion);
4973
+ async function runCreate(selection, question, mode, intent) {
4974
+ if (disposed) return;
4829
4975
  const operationGeneration = ++activeGeneration;
4830
4976
  update((draft) => {
4831
4977
  draft.sourceSessionId = selection.sourceSessionId;
@@ -4842,7 +4988,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4842
4988
  if (answer === null || answer.status !== "settled") throw new Error("请在一次模型调用完成后引用;无需等待整轮长任务结束");
4843
4989
  const response = await call({
4844
4990
  action: "create",
4845
- requestId: crypto.randomUUID(),
4991
+ requestId: intent.requestId,
4846
4992
  selectionClaim: {
4847
4993
  sourceSessionId: selection.sourceSessionId,
4848
4994
  anchorSeq: node.anchorSeq,
@@ -4852,23 +4998,33 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4852
4998
  suffixText: selection.suffixText
4853
4999
  },
4854
5000
  question,
4855
- mode: mode ?? store.getSnapshot().settings.defaultMode
5001
+ mode
4856
5002
  });
4857
5003
  if (response.kind !== "topic") throw new Error("CiteCiter 返回了错误的创建响应");
5004
+ completeRequestIntent(intent);
4858
5005
  writeCitationAnchor(selection.sourceSessionId, response.topic.topic.citation.anchorSeq, selection.anchorKey);
4859
5006
  acceptTopic(response.topic, operationGeneration);
4860
5007
  await refreshTopics();
4861
5008
  } catch (error) {
4862
5009
  fail(error, operationGeneration);
4863
5010
  }
4864
- };
4865
- const ask = async (rawQuestion) => {
4866
- const active = store.getSnapshot().active;
4867
- if (active === null) {
4868
- fail("请先从选区创建 Topic,或打开一个旧 Topic");
4869
- return false;
4870
- }
5011
+ }
5012
+ const create = async (selection, rawQuestion, mode) => {
5013
+ if (disposed) return;
4871
5014
  const question = normalizeQuestion(rawQuestion);
5015
+ const resolvedMode = mode ?? store.getSnapshot().settings.defaultMode;
5016
+ const intent = await claimCreateTopicIntent(selection, question, resolvedMode);
5017
+ if (disposed) return;
5018
+ const pending = pendingCreates.get(intent.requestId);
5019
+ if (pending !== void 0) return pending;
5020
+ const operation = runCreate(selection, question, resolvedMode, intent).finally(() => {
5021
+ if (pendingCreates.get(intent.requestId) === operation) pendingCreates.delete(intent.requestId);
5022
+ });
5023
+ pendingCreates.set(intent.requestId, operation);
5024
+ return operation;
5025
+ };
5026
+ async function runAsk(active, question, intent) {
5027
+ if (disposed) return false;
4872
5028
  const operationGeneration = ++activeGeneration;
4873
5029
  update((draft) => {
4874
5030
  draft.phase = "running";
@@ -4877,17 +5033,40 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4877
5033
  try {
4878
5034
  const response = await call({
4879
5035
  action: "ask",
5036
+ requestId: intent.requestId,
4880
5037
  topicSessionId: active.topic.sessionId,
4881
5038
  question
4882
5039
  });
5040
+ completeRequestIntent(intent);
4883
5041
  if (response.kind === "topic") acceptTopic(response.topic, operationGeneration, active.topic.sessionId);
4884
5042
  return response.kind === "topic" && operationGeneration === activeGeneration;
4885
5043
  } catch (error) {
4886
5044
  fail(error, operationGeneration);
4887
5045
  return false;
4888
5046
  }
5047
+ }
5048
+ const ask = async (rawQuestion) => {
5049
+ if (disposed) return false;
5050
+ const snapshot = store.getSnapshot();
5051
+ const active = snapshot.active;
5052
+ if (active === null || ![
5053
+ "ready",
5054
+ "stopped",
5055
+ "error"
5056
+ ].includes(snapshot.phase)) return false;
5057
+ const sessionId = active.topic.sessionId;
5058
+ if (pendingAsks.has(sessionId)) return false;
5059
+ const question = normalizeQuestion(rawQuestion);
5060
+ const intent = await claimAskIntent(sessionId, question);
5061
+ if (disposed || pendingAsks.has(sessionId)) return false;
5062
+ const operation = runAsk(active, question, intent).finally(() => {
5063
+ if (pendingAsks.get(sessionId) === operation) pendingAsks.delete(sessionId);
5064
+ });
5065
+ pendingAsks.set(sessionId, operation);
5066
+ return operation;
4889
5067
  };
4890
5068
  const stop = async () => {
5069
+ if (disposed) return;
4891
5070
  const active = store.getSnapshot().active;
4892
5071
  if (active === null) return;
4893
5072
  const operationGeneration = ++activeGeneration;
@@ -4906,6 +5085,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4906
5085
  }
4907
5086
  };
4908
5087
  const answerQuestion = async (key, answer) => {
5088
+ if (disposed) return;
4909
5089
  const active = store.getSnapshot().active;
4910
5090
  if (active === null) return;
4911
5091
  const operationGeneration = ++activeGeneration;
@@ -4922,6 +5102,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4922
5102
  }
4923
5103
  };
4924
5104
  const cancelQuestion = async (key) => {
5105
+ if (disposed) return;
4925
5106
  const active = store.getSnapshot().active;
4926
5107
  if (active === null) return;
4927
5108
  const operationGeneration = ++activeGeneration;
@@ -4937,6 +5118,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4937
5118
  }
4938
5119
  };
4939
5120
  const rename = async (rawTitle) => {
5121
+ if (disposed) return false;
4940
5122
  const active = store.getSnapshot().active;
4941
5123
  const title = rawTitle.trim();
4942
5124
  if (active === null || title === "") return false;
@@ -4966,6 +5148,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4966
5148
  }
4967
5149
  };
4968
5150
  const archive = async (archived) => {
5151
+ if (disposed) return false;
4969
5152
  const active = store.getSnapshot().active;
4970
5153
  if (active === null) return false;
4971
5154
  const operationGeneration = ++activeGeneration;
@@ -5005,6 +5188,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5005
5188
  });
5006
5189
  };
5007
5190
  const setModelRoute = async (provider, model) => {
5191
+ if (disposed) return;
5008
5192
  const active = store.getSnapshot().active;
5009
5193
  if (active === null) return;
5010
5194
  const operation = ++routeOperation;
@@ -5047,10 +5231,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5047
5231
  draft.modelRouteSaving = false;
5048
5232
  });
5049
5233
  fail(error, operationGeneration);
5050
- await refreshActive(activeGeneration);
5234
+ if (!disposed) await refreshActive(activeGeneration);
5051
5235
  }
5052
5236
  };
5053
5237
  const setReasoningEffort = async (reasoningEffort) => {
5238
+ if (disposed) return;
5054
5239
  const active = store.getSnapshot().active;
5055
5240
  if (active === null) return;
5056
5241
  const operation = ++effortOperation;
@@ -5087,7 +5272,43 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5087
5272
  draft.reasoningEffortSaving = false;
5088
5273
  });
5089
5274
  fail(error, operationGeneration);
5090
- await refreshActive(activeGeneration);
5275
+ if (!disposed) await refreshActive(activeGeneration);
5276
+ }
5277
+ };
5278
+ const setSetting = async (key, value) => {
5279
+ if (disposed) return;
5280
+ const operation = ++settingOperation;
5281
+ pendingSettings.set(key, {
5282
+ operation,
5283
+ value
5284
+ });
5285
+ update((draft) => {
5286
+ draft.settings = {
5287
+ ...draft.settings,
5288
+ [key]: value
5289
+ };
5290
+ draft.settingsSaveStatus = "saving";
5291
+ draft.settingsSaveMessage = "正在保存…";
5292
+ });
5293
+ try {
5294
+ await track(remoteOperations, settingsScope.set(key, value));
5295
+ if (pendingSettings.get(key)?.operation !== operation || disposed) return;
5296
+ pendingSettings.delete(key);
5297
+ const authoritative = settingsScope.getSnapshot().value ?? DEFAULT_CITECITER_SETTINGS;
5298
+ update((draft) => {
5299
+ draft.settings = settingsWithPending(authoritative);
5300
+ draft.settingsSaveStatus = pendingSettings.size === 0 ? "saved" : "saving";
5301
+ draft.settingsSaveMessage = pendingSettings.size === 0 ? "已保存" : "正在保存…";
5302
+ });
5303
+ } catch (error) {
5304
+ if (pendingSettings.get(key)?.operation !== operation || disposed) return;
5305
+ pendingSettings.delete(key);
5306
+ const restored = settingsScope.getSnapshot().value ?? DEFAULT_CITECITER_SETTINGS;
5307
+ update((draft) => {
5308
+ draft.settings = settingsWithPending(restored);
5309
+ draft.settingsSaveStatus = "error";
5310
+ draft.settingsSaveMessage = `保存失败,已恢复:${error instanceof Error ? error.message : String(error)}`;
5311
+ });
5091
5312
  }
5092
5313
  };
5093
5314
  return {
@@ -5095,15 +5316,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5095
5316
  subscribe: store.subscribe,
5096
5317
  setSource,
5097
5318
  setVisible,
5098
- create,
5099
- openTopic: (sessionId) => openTopic(sessionId, ++activeGeneration),
5100
- ask,
5101
- answerQuestion,
5102
- cancelQuestion,
5103
- stop,
5104
- rename,
5105
- archive,
5319
+ create: (selection, question, mode) => admit(void 0, () => create(selection, question, mode)),
5320
+ openTopic: (sessionId) => admit(void 0, () => openTopic(sessionId, ++activeGeneration)),
5321
+ ask: (question) => admit(false, () => ask(question)),
5322
+ answerQuestion: (key, answer) => admit(void 0, () => answerQuestion(key, answer)),
5323
+ cancelQuestion: (key) => admit(void 0, () => cancelQuestion(key)),
5324
+ stop: () => admit(void 0, stop),
5325
+ rename: (title) => admit(false, () => rename(title)),
5326
+ archive: (archived) => admit(false, () => archive(archived)),
5106
5327
  setIncludeArchived: (include) => {
5328
+ if (disposed) return;
5107
5329
  activeGeneration++;
5108
5330
  update((draft) => {
5109
5331
  draft.includeArchived = include;
@@ -5115,52 +5337,146 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5115
5337
  });
5116
5338
  refreshTopics(true);
5117
5339
  },
5118
- setModelRoute,
5119
- setReasoningEffort,
5120
- setSetting: async (key, value) => {
5121
- const operation = ++settingOperation;
5122
- pendingSettings.set(key, {
5123
- operation,
5124
- value
5125
- });
5126
- update((draft) => {
5127
- draft.settings = {
5128
- ...draft.settings,
5129
- [key]: value
5130
- };
5131
- draft.settingsSaveStatus = "saving";
5132
- draft.settingsSaveMessage = "正在保存…";
5133
- });
5134
- try {
5135
- await settingsScope.set(key, value);
5136
- if (pendingSettings.get(key)?.operation !== operation || disposed) return;
5137
- pendingSettings.delete(key);
5138
- const authoritative = settingsScope.getSnapshot().value ?? DEFAULT_CITECITER_SETTINGS;
5139
- update((draft) => {
5140
- draft.settings = settingsWithPending(authoritative);
5141
- draft.settingsSaveStatus = pendingSettings.size === 0 ? "saved" : "saving";
5142
- draft.settingsSaveMessage = pendingSettings.size === 0 ? "已保存" : "正在保存…";
5143
- });
5144
- } catch (error) {
5145
- if (pendingSettings.get(key)?.operation !== operation || disposed) return;
5146
- pendingSettings.delete(key);
5147
- const restored = settingsScope.getSnapshot().value ?? DEFAULT_CITECITER_SETTINGS;
5148
- update((draft) => {
5149
- draft.settings = settingsWithPending(restored);
5150
- draft.settingsSaveStatus = "error";
5151
- draft.settingsSaveMessage = `保存失败,已恢复:${error instanceof Error ? error.message : String(error)}`;
5152
- });
5153
- }
5154
- },
5340
+ setModelRoute: (provider, model) => admit(void 0, () => setModelRoute(provider, model)),
5341
+ setReasoningEffort: (effort) => admit(void 0, () => setReasoningEffort(effort)),
5342
+ setSetting: (key, value) => admit(void 0, () => setSetting(key, value)),
5155
5343
  dispose: async () => {
5156
5344
  if (disposed) return;
5157
5345
  disposed = true;
5346
+ visible = false;
5347
+ sourceGeneration++;
5348
+ activeGeneration++;
5349
+ topicsRefreshAgain = false;
5158
5350
  if (pollTimer !== null) clearInterval(pollTimer);
5351
+ pollTimer = null;
5159
5352
  unsubscribeSettings();
5353
+ lifecycle.abort(new DOMException("CiteCiter is shutting down", "AbortError"));
5354
+ while (operations.size > 0 || remoteOperations.size > 0 || topicsRefresh !== null) await Promise.allSettled([
5355
+ ...operations,
5356
+ ...remoteOperations,
5357
+ ...topicsRefresh === null ? [] : [topicsRefresh]
5358
+ ]);
5160
5359
  }
5161
5360
  };
5162
5361
  }
5163
5362
  //#endregion
5363
+ //#region lib/types/client/conversation-dom.js
5364
+ /** Centralized best-effort adapters for DSH conversation and Read Frog DOM markers. */
5365
+ const DSH_FLOW_SELECTOR = "[data-chat-flow-kind]";
5366
+ const DSH_ASSISTANT_ANCHOR_SELECTOR = "[data-chat-flow-kind=\"assistant-step\"][data-chat-anchor-key]";
5367
+ const DSH_REASONING_SELECTOR = "[data-variant=\"think\"]";
5368
+ const DSH_GENERATED_CONTENT_SELECTOR = "button, .katex, [data-footnotes], sup";
5369
+ const DSH_CODE_BLOCK_SELECTOR = ".md-code-block";
5370
+ const READ_FROG_TRANSLATION_SELECTOR = "[data-read-frog-translation-mode]";
5371
+ const READ_FROG_PARAGRAPH_SELECTOR = "[data-read-frog-paragraph]";
5372
+ function elementForNode(node) {
5373
+ return node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
5374
+ }
5375
+ function parseFlow(element) {
5376
+ if (element === null) return null;
5377
+ return {
5378
+ element,
5379
+ kind: element.dataset.chatFlowKind ?? "",
5380
+ anchorKey: element.dataset.chatAnchorKey ?? null
5381
+ };
5382
+ }
5383
+ function parseAssistantAnchor(element) {
5384
+ const flow = parseFlow(element);
5385
+ if (flow === null || flow.kind !== "assistant-step" || flow.anchorKey === null || flow.anchorKey === "") return null;
5386
+ return {
5387
+ element: flow.element,
5388
+ anchorKey: flow.anchorKey
5389
+ };
5390
+ }
5391
+ /**
5392
+ * Parse the nearest DSH conversation flow containing a DOM node.
5393
+ *
5394
+ * @param node - rendered conversation node to inspect.
5395
+ * @returns parsed flow metadata, or null outside a known DSH flow.
5396
+ */
5397
+ function dshConversationFlow(node) {
5398
+ return parseFlow(elementForNode(node)?.closest(DSH_FLOW_SELECTOR) ?? null);
5399
+ }
5400
+ /**
5401
+ * Parse the assistant anchor that owns a context-menu event target.
5402
+ *
5403
+ * @param target - browser event target to inspect.
5404
+ * @returns validated assistant metadata, or null outside an anchored assistant flow.
5405
+ */
5406
+ function dshAssistantAnchorForTarget(target) {
5407
+ if (!(target instanceof Element)) return null;
5408
+ return parseAssistantAnchor(target.closest(DSH_ASSISTANT_ANCHOR_SELECTOR));
5409
+ }
5410
+ /**
5411
+ * Return assistant anchors intersected by a DOM range in document order.
5412
+ *
5413
+ * @param range - current rendered selection range.
5414
+ * @returns validated assistant anchors touched by the range.
5415
+ */
5416
+ function dshIntersectedAssistantAnchors(range) {
5417
+ const anchors = [];
5418
+ for (const element of document.querySelectorAll(DSH_ASSISTANT_ANCHOR_SELECTOR)) {
5419
+ if (!range.intersectsNode(element)) continue;
5420
+ const anchor = parseAssistantAnchor(element);
5421
+ if (anchor !== null) anchors.push(anchor);
5422
+ }
5423
+ return anchors;
5424
+ }
5425
+ /**
5426
+ * Detect DSH-rendered reasoning, generated controls, and collapsed code chrome.
5427
+ *
5428
+ * @param range - current rendered selection range.
5429
+ * @param flow - assistant flow containing the range.
5430
+ * @returns whether the range touches content that CiteCiter must ignore.
5431
+ */
5432
+ function dshRangeTouchesExcludedContent(range, flow) {
5433
+ for (const reasoning of flow.querySelectorAll(DSH_REASONING_SELECTOR)) if (range.intersectsNode(reasoning)) return true;
5434
+ for (const generated of flow.querySelectorAll(DSH_GENERATED_CONTENT_SELECTOR)) if (range.intersectsNode(generated)) return true;
5435
+ for (const endpoint of [range.startContainer, range.endContainer]) {
5436
+ const element = elementForNode(endpoint);
5437
+ if (element?.closest(DSH_CODE_BLOCK_SELECTOR) !== null && element?.closest("pre") === null) return true;
5438
+ }
5439
+ return false;
5440
+ }
5441
+ /**
5442
+ * Find the current DSH assistant element for a persisted anchor key.
5443
+ *
5444
+ * @param anchorKey - stable anchor emitted by the DSH conversation renderer.
5445
+ * @returns matching rendered assistant element, or null when it is not mounted.
5446
+ */
5447
+ function findDshAssistantAnchor(anchorKey) {
5448
+ for (const element of document.querySelectorAll(DSH_ASSISTANT_ANCHOR_SELECTOR)) if (element.dataset.chatAnchorKey === anchorKey) return element;
5449
+ return null;
5450
+ }
5451
+ /**
5452
+ * Determine whether a node is a Read Frog translated projection rather than source text.
5453
+ *
5454
+ * @param node - rendered node to classify.
5455
+ * @returns whether Read Frog marks the node as translated content.
5456
+ */
5457
+ function isReadFrogTranslatedContent(node) {
5458
+ return node.nodeType === Node.ELEMENT_NODE && node.matches(READ_FROG_TRANSLATION_SELECTOR);
5459
+ }
5460
+ /**
5461
+ * Resolve a selection wholly inside one Read Frog translation to its source paragraph.
5462
+ *
5463
+ * @param range - current rendered selection range.
5464
+ * @param assistant - assistant flow containing the translated projection.
5465
+ * @returns translation mapping state and source paragraph when available.
5466
+ */
5467
+ function readFrogSelection(range, assistant) {
5468
+ const translatedStart = elementForNode(range.startContainer)?.closest(READ_FROG_TRANSLATION_SELECTOR);
5469
+ const translatedEnd = elementForNode(range.endContainer)?.closest(READ_FROG_TRANSLATION_SELECTOR);
5470
+ if (translatedStart === null || translatedStart === void 0) return translatedEnd === null || translatedEnd === void 0 ? { kind: "none" } : { kind: "invalid" };
5471
+ if (translatedEnd === null || translatedEnd === void 0 || translatedStart !== translatedEnd) return { kind: "invalid" };
5472
+ const sourceParagraph = translatedStart.parentElement?.closest(READ_FROG_PARAGRAPH_SELECTOR);
5473
+ if (sourceParagraph === null || sourceParagraph === void 0 || !assistant.contains(sourceParagraph)) return { kind: "invalid" };
5474
+ return {
5475
+ kind: "translation",
5476
+ sourceParagraph
5477
+ };
5478
+ }
5479
+ //#endregion
5164
5480
  //#region \0citeciter-svg:src/client/assets/collapse-arrow.svg
5165
5481
  var collapse_arrow_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSI+CiAgPHBhdGggZD0iTTExIDcuNSAxOS41IDE2IDExIDI0LjUiIHN0cm9rZT0iIzM0NzhmNiIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+Cg==";
5166
5482
  //#endregion
@@ -5168,7 +5484,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5168
5484
  var citeciter_mascot_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAACXBIWXMAAAAAAAAAAQCEeRdzAAAQAElEQVR4nJx9B1gU1/s1CCm/dGNMYjRqjC12BVGwIKAIKCAo9oa9a+y99967Air2FnvvLbH3XhK70ss22D3f+947MztLMfn+PM+wd2dnZ2fmnjnnbfeOEwAnk8nkFB+f4GSz2ZwsFrNTQkKCk9VqdcrIyKD18U6ZmZm0WEXbYrE4WWm7eNrGbDY72aw2sb1o2yC2MRoNTrzfxMREp/T0dK2dprSTEpOcUlJSRJtf1XZqaqpTUnKyaKelpTklJiWKNu+Df4PbRqPRKSFRrhfHLY7VJo4rPstx8ysfO5+bOG6rVbTNZtm2H7c8B963eqwGQ3q2c0imY6Pjcqa2M7Wd6bhFm1/VtjiHpCTluNO0Np+72jYajGK/2vkkyGvP56O2+Xi5zccvzkdpy/OR52a1ZoptZFs5N+o/q02eG+9PPTeDQZ4bt9Xz4ePRt/nY1fNMTlH6gdYlq+eQlqY7t/Scz8HseA58rA5YUvokLi5OXHtxkAaDQezQRDsyUpt/yEjreceizet1bf4Ot/l76npu8/p0XVu/De9fv734Pd5erOe23EZdb1COQ91Gbcv1fKz2bezHmi5etfXKsfL3udNzOgdd25m+50ztPKmpaS680P5cklNSXFJSUvNQOw+9EsDSRGfyb6Uq31fb6ekG5YZKzZMqt6fvprnQetqX3CdtL36HAWmiDtCfg3ZuyvmI49auvb2tv5bqNur1y9pX2a99ur2vxPXOrZ3uiA1d2yiuvVE7Vse27nz499LVPlGOLwuuBCr5jXq3p6Yod0GSnaX4jkjS3QXJCkvxHaMyUzodQGKCvCMYUPGEcL4L9HcHI/79+3f2u1q5k3nhO4LvGPUOtxBL8Xfev3+vMZOepbitHTe11buXz0E9PnEn69rqHZuWKu5kZqw8Kampru/fx7laLBnOfBHV8wRsdLealDaIVSz8yt/50mw2fkGvvHxlSE/7Wml/kWExfkWvLry9TW4vFouZFMGWKfbJ50m/42yxZLrGxcW70nXLw/sVCpGmUwvl3LIyk75PkpOUfhDMpFOOxOzKwcDg6wqbZCw+DqvSJ9y2EUvx9ee2yrTvlT4R7Er7UfuEjluATe0H3ndOiqcdd1Kyg+IlJ6doxyp2roIkIyNT7JiBxKDgH2e55FdVEviA+eCS6Ae4zdupwOB98QUz0J2USfsSbTo4Pmj1QvI2fBD847w+hQ4mNTVFtulzeaA2CXQ6cN5eBYZ6rHxyfAziWLO0+Xj4uLitHjefD706W8xml/fv413T0gzO4txonzZrpgIUKwHBWiA1zVju8bOX9S9dvdd17+GLExev3BU9blLMvt8HL7nQssPUG6HNx7wMCBv6ok6DQS9qBw18VTtwwCvvoIEv6oYMedGo+ahXzdtPvt2l19wLYybGHJi3ePua9VuPTzn31+2eDx4/D3oXl1CRfqsgLa6A/F37dbXwDeBKbRe6ds5mkznb+cg+4eudKEwlfq+eJ18Dbpvoe5nKemYbrU8Msn9UkLBM87XmNl/75GTZP9xOVfqBt1fbNuoT3pbBw+vT0+19wteebwg+BmkiSXOBj5vxo2JJnINFEg5/l78nToRBwj/EJ80Hym1VBtQ2L9wWtK62ifb5R7jN++C2elLcZlY0CrqX63k7PhCV4vn32MZgsIntFanlNr+KY9LJlGyni305Hp9ZtHm92exwrCR3Rhe6aK6pioRbMzVm+jouPrHmlWsPeq7beGz5kDErT4S0mvC4au0+xp9KtMKnP4bB6ZuGcPq8Ppw+86fXADh9GQSnrwLl8jUv9P4bXrhNn3/F21D7C3r9rJ78HrXz5GuI74o2Qxn3zhn+4SOfdR+48PS8JduiT5y+/vvrN3G+lgxLPpUt5bXh80rj43aha+2s74ec+oT7TDtnavN1VfvK3icGbRtusx2cppgNah/ye+4fbqt9pcouby/6J1XpB/oeqyW3haSmKyaSYoaYdFL7ISwpkqBKmZ02GaGqHAm7RpVdaicoUqs3SlnrmZqZvfigE3VOQxzJKN8pfLCqUUps5PTu3TvFUZASrBrT72k9g5xlQTVWeV/8Xb5g9nYOdJ8sTAcXckxcpEynqpL6VWJikvfl64+Hzl26Y09Em4lvS7l3sX38YyMJmM/9JXi+JdB9F2Jz+r6R1Sk/Ld8GW52+aWBz+irIRtvZCJC0+OsWev+Zrs3Ll4E2p6/pO3npu9+FyP3kD+V9EUiD5G8RsJ3zhaDAb20Q3HhkwsgJUUcOHr00NjExtZ7NavlOBSQ7FtQvLOuu7PioJoWUMsW8yNInegkWsquXYMV5475SHR8hx3oJ1pw36YCKPqH1qlPD6/mm1/pBkWC9g6Pvk6RczDneVni3UtaSNLrnDfhguM07VaWM16uyK+ievsdt3ik7BYJaqc374wPn9cyCapsvAp+MsGXo4Hi9ercJqaW7iw+U16u2JksFsx7/Nq/nu120MzKFMaxKEzsP1AkuvI6Ne6tVXKD87+OTQ3btPbu618CF98p79bB9/mO4ZDMGwnchcPohjMGRSe+tEkAB+ChvQ3zzc2MUKNsWFWr2AMkrmrSZhM4952Lg8OUYOzEak6fHYuqs9Zgyk5YZsRg/ZQ2GjFyJbn3no0WH6QhqMgoefv1QpHJn5P2lGf6XP0RhRgFQq1O+kEz52yGSOYkxXb5tgF8rdUDzDlMeRa09sOH+w3+a0Tn8JIGlqI/R5EL2nou+T/h8M9S2SemHJHm91f5RTSSWUCHBSp/wNbdm2s0iVXZZMWzC/OE+kX3F31OlWVUc3j//jirBzL7JCn74WFQTjr3zpGSJH34vMMNeMO9A25n6JeVEVG03m2SnirZuB3qKNypgVOWYt1HlWF3PbZXi+cR4fZoiu6KtyC63eVvRtsg23+X8XbvUSuqn42DP0iWNpcQk7sRP6LhD9x44v6xn/4XPS1TuJCWTpZQYx/mH8EzBSl8q674LRpFybVGfQNZr0EIsWr4Dew78ies3H4KYGLCk0S5t+D/92UxISUrAg4fPcPTEVazZcBCjJkYRmMejomc3/K9QYwJlfcmIeYkxvw/NFOz7hZT9vEWboHGr8e/XbDyy9sWLNy3Z6VFZhL1yOk+XFGGmmLTrrfaJesOr15vXq22WSbl9qr1/0mQ7U7n2qhzLPkkT/oFqqqlmVEqqvU/UfpN9IvtH4idFyLeGJVrP71WZJm/VUcpUWpe0afe+GMlQY3VJ9rbqZfGBqhSfLuQ4TpNgXq/GiFS6l55vvDgxbpMn6kS2kBLPihd3jKMXLKlf9bio7UoOjDMzuMXCn1vLPPn7zeiJ09feq1CjO/LkDZY2WP5QW56fGrP8kVTWJ5YJRonKHRDRfhLmLNyGs+euEdDe0y6tOSEISckpePzkJS5fu4/T567gwOFz2L7rODZtO4L1mw8jlpYNWw5j646j2H/oLE6fvYLLV+/h0eMXiI9PpD1k5IhN6gDcvfuI9nEEvQcvgrtvX3xTMEzeFF+RhP/QyJrnxzBiSwnQn8u1Q9e+c54eP31lOn3djY5Xso7V6sw2ruLVC7tM3w96L1iYSHov2Kp4wdw/Wbxg7hM2kezxUxkDFl5wvOIF2yCk36h4xMJ716IRSQ6evD0akaLFehk/mucrKFE15pNTNAm2s55ZY0aNQtV2kv1u09954o402GVa3GEsuympwrPVS7Bop9klWKV7lQ1TUpJVuifbLtFZtUFstgzfi5fvbezcZ27qtyR1Tp/WFXacy0+NM4U9R9L2yY+h8Kz3O8ZOjiYmukTASMgCByvevnmLw8cvY8aCbegxcAHCWk2AX+BAVK3dC+Vr9EDlOj1R1a8vPAMHwTtkKOqGjYB/45G0jIJf+AjUoXVegYNRjX6nCm1bkb7n7t0HPv790LDpaHTsMwfjZ6zHzj3n8Ozpc9gyTI5HkGHElesPsGTVboS1HIdvizdXwQiXAsTa34fanP5XFy75GsCv4eDMDVuP/WEwmkLoqy7SOTNyP7hSnzir/WbUmUiqHOekSmo/6Nt6JWL5V/tEXc/7U/uHza+ULAplkWaRolaSAVM0BjQLRRNOiOY6KyEWVVLVHTCSxXq2MVQwZsjwjN3eSNJOVg298H4ZyPLEMzXbg9uqvZENgIrLr9mAKXyHZwrHg6VWCVXQHSk82fADRy4eCWk+Gh/nD2XbiuS1kdX5B2INBiF5p9UJMOOmrcXlK3dgy9R3eCau3XqEldG70bnXHHgGDEVF776o7T8QEW0nYMDoFVi0ag8x2p+4duM+Xr14ifSUBFhM6QQcMxFjhtiHXKzyldbZMi20jRHpqUl4+/oVbt95hCPHL2HlmgMYPiEKrTpPhl/QILIre6OKz+9oGTkFcxdvxdk/byHDYnBg3mfPnmNZ9F4C7xh8XjBc3lj5gm2uzObMinRjVarVE0tW7rpA5kckfekTIc1SXl3VPrHkYA+qQFPByNdY3yesfKpdroJOTwqybRAgkna5QfoNOtCpbSYnQWaKaadijPHDURQhwaqHwmDj9JFKm3ovWA0e8sFoAV0HjytNeGyC7rOkzuKUoLRZkeBMlmCF7jMyMxQJfq/RPbdZrhWPKw+HUjj+xQFd8pjDDh29fMa34SACWQPhuboWJLYj+44Z4scSzdGF2Ob4yUswE2DUv7TUFBw8dB7dBi5GDf8BqFyjG+pHjCLnYR32H76Ax09fwGwxZmFGBhgB10r7saTCakpGppEWQxIyaLEorxnp8pU/s5pSxLbiO/xdsQ89tix4/uItjp+6gplzN6FRm4moUrMbqnv3RJses7Fl+3G8exfnwM7XbjzAxGnrUKZaZ2LFuoIVPyoUYXXKGyRYsRytXx6153pGprUdbf+x4uFy9iVPnN4L1nu+ilmkBqJlZMIirr1IDrAXrEQm2MyJIxNJ7ZO4+DgtEK33glXygeK96z3f3JIaWpxNNS7Zi2TmkvE+o1OKEovTOxtq3Ii31doGQ45tGR+06JwQs0jXidiSYuSm62J/qvGrGMKufKdZrRl8wN4nTl89EERyJxjgy/q2jwo2tpHxTuzgh7LVumDWgq34++/nus42Yd+Rv9C93zxiuD7wJK/092FL8cf+C0iIc+xk2IwCPOb0RJhSE2BOI8ajtkUBVwYDz5iCTBMvyeLVqiz29fZ2hiFZAJQXc1qiWEy08L6QyeC024bMmEdOXMEIYsk6xJBlPLujdYfJWL/1OH2Wom2XmpSIdZuOwKfhYHkNvvAnIDaha0Ae/Ke+qFqnN3buPXeWNg2xWIh9UkTczZU8XWc1Tsvmj+qEqClRfWzWosT7VDNKMmCahhO1f7TYsdmeotM7JPbYX5rmkAj8ZI0DqneEPqrNyLcoUpuoy4So8R+RCVHsQTUCL0MvMtLOAMzUR93J2GUXXMt+KEFprZ2SokXgWXb57mUHQzFcf3346Hl0my7TM12+FYFh68eFmlgF8P7nB3ef3ohadwApyXa77sHDvzFuaiw8fPrCw7cP6Sd1jAAAEABJREFUBo1ZjT8vssyZ7cyWkU7gSFSAxgBLkexmlCCSwEq2LyYd+PTrctqGmTDLehWoDOQMBZQq0K3mVB0gM3GHpHvCzPWoVX8AKnn1QN8hS4Vjo/Ey2Y/7ic0bEoOLAPiX/vjk5wib01cBVgZl4zaTyOy4u5M2rSwT//HcJy5qVoRvajU7pfZJsshIpWn9oK4XZlGy6BMlE5KcLROiRCOElGuZqoxMLaQnMyH27JSaPRNecAJRZbouB6mnSn0OMrdcsF2O03Xel2PeUa20sQeiMzWPS1A854Vlm7zaTNd3796z1/sx7WvAjHmb3uUtEiFsoI8YePnIu/3Yh+yfHojZcBBGQ5rWMcdPXkarjtNQwr0LWnWaLmw4km3lU4uQUNHp6YmCoax6FjPpAKi8dwRhVrAlO753AFoOnynAzvpeyLrClmaVIaHaqxk4c/4muvWbj988uiKEALd99xmdrGeQV/4X/BsNk5mXrwPxceGmJMv1bF/8FIbx02PJ8kidSht+wfYaXW9X6gdnWf0UryUH4rS2RYBV5IJzyM+rlUPxulywSj7c5u1VLCmVQ4o0JwtVRZYAOgPegVrVSpJ0rSLDJCs+DPaqCl4vUmg5VpuYdNUZJo3KZZWMvW1QKi/UfSqpOxc16EkH53H99tMzfuRZOn3kI5wLlwJhAnjFK7UnT3EX0tNUabLij72n4R86HFW8umEsMd/f/7zU2IQ725ASJxZTajwtcdTR9ErMw4s5PUEDY1bAWHMCWZbFmvW9wnRWYxbG/Ld9mezAtxjkjWIRYLSIM2HPfc6ibahaqzvZsP0Ru/mYsCeFpZFpxtadJ1Gldk84fUI24g+NkKdAuNXpY1/yxHvh9LmbN2mzQOmhCulzsfebQUuDphvSNTzIvpZtVb7tVVNKxUyaXV7VfhdYSs+5okemX00O2+tYKl5LIKsJfo7F6evqEkUBgp1CRWGCUpPGByWT3fY6NFWCs9O9nV2VekBXiyWT9mFwMVtMIxev2GX4kj2/LwKsnxaOEPG8//0YiuHjVuHdW7vttvfAOfg2GAR3uvDLVu+GQWXDTAMMye8JdPFCav81kJxpFPYeAzNn5sqN0XICkf2z3NkwO3gZ7FYdCNV9mNMlM8rzoBeS37UbDqGaj7RpN+84qZ0G35SzF25F/mLNyDwhWS7clFkx0yVvAMZMXmMls2iO2WT4WjqUto84Y6HVaOqqbvQ1mmlKaAw2m5Z6tSntRF0do7qeSYgVj/Fi0WFJYoazVhYtkybqAfVlTZxH1Rco6qU2RTk4Ibu6XJ4+F6wFPZW2PCCDYyD6fZwWfKZtnMm7dTUYuEjAVPLFy3cnQ1uMB9+5LgXCbcR8dEf7IKjJSFy9fl+70Gcv3EBg2BDyZLtjRfQ+YRMJLqSOS0vk7IXd+02Ie4ujhw9ixbJFmDZ5DEYOH4ThwwZg8oSRtG4+Duz7A+9e/61tn2FIFGD8EGjswEnSWNKaVX4dZD07aK1ZAKqZAzn9prIdMza/qvIbu+ko3Gr2gH/IYGK5G9o5PHr8D5p3mCozLN+F4KOC4Tanj+rYvAMG4NGT19dok6ps5pDNzjFEZ3t+3uJQIicqpLJIsFUpQNbnhQ05eMEJuroCzpjkZM6JXLBKm6JgUZFatXhRW6+jULUt5VRZb0jXtlWlVrT51ei4L34v98lFmulqDVyz3fvPx/9UqiWzXeanRZsKm+bbok2wnJjNZpVS8/LVW0T2mIWSFSMxY95mDXjMOmlJ7wSTCbl6/w6xa6PRtk1L+NSrh5r+oagd2hHeTfrDM2wQKjcYgDJ+vVDEoyXyl/BF8XJeaNGiBQ7s3aF1Lku1VQFMRo6gkACUS84MaTVltfs+wIamf9/eqhyLsBWNigliM2Pe4q0oXSkSbbvOwIsXb1Rax+btJ1Dgt9YiSvAp29Ff+Fu/KdKE5Psoe2P9pCcrqlVcs/a5/r1Dv6fLfjepn/G26QbFpDLZtzOq+zE67Ee/XynBUEvy44UXy7rPhqiaLhN3QWaGg1EqS74TZXmTIsGqgcrfVWsAHYsV7akZ8nRd1eoNmzVj9oQpMdKbyxdsdWXp/cgbwREjce+Bykw2kSEoWaEdOvaejbi4BIXxUklq48gUktL74p+nGDZ4ILxq1kDd8DZoO2QJIiceRNPRpxD4+1HU6boXXpE74dl+O2rQa42Of6A6tSs0icGPHgPwecHqaNCgAe7fvib2xzZjToyUlZlyZrn/Brxs39WxoFWT5pzBykBkB4b/EhMS0bnvXJQo3waLV+6Bmlp8ToBs1m6CsKVdfqJr+32wCNkMHrWSTZa1BKb/ZWQK79g1p9QZy6/dAZVl+KpHrK6Xab44h7pMfUl+plIPKDEmzTkVMw5VrA52gN5OS1YC0TadTaAcnOoFi2i4cNdlRbRdgo3aGBOzHC/gajSKNNp3BNb9Ee0m8cWxflRIxvRcvw3ClLkbtczF/Ud/o37wEFT37Ytzf91SCCpdCWPES6AY0zFx3GhUqOyGiK6DMHrVGXSccQV1uu9D+SZrUbbRalRuugZuLWJRteV6eLTagOptNsKj5Tp4tFiDqs3Xojqt82i7FQWrD0L+AiWxdXOsHYSmrA7JB5hKDcOYsjso2bf77+yYYwhI+S0zOSzIkDfhhYt34OXbD/UaDMZd9QYmZ2XO4u345LsGogrok5+JDV29M/3Ie371Ou5Pi9lQktmLJNhVHYciABMX71DsKiRYkWPV81Wrn9QxNmpVt8isqGNpdOVYarZLBbRGt2o9v0aRineqH1PAANLTabpuG3XRez8Gbds04aQw1SuJ6ApPn71+ULFmd7LxfDM/4xzu/+riV2K4k6cva7bMqqjdKPpbK0yYvh7SkcgQwVwR4E1PEtucOXUC1ap7omHr7pi17Tq6zL4K99abUKbRKlRrtw21uu5HVQLWbyFLUdR3Cgp4DccP1YegQI3h+KXuVJQPXwX3Fhvg3nwdKkesglf7rSgXthwf5y2J9WujHEGYQ3zQqgekCFBnBZq6Xdbv5Qa+rJKe4gDsnMDP+2JP3shAhEwTTpi2DkXLtMXylbu163nu/HWUqtKRJLkelGueWbJSe1y/8ZCrMXySk0WywDU3k8suw+mavIr1imfLUmzQecNqMXJWjIniWEWuHSRYxOos9liQiNUpqRnV2+XyKA4yqoWiVqVoVL0jZFm4Lk2jxhiTEl2TEgX4/P66dPv9z6VasZebKbxckod64cOFXPBfakoKmrSfiArVu9DFeSBJT8TKpA0kA7fAzOlT8Uupcpi4ei+m73pNDLYJJYJXonqn3ahCDFegxmB8U7whfixRCxWr+pC8NkLLlq3Rtl07tGrVGoH0vkwVb+T9uTo+I3uzcJ0ZKBeyAhXDVuK34MX4In9JXLxwRvwWM66jA5IdZNnbetbKJQb4X6RZ79CYkrM4N47xS/aaLYos37z1iBy1nmjUcjzI5BHrXr95j0atWZJ98fHPTbgW0Zqfzv3Q0T85YNpM5u2TP9KrnCbBurivWuyqqpx+hBw7mmqBa7YRlmrcVxmpKJLC7ESo4RHVDpAZCmWMQJbMBQcWbUrlsxYZZxc9MUmU9ajJaTVKnkTgY0+X9ht+6NglY95CTTiPy7IrvNzfhy2G2SwdiJu3H6GSR0d07DUTGZlsK5tFTIwvMDOfau916tAO7nUaIPbsC/RccBnFGiyDW/udKB22DJ8VC0GRUh4EspaIWb0UD25fRnLCW1izVKBkWoxIeP8Kl/48jXFjR6FsBU98/FMAitaZhkqNo1DIawSqe9aA2ZgmQJ8jyD4kow5AScr2mYMX/G+24X+SayUNSK+SDS2w2TLQvd8clKkciYuX7yqSbMbI8dFCdVzY5s7X0PZxvkBs/eM0f9iNGYoAQ4SR5KzPXKiEI4uRTaKQlW17VjoVP45hN8KMIrtaZiVFGWOi2JE6eTVrwyi1wKQ6tkMbw5HzkD05RkCOF9APzVOKRl0TZS1h+137Lxg//i5Ylrz/EAqnL+uRB7cdapxu3eZj+L5UC6yO2SfecwdxSMRqlhJjM0vwhTcKgXdoW+y6lY4WYw+hRMRGlGuxDv/7JRClyrpjxpTx+PvJAx3UMkRohtnTkp4Ai0i/JYj3tGNtq1TypCdNGIl8BSvgp+qjCYTr8VG+aohauVhhwQTh+MhOzgJGw7+B0BGAWtxPb+d9kAWzyv6HpDtFHCebKaI4gq/thqP4vmRbrFhzyG7irNkP53wN4ZQ/GHl+DBUpvVVr9/NHg1JTRS6eA9bOOQxh1WoCNMyYzFpCQl2vYUMfzE63Y4Yl2i7BSqWERZFgqzX7MD3hBdPdILxdrlgRsSAoOWKlUoK2sceCElyVKppuHDDNQ05Gnh8a2bgKOQ/dcbGbDmsXg8vci5ENeOnafcXukgCxmuz5U/5r1bwp6jTqgP0PMtBr3mmUbrYZP3r1ww9FymHy+FFIjH+j3eUMGLWoIJuUKZ0q951IhjzZeQrA/zx3HEV/LYsfqw1HYZ+ZqFsvQLCJyJ7QdgxeCbokmVXhdYbcYocfSM990IvOIuN6AKrvszFskm4be0BbsiFw+94TlK7UAUNGrNCu+64Df+F/XAj7LTmABXh8jL9thSSACRkZXKqf6qpPw2rDcLNUPMXrqms0LJl1Ba6MJXWSA92kAA5jNRzGBbDspqVqYwTSstSHcfhFFA8oQyfVAkW1boxk2pU9KzrADtuI2l3zhVjz/Mjga4hPC4Rg94HzqhAisus0ePn0AjGleG9MibfLDl1Ek3IBRwwfAq+ApthxMx2LDz2GR9cd+LhIABoG1cfTh7fl7ojpzAIQSQ7prRwBmKWzmDHSOZ5If3dvXUWx0m4oWHsGCv3qhTs37c6R4FSLCdZMfbWzRQFmkgMoRNlWuszxqiVb/83u+xd5z4EdM7Kek06WVUmmfoRP/d/Rqv0kqDnlU+du4psiZA7lDVJAWC8zdssx1qAR7KmSBH+kFiDr6z/VsT7ZxpswlpTqJ5uCK23cD5f4KxhjzDiM4dCP23AsjUoTzoRWJsVjBCz2cRtivcGhWlaN8zXef+SS0UUyn6hU/qJQIxw/dVVCLyMd/iFDEBoxEpncmTaDNPZNqdrFU0MtO7Ztobu3Otade4Utl+PQe9lF2l8FjB0xCFLCLXSR4zTWzNWQzwpKY7JgMeFV20zKvqStePTgDnz2gxu+KBqM40f24fTpM+jXr48IWgeHBKNxeDg6deqEqVOm4Pat6/KcNK83WZHsFLk/q1EphoizM+j/YXF0XJIcQJY7o0oWNqWSI2I1COBFtBgHnwaDYTZJE+TcX3fw7S/kEOblCmzqq6/r2bbvPsUfdUuTQy1dpezqxp7oxpvoxwNlKPhRi2AlltLFmGZVmtWqaoVCTWJMRtYCRXXGAm2kPMmuMESVgLM6RoC/q5uxwJWj69Sue+zkFcNnBDznHyTzMfhOnpVBXqMhBVV9eqNN5+mKYio2i9l+MVUb7QNf1hUAABAASURBVP27NyhfsRLGxxzHmvMJmLPrNvL9XBYxyxcqpJco7Dprrp2QHYiy9i9Bs5H47/Gjhzh/7izOnTsnBhPxX/9BQ5EnvxeqVfNAkyZNMGv2bBw5tB9XLl7Apb8uYOuWzRgyZDBq166N6dP5XDIE+Iwp7wWY01KTcfPmDTx8cB/G9FTttwTwU+M/YNN9yN7LQcY/UIWjFUgoLK+ec4fec1ClTj+kpCimx6V7+KZoBDslcP4+BF8UCLWdOHONq71bs3fMIRr9vDc5SbA6zDPr3DCO5pwiwewFp+hK5R3GBSgMqCJbZTeRPktNcxi5lpmhlWu7yrEatvJ37j2L/4GT4jzai4zcT34MxtGTUsaMxlRU9u6JLv3mSTkzZL+TxR2bJkHQq0dXNO4+AqO2PMPsvQ9RtEwVrFoyX+4rJe4/pbEcWEIpPOU/szEdS5cuQWhoCPx8fRER0RSNwsLQoEEgXj7/G4cOHoAT3adTpk6D459jgYPRkA5PT0/s379P+2zfnj8ImLUQGBiEevXqiqVjx47YsYMcr0xZm8gsmasDk5tNmBVg2ZjREcBWnUyrNrUlXYZq+g1fgbI1eoHkU7w/fvo6Pv2pkXBM2C78vmhj2917zwwZGWZ/1TvOaRSkOt5EG46hlvsrwyvUcn99WzCg1G1DtoEp+g314zb0A1P04wXIC3ZRvN18b94m3C/p1oVnDmC7j0Dojx17ZTzNQkzn5tMXXX6fr7EXe7j2zIAEk3Q6MnH9yiV4eNXC4FVX0G/lXdRt3BZDBvbXwOeY+sq9s/SVJmqcjMFSo0YNtG7dGocOHURKYrwmSWPGjEaRIkXQo3tXVHV3w4U/L4j1XGUjK6T5GOUi7SsrGhNwK1WqRCCOwMCBA+Hp5YULxKgZZhPtOw53bl/H4sWLEdywoQAms6ekQ4Mo688OIrsdnJMEZ+i3y+EGzClwrm4vQSgdu99HLBPjVKg/xfvdBy7A+dsgiL77MsBWxqMTxw/fUZ+XlbNciMFPomxf+hD2wUwGxTYUANQNPEvXAdCOJZ0XnNMYAcfp2TLtuWBl3IZWoBgfL6aPEPOHGNIO+wQP5mh7pkj5fFaX3P19Ck+YUbvBEHTsNUe5+6Vxbr9DdfKYJhmqX+/uaNRlNELGXUWVxqPQKCRIA64ddLlLL4ObbTz2dHlhO5H/olevhLubG/5UgKVQsQQ+2YIvHj0i8EtbNe7lP3jz/IUoduDfspnTRTrQRg6P1ZQm2qlv3+DKmQu4e+8OHj18gF7du2PJggUaw8tyKov2U8ePHYWPjw/atmlDN6VReO32KpzsMcOczy/J8XN9sFpZn7M6pGhMqKpMj4GLUL3eANiskpmj1h6UIwo5WP2JnzWgySiYzaYbiYmJX8h0qyFPvH7KPKWtzrqQVXazmnNqdY1mLFp0hmOu4wVE26A5JLoxAq7JspB03oBhy+Dk6pP5v8Ii34gps9Yrl9yKJq0noEXkVKVTlDtYJ7kqmITtR0b7m1cvUNvHF+0mH0OZttvwfZFyeProHlSP84OxM5OaI1XjfDaH19re3rh1U5YwGckWy1BiZ5m08HfiX7yi/RgEGN+/fIWnt24T4JJlkDctGf/cewhjcrwIxfAYj8sn/8SbR/biCZC3aUpKEiDVzsuQrI0NUf8GDRoELy9PpKYkSSbUzJEkqQwftAGT7OEYndfr4AHnUpWjHyKgMmGbjtMQ0nikdo0mz1wvSuNkX9bO7D9UxEO3sNIZDcY8FmV+GXWGDIEfMd5EcTZ0DolqzmXFksMYAVW3ZUgmWct+pOmnz1CKEdSQjLD7zGKYZPOVMXtFfvHTIk1Feq1Dj5lQxzr0G7QI9RsOFSenOhj6cnitbbbbZ1s2rUPlOo1Qd9AZfFYiXMT5+M9eIKCTHlOyVoUsx1zIOzsh7h1mz5qJxuRAsMd66+Y1TJkyCWXKlMXfDOaMNPoOLcY0+g51ugLAlw+fIOW9ZMs3j//BzXNXtY4xJafi6dV75FBKp8KUlobD2w4j6fUbstfTBMhun7+M1IQ4wXx2IKQqHr5keNUUGD1qJNoQE6rMzg4VmxfmtA95y3r2/5DdmEPYKYu8CyJQ4qzBYcPRve985fbIRPvuM0RfinKuT30z1244AqvVMpQdTcKACM8YlRiwMmODNpYkXWnrxwClKhKsZUKQNRdstmiym2MgWpNgkQt2sfAcLYa0UtduPo7/glNrYrIff6LzfkQCsoNmz9+KytW6wkS2ELOFYBtz1vEYdhlRZWHYoH4oHzwUZVtuxM/FyuP1y2ecHpEl9EZH1lRBrM8Vr1q1Eh4eHujdpzfOnjmNyZMmolChQhg/YTyuXb5CLPdCAoQ6MOnta/xz+6HGTPu37MPODbtw8/JlbFsdi2kT5mLTpm3Yt38/1q6MweqFy3Bg/wFcvHgR0UvXYk/sTiQLwFqQ+PwVbl24Tsxqj0UyE3ImR56zCkTp5dP1FnYhbPLmtLO11TGQ/l+clGy2Y84qoRXEqkzIN4MlFeRsoGrNnpgxW9qn7Jx4+PaVo/B+CMFnP4Xa7j18YbbZMmsxBmgTF7sXbNXmE3Iox9LNB6liKUHkghUJ5hieyWxySJmo8T7HahiHygZnQa2paXkMRtNZLg8ng9XqnD8EPxSLwL37T8UJHDx2Ed+XaI5/SNI4HmZKSxIAsQ8IcpSETE0SbAgLD0Ox0IX4zmsounZqJ/aXEytYdeBTS9cjIyMRFBQkwh/qH4c9bl2+qr2/f/0ugUSCNe7FMxzevhc7tm7DurVrMXfWfKxaGU1e8EGcOnUSt+/cw5PHj/Dynwd4+fd9/PP3Q9wne+/CuTPYuWMntm3dTt9bh5VLl2FLzAasWRKL5HdvJZjIvot//QqvHz8V2RarwoYqS08cPx6ffPIp9uzeJd7v3bsL48eNwcmTxxVFNyms/282YRZmzOKI5RQV0MI84sZPFH305t07FKA+277nrPj5u/eeIn/RCHDfOn3pb6vl3w9Go+kBYSCfgg1nmYKVlTDq0M50DUsqZsxinT6V6zBug7MaavWK6vmq1KpWR6iT0lD7I1m0aB03eEwUV1dYRXXF53WxZae8cM+JCYqVaYX9h/9SpNOeS80+4ky+l3ZPipiFwNu3Pgo2WInPiwdjbdQyRe5yGLehByDbAs2bC7lVZYQvrDk9WbDQ05v3Ef/qH/HJvat3sC12N06fOYONG9YT2A7hwYOHIo8c//4FkhNe4i55rqdOncKm2ChMmzYd3XoPQbsug9Ct7xgMGj4Rs+YsICbci3+e3se7N3/jzesXwrZcsXQVoqNicOHCGbwnaX5x6yHZiM+U4Z+0kPfMNl/iq5c4e+AwIjv1huuneYU9GBISggkTJqBevXrCo3754h9H0+O/ZEhMjgyo95ituQDUKjIm0vzhyZQKl26NJ8/kAK8NW48Jh/LjwtTHH9XJHD4+mldHKQXIrgInHIZRChOSlJm3uIY0JSXVXuSSmqUYAXrPRalo1XvBCQn2MQJi9gI5TavLezEXIKqdPHvT4PRVQObHLL8feaP3oIXKXZ+B2vX6YOLU1eIEeFSaeuI5Boz1uU2TBGBtn/r4of4S5P/VFyeP7hf7tWRjQDWoLC/c7Fmz0KRxE9GWoZJEmYUgz9WaacLTOw9x78IN3Lt9C4vnzcfo4cOxbPE8AssqbNoYiyVLFiKy6yBUr9sev1brgO/KtsEnBfzwecF6yF+xOwrXnoKiPjNQpM5UFPGegkI1x+BHt574xb0t6jXqjnGTZuLk8cOwki1osZhw4c+/sGrJcsQuj8LzJ88UKk4Tx5RONuKDK7fkdB/0t37DVoSFNoLZqASsbVbMmDEdpUqVEiwsvxqv3LxJwm77IAvmFhvUXX/HGKJkZk6F8t/02RvgVac3XTfpvffov0DYgx8XDEeeb+pnHjtxmW2FxsxwXFEtA9FSjrlSRh2Gax+UpJ9oXckFZy1CVb1fdZ1aYGrQDaGkxZn0++O0NMNf5Tx7wClvQxvPxVKlVnekpUhjdsioFQgIGyHaWuopi3eWo2emA1NTuvu/rj4K+UoG4ehBWWaul2AR2VccDmG8m42CPVgamfkshhRhd8W/eI70pPdSdm/dxeDeA9G2ZXNENG+JsDZ94NloGH72HIQfqvTE5782J4enPQrWmIgSBP4itcajlN8kVG0qq6art6TXFmvg0SxaLNWar0G1FrGoErEWpYOWoKDXGPxctQdqBXXBlKkz8PyZNAEeP3mK2Nj12Ld3D12jRBgTEnFwywG8f/5Ser90PonkbdOdJ9JlphQ5XJT/zp07i/Lly+PY0aMaCHMEns5rzupBOwT79Q6gMctismdM+K9BxCj0H7ZctFOSk1HRqyucvq7PQyhsbt69QPh4Rl7wt3LicoMzZ0j0Y0E0E06ZoVVfvCwKUsWslrrBxKrsJukGqatyDDlR4kfKHDBDRoxdLaT3o4KN8VG+QC3NdujIXyhRthXev4uXTochS3JcdxEcRoppMUBpG82bORGfky3ytdvvGD9qoFhnVMZpqKVa7JTo/+rX90dUlGRddXztE2KZl3efIGb1KtSv54MWkV3RdsBC1Gm3CpUjYmiJJRBtpGUDLesIbKtQKWwpOUALUS5kCdwIfGWDZqOEzzgUqzUCxb1Ho2zgHFRpvJKWFajUaAmqhC9F1YiVBMgY2sd6UdhayGs4inu0Q8++w/Do/k1xTLduXMPqFSswY/xcXD1xWagCn0Pcq7d48fAxsaH0moXDQrayQWGjq1euoHTp0rh79464EWUYKjsIcxpAlVUtZHYkFyXSEgHSnk5ISBYDnvYekPHSI3TMefIG8Ug7rma3jpuyhlcv5dBLUlKiizb6TYmoQJ3qTxuYnqpN+yfmhhESbDRlydnFaxNLx+nGBRNY8yjTohU/9+eN9x99G2RzLRBmc3KtIyZe5D+eBKiUe0ds3y0lwySKC3L2xnIrGhC2HMnlG/J6fynljny1pqBE+Tq4fuVPKa3MeoIlrYh7/w69evVC586d0aVLFwQTA14+cx5G8t6syvDMe9duor63L7zrBaLXuLVoOuQQqjSNRcWwKALPclQIWYyKIQsJRMvh3jQabk1Wwy0iCpUJXFUiolGy3jR8V64LvinRCnlLtka+Mp2Rv1xXFHTrg9/8p8K9SRQtq8T33fg74cvodblgx8pNYki2J6JI5Rbo228g2ZWvxTH9sWsPFs6Zj5dPnyD17Xuc2X+KzilFiRum2tmIgKhK4qbNm1C7Vi2ey+3fbUBjcjaJtjt+9v3nZj9qxQtk9uzefxa/VIwEAUkcx+DRK+XQ2Z8a44ufwq03bj0ym0wGLwYhR0bYr7AqXrA2xlwp07JjSRkXnHX8h73+32CfMYHp1CC2czXIOZrXB4SP5HGnVp6gu4JnZyQlyoPjGFJkt5kSfKnxOTgbuV0w++xSHAxWZfjooV0oVLwKnH5qCJdP8qFr544wpiUJ8N29e1ekvqZNm4qYmBg7TZezAAAQAElEQVQ0CQ+HzZZJGpWOE7uOwpBsJM/yDzFKruuIOeg46TSqNt+Isg2Xwj1iNco3nI+fPfrj+4o98F2ZDshfvgt+rTNeArDJSgkmAtKvPhMIhLNQwm8yfq09CoWrDUSByr3wffluBMTOYh8VgxcQc0ZrIOTvCyASM3o0iyJAryF5HoGynhHYECtYAw8ePsC8WbPJY16DS6c4Ty5DTCJkk5GuhWs426KWpDVv3gzz56t58PcfLFZwlOGUHJw/x2ufzUwSTokEf8fu09Ghu+xXIiKU9egCMef15/WsoS3HMFBPKRjKYx/mq0gxS2/W4Z3qsEz9wPTcnkmhjJR34dwfvfdZt+lIptNn/lbXgjzFbF0xQwH/HSRvt0SVjiCZ5piHY/1bTgN2tJPPwZjW8sHAw/u3MHPGNIwZO46MellH+OL5M1SqXBl/7Nypya8pJR1pHPyFGc9u3EfbiLYICo/AtHXnEdL/MNl0i0hal6EqAeLXOqMJQD3wbal2+O639vihfCeS19Eku4uEtDJAq9LCIKrabC0ta+DeLAYeLdbSZyTd4UtQrsEc/Epy/GOlHrSvzmQrTiQQxmgAdBcgXqmAchnZj+tQPjwa+St0RLvIbjAonTt27CRsWr9JtJnxzKnJ5KC8V4YBKDaZYg+ePnUCAQH15QmLGR0ScgehQbULc5banItfHe1z0QeWNKSSsv1asQMOHrkofpqnAuGB72x+OX1e17qHJNpmy2iryKsYXaefaUHfVod8OnjBYvCISpXxdglWJwHniYP40VkpKenHylZl9De08piCVp2mCJpmB6CKVxds3HxEYb+EfznZnOQiu2RIO0+d1UpYduI/23pLlshSeUPSO7F9alI8Lp+4iPf/vETXDu3RqtcwTNv0AJ6tmfUWC+BVIfAU8vidvNvO+LEiea+eA4gJF6BMg4UEmijBYgI8DEByMqqELUEpkuCKoUtpPcksg4r2UbXpapLrKLHPiqGLUaz2GOQv2wm/eA2j9TEag/J33AUYV1F7hVg822xBUb8pcK8VrpkVq1dHYcP6WDK70nH3whU8v/tQS+OpqiDyznStq1XzIhAGkurEi+vx4YyJci2NWUu7sjuCuZWzqey7fuMRuNfoIaYHYQUKazFGTor0TaCNp0exZGTeJlb7QvF2nSWWEkS1lDodR7apObTnPOgehaWMltfX/7so4z0bz5i3hScJsvEYgq8KhopBRPw3adoaYpuhoi0uSI7SmwVgDhcgJyZM0SqV+SKkJ8vUWEz0aoSFhcnfErlYMzJMspzo0pmL8PLwxoSlsZi2+RlKBZJ912gp2WPRAjAFq/ZFfrLhfq09Wth9bmTj/Ra0UDCfylbu5ExUZXCRM1K12WoBojKBs1GZ2JOB6c7gi1glQcbgom3dCazlQxaRXdiXJHkAfR6tfL5CgE8synfYwanZdScq0o1RtFJj7Nm5RbHxNmPulJl4ff8pUhMTRI2k5hiYJfh4vHLRsg2Qt0RrMWDqFccIbZYcwlP/xUH5D/FEjQikGgU0GobpszeK9p+X7uCT74N5GhVO01mXrBSB9P5cYcVDcFVc6b1hk/Icl3T1UV1Zp2fLiTYTE5Oc2U58F5d8vuBvbeD0fYiVPCAMHiXd87//folfyrfG7TuPhR1jzpY6+tCJ6u/A3BhTCc/QReZpcDnUcvb0KXEX8vqUhHi8ffI3Xj57ghYtW2J27AFMXP8IpYMWKUxFCzFVIY9+JLXdUDZglgaiknWnkBOyhFhwIQFyCaoqbMWfedA2HgTAai1iBBsKNmOwCXlepewjSjBiFf6MJJqBWLTGMAJiPyHHArA6ADIbetD+3JuvRs0u2+DZ4wB+KNsMK5dLNt+0cSPWxUgbMcMgixn4mhpTEokV76FS1frIW7Y7arZaj1+qdkfVqlWRyGYHOW36lF2GJr8fAlZqro6InhxknFXO1HXl2n38Wr49Xr9+K46xa995XC3DtYO2kpXbITkl7SmtzpsoJ6Nyhjo9W4rdC1YlWHjB6oxGXOGgPV5JeSaH8hwKV+VJi01GTVxjc/qkrpWrZX8q1UJkOviPiw56DZifRXp1Rq9DmVAuJ6z3lLNUd/ArD/pRp5to0bIFtm3bJgWZOsmQnIx7f15BSMNGmLf5GGZvf4YS/gsk40SsQPVW61C05lABvork8TJIGEhlA2eJUAs7HWWD5hI4VuvkcpUAD8f6GMQezWOE3ApWY1BpS5TWdouQAK3WKpZszHHEhIPoe+sU4CkMSE5N9dZr4TfoMNyIYWv12olafQ+RHdocy5ctUeR4NQ7s2ysYLyXuDR7duIN7F28QwKRT9c0vjZC/0gAUrzkKBcq2Rr26vmJb6d3+l3En9r6xD3/ImRgydP1jUrIkkd2mo7tSz3n33hN8XSgceXiUI7Hg4hWSBcVMCzxXdbL9+TM6c05MhCUmqOTiA/t0q2ZtilXdcx6c2TZ8+Sru5I8lWirsVwcTpsm79CrdESUq0R3x5p0S88tay6ZjtJwcEYPjCTvcgbrMCP8dPnwIVy5fRnBwQ0QtXwlDYpLiqGQgsl0k5q4/iIX7XpCkLlZAsYrYaw1K1R0vwFc5bIUCvlWo1GgxSvnPEA4Gh2Eqh0vZVb8nmFMFWNNoYRsyuCT4ZJsZ0IM/EyCNkq/N5PrqJK8MwmI1R5L8xyr230oBbI+WMag/+iT8Bh4kJoyCV7dt8Oq6F/lKNcXaGDlibdGiJdizZRdO7DmNv45eEKVfDDIDMWGj4AhMnDoPLVpFopTPRBQqE4a+vTpLkyQ1lyC1g8pkURiT/rOcAShJIFlMZfzk2QsUK99Wy/cPGLZETIDELFjGvRPiE5IeWSzmz4wGozY8V0zLqzwbxGS2P0pMxGb0T8vUJhBKEkFpF67fp1+tO3FGrJx9ntivYMmm+OefF+LHm7efjNETY0RbjmbLTUZzWQxZL5CjIax6wr179ybDO0BUtwwYMECse3z7Ps4fPo8eXbti2NxYbP4riYC0ApXCV0lHgSSxcqNF+KECMV/oEimjEdKuK+0/VWzLgGAHg4HGkqmCyEMALErEAyXgosX+qhAAK4Wx3bdGrPNoHi3YUTKk/K76Wq31ehQjL7lU3anCexYAJKB7ECMHDDuGhuPOwu/3/XS8KwRo3ZpvxI9lI3Dq+EHyrAzo3akXTu89ASOHuKxGpLx7g9dPnyMpTo7c44oiv4AmqEL2649F3Ei+12UBYZJ2DSUx/Ft//EufmewjFHsPWoTI7rNE+/6DZ8jHxQo88OxTP1tM7CFOxXZIkBXyrrlPUp4uH9PAgehkZS5fdbJB+dQksws/yTIpOW1LicodebBKJtt+w8bKu/TS1Xv4zb0z4uLihav+307y36XBHgiVYYqhQwejUWioaL998woPb95GihJ3HNl/CNr0GYM9dy3wiYwlR2CZdBwiVLvvd5LXeajWUoZPWFLLB8+ndXMINGuUbAav50mKYhQwrdEA5d7UDj6xEJDKE2NWaSyZ0aOZ/E417TvSM3ZvJgHsQbZaEbIJywXNRy1yPGr33o0q9D2vTlsRMOIE/IcepfYWwc583BUax6Bo+QDcOn8KT2/fxZzJM/D3jXu4ce4yXjx4ggylGlsd63vt0hkUrtgCHuQ8/Vq8NF2fl6LEK8cSrhztPZ0Nrr/+OYJSLRY24O9/XqF4pQ64c/+JOI7uvy+A0//q8RggK0+eScR1hh+0yA/Q4SeVqqYdK6407eQwTw2APBuWOkt+smznkQ8GtJWNjj2cwjt3Jo/n28LhePRIJtXbdpmBYeOisth+WeX0P2ZAdCevzwcfPXpEsJ6VE/Zc3UyL1ZiK2xdvYfGMeQhv2x3Hn1jQedIRcjqWKl7rSmH3lSTpLVZ7LLHPegEmZiuW1hJ1J6Ny41VK1mOVDL80i1G2YSCtFa/quqoKyBig1VquI8ZaJkAotmO21IFWvo+S8t9yjWBBzqj87DmUbL4YBE06D5+Bh1ClxTr49t2LeoMPw7PdJgFW3o6Psbj/bNTwaQRTXBz27diNcUMm4daFm8LREDYbpzYJiGpldc8+A1DCbxZKenZFh/atJQumJdjNHt11zsgKrCzVMHpb3JpT/+lSpV0JdD0HSOfp8pXb+JjUUXjEX9W3HTp6iVfXUTIeLuozQ7I/qkv3wGp1Gl1Fgl2U/N04n8BBYhIbjvt17jNb/OCDB3+jtEdXOaGQNV0OBM/pjsuWhtM5Jh+YY0WWVtng5+eH/Xv3youaLr07Dju8ffkK9QNCEXvmCebseIhyDZcL1lOlt1L4UhT2Gi6KBBhgHJurxuxF7Fc6YA6BaZ3YnhmwsgCgAjgCVdXmcso2D6XtoVt4GwZLmcC5CgCjNRBKoK4RHjEHsD3bb4Bn543wbLsZZRrOxS81RqF2911oMPUCvHrsggeBs3rbTSIUJL3rKJF58SL7sSAde4+uvWB+G4/xw8fj5fN/hK0rvGK+Cc3pSrGCDZf/Ok3S3Qw12+1E/oLlcezIAemgpSfmcrMni7hi1rpCq1KqZf1AJY0olUuXE6nfuvMEpUkBX7+Ss1FEtBkvH8j4ZYC1WeREPrY1PH4kKTHJRf+oLrsXnG5/WKHCetpjuxTP99MTZ649zJM3kMeJ2rjg4PQ5OQC779AlBMZ5OvbTFxhIw9aaDWT/zdZQ77Bdu/5AQ64UZvBxiooHDZnkGNaRI0dg2LxNOPTABP+uW1A+VHqtkv3Wo7jfJJLZBcR+saKD2ZZjkJSsN4WYhuS5+Rphd1UMWy7yvbydAFSLtRr45PsYHQAlI1ZrGYtyDeaJALSQbaUqRmZJOHi9Ar5D9qHBDAJax82o3nkrSfEmFPMZj/INFiFgzGkpxRExxIrRghndmzqCsFqrzfi+fCusXbIE5w+cwoqly2BOScLLR0/x7u9/RLGCjA8SExLQfBq0R+kGy/FbnSGoW7euAKYY8JVjvl1HDg5esGOFTO51h3ZbMKLVGEyaLm1PnixePPkzfyjyFm6Mew//ibeYjYWMcmo+Z/Uhk+ozZAQDajNY6Z7OzY/FUqZYC+vWZw6P8+BnUKBOEBv/mWIKjUpe3XD5Gg8QMivsl6KdgFrpnD2ynr0i5kMAbN2qFaKjReGjuJjpSfF4/eg5eYdbENq2D3beMqD/grMI6b8LNdusFRLGgKgUthjFfScK6RVOhCKlFTmr4T+d7LhYwVJszwkANpW2nWQ+O9gk+GKko8ETWSqxQJbhyo2XEZinSuByeRbH9oh96/T8AwHjT6LJ4msIW3wVfmOOo2r7TageuRWV6LuFqw9FjU7b4DfoANl9ihnADBgRpTD4anFszORlgknqPRrgyZUbWDBtLg5u241756+RLfhIsCAXLZiV8b09+wzG927DUCdyG/IX8cCunVsdpTgX88ixjxRAqsUKH3BU1GKQfQfPw7NOb7L5LGIWsQpe3ckODGZnxDp1Fk/yae2lzKjgqj4GmGfVUKf6yC7BclYDF55a69WrdyuL1fCw6wAAEABJREFUVIiE03ehmTyt68qoPeKkVkXvQ/3wUQrNZ3E8TOqYB72N4RjTs59wdtmWQxjT8P7dWzFsUVQD2zJkCXt6Ch5cvIGwsGZYuv821px6hfGx1zF27Q3hmXKow4Nsq1Lk4ZZrMF+03ZTQCYOmTNBs/BY4W9hlzEzu9HnZ4IWiw5m95GypLMMK4NiJaCbtPgZe9Vax8O6xQ6TYOJTzq+9kAWY3sifr9N2JGl22wrfffoQtuY6weZdpuYRGBMJaZOu5cd0gSWtJ/2koXX8WAXUv3Rgs16sV4EVp8UV+rUxOBTNtweqD0b/X73h89TZmTpmB1Pg4h0FFKhPNmDkX31bsR8e4GaW8hyAwMFAxW+zk8K/On95syqmCKVusNlk8IsLNpx927ZPl+/xIMXZUnb4JtLp59+RhLgeVQLRzjl6w/lFdSsGgs7LB95t2nHklHlP/XUMUKtVcm0DSN3iwNtbX0fmwn4zDIweyGLq5X4hk5dkYmbh48S80aBAsSo+4rEq90EsWzkf3kXOw7WoKluy/jw1/vkGToXvIrlsEL7K5PNqsISdjuuhQtu9YRoU3SoDisqryDZfAu+dO+I84LBipUsRyeLZZr9hhMZpjUjl0mdhfDZJPz8iNqDf8sNiH//gTqNpqjSLzk/FbwCxhY/r224PwRVfh1motye9BhC+9icb0PmzpDXj13CEYloHvRsfzS+0xBG7Jtm5qIFsJ+6gBbTfFnHBrth4Fy4Xg4pHjWD5vCS5dUsYxK4/7EsNISYV69uqDn6oPJ0ZfgRr0Oz/94o5zZ04IKc51Lprcxg/nVDWTTcns4OeHdrfoIGeOuHb9Pj7/IUTMrPDRt0E4euIKH2gJdmgJY3nUImeBN+1RXUZZjKBIsEu8LLcPbdd1FiebbZxwbtdthviBm7ceo3K1jnj79r0IB6gj1LQDNDgepH6xZmPD7BItB4ab8eTJY3jXqYNHD+4qE+oAb17+g+CINlh17Cmijz/D6hN/Y8Heh8KGciN5bDznCipEzBdxt5odtqBW123UidGyo8neY7uwSuNo+BOYAsYfQ71Rh1Gr3w40mPmnyEgw+3Ggunq79fD5fTcaLboG72GHUK3NOjRbdQc1u2+H/5gjqNljJzxaridGnY6fiaGY2Ri4LL0BU88RQDfAu99u+JLM1iCwM+iYbd1bEssSq5WuP52AO1MwK9uhVZvawz0OtqBg9LUo7D0RbVt1xtVj5zF57GS8f/oCT+89wJ3Lt/H6/mN07tAdeYuFiyJYzux40m8UdmuHQQP6iuvGZVu2jHTt4YofIoB/B59dyURfWY24//Af8Uix12/eCln2bzRUPESSTDdrv6Eiu9OXByPxE+3VCS8dnhOif2A1zwfH7ecv30YXLNWa5Vc8f2zTtuPiZEZPXosWnaYp9kViDnZe1qKC7EDM0cjV3X0WJQQzddpUeNeoicfk4r9++gpTJ0/G71OjsfFSEmZvv421Z16i45QTKNtwBQJGHEEoAYntsvLBS9Fg5FE0GHucDP0o4W2y/cfhF/dmsWhAQIlYSjba/L9Qoz8BcNZFRKy8hbCFVxA67yKx13U0XXUbTVbeQP2JZwR4Gs2/CJ9BhxA46jhqsQwzS4YvxI+Ve5EXHS1kuHrbDQgYd5oASLIcTp5w49ViYRuUb5LKzHaC9VajmPcYpZomWvGkYzQgytBPtGBDtmvdmm3A96WCcHLXHiyevRgr5kbh6B8nhHNC3hlat+sFpwKRKFV/LiqELEWF4MWoHDwbld28yDaTlUTp/PwUMVFn2ofHkmQBmzUnQDrY67KvAhqPwNJVclQfP9FJxgQbWqvU6ImExOQjbNKxaacOStIkWD+pOFGiszKz1dc7d51+IB900tD2U+nmePdGJp99GgzCzt2nIcdnJDp4TR+yMbLNBmrKAkKTnSV5UDb/DR06REwclJmahpgFqxDQqDV2XU8g6X2ENmMPY86Oe6jEtXtks0WQveUzYDfZf3NQtfUmBEw6jXrEXn6D9gtGKh0wQ6bemscieMpptIi6TZJ5Gd7D96Hh1PNotvwGmq24gaa0NKF2Y7LdmtE2DWZeELIWMO4YvMmW82i1kQC9QTClB8lt3uLBoo6wGv0Gy6xHK56Jf53CpjGKtx2tgDBK7IvZs1T9GTJAzswoSr9itLijyoRsFlRuslrkkwvXHofO7Xvg0JbdmDlpFt49fom3/zyDMTkZe3f9AfeawfihUi/a53xRVMG1h0XK+WPelNHo07sPSrh7omv3Hsg0p2vslZuDkb0vc3+vOowLl+5E01bjRfv27Ydy0svvQ8UcM+cu3KIOtRVXqqzyqFVX2iTlYm6PeK4HtLqI4LMtw6dn/wWZHPdz+rwemrWRO7558wHK1eiBhHj5WAD7pEI5nUTOTobjXaYGPO12h7yjMvH0yQO4VXHDu3eyhH3i+LHoMyUGe+8Y0GH8YVQnu82v61aUD12OGh03ogUZ/lVaRaFMwHzU7vEHQuZchPfve+HTfx+BYD05DBNRmhwQjv81nHKW2O8ymq+6iYCJJxBCIGPwRSy7jiZLrqEJvy6/jsYLryJw8hkRpvEkT7YqSaibqHhZI4sO2m5Dvl/r4IvCAcR+OzRPWpZn6WKKopg1Wnro4XTDNFsn9lnMe5z8rGmUlm1xkGIO6QibkG+yjQSohji2fQ/mTJiOP3cdxNvHT5GhDAJ7+fwxChT3RZEaY2XIqdUWFCwTgq/KeaDUkFWov+Mp8tWJwNbYGMV2VyYBzfGhi7r2v1TUZAgv3IiHj/5GOa+e1F/vRf/V9O8vn+f8WT0r24j01+KdnPDeVf/YB4eK6MSERPGwEpM5Y1jFWr05rSJAuHy1pNZpc7eiVYepmvw6Ohw5ATCnOyjL7PBa6i1Vkd5M3Lp1AxUrlEefnj3wgk7s0qnzaNC4DTaSwzF54y2Ua7RK2lUcTCaG8O6xlVjtLH4jRqlM3nBtksjQaefh1Xk73NuSHBLrFa4xkmykxYKh6vTfixrdd6J5zD34jT2IoInH0WjBZQE8luZm0XcQOPUsMedGVCdb0p3jewwuZrYWa5SChtWo1IJsP78+CPb0ws91pqFG203Spmsu7U72wj2UoLYAorAB16FCo2XEmBtRzGcCKlJbVMxoAFQWBYzCmRIlXLH4wa0Xfu/WC6279CO7sxfajZqBCbPm4Nqf56hDklChRksUqDYK1ej3inp0RIVe0xB6MA6hu1+gyeE4lBi0BL26KkULaQk5901uSvYBIMrAdCbqhQzFpq3HxP5HjlspnlfHQ3b9Gw9nZ2ixmKYjNdVFG2Ouf06IIsPO5Fc7Xbz6YN9X/FSdfMHWvAUb4fpNOWVFw2ZjsGS1zEqYssWX/htl5/wdR9svvHFjrF27Vl6o5CQM6TcAfSavwO7bBvh15BFnK0VWg+WNCwr8yGHwHUCecP05IizCHV2tHYFDgHStAGsB9/6oyHFC4QwwA61B0PjT8B5NLDliP0LnXyLg3UVTkt1gYsSqJLPSeVCAR8Bl8HqoLMfhGgJRSd9hODlrGPzqdkDpUGLKlmsEyDjA7K4Ep/VLdcUeZQYs03A+SpLDVK3lBglAJd0n6woVIApvfpUYfVeF7NdvviuFMgSsoMPJqLXmJsrOOgzPoYvRe+AA/FwmHD9VHY2fK7ZD5X4zEX4kEYEb7yJo020CITkK0/9AcHgTUi/T/990wVnY0e50yr5UveFxU9eifQ8589m+Q+fh/HWgqJApXLolXrx8dyvDYvlYHfKb7VFdRInOPEkl23+LVvzxTth/PNaXYzmZJvG4UI+aXXDn7hNRkvPfTyCro5EVhPaKDb6Lbt+6CV9fPxiNBvG7qclxaN6+Czb/+QoDF15AiXoLNVnjzmKGqNVlOyo3XUGe5Rwhg4KhFPuLwcgV0d9X6IoqHI4hYKlMxgUKFZsuRsW2q1Gr9y4EkS3oQ56r2KaFtOXE05RarROOjFjYc+UYYYsY1Gi/GYV9x+HUrLG4tGAcCnkOQY3IHcRu62T1C5dlEWirtZTv+abhz/i4yyvV2EVrjVIkPUZhyxiFYaOlbNMiK3yWkje+lZyRJijTYxIaH04gYN1D6B9/o9GhOLjPO4zvKtVHEd9OKNqwq5DckJ1P0HDbQwTTEr73BTzmH0HtegHgAHaGdu0d+9FxBoUP9KnOZpfEkYEjJ6+iVr3+wj949fodCpduJSa5dP7aH/uP/GXOzDCVUh5ynoeVVzwnhAtRlak58sgHTttqdesz3+b0eX0x6KRLHwXRBy/As25vMYY12yiqf4nt/ReW5Oly+W/ZsqXoTdKr/sWuW4Oeo+di2+UUuDdZQfK1yqFIQNpWa0h+5xLQlgvGE5KnMBV3+G+Bc/Bd2UhitBgRMmFQCpZsHYtKJG9lyZGpEE5M03QtscwaDWzMeoL5aLtqZHN68NJKAtCDvl8rcjOKN5iH1QN/B45FYXSH3igVuhJ1IjfBq/VaeLWi328eJUDIxRHq4tlmAx2rHPzE5VrlghcK21TmotdoDolqN3KgXGR5WsaiRM1B+Dm8H4L3v0cAs9u2BwSwB2hCIKy78hTqxlxCUOxlVBmzEWVGH0fx/rsRsP4OIg6+QcXxG2SA2moRM0Y49kfWAWT/kg3Jks/niY1SkhPhVrsnrt6QiukfNpzzwiKTNnaKULRWSUqZH9RBSdqodaPJVU4oY+zjXruPcKHZAVGzH+MnRaNDD1n/Za8308f3PiTBH1iUwUiqN9W3bz/MXyCrbdPJwG7fqTtijt9Hh4lHUcxvtmQINVShSBYvpQNmCkYRRr0A4Dpph1GHs631aeFQAmC0iMMxeKopwKpC360gAtKrBdiqteXnyG0gwPESqyzrhdNTve168Z5/rzp9t07HzShDwFg0YChw4xAMu1YivOloUWDgF7mOzIWNqNGSWJBkuUa7DfCi73rSwjLM5VrMgr8FzkJx38nCMxaspyuAUM9NZEa4opqAX4m+861ne/hufoQGWx4gZNczVJxyBoV678HPHegGHbAagdseo0i7KSg+5CDKjz+G4C33Eb7/Fdxn/IGgkFAhwXztHeKyhn+b6kORX/1kUrrsiWo+BTUdg2WKz8DPdxaDlr6sn9mo6SjYYJuhzEHpalKKn4UEKyPhRPzv8ZNXK78o0owTypku3wfjytU7YmehLcZqD5DJecSb6tEmf6CSIocTU4xbFYDtIyOxJjoapvcpWLtoKboMnoCok+9Q0n8usd9yEXCuqrCeyhgc3ijpP104Je7NFKOfAcgs2GoDCrl1RfFi7qik1OexjDIAq1GbZbZC2CIh4QxWL5JVL/J4PdtxFQuBhoDD4KnJS+RGWjaJiuYa5NzU7bQRFZqtxozeQ4AHZ2B9cgXXls2GW9AE+HfZgsCumxDQeSO8mq9A7fYbUas972c9vNrS79C+y4fMF8xdpOYIyYBNFQZssUZ5XStuFsmCq4VHXJ3szgJVIlFuwm6E7X+NBjsfo9Ks80/lFYYAABAASURBVCg+4ig8558jR2M7Cg09gIId5qPe9teIOPAc4bseo+GuJ/CMuojK3v4wpchnomTq+0oFoH7R968pC2AdPrPPaDtmUgx6KnN/79x1Sk7r9m1Q5q+V25GHHLePH+9Bpp6LkGD2gsUElWnpzmazxdlms7js3nP2pNPXQVx8av21fBskJMSLIkg33z64eJnBaFGKHe0DyfWeU+4ThuvjftlDNTzrFf+1bd8eKxYtQeKTl2jbqh0W7b6CFiMOoaj3VJnxUIx1Zgg5TnedkCeOqwkHQzHgqwqDPxa/NY6Bd532mNa+LUqELCUwbRayzCwkmI2AVil8MQGRwElMVavjVgEyCTYCDbXrdNwEn06b4Nt5M3y7boVnqyjUjlyPgG6bSZbXYcqAsUAcVwlRJ7y+iJ2jhqNu+2i0GLwfYb13ILDzeni3XQO/zlvgTd+r3X69AGPVZitQhhiwSI3hMh9N7FxVkXcPxWNW7ccqSlDag0yIYtV6I39QL4QfjkfDrfcRuP0RQvc9g8+6u/jCqz2+KOGL//3ihW/CJ6Lc1FOos/4xQva+RMUZJ1DR0095GkFaLtN46B52Y8w6cvFDJpQsTvhjz2n4BA8Xffnw4VN8UShMPArskwKhuHXn6R2Lxfyd8ng3Mb2fOq2qsyw+RYFZC7Y+dvqM3edAW/3QQXJHD56gqk8fvHuf4Djg3JQD4HKMnNspPOeTSRKyzn/9+vfH1HGTcOXEGbTqNgDzyXguFbhQhFDcm61VyuDtpVEMwIphS1GGmISZzw7ANahJbFaIvjulUy/sHd4Hv5At6N1xGzwJmF4kp17ERrU4zNKM2S+aQElg7bRVAM6X2M2vy2bUpcWPWKxe183w774VAT13oGbrlfCNXIvgXgTGtmsxY/h0XD1zEqNnbkbXoWTDdhmLqnWHoTo5OL7N5yOo8zoCZBT8aT/1eZ+dNsCnQywBkdg3aAYKVx+Ccg3n0TFtFo6RcHoEQ9sdGD5vAVJi7QqBM5G3dmc03POKnJDHCN/9BHU2PEH+9kvxWd5S+K6gN/IVqoWv8lXAp4U88VWtjvh19FF8ETEHnTt0FNdZfbrAv0Yyct3GMa0qc/hGBhkq1uqD1JRkpKenoZx7JxkP/NIfW3ecTCUfozTXBFrMljzao7pIgvPEyfxv+U59F5iFA0Ig7DFAUunWnaeVma4ysxWeZpt6IwsAc33CZJZF2hA2nDx1As2bNMXwgUMwYfU+hA8+gF98Z4qMgFtTaZxXE+VPa5TavHVkxC9A2QYLBBjVMbpVic28IreS3TgB5+dMwIV5E1DKfxKx2HbqeOr8yA0SaJ2J8ei9W1MeMB5DwFgP/25bUZ/YjZeA7nJpSGAL7r0VIX3o+62Xo27HdQj7/Q/UIWDV9u+NHgMXY+q8Ddi18yBOnL2MG1vp87qRBMIFCO8WhcAOK+EVPkuwYQAt/p1IwjtvgEfjBShK3nMJv4nEuFvpJlDYWVm47aEwuyhQ4PQd3Xzflm+KSjNOkqf7FDVW3MbPA/bgq6BB+LqoL77/pT5+KtUIhco2RaFSoShcMgg/u7eA09dF0KFtc8W9syjzNTo6Ex+047PFArOk7YicklPS4OnbTzPdGjYeBVHQ8lk927gporSuLs8vRBLsIgLRYl5og8GFn4puMZsC6tBJOH0daGXjccFSWVM2dtpGRCoz25vSHO2/7JKa2wn9m4OiADfDgiqVK8HTLxCzdjxGifrzid3m0YVfo7GfAGBzGRBmlmAHhEvk2aYTdX70GbOcWxuSz+ARMG6ai/ublsK9wXj4df0DfsRudTqoDLcF/j22w6PZUpLFtcROsQjtuxNB3TcJ0IUQ6ML6bkOT37eLJaL/Tvi2WYL6ndeizbB9BMDVGNxzJJD6mNThNZHACyDtOZDyBG93RaFl5Ey0H3kIHYbtgk+z2fBpsRChPTYhqOt68RvebVajpPcoFKs1TDA2V+YwO7OnXF1xfpgVqyoyXCl8Oaq334lC5Zvhy1qRKD33KQp034iva7VH/rDx+K6oH36p2AKlq3VG6epdUIqWsjV7w6v+cNQOHIofi1aHt3dN3Lt3S+nP+A+E1JLswDPo2sbs078JFlRmtg2OGIWYDfI5gL0GLoQktHrWyF5ibpnOzIAkwS48OF3MgkDerwtXKLx9F9+tjHsX4QG7fB2AHbvlsz069J6LUVPUJ4jnNPYjZ5q2ZnnN/rn9O5LCrbj4159wJmLuPyMKjQbtRzHfWQKAPApNjtlQKpRbSLllAP4/yr4CrKrteVu9ZSeCYoCBSHd3l0gYGAhKSTdIiRhgJyKIiQWiEorYWCh2Ynd3F/1+s9Y+B71X7/39v/M86zmbc4jD3u9+Z96ZWTOszErdLZezBWu9wQBoQk6/wog8RPqQQj2zEy+qyuHsmgzLwO1kCon5SKHaB22DY8g2OIcTqHzXwcx7NewnbsTwmBK4hG6Ga1ghPGKKMCa2GGPiijE6ZhvGTdoOJ98VGDoxDxOSd2JoSD7WZK4h0D0g7F1H/fNbtG6i5tktAuUj3CwrhOvYufCML8O4SBIhLukYHraFViGcg/Jh57ceKtZT0E8/koQNcxtIOXOhki8sOtYfK9QqshtOg1VLkx8ob5GIPyUU0WVoCjpquUE6YD1Xx7KKw6BsHAoFAqACgU/BIIDA6Edg9IO5O/3tgFWQJzaU7CGDvDyhjR0r8+clWz+5Tv/St+dfCES8R8UvnPCSIWzbnZ9ZKFLCto227okgETLzozDe7bcvYhNM/h/f/Xb73rN0qQFjed+XjlJDcEY0X3bIyFSsWr8HQm3Zz/sMfl0x8b8KFD40p+B+3ITEBrxI9ZbBwpKrUHZdzbsMMP+O5U+b/T+eVdggivNt5F2rNIat5KJDm1Qpq0429yuEysiVKEgkh/jaIaD+CaZEz+ShE1diOGvfTXBi4AsrgltkMYZHlxIY1sI5eBNcQgowKrYEIyML4Z1QCu9JxRhPyzu+CP6TyzDEJxvDgtYgKG0PXAmIWzaW0J35FPXPbqDp1W00vryNJlp1L4gVP97HmS3rMcx7CSJJEAzzy4SB4zSMJlYdEZYPNwKw7tDZ6KcXDv1RuTD12cyVshGJI0O+8jkrird+8qJV+r9Vhy5Epz5W6NJdG10GOaC7Vza6KwyBot5EKBkGilYQlIyCoGwUSCuIQOkHPdsYjKLPrmUZgVZ/SiA4KABf+QixRtHgn1+bXWE4z39YMjYHTwTAaXM3cdJij4KtBwQl3NmxkVXRf/z8bSNTwuTy8TEPvHHgx49CYPDE6at5f3QfwqYmNnaX88DTp0J9l6VdJPYfZLuc6gUF/APg/q1c5/v4hV8x38+96njn/IZ6KCnIw2WsPyIyL5DvtxgScq58D4eWKDDLza8oQ8EqPhjo+ptP5WEKQwZAYkDDcethQSxnMiYLj7cs5+bw8uXzGB8wDdqui+FOF98pcBOGhhITkUkdFVsKr8QyDrihgevhErgOXpPotdit8E/eTuazGH5JxZiYUozomftgNTID9sRqCfMOYUzYOuwuKQe+PCQA3uTAE9YtNL64SVb5Jn/v1A4C3PhM+KWUw8k5EtbD5mJsxGZ4xWyB9ZilkNMPh7b7Eu6T8nDN+M0wYqX83Bxvai77582RRGm+LjLmkBg4FH2VR6G7rAXkdP2J/cIE8DHgGYdAhS0OQrYYOCdCxyYaxkNSoWU9CX90VICWljauVF8QWbhfmeRf9Oz5RZSjVuTHr920D84eQsX8wcNn0VrCkXfRlVUYhfsPn1WwNr5s1yVvUs4A+Onjp1YMgKXlx8tFaG0aqO2Lum+fQZIZuqSAq0V9X+r+VuL9f2C5/0Hb3xvfNKK6+jI6dmyP5MVkIifuQNeBbug20AF63iU8rcXDL6OF7IYezy5s5BeHdaZiwDPyYsHcFVzBGo7fhJFjp2Lfylx4RK+Cm/9ChE9aAiuPefAgwI2IKoRL0CYyraVkVksxPrEUvsk7iJkK4BldgHExmzEhngCYsA0hqdsRmlqK8CnFiJ9zAEM90jB8zFRMW3IYvjF5OH3oIGc6BsDGF2R6X98D3t5DI2ND+rrmKb32/hZO7yCT7pOJgOi1iAtOgy0p5AkxJHDGL4eKWRy0h86HXVAJF0csFGQ0gXxCzoAbuR/IFjPBbCO73rhC9FB0R9fe5uitOJKAFUqgCxFYz1BgPBXjYA5AVsHEAWgsvKag7w99+wS6CdKha5tIgmUoukv1xprVuSKT/PkXle4/EMsPIPy+Ce1jc1HCvoozsHYQmgdcrr6NjtJ8HnFTJ97M6s4l8vPZMJuWP5rgVvRXW6zduP9Ei7YCAPWswjjj3X/wFOqm4XjO+hc3/qL1xj+o+v9r1fzQDpYew4e7Q3agIqauOYkBlrPRtvMAyOoF0sne1lxWz/fajhVyqjy1RRdH1jiJA9BkQgF0Ri6HFfPx/PLpDo9CiN9kHKwgX/YzCYTaJwiKyyXG2wEPAqDThOWYkLgDvoklxG7bEZy6A2FTdyIgqQgTYvPhGb4OEydtxqSMcsRO306rFGHT6P2ADESHz8OU+QcQHLcGdy6TdXhHgHt7n57vo/b+RXy5cRI1d89zk8zAiNd36XS+wIvblzExLAtJYTMQH5gMU9fZGEl+mb7DVDLFc+AUup2HfUyYKSZ3wZCl9cgvFBczsFgg68KlN24L+mqNJwCaEoDcIKfpxYEmBt+v1ndmDIYiMaGaWTitUKhbRGGQjg9ad+iLAH8ffPvy8Tsbfvt5z8/f0q8/hGmEHoa1uHjpOvTNI/Ct5htZ0WfoxoZWEgDZKNiq09dZS412L1/yUW8tRQMHhS5GC5cWXWrRzp5vLLZzi+cf4lL1Xe4vfPrwVhhk8u1/9SH+vy8m28VDaWbPzsDvrWXgFTIFE2dVoauCN9p3k4e8dRopwHwBgGLwidiAhywYAI0SoOexBmZ00XRHZJKQKMBgp0WIGE/+32XW5uIxmUJioZpn2LC+GA7euQifsQduvksRmFyMkCk7ETaFwJe2A9HpBLaMXcR4RQS+fAQn5CMxowzJM8uQOruMvq8E02NnY07qUnq9HAmp6/DuGYHs40PUXqnEs5I1eHWYfMInl+m1R/j09CruXT+FW1dP4fObB1i+PBPlWzdg9rQsLIxKxLhxU+HuuxKOHvNh4JwOl7Bi2AXkw4JYkMUkjX23wJj9X6LcNgtHKQ/Jgq5nIWT0gtC2Q29IkaWQURrJRYeiwXcGFLNhM/CMBJ9QDEIlY+FY0TAAKiYh0LaJR49+plDX0MShg0KfR7b7jmVOftnD55+b3vme7a948OARtAiAL1++5d1s+6p686KEFh1tsWP3cVbgKcG2/bKm5ny3kqirZYep6euf8iB0e+smd952FThxqhp6NpGo+fb5l/7c9w/1X2rp1z6iuPVGWVkxukrKQZNOSNDkTPLfitG5ry069zKAotMCXjrFiyzHrBeZXxH7EQCZSmQA1B+9hgsMDXJ2xBdeAAAQAElEQVTonSaS3zR2NdZOySAgXMQ3EgMNLwgk7+/j+e0LCIhZheT5h+HhvxTOXosIdHsQOXUH4glQ8Rk7MXnuHqTO3Y20ebsQnpSPyOQCpM0pR8aCXYgjFtyYlo6cmdlInVWGxQs3cmB/PrEbN5elo+4e+VJ1b1FauAajRrpDUUEZvXrJQlpaBoPllfHbb38iLiYcz+5fQmVhASJGhcDIfjKGei6BiVMK3MO3wCmogLO4VWARzFic0kcIUDO/j7X1UHRcCp0xBZA1jIGxzSgo6gxDl962GKjlA1XTCKiZRwksZzCRwCUWI4GiJYCP+YfCCm420UoERH37JCgb+EKy50BEhgfjzesXIhy+F4pYf7B0/4xucAA2fMbrl6+haRaBO3cf8+IV9jladGHBaBtsKNxLjmKTXK0wzKYVA17Lz6waBg3tU9LWPhaqoK2bxgcI+z4OHTkLI4d41Nd9+zlZ/R9m93+xJA88N9Xi8cN76D9gIHTJIVamExm7eCf5dAmQ6GsGif52UHVbBTVafPP4GFGGgMQGi/Mx38iITFQ/kwRivmzYBBRC1WEahkVuhWPARpQuW0GgE8DX9OoOD5Ewtbp+ww4ExBUiOm0b7JxjkDhzFybP2U2g20PPuzjbpS/ai4xFezBr8V6ETVqH1IxiLMo+gMS0ApxcsxRLF+djevpW7CmvAF5ew5PSTcCbm7h2tgL2lub47ffOaNHiD1rd0OKv3mjxZy86lkSL3zrRcytISUrCztoEJZkZuJBPqt0hCbr2iRgZXgC38K2wmbgZ1oHbOABN6MZi2REWC2TbOwezrgxjCzHQchps3cMxeeFu6FuNQ7c+xuij5IG+iq4ExglQNYsU+YAC06mYhHLQCSwY/AP4ggV/kVhQQd8XGubhMHedir4K9pBXUEXu8qVorP8mMCKzWp/e/Nx7pkYQksxKfv74AVpk1gXd0ABNc17cwts5r9+8n5m8gWzMF+sZw4tQRftA2ofFZD3mDNjWuikgRKh82b33GMyHJvDGkPX//KP/CE4KzPZ/M79Ck5sGWFtbQc3Am/7peGgYuyB47kF0lXOH9EB7SA4aAs1R+VAeupxv/GG5UqZ6WbzPwEsI2Jr4bMUAs2RivgVwDCqEycgFGEvCwsozB7s3buLml8XlxOER5o+9fXILcVMKMHvZMUQFpmFSXBamLDyIqXPLCXD7kDpzO9Ln78SCrH1YsHQvZi8qQ3zKeixefgjJMUvw+tguZK/chbS0DXhwnUztk0ukdJ/hZEUZlHtK4q8WvxHI2kC2vyJ69ZFDqz+74q/2PSHVoxd69OjB32v5eyc+CNvKxgblK+ZgzvgJUNIdj9HRWzAicgvPvtgEbYM5yx/7CQFqVqPIKmLk7RZAmxhwkN1cGNp6EwD3IZ7cg6CEHAwdOwku4xKgbjQKfRSHQ07bD4NIHTNAyiiP5M9MKauSX6/SDEaBFVVMgrlKVtDz5YC0JcFm5pyCnrLafILTpvWr8P6dMG+FjQ/7W0mXyCdkAGRhHR2raJy9IITx2BhYno5rZ43ctTsYAAeIxne1ZBuFxQDsGByx5IlQB2jTFCiqAyzbVQkr10Shhuyn/aXv/4UF3//L8d9Nb3JSHLr30oHNiDnkx7jD0jUALpGF6CJjh96D3bjKYy3LlJxzoOUhlFCxC8GYj4HPeHw+XZwiyFumQdUuHW4RRTAZNhd+SaWwGbMUe1kD829PSXtcIxa8hYaXd/DtAQHm0QXs3laMJGK+SYkrsSw+gQBZiIXZhzBvyR7MJ9BlzC3FwszdWJy1BzkrDyBtRgGS0vKxePI8NDypRmZmKbIyC9HwmliVwP3kQiXSA33Qh0DVqXN3TI6fhHGjR6BNN2W06mZKPpA5OvfUgNvQIYgIDkOnjt3RouVfHIS9+8igce96TPcJJuZeh7ExW2EfWAC7kCJYEgtaBGwlhZ8vqvBhG+/n88ofBccFUDUciUnkHiTMLkUqMXbakgOYkXMMs5bvg3doBgHUl4A9DNpmnhgyKgZaJh4YqOaKfmoe3GQrGoYQ8CKgbBLG/UdVEwImgZMBlAFR0zIMdh6zoUuiVLq/AdQ09BEdFY6rl1nYpk4QpT/UAzTVfiQR8xk6llE4ffYKv84mZEFbsOpoAmD2qlIWqxlUK4x6FUywMK61vlN49NInPGpNJjgwTGhCtGPnUVi6JPLuBALi/69hlx+qZX5QTGLw7SwrhZS0HIaMmU93qB96kZJzHBsPw1EL0U3GlpSdC3qpe5KzvUVoMC6K+YmZz3AcA+AmujjboOKQAWWrNIyOLeMnj4U5vCI34eB+Mo8fSYF+JF/kE6n49w8ABsRLh3h2ZHX6Eozxz0bh0hXYvnABUmZsw4o1h7Fk2R4sXkpsOGsLluXsQ1b2bqxafRCjxszA8aJ81L67jZioLJypPEHqmsQHmfYbR+mCq8jBQr4/Du/YifSkJLRoJQ9tqyBUX7sHT980ughkmjupI2iCL46UlUNpsAra/9kGrVq0RITXCOQmT4Gz/2qMjSYXIjAfTiRIbENKyBfcxgPS7BywOsVBtvP4dlN1UsSSfdUQm74FUxbvQeLcMmLDcizPJwBm78f81ceRSoyenrUb81cd5OBMmrcT0VPXY7hPKoxsfTBYy51Mtgv6DHbAQFVH9Fcbgf7qY+l6DEE/1bEEVG/0VhpNLBlGQI1EN1kXtO6qje6S0rh+5RJXvRwXIhPMAfj1M2dAMQDNnCaBV1i1Y8PLd3EACmPfalvxTghiExweSyaYM6B1k1+QsBF9197jMGcAJBPcIEL7L8Mp/yixqhfXlP2wbVMoOKjD0ycP0a+/PBxGTIOuTSzdid50EobDwTMZitaxxIbOkB7kRCqPnGLvYgJgJnfAWaGogVcBAbCACxBj742wmrgN2m4LoGKejKHBhbB3DERizEJSq6WorDxJALmHkoI1uHa+Cpcry7EhLxvr12Th3OHt+PT4AnKyCuE/cSFeXDqGrcvWYNbcEuTlHSa/Zw+WLCrGvNkbsXbNAazPO4T06QXYtnUPqi9dxczpueTz3UIdsSvqXuHQumwMl5PBnXMXcZCYl/t87YxRWCSoyds378DEMRIdBk1Aiz8UMGfKNNw8cQYyvXqhNbGgbIe/4GzlhPGRefCM2gyX0C1wjiBFHFoCm+AiGI0v4MWwrFZxoNVMqLrmcJ/wjw4D4OGbihnZR5FdUIW1xWdQdeUx8krPYt7KCmwqv4CCXRewec8lrC4+jRVbTmDVtjPI2XwWy/JPYFbOTiTNXo+EmRsxeUEJvMPnY6TfdLh5JcLEbgIshgTAdlgYDKy9YWw3DiN9EqFlPBRdu3bHvTs3BFP8Q3sW5iN++fyJbrwYnLt4gwemjWxj+faOFu2ssHp9OTfBbE8wN8Hv371v+UFow9Y+PnnFI1EpftM4v1miSPZpGBOCG+pqCGT/qwXb3/d6iCdfNvchrvnAnVJrKzNoGo2H6/hMusPG8DBBf9WR0HUKh4yOLznSo9FzoB36013HYoCKTgTA0cz8/pCe4gDcBGsCoNHobCibxsHCMxeJ4dOxcfYSjA1di8qKgxzwsREhaP3Xn+jYmURAiz9ptUX7Nl3gaKCNbetWYsP6MsxbkI/6N3eRn7kc06duwLq1FdiwrgILZm/A1IRMzJ6xHps3VSJv7QGk08V6cruaZ1jqH9NzzWvkTU3EofyNqH39HhP9A9CijQL+7O2KCZFLuBJMnJGH3/p6oZuyH9r2H4VuUgNx5+QZbFqWix5t/oJKl3aQafMnho2dhonJZXCPKIRrVAnsQ7dxU2xKvqABgZBlRgaYp0GFAXDMWrSXHUqM5UbMtwu5W8/g8Lm7OHrxPs7ceoH9p+/i3O3nOHvrGXYeu46qa0/o+DlO33iCk9ceEVAfYc/Jezh2hfzXa89w9MJ97Dt9H3toVVbT15ceYP+5ezhO75VXXiJm3YER43yho6uDyqOHBE3y5Uer+JFvfP/4/j0XIVeuCSJE2zJSAGB7K+Rt2v2W7REWTVVvyU0wC8M0NdV1zJibL4RhOtg1uY9N43+g6uRlGNixMMzXnwRG4z8B+C8NbRgAxfG+iPAQ9BtsCa+wdVA1DsIgAhwDoJzGGMgb+aG32jj0VR4NaTk7DDCOJBO8lc/wYCXrjAEZE5j7beEFoayw05bMk5XveqhZxEPHZR4WJ83E8yM7yBmfg8INW7Bk4XR06CKDP9tKE/DaoX3HHugnOxDt2nZAG2IeKVrTJozEzs1FuEssiffXULm9GLnk361btRub8g4gJmw+ls3OQsmmcmQu3ILpUzYga1kR3j4mUUM+IPMxPz64gre3b+DrhzcwMrFFKykndFMLQVt5Hwwi36qt7Ci0HziOGNALXdRD0bKjJjauz0PNsxdw0tHBAPKGNAZpInBKObxit5CS3wK36FIMiSyGQ0QJLOj/NCYxouu5HjJGyVBhHVVH50FCfhjayQ4nX88T+ftucfAdu/IUJ64+wvnbz3CMQFR15SFOXn2MI+fv0jMBr/ohTl1/glM3nuIkPR+7/ICD8fydlzh17SGOXyYAXr6HW69qsb60Aqpa+jC3tIWtnT1mTJ+GN6+EOcjNdQEiq8hVcNNXvHzxCppm4bjHRr3SzafMOmZ1HsLDMCXlx7kJ5sPPa+taCU3JhTjgb/OXbLnCWyp0tG+ydRWKUS9cukX2PJxoVaDXfw2v/MvmJGEGreD35eZmoauUAhxHz4e6WXhzxYaiQSAG6/qgr/poSAxygayaF7rLWnEA6nsXYbDDEr5XgqlflqKyJKec5XpZdbFD8DYMCdsGXYcpULadhiVh0QSKS1i5cS80Ne3wW6tW+K01Kc/fJODu7I4lGVOho2dGDKVId6Q2OnXXgEa7v5CXFsuzGbWPyG+pe4TKPRXInrcG2XPXISdzG7IJkB/unsXtc5W4erIKl06ewKcnZGJe3ULT8+tciID8n89vn0BmsCn+lA9Gx8G+6DjAA7/1tEcbGVd0VpqAzmqh9EwM2UEf8TFh/LykTvSHez8J+noW/BNLMC5mC9yjtsItpgTD4sswNGYHLIOLYexfyDdL9TVMhhrb4D5qDTr3GwJJjWi0l3GClfNYaBvaY3NJOZ58Agfh6duvcOb2Gzp+SAx3D5cfvMPVJx/5e1VXHhBg7xEQn+HQ+TsorjhN77/FjacfcfzqUyzftANaOvqYP28uXrN4oHgwZN2XH2bBfCcdIaP1DffuPoS2eThevX7Hp8b3VRsvxAE727EB5gy9UqIm5S350LiPolxw9srtJzkAOzs16fJUXAPu3H0CLfMQvGHTv0XNiH4KMv9LOy9B8QptNvbvK4eEpAwshk7jomOg1nihTIgWLxui1VPeCT1UvdFjsAcGaThBlUClP24r73bFupiy+J8JsZ/FxK3kmG/lxaMOQQJTmA6fjcEmMdiQNgV4fg3z58/Bn3+2Res2ndDq9zaYnpSCe2fPQk/bAC1a65HynoyKW1yWIAAAEABJREFUQ+eg7ZhMQFSBh5UxrlSRWfnwAB/uXUb2ojwc3VGO1zfO4+29apw9ehjvbp/ncUW8uys884IDAiCtxuc3+IX5RAzYT9GMzK0npEwmQ85jKdowx11mOCR0g6CdsB/S5qn8M4SECM2DMtMmY4H/SMyeuxYBCUUYRww4MrYEw+O2Y2RSOdzid8KaBIlpUBF0yAr00U/kANQckYNOA9wgpRGFHhrhaN/PA20H+qCfiiM2bN5MYHqF/PIKzMvOw9Vn33Dp3isMHzMemWs248bzL7S+4tbLb7hJa2JYDHr2lIa1wxA4OLvByMwSxsZG5PNuac6IMPKp/bF+8B8V7nXNs0Suw9gqis9Lfk4M312Ob89s+rP7EBw/Wf2kob62PWt+LzbBrElMq6bG2halO6v28BarXZ2bBmj5oZbUzNt370jCh4pa8v9qP/Cv93j8GG65cP4sZGQGwNAmCspGIRio6Q15XV9iPWHJ6/jwaH1/NQ+06+uIwaahpOzWQtVxGo/49zefwYPRrELY1H8rLAOLSB0Ww5wAaDexAMNjtsNmXBaUTGNRlD6VB5tnZaSRumxFZvc3+Hp6kWB4j1D/iSQABqJFW02sWiNM+9m4sQhqJr7oNdCYWO0QZ8Gv9y/i7Z3zaHhJoHpDzMae393izw3ProvWDV7twqpeePULHTcyf6ihFnqGtvhzwDjoJh+B+axz6KToTX61ISS0vWCYfhbGM87iD2LH1NQM/hmWpKbgzO4CJCUtRVjqDngnbMOYxDKMSS7H6JTdcJ20EzbhRbCMKIU2CbBug8dC1W0lVJznEMO6o4d2AroRq0qqh0NaJw6dFYPRro8D1AyHosdAM/xB/q6981DoGhgjKCgI7u7uMLGwxlifQEyYGAojU3MMHeqM69eu4vSJSuzfU44L586isV5gvGbQ/WNjUnMT0r8BsBHle0/C1lkYr1t95R469R7BAdiltwtu3nnEKmHZvmDeuJxvDv786fNvTY11LY6dqN7we3cX3hFBYqAHnjx5xlnQ3C4KhypZ3Kf+P7qv/31jkuDzNZH6uw4lZVXoWgRDwyIScqR4B5Pfx5Lfg2kp6vuTCWamOAgyiq7oIWdG/t4aDPefDhX7ydAeuwWyJlNI9a0gNtwsAJCYwC6sFDaBhbD12wCP+O1wCVzDU1DH5s8AHp+Dtakx/iL/Tm6APC5UVJLDf4pMsgl+l7LF7zJjYT8yBdXV1+FMTr+kegTvZxcdGgp8eSQICwIbM62Nz4TV8PSacPyCvS5a/wBg/VthvL2fXyh6DFkIy7nVMJ5+GhohW9DXIgQqoZthOO007JfcQE/bBORvWMcZ48GpA7h/7Rx8gxcjKLkEflPKMGHqbnil7cWo1D1wTSyHffR2AmAZVIblom0vS7II6zDYKgWd5Eiw6SRAQiUY3Wh1VwuDlHoY/U9RaDfIj8AfBmlZdaxesQzHKo8IMeSGGhys2I+cZcuQnZWFo3waewOEOXwNEFGeMBb3l2PXxCb3nTAsXBSeE9d0Ll9bDndPQUOw+cKtJYZwqzpQ2RNPn78+3FBfz+oPeJMi3huGTcJkTHj95oPZEmQqCK2NHXs64+w5IZLtOCwZefn7mx3Pn33AH++K72b37t1bUFNTh4aRL7St47ifxwA3SHsCN71MgMgojyIl7InuMiawGxGDKFKgg62TyM+JIhUcDl2vYmLADCgNWco7hppPLIJVSAlsCIDOMWWwD9iAkTFF8E/dCTnN0ahYlI6nl4+hl0Q3LjJC/Pzx6cFTXDp9Gr16K6LdQG9004xFm0H+aN9/DH6XdkE7mWH4q9cIyChY4hXL5ZI/1/CMAMcA+Pw74NgxB+AL0THLsLwUQMi+ZgWp7FFeVga50VkEwKswmnoMkfuJka98QlLlc9jMPQWHxVegYEkX4yGZcrIYeHcTh3eUYozfEoSl7URg+l7e9d8nowKjph2Ac8Iu2ESWwG5SBZSHzUXr7jqiXHAkOpKo6aWbwEHXTXkiN89SmlGQUA1BD61IdFUNQ8++Cnj3RmjyJDQlEpjq+6MR4vQoW+IJ9P9a+VQjSqU2fvvbz4u31k6euR6B0Zn8eMPmfcLm9E6OjbpkST98/LSZbQNpIhbkG9NFPaJ5S95Xr9+HKmqM5+1Vf+/kgNIyYQwra045ZdaPJfn/HowWt1a7fq0aqqrqUNUfD22bBALdeFJDE6Gk70eMF0CgG4ueAyyhbxsA2+FRCEnKRtrSCkxbdgjeUZkYRGa4j24gdL1L0N8inc90Y7lgxoBWoaWwjdgBt4Q9GBqxDcPCNyNqzhEoGHojaoQDDhdvgtQfrdD3z5ZYOn0mmj5+xs1b19GttyE6KgSiizJbQeggN5LAN5SA6IJe9rPQQtIWB8uL+Z6O+idXRCwnWqJjZnb5EgPwh6+bnl5Bw9vHvIv/6OAUyATtQsjOJ1hw5SVmnnmCJddfIvLwR3Rzz8acBUs4y9SSsMGba1idk4fguE2InrUH4QuOIGB2BSbMrMC4WYfhkrgbxkFb4TijCvLOyWjTwwo6ngWQVPFGJzLlvfWT0FMzAl0V6ea2mUcWI43YMIRAGYJ2A8ZATlEH714/+1tDclaCz0yrUID67mcr9h9JBiGPX4NHD+7CeYgTVq/K5SAUT3f3DV/Eq6LZY86iAqFJUQe7RtthieylubwP+fsPvzWbYAZAPrfh27chZo6xbEtmIxMjmdnCpqSU9PWYIMoN1/w0lVH44EK1hAC+48cOQW6QAjSN/aBFzCenM4EnxFnYhSnennJDoKQzFJFTViIj9ygmLzmI2SsrkThvJ+Jm7aDXKhGSvAKDjAOhNa6ETnAs+uhFwcB7G/TGroMlawQeXQ7nSbswdvIeuIVuxMQpdBy6Aop9+mCipweUurSHSpuW2LZqDc/iPH36kC6EBTooBqGzcjDkx29AX8dUtJZ2Rrv+w6CbUgHJIXN4C2DmQ9Y9vvI3U8v9vRc/Ak78NVPBN5u/t+HJVeDrazy+dw2aLpHw3HgJ829+ROKZ15hW/RHOC3fCK2IaGj+8RNPtU2i8f5b+1mWkTM5GwrQSJMzfh6iFhxFCIJww+xA8Zx8m9tsOq8R9sJ1xCN3Vx0FC0Q+qLovQob8buqlGoBf5fdK6ceiiFMwH8Cg4LIKEGrGgohf+kDCAoqouvn358B/E8fFvoPtx0sGvIht8cCGdU3s7e7TuqocBcip48ui+MMeFgOjgmoR8UUPTiRELIaovaAyI4rssg7+wEV7k9rHOvC3esiblnz79xgKDdOeqeQUvqOc1gW2sERQl5IPztx3iYzrZLxdvy/xxkg6jXvah2WP9+tXo0bM/yfAQaFnGQF7PF2qmYeTjBUJWZTgGqjrBwz8N07P2Yu6qY/R8AMsKT2Fm7kEszjuKVdtOI2nhLkyj93UdosnkbCDwRdLdPp7XwLH+ydah2+EYU46hZJrGTd0Pr8RijI7chMT5hyHZSxXT4iOwv7SE52ULliwSWYmvcBsxAS37ekHeYxVMZl+EetQOtBk4Gm3lhkE75RD6B23DgsxsvrOtnoAkAOzvPl+j+PmloH6FdVNkoq/z5/oHZMbf38PDq2cRn7aIbqhCpC3fjFmrizBvRgY+XTwAXDmI2vN7gKcXcf7IPoRFL8esrINIXlyBiAUHEbboKPwWVGLY9AoYBhTCffFFGIWtItFBrgKp60GWk+nGGQFJzTj01olvZj02+1ht2CpIacWiU39X9NIIwO9tumPHdmGwd93nnyeZft+A/t3E/ljx3Nzt4ut3C5c6OQHtuqnAcvg8SPTSwKGDe/nrr169ha5ZOC5dvsm/thsSL+oPY9m0cCkjtCb7N2/e8bDfF/GoLpYSYYOF6cXec5cUPeBV0R1sm1ipEntcvXYHWmQSX70WFaV+Fd8p3/fz1tAdFhkRgm5Sg6FvN4nnZPupe/P9Cj0H2kPdeBRGT0xH6qJSrCq+iOxNVSg5dBX7z97H6TsvkZV/EntO3Ebl5YdIWbQX6csPw3pkEuQclkPZfiqUjEZDmY1THZVHDFhCDLgT7lP2wyNtP3yn7UFAagliZ+6DqWMElDq2x9dnd7BiagLGGOjyyeLs5tmwsZDY3RQ60btglHYUZuknMXLFWfhuvgD/4oewIj8yb2OBUEHTDMCbzWb3uy8oMF8zKza/Tj7jU/o5YrT6u2eAR+eBe1VoOr0dOFsmFMfePopGAl79+b2oO0cX7fFZLFu0BikZ25GRfQiRGeUIn3cQ4ZnH4bvoGOyiy2AUsR0jcq9gkGM8uipNRD/TBPTVj0SnQeOIEaMgY5QKOcsMSKoG83J9VrQqTaCUVBwDedN4/N5+EEaMGP6DC/Uz+/0rO4qULiMZHmimx7KshWjTUZZXVGvbxKKjpBo2rl/D3zt/8QZd+wh8+fQJH96/J8Lx5jHAlp3ssX1nJbsQiqwYlSxuK26CRfPhWr7/8IFVRf+xo/xEZYuOdnxj0iA1b7ynX8L2hqhbRPDZcN/3hYhHqDbg+PFKaGhqQ0rWkj5UHHrKj0JXGTso6w3HMJ9khCQuRWb+ceyquo+K8w+xYec5HDx7D2duPUPV1ccEwrso2HMJxy4/4pH83MITmJ57Ei7jp0DObgFvu/Fn50EkTtLID8yHoU8+bAmArlP2YVT6QYxJLUfYrH2InFGO6Oml0JeRR5LHEPpoL7A8JQonDuzlAKyn/8PAbBjk/AthPa8aHivOYW71W2Scf4FFt7/CNKUY51iK6cN9rnqbWY+pX6aCm4XId3PMzG+jGHxMuDypRiMxYOP9c2i4dQL11QfRIFr1xHx1VaVoOLMT9ScZIPfjxoESRMcux8LlR5BC5tcnoRAxWccRuvQ4xqQfgr7fFgyZfxamydvQUyuCN9rsa0BKVyuGfD4/AmAkBlnNxmDbuVx0aIlGP7C2b300ySc0CoWskhvad5HF3r1Cb5+vZP5/apX39Xv4TPwe369D11jc/4/kMxImxeCv9n2gYR4FdfMw6NoloKOUJoFSaChVuK0C5kO4r0cseAN/SPGoSlO7Pu5sqCFLHksJXfI/tqz5sUk5qZLfv3372uLa9bvr2vdy4YMJ2Q9fvCgo4aGjpiFvg0CzrBGN0M2+Bg/u3eY51gFqo6FtGU5MNxbewVPJnKxH4b7T2Hf2MU6Q832s+iGB7SEx3CPsIqY7fuUxjly8h9M3nuLEjTfYf+Y+//rSw48orrgMeVVjSPfXxQCzJHKsZ6BlFz300vbnPfK0yQ+0TdgLl8n7MWrmIfjMqsDE6bu4Az8j+xhC/ZMRoNAfx0o28h1pr66d5CeYPS6eOwstR18oTzqEkN0EPPLPMqo/wGf7NUSn56Dp9Z1m5cufydQ23CdAPbjYbILFIPybCGFxQQZSYr/G++fRyPy7G8fRSMBrvLgfDRf2ofHMLjQc3oz6E9vRWFmEhqsHMX3yYixZth8rNp7CcL/5CJm3H5NWnUEwMaDNpD3QnLgR7iuqIUvnVtZ0FofCY6cAABAASURBVKT1o0nlhkBSIwpdFMZDSiOajw1jq5fuJN4hjAFQziIVfdU90U/TE3Iao3mFS//+A3HvjmAaxVswf7WdVpy7F0Jpdfz7T1QdhYWFGdp2U4WWVRwPqamZhvDNTR2kNJCzTFC9SeTXh0QKrtuG/L1o0V7YkqmqH4C6uoZ9rBXMhw8feOKD94bhwwoJkUSJvzNB8uXL1xg1XkI9hHdHWJUndESdlrEOAeFLRAAUaJxlRt69eQFdXT0oqekjOiUDq7buQvG+wyipOIULDz4S+J7ynOPVJ59w5fEnAtwznLj6hJvaavr66uP38A+JxL6qS7j46BMK91TB0tYJrVu3RaeBoyBjGA0Fp9loL+uCrgrjoOq2HLoTi2Aevxuu6UcxfNoB+C+sREDGXoROIwGTcxQJs4owycYWMzyc8ZH5Y48JQI+rUc8UKrkL16ovwHx4CCyS8hFVfAYpJaeQt2Un3t08zVNrjPGafjKvovXsuogZb3Fw4rUoI8L2BLP3GADvnUXDzSo0Xq9EA5nZRjK3DVXbueltPEXn8wLdyGdLsWz2EiSkFiA77xQch/rBYnQSEtZVI2jxUXjlXIKK5xKYp+6CTsgK9FAP476ftE4ksds0dFcNhIQKCTrteN4ZX8U5i9gxVRh4MzIPCjZT0VfNA7JqozBYZzy0bSdBRskVAwYMxOlTVc1E8qvUKXOr2Cgw9rh54wrfqMTy6axETt8hmTMfq5rWoGc9+0RiQDUUbBI2otu4JSB3dSk/jklaLuqKYN3g5ctmxzUuZqlfNsiaz6RunpYpzIdrxWZ60XdZefvP5c0p6QfhFyao3517TsLQLoqznjjbUSdiwQ/vXyGb7gDv8RPgNmwEHByd0Kt3X2StLcShC3ew79Q1rC3cwaPvk9PnERDf0+t3sXxjCcyt7WFhbgYjE1OY2zhA39AIK5Yvg6GpLbqqRpHZCcFg+wxSdOPI//FDX70wmMQcgCEpQ+dZxzBi1lGMn3cUkcuq4JdWhqR5ezB/dRWS4hcjTFMJ+zeu4Kmz+qtH0FRdgfrrx4Hnt1BzowrrMhdjf34e3l6oIH/tDK9sbnj8c/il8el1Qd2+vMkzJXh9G/X0eu2rO/j0+Do+v7pLZvuhYLYJ6I13z6Lx5gk00t9svHSArwbGfpcPoJY+w6uLh5G7cCWmztiM6EkbMCN8MobZ2CNw8SEkrL2I4Lxq6PktQh9iGePELaRwieWGZEHNLYtPhGI7BiVUJvIAOosBsha+anRj9jObwQHIhnAzAPZRdiEffDiPQKiZhRFzxUBZ3wddJfrQ9VrKryvfZPZDvE/IXjXyPUApyZPQV0YBkuRaqZvHQNuawG4SwvP4jAE1yC3TtUtEJ0lFHD1MN1lDPVR0/HDuosCypuSztujogBatzZsW5xSxlyYw/491RfhhWuZb8XiulqxOn54lVuTtecuHU3d2hIZJIB/H9JoEiI6hHx/RLpRjv28Ov7ASHOHRQOpcSN+U7SiGk5Mj7BwcYW5pBY+RI7AiNwdubq4ELnMCoxUcHeyxpUCIF12+dAGHDx9CU2MD7t+7iW495LlJ6aHqj356weijG0Y+Tiy6K46GcWQZLNOPwSZ5NzyXX4DngmMIyarCpNwq+E8uQuq8vVi27gxCPCYi1MYIeHEddWQC6wkEzBzWnd7JAYFbR4E7BMgblai7fgwNxFyMKbnPJ2Y+OuaFrDUv8OnRFdw7sR8Pj1fg/pG9uJmXjTMLM1DoP5a0BQmMdw+En2c+4J1TnAE5CK8cIvAdBK4fxvHizQgNn4u4qEVYOmc1Dm3MQ/X2FfBJXo3Ezbfhv/gANEdOR3eVAGLABejH2naYELC81vOBOequ2ehnMRPdlQPQQzMWfQ1TeFcwNtRmoOVMbn5Z1bSC7TTIKruSEBwDNZNQaFpEEXiCYOyYBDPnyegoIUf+nJAuE/uB4kDypUvnoampiR6yxjB0SCHWS+EAZtEMdfMIvhgANS0j6TgKUr0V8OzxHRypugJ9YkYG4HsPnqLnAA8uQNjG9GMnq+vpDZV379+zloDcBPNANAu/MFr8zKoTvtaQEGlqeeb8jQMdepAfKOHc1LmXGykbAdEsI5K7dpegpn6IBwopmzfN5dl1In+LmbunTx7h+bMn/JjfcbVfcfN6Ne7fvcVjSewhfD/zNYSvl+dk0p2jhYHm0yBvNQO9yOz0NYhEH/0kMkXkiJuHwm7ZdWiGbIXL3GPwWnkJEzKrkLDmDDnwRzA6MBPLc/die+l5jHcei4qCbGK989zpb2JsdH4fmcY9qDteirqzpEgvEEsRABvvnUPjo8tC2k0kLNh+3odnDvEMy97oibi7JguvdxTibeFavJqXilezE/FoUgBKJnri4xP6fhasJhA2PTgvgJCZYvIFG65VoonW5+ojeHm2Am+P78DXS/twrWI7xoTOhk1wDgzHpGOgaRSkNZi/R2LDJJELMK1xBL6AbSQw1kDbcxPk7OehGwmQHlpx6G82jWeIWMcEVrQhAHATB2A/FVfy/QiApqFkLiO4yVQ3DYaOdTScxy2GZB9NJMTHNAsT9qisPIwe0jJQJLNt6T6Tm1oGPOHnxSucLy3rGF5MrKWlz382bdYGeAUJ/t+2koNCS44ujlDQ8cH7D59vEuBai0Z1tWw2wSwT0jwlvb7+d+4PfvgwVd0kmPmBDSwgnbNSsOnp8wubx7T/Tc7/0LBa/DWLN3FgNXwVqmjIrxAcXwa2Wt7oXJz2EW9OF9RWI4a5j0DrPqP4wD51txzIms9ENxVfdJMfjr7G09FxwCio+C6Ebe5tDHKbA8/cMwjYcANB2ceRsv4CCZJCKKjYkIO/EIV5BzA3Yw0Kc1fhWvEGfD1WgiZSoA0iIdB4ZrcASDLNDSIAMjXLCg7YJvNH1SeRYaiJlUZqeJQQiE+LpuDL6jn4tm4hajZl4ltBFpq2ZONSWgTunTrITTQ34wyEDy8SqM8LJvnOaTSQMGm6fRK4R77mzePkFlTiWMFaOOhZoaeaH/obxKGfQQKUnRdA3WM1n0WnNXYVjENLYcAAOHIV9AO2o7/NNHQe5MUBKGc1iwNQh4+incunf7JIgYLNFMgoOkJWZSQxYAgxFoGGTCczn6xDgg6Bx3VCNrpIyiNvzQqB+S6cJddpALTMQmHiPAWqpiyWS0zHzK15ZDMA1c0YkEOhRwpYop8t/Hx9+M9bOsaiYMsBfhwRs0SYltTOptFrIt9huUa0E443wmLDq7kKZgNDxKO6CIS/fXjPq6NtA6MySYTY8WblI0SJZTaITs0skodmhHjg/9gLLALWj99XL/Id//6z39s6XL96Hp17qNGJncubkjOT00cvHj01oyBJjndPnTg68ZPQaYALdOPXQyupnJxvf4zJOoaw/BuIzTuPuSXXYTw8Ff2UPGBnMwGR42ORGDIdS9Lm4NOpXWgi8DWQGWaCgIGv8XKF4LMx0/nkCmc/Vu3CNpvfOXsYmaY6OOE3Et9WzEJNyUrUl65EXfFK1GzNIQAuRVPpatzJnom7lbv53uPmwgXyG7lJfnhJtC5ykVLH0m9PrxC73sTKQHfISKmQip0HebNE9DdJgL5/IZRdFkPPJx8mIdv5jDo23ZPNEdYN2gEZyxR0USQfUDOGg47NEGGt6QZZzyYxsgx6noWQt0xCLzkbrn7FjKXOFgMPLWXDQBgPmUwrBYpKaqip+cpVbl9Fd5gOnUbXmYEvisxsFD1HN/t8YgZUIybVt09GBwklbC3ciJev3vP6TgIZd9nU6PfzKui2Vo2iOTPjWQkWMR8XIM0qWJSK41/U1tS2ZLX69Gb34tLKe7w0S8KlqefgMXj14iU3o+YO8SjffYKDRaiI/bfUzt/Ls/4rf8wYUJxHDAmeiM4Knnz0FTvhGu45kFT2hbR6CAZaZEBaOwa9CZDMAW8jbQmdqPUY5JWJLipecCCHPmr9GUzbdg2ztlbDwmMu+utGwFBOGa9PFJOvdxhNZ8sJfOVCaORSBRquHCb2I/N79wyxX7UQSnkh6vFC6rbu7UOsGOWKe9Oi0EjAqylchjpivLptuagrWoEaOsaONbjEzPE1YrY3d79nS56LY4hX0USLPdc9uAR8foqv988jzN4Ybf/qh94avlCyJp9Nl8zaOFKxY1dDl8yuadh2AmAJjNmmJK9N9PpGAmAp+prFQUItklYY3yGnN2YT3y892H4+D8foeW6GnFkspAdY8jpLxmDqIgA2s5g525YZBJOhaeivaAtLc0Neqa5nRyqXGFDLKloEwOjmxUHIGTCcfmcEFzcy/Qajlq7xspU7MWyMqIr+xEXwJlcSQ8FCejduP2SVC0rc7NbW8ioYPhBJPC2Tj+p6+7ZFgzA9nbdqe/n6/WZZJS9emsWGFRaIJ+Ckr4d3iHhS+pv/w6y4/91fTuz8Vh2twABVI5hNLCZTspI3JFJyWoj20iZQtF+IQZYz0Fs7ktiRVCABsIdmIPqTQz5g6AxIGUbwcaXytkkwGj0ZvjM2wCN2MRRMA6HURxvnitYAd0+h5lS5EJurPoRG8sm4j0aM1MAYioHkuQA+lmprYEWmX57h7Lb1uDYzjoC2mgCXQ+BbLqwSMl27N+DNytm4tCGHlPDj5hBN44+Lfmcdy6ywfclNH3B6fxFMFJTQts9QupH8IG8SQ+w3BSruS6DrWwAdAqF5RBlMAotgTiA0nJAPvfH5UByRBe2g7ehrSjcgCZDuaqEEukXCRKYxG/jcPNaqjpWtDbJIQI9+FrwrwXffLZKLEc1mIIWJ2CwErf7oxItFNK1iObi0raJoRXMgcvA1AzCS+4R6pH479zLk7d14+MU1AcvX7ODHqel5Qv63o32jrTOvrD9aK+qKKh5YzSzvdxUsHlj94QM7/o35hYTY0V5+s1gcp4mFZDz9Zwp+QvUdnutj8+KaRP2i/9cM4ObJOuK84k/pno+o+foZllYWsAtbQ3f/Vqi6ZUPPqwgd6J9s120Q3eWFZJ4m88lCSk5LeeJdxnQSNOnkDzDPgLJ7FvqR4z7AchZkzGdAQskH0qrjoGiXDllVXwzXUeXCADeOofbCfq5QeTGA2O9j5pIXmf6Q4xXnewlYZ9YuxfOc6WgqIgBuJQYsykVDYRY+rp6NGwW5qHkuMOb3NB0D8C3UP70ubIhveIuv9N6ChDBId5VDJ8VQyFjMguRgNygS+6m5ZkKPwKfvnw/LuD0wIbNrHk4MSOynPToPOr5b0E3dBwYx+9HbKBo9tWJ5Aaq8nTCchw/VGVeAARbTyXqQCbZOQfc+epDX8SXfLwya5pEiAEZys8qfmUmlpUr+nIySM29SxF5nJpeBT9s6mu9uY+GbHxmQLTWzCHSRkMGdW1dw79FLKOsGkBl+hSYSlobWUcI2zNaWjYtzeA46kc2jAZuW+fEjH1rdrIKFyYW8UUzzwGpRr5he20or3/BEssQQ9JIfg4ePhIHV1q7JWLtxLzfJYhHxbyb4P3tEi3KM7BFFr+5eAAAQAElEQVQXHQaDEVGwijgAVd6Gdjt6qPrByc4MA9ScyRSvhaxhAh9/quqSg66KwehvN4UuTCEx4yyoszEGo1dDnnwpBadFBNL53Klnm9YHkWqUktJD1BArfLt1Cnh2GfXEfHW3SRiQSWx8fFWI9T2/2Wx+m0vtX94SFZs+wL2DO/Esn0zwjlVoqNiCpkPb8P7EbtS9vMNjg0KGRPi5+ifXhM5Y9XR+3j3AzhULYK+ug7bdLdCNfFhpgxRIagShr04wBlvPJLG1CBaxO2GZcoDPIzaLKYd59C5oeqyACgmLftbTIcncifAiYj5/9DaYAinNaPQ3n843bDEQGkzYwgcyankUkAhJRduO0hikNZ4Eg8ifsxCWlmWUyLwKYGT+nLyeDx3HCD6flRiAMXyJWVDTXMh+GDhNRsce2ggPFQYKTZ+1FqN9hVYux6rI/LICVAkXdOozjLXnqG9sbFD9wsdzfWv1TTSd9R/TMoWB1SwozRLEjCobGljV6peNAzXH87Qcy4rkiubBrsorh5PHVCGs8rcC1X+27Pp389v4A/hKthVC0cgOrqnHoOCcDSP/MrQdNA6hISGo2LcDPZWGQcN1BQay6ZKj2OitbEgoh6CfbQqM4ysIdIt5yzLjkDJSjDuhMGQ+96WMArdAhvxF1sJ3oPlkdOikAjNlFVRuWcHFAhMZINarI9+PlV/Vi8Mv4jIrMZMxf5Ct9w842Hg5PjPXLBPy/pHg7/HcsQjAjPFqX6GOAFicMxuOuvqQkDJFO6UoSFvOR0/DZPQwSEZ31Ql0k/mQGZ0J4/BtsE4+SM9lMAwshUXCfhiS8mVT3ZVcFqFdP3cMdsuEmsc8ngPuYzKDBFk8+pBq1hXNxzOcWAI1Em6KTjlQcZzFuy5Iy9lzxmJga2Y2y+8gFIAp+IQckGLgWQnsp93sC0aKcr/xkFUbDfnByvj4/jWPWrDvK9sl1I7GJ+cS87GWvPaNDsMSUVtXc4TULs+yMbPLFLAwsPqtMC3zHyq4hUih/C5UxzR5ps4ge97aqom1VjDhmZA6kKmGlmkEzl+4CWFn/H8A7Yfj5h11NaLeME21PEaoZWiEIYl08jw2wNB/JzqRCBnjMYL/QwsXzEMf3WCoOi/h/qDeqHV8bhoDoIwlnfzI7eiq5A21EWtg4LcVppF7YByxC+qjV8AktAh6E/IgSxepn34UuqtMQHfNSPTpqQ1vB1vsycvEx7tklr8Rs9e85O3UmJ/GzGbdoysclHUELPY1q3bm5pQpZLbodZYd4RkSBlbW/+/dfTS9uQfQa8VLZkJ/sBo6S5mgnWoEupvNRheNCPJVUyFtOh29LGajQz9XyFrFwyz5ACwTKmAQWAz9CVthM/UoLOk1jRGroDk2D33N43j1trzbHMhaT0J3jRhyP2aQ6zET0rrxvIG7Duum77sVWp4kRuiG7G82GYZGhpDpr4QBGuM5+DjgrATQMfOq9QO4xGyoyXw/AqCOdaxgfsXgIzOuYxPLK2A6deuNigNCE/Ky3VUwso3jovTD+7cYoD6B7SlCizYWjWs38JhxHNv4xtQvwxjD10eRCuYm+BuZ328iOvxhidRwY6fzF289bN3dmQ0fbvq9mxMOHjnP/3BUYi78IzJ/jgn+E3i/6Cf942inIP8JMPWZCquYQ9D2KUU3lXGI4NQulIyP9/GFvFUKlBwXQHfUGj5dXNUlE1Lk//TSJ7UWvAV/9nKEvOsCMlmMNYrIfO3muWLNcXkwj90BtZEEYhIv0trk65C5liT2aS3ni67SFjBUMUT8BE9szV2Aq1W78O3xZeATMWPtCxDdCeAk1YpPT2g95tkOvKf3vz7nLMdAW8sAev8Svp3ai5cbl6Jm/SIkWhuifU8DdNEMh6T5bEjqJaK7YQx6EotLGU1BZ2Uf+sxpcFl8Hmbk8znNOc4/t+XUw7CdfRy64wtgPLEU8k5p6KocAEmdOCiOy4Skdgyk9ZJ42k3RcQk3w8wl0SXhoc3Gi43fTAy4EBJacRg9LgDLli5Ayz+liQVjOPi4jyc2sc0i47s51hSBkwFQRwRQFsDWJZCpkwlu16k3Nm7g4xb4Y4TnVKTP3cCP17Pig3Y2HID9Vbzw8vW7T3W1tYNEEzJbCdiq+Y6zrz9My+QDq0l8cBP8hpvj35i9rqv9usBpJJv14NDIYoLjg+bwP3br9kMo6gfh0WO6EA1fmku0vjct/JkVxT2hxeA7dvgA5PWt4J5eCTWvUvJx/DE5aRJ/j3Vuf//mKfTMnOiEzuOtd/lcEGJANl2or9Fk9NGnExRagG6aQSRKRsF00j6YhO+GWVQZzBP3kzO/F/oh22EQUQoFAqikehikdGLQnZaUxTz0tF6MLgbT0HqAN9r2ckCvAZbQ07HFaLeRmBwTiVXzZ6Cc1O3Z3YW4emwPLlbtxb1LVXhw8RguH9mNI4VrcSBnPq5mTsebzKl4u2I2PuXMANbORaKzFaIi45A1ez6kVMagmx4xn/0sKAZsgaRhGBRGzcKwFdfhtug0PFZexLCVlzBk2Xk4Lb8IDQKfDgFJ2ycHUnqxJKhCMHjkfAxwXcIrnSU1wkhsZJBfvBK9CIxsTBkDoA7rmehdyGfi9TWbCTVdG+YkITIilEDYmwAXCz0CEjfHzeD7pzCJ5MBkgWrWmFSTwGfomMz38nTo0htr16wUkNfwmQ+lUdDxx0tRiM6BDSfsSOLjL6vGuBTe7reIBZ8bGhu4+mXDMJn5Za4ec/lEJrh5WiZXJ4wi2fGnTx9bscmG9Eu0txQfqWFlNS2lXNGhtxuuXb/HP4OX/xykTBNP4P7V/LifASiuoGYPz7GjYRWVA9vEs+im4Y/ESUJaiJd80+NQxW5IDjIjv28FDD038GpoNrJAjpQeU8PSxC6qPpnoZzcZnZWC0N8+ETaTK2HInfhd8FpTDddFp2BCZtkgdDt6G8egg7wPuhvNgBTzoYzT0MtyNqTNZ0HKegm622Sio8EMtFaORMvew9FSeijaDvBAJxlHdOrYAzaGxjCSH4RJRqpY6GKBskAPvMqdiYaCTNSunInXy6biyPQ4PpVpWnAo8ldtxs0TZ6GgOwwd9aeih2U6+jgmQdV/Gcbk3YRf/nWMWVcN74LrcF93FUNXV8Mkbh+sJh+Dql8OWvVyRif1aMh5LkdvyyC0H+gFCe0ESGlEEugW8Ll4rFVbX+MpvGc0a92mR0JE2zMfCkNXoLeiDW7fuMTPZQyJvD/a9eaq2JA+gzYpVQYycXBZkzNdhEgFMyCGE+vF0/emoJuMFSR7yqBsh1BV/eWD0KKNbTwKi8vix0cqz6JlZ3u0lHRFGynnJjbWjXSEEyM11gRfjCumgj+KjllTLGFa5leen2shHiZcK5pkyGiTFw9+/rJT3SiIJZb5XpH4yULq5uTpKyS/J+L9OyEz8k+gNTPhDz6iuEHRlQt0YYxs4LbwMnqbpcHc0ob7EWyGmXg/cWREGGSNg2EfuYu35tVhjcpHrEQ/48lQc1mKvuRPDbSfDP2wlaQsU8jsREF+yBQ4L7pIpncvRuScx/iim3BaSH4KOffmSQcxYEgy2g/2Igacj95WxILMPBqlQdo2E71tFhAYM9DDiE66ThSk6Li3cx7aqwUhI3Ea5kxdAEtNDbzJng4U0okvzMSTxSk4tWgqLsyMw6pJcdiatw27i/bi4rELxJLncLXyHHz9YvH7gFHoRmLKKGol3FcT+ApvwGvTNQ6+UfTssvoSrNKOw3TmGQwOXIoOg5yhazQCFkP9EZNZip07dmD6lGT01xhGjD8J8rZzeeWzmvsKYsF4Pk2TBaANA0tIjO2A1th8tOlliXVrVzSbyzWrctGte2906WXCt0swNmTBaDHw2LMqnW/GgAZ0Mw9QH4W/OsjC2ckBd8R1hGzfT+NXHhGR1wnAjVv3+eujfWYK80Da2TQOEzJn5z59+ty6praGj4IT44pPZKUljr40m+DXb16TCW5qIaZKok1WqPDbixcv2fe4ZeVuZ9Ta1IIQLj1oFB4+FPbAenilIy1j/XcW/B8xwRpRxiM3ayEUR8TBeso5tJC2Rfq0VOEf5O/X4dGDO1DUMIYV+XjWYdt5f2gdMi0qzpmQt5nDJ4n3N0lFd2I+lTEzMGh4Bl2YOLSRHQ6D4OUYs+oGjELLMJwurNe2W/BYcR5GsbugHb0XA1xS0K6vMTpoJ5F/Ng8dVYPx12AftFaNgYRxOgGPlCYpzG4G5HoohGKwuhWuHj2DzFmZcDA2wfN1C/F29UzsTInE6ukzUb55B7as3ogj5UdQTYA7d6AKp/ZVomr3EVyrqkbp+nx07tQFJol5GEHgG7H8PEYRO4/bfAOjN13FMGI/24WXoJt+CAYBaQj0DsTurdvx4fkz1NV8xb27t5CdmUO/9ySmpsxEG3l/AuA8qLou5y17B1rP4SNp9b22QZ+EiGn0LphH7UdX9WB4eY7j5/WriLVYAbG721C0at0bcpqefKusFg+/RHJ/j33NAtLtuipg8GBF5K1dKfLH67jlEs8CCY3Pgo9oo9rpc9fQpocrm7CKFp1sG3fvP8H54yuRGInZ3xv4hMx6AVdkftlix9wEM7PLEClQ5ce/HbMyLfpmQu+X3549f3Wuv+p4ll5pIiBiaoZgelmljLymP168eMV9wZ9bd/w66xHB2M2F/BSfEvyuHIjlOQKVf34n9CSeMXUyFG2C4ZF+ms990+Qz4Fbz4dOavOp3JfmAk9BbLw6d5b2g6D0fakG50J+8FzLEgnZpBTCafgR2GVXwL7qNgJLbGLa2GgrjNkIteA8xRgKGDRuODopjIaPmjOVz5yM4KA5dZQ3QTtaWVKcD/uoyEJ7DPLB60TKcPXgaVyov4GDxfkwLDcKK1GTsLNyF80fO4vrJy3h48Q4eXLiB26ercftUNW6RdbhadREnDxyHu4Mj9MMXYmjWDThmVMJ1+QV45F2B95brGFfyCGaLLmDwhLl0QRNRVbYH39hQSF7W1oT6hjosXrgYuzeXkx9ajc2r1tP/OxIyZrM4AFn8U3vMJvQhn1hzZB70fbbxaIBJYCk0PAsg3U8Dj+7f5tZF6NEjVDhPn5rM2Y2159W2+g5Als9t11mW97FmDanYg0U5eP6e7wmpwd37TyCnMYGV2PP32RxpXnjQ3ga2Lry5/dP3Hz50ZZuOyNTyyhexCWZJD3bMMPZ9YDXRY52IHkUFgyKqJNqsq/td1L7Nd+b8zdzBbCnpgh5yo4kFn/IPMCFwPsLjcn7hC/68xPtIvCf4QspyCuTclqO1ViwmJSQIdqL+C+7dvgZ5dQOMnnkUpqRq2V3ORjSouy/nhZesVa+qyzL0MUjiVcLd1ILRWS0S3XXD0VEvGL7BiTi44wBGTZoLg5RijN5wG77FdzFm202YTDkE/fj9UAjdjQhylKeS3zkjeTre3nmBipIyyMoZQVbBGf0G20GylwZsLByxecUG3DlzHcf2HkVcVDKq9p/E1vVF2LdtFx4RES+VjQAAEABJREFU6I4SaJbNWYT48DhMGOsHH1Kfc6fPxuGyA4gJnAhT7zg4LiOWS6rA0JwLcM46i3FbyATveArdKSVQshqFgtxV+Pz4GZ2jz4S9j6gTbQDK35RP7+Wj+vglnDt8FrsKitCDbfQynsXbc6gPWw1d8vkG2c2HDPm0hr47YOBTxMfQmoUSC6p5IzYyRLg25FvzyfSNNXj96hm69+xPJjiMg49Vy+jaxKCv0ggYGpqKrsVXId3KKp1qPzXPBB4fNB8h/6+ytwCPImuihpEgiwWLkRAhSlwgQiAhhBASIAbBIVhwFpfFFnf3xTW4s8DisCzui7trSIjrzPmqbnfPdLK8//998zz95DJpJtN9T5+qU7eq7sgVYnyD2K8c4aGUaSz3gNb8eVxkW0/ixQzCVek87ryRKZldxlW2CEhn68Y6E8yUyAhVTDAjVNBmcnJJ/klPY/kPHz//a+2WIEIynLA6eqKkiF7TE1HHowceCnGS8z+6J0ihGYUBBw0eCqPQybBrnwSL2C1w8AxGusx+rVu3QkDXuQjp/6cEvk5bxDYNYq9g3s60cxIcmy+Ahf9vIhBbzTWR/LZJMCVhUcIkAoumzcTb+y9x7cgpLJy/AkF95qEVqcyef75DSwKA9/DjaLb2Pmy6rkWfXoNx9/wNPCHmGtR3CGrYtICrf2+Rxu4S0AfG9tGoXMMek8f8jpkTp2BAm3Cc3XUI54+eQ//E3hjSbxjsnBrA2LoxalqF0dEUpg4kXozqoxUx34gJ0xAw9iiaT7iAFiSImi+7SWb4Hjoc4iq8LWjXrgv2r9+Ml3ee4fGdh0j+8IHclBQRI3379hUWzV6M22dv459jf+Pexbtk7gmA7p1g2nAa3GLWwKPNRhIfW8XBLFg3cokI5Psn7ERAt13wTzyEqpbe+Oe8FLdTBMT2bZtQpaYz6jf7TSzV8Zow+4RWbm0RERkFpQ2L0uFWEoYFBLjHcPDqwZtPi89pz75fRamlX0TrcSAMfU5OTjZj/PBuSN+TVViSTTD/W2xYnZ8v7ZbJSJTVikCrnDYjNjLkfb2INg3ktbyeC5btRYmyodpSpIirWMTgX9EJHZg5dxtaxUt+nFRr8LON79J0AmPlsoUo59oFtm03w6HDDlTwGoCu3Xpg/JjhsG7QBcF9jwjH2r/LVrH3L68I1Ou0TSRkerfbBOvgaTAPGAdjz4Hk6/xKAPydJoVDKnGiB0pOWgbuXb2LJ1fv48+N29Gi3xRinDeIIt+r3shTaLPtMcLWPUJwx99wlYD66Oo9hIe3hrljDOrWT4CDdxc4+nSGe0APcvy7o1LlWohr2Qih3SZjXEJLNPR2R8lfLGFq14qc9QS4+CfCrUEvuNH5bgHdyU9uhR50PW0IZKFTryB09EnEbHyA0LmX0WHvWwSPWY0FE6fh0KbduP/PXby4/xjp35NRmJdFfpYUBZg3bx683Orj5IHTuHTiCvmT/2LDsrWo5tEHtYjtOBPGo/UGeii30X3aAS96QM39x8CL7k9gr4Oil2Bgz/3w6rYJbt718fnDW0i9X7g5fFOYO8WifthIEWqRVO9I1HaOQ1RUjPj7+ar+z0roLLTlCCxYskuMz9CDW7JqhMR+lZtqjp4QqyGTuf8z1xixuWVcCSzxWOqIJf7NQBQ7JfE/GICMUP4lU6Uy5kMel5Q+rLDsjx/pN1zq9xIbGrLq6Sx3Ui0syBNJCjt2S1kz/+mgkCsBUKqmy8NrMrPc39i0+TI4kKCo2+UAKnkPgqFDHHwT9okeyLwfCIsP3qbUu/0W+DD4CITOLZcR+CbQE/+7YD8j//EiuGwaNB0VnbrgnwtnJQtCk/ni/iM8unIfx7btRvSMJLTe8RKNJl0gMNxHq6TXqJu4EEkr1uPOuStw9WgMa7eOBMBuBMBOsHAIpyMMtZ1a4Nf+vfCec97G3kJo+1Fo6WEFI2diyXqdYe/ZlsBKgK2XoPtp6dAUjZvHIWjCSYSMO4eIudcQs+U+mi66jYBJ+7Fs/jLy647gwbW7yEpNFveE3Q+OfwqmogfVq35zlCjjhAZ+Qfj72EV6mB6gfbteKO85Glahc1G74e8Euq1iE2tuXccNPHnduHbDicIsB3TfK2KCYb9dovu7GEENA8Vnr1+/GuWr2KFe2FixvCaSEjjYHDYCNm5xSEhIkIiEzLUmT78L5oZNf8I3qJ9gQvoFQrj3M8f9KoZpW3eerNVoC16nZ2QYMbgIVyVV+BFHYTFcFTHB3LFSMcE8VmiTm0kXSLRp8PnzFz4/Zv/hS2L/1zLmrcVO2H8eE6oHp8/cgJ1Xb2Rkkv9SUDxhVV93qpjhubOmoCwxlkOng7COWglXEhfcE5rjWb7ydlyerVfDm7M96OZ60+HTIQk2TWbCMmgKTHwGk+/Xn0zvFALhONRqMhcGdTogaetWnfPMwuhHSio+PXqB32evQsM559Bwxj+IS3qK8LWP4D/zOBbNW4mHF6/B1qkR+UAd4OrXA9YuMahaqwHK1qgPVztbjFqZhHnnvqLqoL/gOXA9RkY6o6JZE5jbR8C0TlMyS50EcAV71usJI2NSkRGJaDz7DhqPPY3YdffRevtjAvAxtOtDAmbTLhzefRCa7Cykfkumyc4QtTbcP/v0yWPoP2AoDCp7EPijULaaBzq0TsCJPeewbN5SuDbsgpqN54r1ZO/4TQS2HQTA7ajPIOy2Gw4tl8IicDx8ODDdY794P2zyLTh3mI7Q0Mawc/CEg29v8vuGCtMr1oKDB6JB5G9wqheP4cOGyJbsu27zmZTUH6jj2hnnz9+QLNi6w0J4lDZrjfImURqO+9FrMGsIMrUGeizpTTDjSjHBbJqFClYzoGSCJXQKQSKzIZtiPug/lJbWijXHojpOIaezmYaLTrjmMzVVXlobshTdeuvT9n+2o7podChTemxkU1Qk2q/f97C8DcEm4eex8uXNmTndip9wn+67UL/bHsF+VsFTYdloIqpxZRipQdPGMyUANp6G8iRG2ib0F6Y+Nz2ZWDAXn95+wL+X72H2lCWw6bCI/L8HiNr2CIFzLiNo/lksW7kFV/86BXPbIGKvHjQJXYgBO8OybksYWkcior43mgxdghJDbqHK8s+YvGolYj3MUKa6N2o7tiDWaEf/JwFOxH4ufr1QzTIcwY1IEU7YReb+BILGnkTs1seI3/+O/M6Z2LBwBXZu3CsU8pNrt/H1/QcRbuHX8uWrULp8LRiaBcLEtiXM7FvQEQ0Tcxcc3r4fnx9/wLSxk1Cp3ijUClskfGHeN45zABlw3gy6gSSmwhfALID8O3p4/XscINeFXKTZD1C36zQYWfjBp+lvIg3LU8QAB8O9UX+EtpmGut4tsGDebBmAKbqi9E49ZmHQCEl4vH/3ga67A2sBkBbQjhgvYo13U1JTy2ZmZJYULf8IR4wriQ1lBmSzS5gqwoC8W6ZyIvuDGVLopUSmHDBU3ueDxqX49wUFeV6PnrzNrGQWrSnN8R+DxvhtkiRIOK/P1b8/kvac1Zli/dasEhMWyH1k5kwdD6fgKAQNJdVGPovYhoC3XCUAusWughfvDUy+TX1yqH04rNBui8j1s2LAEfsZkc9n1mwxTIKmoib5PiYhMwmQU1C6oiXaxLUVqeFacg2e33uEm6evYeWsP+DSZyVi9rxF3PZHqDf2LHzG78Pq1VsxrP8wGFo0If+tlzCjTsRkPLbxIR/QwhHDekbDfstHTFi5GlNinWBk30oy1V4dRQFP3XpdxUYz7ENa122CxfMXotHko7BvtxRBk86g9c6nAoDNxq3FvrWbMev3xbh84h+8ffgYmcmfyMfi9rYahIS0QFlDP5HFUrtunPAtbd3booyhO0YMHoX3D97hjwXLUdmjN6xj1sGi8RQC4E74JewWGdMe5P8FDCJTOeAwLAmgxvWGwDVqEfx7HoIvPcQRs+8hYMhKWDpGiAJzrnYT2c0N+qJt7+VwdG2EY39KKx5K7JAbDbk1GIA8+SHpzmGXck1Eml4d964absVLjBcur6QZFBYIEyyiKBJ+MvS4UvuAWWoVnPy9iAnmExTaVNbv5LEBO5labf7cGSQ8SpQN0ZSp1RoG1VvgzAVpz9m/L96DnXMPfPjwTSo+yk7TMZ/IgqHXoD69YB7aAUETL9NTupNAt5nM7264kyPt0not+TYbRIYH94YO/O0svHrug1PkYtRuMgcmviNQg1uShS+GWdh8AuIkOibDtNkiVHOgCaxSDz7+Efjw6Qs+f5VEz/sXbzFy9Hw0XXYRcXtfofmGB7CKnYV6Q9dgwYyliG7RHqb2UfTw9BRsZu9JPqBjFGqa+xPTO6OFlyWOjG+F36M9UKq8Gapbhgqh4kxAdSI/sG79rgRYMr02EQho0AI7N+2Az9j9cG0zEyHzrhIAn6Ed/d3gGUcweMgkPLx0jSxbOnLSM/Dp9Tv6mSYemMOHDqKOUxPBfs4EaGff7uKzjepEwscnBC9uPsLMKXNRllwPe1LAVpGL4EaWwq/7PtTvugNubTfBr/cBBI06B8/e+2HSaDoqWYXAIWIGGg46QSDciZYrn8G771zYusaJ7mWc48d7CPcYuh72Tt549fyJ5JMWZtMcfoWDWwL+viQt6e07dFE0GypjHkfsF6LZtV80vdwpl/SKhINkGms1RSMqPBbrwnIgmk1zbi6Z4EzZBCuxPyUmqDiL6uUTiVqzSnJTc/pDlfLzcp8ENB0smpqzKXbxI1OcIlH29LnbEdhc6hFSKG/5mS+v8Q7q2wu1whMQQzeCQwns33m134Q6LZbAtetOuHFsi/09upmBg44gaMFNuBH72UUsFuqvBgGQmc+s2UIBwBoNJsA4ZC5qBnLHJmc4eUZj65Yt+PPkFQwcuxIrdpzEtCXbMXT+DoSuvUsAfIsmc48iJnECGvWei5NJ+9EmvjtNehRsXGJhZtsM1TkTu7oTKht5omJNT0waPwNHVy1Dvz4jYFC1PgyN3cXvLOtGC5C4+veCq28CAbMpWrXqhJM7D8Hr1z/QZ+xiBC+6gDZ7X6P1npcImEbmcPg6HL94B99SkrF8wwFckXem1xDDZGakkmJtLnxRN/8egmWZWbn1SXVTN1w4TD5k12Go0HQpapMKdmq3le7LAjKxO4QVcWmzAb79D6PR4BNoNO4CMfA6GLonorJNCBwjxiF45N9oMPQoore/Rd2YIXAWW3cNQGz3BYjvMRNBjYIF0xXkSHMVEDYE02ZLXQ/ef/hEKjkBJYxiOEWPBShxVkHyj7R0aynel1lKwZLEgFlFcaWLL+tjgrxPiG71g2lSvRLCB4/V0Wv+SVRrINq5QRN57eajgvLGUYXMgsSG6C22+NKKo3nriRg25g9J1aVKdacbVi4lAEUgKukjvMi3803YC6eY5eTDjSH/JAlepNy8eE80AiCb33Dy1wKm/QPn1pth1XQOqpPpNRHgW0Tgm0est4AAOBEmoQtQ3Tkev1T1QL9BUlD7zdv3WLhyJ+49fsR5GtsAABAASURBVIWkfafQhARH3OHPaLXrJepHJyCo7VCMHjMPed++o0/fwShXxQPVa/kRsNxRoZodqpn5oGrtMDRsGIlbZ6/ixZ03GDVwBDnfdqhZuxGd5wFDEx+Y2ITBzqM9vIP6oxz5hWOG/oa0l+/QqPMYzP9jJ0bsuoSI3a/JBL+B/7R96D9pFUYtO4QpS3Zi35GzyBdtbiXLcP7caVQj8eMa0FfHgMLE09jIMgj9e3SHTXA/GEdvgHHobFiTT2wftw6OUSsQQAB055ggV9IxAEeeht9vp2AaNhvV60QIs+4cOxP+Q88gfOltxGx/gNqeMWIvt+HTDsKnUQeMHSPtjsCv4WNWIbLNeHk+Cwj4UyEaFhi1Qq26HTUfPn9HdnZWbzaxxGoGnE8qhfS0JTiRRcGMoi1+uhKC/xGIVptgPW2Kuk4lkGjAiof95mlztqJEmSaF5SzjuQ4AG5P+EheQ8j0Vrj49sW7DEfHvty+fkz9TH2Frb6PBuPPwSzwGi5DxKGfWCA5kausPOQk3FiIJ5Lx3JOU2/RKi9r2G3/hzsGmxnIA7DEaNp6JWyxUEwAWwaLMeppFLYBQ0nd6fQT6cL2paRWL8JGmXJ474X7n+LwZPXofwGX8ikMAcsvQc7Jp1RzkTXyT0n4QvL16JU188ewg7x3owsg4TAKhhySWKsTA09cT8SXPw8PodnDt6GqOHjINhrSCY2oYJc1vVrB6B1QGVjT3p/cYwt/bFzfMXuOcFdu3+C1PnrUPzuI5ouOIfJJxJQ8T2pxgweytyU1Pw7OMPHCW3hVPUlMhA9579iUWbw7NRPwE+FwYgm2HfHrByaoXy1a1h3HI5zKPXoBYBzyRyIWzbJcE+fgPc2qyFN4de+h1E4OC/0GDwcQRNvgTXgcdQySEWdp5dYWrXDM4J69B0wR20OfIVLr1nI6bDeIyZcxyWth44c0oKWK/feASu3t2RkiIx4dyle4hgmqCsRRzveKTZd/A8tJr8wwXk7+Xm5JRi86pL50tJEVjisd6dy//5WrC8a+F/smGUsfJ+pi6DIVs5p6SsaKpotZoHka3Hc2hGW9okGobmMbh9R+qX/ODBY/JfOuDxy2SsWjgDRjHDSIW+hPfgU7AMHYvKVaqRI/0b/EddgC85z57EivXJqW40mEzk1mfEVi8IgBdQs/4YGPqOhHnsRuHrmcethRX5jKbNF8EkbAmq1h8IU0tfGNvGYPCwseJv5+dkiKf3+PlbmLp4NyYu2IEly1eidDkr2LkG49TR47hx9R4uXbyCLl37kpptCzuvLsQULcVKiKVLHFo0i8GHx5wJkoU3D5/i97EzYObQBg6ebVGTGIm3GDOp0xw1jOvAyd4dQ/oOQV52Lv69+y/y8wqwd89OlChpidr14hA06wAx4Uv4r7mDoGlH0ChxPs5fe6hjnN27dpDZ9ybA9RK+KB8ufPj1FN/Hhsx9xVr1YEbAs4hdDSt6SM3JTTELJzXceSccCIDu5Pe5J+5H4K9/IXDYSTSceAENplyDcdgE4dPaeSWgllcbNJp9DbHEymFrriK2zzR0G7gIvn4NxPe4dO0BTOza4c49aQ7PX7yNMjVawqBWLIGwsXbgSJGI/IGwYyXwQABUSi0ZE4yfbDnplP08xphY1uX3ZfxwloxISBX5gDI9pklVcTSWkxHk91kp83qwQqGiyTTnDKZnlOZ0a/oyfh8/J+dY1O2sLVEjintMw8mHRYi0tHbg2HXYePSEb+NINFx2Hk2WPoFJy8no2bUt6oW0hVO/42gw+hT8Bh6BJznSXu23ofn8G4jZ8ZwA+BzeY8/D0KUPLOhprxW3EWZkdtyGHUbtTtthSmxgEjoXv5C55DVcM4c4hEe2ESaDF9O5FQi/0j59wqNrN9EjcQiqEGs9fHgPGg2QnvIdv42fSg9NOPlb3el7d6YJ7yHy5hxcgvHPidNYs24fYloPhYY+b9z4yaheu7nw+ew82gnFXNe3J4wtA5C0ZjNePn6Oq1duYefW/fhG1z902CjUsG4Bc2KgGbMXYPyiJCRO3Yzp64/iytnLQG4u9h88hPDwaJhaB6AWfX+3gEQBOuFXBvQSPx29O8PKpQ2q1vKBccQ81CY/2aZLEux6HiBGJN84nPzBbvvg1nsvHMmfDqQHvDHdt+DJFxE8/Tqx4C4igqbk7w2m+xQH7+HbELf/AyK2PUFQ4nRY16mHHUmbkJKWQ+Y6HgeOSh20nj17g9qOHUWNL4uPgNDBGsIJfe3cWGYyMrWKJZTxk6XL+1NKPSR3rmgyglaLEqJDqtoEKxSaXGz9ThSSCNpM0Zng70LF5LK9L/Pl6zf+nCFn/76HEobNC8WT8ksomsWNI4dWala04o+93GsGkdufw2XSaTSLbo8TB3fC0Ksz+Xh34Df8OPzJZHh22yv8mBZrHpKf+AzR5Lz7TDwHE78hqNN+I4wiV8Cp1w6EzLwIszabYdF2KyratoCxhZ+Ix9nT59W2aywa7PCLG3Cnfn6PV49eYf3aTQS0IFKZjfGO3IGULymYN2s+mdNIuDXoQ2q2qwincPjF1C4Svw0dg4+vP+DEX39j+bJtSCOBNXjACKFQudm6EwOWVLB7YG+Y2cfg18Gj6e9l4c6V2/hCynbX1m0kiCJh5daFGLMF7ty6g0dX7uD785fQpH1H+uePyEtPRd/+vxJL2sPMrqV4CPizXXlpj4CoMCHHJXkL26pGdVG90UhYxpNoo4fVhk3u5Muw7rgaNrHrSPgcIV96KwKGnkQImd/gqZfQaOoV+E04CxPnCFK8v8LJuxs8+8xH3MEPiDvwATZtR8DLzRnvP36Ga71ELF0ltWIh0oFf0yFSmr1RFKrZxBc+eiIyYBYyoFJTU8oo+PnxI1UAjPs+S6l9kvJVit1EdOVbcpGMaFEXrFCilKefLf87R/9+sXoR/p1innN0NJtbOj1d1BYnrZDyBiV/kHyGRLHtq9R0aOGiHTDkFPNWw7B/+ybMmjkDVSMmo+Gs26g/6i+6aafg1GEL/EaeRKvNxH7bnyF2/1v4zzyHqgGjYUkmx6TVSjScdAaOfffCjHyfao2GompNZ7HniJ1ne8Fe5o5xCAyKxPGjh/H93Qc8unoXZw+fhH9gS1SqFYZJU6SygnOnT5Jq9oKFa1c4CvAlCMXJHfz9G0Ti/pWb+J6cQu7EXXF+emoGfef5ZHIjiJkSpeAzx//8Euj/dEFw07b49vkTbl+6QZeciUmTp6CmTXPYeHZDWIuuuHDmIr6JRfwCsQN9fq7UVWzfvj2ktOvR9+8kmI8ByOBTA5A3czQlgFYzdkZl+jyL9rtgQwC05KjB6NMIWnEXxk0mw6k7WZDBhxFIPnbQFALftMsIJBA2mH4FVv6d4Rs6As7eXVEnfiI93G8RT6LModNI/LFsMSJiJuL3Ket0/nN8txlCdEgrXmGag0f/4d+cTUvLKMlY4dohBS9KqaWCC52pzckt8m/9OdmKCdZXxSm5gWJMKkZOw9IpYh5zCEZK1deKc+UiY7HnMDFkeRrfGjV+DQenNRWs24og9fgpG2QvpwCz5u9AiRLk7J4+jcEjR6NWNzIX067Bd/xZ+JPPYtt+PerTjYvc8ATRO58jZu8bhKy8CsMGI1GLn/ouWxA25xJM225DrbbrUMHUA7aurYWPxGxU11dipZKVfODmGYDMdMmJPnbkMCoZkY9oHYL7/94UvuHmNRvRsXMftI7tBmvnlnD27yMm3ZhM1dwpM5H87jOGjJ5Fvm0DnDp9Ht8+fsX2bdthbNNMBIidBFsmiu4D3ITdgRTlhbPnkJkmBdqXr1iDmtbhqO3cDon9x+HmxWvI+ZEiZX1n/qBDUr5duvVG2Wr+BP6ecKYHyJnNLwOwQW+dCbZ2aS12F7Cwa45fLALo4dsOawKgVZcdcOh7AC12vIPvxKOwiF4Bz6FH0VAGX6MZV+m4Qg/5Ndg16YOmsZMJhAPgNmgjona8RMvdb+HacTgsrVph8sxd8jxpMGjEMpq7EPxi1ZaFpXbhMvG79zm5eRaCvXJySzPjsYWUSjqkqkoGF+QKS7m+XA5EZ+iwVKQwHaIuOEd0yxd1wUr9pr5GWNBmPitiOodjhEyvSmsFzpyR6dSA3/+RmupAn/mpY685dAHB2vLMhOWaYPaCnTpne/ykDfBt0ANhsZ1gP3AvAibRE0q+iu/wU3DstR0NFt9B2OoHiNr5gm7SC7Tc+ZREx1wyuVvgmLgb7r8egEWXvageNFTsuO5Mk19XBh+HK3gSWalOmTodheQDZpPiHDBwJCqYtUSnbsPFDX778jUBSiq0zyPT2q1jIrFVJOxItUe06ozHt++TD/cey//YhgFDZ5E/+xEvyfxc+vsCMWwLAl5vEYjm0IaHX1s4e8Whupkn/lgq5UXevnUD7j7hxFydRNZJj17DcOPMP3j3+AU0+TlQ2tUlJW1D+aqudF5HYXadZQZUAKiwIMcDHb07Eei7o3J1B1RvOgk25P9ZkmhzHHAIrZJeoSW5LDbtV8Nj6HE0mnNTCI3gOdfRhHtMz74C++CeaBE/BZ4RA9B02S3E73uLltueopRZFMaOWy3PjhYTpq5HiTKhEHNXOkg7YrwIpWWkpac35nkn4Bkw0BhkPOfZ2VkCA0qnNdYFhUXwU6gzx0pdsIQZUsFKpTqjUW9mdV0SiryvjNVqWF3lziCU8v1zmuTk5GY3jflNW6JsKMrVjhc+4cJle3VMOG3mFrF/rOeI46QOb8H/9wvw4UTRPjvRZO1DBC26gVhiv5bkJMcefA+34dthEr0Ojv0Ow7LLVlj2OIQqHm1hTmxV1zdRipf5SYFbt8C+MLJqqNua6uXThyQoQlDVohn275f8m1fPXollQ14izPzxA1/fvEGHTn1hUMUDe3bsILC9gaZA2QkI+PzxI968eIv7d26SE98ctvV6w6h2AAb3HoRrJ8/hxt9/48rFv/HsgaRqjx49hGoWwaI5pEXd1ogMb4uHl+/g9cNnyKAHYv++XWSiJ6OqiQcxW5QAnfpwJYC7CwD2EkpYMsXdxbWZWQWikns8bAeconuxE86DjxH4XiBy12tYd14Fr1HHSej9i8YEvMbzrqPpkn/hO/kkmsaPR9PoYfAesh7R298hYt09VHLpj2nTt+iuU4TUeM4s23JoDQn95or6WJrfjvKcG6hdstxinQ4UN056P7eIq6Z+ny2m6IygNClnJmRFrFClUiGnjBUTzCqGkQ+5yJgYT4z5w+WcQQMOaKenp3XIyMxBYPMRWmZAcUHlQzF30S7dxS7/4wBKWXaB+/AT9KTeIjN8Dt6jT6DV7tfw/v0kmm94hFbEghw4br7+FkwiZtIN30tP/RbYcAG7ZweYWgaJzQ85fYr9JwahW2AfMqPNsW69VDawec0aVDUPgVv91vjy6S0KcnNIhLwWKUWFuVlIS5aC5B/ev8OGtWvw7N/7eHD3EfYdPC5UM29V+vzJC6Sm/BA+nptrAzQIisaZEyfBKcXrAAAQAElEQVSR8TUFmcmS2s9Mz8T3b9LS38JFS8hUR4refCYEsLjojnh19zEKc3Jx+MhRmlwblK7sTueECzEj+X4K+/US7OdB4satQaKkhv352rqLc+q4xqKChT+seh2GRcftcKeHuNXOV+K+1R24E/7T/kHI8nsInn8LjegI/uMVHLsvhrt/LAJHb0Xcns8Ezksoa9sVixbv0c3H1NlbBPjK81yVDUFUx4kFWmJEjaZwqGz9DDSy2WUgSZhJ1Y0ZS0qfIaGIf4IftTsn2rMp3bH4gwqlLRuKKJdUUjf5BfmCNhl4+fl5OgrNEya4UP4SObJpTuHPEyslRM19k7//QEAzCYRlLVoLcywVMUmF5zv3nBH7t9XtdwBNlz+F97gziNz6DI2W3kDdAbsQte8dWhALxh14D7+Je1Gj2TxYdd0Dm15HUIMUXTVjN9h6dhYbHdq4thHCwDWgJyyd2yKkWRsUpKZiyMARqFgrAjFt+4s1zh/fvuHrR947LR/5xIJ55IvlZWfgnRyUfv3kFc6eOg07r47E0sFYvGwlMdszfHv/HoX5ebh68TLSvklFWWkpUva3piAbH9+8F/ulcMJnXNvesHDpBI+GfVGtdhgWL1kpAJ/z7QvGjRuPCjUIQG4dhGrnDqLScl5PYj3Z9NJPd3HILEgPlou/9IDVcYtHRRM3WHTdBovOu1Bv4mnylcmcbn0K1yH70GjRHQQtvQe7bpvhMvQQ7PusgUOHSQiaeQyd/8pEvVGHwP759p2nZOgVYsKU9SweUbY2M18IItqOI+9KAyKWqdy0inBSWvH5eaWDQyiKCWb8/FDhh99XTDC35OVuWJw/oLTmyFd3x1JKMJV1X1Y0zGz8S1Ywoo8bj5Webrk5ujFTqX6cU2RM4C3DIoYAO+Z7SjoahA8rlJ6ueEHtQ0YtE20++HXl2n3YevSCRds/ELryCUKX3kFLYj23UUfhOuwQWh96jxjyV+IOfYD32N0wi1kIqwQSA9ELUaGmA2yc42Dj1gZmtuEwt48Uy2KuxBZlqrhhKinRHonDULpaMIYM/138vU9v3yElWUoCzc/KID8xUwiCT69eiv3UHt57jFcvX6BBk47wCGiPK1dv4MnDp3ReBr69e4OcjAwxaZyqxOBlYOXS53x89Ua4Fx/ev0a9hu3AfXUYTKYkHtasXi9Pdi4ePfyXxEQwbNw7i4eFExqE+CAQSn5eVxmAvQXweCmOl+X44bJ2jUdt8ikrmZF6T0iCVc+DcBl8EK0PfkTwouvwGXsCYX88gPfEC7BL3AC7rgsRtvI64g5+RdtjqbDvugp2bt3wzyUpcURTmIv+w5bKzNdOzE10p0kFNLcgsCzPkILL3Dm3pGoRQmQzK9jIlsf8fq4KSznyIoYeP1lFsCRMsKJiUEy5sApW06aiXHismF21OebPSE2RzbFUjifMMf/RjIz0qWyOm0SN0ZYo3ViieFLH8V2nIjVVUoJv33xAUNgQVG48BUHku7RKeo6o7S/gMvwoHPsmoenq64gkMRJz+D3CNt6FXe+1MO9+EIb1u8KY/CgHnwSamFYkCiJFMgEnFdR2ikOVmo6wcST1axePKdOkPEU2vxmkRgltKMxOF8U3WWk/kPzpKynYDNy7/UAA6e2bl/j4kcD69QuuXrgmmelXb5HOJpf+jyY3kz4iUwDw+9dv+PZJEjXHjx1DLVKrbE7dyR0wc2yFedPmIT89Q/z+xIm/RNiFlbSzbwKBrLsIs/COUsZ1mklM7tMFdehBsnCKJnaPEw8VXxuHYoxqBxGDBcC6z1HU6bOfWO8g2h3+DLdh+9Fo4Q1Ebn4GH7IkgQtuwW3oDjh2WwKPwRtROXAUGjXpJ+41v0gsILbzFCE4hItEIGzXY0YhyyNito3fpLhdKRqXTBYJpPklyCTrYng817zUpsaPOqKSkSG3/VNhKa24CtZRqNQjWiBXMrX5Rca8lsdjbjSodDriL8FqmT8wVzbHaWk/dPmFBOKSojIqjzMfssZkZeeINl4lSgejPAsTovx6Ib/i6bO34oZkZWeh368LUc6uJ0LIBHc8+oVEyDOYddgIw9DpsOy4HLY9N8Cm21ZYdNoGm95HULvbbjJHLrB2IOYjn5An3sg6VCQImDu0gqFJPRhb+NLEtSYASmvEb1++QXb6DyLgTCnjl8CUQUKE06HePXuJW5evC6aSXlq8e/2aTPATkTL/klRsPplr3kdDk5clQEg2mFj1PclEKcl2xqwFMLGNlVVsL5jYRWLsyAnI+pKKrPQUBDVpiepkltnEcoC5NoHMlNibvzvn/tVxayfAZkHA5doSM/r/prYETpumIhTzS2VLVGtGKrjfX2Ql/oLn2OMIXnYTbkP2ImLzC4ST7xw8/wYCp18i9+WdsCTc2aLvwLnIypGE1RNS9N7Bg+Q4XxsCYWMMHbNSSHPy3ZamCbMr7WquJKUwYJQxzzGfwwqXCYcJi/MA2UJK7xeIHtBFsJQqjfng94UJlrfqEmaXf6GMBZ2KDWykbubq9xlQ/EfYXPNYoWIpqzpd+Ad8npxtzVV1BulSCldfvsDhY1ZykFpbhhe2q5DZdOiAv05e1TnDGzf9CSNncsiH7UX80WT4zfobVRpPhXnn3WR29sO6+z7U6XUA1t12EgP8CdPYBfilqjWs6kbTpEXCyqU1qpv7o5qZH01aGKnGBiJJYeiICRIAn71AekoyASgb+WxCyRV49+I1ctK+4d3z53jKW1GQj/rp/Utx/svnr4k1X0GTnYyXDx8L4aLRATBL1J6wWectzZgN4zv2J+XbgRiuB4GsF5ngaPTqOQRPb91DUFA4ylXzIlaLFcmsZrYtUNOyCQGsGSyJwc2IAU1smtF1xJA70UIAk/9tahtBn9kGlSrXJgUcB4s+J+E68gT8Jp2F75RTqDt4N8JW3EXLTU8Ruuou/Kb+TUr4PmrFr4SRY1dsSTqpu7/HT14hsLcX9RwleSutCk21C5bsFE45zdtUOZWqFPlqJZU8ACWVSsEJL1BkZkiZzUxg6YKEJHeOmU8CXXEspUtjOgQeGIBsNtXBQ4U2BYXK5pgpVDG18lZL8jnpgo4ls5stWFGMSWIzZUPV+IjGZcSSX8r3TjTOXrbqIN2AZhpenuNlnhKGzTF59jZoaQL5defuU/LBBqFKwzFoSqLEh1SxCL72ZADuJhGyDzY99sC290GYx69AJSMnmlCpko3XaK1d4mBk2Rg1rBrDkH5nXKcV2rTri6zkb3hy+z6+fvoiGC+HA9XaHHx88VykjL0hoL0nMTFm/CxRlHTm3EW8JXHyhUUL+YxvnjwTu0YK8MkMmJPxQzAgg/Y7iRO3ei3I/+su/DdWsLwW7BsQganjJ5Bf6k5mNQZGViGoYdEQNcmcWjhE0MPTkkwv+bKkcGs7RhDoQqWHh9iPWZCTZatUtUdFR3pgu9L199iNqC0vUX/METh0W4OgBVfRcN41BM26hNjd71F3yCH84jEIoRHDce++1FaDd0qfyknEhhHS2q5hJCrUitJu3yOJEQLQEHkZ1oAbEnxLlpZhRcBZbibE4+QiKviHWNEgQ1HEnVPyCoqbYEkFq0wwUyijVqHNPIHOdFmt5OtQKzYZpnP4p1QnIu10o7Ahf4bCgOoxByn5b2RIhcoGkppO40Yw3/86fQtGtm0LeT+JMrXbiKW7qLYTROU9v5hZxvy2HDW8+sG+33YRfnEdfUpE/216Egv23A37/sdh3HQ0qhm5iKJqAT7naJEoyunxNQmAXOlf0zoMLp5h+JcU7IOr/+LJnYdI/5aM1I8MnBzy/z6RQ16ANy/e4PH9h2ga1QMlSrhi/sJl+PDmHb4QYNPTM3Hrb/IFuXKtMFsUazMDppMv9eX9e/Gdz589DRPrxiQqeomlNQvHaAGgclXdMHnCBDQOa48qtRh8AQSyEFFBx0wpDj/pp1uDnqIexci6CQG1MQG0FSoZWqOSc0tYDzxDVmAPfKf/g+gtj1Erai4c6N74TjwH/8l/k/l9CuuEtahp3xUz52zRPdDPXrxFq/jx4h4bcO5m+VC4+vYovH3vGf86m4DUXk6hL61UtKlrOLikkomKGwuxqmWSYRYTJjgrW292ZabTYYmFaF6+shuXzgQzHmQTLAGQ/5PUMV9/ovJhEp3Kdpt+rwYmS2q2//wU/AyASpmnUvzEiYtSUmu6M134rZevPyIkclQh35gyHKapSCaITHLSrtM6k3H5MpmuiJEoYd4OdceehtOvx+gm7yIzvAd2A/6CoVsMLO2aiV4nQjGSU8+FRVyxxvFAzl6uyhnMJr7Yv30X3j98gX+OXcALEhtPrt3BNzKfTx88x9cPn/Ho1n0Rcrl84SLGj52C7yQ4rl+8jtePn4FcC1E8nkusmZuWjKzvX4k1U8g8v8GLh0+Q/fUrZk2dhUqmwYKBa5EJlY4IYuIw+o5+sLa2haFpgDCp7Otx/NLBqwPq1ussdrVkIWJOjGjh2FL4ewzUMpVMUTNsPGw48Ezq367fAQRMPwur+EWw77kZ3uNPI3TpXfjPOI9KnoMQGfcb7sv79TIrb0k6QQ86mdxKzSFqeMo2RseeMwq50o1er2nOg2Wza1Aoz5W+pDJLV1CkqN1CuWhNwYmCn4LCAh1+8orhRwGghBkJP3KT8u+qQHSqvM4rmWO18tWpGEK0Ymr5/6lNs84cZ2eLz4Xc/lepN1Fl2ggm/Pz5SyU6Z0dhoQbDx69m06AVJtk4SmRgdOw1C29kxcYxu5Wr96OO3wCUcB0Ms45JcBlxjkzxHppwDwE8VxEv6y4AyDE1NscsRjhvr1JVS/K9fNC1cyLS3n3EhWPn8fjqbTy8fAuPr9/BHQLZnXNXcfHIWRze/ieB9Bk+P32FVwS4P3cdwZWTF/Hi3iPcu3Ibb/59jOc3/8UzAutL+v3Fo+dx5+/rSCaF3KlTb/xi1FCUU5o7RIocPBYUxmRyq1kEweAXU2LIEAFKG9fWBMCOcKrfRS6G7wQbt3ghPjgbhyvijMwDUM68HqwGnkOdvpyCthGOg/aR4DiMxstuI2rnWwQtvkGiZBrq+vXD5i1HdQ/uC2K9+ITp0oaBJrFcOoHKtWK0K9YeQoG0pdopEoa1OWLBy2v5qgTS4gnIPGbfDXLAmcHD67/8PgNQ78Jl6MbyFnBysVuGDj8KrhjcRWhTWVYp4jim6U2wIjZYCQumy80RDKjEdxTznS2SD6W6gBy55FNfI6ArgDfQlYJmZXJXyoK/Tt2AlWc3De/WLjIwKpAPRGy4fPVBMiWSKv3y+TPGTVoLY/d+KB80BzXCxsHCxl+0FRP1E36SKXMW/ldPwSYmdcKIBd1QgcxYzdr+OHnoT7y59xy3z11H6rtPeEs+0uOr93D91FUaP6ffnybwvab37uIrKfQzR87g5P6TeHbtX1w+fhFPb9zDM/IjHxJ7Prl+Dxf+PC/OfXD1Khzdm5K5by7Yl1msNoHJhISFkVWolMZfw0mIJBe/bnKyJQe2cQAAEABJREFUQaKUcBDQSzfmVRGuMzYn8FYzckNVMst1Bp4Ufq/9gD/hNeUSmm98iWbrHqBmi7mw8OyLiVPWSW3y6FWYn41lqw/AmFmvArFerTZiAaBB2BDNTTlRmOZ5Xlp6ekm5JNdASSZVSioVyyUJj0xhRouXVPJYYjd97Jjf/5mgVUSpepyr3qqLWU2Ry2p/UHlfmFqZcqUm06m60IsCXg7JsNRWl3mKGoFCfect5X259qQUF7JIXyyfy/YffvmWgr6DF2l4x3beZ0wIFPJXGoYPxenzt3RP99MnL/HryOUwtI5DOZNWIujrFdgLHoFSMicnJrA/xSzDvpSZXQQqV6+D0uWMYGFhg1XzF+P30VOwf+duXDx2Aqf2HsTsSbNweM9+jBgyDDN/nwRPN09MnzgV29dvwsHN23Dz9HmcPngc6e8/4/urd3hPYH116yFuX7wBpGVh5NAxKFvNl4DTivy2luTHxZDKjRDgM7Ftjko16qKaqRdcAnqLXSs5CK0Hn7Tcpjw8/NOa2LBCZUsYRU6C/eCzsO13GB6TrsOR2K9G+EyYeyZixKglePXqve6+nDp3k5c/pV59xjFCcHBr5QnTNmoKyNIU5Oe9JRaKLpTDZzQPYluOjOJ1G5lS3UamCL1kiDlUwjCKOVZqO5SVEJ2plc8pGtLLV/mAQgfIHVJJBavVilrF/CwQnZmZoRvzF9Ar3yxlLVh8OcUc54qg9PdiNQJSsqvcCpiPMnx+dk5uTWi1qzSafBwnNvQJGlDIa5KlOFRAN7J0jZbo2ns2/r3/TAXEVxg2YT3MnTujrGkULF07w6NhH3g17C0m1M6zo1CTbAarGDmjfKVaqGxcD7/U8BTFRxWrOcLU0geW9kGiDYe5fTgxVSCMLRuR6Q4m00n+nHMYHNxC4e4TBv/ASPw6cDTGDB+LsSPGYcLICRjYuz/mTp0utkH9pZorqtfypc9ogOpm9Yh5PenvuhHz1UXpMpXF57uKjOceMuPpGdBFl4LfQ7gR1uQjVqhigdodlsNp1GXUjFmFUl5jYOXTF8NGLsELuTkkv+7efYrOvWajVPWWvMcfShrHihhfg7DBhTduS/eL7vE+8vmt5CyVMtw6TZRRqkpylawWXRmurgZIApj2J2vBLF7E+EeqiIYUV8H/n2vBylJcVlZmEdoUzaTFUkpmkTggA0oyx0pmTJ5sanN0Of+KOVaEh67GRK4XUJfpidZd2YL6Syu0np2dE8fCLT0jE/OW7EF1mzaiD00JdqDJN6xMYmXwqOV48uSlbgJevX6PGQt2ihLDX0yjUdWmjbTI758AS6dIEc5gMVKhqr3wrxiQvH7MPphYhyUguMuL/x6BfeDZsJ/YX8OjUT+R3MCs5eTbE/Y+3WBeNx6mDtEiwGzmEAUjMrGVzQJhWicEptbBYn9dDrFUM6tPhy+qWwSiunkgyleuLQLNSp2HHnzST2f/XlIuIP3egx4gW/dYlDW0Q+kGE1HOdagoVJo1ZwPevfuku+4n9AAOGLYElTgLvWJz8vWiReaRqUMH7ap1R7T5BQUcf/lKCr4Xz5XcscBA3YJP1P0oS6jSooG+tkPXIUMSG0qMl+cqS1ly40yXrGydIJHMa56unihXjZ/cPB0GxFIcZzcoCkUxxyINP79AF7FWFpCVxtJSLcAP3ViYYwKsRqvRhWSYsqWSz+xi9SZancrSyLUDquaF3MxQ9BXhBofp6Wm8q3Lei1cf0GfIYk054yit2AKe61LJT6xq2QYDhy3FzduPdROSk5WBPQf/FjWuJo4dUda4JSqZNRVquJqxAwxr2JNfGIU67m3kOF1PXVcrVyUcIsyjdLiQmXQJkEIjfB6vXng27CvAIA4Cqjv9m5MOGLycJ+ji31tu7REtRJBxnXBSvt6oaGgj+akitSpRZsKe8pJdIryD+8I7qB+c/HqJpcMShiGoadsObTpPwd69p5Gfq08Pu333CQYNX4aqVvHStljcnZTEBvdnHjhyqebNO6l3I81dEs2btZgTcnnISpUS7o987xlIYn5+6HuFZ6hqOHgtWN/TOUuHEwYpW0zFBKen6cfqHEA+R+3OKfmA0koImeDvqhQaoWJUa8Ec6xO0KRclKWZXb471a8H8BPxI1a8LKypYya5Rl+wp9QKsjnn5Rin/VJd8KsmuX79+DdBqNSJSeunqv+jYc7amnFErrVSnEC18ncq1okntTcPxk1fphufpJukxCQlm0AYRw1CtNp1b0oGA6yoK0F18u8C7UW940sR7COCQCQyQ8vB06fDyoWSnSGayly51Sl+11l0kC/BPToJwEWlTrMYTyB9sSSIkHJWqOZApdhfgZKBzqpV3IwZcXwFqbvFWwzYe5UyjRUVaSNQYLFq2U+xGoLxYuZ48cx1t6VorC8YLlwLK9FCWNWqh7dZ3vkbs7Sztw3wzLS0jPEWfLmeguEIsGpS6H3UZrhjL4Ck+J6KMMjdPLM+xapZUsLQurKhg/r/qFL6fBaIZXwqWhArOzZH2CdElnmYXS0hVZbpk58jJhTK1qpNTlTFTtPi3/L5Cv0VLPvVJi7rEVvnzde9nZfMyUGnl/9KX7kxfWqRwXLx8D50S5xSWM43VCtNcoxVvIyF25w5oOhTzlu7B8xf6iePMFVZ/c+j9lu0mwcQhHuXNosiUx8DYoR3svRME4BgMPsH94UU/PRv2FsAQLMWHv95EKlnLSv6hs1y7K+p4dSKiu2BMW/fWwu8zrGkLW9co1Gs8UADX1rMratq1JdMZg1/MYmDt1RNtEqZj0ar9vL0VlIxpfr0kwbNw2R4EchcK3gSGgUfXyjHTciYtkNB3TuG1W0/E/9FqC5/TxA4iIJSV56SUfo8OpZ5HPS46D+J+y3hQJ5sWP+e/ictFE5SFac6WTLY6IVX/PVRbdeXm6lOnFapUPx1KJZOiiPk8FhB5xdLzNfKSjY7W06QAtTCpTPGZ6kyJjP84pf+DXdk3LCXlmGkqZ2RkDi7IzxVe9c1bT9Fj4AJtjTrtyEdsKgGRJ4YYoQaZLs622b33DD59/qYCowYf3n/E/iMXMWT8ajSOGQM7rx6obNUGZQiU3HTTmJiIc/nseTnNX0qLEsKmUR8BUunoozt8gqTfMWhZhUtZzD1Qx6MjjGwiUcE4GCXKOKI8MXX52m3Ip40nfzIRzdv9jrHTNom12a9f1d8Roq/Nrr1nBdvVrBMvdSGtIj1k7H7UJL+479DFGm6RK7/effuWPCE7J8eIm4rSfLLAKM2MxfOjzEmKWjSk6pdelZ7g/xUKWfJYb4I5I0ZJyefPZECzSBFWTnbb1Cn5gl1FYbpUVVkom2BJBatSaNRrwergodheKf2/RSVF0rGUjGit+stJ9Sbqkk91sit/aXWNgPhyqk1MlFauMt0bSJk2OXxOVXoAhtKNFs7fk6dvMGnGJq2zbx+NmCSxVXwrEfnncR3XrujcexY2JZ3A61dvoSTDKq9PX5Jx7uJdrFp/CENGLyeW/B3ujX+FhUd3VLdrD0MCZxWLWFQicFYwj8Uv5sRa5tHyT/moFYWKZq2I0XiTvjYkgtqiBrGrjU9PBEaMROfEBRg3fSO27DyBy9cfIvVHGoq+8vH06Sus2XQUHRNnQ2yVy9fC18A/mfWqNIdTvR6aOYt2aZ48013He7IOE+nem6rmxEA2uzqQKEnHyjyIMbk4uWJOpPHP6jb4pwxo1Zyk6kxwqhx247mWElT0eQWKCVbjJ0NVoMRu23+o8T//zv1ZSV1OEXOtK8tT1QgUL8UrWhcgnVv8/f+LMT/VBrokyKysCuQkJ2g0Bed5Jr6npGHX/ouI6zJVU82ytUaatHBRKC98RgKjIQEjJHI4xk1eiwNH/saTZ+9EBst/Xpzj9+0bHj16hvMX75Cw+Qfrt53AktWHMHvJbkxfuANT59MxbzuNd2Leir34Y+OfSNpzHn+dvolbtx/h7dv3yOZmncUAzy9uAHT3/gvs2HMaw39bgcCwoajMVYTsSoiey825/6K0NGnbVkNsXrjv0D/4kSblFBYW5l+lSf2VJrGaqj6Di4VKZmfpXZ/ic1X8vurcnhwpAbnIOTn6Og/95/wEB3KSsuLKFSvZLeLiKX9H+j456sJ0pZ9Hvq4lG5va77onolBnjjWy86k8EYpTqiBf93QUy7QpmqyY8VOm/Sm7ZmWXkDswKCqrpFg6kp/Y/IKCklnZOUGpKSkb6Bxhy+7df4YlK/cjLG6chhhMw020xaQKVgmXlGNVTndqDy/yyzomzsK02UnYte8cgechPn76jOyczP8C8//hpdXmIy0tlVj3DS7+cwubiYHHTdmI2C7TRfOhmpatpcwU/i4cQmG2qyA9KCYO7TWt2k3QrN98HK/ffYGmUDwkqQWFhbu+fP0aQfNUTrEWNCeluXcju0VK1SKbWk6HklgqVScUhDn+HwmkP1s6E6JBlXRcJAFZFjjKQoYwxyxAU4rGFdVp+Moyn1TSQSb4x49iW3Wp2nFkyC041HWdSjqWEjFXxkqComKCmZqVsI5SO1CkzFMBj2plRW2Cpa4LGgnQefoxPznqEAKvK9P7JZVrIKBa/EhL590Oj3CeVWFhAZ4Syy1dcxBxnSZrrJy7aEpUi5DCOcw0/LOyPPnMPoYtYEBK1NSxI6njPghtMVKEQXoNmodRE1diyuzNJHJ2YzGBe9kf0rGI2G/mgiRMmLYev45eii595yCaxE6jpkPg6N0D1eu0FR2lRD/lShES2CpK7KYArmytWK1nQF9N38GLCzcnHcebNx8VKi4kIJ0hAhiRkvrDTjFlcosLA2UfDmUesuTMFDHWlU4WNcEKYHR1G0XGKbrGVApICmT/X+/z/9DNj9q/VEyw0ppDvT2XYo7ThTlO12/VVUT9qJRqtqKEcvRmVv2+msr1wewslenN0q0nq1WUun5E+XxlnKNSzPpzsnXvZ8vKiW9Kjmz2c0WJX5ZwuLmFsAiuysqL/Fl7MtMDNdpC3l37Mznk5Nwnk9N/HVNmbUGL9hO0TvUTC6tZxhcSG2p1gGBQVpJBye/xJizk+Es/1UfTou9z6zI+fgkXa7AlKoTLRzMV6MJgULOF1tyxo8av2bDCxF8XatdsOIxbd5/qzCu9UvLz8y7QNYwiwLkRKRhIdRgiKCyuU5ha1bxJgeN8XSmk+n7/XLX+tz5DOkevfuU+kOJ+F4l0qOZHrBsrfy9Hvwih+07yXCnbwRVX0gKVfJJoUq4puhzDtKnPjpBiQeq4UPGlGTHmrAlVdoRigouX7GX8j2WaH2n67Bp+GovTvRLo5ARIJWheZH+TQg33KDZgM60sKXGjdboBtnQ97dLT03hLJu61kafVFCA1NQO37j3H1p0nMXX2ViT2n68NaTFS41C/j6a6XTtNObMorUH1ltpSnKlTWQJQiQqh3B1UtKLjVQdx8HuVwlDKMBJlakRryxGjVbFpo7V076HxbzJEE9dhsmbwqBUa9hNPnLmBZy/e6SItWmcNyjIAAAT2SURBVE0+B+6e0MStIyWbQC6Fs8giUrXJ49goB5J1/XoKC/6TsaK4Rcqc8GewOFDH6sTSWXa2bqyITh6r50e530ozKv2c6JdbU/UxRt3SK/99dVdUNscKlr7LS6/iu8pRFHn9V9knJF1njoutUMgLz1q5c6r8flamLjIuFqpl6menNU0XGc8VX1q9OK2oYP7bSoKiMMF5+bq6EmmVpaAI3etWWTSFRVwHKXsjWz5HT/dyokNperBKq3sTkxkoS+bMgW5KR/rs2SQIOIeJK5EymCX5RWYcT5+/xu27z3Hi1A3s2nsG6zcfFeZ2+twtmDk/iY7tBNrNmE2CZPHKvWAm27n3HDirh7euf/7ivQA4/T1otIoQ0XK7LlbvJ9LS07nJTwIxlyvdi3KZukahGYLpaFyarqeU+jozxd4t2hLq7a+UVHlpTiQ/TSubXXUNh84Ei3nQJ5AWnxNm0rx8fVKKFIKTVi7kjlhF5kSYXfnei5Uv+Rp0KysZUu/x/zSoJLbVdTNXt09l51Xd603/vr6/m2ixmpUt4kRq06y0XhWlebmS2snMUsxxjsok/KTkU5R55umC37oUMNkMZBZ7X/29FVcgUzfOl4LiWbptoXgiDWTzpSpDzRY3jhiyBt0kJ7qhofR9etExgxz6bQSYM3QQY2o55YQXYbnyKEU+Un/y7y98Linz+1pN4Tl6iHYQCObQTe9L19ycgO1M98w4R75m/fcWDxHvq2sgAsfqNXReK1fde2UtXrnfiukUKVNylori/oh5y8/TZa/kqe+3bAalOVTyADKLmNHi8yP+doZ+HhRzrO6Mr2BAWVsujp8iLXoV2ize1bL49kpquleWYIqYYFWyIstyZfyzuJA6cbF446Ofq+Cs4ipYUl9M96rvrSh5aRnpu1DukiJMkZ9kjXifbwqbM/repQnw7MiXkgvq//O9+e+KdCSNtiJ9fk16+u1pbEd/1/b791SHwkKtA7GpLalOO/p8B2IKEzqvIgklkdbOGSLFFWS2JAhK0ZjbXHCPRR6XFMuWbNbk6ymybFmsu6jCTLrIhEa6NrUJVmes8AMvrud70Wv7X3OiH2cUU77/VcH82Qp+lKXXn237pt4nRLdhtX63zEKdWlHMQJGtlmTaFD5BmrpML6NImV4hm93sHN05ot5ETmhQ1wXkyWZASdGWitglRayUeSpj/gwlfy1bHv+P/ELpe2dl6ntbZ6rGqt7EwjQpdQ5pIn+NhQxv0l2awxr098n8pbHPVYq7waara2bk7ypMlqrOIe2HVBmmugauCORVHPF5XG/Bn8kCoki+JLs/aUV3KpWuTW/KlGtQ5kQxu2LMtdeqeVBy9rKUOSnU1/3wWF23ocyJcm3SPBTIXTF+yDVA+arSW/nacvS5oCIyoSl6PervrcaSOtdQFCUpF6vk6XP6ldhSSVcXkK+vESgs0E2kyJZVj/mGyBel3AR1yZ5iKtQAVGoElExqpeY4XS5YUb4TP2G8lJOeka6je7nIqVjxk5JhnaXbk+I/20Xpkin1G/Lovmu2UhtTUKRORp4wFjclyYSV1I3z8krRuJQ8ZpAKsNJnlVSSdPNlX6pooVb2/+9YAFDeJEjJTpbcokwBAiU7WanPEP6tuPdZReZEXFv+f+dEnbWsr/vJ05dO0lykyTHd/Dx9DYe6nkPBhv7a9HOiAFC9UQ1bJEVDKDj5P5TCnQKRanwxAAAAAElFTkSuQmCC";
5169
5485
  //#endregion
5170
5486
  //#region \0dsh-css:src/client/components/CiteCiter.module.css.mjs
5171
- const css = "[data-citeciter-docked=true]{grid-template-columns:var(--citeciter-sidebar-width) minmax(0, 1fr) var(--citeciter-dock-width)!important}[data-citeciter-docked=true]>[data-side=details]{display:none!important}._1Fxyxa_selectionPopover{z-index:9999;box-sizing:border-box;width:min(378px,100vw - 24px);color:var(--dsw-alias-label-primary,#20232a);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 96%, #fff);border:1px solid var(--dsw-alias-border-l2,#d9dde5);pointer-events:auto;border-radius:14px;padding:10px;position:fixed;box-shadow:0 16px 44px #191f2c33,0 2px 8px #191f2c14}._1Fxyxa_popoverQuote{color:var(--dsw-alias-label-secondary,#5c6472);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}._1Fxyxa_popoverQuote:before{vertical-align:1px;content:\"\";background:#3478f6;border-radius:999px;width:6px;height:6px;margin-right:7px;display:inline-block}._1Fxyxa_popoverComposer{grid-template-columns:minmax(0,1fr) auto;gap:7px;margin-top:8px;display:grid}._1Fxyxa_popoverComposer input,._1Fxyxa_topicToolbar input,._1Fxyxa_topicToolbar select,._1Fxyxa_composer textarea{box-sizing:border-box;min-width:0;color:var(--dsw-alias-label-primary,#20232a);background:var(--dsw-alias-bg-base,#fff);border:1px solid var(--dsw-alias-border-l1,#dfe3ea);outline:none}._1Fxyxa_popoverComposer input{height:36px;font:inherit;border-radius:9px;padding:0 11px;font-size:13px}._1Fxyxa_popoverComposer button,._1Fxyxa_sendButton{color:#fff;cursor:pointer;background:linear-gradient(135deg,#3478f6,#245fd1);border:0;border-radius:9px;padding:0 14px;font-weight:650;box-shadow:0 4px 12px #3478f638}._1Fxyxa_popoverComposer button:disabled,._1Fxyxa_sendButton:disabled{cursor:default;filter:grayscale(.45);opacity:.52;box-shadow:none}._1Fxyxa_popoverComposer input:focus,._1Fxyxa_topicToolbar input:focus,._1Fxyxa_topicToolbar select:focus,._1Fxyxa_composer textarea:focus{border-color:#3478f6;box-shadow:0 0 0 3px #3478f621}._1Fxyxa_popoverMode{color:var(--dsw-alias-label-tertiary,#858c98);margin-top:8px;font-size:11px}._1Fxyxa_popoverMode summary{cursor:pointer;user-select:none}._1Fxyxa_popoverMode select{width:100%;height:30px;color:var(--dsw-alias-label-secondary,#535b68);background:var(--dsw-specific-bubble,#f5f7fa);border:1px solid var(--dsw-alias-border-l1,#dfe3ea);border-radius:7px;margin-top:6px;padding:0 7px}._1Fxyxa_topicLauncher{z-index:200;color:#fff;cursor:pointer;background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 90%, #dceaff);border:1px solid color-mix(in srgb, var(--dsw-alias-border-l2,#d9dde5) 65%, #3478f6);pointer-events:auto;border-radius:999px;align-items:center;width:112px;height:112px;padding:5px;display:flex;position:fixed;bottom:76px;right:22px;box-shadow:0 10px 28px #245fd13d}._1Fxyxa_topicLauncher img{object-fit:contain;width:100px;height:100px;display:block}._1Fxyxa_launcherCount{border:2px solid var(--dsw-alias-bg-base,#fff);background:#245fd1;border-radius:999px;place-items:center;min-width:24px;height:24px;padding:0 5px;font-size:11px;line-height:1;display:grid;position:absolute;top:-4px;right:-4px}._1Fxyxa_topicLauncher:hover{transform:translateY(-1px)}._1Fxyxa_dock{--citeciter-accent:#3478f6;z-index:1;box-sizing:border-box;min-width:360px;color:var(--dsw-alias-label-primary,#20232a);background:var(--dsw-alias-bg-base,#fff);border-left:1px solid var(--dsw-alias-border-l2,#d9dde5);pointer-events:auto;grid-template-columns:clamp(138px,24%,210px) minmax(0,1fr);display:grid;position:absolute;top:0;bottom:0;right:0;overflow:visible;box-shadow:-12px 0 32px #1a1f2c14}._1Fxyxa_resizeHandle{z-index:3;cursor:col-resize;touch-action:none;width:10px;position:absolute;top:0;bottom:0;left:-5px}._1Fxyxa_resizeHandle:after{content:\"\";background:var(--dsw-alias-border-l2,#d9dde5);border-radius:999px;width:3px;height:42px;transition:background .12s,width .12s;position:absolute;top:50%;left:3px;transform:translateY(-50%)}._1Fxyxa_resizeHandle:hover:after,._1Fxyxa_resizeHandle:focus-visible:after{background:var(--citeciter-accent);width:4px}._1Fxyxa_citationWaterline{z-index:199;pointer-events:none;opacity:0;width:100vw;height:100vh;transition:opacity .16s;position:fixed;inset:0;overflow:visible}._1Fxyxa_citationWaterline[data-visible]{opacity:.48}._1Fxyxa_citationWaterline path{fill:none;stroke:color-mix(in srgb, var(--citeciter-accent) 72%, #73d9ff);stroke-width:1.5px;stroke-linecap:round;stroke-dasharray:3 7}._1Fxyxa_topicRail{background:color-mix(in srgb, var(--dsw-specific-sidebar-fill,#f7f8fa) 94%, #edf5ff);border-right:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}._1Fxyxa_brand{border-bottom:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex:none;align-items:center;gap:9px;min-height:65px;padding:0 13px;display:flex}._1Fxyxa_mascotStatus,._1Fxyxa_settingsWhale{background:linear-gradient(145deg, color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 90%, #3478f6), color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 72%, #3478f6));border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#dfe3ea) 64%, #3478f6);width:32px;height:32px;box-shadow:inset 0 1px 0 color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 72%, transparent);border-radius:10px;flex:none;place-items:center;display:grid;overflow:hidden}._1Fxyxa_mascotStatus img,._1Fxyxa_settingsWhale img{object-fit:contain;width:100%;height:100%}._1Fxyxa_mascotStatus{position:relative;overflow:visible}._1Fxyxa_mascotStatus img{transition:transform .18s}._1Fxyxa_mascotStatus>span{pointer-events:none;position:absolute}._1Fxyxa_mascotStatus[data-state=diving] img{transform:translateY(9px)}._1Fxyxa_mascotStatus[data-state=diving]>span,._1Fxyxa_mascotStatus[data-state=surfaced]>span{border-top:2px solid #44aef4;border-radius:50%;height:6px;bottom:3px;left:1px;right:1px;box-shadow:0 -3px 0 -2px #7fd9ff}._1Fxyxa_mascotStatus[data-state=reading]>span{border:2px solid #245fd1;border-radius:50%;width:9px;height:9px;top:4px;right:2px}._1Fxyxa_mascotStatus[data-state=reading]>span:after{content:\"\";background:#245fd1;border-radius:2px;width:6px;height:2px;position:absolute;bottom:-3px;right:-5px;transform:rotate(48deg)}._1Fxyxa_mascotStatus[data-state=answering]>span{color:#245fd1;content:\"\";background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid #8eb4ff;border-radius:7px;place-items:center;width:15px;height:13px;display:grid;top:-4px;right:-5px}._1Fxyxa_mascotStatus[data-state=answering]>span:before{content:\"“\";font-size:12px;line-height:1}._1Fxyxa_brand div{flex-direction:column;min-width:0;display:flex}._1Fxyxa_brand strong{text-overflow:ellipsis;font-size:14px;overflow:hidden}._1Fxyxa_brand>div>span{color:var(--dsw-alias-label-tertiary,#858c98);font-size:10px}._1Fxyxa_railCaption,._1Fxyxa_railFoot{color:var(--dsw-alias-label-tertiary,#858c98);flex:none;justify-content:space-between;align-items:center;gap:6px;padding:10px 11px 7px;font-size:10px;display:flex}._1Fxyxa_railCaption button,._1Fxyxa_topicToolbar button,._1Fxyxa_composerActions button:not(._1Fxyxa_sendButton){color:var(--dsw-alias-label-secondary,#58606d);cursor:pointer;background:0 0;border:0;border-radius:6px}._1Fxyxa_railCaption button:hover,._1Fxyxa_topicToolbar button:hover,._1Fxyxa_composerActions button:not(._1Fxyxa_sendButton):hover,._1Fxyxa_closeButton:hover{background:var(--dsw-alias-interactive-bg-hover,#0000000f)}._1Fxyxa_topicList{flex-direction:column;flex:1;gap:4px;min-height:0;padding:0 7px;display:flex;overflow-y:auto}._1Fxyxa_topicItem{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:9px;grid-template-columns:7px minmax(0,1fr);align-items:start;gap:7px;padding:9px 8px;display:grid}._1Fxyxa_topicItem:hover{background:var(--dsw-alias-interactive-bg-hover,#0000000b)}._1Fxyxa_topicItem[data-active]{background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 88%, #eaf3ff);border-color:color-mix(in srgb, var(--dsw-alias-border-l1,#dde1e8) 72%, #7ca8ff);box-shadow:0 2px 7px #1c222f0d}._1Fxyxa_topicItem[data-archived]{opacity:.58}._1Fxyxa_topicStatus{background:#99a1ae;border-radius:999px;width:6px;height:6px;margin-top:5px}._1Fxyxa_topicStatus[data-running]{background:var(--citeciter-accent);animation:1.2s ease-in-out infinite _1Fxyxa_citeciterPulse;box-shadow:0 0 0 3px #3478f629}@keyframes _1Fxyxa_citeciterPulse{50%{opacity:.42}}._1Fxyxa_topicCopy{flex-direction:column;gap:3px;min-width:0;display:flex}._1Fxyxa_topicCopy strong,._1Fxyxa_topicCopy small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._1Fxyxa_topicCopy strong{font-size:12px;font-weight:590}._1Fxyxa_topicCopy strong[data-pending]{color:var(--dsw-alias-label-secondary,#606875);font-style:italic}._1Fxyxa_topicCopy small{color:var(--dsw-alias-label-tertiary,#858c98);font-size:10px}._1Fxyxa_railEmpty{color:var(--dsw-alias-label-tertiary,#858c98);margin:9px 6px;font-size:11px;line-height:17px}._1Fxyxa_railError{color:var(--dsw-alias-state-error-primary,#c93f3f);overflow-wrap:anywhere;margin:9px 6px;font-size:10px;line-height:15px}._1Fxyxa_railFoot{border-top:1px solid var(--dsw-alias-border-l1,#e4e7ec);padding-top:8px;padding-bottom:9px}._1Fxyxa_learningWorkspace{background:var(--dsw-alias-bg-base,#fff);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}._1Fxyxa_dockHeader{border-bottom:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex:none;justify-content:space-between;align-items:center;gap:12px;min-height:64px;padding:0 15px;display:flex}._1Fxyxa_dockHeading{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:2px 7px;min-width:0;display:grid}._1Fxyxa_dockHeading strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}._1Fxyxa_dockHeading>span:last-child{color:var(--dsw-alias-label-tertiary,#858c98);grid-column:1/-1;font-size:10px}._1Fxyxa_modeBadge{color:color-mix(in srgb, var(--dsw-alias-label-primary,#20232a) 36%, #3478f6);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 84%, #3478f6);border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#dfe3ea) 64%, #3478f6);letter-spacing:.02em;white-space:nowrap;border-radius:999px;padding:2px 6px;font-size:9px;font-weight:700}._1Fxyxa_closeButton{z-index:5;color:#3478f6;cursor:pointer;background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#d9dde5);border-radius:999px;flex:none;place-items:center;width:30px;height:30px;padding:0;display:grid;position:absolute;top:50%;left:6px;transform:translateY(-50%);box-shadow:0 4px 14px #1d222f24}._1Fxyxa_closeButton img{width:18px;height:18px}._1Fxyxa_emptyState{box-sizing:border-box;text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;padding:34px 24px;display:flex}._1Fxyxa_emptyWhale{background:radial-gradient(circle at 32% 25%,#fff,#dceaff);border:1px solid #c9dcff;border-radius:22px;place-items:center;width:68px;height:68px;margin-bottom:13px;display:grid;overflow:hidden;box-shadow:0 14px 35px #245fd124}._1Fxyxa_emptyWhale img{object-fit:contain;width:100%;height:100%}._1Fxyxa_emptyState h2{margin:0;font-size:17px}._1Fxyxa_emptyState>p{max-width:430px;color:var(--dsw-alias-label-secondary,#606875);margin:9px 0 0;font-size:12px;line-height:20px}._1Fxyxa_contextBar{background:color-mix(in srgb, var(--dsw-specific-bubble,#f6f7f9) 90%, #edf5ff);border-bottom:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex:none;padding:10px 14px}._1Fxyxa_contextBar blockquote{max-height:57px;color:var(--dsw-alias-label-secondary,#59616e);border-left:3px solid var(--citeciter-accent);margin:0;padding-left:9px;font-size:11px;line-height:18px;overflow:auto}._1Fxyxa_contextMeta{color:var(--dsw-alias-label-tertiary,#858c98);gap:9px;margin-top:6px;font-size:9px;display:flex}._1Fxyxa_contextMeta span:first-child:before{content:\"\";vertical-align:1px;background:#b3bac5;border-radius:999px;width:5px;height:5px;margin-right:4px;display:inline-block}._1Fxyxa_contextMeta span[data-ok]:before{background:#27a96b}._1Fxyxa_topicToolbar{border-bottom:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex:none;align-items:center;gap:6px;padding:7px 11px;display:flex;overflow-x:auto}._1Fxyxa_topicToolbar form{flex:180px;min-width:130px;display:flex}._1Fxyxa_topicToolbar input,._1Fxyxa_topicToolbar select{border-radius:7px;height:30px;padding:0 7px;font-size:10px}._1Fxyxa_topicToolbar input{flex:1}._1Fxyxa_topicToolbar form button,._1Fxyxa_topicToolbar>button{white-space:nowrap;flex:none;padding:5px 7px;font-size:10px}._1Fxyxa_archiveButton{align-items:center;gap:3px;display:inline-flex}._1Fxyxa_topicToolbar button:disabled,._1Fxyxa_nextQuestions button:disabled{cursor:default;opacity:.42}._1Fxyxa_transcript{flex-direction:column;flex:1;gap:14px;min-height:0;padding:17px clamp(12px,4%,28px) 24px;display:flex;overflow:hidden auto}._1Fxyxa_assistantTurn,._1Fxyxa_userTurn,._1Fxyxa_errorTurn{overflow-wrap:anywhere;min-width:0;font-size:13px;line-height:21px}._1Fxyxa_assistantTurn{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#e4e7ec) 72%, transparent);padding-bottom:14px}._1Fxyxa_userTurn{background:var(--dsw-specific-bubble,#f1f3f7);border-radius:12px 12px 3px;align-self:flex-end;max-width:86%;padding:8px 11px}._1Fxyxa_errorTurn,._1Fxyxa_panelError{color:var(--dsw-alias-state-error-primary,#c93f3f);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 88%, #f45555);border:1px solid #c93f3f33;border-radius:8px}._1Fxyxa_errorTurn{padding:8px 10px}._1Fxyxa_errorTurn[data-status=stopped]{color:var(--dsw-alias-label-secondary,#606875);background:var(--dsw-specific-bubble,#f5f6f8);border-color:var(--dsw-alias-border-l1,#e4e7ec)}._1Fxyxa_errorMeta{color:var(--dsw-alias-label-tertiary,#858c98);flex-wrap:wrap;gap:5px 10px;font-size:9px;display:flex}._1Fxyxa_errorTurn details{margin-top:6px}._1Fxyxa_errorTurn pre{white-space:pre-wrap;max-height:160px;overflow:auto}._1Fxyxa_assistantTurn p,._1Fxyxa_userTurn p,._1Fxyxa_errorTurn p{margin-top:0;margin-bottom:8px}._1Fxyxa_turnRole{color:var(--dsw-alias-label-tertiary,#858c98);margin-bottom:5px;font-size:10px;font-weight:650}._1Fxyxa_flowDisclosure{min-width:0;color:var(--dsw-alias-label-secondary,#606875);font-size:12px}._1Fxyxa_flowRow,._1Fxyxa_flowRowRunning{align-items:center;min-width:0;height:26px;display:flex;position:relative;overflow:hidden}._1Fxyxa_flowRowRunning:after{content:\"\";pointer-events:none;background:linear-gradient(90deg,#0000 20%,#ffffff94 48%,#0000 76%);animation:1.7s linear infinite _1Fxyxa_citeciterSweep;position:absolute;inset:0;transform:translate(-100%)}@keyframes _1Fxyxa_citeciterSweep{to{transform:translate(100%)}}._1Fxyxa_flowDot{color:var(--dsw-alias-label-tertiary,#858c98);flex:none;margin:0 6px}._1Fxyxa_flowSummary{min-width:0;color:var(--dsw-alias-label-tertiary,#78808e);white-space:nowrap;overflow-x:hidden}._1Fxyxa_flowBody{max-height:320px;color:var(--dsw-alias-label-secondary,#606875);background:var(--dsw-specific-bubble,#f5f6f8);font:inherit;white-space:pre-wrap;border-radius:7px;margin:5px 0 5px 22px;padding:7px 9px;font-size:11px;line-height:18px;overflow:auto}._1Fxyxa_toolPreview{background:var(--dsw-specific-bubble,#f5f6f8);border-radius:7px;gap:5px;max-height:360px;margin:5px 0 5px 22px;padding:8px;display:grid;overflow:auto}._1Fxyxa_toolPreview>strong{color:var(--dsw-alias-label-tertiary,#858c98);text-transform:uppercase;font-size:9px}._1Fxyxa_toolPreview pre{overflow-wrap:anywhere;white-space:pre-wrap;margin:0;font:10px/17px ui-monospace,SFMono-Regular,Menlo,monospace}._1Fxyxa_loadingCard{color:var(--dsw-alias-label-secondary,#606875);background:color-mix(in srgb, var(--dsw-specific-bubble,#f5f6f8) 82%, #3478f6);border-radius:9px;align-self:flex-start;padding:8px 10px;font-size:11px}._1Fxyxa_panelError{overflow-wrap:anywhere;margin:0;padding:8px 10px;font-size:11px;line-height:17px}._1Fxyxa_composer{background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1,#fff));border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l2,#d9dde5));box-shadow:var(--dsw-shadow-lv2,0 5px 18px #1d222f14);border-radius:22px;flex:none;margin:0 12px 12px;padding:10px 8px 6px}._1Fxyxa_composer textarea{resize:none;width:100%;min-height:50px;max-height:150px;font:inherit;border:0;padding:4px 12px 0 16px;font-size:14px;line-height:22px;display:block}._1Fxyxa_composer textarea:focus{box-shadow:none}._1Fxyxa_composerActions{align-items:center;gap:6px;margin-top:4px;padding:2px 0 0 8px;display:flex}._1Fxyxa_composerActions span{color:var(--dsw-alias-label-tertiary,#858c98);margin-right:auto;font-size:9px}._1Fxyxa_composerActions ._1Fxyxa_sendButton{border-radius:999px;place-items:center;width:34px;height:34px;min-height:34px;padding:0;display:grid;transform:translateY(-2px)}._1Fxyxa_nextQuestions{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}._1Fxyxa_nextQuestions button{color:color-mix(in srgb, var(--dsw-alias-label-primary,#20232a) 46%, #3478f6);text-align:left;cursor:pointer;background:color-mix(in srgb, var(--dsw-specific-bubble,#f5f6f8) 86%, #3478f6);border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#dfe3ea) 70%, #3478f6);border-radius:999px;padding:6px 9px;font-size:10px}._1Fxyxa_questionFrame{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#d9dde5);border-radius:14px;flex:none;margin:0 12px 12px;padding:12px;box-shadow:0 6px 20px #1d222f1a}._1Fxyxa_questionHeader{color:var(--dsw-alias-label-secondary,#606875);grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:8px;display:grid}._1Fxyxa_questionHeader>div{flex-direction:column;gap:2px;min-width:0;display:flex}._1Fxyxa_questionHeader span{color:var(--dsw-alias-label-tertiary,#858c98);font-size:9px}._1Fxyxa_questionHeader strong{color:var(--dsw-alias-label-primary,#20232a);font-size:12px;line-height:18px}._1Fxyxa_questionOptions{gap:6px;margin-top:10px;display:grid}._1Fxyxa_questionOptions>button{color:inherit;text-align:left;cursor:pointer;background:var(--dsw-specific-bubble,#f5f6f8);border:1px solid #0000;border-radius:8px;grid-template-columns:20px minmax(0,1fr);align-items:start;gap:6px;padding:8px;display:grid}._1Fxyxa_questionOptions>button[data-selected]{background:color-mix(in srgb, var(--dsw-specific-bubble,#f5f6f8) 82%, #3478f6);border-color:color-mix(in srgb, var(--dsw-alias-border-l1,#dfe3ea) 54%, #3478f6)}._1Fxyxa_questionOptions>button>span:first-child{color:#245fd1;background:var(--dsw-alias-bg-base,#fff);border:1px solid var(--dsw-alias-border-l2,#d9dde5);border-radius:5px;place-items:center;width:18px;height:18px;font-size:9px;display:grid}._1Fxyxa_questionOptions>button>span:last-child{flex-direction:column;min-width:0;display:flex}._1Fxyxa_questionOptions strong{font-size:11px}._1Fxyxa_questionOptions small{color:var(--dsw-alias-label-tertiary,#858c98);margin-top:2px;font-size:9px;line-height:14px}._1Fxyxa_questionCustom{box-sizing:border-box;resize:vertical;width:100%;color:inherit;background:var(--dsw-alias-bg-base,#fff);border:1px solid var(--dsw-alias-border-l1,#dfe3ea);font:inherit;border-radius:8px;outline:0;margin-top:8px;padding:7px 8px;font-size:10px}._1Fxyxa_questionCustom:focus{border-color:#3478f6;box-shadow:0 0 0 3px #3478f61f}._1Fxyxa_questionFooter{align-items:center;gap:6px;margin-top:9px;display:flex}._1Fxyxa_questionFooter span{flex:1}._1Fxyxa_questionFooter button{min-height:28px;color:var(--dsw-alias-label-secondary,#606875);cursor:pointer;background:0 0;border:0;border-radius:7px;padding:0 9px;font-size:10px}._1Fxyxa_questionFooter button:last-child{color:#fff;background:#3478f6}._1Fxyxa_questionFooter button:disabled{cursor:default;opacity:.45}._1Fxyxa_richAnswer{min-width:0}._1Fxyxa_richFigure{background:var(--dsw-specific-bubble,#f5f6f8);border:1px solid var(--dsw-alias-border-l1,#e4e7ec);border-radius:9px;margin:10px 0;overflow:hidden}._1Fxyxa_richSvg{width:100%;height:auto;display:block}._1Fxyxa_richHtml{border:0;width:100%;min-height:240px;display:block}._1Fxyxa_settingsPage{width:min(760px,100%);color:var(--dsw-alias-label-primary,#20232a);flex-direction:column;gap:14px;padding-bottom:32px;display:flex}._1Fxyxa_settingsHero{background:linear-gradient(130deg, color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 82%, #3478f6), var(--dsw-alias-bg-layer-1,#fff) 72%);border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#e4e7ec) 72%, #8eb4ff);border-radius:14px;align-items:center;gap:13px;padding:17px;display:flex}._1Fxyxa_settingsWhale{width:42px;height:42px;font-size:21px}._1Fxyxa_settingsHero h2,._1Fxyxa_settingsHero p,._1Fxyxa_settingsGroup h3{margin:0}._1Fxyxa_settingsHero h2{font-size:17px}._1Fxyxa_settingsHero p{color:var(--dsw-alias-label-secondary,#606875);margin-top:3px;font-size:11px}._1Fxyxa_settingsGroup{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l1,#e4e7ec);border-radius:13px;flex-direction:column;gap:8px;padding:15px;display:flex}._1Fxyxa_settingsGroup h3{margin-bottom:3px;font-size:13px}._1Fxyxa_settingChoice,._1Fxyxa_settingToggle{cursor:pointer;border:1px solid var(--dsw-alias-border-l1,#e4e7ec);border-radius:10px;align-items:center;gap:10px;padding:10px;display:flex}._1Fxyxa_settingChoice[data-selected]{background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 82%, #3478f6);border-color:color-mix(in srgb, var(--dsw-alias-border-l1,#e4e7ec) 48%, #3478f6)}._1Fxyxa_settingChoice>span,._1Fxyxa_settingToggle>span{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}._1Fxyxa_settingChoice strong,._1Fxyxa_settingToggle strong,._1Fxyxa_widthSetting strong{font-size:12px}._1Fxyxa_settingChoice small,._1Fxyxa_settingToggle small{color:var(--dsw-alias-label-secondary,#606875);font-size:10px;line-height:16px}._1Fxyxa_settingChoice input,._1Fxyxa_settingToggle input{accent-color:var(--citeciter-accent,#3478f6)}._1Fxyxa_settingToggle>input{width:17px;height:17px}._1Fxyxa_widthSetting{flex-direction:column;gap:8px;padding:5px 2px 9px;display:flex}._1Fxyxa_widthSetting>span{justify-content:space-between;display:flex}._1Fxyxa_widthSetting output{color:#245fd1;font-size:11px;font-weight:650}._1Fxyxa_widthSetting input{accent-color:#3478f6;width:100%}._1Fxyxa_dockPreview{height:72px;color:var(--dsw-alias-label-tertiary,#858c98);background:var(--dsw-alias-bg-base,#fff);border:1px solid var(--dsw-alias-border-l1,#e4e7ec);border-radius:9px;font-size:9px;display:flex;overflow:hidden}._1Fxyxa_previewSidebar{background:var(--dsw-specific-sidebar-fill,#f5f6f8);border-right:1px solid var(--dsw-alias-border-l1,#e4e7ec);width:16%}._1Fxyxa_previewCoding,._1Fxyxa_previewDock{place-items:center;min-width:0;display:grid}._1Fxyxa_previewCoding{flex:1}._1Fxyxa_previewDock{color:#245fd1;background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 82%, #3478f6);border-left:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#e4e7ec) 58%, #3478f6);max-width:55%}._1Fxyxa_settingsSaveStatus{min-height:18px;color:var(--dsw-alias-label-tertiary,#858c98);align-self:flex-end;margin:-7px 4px;font-size:10px}._1Fxyxa_settingsSaveStatus[data-status=error]{color:var(--dsw-alias-state-error-primary,#c93f3f)}@media (width<=720px){._1Fxyxa_dock{grid-template-columns:128px minmax(0,1fr);min-width:100%}._1Fxyxa_brand{padding:0 8px}._1Fxyxa_mascotStatus,._1Fxyxa_topicToolbar form{display:none}._1Fxyxa_topicLauncher{width:78px;height:78px}._1Fxyxa_topicLauncher img{width:68px;height:68px}._1Fxyxa_closeButton{left:6px}}@media (prefers-reduced-motion:reduce){._1Fxyxa_topicStatus[data-running]{animation:none}._1Fxyxa_topicLauncher:hover{transform:none}}";
5487
+ const css = "[data-citeciter-docked]{grid-template-columns:var(--citeciter-sidebar-width) minmax(0, 1fr) var(--citeciter-dock-width)!important}[data-citeciter-docked]>[data-side=details]{display:none!important}[data-citeciter-docked]>:has(+[data-shell-overlay]){visibility:hidden!important}._1Fxyxa_selectionPopover{z-index:9999;box-sizing:border-box;width:min(378px,100vw - 24px);color:var(--dsw-alias-label-primary,#20232a);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 96%, #fff);border:1px solid var(--dsw-alias-border-l2,#d9dde5);pointer-events:auto;border-radius:14px;padding:10px;position:fixed;box-shadow:0 16px 44px #191f2c33,0 2px 8px #191f2c14}._1Fxyxa_popoverQuote{color:var(--dsw-alias-label-secondary,#5c6472);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}._1Fxyxa_popoverQuote:before{vertical-align:1px;content:\"\";background:#3478f6;border-radius:999px;width:6px;height:6px;margin-right:7px;display:inline-block}._1Fxyxa_popoverComposer{grid-template-columns:minmax(0,1fr) auto;gap:7px;margin-top:8px;display:grid}._1Fxyxa_popoverComposer input,._1Fxyxa_topicToolbar input,._1Fxyxa_topicToolbar select,._1Fxyxa_composer textarea{box-sizing:border-box;min-width:0;color:var(--dsw-alias-label-primary,#20232a);background:var(--dsw-alias-bg-base,#fff);border:1px solid var(--dsw-alias-border-l1,#dfe3ea);outline:none}._1Fxyxa_popoverComposer input{height:36px;font:inherit;border-radius:9px;padding:0 11px;font-size:13px}._1Fxyxa_popoverComposer button,._1Fxyxa_sendButton{color:#fff;cursor:pointer;background:linear-gradient(135deg,#3478f6,#245fd1);border:0;border-radius:9px;padding:0 14px;font-weight:650;box-shadow:0 4px 12px #3478f638}._1Fxyxa_popoverComposer button:disabled,._1Fxyxa_sendButton:disabled{cursor:default;filter:grayscale(.45);opacity:.52;box-shadow:none}._1Fxyxa_popoverComposer input:focus,._1Fxyxa_topicToolbar input:focus,._1Fxyxa_topicToolbar select:focus,._1Fxyxa_composer textarea:focus{border-color:#3478f6;box-shadow:0 0 0 3px #3478f621}._1Fxyxa_popoverMode{color:var(--dsw-alias-label-tertiary,#858c98);margin-top:8px;font-size:11px}._1Fxyxa_popoverMode summary{cursor:pointer;user-select:none}._1Fxyxa_popoverMode select{width:100%;height:30px;color:var(--dsw-alias-label-secondary,#535b68);background:var(--dsw-specific-bubble,#f5f7fa);border:1px solid var(--dsw-alias-border-l1,#dfe3ea);border-radius:7px;margin-top:6px;padding:0 7px}._1Fxyxa_topicLauncher{z-index:200;color:#fff;cursor:pointer;background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 90%, #dceaff);border:1px solid color-mix(in srgb, var(--dsw-alias-border-l2,#d9dde5) 65%, #3478f6);pointer-events:auto;border-radius:999px;align-items:center;width:112px;height:112px;padding:5px;display:flex;position:fixed;bottom:76px;right:22px;box-shadow:0 10px 28px #245fd13d}._1Fxyxa_topicLauncher img{object-fit:contain;width:100px;height:100px;display:block}._1Fxyxa_launcherCount{border:2px solid var(--dsw-alias-bg-base,#fff);background:#245fd1;border-radius:999px;place-items:center;min-width:24px;height:24px;padding:0 5px;font-size:11px;line-height:1;display:grid;position:absolute;top:-4px;right:-4px}._1Fxyxa_topicLauncher:hover{transform:translateY(-1px)}._1Fxyxa_dock{--citeciter-accent:#3478f6;z-index:1;box-sizing:border-box;width:clamp(360px, var(--citeciter-panel-width), calc(100vw - 24px));min-width:360px;color:var(--dsw-alias-label-primary,#20232a);background:var(--dsw-alias-bg-base,#fff);border-left:1px solid var(--dsw-alias-border-l2,#d9dde5);pointer-events:auto;grid-template-columns:clamp(138px,24%,210px) minmax(0,1fr);display:grid;position:absolute;top:0;bottom:0;right:0;overflow:visible;box-shadow:-12px 0 32px #1a1f2c14}._1Fxyxa_resizeHandle{z-index:3;cursor:col-resize;touch-action:none;width:10px;position:absolute;top:0;bottom:0;left:-5px}._1Fxyxa_resizeHandle:after{content:\"\";background:var(--dsw-alias-border-l2,#d9dde5);border-radius:999px;width:3px;height:42px;transition:background .12s,width .12s;position:absolute;top:50%;left:3px;transform:translateY(-50%)}._1Fxyxa_resizeHandle:hover:after,._1Fxyxa_resizeHandle:focus-visible:after{background:var(--citeciter-accent);width:4px}._1Fxyxa_citationWaterline{z-index:199;pointer-events:none;opacity:0;width:100vw;height:100vh;transition:opacity .16s;position:fixed;inset:0;overflow:visible}._1Fxyxa_citationWaterline[data-visible]{opacity:.48}._1Fxyxa_citationWaterline path{fill:none;stroke:color-mix(in srgb, var(--citeciter-accent) 72%, #73d9ff);stroke-width:1.5px;stroke-linecap:round;stroke-dasharray:3 7}._1Fxyxa_topicRail{background:color-mix(in srgb, var(--dsw-specific-sidebar-fill,#f7f8fa) 94%, #edf5ff);border-right:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}._1Fxyxa_brand{border-bottom:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex:none;align-items:center;gap:9px;min-height:65px;padding:0 13px;display:flex}._1Fxyxa_mascotStatus,._1Fxyxa_settingsWhale{background:linear-gradient(145deg, color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 90%, #3478f6), color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 72%, #3478f6));border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#dfe3ea) 64%, #3478f6);width:32px;height:32px;box-shadow:inset 0 1px 0 color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 72%, transparent);border-radius:10px;flex:none;place-items:center;display:grid;overflow:hidden}._1Fxyxa_mascotStatus img,._1Fxyxa_settingsWhale img{object-fit:contain;width:100%;height:100%}._1Fxyxa_mascotStatus{position:relative;overflow:visible}._1Fxyxa_mascotStatus img{transition:transform .18s}._1Fxyxa_mascotStatus>span{pointer-events:none;position:absolute}._1Fxyxa_mascotStatus[data-state=diving] img{transform:translateY(9px)}._1Fxyxa_mascotStatus[data-state=diving]>span,._1Fxyxa_mascotStatus[data-state=surfaced]>span{border-top:2px solid #44aef4;border-radius:50%;height:6px;bottom:3px;left:1px;right:1px;box-shadow:0 -3px 0 -2px #7fd9ff}._1Fxyxa_mascotStatus[data-state=reading]>span{border:2px solid #245fd1;border-radius:50%;width:9px;height:9px;top:4px;right:2px}._1Fxyxa_mascotStatus[data-state=reading]>span:after{content:\"\";background:#245fd1;border-radius:2px;width:6px;height:2px;position:absolute;bottom:-3px;right:-5px;transform:rotate(48deg)}._1Fxyxa_mascotStatus[data-state=answering]>span{color:#245fd1;content:\"\";background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid #8eb4ff;border-radius:7px;place-items:center;width:15px;height:13px;display:grid;top:-4px;right:-5px}._1Fxyxa_mascotStatus[data-state=answering]>span:before{content:\"“\";font-size:12px;line-height:1}._1Fxyxa_brand div{flex-direction:column;min-width:0;display:flex}._1Fxyxa_brand strong{text-overflow:ellipsis;font-size:14px;overflow:hidden}._1Fxyxa_brand>div>span{color:var(--dsw-alias-label-tertiary,#858c98);font-size:10px}._1Fxyxa_railCaption,._1Fxyxa_railFoot{color:var(--dsw-alias-label-tertiary,#858c98);flex:none;justify-content:space-between;align-items:center;gap:6px;padding:10px 11px 7px;font-size:10px;display:flex}._1Fxyxa_railCaption button,._1Fxyxa_topicToolbar button,._1Fxyxa_composerActions button:not(._1Fxyxa_sendButton){color:var(--dsw-alias-label-secondary,#58606d);cursor:pointer;background:0 0;border:0;border-radius:6px}._1Fxyxa_railCaption button:hover,._1Fxyxa_topicToolbar button:hover,._1Fxyxa_composerActions button:not(._1Fxyxa_sendButton):hover,._1Fxyxa_closeButton:hover{background:var(--dsw-alias-interactive-bg-hover,#0000000f)}._1Fxyxa_topicList{flex-direction:column;flex:1;gap:4px;min-height:0;padding:0 7px;display:flex;overflow-y:auto}._1Fxyxa_topicItem{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:9px;grid-template-columns:7px minmax(0,1fr);align-items:start;gap:7px;padding:9px 8px;display:grid}._1Fxyxa_topicItem:hover{background:var(--dsw-alias-interactive-bg-hover,#0000000b)}._1Fxyxa_topicItem[data-active]{background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 88%, #eaf3ff);border-color:color-mix(in srgb, var(--dsw-alias-border-l1,#dde1e8) 72%, #7ca8ff);box-shadow:0 2px 7px #1c222f0d}._1Fxyxa_topicItem[data-archived]{opacity:.58}._1Fxyxa_topicStatus{background:#99a1ae;border-radius:999px;width:6px;height:6px;margin-top:5px}._1Fxyxa_topicStatus[data-running]{background:var(--citeciter-accent);animation:1.2s ease-in-out infinite _1Fxyxa_citeciterPulse;box-shadow:0 0 0 3px #3478f629}@keyframes _1Fxyxa_citeciterPulse{50%{opacity:.42}}._1Fxyxa_topicCopy{flex-direction:column;gap:3px;min-width:0;display:flex}._1Fxyxa_topicCopy strong,._1Fxyxa_topicCopy small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._1Fxyxa_topicCopy strong{font-size:12px;font-weight:590}._1Fxyxa_topicCopy strong[data-pending]{color:var(--dsw-alias-label-secondary,#606875);font-style:italic}._1Fxyxa_topicCopy small{color:var(--dsw-alias-label-tertiary,#858c98);font-size:10px}._1Fxyxa_railEmpty{color:var(--dsw-alias-label-tertiary,#858c98);margin:9px 6px;font-size:11px;line-height:17px}._1Fxyxa_railError{color:var(--dsw-alias-state-error-primary,#c93f3f);overflow-wrap:anywhere;margin:9px 6px;font-size:10px;line-height:15px}._1Fxyxa_railFoot{border-top:1px solid var(--dsw-alias-border-l1,#e4e7ec);padding-top:8px;padding-bottom:9px}._1Fxyxa_learningWorkspace{background:var(--dsw-alias-bg-base,#fff);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}._1Fxyxa_dockHeader{border-bottom:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex:none;justify-content:space-between;align-items:center;gap:12px;min-height:64px;padding:0 15px;display:flex}._1Fxyxa_dockHeading{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:2px 7px;min-width:0;display:grid}._1Fxyxa_dockHeading strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}._1Fxyxa_dockHeading>span:last-child{color:var(--dsw-alias-label-tertiary,#858c98);grid-column:1/-1;font-size:10px}._1Fxyxa_modeBadge{color:color-mix(in srgb, var(--dsw-alias-label-primary,#20232a) 36%, #3478f6);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 84%, #3478f6);border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#dfe3ea) 64%, #3478f6);letter-spacing:.02em;white-space:nowrap;border-radius:999px;padding:2px 6px;font-size:9px;font-weight:700}._1Fxyxa_closeButton{z-index:5;color:#3478f6;cursor:pointer;background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#d9dde5);border-radius:999px;flex:none;place-items:center;width:30px;height:30px;padding:0;display:grid;position:absolute;top:50%;left:6px;transform:translateY(-50%);box-shadow:0 4px 14px #1d222f24}._1Fxyxa_closeButton img{width:18px;height:18px}._1Fxyxa_emptyState{box-sizing:border-box;text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;padding:34px 24px;display:flex}._1Fxyxa_emptyWhale{background:radial-gradient(circle at 32% 25%,#fff,#dceaff);border:1px solid #c9dcff;border-radius:22px;place-items:center;width:68px;height:68px;margin-bottom:13px;display:grid;overflow:hidden;box-shadow:0 14px 35px #245fd124}._1Fxyxa_emptyWhale img{object-fit:contain;width:100%;height:100%}._1Fxyxa_emptyState h2{margin:0;font-size:17px}._1Fxyxa_emptyState>p{max-width:430px;color:var(--dsw-alias-label-secondary,#606875);margin:9px 0 0;font-size:12px;line-height:20px}._1Fxyxa_contextBar{background:color-mix(in srgb, var(--dsw-specific-bubble,#f6f7f9) 90%, #edf5ff);border-bottom:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex:none;padding:10px 14px}._1Fxyxa_contextBar blockquote{max-height:57px;color:var(--dsw-alias-label-secondary,#59616e);border-left:3px solid var(--citeciter-accent);margin:0;padding-left:9px;font-size:11px;line-height:18px;overflow:auto}._1Fxyxa_contextMeta{color:var(--dsw-alias-label-tertiary,#858c98);gap:9px;margin-top:6px;font-size:9px;display:flex}._1Fxyxa_contextMeta span:first-child:before{content:\"\";vertical-align:1px;background:#b3bac5;border-radius:999px;width:5px;height:5px;margin-right:4px;display:inline-block}._1Fxyxa_contextMeta span[data-ok]:before{background:#27a96b}._1Fxyxa_topicToolbar{border-bottom:1px solid var(--dsw-alias-border-l1,#e4e7ec);flex:none;align-items:center;gap:6px;padding:7px 11px;display:flex;overflow-x:auto}._1Fxyxa_topicToolbar form{flex:180px;min-width:130px;display:flex}._1Fxyxa_topicToolbar input,._1Fxyxa_topicToolbar select{border-radius:7px;height:30px;padding:0 7px;font-size:10px}._1Fxyxa_topicToolbar input{flex:1}._1Fxyxa_topicToolbar form button,._1Fxyxa_topicToolbar>button{white-space:nowrap;flex:none;padding:5px 7px;font-size:10px}._1Fxyxa_archiveButton{align-items:center;gap:3px;display:inline-flex}._1Fxyxa_topicToolbar button:disabled,._1Fxyxa_nextQuestions button:disabled{cursor:default;opacity:.42}._1Fxyxa_transcript{flex-direction:column;flex:1;gap:14px;min-height:0;padding:17px clamp(12px,4%,28px) 24px;display:flex;overflow:hidden auto}._1Fxyxa_assistantTurn,._1Fxyxa_userTurn,._1Fxyxa_errorTurn{overflow-wrap:anywhere;min-width:0;font-size:13px;line-height:21px}._1Fxyxa_assistantTurn{border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#e4e7ec) 72%, transparent);padding-bottom:14px}._1Fxyxa_userTurn{background:var(--dsw-specific-bubble,#f1f3f7);border-radius:12px 12px 3px;align-self:flex-end;max-width:86%;padding:8px 11px}._1Fxyxa_errorTurn,._1Fxyxa_panelError{color:var(--dsw-alias-state-error-primary,#c93f3f);background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 88%, #f45555);border:1px solid #c93f3f33;border-radius:8px}._1Fxyxa_errorTurn{padding:8px 10px}._1Fxyxa_errorTurn[data-status=stopped]{color:var(--dsw-alias-label-secondary,#606875);background:var(--dsw-specific-bubble,#f5f6f8);border-color:var(--dsw-alias-border-l1,#e4e7ec)}._1Fxyxa_errorMeta{color:var(--dsw-alias-label-tertiary,#858c98);flex-wrap:wrap;gap:5px 10px;font-size:9px;display:flex}._1Fxyxa_errorTurn details{margin-top:6px}._1Fxyxa_errorTurn pre{white-space:pre-wrap;max-height:160px;overflow:auto}._1Fxyxa_assistantTurn p,._1Fxyxa_userTurn p,._1Fxyxa_errorTurn p{margin-top:0;margin-bottom:8px}._1Fxyxa_turnRole{color:var(--dsw-alias-label-tertiary,#858c98);margin-bottom:5px;font-size:10px;font-weight:650}._1Fxyxa_flowDisclosure{min-width:0;color:var(--dsw-alias-label-secondary,#606875);font-size:12px}._1Fxyxa_flowRow,._1Fxyxa_flowRowRunning{align-items:center;min-width:0;height:26px;display:flex;position:relative;overflow:hidden}._1Fxyxa_flowRowRunning:after{content:\"\";pointer-events:none;background:linear-gradient(90deg,#0000 20%,#ffffff94 48%,#0000 76%);animation:1.7s linear infinite _1Fxyxa_citeciterSweep;position:absolute;inset:0;transform:translate(-100%)}@keyframes _1Fxyxa_citeciterSweep{to{transform:translate(100%)}}._1Fxyxa_flowDot{color:var(--dsw-alias-label-tertiary,#858c98);flex:none;margin:0 6px}._1Fxyxa_flowSummary{min-width:0;color:var(--dsw-alias-label-tertiary,#78808e);white-space:nowrap;overflow-x:hidden}._1Fxyxa_flowBody{max-height:320px;color:var(--dsw-alias-label-secondary,#606875);background:var(--dsw-specific-bubble,#f5f6f8);font:inherit;white-space:pre-wrap;border-radius:7px;margin:5px 0 5px 22px;padding:7px 9px;font-size:11px;line-height:18px;overflow:auto}._1Fxyxa_toolPreview{background:var(--dsw-specific-bubble,#f5f6f8);border-radius:7px;gap:5px;max-height:360px;margin:5px 0 5px 22px;padding:8px;display:grid;overflow:auto}._1Fxyxa_toolPreview>strong{color:var(--dsw-alias-label-tertiary,#858c98);text-transform:uppercase;font-size:9px}._1Fxyxa_toolPreview pre{overflow-wrap:anywhere;white-space:pre-wrap;margin:0;font:10px/17px ui-monospace,SFMono-Regular,Menlo,monospace}._1Fxyxa_loadingCard{color:var(--dsw-alias-label-secondary,#606875);background:color-mix(in srgb, var(--dsw-specific-bubble,#f5f6f8) 82%, #3478f6);border-radius:9px;align-self:flex-start;padding:8px 10px;font-size:11px}._1Fxyxa_panelError{overflow-wrap:anywhere;margin:0;padding:8px 10px;font-size:11px;line-height:17px}._1Fxyxa_composer{background:var(--dsw-specific-input-major,var(--dsw-alias-bg-layer-1,#fff));border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l2,#d9dde5));box-shadow:var(--dsw-shadow-lv2,0 5px 18px #1d222f14);border-radius:22px;flex:none;margin:0 12px 12px;padding:10px 8px 6px}._1Fxyxa_composer textarea{resize:none;width:100%;min-height:50px;max-height:150px;font:inherit;border:0;padding:4px 12px 0 16px;font-size:14px;line-height:22px;display:block}._1Fxyxa_composer textarea:focus{box-shadow:none}._1Fxyxa_composerActions{align-items:center;gap:6px;margin-top:4px;padding:2px 0 0 8px;display:flex}._1Fxyxa_composerActions span{color:var(--dsw-alias-label-tertiary,#858c98);margin-right:auto;font-size:9px}._1Fxyxa_composerActions ._1Fxyxa_sendButton{border-radius:999px;place-items:center;width:34px;height:34px;min-height:34px;padding:0;display:grid;transform:translateY(-2px)}._1Fxyxa_nextQuestions{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}._1Fxyxa_nextQuestions button{color:color-mix(in srgb, var(--dsw-alias-label-primary,#20232a) 46%, #3478f6);text-align:left;cursor:pointer;background:color-mix(in srgb, var(--dsw-specific-bubble,#f5f6f8) 86%, #3478f6);border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#dfe3ea) 70%, #3478f6);border-radius:999px;padding:6px 9px;font-size:10px}._1Fxyxa_questionFrame{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#d9dde5);border-radius:14px;flex:none;margin:0 12px 12px;padding:12px;box-shadow:0 6px 20px #1d222f1a}._1Fxyxa_questionHeader{color:var(--dsw-alias-label-secondary,#606875);grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:8px;display:grid}._1Fxyxa_questionHeader>div{flex-direction:column;gap:2px;min-width:0;display:flex}._1Fxyxa_questionHeader span{color:var(--dsw-alias-label-tertiary,#858c98);font-size:9px}._1Fxyxa_questionHeader strong{color:var(--dsw-alias-label-primary,#20232a);font-size:12px;line-height:18px}._1Fxyxa_questionOptions{gap:6px;margin-top:10px;display:grid}._1Fxyxa_questionOptions>button{color:inherit;text-align:left;cursor:pointer;background:var(--dsw-specific-bubble,#f5f6f8);border:1px solid #0000;border-radius:8px;grid-template-columns:20px minmax(0,1fr);align-items:start;gap:6px;padding:8px;display:grid}._1Fxyxa_questionOptions>button[data-selected]{background:color-mix(in srgb, var(--dsw-specific-bubble,#f5f6f8) 82%, #3478f6);border-color:color-mix(in srgb, var(--dsw-alias-border-l1,#dfe3ea) 54%, #3478f6)}._1Fxyxa_questionOptions>button>span:first-child{color:#245fd1;background:var(--dsw-alias-bg-base,#fff);border:1px solid var(--dsw-alias-border-l2,#d9dde5);border-radius:5px;place-items:center;width:18px;height:18px;font-size:9px;display:grid}._1Fxyxa_questionOptions>button>span:last-child{flex-direction:column;min-width:0;display:flex}._1Fxyxa_questionOptions strong{font-size:11px}._1Fxyxa_questionOptions small{color:var(--dsw-alias-label-tertiary,#858c98);margin-top:2px;font-size:9px;line-height:14px}._1Fxyxa_questionCustom{box-sizing:border-box;resize:vertical;width:100%;color:inherit;background:var(--dsw-alias-bg-base,#fff);border:1px solid var(--dsw-alias-border-l1,#dfe3ea);font:inherit;border-radius:8px;outline:0;margin-top:8px;padding:7px 8px;font-size:10px}._1Fxyxa_questionCustom:focus{border-color:#3478f6;box-shadow:0 0 0 3px #3478f61f}._1Fxyxa_questionFooter{align-items:center;gap:6px;margin-top:9px;display:flex}._1Fxyxa_questionFooter span{flex:1}._1Fxyxa_questionFooter button{min-height:28px;color:var(--dsw-alias-label-secondary,#606875);cursor:pointer;background:0 0;border:0;border-radius:7px;padding:0 9px;font-size:10px}._1Fxyxa_questionFooter button:last-child{color:#fff;background:#3478f6}._1Fxyxa_questionFooter button:disabled{cursor:default;opacity:.45}._1Fxyxa_richAnswer{min-width:0}._1Fxyxa_richFigure{background:var(--dsw-specific-bubble,#f5f6f8);border:1px solid var(--dsw-alias-border-l1,#e4e7ec);border-radius:9px;margin:10px 0;overflow:hidden}._1Fxyxa_richSvg{width:100%;height:auto;display:block}._1Fxyxa_richHtml{border:0;width:100%;min-height:240px;display:block}._1Fxyxa_settingsPage{width:min(760px,100%);color:var(--dsw-alias-label-primary,#20232a);flex-direction:column;gap:14px;padding-bottom:32px;display:flex}._1Fxyxa_settingsHero{background:linear-gradient(130deg, color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 82%, #3478f6), var(--dsw-alias-bg-layer-1,#fff) 72%);border:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#e4e7ec) 72%, #8eb4ff);border-radius:14px;align-items:center;gap:13px;padding:17px;display:flex}._1Fxyxa_settingsWhale{width:42px;height:42px;font-size:21px}._1Fxyxa_settingsHero h2,._1Fxyxa_settingsHero p,._1Fxyxa_settingsGroup h3{margin:0}._1Fxyxa_settingsHero h2{font-size:17px}._1Fxyxa_settingsHero p{color:var(--dsw-alias-label-secondary,#606875);margin-top:3px;font-size:11px}._1Fxyxa_settingsGroup{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l1,#e4e7ec);border-radius:13px;flex-direction:column;gap:8px;padding:15px;display:flex}._1Fxyxa_settingsGroup h3{margin-bottom:3px;font-size:13px}._1Fxyxa_settingChoice,._1Fxyxa_settingToggle{cursor:pointer;border:1px solid var(--dsw-alias-border-l1,#e4e7ec);border-radius:10px;align-items:center;gap:10px;padding:10px;display:flex}._1Fxyxa_settingChoice[data-selected]{background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 82%, #3478f6);border-color:color-mix(in srgb, var(--dsw-alias-border-l1,#e4e7ec) 48%, #3478f6)}._1Fxyxa_settingChoice>span,._1Fxyxa_settingToggle>span{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}._1Fxyxa_settingChoice strong,._1Fxyxa_settingToggle strong,._1Fxyxa_widthSetting strong{font-size:12px}._1Fxyxa_settingChoice small,._1Fxyxa_settingToggle small{color:var(--dsw-alias-label-secondary,#606875);font-size:10px;line-height:16px}._1Fxyxa_settingChoice input,._1Fxyxa_settingToggle input{accent-color:var(--citeciter-accent,#3478f6)}._1Fxyxa_settingToggle>input{width:17px;height:17px}._1Fxyxa_settingsDocumentAction{flex-wrap:wrap;align-items:center;gap:10px;min-width:0;display:flex}._1Fxyxa_settingsDocumentButton{min-height:32px;color:var(--dsw-alias-label-primary,#20232a);background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l1,#e4e7ec);font:inherit;border-radius:8px;align-items:center;gap:7px;padding:0 11px;font-size:12px;display:inline-flex}._1Fxyxa_settingsDocumentButton:focus-visible{outline:2px solid var(--dsw-alias-state-focus,#356ae6);outline-offset:2px}._1Fxyxa_settingsDocumentButton:disabled{cursor:not-allowed;opacity:.55}._1Fxyxa_settingsDocumentStatus{min-width:0;color:var(--dsw-alias-label-secondary,#606875);overflow-wrap:anywhere;margin:0;font-size:11px;line-height:16px}._1Fxyxa_settingsDocumentStatus[data-status=success]{color:var(--dsw-alias-state-success-primary,#21845b)}._1Fxyxa_settingsDocumentStatus[data-status=error]{color:var(--dsw-alias-state-error-primary,#c93f3f)}._1Fxyxa_widthSetting{flex-direction:column;gap:8px;padding:5px 2px 9px;display:flex}._1Fxyxa_widthSetting>span{justify-content:space-between;display:flex}._1Fxyxa_widthSetting output{color:#245fd1;font-size:11px;font-weight:650}._1Fxyxa_widthSetting input{accent-color:#3478f6;width:100%}._1Fxyxa_dockPreview{height:72px;color:var(--dsw-alias-label-tertiary,#858c98);background:var(--dsw-alias-bg-base,#fff);border:1px solid var(--dsw-alias-border-l1,#e4e7ec);border-radius:9px;font-size:9px;display:flex;overflow:hidden}._1Fxyxa_previewSidebar{background:var(--dsw-specific-sidebar-fill,#f5f6f8);border-right:1px solid var(--dsw-alias-border-l1,#e4e7ec);width:16%}._1Fxyxa_previewCoding,._1Fxyxa_previewDock{place-items:center;min-width:0;display:grid}._1Fxyxa_previewCoding{flex:1}._1Fxyxa_previewDock{color:#245fd1;background:color-mix(in srgb, var(--dsw-alias-bg-layer-1,#fff) 82%, #3478f6);border-left:1px solid color-mix(in srgb, var(--dsw-alias-border-l1,#e4e7ec) 58%, #3478f6);max-width:55%}._1Fxyxa_settingsSaveStatus{min-height:18px;color:var(--dsw-alias-label-tertiary,#858c98);align-self:flex-end;margin:-7px 4px;font-size:10px}._1Fxyxa_settingsSaveStatus[data-status=error]{color:var(--dsw-alias-state-error-primary,#c93f3f)}@media (width<=720px){._1Fxyxa_dock{grid-template-columns:128px minmax(0,1fr);min-width:100%}._1Fxyxa_brand{padding:0 8px}._1Fxyxa_mascotStatus,._1Fxyxa_topicToolbar form{display:none}._1Fxyxa_topicLauncher{width:78px;height:78px}._1Fxyxa_topicLauncher img{width:68px;height:68px}._1Fxyxa_closeButton{left:6px}}@media (prefers-reduced-motion:reduce){._1Fxyxa_topicStatus[data-running]{animation:none}._1Fxyxa_topicLauncher:hover{transform:none}}";
5172
5488
  const tagId = "@kirkchinese/dsh-citeciter/CiteCiter.module.css";
5173
5489
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
5174
5490
  const tag = document.createElement("style");
@@ -5233,6 +5549,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5233
5549
  "selectionPopover": "_1Fxyxa_selectionPopover",
5234
5550
  "sendButton": "_1Fxyxa_sendButton",
5235
5551
  "settingChoice": "_1Fxyxa_settingChoice",
5552
+ "settingsDocumentAction": "_1Fxyxa_settingsDocumentAction",
5553
+ "settingsDocumentButton": "_1Fxyxa_settingsDocumentButton",
5554
+ "settingsDocumentStatus": "_1Fxyxa_settingsDocumentStatus",
5236
5555
  "settingsGroup": "_1Fxyxa_settingsGroup",
5237
5556
  "settingsHero": "_1Fxyxa_settingsHero",
5238
5557
  "settingsPage": "_1Fxyxa_settingsPage",
@@ -5535,7 +5854,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5535
5854
  const [visible, setVisible] = (0, react.useState)(false);
5536
5855
  (0, react.useEffect)(() => {
5537
5856
  if (anchorKey === void 0) return;
5538
- const source = document.querySelector(`[data-chat-anchor-key="${CSS.escape(anchorKey)}"]`);
5857
+ const source = findDshAssistantAnchor(anchorKey);
5539
5858
  const destination = target.current;
5540
5859
  if (source === null || destination === null) return;
5541
5860
  const update = () => {
@@ -5727,11 +6046,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5727
6046
  });
5728
6047
  }
5729
6048
  function AssistantTurn({ message, first, disabled, companion, reportParseError }) {
5730
- const parsed = (0, react.useMemo)(() => first ? parseNextQuestions(message.text) : {
5731
- text: message.text,
5732
- questions: [],
5733
- invalid: false
5734
- }, [first, message.text]);
6049
+ const parsed = (0, react.useMemo)(() => parseNextQuestions(message.text, message.streaming), [message.streaming, message.text]);
5735
6050
  (0, react.useEffect)(() => {
5736
6051
  if (parsed.invalid && !message.streaming) reportParseError(message.id);
5737
6052
  }, [
@@ -5755,7 +6070,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5755
6070
  text: parsed.text,
5756
6071
  streaming: message.streaming
5757
6072
  }),
5758
- !message.streaming && parsed.questions.length === 3 && (0, react_jsx_runtime.jsx)("div", {
6073
+ first && !message.streaming && parsed.questions.length === 3 && (0, react_jsx_runtime.jsx)("div", {
5759
6074
  className: CiteCiter_module_css_default.nextQuestions,
5760
6075
  "aria-label": "接下来可能想问",
5761
6076
  children: parsed.questions.map((question) => (0, react_jsx_runtime.jsx)("button", {
@@ -5770,37 +6085,54 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5770
6085
  ]
5771
6086
  });
5772
6087
  }
5773
- /** Reserve a real third DSH column while keeping the official shell and coding surface intact. */
5774
- function useDockColumn(open, widthPercent) {
6088
+ function findContainingFrame(panel) {
6089
+ const frame = panel?.closest("[data-shell-overlay]")?.parentElement;
6090
+ return frame instanceof HTMLElement ? frame : null;
6091
+ }
6092
+ /** Temporarily reserve an AppFrame column until DSH exposes a public right-dock contribution point. */
6093
+ function useDockColumn(panel, open, widthPercent) {
5775
6094
  const [width, setWidth] = (0, react.useState)(0);
5776
- const [docked, setDocked] = (0, react.useState)(true);
6095
+ const [docked, setDocked] = (0, react.useState)(false);
5777
6096
  (0, react.useEffect)(() => {
5778
6097
  if (!open) return;
5779
- const frame = document.querySelector("[data-shell-overlay]")?.parentElement;
5780
- if (!(frame instanceof HTMLElement)) return;
6098
+ const frame = findContainingFrame(panel.current);
6099
+ if (frame === null) {
6100
+ setWidth(Math.min(window.innerWidth, 720));
6101
+ setDocked(false);
6102
+ return;
6103
+ }
6104
+ const owner = crypto.randomUUID();
5781
6105
  const setTrack = (name, value) => {
5782
6106
  if (frame.style.getPropertyValue(name) !== value) frame.style.setProperty(name, value);
5783
6107
  };
6108
+ const clearDock = () => {
6109
+ if (frame.dataset.citeciterDocked !== owner) return;
6110
+ delete frame.dataset.citeciterDocked;
6111
+ frame.style.removeProperty("--citeciter-sidebar-width");
6112
+ frame.style.removeProperty("--citeciter-dock-width");
6113
+ };
5784
6114
  const apply = () => {
6115
+ const activeOwner = frame.dataset.citeciterDocked;
6116
+ if (activeOwner !== void 0 && activeOwner !== owner) return;
5785
6117
  const frameWidth = frame.getBoundingClientRect().width;
5786
6118
  const nativeTrack = /^([\d.]+)px(?:\s|$)/u.exec(frame.style.gridTemplateColumns);
5787
6119
  const sidebarWidth = nativeTrack === null ? frame.firstElementChild?.getBoundingClientRect().width ?? 0 : Number(nativeTrack[1]);
5788
6120
  const available = frameWidth - sidebarWidth - 480;
5789
- setTrack("--citeciter-sidebar-width", sidebarWidth + "px");
5790
6121
  if (available < 360) {
5791
- setTrack("--citeciter-dock-width", "0px");
6122
+ clearDock();
5792
6123
  setWidth(Math.min(frameWidth, 720));
5793
6124
  setDocked(false);
5794
6125
  return;
5795
6126
  }
5796
6127
  const requested = frameWidth * widthPercent / 100;
5797
6128
  const panelWidth = Math.max(360, Math.min(requested, available));
5798
- setTrack("--citeciter-dock-width", panelWidth + "px");
6129
+ setTrack("--citeciter-sidebar-width", `${sidebarWidth}px`);
6130
+ setTrack("--citeciter-dock-width", `${panelWidth}px`);
6131
+ frame.dataset.citeciterDocked = owner;
5799
6132
  setWidth(panelWidth);
5800
6133
  setDocked(true);
5801
6134
  };
5802
6135
  apply();
5803
- frame.dataset.citeciterDocked = "true";
5804
6136
  const resizeObserver = new ResizeObserver(apply);
5805
6137
  const styleObserver = new MutationObserver(apply);
5806
6138
  resizeObserver.observe(frame);
@@ -5811,14 +6143,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5811
6143
  return () => {
5812
6144
  resizeObserver.disconnect();
5813
6145
  styleObserver.disconnect();
5814
- delete frame.dataset.citeciterDocked;
5815
- frame.style.removeProperty("--citeciter-sidebar-width");
5816
- frame.style.removeProperty("--citeciter-dock-width");
6146
+ clearDock();
5817
6147
  };
5818
- }, [open, widthPercent]);
6148
+ }, [
6149
+ open,
6150
+ panel,
6151
+ widthPercent
6152
+ ]);
5819
6153
  return [width, docked];
5820
6154
  }
5821
- /** Independent, resizable learning workspace docked beside the active coding conversation. */
6155
+ /** Independent learning workspace with a reversible Host-column compatibility adapter. */
5822
6156
  function CitePanel({ bus, companion, closePanel, reportParseError }) {
5823
6157
  const overlay = (0, react.useSyncExternalStore)(bus.subscribe, bus.getSnapshot);
5824
6158
  const snapshot = (0, react.useSyncExternalStore)(companion.subscribe, companion.getSnapshot);
@@ -5827,10 +6161,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5827
6161
  const [titleDirty, setTitleDirty] = (0, react.useState)(false);
5828
6162
  const [widthPercent, setWidthPercent] = (0, react.useState)(snapshot.settings.panelWidthPercent);
5829
6163
  const resizeOrigin = (0, react.useRef)(null);
6164
+ const panelRef = (0, react.useRef)(null);
5830
6165
  const titleRef = (0, react.useRef)(null);
5831
6166
  const open = overlay.panelOpen;
5832
- const [panelWidth, docked] = useDockColumn(open, widthPercent);
6167
+ const [panelWidth, docked] = useDockColumn(panelRef, open, widthPercent);
5833
6168
  const active = snapshot.active;
6169
+ const canAsk = snapshot.phase === "ready" || snapshot.phase === "stopped" || snapshot.phase === "error";
5834
6170
  (0, react.useEffect)(() => companion.setVisible(open), [companion, open]);
5835
6171
  (0, react.useEffect)(() => setWidthPercent(snapshot.settings.panelWidthPercent), [snapshot.settings.panelWidthPercent]);
5836
6172
  (0, react.useEffect)(() => {
@@ -5851,7 +6187,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5851
6187
  if (!open) return null;
5852
6188
  const submit = (event) => {
5853
6189
  event.preventDefault();
5854
- if (snapshot.phase === "running" || snapshot.phase === "stopping") return;
6190
+ if (!canAsk) return;
5855
6191
  const value = question.trim();
5856
6192
  if (value === "") return;
5857
6193
  const submitted = question;
@@ -5870,7 +6206,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5870
6206
  resizeOrigin.current = {
5871
6207
  x: event.clientX,
5872
6208
  width: widthPercent,
5873
- frameWidth: document.querySelector("[data-shell-overlay]")?.parentElement?.getBoundingClientRect().width ?? window.innerWidth
6209
+ frameWidth: findContainingFrame(panelRef.current)?.getBoundingClientRect().width ?? window.innerWidth
5874
6210
  };
5875
6211
  };
5876
6212
  const moveResize = (event) => {
@@ -5896,8 +6232,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5896
6232
  updateWidth(widthPercent + (event.key === "ArrowLeft" ? 1 : -1));
5897
6233
  };
5898
6234
  return (0, react_jsx_runtime.jsxs)("aside", {
6235
+ ref: panelRef,
5899
6236
  className: CiteCiter_module_css_default.dock,
5900
- style: { width: panelWidth > 0 ? panelWidth : void 0 },
6237
+ style: {
6238
+ width: panelWidth > 0 ? panelWidth : void 0,
6239
+ "--citeciter-panel-width": `${widthPercent}vw`
6240
+ },
5901
6241
  "data-citeciter-panel": true,
5902
6242
  "data-overlay": docked ? void 0 : true,
5903
6243
  "aria-label": "CiteCiter 学习伴侣",
@@ -6142,7 +6482,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6142
6482
  return (0, react_jsx_runtime.jsx)(AssistantTurn, {
6143
6483
  message,
6144
6484
  first: message.id === firstAssistantId,
6145
- disabled: snapshot.phase === "running" || snapshot.phase === "stopping",
6485
+ disabled: !canAsk,
6146
6486
  companion,
6147
6487
  reportParseError
6148
6488
  }, message.id);
@@ -6177,7 +6517,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6177
6517
  children: [(0, react_jsx_runtime.jsx)("span", { children: "只读 · 不干预主 Agent" }), (0, react_jsx_runtime.jsx)("button", {
6178
6518
  className: CiteCiter_module_css_default.sendButton,
6179
6519
  type: snapshot.phase === "running" ? "button" : "submit",
6180
- disabled: snapshot.phase === "stopping" || snapshot.phase !== "running" && (active === null || question.trim() === ""),
6520
+ disabled: snapshot.phase === "stopping" || snapshot.phase !== "running" && (!canAsk || active === null || question.trim() === ""),
6181
6521
  "aria-label": snapshot.phase === "running" ? "停止回答" : snapshot.phase === "stopping" ? "正在停止" : "发送",
6182
6522
  onClick: snapshot.phase === "running" ? () => {
6183
6523
  companion.stop();
@@ -6194,11 +6534,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6194
6534
  //#endregion
6195
6535
  //#region lib/types/client/components/CiteCiterSettings.js
6196
6536
  /** Native DSH settings page for CiteCiter-owned preferences. */
6197
- function CiteCiterSettings({ companion }) {
6537
+ function CiteCiterSettings({ companion, settingsDocument }) {
6198
6538
  const snapshot = (0, react.useSyncExternalStore)(companion.subscribe, companion.getSnapshot);
6539
+ const documentSnapshot = (0, react.useSyncExternalStore)(settingsDocument.subscribe, settingsDocument.getSnapshot);
6199
6540
  const settings = snapshot.settings;
6200
6541
  const [widthDraft, setWidthDraft] = (0, react.useState)(settings.panelWidthPercent);
6201
6542
  const committedWidth = (0, react.useRef)(settings.panelWidthPercent);
6543
+ (0, react.useEffect)(() => {
6544
+ settingsDocument.load();
6545
+ }, [settingsDocument]);
6202
6546
  (0, react.useEffect)(() => {
6203
6547
  committedWidth.current = settings.panelWidthPercent;
6204
6548
  setWidthDraft(settings.panelWidthPercent);
@@ -6284,6 +6628,32 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6284
6628
  })
6285
6629
  ]
6286
6630
  }),
6631
+ (0, react_jsx_runtime.jsxs)("section", {
6632
+ className: CiteCiter_module_css_default.settingsGroup,
6633
+ children: [(0, react_jsx_runtime.jsx)("h3", { children: "配置文件" }), (0, react_jsx_runtime.jsxs)("div", {
6634
+ className: CiteCiter_module_css_default.settingsDocumentAction,
6635
+ children: [(0, react_jsx_runtime.jsxs)("button", {
6636
+ type: "button",
6637
+ className: CiteCiter_module_css_default.settingsDocumentButton,
6638
+ "data-status": documentSnapshot.status,
6639
+ disabled: [
6640
+ "loading",
6641
+ "missing",
6642
+ "unavailable"
6643
+ ].includes(documentSnapshot.status) || documentSnapshot.opening,
6644
+ "aria-busy": documentSnapshot.opening || documentSnapshot.status === "loading",
6645
+ onClick: () => {
6646
+ settingsDocument.open();
6647
+ },
6648
+ children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutline14, { size: 14 }), documentSnapshot.opening ? "正在打开…" : documentSnapshot.status === "loading" ? "正在检查…" : documentSnapshot.status === "unavailable" ? "宿主不支持打开" : documentSnapshot.status === "missing" ? "配置文件不存在" : documentSnapshot.status === "error" ? "重试打开配置文件" : "打开配置文件"]
6649
+ }), (documentSnapshot.error !== null || documentSnapshot.message !== null) && (0, react_jsx_runtime.jsx)("p", {
6650
+ className: CiteCiter_module_css_default.settingsDocumentStatus,
6651
+ "data-status": documentSnapshot.error === null ? "success" : "error",
6652
+ role: documentSnapshot.error === null ? "status" : "alert",
6653
+ children: documentSnapshot.error ?? documentSnapshot.message
6654
+ })]
6655
+ })]
6656
+ }),
6287
6657
  (0, react_jsx_runtime.jsxs)("section", {
6288
6658
  className: CiteCiter_module_css_default.settingsGroup,
6289
6659
  children: [
@@ -6440,22 +6810,136 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6440
6810
  })] });
6441
6811
  }
6442
6812
  //#endregion
6443
- //#region lib/types/client/selection.js
6444
- const RANGE_CONTEXT_CHARS = 240;
6445
- const TRANSLATED_CONTENT_SELECTOR = "[data-read-frog-translation-mode]";
6446
- /** Resolve a DOM Node to its nearest Element parent. */
6447
- function parentElement(node) {
6448
- return node.nodeType === Node.ELEMENT_NODE ? node : node.parentElement;
6813
+ //#region lib/types/client/settings-document.js
6814
+ const INITIAL = Object.freeze({
6815
+ status: "idle",
6816
+ opening: false,
6817
+ error: null,
6818
+ message: null
6819
+ });
6820
+ function memoryStore(initial) {
6821
+ let state = initial;
6822
+ const listeners = /* @__PURE__ */ new Set();
6823
+ return {
6824
+ getSnapshot: () => state,
6825
+ subscribe: (listener) => {
6826
+ listeners.add(listener);
6827
+ return () => listeners.delete(listener);
6828
+ },
6829
+ update: (mutator) => {
6830
+ const next = { ...state };
6831
+ mutator(next);
6832
+ state = next;
6833
+ for (const listener of [...listeners]) listener();
6834
+ },
6835
+ set: (next) => {
6836
+ state = next;
6837
+ for (const listener of [...listeners]) listener();
6838
+ }
6839
+ };
6449
6840
  }
6450
- function isTranslatedContent(node) {
6451
- return node.nodeType === Node.ELEMENT_NODE && node.matches(TRANSLATED_CONTENT_SELECTOR);
6841
+ /**
6842
+ * Create the browser owner for the Host settings-document action.
6843
+ * @param describe - mirrored Host settings-document availability.
6844
+ * @param openDocument - Host operation that opens the authoritative file.
6845
+ * @returns observable loading, availability, and action state.
6846
+ */
6847
+ function createSettingsDocumentController(describe, openDocument) {
6848
+ const store = memoryStore(INITIAL);
6849
+ let unsubscribe = null;
6850
+ let opening = null;
6851
+ let disposed = false;
6852
+ const operations = /* @__PURE__ */ new Set();
6853
+ const track = (operation) => {
6854
+ let tracked;
6855
+ tracked = operation.finally(() => operations.delete(tracked));
6856
+ operations.add(tracked);
6857
+ return tracked;
6858
+ };
6859
+ const derive = () => {
6860
+ const mirrored = describe.getSnapshot();
6861
+ if (mirrored.view === void 0) {
6862
+ store.update((state) => {
6863
+ state.status = mirrored.status === "loading" ? "loading" : mirrored.status === "unavailable" ? "unavailable" : mirrored.error === null ? "idle" : "error";
6864
+ state.error = mirrored.status === "unavailable" ? mirrored.error ?? "当前宿主不支持打开配置文件" : mirrored.error;
6865
+ state.message = null;
6866
+ });
6867
+ return;
6868
+ }
6869
+ const hasDocument = mirrored.view.hasDocument;
6870
+ store.update((state) => {
6871
+ state.status = hasDocument ? "ready" : "missing";
6872
+ state.error = hasDocument ? mirrored.error : "配置文件不存在";
6873
+ state.message = null;
6874
+ });
6875
+ };
6876
+ const load = async () => {
6877
+ if (disposed) return;
6878
+ unsubscribe ??= describe.subscribe(derive);
6879
+ store.update((state) => {
6880
+ state.status = "loading";
6881
+ state.error = null;
6882
+ state.message = null;
6883
+ });
6884
+ try {
6885
+ await track(describe.ensure());
6886
+ if (!disposed) derive();
6887
+ } catch (error) {
6888
+ if (!disposed) store.update((state) => {
6889
+ state.status = "error";
6890
+ state.error = error instanceof Error ? error.message : String(error);
6891
+ });
6892
+ }
6893
+ };
6894
+ return {
6895
+ getSnapshot: store.getSnapshot,
6896
+ subscribe: store.subscribe,
6897
+ load,
6898
+ open: async () => {
6899
+ if (store.getSnapshot().status === "idle" || store.getSnapshot().status === "error") await load();
6900
+ if (disposed || store.getSnapshot().status !== "ready" || store.getSnapshot().opening) return;
6901
+ const abort = new AbortController();
6902
+ opening = abort;
6903
+ store.update((state) => {
6904
+ state.opening = true;
6905
+ state.error = null;
6906
+ state.message = null;
6907
+ });
6908
+ try {
6909
+ await track(openDocument(abort.signal));
6910
+ if (!disposed) store.update((state) => {
6911
+ state.opening = false;
6912
+ state.message = "已打开配置文件";
6913
+ });
6914
+ } catch (error) {
6915
+ if (!disposed) store.update((state) => {
6916
+ state.opening = false;
6917
+ state.error = error instanceof Error ? error.message : String(error);
6918
+ });
6919
+ } finally {
6920
+ if (opening === abort) opening = null;
6921
+ }
6922
+ },
6923
+ dispose: async () => {
6924
+ if (disposed) return;
6925
+ disposed = true;
6926
+ opening?.abort();
6927
+ opening = null;
6928
+ unsubscribe?.();
6929
+ unsubscribe = null;
6930
+ while (operations.size > 0) await Promise.allSettled([...operations]);
6931
+ }
6932
+ };
6452
6933
  }
6934
+ //#endregion
6935
+ //#region lib/types/client/selection.js
6936
+ const RANGE_CONTEXT_CHARS = 240;
6453
6937
  function committedText(root, target) {
6454
6938
  let text = "";
6455
6939
  let targetStart;
6456
6940
  let targetEnd;
6457
6941
  const visit = (node) => {
6458
- if (isTranslatedContent(node)) return;
6942
+ if (isReadFrogTranslatedContent(node)) return;
6459
6943
  if (node === target) targetStart = text.length;
6460
6944
  if (node.nodeType === Node.TEXT_NODE) text += node.textContent ?? "";
6461
6945
  else for (const child of node.childNodes) visit(child);
@@ -6472,7 +6956,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6472
6956
  let text = "";
6473
6957
  let found = false;
6474
6958
  const visit = (node) => {
6475
- if (found || isTranslatedContent(node)) return;
6959
+ if (found || isReadFrogTranslatedContent(node)) return;
6476
6960
  if (node === boundary) {
6477
6961
  if (node.nodeType === Node.TEXT_NODE) text += (node.textContent ?? "").slice(0, offset);
6478
6962
  else for (let index = 0; index < offset; index++) {
@@ -6500,55 +6984,47 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6500
6984
  * @returns validated selection metadata, or null when CiteCiter should ignore it.
6501
6985
  */
6502
6986
  function readSelection(event, sourceSessionId) {
6987
+ const eventAnchor = dshAssistantAnchorForTarget(event.target);
6988
+ if (eventAnchor === null) return null;
6503
6989
  const selection = window.getSelection();
6504
6990
  if (selection === null || selection.isCollapsed || selection.rangeCount === 0) return null;
6505
6991
  const range = selection.getRangeAt(0);
6506
- const startFlow = parentElement(range.startContainer)?.closest("[data-chat-flow-kind]");
6507
- const endFlow = parentElement(range.endContainer)?.closest("[data-chat-flow-kind]");
6508
- if (startFlow === null || startFlow === void 0 || endFlow === null || endFlow === void 0) return null;
6509
- if (endFlow !== startFlow) {
6510
- const flow = [...document.querySelectorAll("[data-chat-flow-kind=\"assistant-step\"][data-chat-anchor-key]")].filter((candidate) => range.intersectsNode(candidate)).at(-1);
6511
- const anchorKey = flow?.dataset.chatAnchorKey;
6992
+ const startFlow = dshConversationFlow(range.startContainer);
6993
+ const endFlow = dshConversationFlow(range.endContainer);
6994
+ if (startFlow === null || endFlow === null) return null;
6995
+ if (endFlow.element !== startFlow.element) {
6996
+ const anchor = dshIntersectedAssistantAnchors(range).at(-1);
6512
6997
  const displayText = range.toString().trim();
6513
- if (flow === void 0 || anchorKey === void 0 || anchorKey === "" || displayText === "") return null;
6514
- const projected = committedText(flow).text;
6998
+ if (anchor === void 0 || anchor.element !== eventAnchor.element || displayText === "") return null;
6999
+ const projected = committedText(anchor.element).text;
6515
7000
  const sourceHintText = projected.trim();
6516
7001
  if (sourceHintText === "") return null;
7002
+ const startOffset = projected.length - projected.trimStart().length;
7003
+ const endOffset = projected.length - (projected.length - projected.trimEnd().length);
6517
7004
  return {
6518
7005
  sourceSessionId,
6519
7006
  displayText,
6520
7007
  sourceHintText,
6521
7008
  kind: "assistant-step",
6522
- anchorKey,
6523
- startOffset: projected.length - projected.trimStart().length,
6524
- endOffset: projected.length - (projected.length - projected.trimEnd().length),
7009
+ anchorKey: anchor.anchorKey,
7010
+ startOffset,
7011
+ endOffset,
6525
7012
  prefixText: "",
6526
7013
  suffixText: "",
6527
7014
  x: event.clientX,
6528
7015
  y: event.clientY
6529
7016
  };
6530
7017
  }
6531
- for (const reasoning of startFlow.querySelectorAll("[data-variant=\"think\"]")) if (range.intersectsNode(reasoning)) return null;
6532
- for (const generated of startFlow.querySelectorAll("button, .katex, [data-footnotes], sup")) if (range.intersectsNode(generated)) return null;
6533
- for (const endpoint of [range.startContainer, range.endContainer]) {
6534
- const element = parentElement(endpoint);
6535
- if (element?.closest(".md-code-block") !== null && element?.closest("pre") === null) return null;
6536
- }
6537
- const kind = startFlow.dataset.chatFlowKind;
6538
- const anchorKey = startFlow.dataset.chatAnchorKey;
6539
- if (kind !== "assistant-step" || anchorKey === void 0 || anchorKey === "") return null;
6540
- const translatedStart = parentElement(range.startContainer)?.closest(TRANSLATED_CONTENT_SELECTOR);
6541
- const translatedEnd = parentElement(range.endContainer)?.closest(TRANSLATED_CONTENT_SELECTOR);
7018
+ if (startFlow.element !== eventAnchor.element || dshRangeTouchesExcludedContent(range, startFlow.element)) return null;
7019
+ const translated = readFrogSelection(range, startFlow.element);
7020
+ if (translated.kind === "invalid") return null;
6542
7021
  let text;
6543
7022
  let flowText;
6544
7023
  let startOffset;
6545
7024
  let endOffset;
6546
7025
  let sourceHintText;
6547
- if (translatedStart !== null || translatedEnd !== null) {
6548
- if (translatedStart === null || translatedStart === void 0 || translatedStart !== translatedEnd) return null;
6549
- const sourceElement = translatedStart.parentElement?.closest("[data-read-frog-paragraph]");
6550
- if (sourceElement === null || sourceElement === void 0 || !startFlow.contains(sourceElement)) return null;
6551
- const projected = committedText(startFlow, sourceElement);
7026
+ if (translated.kind === "translation") {
7027
+ const projected = committedText(startFlow.element, translated.sourceParagraph);
6552
7028
  if (projected.targetStart === void 0 || projected.targetEnd === void 0) return null;
6553
7029
  const rawSourceHint = projected.text.slice(projected.targetStart, projected.targetEnd);
6554
7030
  const sourceLeading = rawSourceHint.length - rawSourceHint.trimStart().length;
@@ -6559,14 +7035,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6559
7035
  endOffset = projected.targetEnd - sourceTrailing;
6560
7036
  sourceHintText = rawSourceHint.trim();
6561
7037
  } else {
6562
- const beforeStart = committedTextBefore(startFlow, range.startContainer, range.startOffset);
6563
- const beforeEnd = committedTextBefore(startFlow, range.endContainer, range.endOffset);
7038
+ const beforeStart = committedTextBefore(startFlow.element, range.startContainer, range.startOffset);
7039
+ const beforeEnd = committedTextBefore(startFlow.element, range.endContainer, range.endOffset);
6564
7040
  if (beforeStart === null || beforeEnd === null || beforeEnd.length < beforeStart.length) return null;
6565
7041
  const rawText = beforeEnd.slice(beforeStart.length);
6566
7042
  const leadingWhitespace = rawText.length - rawText.trimStart().length;
6567
7043
  const trailingWhitespace = rawText.length - rawText.trimEnd().length;
6568
7044
  text = rawText.trim();
6569
- flowText = committedText(startFlow).text;
7045
+ flowText = committedText(startFlow.element).text;
6570
7046
  startOffset = beforeStart.length + leadingWhitespace;
6571
7047
  endOffset = beforeEnd.length - trailingWhitespace;
6572
7048
  }
@@ -6576,8 +7052,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6576
7052
  sourceSessionId,
6577
7053
  displayText: text,
6578
7054
  ...sourceHintText === void 0 ? {} : { sourceHintText },
6579
- kind,
6580
- anchorKey,
7055
+ kind: "assistant-step",
7056
+ anchorKey: eventAnchor.anchorKey,
6581
7057
  startOffset,
6582
7058
  endOffset,
6583
7059
  prefixText: flowText.slice(Math.max(0, startOffset - RANGE_CONTEXT_CHARS), startOffset),
@@ -6586,6 +7062,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6586
7062
  y: event.clientY
6587
7063
  };
6588
7064
  }
7065
+ /**
7066
+ * Claim a context menu only after resolving a valid DSH assistant selection.
7067
+ *
7068
+ * @param event - context-menu event to validate and optionally cancel.
7069
+ * @param sourceSessionId - current source session captured with the selection.
7070
+ * @returns validated selection metadata, or null while leaving the native menu untouched.
7071
+ */
7072
+ function claimSelectionContextMenu(event, sourceSessionId) {
7073
+ const selection = readSelection(event, sourceSessionId);
7074
+ if (selection === null) return null;
7075
+ event.preventDefault();
7076
+ return selection;
7077
+ }
6589
7078
  //#endregion
6590
7079
  //#region lib/types/client/types.js
6591
7080
  /** Tiny observable state shared by the selection popover and independent dock. */
@@ -6639,11 +7128,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6639
7128
  //#region lib/types/client/index.js
6640
7129
  const name = "@kirkchinese/dsh-citeciter";
6641
7130
  const inject = [
6642
- "layout",
6643
7131
  "slots",
6644
7132
  "sessions",
6645
7133
  "remote",
6646
- "settingsScope"
7134
+ "settingsScope",
7135
+ "connection"
6647
7136
  ];
6648
7137
  function decodeSettings(section) {
6649
7138
  const parsed = citeCiterSettingsSchema.safeParse(section);
@@ -6655,20 +7144,24 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6655
7144
  ctx.effect(() => unmountRemote, "citeciter: Remote contribution");
6656
7145
  ctx.inject(["remote.citeciter"], (remoteCtx) => {
6657
7146
  const sessions = remoteCtx.get("sessions");
6658
- const settings = remoteCtx.settingsScope.bind({
7147
+ const settingsBinder = remoteCtx.settingsScope;
7148
+ const settings = settingsBinder.bind({
6659
7149
  namespace: CITECITER_SETTINGS_NAMESPACE,
6660
7150
  decode: decodeSettings
6661
7151
  });
7152
+ const connection = remoteCtx.get("connection");
7153
+ const settingsDocument = createSettingsDocumentController(settingsBinder.describe(), async (signal) => {
7154
+ const response = await connection.api.settings.openDocument({}, signal);
7155
+ if (!response.result.ok) throw new Error(response.result.error.message);
7156
+ });
6662
7157
  const bus = new CiteBus((error) => remoteCtx.logger.warn("CiteCiter browser listener failed", error));
6663
7158
  const openPanel = () => {
6664
- remoteCtx.layout.closeDetails();
6665
7159
  bus.setPanelOpen(true);
6666
7160
  };
6667
7161
  const closePanel = () => {
6668
- remoteCtx.layout.closeDetails();
6669
7162
  bus.setPanelOpen(false);
6670
7163
  };
6671
- const companion = createCompanionController(sessions, settings, (request) => remoteCtx.remote.citeciter.request(request), openPanel);
7164
+ const companion = createCompanionController(sessions, settings, (request, signal) => remoteCtx.remote.citeciter.request(request, signal), openPanel, (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)(INITIAL_COMPANION_SNAPSHOT));
6672
7165
  const reportedParseErrors = /* @__PURE__ */ new Set();
6673
7166
  const reportParseError = (messageId) => {
6674
7167
  const storageKey = `citeciter:malformed-followups:${messageId}`;
@@ -6689,9 +7182,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6689
7182
  const onContextMenu = (event) => {
6690
7183
  const sourceSessionId = sessions.list.getSnapshot().current;
6691
7184
  if (sourceSessionId === void 0) return;
6692
- const selection = readSelection(event, sourceSessionId);
7185
+ const selection = claimSelectionContextMenu(event, sourceSessionId);
6693
7186
  if (selection === null) return;
6694
- event.preventDefault();
6695
7187
  bus.setMenuSelection(selection);
6696
7188
  };
6697
7189
  const onPointerDown = (event) => {
@@ -6734,12 +7226,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6734
7226
  id: "citeciter",
6735
7227
  order: 45,
6736
7228
  label: "CiteCiter",
6737
- inject: () => ({ companion })
7229
+ inject: () => ({
7230
+ companion,
7231
+ settingsDocument
7232
+ })
6738
7233
  }, CiteCiterSettings));
6739
7234
  remoteCtx.effect(() => async () => {
6740
7235
  unsubscribeSessions();
6741
7236
  closePanel();
6742
- await companion.dispose();
7237
+ await Promise.all([companion.dispose(), settingsDocument.dispose()]);
6743
7238
  }, "citeciter: browser controller");
6744
7239
  });
6745
7240
  }