1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/pages/WorkItemsListPage.vue");import { defineComponent as _defineComponent } from "/node_modules/.vite/deps/vue.js?v=33290e8f"; 2import { computed, onMounted, ref } from "/node_modules/.vite/deps/vue.js?v=33290e8f"; 3import { useRouter } from "/node_modules/.vite/deps/vue-router.js?v=33290e8f"; 4import { api } from "/src/api.ts"; 5const _sfc_main = /* @__PURE__ */ _defineComponent({ 6 __name: "WorkItemsListPage", 7 setup(__props, { expose: __expose }) { 8 __expose(); 9 const router = useRouter(); 10 const workItems = ref([]); 11 const error = ref(""); 12 const loading = ref(false); 13 const search = ref(""); 14 const statusFilter = ref(""); 15 const STATUS_OPTIONS = [ 16 "todo", 17 "in-progress", 18 "blocked", 19 "in-review", 20 "done", 21 "cancelled" 22 ]; 23 const filtered = computed(() => { 24 let result = workItems.value; 25 if (statusFilter.value) { 26 result = result.filter((wi) => wi.status === statusFilter.value); 27 } 28 if (search.value.trim()) { 29 const q = search.value.toLowerCase(); 30 result = result.filter( 31 (wi) => wi.id.toLowerCase().includes(q) || wi.title.toLowerCase().includes(q) || wi.featureId.toLowerCase().includes(q) || (wi.featureTitle ?? "").toLowerCase().includes(q) || (wi.owner ?? "").toLowerCase().includes(q) 32 ); 33 } 34 return result; 35 }); 36 const deletingId = ref(null); 37 async function load() { 38 loading.value = true; 39 error.value = ""; 40 try { 41 workItems.value = await api.listWorkItems(); 42 } catch (e) { 43 error.value = e instanceof Error ? e.message : "Failed to load work items"; 44 } finally { 45 loading.value = false; 46 } 47 } 48 onMounted(load); 49 function open(wi) { 50 router.push(`/create-work/${wi.id}`); 51 } 52 async function remove(wi) { 53 if (!window.confirm( 54 `Delete ${wi.id}? This removes the work item and its Study, Impact, Discoveries, plans, and any decisions owned by it. Project decisions (DEC-*) stay.` 55 )) { 56 return; 57 } 58 deletingId.value = wi.id; 59 error.value = ""; 60 try { 61 await api.deleteWorkItem(wi.id); 62 workItems.value = workItems.value.filter((item) => item.id !== wi.id); 63 } catch (e) { 64 error.value = e instanceof Error ? e.message : "Delete failed"; 65 } finally { 66 deletingId.value = null; 67 } 68 } 69 function statusLabel(s) { 70 return s; 71 } 72 const __returned__ = { router, workItems, error, loading, search, statusFilter, STATUS_OPTIONS, filtered, deletingId, load, open, remove, statusLabel }; 73 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 74 return __returned__; 75 } 76}); 77import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelSelect as _vModelSelect, withDirectives as _withDirectives, vModelText as _vModelText, withKeys as _withKeys, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass } from "/node_modules/.vite/deps/vue.js?v=33290e8f"; 78const _hoisted_1 = { class: "card" }; 79const _hoisted_2 = { class: "meta" }; 80const _hoisted_3 = { class: "filters" }; 81const _hoisted_4 = ["value"]; 82const _hoisted_5 = { class: "grow" }; 83const _hoisted_6 = { 84 key: 0, 85 class: "error" 86}; 87const _hoisted_7 = { key: 1 }; 88const _hoisted_8 = { 89 key: 2, 90 class: "wi-table" 91}; 92const _hoisted_9 = ["onClick"]; 93const _hoisted_10 = { class: "wi-id" }; 94const _hoisted_11 = { class: "mono" }; 95const _hoisted_12 = { class: "meta" }; 96const _hoisted_13 = { class: "meta" }; 97const _hoisted_14 = { class: "actions" }; 98const _hoisted_15 = ["disabled", "onClick"]; 99const _hoisted_16 = { 100 key: 3, 101 class: "meta" 102}; 103function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { 104 const _component_router_link = _resolveComponent("router-link"); 105 return _openBlock(), _createElementBlock("section", null, [ 106 _createElementVNode("div", _hoisted_1, [ 107 _cache[8] || (_cache[8] = _createElementVNode( 108 "h2", 109 null, 110 "Work Items", 111 -1 112 /* CACHED */ 113 )), 114 _createElementVNode("p", _hoisted_2, [ 115 _createTextVNode( 116 _toDisplayString($setup.filtered.length) + " of " + _toDisplayString($setup.workItems.length) + " work items. ", 117 1 118 /* TEXT */ 119 ), 120 _createVNode(_component_router_link, { to: "/create-work" }, { 121 default: _withCtx(() => [..._cache[3] || (_cache[3] = [ 122 _createTextVNode( 123 "Create a new one â", 124 -1 125 /* CACHED */ 126 ) 127 ])]), 128 _: 1 129 /* STABLE */ 130 }) 131 ]), 132 _createElementVNode("div", _hoisted_3, [ 133 _createElementVNode("label", null, [ 134 _cache[5] || (_cache[5] = _createTextVNode( 135 " Status ", 136 -1 137 /* CACHED */ 138 )), 139 _withDirectives(_createElementVNode( 140 "select", 141 { 142 "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.statusFilter = $event), 143 onChange: ($event) => void 0 144 }, 145 [ 146 _cache[4] || (_cache[4] = _createElementVNode( 147 "option", 148 { value: "" }, 149 "All", 150 -1 151 /* CACHED */ 152 )), 153 (_openBlock(), _createElementBlock( 154 _Fragment, 155 null, 156 _renderList($setup.STATUS_OPTIONS, (s) => { 157 return _createElementVNode("option", { 158 key: s, 159 value: s 160 }, _toDisplayString(s), 9, _hoisted_4); 161 }), 162 64 163 /* STABLE_FRAGMENT */ 164 )) 165 ], 166 544 167 /* NEED_HYDRATION, NEED_PATCH */ 168 ), [ 169 [_vModelSelect, $setup.statusFilter] 170 ]) 171 ]), 172 _createElementVNode("label", _hoisted_5, [ 173 _cache[6] || (_cache[6] = _createTextVNode( 174 " Search ", 175 -1 176 /* CACHED */ 177 )), 178 _withDirectives(_createElementVNode( 179 "input", 180 { 181 "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.search = $event), 182 placeholder: "ID, title, feature, ownerâ¦", 183 onKeyup: _withKeys(($event) => void 0, ["enter"]) 184 }, 185 null, 186 544 187 /* NEED_HYDRATION, NEED_PATCH */ 188 ), [ 189 [_vModelText, $setup.search] 190 ]) 191 ]), 192 _createElementVNode("button", { 193 class: "secondary", 194 onClick: $setup.load 195 }, "Refresh") 196 ]), 197 $setup.error ? (_openBlock(), _createElementBlock( 198 "p", 199 _hoisted_6, 200 _toDisplayString($setup.error), 201 1 202 /* TEXT */ 203 )) : _createCommentVNode("v-if", true), 204 $setup.loading ? (_openBlock(), _createElementBlock("p", _hoisted_7, "Loadingâ¦")) : $setup.filtered.length ? (_openBlock(), _createElementBlock("table", _hoisted_8, [
205 _cache[7] || (_cache[7] = _createElementVNode( 206 "thead", 207 null, 208 [ 209 _createElementVNode("tr", null, [ 210 _createElementVNode("th", null, "ID"), 211 _createElementVNode("th", null, "Title"), 212 _createElementVNode("th", null, "Feature"), 213 _createElementVNode("th", null, "Status"), 214 _createElementVNode("th", null, "Owner"), 215 _createElementVNode("th", null, "Updated"), 216 _createElementVNode("th") 217 ]) 218 ], 219 -1 220 /* CACHED */ 221 )), 222 _createElementVNode("tbody", null, [ 223 (_openBlock(true), _createElementBlock( 224 _Fragment, 225 null, 226 _renderList($setup.filtered, (wi) => { 227 return _openBlock(), _createElementBlock("tr", { 228 key: wi.id, 229 class: "wi-row", 230 onClick: ($event) => $setup.open(wi) 231 }, [ 232 _createElementVNode( 233 "td", 234 _hoisted_10, 235 _toDisplayString(wi.id), 236 1 237 /* TEXT */ 238 ), 239 _createElementVNode( 240 "td", 241 null, 242 _toDisplayString(wi.title), 243 1 244 /* TEXT */ 245 ), 246 _createElementVNode("td", _hoisted_11, [ 247 _createVNode(_component_router_link, { 248 to: `/features/${encodeURIComponent(wi.featureId)}`, 249 onClick: _cache[2] || (_cache[2] = _withModifiers(() => { 250 }, ["stop"])) 251 }, { 252 default: _withCtx(() => [ 253 _createTextVNode( 254 _toDisplayString(wi.featureId), 255 1 256 /* TEXT */ 257 ) 258 ]), 259 _: 2 260 /* DYNAMIC */ 261 }, 1032, ["to"]), 262 _createElementVNode( 263 "div", 264 _hoisted_12, 265 _toDisplayString(wi.featureTitle), 266 1 267 /* TEXT */ 268 ) 269 ]), 270 _createElementVNode("td", null, [ 271 _createElementVNode( 272 "span", 273 { 274 class: _normalizeClass(["status-badge", wi.status]) 275 }, 276 _toDisplayString($setup.statusLabel(wi.status)), 277 3 278 /* TEXT, CLASS */ 279 ) 280 ]), 281 _createElementVNode( 282 "td", 283 null, 284 _toDisplayString(wi.owner ?? "â"), 285 1 286 /* TEXT */ 287 ), 288 _createElementVNode( 289 "td", 290 _hoisted_13, 291 _toDisplayString(wi.updatedAt.slice(0, 10)), 292 1 293 /* TEXT */ 294 ), 295 _createElementVNode("td", _hoisted_14, [ 296 _createElementVNode("button", { 297 type: "button", 298 class: "danger", 299 disabled: $setup.deletingId === wi.id, 300 onClick: _withModifiers(($event) => $setup.remove(wi), ["stop"]) 301 }, _toDisplayString($setup.deletingId === wi.id ? "Deletingâ¦" : "Delete"), 9, _hoisted_15) 302 ]) 303 ], 8, _hoisted_9); 304 }), 305 128 306 /* KEYED_FRAGMENT */ 307 )) 308 ]) 309 ])) : (_openBlock(), _createElementBlock("p", _hoisted_16, "No work items found.")) 310 ]) 311 ]); 312} 313import "/src/pages/WorkItemsListPage.vue?vue&type=style&index=0&scoped=f0d15e56&lang.css"; 314_sfc_main.__hmrId = "f0d15e56"; 315typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main); 316import.meta.hot.on("file-changed", ({ file }) => { 317 __VUE_HMR_RUNTIME__.CHANGED_FILE = file; 318}); 319import.meta.hot.accept((mod) => { 320 if (!mod) return; 321 const { default: updated, _rerender_only } = mod; 322 if (_rerender_only) { 323 __VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render); 324 } else { 325 __VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated); 326 } 327}); 328import _export_sfc from "/@id/__x00__plugin-vue:export-helper";
329export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-f0d15e56"], ["__file", "/home/reddragon/bigboard-0/workbench/client/src/pages/WorkItemsListPage.vue"]]); 330 331//# sourceMappingURL=data:application/json;base64,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UTtBQUFBLGtDQTFDTjtBQUFBLFVBVVE7QUFBQTtBQUFBO0FBQUEsWUFUTixvQkFRSztBQUFBLGNBUEgsb0JBQVcsWUFBUCxJQUFFO0FBQUEsY0FDTixvQkFBYyxZQUFWLE9BQUs7QUFBQSxjQUNULG9CQUFnQixZQUFaLFNBQU87QUFBQSxjQUNYLG9CQUFlLFlBQVgsUUFBTTtBQUFBLGNBQ1Ysb0JBQWMsWUFBVixPQUFLO0FBQUEsY0FDVCxvQkFBZ0IsWUFBWixTQUFPO0FBQUEsY0FDWCxvQkFBUztBQUFBOzs7OztRQUdiLG9CQThCUTtBQUFBLDZCQTdCTjtBQUFBLFlBNEJLO0FBQUE7QUFBQSx3QkEzQlUsaUJBQVEsQ0FBZCxPQUFFO21DQURYLG9CQTRCSztBQUFBLGdCQTFCRixLQUFLLEdBQUc7QUFBQSxnQkFDVCxPQUFNO0FBQUEsZ0JBQ0wsU0FBSyxZQUFFLFlBQUssRUFBRTtBQUFBO2dCQUVmO0FBQUEsa0JBQWtDO0FBQUEsa0JBQWxDO0FBQUEsa0JBQWtDLGlCQUFiLEdBQUcsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUMxQjtBQUFBLGtCQUF1QjtBQUFBO0FBQUEsbUNBQWhCLEdBQUcsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUNmLG9CQU1LLE1BTkwsYUFNSztBQUFBLGtCQUxILGFBR2lDO0FBQUEsb0JBRjlCLElBQUUsYUFBZSxtQkFBbUIsR0FBRyxTQUFTO0FBQUEsb0JBQ2hELFNBQUsseUNBQU47QUFBQSx1QkFBVztBQUFBO3NDQUNaLE1BQWtCO0FBQUE7e
331UNBQWYsR0FBRyxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7a0JBQ2hCO0FBQUEsb0JBQTZDO0FBQUEsb0JBQTdDO0FBQUEsb0JBQTZDLGlCQUF4QixHQUFHLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtnQkFFdEMsb0JBQXVGO0FBQUEsa0JBQW5GO0FBQUEsb0JBQThFO0FBQUE7QUFBQSxzQkFBdkUsT0FBSyxpQ0FBbUIsR0FBRyxNQUFNO0FBQUE7cUNBQU0sbUJBQVksR0FBRyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7Z0JBQ3ZFO0FBQUEsa0JBQThCO0FBQUE7QUFBQSxtQ0FBdkIsR0FBRyxTQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQ2Y7QUFBQSxrQkFBcUQ7QUFBQSxrQkFBckQ7QUFBQSxrQkFBcUQsaUJBQWpDLEdBQUcsVUFBVSxNQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQ3RDLG9CQVNLLE1BVEwsYUFTSztBQUFBLGtCQVJILG9CQU9TO0FBQUEsb0JBTlAsTUFBSztBQUFBLG9CQUNMLE9BQU07QUFBQSxvQkFDTCxVQUFVLHNCQUFlLEdBQUc7QUFBQSxvQkFDNUIsU0FBSywyQkFBTyxjQUFPLEVBQUU7QUFBQSxzQ0FFbkIsc0JBQWUsR0FBRyxLQUFFO0FBQUE7Ozs7Ozs7MkJBT2pDLG9CQUErQyxLQUEvQyxhQUF1QixzQkFBb0I7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiV29ya0l0ZW1zTGlzdFBhZ2UudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5pbXBvcnQgeyBjb21wdXRlZCwgb25Nb3VudGVkLCByZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAndnVlLXJvdXRlcic7XG5pbXBvcnQgeyBhcGksIHR5cGUgV29ya0l0ZW0sIHR5cGUgV29ya0l0ZW1TdGF0dXMgfSBmcm9tICcuLi9hcGknO1xuXG5jb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbmNvbnN0IHdvcmtJdGVtcyA9IHJlZjxXb3JrSXRlbVtdPihbXSk7XG5jb25zdCBlcnJvciA9IHJlZignJyk7XG5jb25zdCBsb2FkaW5nID0gcmVmKGZhbHNlKTtcblxuY29uc3Qgc2VhcmNoID0gcmVmKCcnKTtcbmNvbnN0IHN0YXR1c0ZpbHRlciA9IHJlZjxXb3JrSXRlbVN0YXR1cyB8ICcnPignJyk7XG5cbmNvbnN0IFNUQVRVU19PUFRJT05TOiBXb3JrSXRlbVN0YXR1c1tdID0gW1xuICAndG9kbycsICdpbi1wcm9ncmVzcycsICdibG9ja2VkJywgJ2luLXJldmlldycsICdkb25lJywgJ2NhbmNlbGxlZCcsXG5dO1xuXG5jb25zdCBmaWx0ZXJlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgbGV0IHJlc3VsdCA9IHdvcmtJdGVtcy52YWx1ZTtcbiAgaWYgKHN0YXR1c0ZpbHRlci52YWx1ZSkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKHdpKSA9PiB3aS5zdGF0dXMgPT09IHN0YXR1c0ZpbHRlci52YWx1ZSk7XG4gIH1cbiAgaWYgKHNlYXJjaC52YWx1ZS50cmltKCkpIHtcbiAgICBjb25zdCBxID0gc2VhcmNoLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihcbiAgICAgICh3aSkgPT5cbiAgICAgICAgd2kuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKSB8fFxuICAgICAgICB3aS50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpIHx8XG4gICAgICAgIHdpLmZlYXR1cmVJZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpIHx8XG4gICAgICAgICh3aS5mZWF0dXJlVGl0bGUgPz8gJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocSkgfHxcbiAgICAgICAgKHdpLm93bmVyID8/ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHEpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5jb25zdCBkZWxldGluZ0lkID0gcmVmPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkKCkge1xuICBsb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgZXJyb3IudmFsdWUgPSAnJztcbiAgdHJ5IHtcbiAgICB3b3JrSXRlbXMudmFsdWUgPSBhd2FpdCBhcGkubGlzdFdvcmtJdGVtcygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IudmFsdWUgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIGxvYWQgd29yayBpdGVtcyc7XG4gIH0gZmluYWxseSB7XG4gICAgbG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICB9XG59XG5cbm9uTW91bnRlZChsb2FkKTtcblxuZnVuY3Rpb24gb3Blbih3aTogV29ya0l0ZW0pIHtcbiAgcm91dGVyLnB1c2goYC9jcmVhdGUtd29yay8ke3dpLmlkfWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZW1vdmUod2k6IFdvcmtJdGVtKSB7XG4gIGlmIChcbiAgICAhd2luZG93LmNvbmZpcm0oXG4gICAgICBgRGVsZXRlICR7d2kuaWR9PyBUaGlzIHJlbW92ZXMgdGhlIHdvcmsgaXRlbSBhbmQgaXRzIFN0dWR5LCBJbXBhY3QsIERpc2NvdmVyaWVzLCBwbGFucywgYW5kIGFueSBkZWNpc2lvbnMgb3duZWQgYnkgaXQuIFByb2plY3QgZGVjaXNpb25zIChERUMtKikgc3RheS5gLFxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRlbGV0aW5nSWQudmFsdWUgPSB3aS5pZDtcbiAgZXJyb3IudmFsdWUgPSAnJztcbiAgdHJ5IHtcbiAgICBhd2FpdCBhcGkuZGVsZXRlV29ya0l0ZW0od2kuaWQpO1xuICAgIHdvcmtJdGVtcy52YWx1ZSA9IHdvcmtJdGVtcy52YWx1ZS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IHdpLmlkKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yLnZhbHVlID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogJ0RlbGV0ZSBmYWlsZWQnO1xuICB9IGZpbmFsbHkge1xuICAgIGRlbGV0aW5nSWQudmFsdWUgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXR1c0xhYmVsKHM6IFdvcmtJdGVtU3RhdHVzKTogc3RyaW5nIHtcbiAgcmV0dXJuIHM7XG59XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8c2VjdGlvbj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgPGgyPldvcmsgSXRlbXM8L2gyPlxuICAgICAgPHAgY2xhc3M9XCJtZXRhXCI+XG4gICAgICAgIHt7IGZpbHRlcmVkLmxlbmd0aCB9fSBvZiB7eyB3b3JrSXRlbXMubGVuZ3RoIH19IHdvcmsgaXRlbXMuXG4gICAgICAgIDxyb3V0ZXItbGluayB0bz1cIi9jcmVhdGUtd29ya1wiPkNyZWF0ZSBhIG5ldyBvbmUg4oaSPC9yb3V0
331ZXItbGluaz5cbiAgICAgIDwvcD5cblxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlcnNcIj5cbiAgICAgICAgPGxhYmVsPlxuICAgICAgICAgIFN0YXR1c1xuICAgICAgICAgIDxzZWxlY3Qgdi1tb2RlbD1cInN0YXR1c0ZpbHRlclwiIEBjaGFuZ2U9XCJ2b2lkIDBcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5BbGw8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCJzIGluIFNUQVRVU19PUFRJT05TXCIgOmtleT1cInNcIiA6dmFsdWU9XCJzXCI+e3sgcyB9fTwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJncm93XCI+XG4gICAgICAgICAgU2VhcmNoXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB2LW1vZGVsPVwic2VhcmNoXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSUQsIHRpdGxlLCBmZWF0dXJlLCBvd25lcuKAplwiXG4gICAgICAgICAgICBAa2V5dXAuZW50ZXI9XCJ2b2lkIDBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnlcIiBAY2xpY2s9XCJsb2FkXCI+UmVmcmVzaDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwIHYtaWY9XCJlcnJvclwiIGNsYXNzPVwiZXJyb3JcIj57eyBlcnJvciB9fTwvcD5cbiAgICAgIDxwIHYtaWY9XCJsb2FkaW5nXCI+TG9hZGluZ+KApjwvcD5cblxuICAgICAgPHRhYmxlIHYtZWxzZS1pZj1cImZpbHRlcmVkLmxlbmd0aFwiIGNsYXNzPVwid2ktdGFibGVcIj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5JRDwvdGg+XG4gICAgICAgICAgICA8dGg+VGl0bGU8L3RoPlxuICAgICAgICAgICAgPHRoPkZlYXR1cmU8L3RoPlxuICAgICAgICAgICAgPHRoPlN0YXR1czwvdGg+XG4gICAgICAgICAgICA8dGg+T3duZXI8L3RoPlxuICAgICAgICAgICAgPHRoPlVwZGF0ZWQ8L3RoPlxuICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgdi1mb3I9XCJ3aSBpbiBmaWx0ZXJlZFwiXG4gICAgICAgICAgICA6a2V5PVwid2kuaWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3aS1yb3dcIlxuICAgICAgICAgICAgQGNsaWNrPVwib3Blbih3aSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpLWlkXCI+e3sgd2kuaWQgfX08L3RkPlxuICAgICAgICAgICAgPHRkPnt7IHdpLnRpdGxlIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1vbm9cIj5cbiAgICAgICAgICAgICAgPHJvdXRlci1saW5rXG4gICAgICAgICAgICAgICAgOnRvPVwiYC9mZWF0dXJlcy8ke2VuY29kZVVSSUNvbXBvbmVudCh3aS5mZWF0dXJlSWQpfWBcIlxuICAgICAgICAgICAgICAgIEBjbGljay5zdG9wXG4gICAgICAgICAgICAgID57eyB3aS5mZWF0dXJlSWQgfX08L3JvdXRlci1saW5rPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0YVwiPnt7IHdpLmZlYXR1cmVUaXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD48c3BhbiA6Y2xhc3M9XCJbJ3N0YXR1cy1iYWRnZScsIHdpLnN0YXR1c11cIj57eyBzdGF0dXNMYWJlbCh3aS5zdGF0dXMpIH19PC9zcGFuPjwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3sgd2kub3duZXIgPz8gJ+KAlCcgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwibWV0YVwiPnt7IHdpLnVwZGF0ZWRBdC5zbGljZSgwLCAxMCkgfX08L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRlbGV0aW5nSWQgPT09IHdpLmlkXCJcbiAgICAgICAgICAgICAgICBAY2xpY2suc3RvcD1cInJlbW92ZSh3aSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZGVsZXRpbmdJZCA9PT0gd2kuaWQgPyAnRGVsZXRpbmfigKYnIDogJ0RlbGV0ZScgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuXG4gICAgICA8cCB2LWVsc2UgY2xhc3M9XCJtZXRhXCI+Tm8gd29yayBpdGVtcyBmb3VuZC48L3A+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4uZmlsdGVycyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgZ2FwOiAwLjc1cmVtO1xuICBhbGlnbi1pdGVtczogZW5kO1xuICBtYXJnaW46IDFyZW0gMDtcbn1cbi5maWx0ZXJzIGxhYmVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZm9udC1zaXplOiAwLjc1cmVtO1xuICBjb2xvcjogIzZiNzI4MDtcbiAgZ2FwOiAwLjI1cmVtO1xufVxuLmZpbHRlcnMgbGFiZWwuZ3JvdyB7XG4gIGZsZXg6IDE7XG4gIG1pbi13aWR0aDogMTJyZW07XG59XG4uZmlsdGVycyBzZWxlY3QsXG4uZmlsdGVycyBpbnB1dCB7XG4gIHBhZGRpbmc6IDAuMzc1cmVtIDAuNXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2QxZDVkYjtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBmb250LXNpemU6IDAuODc1cmVtO1xufVxuLndpLXRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG59XG4ud2ktdGFibGUgdGgge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBmb250LXNpemU6IDAuNzVyZW07XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiAjNmI3MjgwO1xuICBwYWRkaW5nOiAwLjVyZW0gMC43NXJlbTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU3ZWI7XG59XG4ud2ktdGFibGUgdGQge1xuICBwYWRkaW5nOiAwLjZyZW0gMC43NXJlbTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmM2Y0ZjY7XG59XG4ud2ktcm93IHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLndpLXJvdzpob3ZlciB0ZCB7XG4gIGJhY2tncm91bmQ6ICNmOWZhZmI7XG59XG4ud2ktaWQge1xuICBmb250LXdlaWdodDogNjAwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLm1vbm8ge1xuICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMC44MTI1cmVtO1
331xufVxuLnN0YXR1cy1iYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZzogMC4xMjVyZW0gMC41cmVtO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi5zdGF0dXMtYmFkZ2UudG9kbyB7IGJhY2tncm91bmQ6ICNmM2Y0ZjY7IGNvbG9yOiAjMzc0MTUxOyB9XG4uc3RhdHVzLWJhZGdlLmluLXByb2dyZXNzIHsgYmFja2dyb3VuZDogI2RiZWFmZTsgY29sb3I6ICMxZTQwYWY7IH1cbi5zdGF0dXMtYmFkZ2UuYmxvY2tlZCB7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjOTkxYjFiOyB9XG4uc3RhdHVzLWJhZGdlLmluLXJldmlldyB7IGJhY2tncm91bmQ6ICNmZWYzYzc7IGNvbG9yOiAjOTI0MDBlOyB9XG4uc3RhdHVzLWJhZGdlLmRvbmUgeyBiYWNrZ3JvdW5kOiAjZDFmYWU1OyBjb2xvcjogIzA2NWY0NjsgfVxuLnN0YXR1cy1iYWRnZS5jYW5jZWxsZWQgeyBiYWNrZ3JvdW5kOiAjZjNmNGY2OyBjb2xvcjogIzljYTNhZjsgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7IH1cbi5hY3Rpb25zIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5idXR0b24uZGFuZ2VyIHtcbiAgYmFja2dyb3VuZDogI2ZlZTJlMjtcbiAgY29sb3I6ICM5OTFiMWI7XG4gIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgcGFkZGluZzogMC4yNXJlbSAwLjZyZW07XG59XG48L3N0eWxlPlxuIl0sImZpbGUiOiIvaG9tZS9yZWRkcmFnb24vYmlnYm9hcmQtMC93b3JrYmVuY2gvY2xpZW50L3NyYy9wYWdlcy9Xb3JrSXRlbXNMaXN0UGFnZS52dWUifQ==
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.