/ src / components / messages / UserTextMessage.tsx
UserTextMessage.tsx
  1  import { c as _c } from "react/compiler-runtime";
  2  import { feature } from 'bun:bundle';
  3  import type { TextBlockParam } from '@anthropic-ai/sdk/resources/index.mjs';
  4  import * as React from 'react';
  5  import { NO_CONTENT_MESSAGE } from '../../constants/messages.js';
  6  import { COMMAND_MESSAGE_TAG, LOCAL_COMMAND_CAVEAT_TAG, TASK_NOTIFICATION_TAG, TEAMMATE_MESSAGE_TAG, TICK_TAG } from '../../constants/xml.js';
  7  import { isAgentSwarmsEnabled } from '../../utils/agentSwarmsEnabled.js';
  8  import { extractTag, INTERRUPT_MESSAGE, INTERRUPT_MESSAGE_FOR_TOOL_USE } from '../../utils/messages.js';
  9  import { InterruptedByUser } from '../InterruptedByUser.js';
 10  import { MessageResponse } from '../MessageResponse.js';
 11  import { UserAgentNotificationMessage } from './UserAgentNotificationMessage.js';
 12  import { UserBashInputMessage } from './UserBashInputMessage.js';
 13  import { UserBashOutputMessage } from './UserBashOutputMessage.js';
 14  import { UserCommandMessage } from './UserCommandMessage.js';
 15  import { UserLocalCommandOutputMessage } from './UserLocalCommandOutputMessage.js';
 16  import { UserMemoryInputMessage } from './UserMemoryInputMessage.js';
 17  import { UserPlanMessage } from './UserPlanMessage.js';
 18  import { UserPromptMessage } from './UserPromptMessage.js';
 19  import { UserResourceUpdateMessage } from './UserResourceUpdateMessage.js';
 20  import { UserTeammateMessage } from './UserTeammateMessage.js';
 21  type Props = {
 22    addMargin: boolean;
 23    param: TextBlockParam;
 24    verbose: boolean;
 25    planContent?: string;
 26    isTranscriptMode?: boolean;
 27    timestamp?: string;
 28  };
 29  export function UserTextMessage(t0) {
 30    const $ = _c(49);
 31    const {
 32      addMargin,
 33      param,
 34      verbose,
 35      planContent,
 36      isTranscriptMode,
 37      timestamp
 38    } = t0;
 39    if (param.text.trim() === NO_CONTENT_MESSAGE) {
 40      return null;
 41    }
 42    if (planContent) {
 43      let t1;
 44      if ($[0] !== addMargin || $[1] !== planContent) {
 45        t1 = <UserPlanMessage addMargin={addMargin} planContent={planContent} />;
 46        $[0] = addMargin;
 47        $[1] = planContent;
 48        $[2] = t1;
 49      } else {
 50        t1 = $[2];
 51      }
 52      return t1;
 53    }
 54    if (extractTag(param.text, TICK_TAG)) {
 55      return null;
 56    }
 57    if (param.text.includes(`<${LOCAL_COMMAND_CAVEAT_TAG}>`)) {
 58      return null;
 59    }
 60    if (param.text.startsWith("<bash-stdout") || param.text.startsWith("<bash-stderr")) {
 61      let t1;
 62      if ($[3] !== param.text || $[4] !== verbose) {
 63        t1 = <UserBashOutputMessage content={param.text} verbose={verbose} />;
 64        $[3] = param.text;
 65        $[4] = verbose;
 66        $[5] = t1;
 67      } else {
 68        t1 = $[5];
 69      }
 70      return t1;
 71    }
 72    if (param.text.startsWith("<local-command-stdout") || param.text.startsWith("<local-command-stderr")) {
 73      let t1;
 74      if ($[6] !== param.text) {
 75        t1 = <UserLocalCommandOutputMessage content={param.text} />;
 76        $[6] = param.text;
 77        $[7] = t1;
 78      } else {
 79        t1 = $[7];
 80      }
 81      return t1;
 82    }
 83    if (param.text === INTERRUPT_MESSAGE || param.text === INTERRUPT_MESSAGE_FOR_TOOL_USE) {
 84      let t1;
 85      if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
 86        t1 = <MessageResponse height={1}><InterruptedByUser /></MessageResponse>;
 87        $[8] = t1;
 88      } else {
 89        t1 = $[8];
 90      }
 91      return t1;
 92    }
 93    if (feature("KAIROS_GITHUB_WEBHOOKS")) {
 94      if (param.text.startsWith("<github-webhook-activity>")) {
 95        let t1;
 96        if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
 97          t1 = require("./UserGitHubWebhookMessage.js");
 98          $[9] = t1;
 99        } else {
100          t1 = $[9];
101        }
102        const {
103          UserGitHubWebhookMessage
104        } = t1 as typeof import('./UserGitHubWebhookMessage.js');
105        let t2;
106        if ($[10] !== addMargin || $[11] !== param) {
107          t2 = <UserGitHubWebhookMessage addMargin={addMargin} param={param} />;
108          $[10] = addMargin;
109          $[11] = param;
110          $[12] = t2;
111        } else {
112          t2 = $[12];
113        }
114        return t2;
115      }
116    }
117    if (param.text.includes("<bash-input>")) {
118      let t1;
119      if ($[13] !== addMargin || $[14] !== param) {
120        t1 = <UserBashInputMessage addMargin={addMargin} param={param} />;
121        $[13] = addMargin;
122        $[14] = param;
123        $[15] = t1;
124      } else {
125        t1 = $[15];
126      }
127      return t1;
128    }
129    if (param.text.includes(`<${COMMAND_MESSAGE_TAG}>`)) {
130      let t1;
131      if ($[16] !== addMargin || $[17] !== param) {
132        t1 = <UserCommandMessage addMargin={addMargin} param={param} />;
133        $[16] = addMargin;
134        $[17] = param;
135        $[18] = t1;
136      } else {
137        t1 = $[18];
138      }
139      return t1;
140    }
141    if (param.text.includes("<user-memory-input>")) {
142      let t1;
143      if ($[19] !== addMargin || $[20] !== param.text) {
144        t1 = <UserMemoryInputMessage addMargin={addMargin} text={param.text} />;
145        $[19] = addMargin;
146        $[20] = param.text;
147        $[21] = t1;
148      } else {
149        t1 = $[21];
150      }
151      return t1;
152    }
153    if (isAgentSwarmsEnabled() && param.text.includes(`<${TEAMMATE_MESSAGE_TAG}`)) {
154      let t1;
155      if ($[22] !== addMargin || $[23] !== isTranscriptMode || $[24] !== param) {
156        t1 = <UserTeammateMessage addMargin={addMargin} param={param} isTranscriptMode={isTranscriptMode} />;
157        $[22] = addMargin;
158        $[23] = isTranscriptMode;
159        $[24] = param;
160        $[25] = t1;
161      } else {
162        t1 = $[25];
163      }
164      return t1;
165    }
166    if (param.text.includes(`<${TASK_NOTIFICATION_TAG}`)) {
167      let t1;
168      if ($[26] !== addMargin || $[27] !== param) {
169        t1 = <UserAgentNotificationMessage addMargin={addMargin} param={param} />;
170        $[26] = addMargin;
171        $[27] = param;
172        $[28] = t1;
173      } else {
174        t1 = $[28];
175      }
176      return t1;
177    }
178    if (param.text.includes("<mcp-resource-update") || param.text.includes("<mcp-polling-update")) {
179      let t1;
180      if ($[29] !== addMargin || $[30] !== param) {
181        t1 = <UserResourceUpdateMessage addMargin={addMargin} param={param} />;
182        $[29] = addMargin;
183        $[30] = param;
184        $[31] = t1;
185      } else {
186        t1 = $[31];
187      }
188      return t1;
189    }
190    if (feature("FORK_SUBAGENT")) {
191      if (param.text.includes("<fork-boilerplate>")) {
192        let t1;
193        if ($[32] === Symbol.for("react.memo_cache_sentinel")) {
194          t1 = require("./UserForkBoilerplateMessage.js");
195          $[32] = t1;
196        } else {
197          t1 = $[32];
198        }
199        const {
200          UserForkBoilerplateMessage
201        } = t1 as typeof import('./UserForkBoilerplateMessage.js');
202        let t2;
203        if ($[33] !== addMargin || $[34] !== param) {
204          t2 = <UserForkBoilerplateMessage addMargin={addMargin} param={param} />;
205          $[33] = addMargin;
206          $[34] = param;
207          $[35] = t2;
208        } else {
209          t2 = $[35];
210        }
211        return t2;
212      }
213    }
214    if (feature("UDS_INBOX")) {
215      if (param.text.includes("<cross-session-message")) {
216        let t1;
217        if ($[36] === Symbol.for("react.memo_cache_sentinel")) {
218          t1 = require("./UserCrossSessionMessage.js");
219          $[36] = t1;
220        } else {
221          t1 = $[36];
222        }
223        const {
224          UserCrossSessionMessage
225        } = t1 as typeof import('./UserCrossSessionMessage.js');
226        let t2;
227        if ($[37] !== addMargin || $[38] !== param) {
228          t2 = <UserCrossSessionMessage addMargin={addMargin} param={param} />;
229          $[37] = addMargin;
230          $[38] = param;
231          $[39] = t2;
232        } else {
233          t2 = $[39];
234        }
235        return t2;
236      }
237    }
238    if (feature("KAIROS") || feature("KAIROS_CHANNELS")) {
239      if (param.text.includes("<channel source=\"")) {
240        let t1;
241        if ($[40] === Symbol.for("react.memo_cache_sentinel")) {
242          t1 = require("./UserChannelMessage.js");
243          $[40] = t1;
244        } else {
245          t1 = $[40];
246        }
247        const {
248          UserChannelMessage
249        } = t1 as typeof import('./UserChannelMessage.js');
250        let t2;
251        if ($[41] !== addMargin || $[42] !== param) {
252          t2 = <UserChannelMessage addMargin={addMargin} param={param} />;
253          $[41] = addMargin;
254          $[42] = param;
255          $[43] = t2;
256        } else {
257          t2 = $[43];
258        }
259        return t2;
260      }
261    }
262    let t1;
263    if ($[44] !== addMargin || $[45] !== isTranscriptMode || $[46] !== param || $[47] !== timestamp) {
264      t1 = <UserPromptMessage addMargin={addMargin} param={param} isTranscriptMode={isTranscriptMode} timestamp={timestamp} />;
265      $[44] = addMargin;
266      $[45] = isTranscriptMode;
267      $[46] = param;
268      $[47] = timestamp;
269      $[48] = t1;
270    } else {
271      t1 = $[48];
272    }
273    return t1;
274  }
275  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmZWF0dXJlIiwiVGV4dEJsb2NrUGFyYW0iLCJSZWFjdCIsIk5PX0NPTlRFTlRfTUVTU0FHRSIsIkNPTU1BTkRfTUVTU0FHRV9UQUciLCJMT0NBTF9DT01NQU5EX0NBVkVBVF9UQUciLCJUQVNLX05PVElGSUNBVElPTl9UQUciLCJURUFNTUFURV9NRVNTQUdFX1RBRyIsIlRJQ0tfVEFHIiwiaXNBZ2VudFN3YXJtc0VuYWJsZWQiLCJleHRyYWN0VGFnIiwiSU5URVJSVVBUX01FU1NBR0UiLCJJTlRFUlJVUFRfTUVTU0FHRV9GT1JfVE9PTF9VU0UiLCJJbnRlcnJ1cHRlZEJ5VXNlciIsIk1lc3NhZ2VSZXNwb25zZSIsIlVzZXJBZ2VudE5vdGlmaWNhdGlvbk1lc3NhZ2UiLCJVc2VyQmFzaElucHV0TWVzc2FnZSIsIlVzZXJCYXNoT3V0cHV0TWVzc2FnZSIsIlVzZXJDb21tYW5kTWVzc2FnZSIsIlVzZXJMb2NhbENvbW1hbmRPdXRwdXRNZXNzYWdlIiwiVXNlck1lbW9yeUlucHV0TWVzc2FnZSIsIlVzZXJQbGFuTWVzc2FnZSIsIlVzZXJQcm9tcHRNZXNzYWdlIiwiVXNlclJlc291cmNlVXBkYXRlTWVzc2FnZSIsIlVzZXJUZWFtbWF0ZU1lc3NhZ2UiLCJQcm9wcyIsImFkZE1hcmdpbiIsInBhcmFtIiwidmVyYm9zZSIsInBsYW5Db250ZW50IiwiaXNUcmFuc2NyaXB0TW9kZSIsInRpbWVzdGFtcCIsIlVzZXJUZXh0TWVzc2FnZSIsInQwIiwiJCIsIl9jIiwidGV4dCIsInRyaW0iLCJ0MSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCIsIlN5bWJvbCIsImZvciIsInJlcXVpcmUiLCJVc2VyR2l0SHViV2ViaG9va01lc3NhZ2UiLCJ0MiIsIlVzZXJGb3JrQm9pbGVycGxhdGVNZXNzYWdlIiwiVXNlckNyb3NzU2Vzc2lvbk1lc3NhZ2UiLCJVc2VyQ2hhbm5lbE1lc3NhZ2UiXSwic291cmNlcyI6WyJVc2VyVGV4dE1lc3NhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZlYXR1cmUgfSBmcm9tICdidW46YnVuZGxlJ1xuaW1wb3J0IHR5cGUgeyBUZXh0QmxvY2tQYXJhbSB9IGZyb20gJ0BhbnRocm9waWMtYWkvc2RrL3Jlc291cmNlcy9pbmRleC5tanMnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IE5PX0NPTlRFTlRfTUVTU0FHRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9tZXNzYWdlcy5qcydcbmltcG9ydCB7XG4gIENPTU1BTkRfTUVTU0FHRV9UQUcsXG4gIExPQ0FMX0NPTU1BTkRfQ0FWRUFUX1RBRyxcbiAgVEFTS19OT1RJRklDQVRJT05fVEFHLFxuICBURUFNTUFURV9NRVNTQUdFX1RBRyxcbiAgVElDS19UQUcsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy94bWwuanMnXG5pbXBvcnQgeyBpc0FnZW50U3dhcm1zRW5hYmxlZCB9IGZyb20gJy4uLy4uL3V0aWxzL2FnZW50U3dhcm1zRW5hYmxlZC5qcydcbmltcG9ydCB7XG4gIGV4dHJhY3RUYWcsXG4gIElOVEVSUlVQVF9NRVNTQUdFLFxuICBJTlRFUlJVUFRfTUVTU0FHRV9GT1JfVE9PTF9VU0UsXG59IGZyb20gJy4uLy4uL3V0aWxzL21lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgSW50ZXJydXB0ZWRCeVVzZXIgfSBmcm9tICcuLi9JbnRlcnJ1cHRlZEJ5VXNlci5qcydcbmltcG9ydCB7IE1lc3NhZ2VSZXNwb25zZSB9IGZyb20gJy4uL01lc3NhZ2VSZXNwb25zZS5qcydcbmltcG9ydCB7IFVzZXJBZ2VudE5vdGlmaWNhdGlvbk1lc3NhZ2UgfSBmcm9tICcuL1VzZXJBZ2VudE5vdGlmaWNhdGlvbk1lc3NhZ2UuanMnXG5pbXBvcnQgeyBVc2VyQmFzaElucHV0TWVzc2FnZSB9IGZyb20gJy4vVXNlckJhc2hJbnB1dE1lc3NhZ2UuanMnXG5pbXBvcnQgeyBVc2VyQmFzaE91dHB1dE1lc3NhZ2UgfSBmcm9tICcuL1VzZXJCYXNoT3V0cHV0TWVzc2FnZS5qcydcbmltcG9ydCB7IFVzZXJDb21tYW5kTWVzc2FnZSB9IGZyb20gJy4vVXNlckNvbW1hbmRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgVXNlckxvY2FsQ29tbWFuZE91dHB1dE1lc3NhZ2UgfSBmcm9tICcuL1VzZXJMb2NhbENvbW1hbmRPdXRwdXRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgVXNlck1lbW9yeUlucHV0TWVzc2FnZSB9IGZyb20gJy4vVXNlck1lbW9yeUlucHV0TWVzc2FnZS5qcydcbmltcG9ydCB7IFVzZXJQbGFuTWVzc2FnZSB9IGZyb20gJy4vVXNlclBsYW5NZXNzYWdlLmpzJ1xuaW1wb3J0IHsgVXNlclByb21wdE1lc3NhZ2UgfSBmcm9tICcuL1VzZXJQcm9tcHRNZXNzYWdlLmpzJ1xuaW1wb3J0IHsgVXNlclJlc291cmNlVXBkYXRlTWVzc2FnZSB9IGZyb20gJy4vVXNlclJlc291cmNlVXBkYXRlTWVzc2FnZS5qcydcbmltcG9ydCB7IFVzZXJUZWFtbWF0ZU1lc3NhZ2UgfSBmcm9tICcuL1VzZXJUZWFtbWF0ZU1lc3NhZ2UuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIGFkZE1hcmdpbjogYm9vbGVhblxuICBwYXJhbTogVGV4dEJsb2NrUGFyYW1cbiAgdmVyYm9zZTogYm9vbGVhblxuICBwbGFuQ29udGVudD86IHN0cmluZ1xuICBpc1RyYW5zY3JpcHRNb2RlPzogYm9vbGVhblxuICB0aW1lc3RhbXA/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFVzZXJUZXh0TWVzc2FnZSh7XG4gIGFkZE1hcmdpbixcbiAgcGFyYW0sXG4gIHZlcmJvc2UsXG4gIHBsYW5Db250ZW50LFxuICBpc1RyYW5zY3JpcHRNb2RlLFxuICB0aW1lc3RhbXAsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGlmIChwYXJhbS50ZXh0LnRyaW0oKSA9PT0gTk9fQ09OVEVOVF9NRVNTQUdFKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIFBsYW4gdG8gaW1wbGVtZW50IG1lc3NhZ2UgKGNsZWFyZWQgY29udGV4dCBmbG93KVxuICBpZiAocGxhbkNvbnRlbnQpIHtcbiAgICByZXR1cm4gPFVzZXJQbGFuTWVzc2FnZSBhZGRNYXJnaW49e2FkZE1hcmdpbn0gcGxhbkNvbnRlbnQ9e3BsYW5Db250ZW50fSAvPlxuICB9XG5cbiAgaWYgKGV4dHJhY3RUYWcocGFyYW0udGV4dCwgVElDS19UQUcpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIEhpZGUgc3ludGhldGljIGNhdmVhdCBtZXNzYWdlcyAoc2hvdWxkIGJlIGZpbHRlcmVkIGJ5IGlzTWV0YSwgdGhpcyBpcyBkZWZlbnNpdmUpXG4gIGlmIChwYXJhbS50ZXh0LmluY2x1ZGVzKGA8JHtMT0NBTF9DT01NQU5EX0NBVkVBVF9UQUd9PmApKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIFNob3cgYmFzaCBvdXRwdXRcbiAgaWYgKFxuICAgIHBhcmFtLnRleHQuc3RhcnRzV2l0aCgnPGJhc2gtc3Rkb3V0JykgfHxcbiAgICBwYXJhbS50ZXh0LnN0YXJ0c1dpdGgoJzxiYXNoLXN0ZGVycicpXG4gICkge1xuICAgIHJldHVybiA8VXNlckJhc2hPdXRwdXRNZXNzYWdlIGNvbnRlbnQ9e3BhcmFtLnRleHR9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+XG4gIH1cblxuICAvLyBTaG93IGNvbW1hbmQgb3V0cHV0XG4gIGlmIChcbiAgICBwYXJhbS50ZXh0LnN0YXJ0c1dpdGgoJzxsb2NhbC1jb21tYW5kLXN0ZG91dCcpIHx8XG4gICAgcGFyYW0udGV4dC5zdGFydHNXaXRoKCc8bG9jYWwtY29tbWFuZC1zdGRlcnInKVxuICApIHtcbiAgICByZXR1cm4gPFVzZXJMb2NhbENvbW1hbmRPdXRwdXRNZXNzYWdlIGNvbnRlbnQ9e3BhcmFtLnRleHR9IC8+XG4gIH1cblxuICAvLyBIYW5kbGUgaW50ZXJydXB0aW9uIG1lc3NhZ2VzIHNwZWNpYWxseVxuICBpZiAoXG4gICAgcGFyYW0udGV4dCA9PT0gSU5URVJSVVBUX01FU1NBR0UgfHxcbiAgICBwYXJhbS50ZXh0ID09PSBJTlRFUlJVUFRfTUVTU0FHRV9GT1JfVE9PTF9VU0VcbiAgKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlUmVzcG9uc2UgaGVpZ2h0PXsxfT5cbiAgICAgICAgPEludGVycnVwdGVkQnlVc2VyIC8+XG4gICAgICA8L01lc3NhZ2VSZXNwb25zZT5cbiAgICApXG4gIH1cblxuICAvLyBHaXRIdWIgd2ViaG9vayBldmVudHMgKGNoZWNrX3J1biwgcmV2aWV3IGNvbW1lbnRzLCBwdXNoZXMpIGRlbGl2ZXJlZCB2aWFcbiAgLy8gYm91bmQtc2Vzc2lvbiByb3V0aW5nIGFmdGVyIC9zdWJzY3JpYmUtcHIuIFRoZSB0YWcgY29uc3RhbnQgaXMgc3RyaXBwZWRcbiAgLy8gZnJvbSBleHRlcm5hbCBidWlsZHMg4oCUIGlubGluZSB0aGUgbGl0ZXJhbCBzbyB0aGUgaW1wb3J0IGRvZXNuJ3QgZmFpbC5cbiAgLy8gVGhlIHJlcXVpcmUoKSBiZWxvdyBEQ0VzIHdoZW4gYm90aCBmbGFncyBhcmUgb2ZmLiBzdGFydHNXaXRoIChub3RcbiAgLy8gaW5jbHVkZXMpIGFuZCBiZWZvcmUgdGhlIGluY2x1ZGVzLWNoZWNrcyBiZWxvdzogZGVmZW5zZS1pbi1kZXB0aCBpZlxuICAvLyB0aGUgc2FuaXRpemVyIHdlcmUgZXZlciB3ZWFrZW5lZC5cbiAgaWYgKGZlYXR1cmUoJ0tBSVJPU19HSVRIVUJfV0VCSE9PS1MnKSkge1xuICAgIGlmIChwYXJhbS50ZXh0LnN0YXJ0c1dpdGgoJzxnaXRodWItd2ViaG9vay1hY3Rpdml0eT4nKSkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuICAgICAgY29uc3QgeyBVc2VyR2l0SHViV2ViaG9va01lc3NhZ2UgfSA9XG4gICAgICAgIHJlcXVpcmUoJy4vVXNlckdpdEh1YldlYmhvb2tNZXNzYWdlLmpzJykgYXMgdHlwZW9mIGltcG9ydCgnLi9Vc2VyR2l0SHViV2ViaG9va01lc3NhZ2UuanMnKVxuICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICByZXR1cm4gPFVzZXJHaXRIdWJXZWJob29rTWVzc2FnZSBhZGRNYXJnaW49e2FkZE1hcmdpbn0gcGFyYW09e3BhcmFtfSAvPlxuICAgIH1cbiAgfVxuXG4gIC8vIEJhc2ggaW5wdXRzIVxuICBpZiAocGFyYW0udGV4dC5pbmNsdWRlcygnPGJhc2gtaW5wdXQ+JykpIHtcbiAgICByZXR1cm4gPFVzZXJCYXNoSW5wdXRNZXNzYWdlIGFkZE1hcmdpbj17YWRkTWFyZ2lufSBwYXJhbT17cGFyYW19IC8+XG4gIH1cblxuICAvLyBTbGFzaCBjb21tYW5kcy9cbiAgaWYgKHBhcmFtLnRleHQuaW5jbHVkZXMoYDwke0NPTU1BTkRfTUVTU0FHRV9UQUd9PmApKSB7XG4gICAgcmV0dXJuIDxVc2VyQ29tbWFuZE1lc3NhZ2UgYWRkTWFyZ2luPXthZGRNYXJnaW59IHBhcmFtPXtwYXJhbX0gLz5cbiAgfVxuXG4gIGlmIChwYXJhbS50ZXh0LmluY2x1ZGVzKCc8dXNlci1tZW1vcnktaW5wdXQ+JykpIHtcbiAgICByZXR1cm4gPFVzZXJNZW1vcnlJbnB1dE1lc3NhZ2UgYWRkTWFyZ2luPXthZGRNYXJnaW59IHRleHQ9e3BhcmFtLnRleHR9IC8+XG4gIH1cblxuICAvLyBUZWFtbWF0ZSBtZXNzYWdlcyAtIG9ubHkgY2hlY2sgd2hlbiBzd2FybXMgZW5hYmxlZFxuICBpZiAoXG4gICAgaXNBZ2VudFN3YXJtc0VuYWJsZWQoKSAmJlxuICAgIHBhcmFtLnRleHQuaW5jbHVkZXMoYDwke1RFQU1NQVRFX01FU1NBR0VfVEFHfWApXG4gICkge1xuICAgIHJldHVybiAoXG4gICAgICA8VXNlclRlYW1tYXRlTWVzc2FnZVxuICAgICAgICBhZGRNYXJnaW49e2FkZE1hcmdpbn1cbiAgICAgICAgcGFyYW09e3BhcmFtfVxuICAgICAgICBpc1RyYW5zY3JpcHRNb2RlPXtpc1RyYW5zY3JpcHRNb2RlfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICAvLyBUYXNrIG5vdGlmaWNhdGlvbnMgKGFnZW50IGNvbXBsZXRpb25zLCBiYXNoIGNvbXBsZXRpb25zLCBldGMuKVxuICBpZiAocGFyYW0udGV4dC5pbmNsdWRlcyhgPCR7VEFTS19OT1RJRklDQVRJT05fVEFHfWApKSB7XG4gICAgcmV0dXJuIDxVc2VyQWdlbnROb3RpZmljYXRpb25NZXNzYWdlIGFkZE1hcmdpbj17YWRkTWFyZ2lufSBwYXJhbT17cGFyYW19IC8+XG4gIH1cblxuICAvLyBNQ1AgcmVzb3VyY2UgYW5kIHBvbGxpbmcgdXBkYXRlIG5vdGlmaWNhdGlvbnNcbiAgaWYgKFxuICAgIHBhcmFtLnRleHQuaW5jbHVkZXMoJzxtY3AtcmVzb3VyY2UtdXBkYXRlJykgfHxcbiAgICBwYXJhbS50ZXh0LmluY2x1ZGVzKCc8bWNwLXBvbGxpbmctdXBkYXRlJylcbiAgKSB7XG4gICAgcmV0dXJuIDxVc2VyUmVzb3VyY2VVcGRhdGVNZXNzYWdlIGFkZE1hcmdpbj17YWRkTWFyZ2lufSBwYXJhbT17cGFyYW19IC8+XG4gIH1cblxuICAvLyBGb3JrIGNoaWxkJ3MgZmlyc3QgbWVzc2FnZTogY29sbGFwc2UgdGhlIHJ1bGVzL2Zvcm1hdCBib2lsZXJwbGF0ZSwgc2hvd1xuICAvLyBvbmx5IHRoZSBkaXJlY3RpdmUuIEZPUktfQk9JTEVSUExBVEVfVEFHIGlzIGlubGluZWQgc28gdGhlIGltcG9ydCBkb2Vzbid0XG4gIC8vIHNoaXAgaW4gZXh0ZXJuYWwgYnVpbGRzIHdoZXJlIGZlYXR1cmUoJ0ZPUktfU1VCQUdFTlQnKSBpcyBmYWxzZS5cbiAgaWYgKGZlYXR1cmUoJ0ZPUktfU1VCQUdFTlQnKSkge1xuICAgIGlmIChwYXJhbS50ZXh0LmluY2x1ZGVzKCc8Zm9yay1ib2lsZXJwbGF0ZT4nKSkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuICAgICAgY29uc3QgeyBVc2VyRm9ya0JvaWxlcnBsYXRlTWVzc2FnZSB9ID1cbiAgICAgICAgcmVxdWlyZSgnLi9Vc2VyRm9ya0JvaWxlcnBsYXRlTWVzc2FnZS5qcycpIGFzIHR5cGVvZiBpbXBvcnQoJy4vVXNlckZvcmtCb2lsZXJwbGF0ZU1lc3NhZ2UuanMnKVxuICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICByZXR1cm4gPFVzZXJGb3JrQm9pbGVycGxhdGVNZXNzYWdlIGFkZE1hcmdpbj17YWRkTWFyZ2lufSBwYXJhbT17cGFyYW19IC8+XG4gICAgfVxuICB9XG5cbiAgLy8gQ3Jvc3Mtc2Vzc2lvbiBVRFMgbWVzc2FnZSAoZnJvbSBhbm90aGVyIENsYXVkZSBzZXNzaW9uJ3MgU2VuZE1lc3NhZ2UpLlxuICAvLyBDUk9TU19TRVNTSU9OX01FU1NBR0VfVEFHIGlzIGlubGluZWQgc28gdGhlIGltcG9ydCBkb2Vzbid0IHNoaXAgaW5cbiAgLy8gZXh0ZXJuYWwgYnVpbGRzIHdoZXJlIGZlYXR1cmUoJ1VEU19JTkJPWCcpIGlzIGZhbHNlLlxuICBpZiAoZmVhdHVyZSgnVURTX0lOQk9YJykpIHtcbiAgICBpZiAocGFyYW0udGV4dC5pbmNsdWRlcygnPGNyb3NzLXNlc3Npb24tbWVzc2FnZScpKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICBjb25zdCB7IFVzZXJDcm9zc1Nlc3Npb25NZXNzYWdlIH0gPVxuICAgICAgICByZXF1aXJlKCcuL1VzZXJDcm9zc1Nlc3Npb25NZXNzYWdlLmpzJykgYXMgdHlwZW9mIGltcG9ydCgnLi9Vc2VyQ3Jvc3NTZXNzaW9uTWVzc2FnZS5qcycpXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbiAgICAgIHJldHVybiA8VXNlckNyb3NzU2Vzc2lvbk1lc3NhZ2UgYWRkTWFyZ2luPXthZGRNYXJnaW59IHBhcmFtPXtwYXJhbX0gLz5cbiAgICB9XG4gIH1cblxuICAvLyBJbmJvdW5kIGNoYW5uZWwgbWVzc2FnZSAoTUNQIHNlcnZlciBwdXNoKS5cbiAgaWYgKGZlYXR1cmUoJ0tBSVJPUycpIHx8IGZlYXR1cmUoJ0tBSVJPU19DSEFOTkVMUycpKSB7XG4gICAgaWYgKHBhcmFtLnRleHQuaW5jbHVkZXMoJzxjaGFubmVsIHNvdXJjZT1cIicpKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICBjb25zdCB7IFVzZXJDaGFubmVsTWVzc2FnZSB9ID1cbiAgICAgICAgcmVxdWlyZSgnLi9Vc2VyQ2hhbm5lbE1lc3NhZ2UuanMnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL1VzZXJDaGFubmVsTWVzc2FnZS5qcycpXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbiAgICAgIHJldHVybiA8VXNlckNoYW5uZWxNZXNzYWdlIGFkZE1hcmdpbj17YWRkTWFyZ2lufSBwYXJhbT17cGFyYW19IC8+XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlciBwcm9tcHRzPlxuICByZXR1cm4gKFxuICAgIDxVc2VyUHJvbXB0TWVzc2FnZVxuICAgICAgYWRkTWFyZ2luPXthZGRNYXJnaW59XG4gICAgICBwYXJhbT17cGFyYW19XG4gICAgICBpc1RyYW5zY3JpcHRNb2RlPXtpc1RyYW5zY3JpcHRNb2RlfVxuICAgICAgdGltZXN0YW1wPXt0aW1lc3RhbXB9XG4gICAgLz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsT0FBTyxRQUFRLFlBQVk7QUFDcEMsY0FBY0MsY0FBYyxRQUFRLHVDQUF1QztBQUMzRSxPQUFPLEtBQUtDLEtBQUssTUFBTSxPQUFPO0FBQzlCLFNBQVNDLGtCQUFrQixRQUFRLDZCQUE2QjtBQUNoRSxTQUNF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T0FBL0RXLEVBQStEO0lBQUE7RUFDdkU7RUFJSCxJQUFJN0MsT0FBTyxDQUFDLFFBQXNDLENBQUMsSUFBMUJBLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUNqRCxJQUFJMkIsS0FBSyxDQUFBUyxJQUFLLENBQUFHLFFBQVMsQ0FBQyxvQkFBbUIsQ0FBQztNQUFBLElBQUFELEVBQUE7TUFBQSxJQUFBSixDQUFBLFNBQUFPLE1BQUEsQ0FBQUMsR0FBQTtRQUd4Q0osRUFBQSxHQUFBSyxPQUFPLENBQUMseUJBQXlCLENBQUM7UUFBQVQsQ0FBQSxPQUFBSSxFQUFBO01BQUE7UUFBQUEsRUFBQSxHQUFBSixDQUFBO01BQUE7TUFEcEM7UUFBQWM7TUFBQSxJQUNFVixFQUFrQyxJQUFJLE9BQU8sT0FBTyx5QkFBeUIsQ0FBQztNQUFBLElBQUFPLEVBQUE7TUFBQSxJQUFBWCxDQUFBLFNBQUFSLFNBQUEsSUFBQVEsQ0FBQSxTQUFBUCxLQUFBO1FBRXpFa0IsRUFBQSxJQUFDLGtCQUFrQixDQUFZbkIsU0FBUyxDQUFUQSxVQUFRLENBQUMsQ0FBU0MsS0FBSyxDQUFMQSxNQUFJLENBQUMsR0FBSTtRQUFBTyxDQUFBLE9BQUFSLFNBQUE7UUFBQVEsQ0FBQSxPQUFBUCxLQUFBO1FBQUFPLENBQUEsT0FBQVcsRUFBQTtNQUFBO1FBQUFBLEVBQUEsR0FBQVgsQ0FBQTtNQUFBO01BQUEsT0FBMURXLEVBQTBEO0lBQUE7RUFDbEU7RUFDRixJQUFBUCxFQUFBO0VBQUEsSUFBQUosQ0FBQSxTQUFBUixTQUFBLElBQUFRLENBQUEsU0FBQUosZ0JBQUEsSUFBQUksQ0FBQSxTQUFBUCxLQUFBLElBQUFPLENBQUEsU0FBQUgsU0FBQTtJQUlDTyxFQUFBLElBQUMsaUJBQWlCLENBQ0xaLFNBQVMsQ0FBVEEsVUFBUSxDQUFDLENBQ2JDLEtBQUssQ0FBTEEsTUFBSSxDQUFDLENBQ01HLGdCQUFnQixDQUFoQkEsaUJBQWUsQ0FBQyxDQUN2QkMsU0FBUyxDQUFUQSxVQUFRLENBQUMsR0FDcEI7SUFBQUcsQ0FBQSxPQUFBUixTQUFBO0lBQUFRLENBQUEsT0FBQUosZ0JBQUE7SUFBQUksQ0FBQSxPQUFBUCxLQUFBO0lBQUFPLENBQUEsT0FBQUgsU0FBQTtJQUFBRyxDQUFBLE9BQUFJLEVBQUE7RUFBQTtJQUFBQSxFQUFBLEdBQUFKLENBQUE7RUFBQTtFQUFBLE9BTEZJLEVBS0U7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==