/ components / diff / DiffFileList.tsx
DiffFileList.tsx
  1  import { c as _c } from "react/compiler-runtime";
  2  import figures from 'figures';
  3  import React, { useMemo } from 'react';
  4  import type { DiffFile } from '../../hooks/useDiffData.js';
  5  import { useTerminalSize } from '../../hooks/useTerminalSize.js';
  6  import { Box, Text } from '../../ink.js';
  7  import { truncateStartToWidth } from '../../utils/format.js';
  8  import { plural } from '../../utils/stringUtils.js';
  9  const MAX_VISIBLE_FILES = 5;
 10  type Props = {
 11    files: DiffFile[];
 12    selectedIndex: number;
 13  };
 14  export function DiffFileList(t0) {
 15    const $ = _c(36);
 16    const {
 17      files,
 18      selectedIndex
 19    } = t0;
 20    const {
 21      columns
 22    } = useTerminalSize();
 23    let t1;
 24    bb0: {
 25      if (files.length === 0 || files.length <= MAX_VISIBLE_FILES) {
 26        let t2;
 27        if ($[0] !== files.length) {
 28          t2 = {
 29            startIndex: 0,
 30            endIndex: files.length
 31          };
 32          $[0] = files.length;
 33          $[1] = t2;
 34        } else {
 35          t2 = $[1];
 36        }
 37        t1 = t2;
 38        break bb0;
 39      }
 40      let start = Math.max(0, selectedIndex - Math.floor(MAX_VISIBLE_FILES / 2));
 41      let end = start + MAX_VISIBLE_FILES;
 42      if (end > files.length) {
 43        end = files.length;
 44        start = Math.max(0, end - MAX_VISIBLE_FILES);
 45      }
 46      let t2;
 47      if ($[2] !== end || $[3] !== start) {
 48        t2 = {
 49          startIndex: start,
 50          endIndex: end
 51        };
 52        $[2] = end;
 53        $[3] = start;
 54        $[4] = t2;
 55      } else {
 56        t2 = $[4];
 57      }
 58      t1 = t2;
 59    }
 60    const {
 61      startIndex,
 62      endIndex
 63    } = t1;
 64    if (files.length === 0) {
 65      let t2;
 66      if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
 67        t2 = <Text dimColor={true}>No changed files</Text>;
 68        $[5] = t2;
 69      } else {
 70        t2 = $[5];
 71      }
 72      return t2;
 73    }
 74    let T0;
 75    let hasMoreBelow;
 76    let needsPagination;
 77    let t2;
 78    let t3;
 79    let t4;
 80    if ($[6] !== columns || $[7] !== endIndex || $[8] !== files || $[9] !== selectedIndex || $[10] !== startIndex) {
 81      const visibleFiles = files.slice(startIndex, endIndex);
 82      const hasMoreAbove = startIndex > 0;
 83      hasMoreBelow = endIndex < files.length;
 84      needsPagination = files.length > MAX_VISIBLE_FILES;
 85      const maxPathWidth = Math.max(20, columns - 16 - 3 - 4);
 86      T0 = Box;
 87      t2 = "column";
 88      if ($[17] !== hasMoreAbove || $[18] !== needsPagination || $[19] !== startIndex) {
 89        t3 = needsPagination && <Text dimColor={true}>{hasMoreAbove ? ` ↑ ${startIndex} more ${plural(startIndex, "file")}` : " "}</Text>;
 90        $[17] = hasMoreAbove;
 91        $[18] = needsPagination;
 92        $[19] = startIndex;
 93        $[20] = t3;
 94      } else {
 95        t3 = $[20];
 96      }
 97      let t5;
 98      if ($[21] !== maxPathWidth || $[22] !== selectedIndex || $[23] !== startIndex) {
 99        t5 = (file, index) => <FileItem key={file.path} file={file} isSelected={startIndex + index === selectedIndex} maxPathWidth={maxPathWidth} />;
100        $[21] = maxPathWidth;
101        $[22] = selectedIndex;
102        $[23] = startIndex;
103        $[24] = t5;
104      } else {
105        t5 = $[24];
106      }
107      t4 = visibleFiles.map(t5);
108      $[6] = columns;
109      $[7] = endIndex;
110      $[8] = files;
111      $[9] = selectedIndex;
112      $[10] = startIndex;
113      $[11] = T0;
114      $[12] = hasMoreBelow;
115      $[13] = needsPagination;
116      $[14] = t2;
117      $[15] = t3;
118      $[16] = t4;
119    } else {
120      T0 = $[11];
121      hasMoreBelow = $[12];
122      needsPagination = $[13];
123      t2 = $[14];
124      t3 = $[15];
125      t4 = $[16];
126    }
127    let t5;
128    if ($[25] !== endIndex || $[26] !== files.length || $[27] !== hasMoreBelow || $[28] !== needsPagination) {
129      t5 = needsPagination && <Text dimColor={true}>{hasMoreBelow ? ` ↓ ${files.length - endIndex} more ${plural(files.length - endIndex, "file")}` : " "}</Text>;
130      $[25] = endIndex;
131      $[26] = files.length;
132      $[27] = hasMoreBelow;
133      $[28] = needsPagination;
134      $[29] = t5;
135    } else {
136      t5 = $[29];
137    }
138    let t6;
139    if ($[30] !== T0 || $[31] !== t2 || $[32] !== t3 || $[33] !== t4 || $[34] !== t5) {
140      t6 = <T0 flexDirection={t2}>{t3}{t4}{t5}</T0>;
141      $[30] = T0;
142      $[31] = t2;
143      $[32] = t3;
144      $[33] = t4;
145      $[34] = t5;
146      $[35] = t6;
147    } else {
148      t6 = $[35];
149    }
150    return t6;
151  }
152  function FileItem(t0) {
153    const $ = _c(14);
154    const {
155      file,
156      isSelected,
157      maxPathWidth
158    } = t0;
159    let t1;
160    if ($[0] !== file.path || $[1] !== maxPathWidth) {
161      t1 = truncateStartToWidth(file.path, maxPathWidth);
162      $[0] = file.path;
163      $[1] = maxPathWidth;
164      $[2] = t1;
165    } else {
166      t1 = $[2];
167    }
168    const displayPath = t1;
169    const pointer = isSelected ? figures.pointer + " " : "  ";
170    const line = `${pointer}${displayPath}`;
171    const t2 = isSelected ? "background" : undefined;
172    let t3;
173    if ($[3] !== isSelected || $[4] !== line || $[5] !== t2) {
174      t3 = <Text bold={isSelected} color={t2} inverse={isSelected}>{line}</Text>;
175      $[3] = isSelected;
176      $[4] = line;
177      $[5] = t2;
178      $[6] = t3;
179    } else {
180      t3 = $[6];
181    }
182    let t4;
183    if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
184      t4 = <Box flexGrow={1} />;
185      $[7] = t4;
186    } else {
187      t4 = $[7];
188    }
189    let t5;
190    if ($[8] !== file || $[9] !== isSelected) {
191      t5 = <FileStats file={file} isSelected={isSelected} />;
192      $[8] = file;
193      $[9] = isSelected;
194      $[10] = t5;
195    } else {
196      t5 = $[10];
197    }
198    let t6;
199    if ($[11] !== t3 || $[12] !== t5) {
200      t6 = <Box flexDirection="row">{t3}{t4}{t5}</Box>;
201      $[11] = t3;
202      $[12] = t5;
203      $[13] = t6;
204    } else {
205      t6 = $[13];
206    }
207    return t6;
208  }
209  function FileStats(t0) {
210    const $ = _c(20);
211    const {
212      file,
213      isSelected
214    } = t0;
215    if (file.isUntracked) {
216      const t1 = !isSelected;
217      let t2;
218      if ($[0] !== t1) {
219        t2 = <Text dimColor={t1} italic={true}>untracked</Text>;
220        $[0] = t1;
221        $[1] = t2;
222      } else {
223        t2 = $[1];
224      }
225      return t2;
226    }
227    if (file.isBinary) {
228      const t1 = !isSelected;
229      let t2;
230      if ($[2] !== t1) {
231        t2 = <Text dimColor={t1} italic={true}>Binary file</Text>;
232        $[2] = t1;
233        $[3] = t2;
234      } else {
235        t2 = $[3];
236      }
237      return t2;
238    }
239    if (file.isLargeFile) {
240      const t1 = !isSelected;
241      let t2;
242      if ($[4] !== t1) {
243        t2 = <Text dimColor={t1} italic={true}>Large file modified</Text>;
244        $[4] = t1;
245        $[5] = t2;
246      } else {
247        t2 = $[5];
248      }
249      return t2;
250    }
251    let t1;
252    if ($[6] !== file.linesAdded || $[7] !== isSelected) {
253      t1 = file.linesAdded > 0 && <Text color="diffAddedWord" bold={isSelected}>+{file.linesAdded}</Text>;
254      $[6] = file.linesAdded;
255      $[7] = isSelected;
256      $[8] = t1;
257    } else {
258      t1 = $[8];
259    }
260    const t2 = file.linesAdded > 0 && file.linesRemoved > 0 && " ";
261    let t3;
262    if ($[9] !== file.linesRemoved || $[10] !== isSelected) {
263      t3 = file.linesRemoved > 0 && <Text color="diffRemovedWord" bold={isSelected}>-{file.linesRemoved}</Text>;
264      $[9] = file.linesRemoved;
265      $[10] = isSelected;
266      $[11] = t3;
267    } else {
268      t3 = $[11];
269    }
270    let t4;
271    if ($[12] !== file.isTruncated || $[13] !== isSelected) {
272      t4 = file.isTruncated && <Text dimColor={!isSelected}> (truncated)</Text>;
273      $[12] = file.isTruncated;
274      $[13] = isSelected;
275      $[14] = t4;
276    } else {
277      t4 = $[14];
278    }
279    let t5;
280    if ($[15] !== t1 || $[16] !== t2 || $[17] !== t3 || $[18] !== t4) {
281      t5 = <Text>{t1}{t2}{t3}{t4}</Text>;
282      $[15] = t1;
283      $[16] = t2;
284      $[17] = t3;
285      $[18] = t4;
286      $[19] = t5;
287    } else {
288      t5 = $[19];
289    }
290    return t5;
291  }
292  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWd1cmVzIiwiUmVhY3QiLCJ1c2VNZW1vIiwiRGlmZkZpbGUiLCJ1c2VUZXJtaW5hbFNpemUiLCJCb3giLCJUZXh0IiwidHJ1bmNhdGVTdGFydFRvV2lkdGgiLCJwbHVyYWwiLCJNQVhfVklTSUJMRV9GSUxFUyIsIlByb3BzIiwiZmlsZXMiLCJzZWxlY3RlZEluZGV4IiwiRGlmZkZpbGVMaXN0IiwidDAiLCIkIiwiX2MiLCJjb2x1bW5zIiwidDEiLCJiYjAiLCJsZW5ndGgiLCJ0MiIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsInN0YXJ0IiwiTWF0aCIsIm1heCIsImZsb29yIiwiZW5kIiwiU3ltYm9sIiwiZm9yIiwiVDAiLCJoYXNNb3JlQmVsb3ciLCJuZWVkc1BhZ2luYXRpb24iLCJ0MyIsInQ0IiwidmlzaWJsZUZpbGVzIiwic2xpY2UiLCJoYXNNb3JlQWJvdmUiLCJtYXhQYXRoV2lkdGgiLCJ0NSIsImZpbGUiLCJpbmRleCIsInBhdGgiLCJtYXAiLCJ0NiIsIkZpbGVJdGVtIiwiaXNTZWxlY3RlZCIsImRpc3BsYXlQYXRoIiwicG9pbnRlciIsImxpbmUiLCJ1bmRlZmluZWQiLCJGaWxlU3RhdHMiLCJpc1VudHJhY2tlZCIsImlzQmluYXJ5IiwiaXNMYXJnZUZpbGUiLCJsaW5lc0FkZGVkIiwibGluZXNSZW1vdmVkIiwiaXNUcnVuY2F0ZWQiXSwic291cmNlcyI6WyJEaWZmRmlsZUxpc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaWd1cmVzIGZyb20gJ2ZpZ3VyZXMnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEaWZmRmlsZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZURpZmZEYXRhLmpzJ1xuaW1wb3J0IHsgdXNlVGVybWluYWxTaXplIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlVGVybWluYWxTaXplLmpzJ1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgdHJ1bmNhdGVTdGFydFRvV2lkdGggfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXQuanMnXG5pbXBvcnQgeyBwbHVyYWwgfSBmcm9tICcuLi8uLi91dGlscy9zdHJpbmdVdGlscy5qcydcblxuY29uc3QgTUFYX1ZJU0lCTEVfRklMRVMgPSA1XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGZpbGVzOiBEaWZmRmlsZVtdXG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGlmZkZpbGVMaXN0KHsgZmlsZXMsIHNlbGVjdGVkSW5kZXggfTogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB7IGNvbHVtbnMgfSA9IHVzZVRlcm1pbmFsU2l6ZSgpXG5cbiAgLy8gQ2FsY3VsYXRlIHNjcm9sbCB3aW5kb3cgLSBtdXN0IGJlIGJlZm9yZSBlYXJseSByZXR1cm4gZm9yIGhvb2tzIHJ1bGVzXG4gIGNvbnN0IHsgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDAgfHwgZmlsZXMubGVuZ3RoIDw9IE1BWF9WSVNJQkxFX0ZJTEVTKSB7XG4gICAgICByZXR1cm4geyBzdGFydEluZGV4OiAwLCBlbmRJbmRleDogZmlsZXMubGVuZ3RoIH1cbiAgICB9XG5cbiAgICAvLyBLZWVwIHNlbGVjdGVkIGl0ZW0gcm91Z2hseSBpbiB0aGUgbWlkZGxlXG4gICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgc2VsZWN0ZWRJbmRleCAtIE1hdGguZmxvb3IoTUFYX1ZJU0lCTEVfRklMRVMgLyAyKSlcbiAgICBsZXQgZW5kID0gc3RhcnQgKyBNQVhfVklTSUJMRV9GSUxFU1xuXG4gICAgLy8gQWRqdXN0IGlmIHdlJ3JlIGF0IHRoZSBlbmRcbiAgICBpZiAoZW5kID4gZmlsZXMubGVuZ3RoKSB7XG4gICAgICBlbmQgPSBmaWxlcy5sZW5ndGhcbiAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoMCwgZW5kIC0gTUFYX1ZJU0lCTEVfRklMRVMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRJbmRleDogc3RhcnQsIGVuZEluZGV4OiBlbmQgfVxuICB9LCBbZmlsZXMubGVuZ3RoLCBzZWxlY3RlZEluZGV4XSlcblxuICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDxUZXh0IGRpbUNvbG9yPk5vIGNoYW5nZWQgZmlsZXM8L1RleHQ+XG4gIH1cblxuICBjb25zdCB2aXNpYmxlRmlsZXMgPSBmaWxlcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleClcbiAgY29uc3QgaGFzTW9yZUFib3ZlID0gc3RhcnRJbmRleCA+IDBcbiAgY29uc3QgaGFzTW9yZUJlbG93ID0gZW5kSW5kZXggPCBmaWxlcy5sZW5ndGhcbiAgY29uc3QgbmVlZHNQYWdpbmF0aW9uID0gZmlsZXMubGVuZ3RoID4gTUFYX1ZJU0lCTEVfRklMRVNcblxuICBjb25zdCBzdGF0c1dpZHRoID0gMTZcbiAgY29uc3QgcG9pbnRlcldpZHRoID0gM1xuICBjb25zdCBtYXhQYXRoV2lkdGggPSBNYXRoLm1heCgyMCwgY29sdW1ucyAtIHN0YXRzV2lkdGggLSBwb2ludGVyV2lkdGggLSA0KVxuXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICB7bmVlZHNQYWdpbmF0aW9uICYmIChcbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAge2hhc01vcmVBYm92ZVxuICAgICAgICAgICAgPyBgIOKGkSAke3N0YXJ0SW5kZXh9IG1vcmUgJHtwbHVyYWwoc3RhcnRJbmRleCwgJ2ZpbGUnKX1gXG4gICAgICAgICAgICA6ICcgJ31cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKX1cbiAgICAgIHt2aXNpYmxlRmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gKFxuICAgICAgICA8RmlsZUl0ZW1cbiAgICAgICAgICBrZXk9e2ZpbGUucGF0aH1cbiAgICAgICAgICBmaWxlPXtmaWxlfVxuICAgICAgICAgIGlzU2VsZWN0ZWQ9e3N0YXJ0SW5kZXggKyBpbmRleCA9PT0gc2VsZWN0ZWRJbmRleH1cbiAgICAgICAgICBtYXhQYXRoV2lkdGg9e21heFBhdGhXaWR0aH1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgICAge25lZWRzUGFnaW5hdGlvbiAmJiAoXG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgIHtoYXNNb3JlQmVsb3dcbiAgICAgICAgICAgID8gYCDihpMgJHtmaWxlcy5sZW5ndGggLSBlbmRJbmRleH0gbW9yZSAke3BsdXJhbChmaWxlcy5sZW5ndGggLSBlbmRJbmRleCwgJ2ZpbGUnKX1gXG4gICAgICAgICAgICA6ICcgJ31cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKX1cbiAgICA8L0JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBGaWxlSXRlbSh7XG4gIGZpbGUsXG4gIGlzU2VsZWN0ZWQsXG4gIG1heFBhdGhXaWR0aCxcbn06IHtcbiAgZmlsZTogRGlmZkZpbGVcbiAgaXNTZWxlY3RlZDogYm9vbGVhblxuICBtYXhQYXRoV2lkdGg6IG51bWJlclxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IGRpc3BsYXlQYXRoID0gdHJ1bmNhdGVTdGFydFRvV2lkdGgoZmlsZS5wYXRoLCBtYXhQYXRoV2lkdGgpXG5cbiAgY29uc3QgcG9pbnRlciA9IGlzU2VsZWN0ZWQgPyBmaWd1cmVzLnBvaW50ZXIgKyAnICcgOiAnICAnXG4gIGNvbnN0IGxpbmUgPSBgJHtwb2ludGVyfSR7ZGlzcGxheVBhdGh9YFxuXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICA8VGV4dFxuICAgICAgICBib2xkPXtpc1NlbGVjdGVkfVxuICAgICAgICBjb2xvcj17aXNTZWxlY3RlZCA/ICdiYWNrZ3JvdW5kJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgaW52ZXJzZT17aXNTZWxlY3RlZH1cbiAgICAgID5cbiAgICAgICAge2xpbmV9XG4gICAgICA8L1RleHQ+XG4gICAgICA8Qm94IGZsZXhHcm93PXsxfSAvPlxuICAgICAgPEZpbGVTdGF0cyBmaWxlPXtmaWxlfSBpc1NlbGVjdGVkPXtpc1NlbGVjdGVkfSAvPlxuICAgIDwvQm94PlxuICApXG59XG5cbmZ1bmN0aW9uIEZpbGVTdGF0cyh7XG4gIGZpbGUsXG4gIGlzU2VsZWN0ZWQsXG59OiB7XG4gIGZpbGU6IERpZmZGaWxlXG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW5cbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBpZiAoZmlsZS5pc1VudHJhY2tlZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8VGV4dCBkaW1Db2xvcj17IWlzU2VsZWN0ZWR9IGl0YWxpYz5cbiAgICAgICAgdW50cmFja2VkXG4gICAgICA8L1RleHQ+XG4gICAgKVxuICB9XG4gIGlmIChmaWxlLmlzQmluYXJ5KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxUZXh0IGRpbUNvbG9yPXshaXNTZWxlY3RlZH0gaXRhbGljPlxuICAgICAgICBCaW5hcnkgZmlsZVxuICAgICAgPC9UZXh0PlxuICAgIClcbiAgfVxuICBpZiAoZmlsZS5pc0xhcmdlRmlsZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8VGV4dCBkaW1Db2xvcj17IWlzU2VsZWN0ZWR9IGl0YWxpYz5cbiAgICAgICAgTGFyZ2UgZmlsZSBtb2RpZmllZFxuICAgICAgPC9UZXh0PlxuICAgIClcbiAgfVxuICAvLyBOb3JtYWwgb3IgdHJ1bmNhdGVkIGZpbGUgLSBzaG93IGxpbmUgY291bnRzXG4gIHJldHVybiAoXG4gICAgPFRleHQ+XG4gICAgICB7ZmlsZS5saW5lc0FkZGVkID4gMCAmJiAoXG4gICAgICAgIDxUZXh0IGNvbG9yPVwiZGlmZkFkZGVkV29yZFwiIGJvbGQ9e2lzU2VsZWN0ZWR9PlxuICAgICAgICAgICt7ZmlsZS5saW5lc0FkZGVkfVxuICAgICAgICA8L1RleHQ+XG4gICAgICApfVxuICAgICAge2ZpbGUubGluZXNBZGRlZCA+IDAgJiYgZmlsZS5saW5lc1JlbW92ZWQgPiAwICYmICcgJ31cbiAgICAgIHtmaWxlLmxpbmVzUmVtb3ZlZCA+IDAgJiYgKFxuICAgICAgICA8VGV4dCBjb2xvcj1cImRpZmZSZW1vdmVkV29yZFwiIGJvbGQ9e2lzU2VsZWN0ZWR9PlxuICAgICAgICAgIC17ZmlsZS5saW5lc1JlbW92ZWR9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICl9XG4gICAgICB7ZmlsZS5pc1RydW5jYXRlZCAmJiA8VGV4dCBkaW1Db2xvcj17IWlzU2VsZWN0ZWR9PiAodHJ1bmNhdGVkKTwvVGV4dD59XG4gICAgPC9UZXh0PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxPQUFPLE1BQU0sU0FBUztBQUM3QixPQUFPQyxLQUFLLElBQUlDLE9BQU8sUUFBUSxPQUFPO0FBQ3RDLGNBQWNDLFFBQVEsUUFBUSw0QkFBNEI7QUFDMUQsU0FBU0MsZUFBZSxRQUFRLGdDQUFnQztBQUNoRSxTQUFTQyxHQUFHLEVBQUVDLElBQUksUUFBUSxjQUFjO0FBQ3hDLFNBQVNDLG9CQUFvQixRQUFRLHVCQUF1QjtBQUM1RCxTQUFTQyxNQUFNLFFBQVEsNEJBQTRCO0FBRW5ELE1BQU1DLGlCQUFpQixHQUFHLENBQUM7QUFFM0IsS0FBS0MsS0FBSyxHQUFHO0VBQ1hDLEtBQUssRUFBRVIsUUFBUSxFQUFFO0VBQ2pCUyxhQUFhLEVBQUUsTUFBTTtBQUN2QixDQUFDO0FBRUQsT0FBTyxTQUFBQyxhQUFBQyxFQUFBO0VBQUEsTUFBQUMsQ0FBQSxHQUFBQyxFQUFBO0VBQXNCO0lBQUFMLEtBQUE7SUFBQUM7RUFBQSxJQUFBRSxFQUErQjtFQUMxRDtJQUFBRztFQUFBLElBQW9CYixlQUFlLENBQUMsQ0FBQztFQUFBLElBQUFjLEVBQUE7RUFBQUMsR0FBQTtJQUluQyxJQUFJUixLQUFLLENBQUFTLE1BQU8sS0FBSyxDQUFzQyxJQUFqQ1QsS0FBSyxDQUFBUyxNQUFPLElBQUlYLGlCQUFpQjtNQUFBLElBQUFZLEVBQUE7TUFBQSxJQUFBTixDQUFBLFFBQUFKLEtBQUEsQ0FB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