Filemedium importancesource

TeleportResumeWrapper.tsx

components/TeleportResumeWrapper.tsx

167
Lines
15381
Bytes
1
Exports
10
Imports
10
Keywords

What this is

This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.

Beginner explanation

This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.

How it is used

Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.

Expert explanation

Architecturally, this file intersects with ui-flow. It contains 167 lines, 10 detected imports, and 1 detected exports.

Important relationships

Detected exports

  • TeleportResumeWrapper

Keywords

textelseonerrorsourceisembeddedreactoncanceloncompletesessionselectedsession

Detected imports

  • react/compiler-runtime
  • react
  • src/services/analytics/index.js
  • src/utils/conversationRecovery.js
  • src/utils/teleport/api.js
  • ../hooks/useTeleportResume.js
  • ../ink.js
  • ../keybindings/useKeybinding.js
  • ./ResumeTask.js
  • ./Spinner.js

Source notes

This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.

Open parent directory

Full source

import { c as _c } from "react/compiler-runtime";
import React, { useEffect } from 'react';
import { type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS, logEvent } from 'src/services/analytics/index.js';
import type { TeleportRemoteResponse } from 'src/utils/conversationRecovery.js';
import type { CodeSession } from 'src/utils/teleport/api.js';
import { type TeleportSource, useTeleportResume } from '../hooks/useTeleportResume.js';
import { Box, Text } from '../ink.js';
import { useKeybinding } from '../keybindings/useKeybinding.js';
import { ResumeTask } from './ResumeTask.js';
import { Spinner } from './Spinner.js';
interface TeleportResumeWrapperProps {
  onComplete: (result: TeleportRemoteResponse) => void;
  onCancel: () => void;
  onError?: (error: string, formattedMessage?: string) => void;
  isEmbedded?: boolean;
  source: TeleportSource;
}

/**
 * Wrapper component that manages the full teleport resume flow,
 * including session selection, loading state, and error handling
 */
export function TeleportResumeWrapper(t0) {
  const $ = _c(25);
  const {
    onComplete,
    onCancel,
    onError,
    isEmbedded: t1,
    source
  } = t0;
  const isEmbedded = t1 === undefined ? false : t1;
  const {
    resumeSession,
    isResuming,
    error,
    selectedSession
  } = useTeleportResume(source);
  let t2;
  let t3;
  if ($[0] !== source) {
    t2 = () => {
      logEvent("tengu_teleport_started", {
        source: source as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
      });
    };
    t3 = [source];
    $[0] = source;
    $[1] = t2;
    $[2] = t3;
  } else {
    t2 = $[1];
    t3 = $[2];
  }
  useEffect(t2, t3);
  let t4;
  if ($[3] !== error || $[4] !== onComplete || $[5] !== onError || $[6] !== resumeSession) {
    t4 = async session => {
      const result = await resumeSession(session);
      if (result) {
        onComplete(result);
      } else {
        if (error) {
          if (onError) {
            onError(error.message, error.formattedMessage);
          }
        }
      }
    };
    $[3] = error;
    $[4] = onComplete;
    $[5] = onError;
    $[6] = resumeSession;
    $[7] = t4;
  } else {
    t4 = $[7];
  }
  const handleSelect = t4;
  let t5;
  if ($[8] !== onCancel) {
    t5 = () => {
      logEvent("tengu_teleport_cancelled", {});
      onCancel();
    };
    $[8] = onCancel;
    $[9] = t5;
  } else {
    t5 = $[9];
  }
  const handleCancel = t5;
  const t6 = !!error && !onError;
  let t7;
  if ($[10] !== t6) {
    t7 = {
      context: "Global",
      isActive: t6
    };
    $[10] = t6;
    $[11] = t7;
  } else {
    t7 = $[11];
  }
  useKeybinding("app:interrupt", handleCancel, t7);
  if (isResuming && selectedSession) {
    let t8;
    if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
      t8 = <Box flexDirection="row"><Spinner /><Text bold={true}>Resuming session…</Text></Box>;
      $[12] = t8;
    } else {
      t8 = $[12];
    }
    let t9;
    if ($[13] !== selectedSession.title) {
      t9 = <Box flexDirection="column" padding={1}>{t8}<Text dimColor={true}>Loading "{selectedSession.title}"…</Text></Box>;
      $[13] = selectedSession.title;
      $[14] = t9;
    } else {
      t9 = $[14];
    }
    return t9;
  }
  if (error && !onError) {
    let t8;
    if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
      t8 = <Text bold={true} color="error">Failed to resume session</Text>;
      $[15] = t8;
    } else {
      t8 = $[15];
    }
    let t9;
    if ($[16] !== error.message) {
      t9 = <Text dimColor={true}>{error.message}</Text>;
      $[16] = error.message;
      $[17] = t9;
    } else {
      t9 = $[17];
    }
    let t10;
    if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
      t10 = <Box marginTop={1}><Text dimColor={true}>Press <Text bold={true}>Esc</Text> to cancel</Text></Box>;
      $[18] = t10;
    } else {
      t10 = $[18];
    }
    let t11;
    if ($[19] !== t9) {
      t11 = <Box flexDirection="column" padding={1}>{t8}{t9}{t10}</Box>;
      $[19] = t9;
      $[20] = t11;
    } else {
      t11 = $[20];
    }
    return t11;
  }
  let t8;
  if ($[21] !== handleCancel || $[22] !== handleSelect || $[23] !== isEmbedded) {
    t8 = <ResumeTask onSelect={handleSelect} onCancel={handleCancel} isEmbedded={isEmbedded} />;
    $[21] = handleCancel;
    $[22] = handleSelect;
    $[23] = isEmbedded;
    $[24] = t8;
  } else {
    t8 = $[24];
  }
  return t8;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsIkFuYWx5dGljc01ldGFkYXRhX0lfVkVSSUZJRURfVEhJU19JU19OT1RfQ09ERV9PUl9GSUxFUEFUSFMiLCJsb2dFdmVudCIsIlRlbGVwb3J0UmVtb3RlUmVzcG9uc2UiLCJDb2RlU2Vzc2lvbiIsIlRlbGVwb3J0U291cmNlIiwidXNlVGVsZXBvcnRSZXN1bWUiLCJCb3giLCJUZXh0IiwidXNlS2V5YmluZGluZyIsIlJlc3VtZVRhc2siLCJTcGlubmVyIiwiVGVsZXBvcnRSZXN1bWVXcmFwcGVyUHJvcHMiLCJvbkNvbXBsZXRlIiwicmVzdWx0Iiwib25DYW5jZWwiLCJvbkVycm9yIiwiZXJyb3IiLCJmb3JtYXR0ZWRNZXNzYWdlIiwiaXNFbWJlZGRlZCIsInNvdXJjZSIsIlRlbGVwb3J0UmVzdW1lV3JhcHBlciIsInQwIiwiJCIsIl9jIiwidDEiLCJ1bmRlZmluZWQiLCJyZXN1bWVTZXNzaW9uIiwiaXNSZXN1bWluZyIsInNlbGVjdGVkU2Vzc2lvbiIsInQyIiwidDMiLCJ0NCIsInNlc3Npb24iLCJtZXNzYWdlIiwiaGFuZGxlU2VsZWN0IiwidDUiLCJoYW5kbGVDYW5jZWwiLCJ0NiIsInQ3IiwiY29udGV4dCIsImlzQWN0aXZlIiwidDgiLCJTeW1ib2wiLCJmb3IiLCJ0OSIsInRpdGxlIiwidDEwIiwidDExIl0sInNvdXJjZXMiOlsiVGVsZXBvcnRSZXN1bWVXcmFwcGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICB0eXBlIEFuYWx5dGljc01ldGFkYXRhX0lfVkVSSUZJRURfVEhJU19JU19OT1RfQ09ERV9PUl9GSUxFUEFUSFMsXG4gIGxvZ0V2ZW50LFxufSBmcm9tICdzcmMvc2VydmljZXMvYW5hbHl0aWNzL2luZGV4LmpzJ1xuaW1wb3J0IHR5cGUgeyBUZWxlcG9ydFJlbW90ZVJlc3BvbnNlIH0gZnJvbSAnc3JjL3V0aWxzL2NvbnZlcnNhdGlvblJlY292ZXJ5LmpzJ1xuaW1wb3J0IHR5cGUgeyBDb2RlU2Vzc2lvbiB9IGZyb20gJ3NyYy91dGlscy90ZWxlcG9ydC9hcGkuanMnXG5pbXBvcnQge1xuICB0eXBlIFRlbGVwb3J0U291cmNlLFxuICB1c2VUZWxlcG9ydFJlc3VtZSxcbn0gZnJvbSAnLi4vaG9va3MvdXNlVGVsZXBvcnRSZXN1bWUuanMnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICcuLi9pbmsuanMnXG5pbXBvcnQgeyB1c2VLZXliaW5kaW5nIH0gZnJvbSAnLi4va2V5YmluZGluZ3MvdXNlS2V5YmluZGluZy5qcydcbmltcG9ydCB7IFJlc3VtZVRhc2sgfSBmcm9tICcuL1Jlc3VtZVRhc2suanMnXG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi9TcGlubmVyLmpzJ1xuXG5pbnRlcmZhY2UgVGVsZXBvcnRSZXN1bWVXcmFwcGVyUHJvcHMge1xuICBvbkNvbXBsZXRlOiAocmVzdWx0OiBUZWxlcG9ydFJlbW90ZVJlc3BvbnNlKSA9PiB2b2lkXG4gIG9uQ2FuY2VsOiAoKSA9PiB2b2lkXG4gIG9uRXJyb3I/OiAoZXJyb3I6IHN0cmluZywgZm9ybWF0dGVkTWVzc2FnZT86IHN0cmluZykgPT4gdm9pZFxuICBpc0VtYmVkZGVkPzogYm9vbGVhblxuICBzb3VyY2U6IFRlbGVwb3J0U291cmNlXG59XG5cbi8qKlxuICogV3JhcHBlciBjb21wb25lbnQgdGhhdCBtYW5hZ2VzIHRoZSBmdWxsIHRlbGVwb3J0IHJlc3VtZSBmbG93LFxuICogaW5jbHVkaW5nIHNlc3Npb24gc2VsZWN0aW9uLCBsb2FkaW5nIHN0YXRlLCBhbmQgZXJyb3IgaGFuZGxpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRlbGVwb3J0UmVzdW1lV3JhcHBlcih7XG4gIG9uQ29tcGxldGUsXG4gIG9uQ2FuY2VsLFxuICBvbkVycm9yLFxuICBpc0VtYmVkZGVkID0gZmFsc2UsXG4gIHNvdXJjZSxcbn06IFRlbGVwb3J0UmVzdW1lV3JhcHBlclByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgeyByZXN1bWVTZXNzaW9uLCBpc1Jlc3VtaW5nLCBlcnJvciwgc2VsZWN0ZWRTZXNzaW9uIH0gPVxuICAgIHVzZVRlbGVwb3J0UmVzdW1lKHNvdXJjZSlcblxuICAvLyBMb2cgd2hlbiB0ZWxlcG9ydCBmbG93IHN0YXJ0cyAoZm9yIGZ1bm5lbCB0cmFja2luZylcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsb2dFdmVudCgndGVuZ3VfdGVsZXBvcnRfc3RhcnRlZCcsIHtcbiAgICAgIHNvdXJjZTpcbiAgICAgICAgc291cmNlIGFzIEFuYWx5dGljc01ldGFkYXRhX0lfVkVSSUZJRURfVEhJU19JU19OT1RfQ09ERV9PUl9GSUxFUEFUSFMsXG4gICAgfSlcbiAgfSwgW3NvdXJjZV0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gYXN5bmMgKHNlc3Npb246IENvZGVTZXNzaW9uKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzdW1lU2Vzc2lvbihzZXNzaW9uKVxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIG9uQ29tcGxldGUocmVzdWx0KVxuICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZXJyb3IgaGFuZGxlciBwcm92aWRlZCwgdXNlIGl0XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UsIGVycm9yLmZvcm1hdHRlZE1lc3NhZ2UpXG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2UgdGhlIGVycm9yIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBVSVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBsb2dFdmVudCgndGVuZ3VfdGVsZXBvcnRfY2FuY2VsbGVkJywge30pXG4gICAgb25DYW5jZWwoKVxuICB9XG5cbiAgLy8gQWxsb3cgRXNjIHRvIGRpc21pc3MgdGhlIGVycm9yIHN0YXRlXG4gIHVzZUtleWJpbmRpbmcoJ2FwcDppbnRlcnJ1cHQnLCBoYW5kbGVDYW5jZWwsIHtcbiAgICBjb250ZXh0OiAnR2xvYmFsJyxcbiAgICBpc0FjdGl2ZTogISFlcnJvciAmJiAhb25FcnJvcixcbiAgfSlcblxuICAvLyBTaG93IGxvYWRpbmcgc3Bpbm5lciB3aGVuIHJlc3VtaW5nXG4gIGlmIChpc1Jlc3VtaW5nICYmIHNlbGVjdGVkU2Vzc2lvbikge1xuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nPXsxfT5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICA8VGV4dCBib2xkPlJlc3VtaW5nIHNlc3Npb27igKY8L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5Mb2FkaW5nICZxdW90O3tzZWxlY3RlZFNlc3Npb24udGl0bGV9JnF1b3Q74oCmPC9UZXh0PlxuICAgICAgPC9Cb3g+XG4gICAgKVxuICB9XG5cbiAgLy8gU2hvdyBlcnJvciBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHJlc3VtaW5nXG4gIGlmIChlcnJvciAmJiAhb25FcnJvcikge1xuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nPXsxfT5cbiAgICAgICAgPFRleHQgYm9sZCBjb2xvcj1cImVycm9yXCI+XG4gICAgICAgICAgRmFpbGVkIHRvIHJlc3VtZSBzZXNzaW9uXG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgZGltQ29sb3I+e2Vycm9yLm1lc3NhZ2V9PC9UZXh0PlxuICAgICAgICA8Qm94IG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICBQcmVzcyA8VGV4dCBib2xkPkVzYzwvVGV4dD4gdG8gY2FuY2VsXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlc3VtZVRhc2tcbiAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3R9XG4gICAgICBvbkNhbmNlbD17aGFuZGxlQ2FuY2VsfVxuICAgICAgaXNFbWJlZGRlZD17aXNFbWJlZGRlZH1cbiAgICAvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLElBQUlDLFNBQVMsUUFBUSxPQUFPO0FBQ3hDLFNBQ0UsS0FBS0MsMERBQTBELEVBQy9EQyxRQUFRLFFBQ0gsaUNBQWlDO0FBQ3hDLGNBQWNDLHNCQUFzQixRQUFRLG1DQUFtQztBQUMvRSxjQUFjQyxXQUFXLFFBQVEsMkJBQTJCO0FBQzVELFNBQ0UsS0FBS0MsY0FBYyxFQUNuQkMsaUJBQWlCLFFBQ1osK0JBQStCO0FBQ3RDLFNBQVNDLEdBQUcsRUFBRUMsSUFBSSxRQUFRLFdBQVc7QUFDckMsU0FBU0MsYUFBYSxRQUFRLGlDQUFpQztBQUMvRCxTQUFTQyxVQUFVLFFBQVEsaUJBQWlCO0FBQzVDLFNBQVNDLE9BQU8sUUFBUSxjQUFjO0FBRXRDLFVBQVVDLDBCQUEwQixDQUFDO0VBQ25DQyxVQUFVLEVBQUUsQ0FBQ0MsTUFBTSxFQUFFWCxzQkFBc0IsRUFBRSxHQUFHLElBQUk7RUFDcERZLFFBQVEsRUFBRSxHQUFHLEdBQUcsSUFBSTtFQUNwQkMsT0FBTyxDQUFDLEVBQUUsQ0FBQ0MsS0FBSyxFQUFFLE1BQU0sRUFBRUMsZ0JBQXlCLENBQVIsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJO0VBQzVEQyxVQUFVLENBQUMsRUFBRSxPQUFPO0VBQ3BCQyxNQUFNLEVBQUVmLGNBQWM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQUFnQixzQkFBQUMsRUFBQTtFQUFBLE1BQUFDLENBQUEsR0FBQUMsRUFBQTtFQUErQjtJQUFBWCxVQUFBO0lBQUFFLFFBQUE7SUFBQUMsT0FBQTtJQUFBRyxVQUFBLEVBQUFNLEVBQUE7SUFBQUw7RUFBQSxJQUFBRSxFQU1UO0VBRjNCLE1BQUFILFVBQUEsR0FBQU0sRUFBa0IsS0FBbEJDLFNBQWtCLEdBQWxCLEtBQWtCLEdBQWxCRCxFQUFrQjtFQUdsQjtJQUFBRSxhQUFBO0lBQUFDLFVBQUE7SUFBQVgsS0FBQTtJQUFBWTtFQUFBLElBQ0V2QixpQkFBaUIsQ0FBQ2MsTUFBTSxDQUFDO0VBQUEsSUFBQVUsRUFBQTtFQUFBLElBQUFDLEVBQUE7RUFBQSxJQUFBUixDQUFBLFFBQUFILE1BQUE7SUFHakJVLEVBQUEsR0FBQUEsQ0FBQTtNQUNSNUIsUUFBUSxDQUFDLHdCQUF3QixFQUFFO1FBQUFrQixNQUFBLEVBRS9CQSxNQUFNLElBQUluQjtNQUNkLENBQUMsQ0FBQztJQUFBLENBQ0g7SUFBRThCLEVBQUEsSUFBQ1gsTUFBTSxDQUFDO0lBQUFHLENBQUEsTUFBQUgsTUFBQTtJQUFBRyxDQUFBLE1BQUFPLEVBQUE7SUFBQVAsQ0FBQSxNQUFBUSxFQUFBO0VBQUE7SUFBQUQsRUFBQSxHQUFBUCxDQUFBO0lBQUFRLEVBQUEsR0FBQVIsQ0FBQTtFQUFBO0VBTFh2QixTQUFTLENBQUM4QixFQUtULEVBQUVDLEVBQVEsQ0FBQztFQUFBLElBQUFDLEVBQUE7RUFBQSxJQUFBVCxDQUFBLFFBQUFOLEtBQUEsSUFBQU0sQ0FBQSxRQUFBVixVQUFBLElBQUFVLENBQUEsUUFBQVAsT0FBQSxJQUFBTyxDQUFBLFFBQUFJLGFBQUE7SUFFU0ssRUFBQSxTQUFBQyxPQUFBO01BQ25CLE1BQUFuQixNQUFBLEdBQWUsTUFBTWEsYUFBYSxDQUFDTSxPQUFPLENBQUM7TUFDM0MsSUFBSW5CLE1BQU07UUFDUkQsVUFBVSxDQUFDQyxNQUFNLENBQUM7TUFBQTtRQUNiLElBQUlHLEtBQUs7VUFFZCxJQUFJRCxPQUFPO1lBQ1RBLE9BQU8sQ0FBQ0MsS0FBSyxDQUFBaUIsT0FBUSxFQUFFakIsS0FBSyxDQUFBQyxnQkFBaUIsQ0FBQztVQUFBO1FBQy9DO01BRUY7SUFBQSxDQUNGO0lBQUFLLENBQUEsTUFBQU4sS0FBQTtJQUFBTSxDQUFBLE1BQUFWLFVBQUE7SUFBQVUsQ0FBQSxNQUFBUCxPQUFBO0lBQUFPLENBQUEsTUFBQUksYUFBQTtJQUFBSixDQUFBLE1BQUFTLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFULENBQUE7RUFBQTtFQVhELE1BQUFZLFlBQUEsR0FBcUJILEVBV3BCO0VBQUEsSUFBQUksRUFBQTtFQUFBLElBQUFiLENBQUEsUUFBQVIsUUFBQTtJQUVvQnFCLEVBQUEsR0FBQUEsQ0FBQTtNQUNuQmxDLFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN4Q2EsUUFBUSxDQUFDLENBQUM7SUFBQSxDQUNYO0lBQUFRLENBQUEsTUFBQVIsUUFBQTtJQUFBUSxDQUFBLE1BQUFhLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFiLENBQUE7RUFBQTtFQUhELE1BQUFjLFlBQUEsR0FBcUJELEVBR3BCO0VBS1csTUFBQUUsRUFBQSxJQUFDLENBQUNyQixLQUFpQixJQUFuQixDQUFZRCxPQUFPO0VBQUEsSUFBQXVCLEVBQUE7RUFBQSxJQUFBaEIsQ0FBQSxTQUFBZSxFQUFBO0lBRmNDLEVBQUE7TUFBQUMsT0FBQSxFQUNsQyxRQUFRO01BQUFDLFFBQUEsRUFDUEg7SUFDWixDQUFDO0lBQUFmLENBQUEsT0FBQWUsRUFBQTtJQUFBZixDQUFBLE9BQUFnQixFQUFBO0VBQUE7SUFBQUEsRUFBQSxHQUFBaEIsQ0FBQTtFQUFBO0VBSERkLGFBQWEsQ0FBQyxlQUFlLEVBQUU0QixZQUFZLEVBQUVFLEVBRzVDLENBQUM7RUFHRixJQUFJWCxVQUE2QixJQUE3QkMsZUFBNkI7SUFBQSxJQUFBYSxFQUFBO0lBQUEsSUFBQW5CLENBQUEsU0FBQW9CLE1BQUEsQ0FBQUMsR0FBQTtNQUczQkYsRUFBQSxJQUFDLEdBQUcsQ0FBZSxhQUFLLENBQUwsS0FBSyxDQUN0QixDQUFDLE9BQU8sR0FDUixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUosS0FBRyxDQUFDLENBQUMsaUJBQWlCLEVBQTNCLElBQUksQ0FDUCxFQUhDLEdBQUcsQ0FHRTtNQUFBbkIsQ0FBQSxPQUFBbUIsRUFBQTtJQUFBO01BQUFBLEVBQUEsR0FBQW5CLENBQUE7SUFBQTtJQUFBLElBQUFzQixFQUFBO0lBQUEsSUFBQXRCLENBQUEsU0FBQU0sZUFBQSxDQUFBaUIsS0FBQTtNQUpSRCxFQUFBLElBQUMsR0FBRyxDQUFlLGFBQVEsQ0FBUixRQUFRLENBQVUsT0FBQyxDQUFELEdBQUMsQ0FDcEMsQ0FBQUgsRUFHSyxDQUNMLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBUixLQUFPLENBQUMsQ0FBQyxTQUFlLENBQUFiLGVBQWUsQ0FBQWlCLEtBQUssQ0FBRSxFQUFPLEVBQTFELElBQUksQ0FDUCxFQU5DLEdBQUcsQ0FNRTtNQUFBdkIsQ0FBQSxPQUFBTSxlQUFBLENBQUFpQixLQUFBO01BQUF2QixDQUFBLE9BQUFzQixFQUFBO0lBQUE7TUFBQUEsRUFBQSxHQUFBdEIsQ0FBQTtJQUFBO0lBQUEsT0FOTnNCLEVBTU07RUFBQTtFQUtWLElBQUk1QixLQUFpQixJQUFqQixDQUFVRCxPQUFPO0lBQUEsSUFBQTBCLEVBQUE7SUFBQSxJQUFBbkIsQ0FBQSxTQUFBb0IsTUFBQSxDQUFBQyxHQUFBO01BR2ZGLEVBQUEsSUFBQyxJQUFJLENBQUMsSUFBSSxDQUFKLEtBQUcsQ0FBQyxDQUFPLEtBQU8sQ0FBUCxPQUFPLENBQUMsd0JBRXpCLEVBRkMsSUFBSSxDQUVFO01BQUFuQixDQUFBLE9BQUFtQixFQUFBO0lBQUE7TUFBQUEsRUFBQSxHQUFBbkIsQ0FBQTtJQUFBO0lBQUEsSUFBQXNCLEVBQUE7SUFBQSxJQUFBdEIsQ0FBQSxTQUFBTixLQUFBLENBQUFpQixPQUFBO01BQ1BXLEVBQUEsSUFBQyxJQUFJLENBQUMsUUFBUSxDQUFSLEtBQU8sQ0FBQyxDQUFFLENBQUE1QixLQUFLLENBQUFpQixPQUFPLENBQUUsRUFBN0IsSUFBSSxDQUFnQztNQUFBWCxDQUFBLE9BQUFOLEtBQUEsQ0FBQWlCLE9BQUE7TUFBQVgsQ0FBQSxPQUFBc0IsRUFBQTtJQUFBO01BQUFBLEVBQUEsR0FBQXRCLENBQUE7SUFBQTtJQUFBLElBQUF3QixHQUFBO0lBQUEsSUFBQXhCLENBQUEsU0FBQW9CLE1BQUEsQ0FBQUMsR0FBQTtNQUNyQ0csR0FBQSxJQUFDLEdBQUcsQ0FBWSxTQUFDLENBQUQsR0FBQyxDQUNmLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBUixLQUFPLENBQUMsQ0FBQyxNQUNQLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBSixLQUFHLENBQUMsQ0FBQyxHQUFHLEVBQWIsSUFBSSxDQUFnQixVQUM3QixFQUZDLElBQUksQ0FHUCxFQUpDLEdBQUcsQ0FJRTtNQUFBeEIsQ0FBQSxPQUFBd0IsR0FBQTtJQUFBO01BQUFBLEdBQUEsR0FBQXhCLENBQUE7SUFBQTtJQUFBLElBQUF5QixHQUFBO0lBQUEsSUFBQXpCLENBQUEsU0FBQXNCLEVBQUE7TUFUUkcsR0FBQSxJQUFDLEdBQUcsQ0FBZSxhQUFRLENBQVIsUUFBUSxDQUFVLE9BQUMsQ0FBRCxHQUFDLENBQ3BDLENBQUFOLEVBRU0sQ0FDTixDQUFBRyxFQUFvQyxDQUNwQyxDQUFBRSxHQUlLLENBQ1AsRUFWQyxHQUFHLENBVUU7TUFBQXhCLENBQUEsT0FBQXNCLEVBQUE7TUFBQXRCLENBQUEsT0FBQXlCLEdBQUE7SUFBQTtNQUFBQSxHQUFBLEdBQUF6QixDQUFBO0lBQUE7SUFBQSxPQVZOeUIsR0FVTTtFQUFBO0VBRVQsSUFBQU4sRUFBQTtFQUFBLElBQUFuQixDQUFBLFNBQUFjLFlBQUEsSUFBQWQsQ0FBQSxTQUFBWSxZQUFBLElBQUFaLENBQUEsU0FBQUosVUFBQTtJQUdDdUIsRUFBQSxJQUFDLFVBQVUsQ0FDQ1AsUUFBWSxDQUFaQSxhQUFXLENBQUMsQ0FDWkUsUUFBWSxDQUFaQSxhQUFXLENBQUMsQ0FDVmxCLFVBQVUsQ0FBVkEsV0FBUyxDQUFDLEdBQ3RCO0lBQUFJLENBQUEsT0FBQWMsWUFBQTtJQUFBZCxDQUFBLE9BQUFZLFlBQUE7SUFBQVosQ0FBQSxPQUFBSixVQUFBO0lBQUFJLENBQUEsT0FBQW1CLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFuQixDQUFBO0VBQUE7RUFBQSxPQUpGbUIsRUFJRTtBQUFBIiwiaWdub3JlTGlzdCI6W119