PageSourceSearch

https://e-spoclub.com/src/components/betting/history/MyMember.jsx

js e-spoclub.com collected 2026-10-04 16:18:05 UTC 37,742 bytes, 408 lines download raw bytes

1import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/components/betting/history/MyMember.jsx");import __vite__cjsImport0_react_jsxDevRuntime from "/node_modules/.vite/deps/react_jsx-dev-runtime.js?v=b0f315c6"; const jsxDEV = __vite__cjsImport0_react_jsxDevRuntime["jsxDEV"];
2import * as RefreshRuntime from "/@react-refresh";
3const inWebWorker = typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope;
4let prevRefreshReg;
5let prevRefreshSig;
6if (import.meta.hot && !inWebWorker) {
7  if (!window.$RefreshReg$) {
8    throw new Error(
9      "@vitejs/plugin-react can't detect preamble. Something is wrong."
10    );
11  }
12  prevRefreshReg = window.$RefreshReg$;
13  prevRefreshSig = window.$RefreshSig$;
14  window.$RefreshReg$ = RefreshRuntime.getRefreshReg("/root/pub/BettingApp/src/components/betting/history/MyMember.jsx");
15  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
16}
17var _s = $RefreshSig$();
18import __vite__cjsImport3_react from "/node_modules/.vite/deps/react.js?v=b0f315c6"; const React = __vite__cjsImport3_react.__esModule ? __vite__cjsImport3_react.default : __vite__cjsImport3_react; const useState = __vite__cjsImport3_react["useState"]; const useEffect = __vite__cjsImport3_react["useEffect"];
19import { useTranslation } from "/node_modules/.vite/deps/react-i18next.js?v=b0f315c6";
20import { historyService } from "/src/services/historyService.js";
21function MyMember() {
22  _s();
23  const { t } = useTranslation();
24  const [memberData, setMemberData] = useState([]);
25  const [loading, setLoading] = useState(false);
26  const [error, setError] = useState(null);
27  const [totalCount, setTotalCount] = useState(0);
28  const [currentPage, setCurrentPage] = useState(1);
29  const [totalPages, setTotalPages] = useState(1);
30  const [totalRecords, setTotalRecords] = useState(0);
31  const [copiedId, setCopiedId] = useState(null);
32  const fetchOverallTotal = async () => {
33    try {
34      const response = await historyService.getMemberCount({ page: 1, per: 1e3 });
35      if (response.success !== false) {
36        const allMembers = response.rows || [];
37        const overallTotal = allMembers.reduce((sum, member) => sum + parseInt(member.cnt || 0), 0);
38        setTotalCount(overallTotal);
39      }
40    } catch (err) {
41      console.error("Error fetching overall total:", err);
42      setTotalCount(0);
43    }
44  };
45  const fetchMemberData = async (page = 1) => {
46    setLoading(true);
47    setError(null);
48    try {
49      const response = await historyService.getMemberCount({ page, per: 20 });
50      if (response.success !== false) {
51        const memberRows = response.rows || [];
52        setMemberData(memberRows);
53        setTotalRecords(response.total || 0);
54        setTotalPages(Math.ceil((response.total || 0) / 20));
55        setCurrentPage(page);
56      } else {
57        throw new Error(response.message || "Failed to fetch member data");
58      }
59    } catch (err) {
60      setError(err.message);
61    } finally {
62      setLoading(false);
63    }
64  };
65  useEffect(() => {
66    fetchOverallTotal();
67    fetchMemberData(1);
68  }, []);
69  const handlePageChange = (page) => {
70    fetchMemberData(page);
71  };
72  const getMemberColor = (member) => {
73    if (member.iscms === 1 || member.iscms === "1") return "#9900FF";
74    if (member.isreferal === 1 || member.isreferal === "1") {
75      if (member.iscms === 0 || member.iscms === "0") return "#00FF00";
76    }
77    if (member.isreferal === 0 || member.isreferal === "0") return "#0066FF";
78    return "#ffffff";
79  };
80  const getFqmStatus = (member) => {
81    if (member.iscms === 1 || member.iscms === "1") return "PURPLE";
82    if (member.isreferal === 1 || member.isreferal === "1") {
83      if (member.iscms === 0 || member.iscms === "0") return "GREEN";
84    }
85    if (member.isreferal === 0 || member.isreferal === "0") return "BLUE";
86    return "UNKNOWN";
87  };
88  const handleCopyId = async (id) => {
89    try {
90      await navigator.clipboard.writeText(id);
91      setCopiedId(id);
92      setTimeout(() => {
93        setCopiedId(null);
94      }, 2e3);
95    } catch (err) {
96      console.error("Failed to copy ID:", err);
97    }
98  };
99  if (loading) {
100    return /* @__PURE__ */ jsxDEV("div", { className: "history-container", children: [
101      /* @__PURE__ */ jsxDEV("div", { className: "history-header", children: /* @__PURE__ */ jsxDEV("h2", { children: t("ddmr.myMember.title", "My Members") }, void 0, false, {
102        fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
103        lineNumber: 125,
104        columnNumber: 11
105      }, this) }, void 0, false, {
106        fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
107        lineNumber: 124,
108        columnNumber: 9
109      }, this),
110      /* @__PURE__ */ jsxDEV("div", { className: "loading-container", children: [
111        /* @__PURE__ */ jsxDEV("div", { className: "loading-spinner" }, void 0, false, {
112          fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
113          lineNumber: 128,
114          columnNumber: 11
115        }, this),
116        /* @__PURE__ */ jsxDEV("p", { children: t("common.loading", "Loading...") }, void 0, false, {
117          fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
118          lineNumber: 129,
119          columnNumber: 11
120        }, this)
121      ] }, void 0, true, {
122        fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
123        lineNumber: 127,
124        columnNumber: 9
125      }, this)
126    ] }, void 0, true, {
127      fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
128      lineNumber: 123,
129      columnNumber: 7
130    }, this);
131  }
132  if (error) {
133    return /* @__PURE__ */ jsxDEV("div", { className: "history-container", children: [
134      /* @__PURE__ */ jsxDEV("div", { className: "history-header", children: /* @__PURE__ */ jsxDEV("h2", { children: t("ddmr.myMember.title", "My Members") }, void 0, false, {
135        fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
136        lineNumber: 139,
137        columnNumber: 11
138      }, this) }, void 0, false, {
139        fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
140        lineNumber: 138,
141        columnNumber: 9
142      }, this),
143      /* @__PURE__ */ jsxDEV("div", { className: "error-container", children: [
144        /* @__PURE__ */ jsxDEV("p", { className: "error-message", children: error }, void 0, false, {
145          fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
146          lineNumber: 142,
147          columnNumber: 11
148        }, this),
149        /* @__PURE__ */ jsxDEV("button", { onClick: fetchMemberData, className: "retry-button", children: t("common.retry", "Retry") }, void 0, false, {
150          fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
151          lineNumber: 143,
152          columnNumber: 11
153        }, this)
154      ] }, void 0, true, {
155        fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
156        lineNumber: 141,
157        columnNumber: 9
158      }, this)
159    ] }, void 0, true, {
160      fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
161      lineNumber: 137,
162      columnNumber: 7
163    }, this);
164  }
165  return /* @__PURE__ */ jsxDEV("div", { className: "history-container", children: [
166    /* @__PURE__ */ jsxDEV("div", { className: "history-header", children: /* @__PURE__ */ jsxDEV("h2", { children: t("ddmr.myMember.title", "My Member") }, void 0, false, {
167      fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
168      lineNumber: 154,
169      columnNumber: 9
170    }, this) }, void 0, false, {
171      fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
172      lineNumber: 153,
173      columnNumber: 7
174    }, this),
175    /* @__PURE__ */ jsxDEV("div", { className: "table-container", children: [
176      /* @__PURE__ */ jsxDEV("table", { className: "history-table", children: [
177        /* @__PURE__ */ jsxDEV("thead", { children: /* @__PURE__ */ jsxDEV("tr", { children: [
178          /* @__PURE__ */ jsxDEV("th", { children: t("ddmr.myMember.table.id", "ID") }, void 0, false, {
179            fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
180            lineNumber: 162,
181            columnNumber: 15
182          }, this),
183          /* @__PURE__ */ jsxDEV("th", { children: t("ddmr.myMember.table.fqmStatus", "FQM Status") }, void 0, false, {
184            fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
185            lineNumber: 163,
186            columnNumber: 15
187          }, this),
188          /* @__PURE__ */ jsxDEV("th", { children: t("ddmr.myMember.table.userCount", "Sub-Members") }, void 0, false, {
189            fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
190            lineNumber: 164,
191            columnNumber: 15
192          }, this)
193        ] }, void 0, true, {
194          fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
195          lineNumber: 161,
196          columnNumber: 13
197        }, this) }, void 0, false, {
198          fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
199          lineNumber: 160,
200          columnNumber: 11
201        }, this),
202        /* @__PURE__ */ jsxDEV("tbody", { children: [
203          memberData.map(
204            (member, index) => /* @__PURE__ */ jsxDEV("tr", { children: [
205              /* @__PURE__ */ jsxDEV("td", { children: /* @__PURE__ */ jsxDEV(
206                "span",
207                {
208                  style: {
209                    color: getMemberColor(member),
210                    fontWeight: "bold",
211                    cursor: "pointer",
212                    display: "inline-flex",
213                    alignItems: "center",
214                    gap: "8px"
215                  },
216                  onClick: () => handleCopyId(member.uid || member.id || ""),
217                  title: "Click to copy ID",
218                  children: [
219                    member.uid || member.id || "-",
220                    copiedId === (member.uid || member.id) ? /* @__PURE__ */ jsxDEV("i", { className: "fas fa-check", style: { color: "#00FF00", fontSize: "12px" } }, void 0, false, {
221                      fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
222                      lineNumber: 185,
223                      columnNumber: 19
224                    }, this) : /* @__PURE__ */ jsxDEV("i", { className: "fas fa-copy", style: { fontSize: "12px", opacity: 0.7 } }, void 0, false, {
225                      fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
226                      lineNumber: 187,
227                      columnNumber: 19
228                    }, this)
229                  ]
230                },
231                void 0,
232                true,
233                {
234                  fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
235                  lineNumber: 171,
236                  columnNumber: 19
237                },
238                this
239              ) }, void 0, false, {
240                fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
241                lineNumber: 170,
242                columnNumber: 17
243              }, this),
244              /* @__PURE__ */ jsxDEV("td", { children: /* @__PURE__ */ jsxDEV(
245                "span",
246                {
247                  style: {
248                    color: getMemberColor(member),
249                    fontWeight: "bold"
250                  },
251                  children: getFqmStatus(member)
252                },
253                void 0,
254                false,
255                {
256                  fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
257                  lineNumber: 192,
258                  columnNumber: 19
259                },
260                this
261              ) }, void 0, false, {
262                fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
263                lineNumber: 191,
264                columnNumber: 17
265              }, this),
266              /* @__PURE__ */ jsxDEV("td", { children: member.cnt || 0 }, void 0, false, {
267                fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
268                lineNumber: 201,
269                columnNumber: 17
270              }, this)
271            ] }, index, true, {
272              fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
273              lineNumber: 169,
274              columnNumber: 13
275            }, this)
276          ),
277          /* @__PURE__ */ jsxDEV("tr", { className: "total-row", children: [
278            /* @__PURE__ */ jsxDEV("td", { children: /* @__PURE__ */ jsxDEV("strong", { children: t("ddmr.myMember.table.total", "TOTAL") }, void 0, false, {
279              fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
280              lineNumber: 207,
281              columnNumber: 17
282            }, this) }, void 0, false, {
283              fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
284              lineNumber: 206,
285              columnNumber: 15
286            }, this),
287            /* @__PURE__ */ jsxDEV("td", {}, void 0, false, {
288              fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
289              lineNumber: 209,
290              columnNumber: 15
291            }, this),
292            /* @__PURE__ */ jsxDEV("td", { children: /* @__PURE__ */ jsxDEV("strong", { children: totalCount }, void 0, false, {
293              fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
294              lineNumber: 211,
295              columnNumber: 17
296            }, this) }, void 0, false, {
297              fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
298              lineNumber: 210,
299              columnNumber: 15
300            }, this)
301          ] }, void 0, true, {
302            fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
303            lineNumber: 205,
304            columnNumber: 13
305          }, this)
306        ] }, void 0, true, {
307          fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
308          lineNumber: 167,
309          columnNumber: 11
310        }, this)
311      ] }, void 0, true, {
312        fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
313        lineNumber: 159,
314        columnNumber: 9
315      }, this),
316      totalPages > 1 && /* @__PURE__ */ jsxDEV("div", { className: "history-pagination", children: [
317        /* @__PURE__ */ jsxDEV(
318          "button",
319          {
320            onClick: () => handlePageChange(currentPage - 1),
321            disabled: currentPage === 1,
322            className: "pagination-button",
323            children: [
324              /* @__PURE__ */ jsxDEV("i", { className: "fas fa-chevron-left" }, void 0, false, {
325                fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
326                lineNumber: 225,
327                columnNumber: 15
328              }, this),
329              t("ddmr.myMember.previous", "Previous")
330            ]
331          },
332          void 0,
333          true,
334          {
335            fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
336            lineNumber: 220,
337            columnNumber: 13
338          },
339          this
340        ),
341        /* @__PURE__ */ jsxDEV("div", { className: "pagination-info", children: t("ddmr.myMember.pageInfo", "Page {{current}} of {{total}}", { current: currentPage, total: totalPages }) }, void 0, false, {
342          fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
343          lineNumber: 229,
344          columnNumber: 13
345        }, this),
346        /* @__PURE__ */ jsxDEV(
347          "button",
348          {
349            onClick: () => handlePageChange(currentPage + 1),
350            disabled: currentPage === totalPages,
351            className: "pagination-button",
352            children: [
353              t("ddmr.myMember.next", "Next"),
354              /* @__PURE__ */ jsxDEV("i", { className: "fas fa-chevron-right" }, void 0, false, {
355                fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
356                lineNumber: 239,
357                columnNumber: 15
358              }, this)
359            ]
360          },
361          void 0,
362          true,
363          {
364            fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
365            lineNumber: 233,
366            columnNumber: 13
367          },
368          this
369        )
370      ] }, void 0, true, {
371        fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
372        lineNumber: 219,
373        columnNumber: 9
374      }, this)
375    ] }, void 0, true, {
376      fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
377      lineNumber: 158,
378      columnNumber: 7
379    }, this)
380  ] }, void 0, true, {
381    fileName: "/root/pub/BettingApp/src/components/betting/history/MyMember.jsx",
382    lineNumber: 152,
383    columnNumber: 5
384  }, this);
385}
386_s(MyMember, "wqEzVN4cKlfvTrAgqpn+YTgraHM=", false, function() {
387  return [useTranslation];
388});
389_c = MyMember;
390export default MyMember;
391var _c;
392$RefreshReg$(_c, "MyMember");
393if (import.meta.hot && !inWebWorker) {
394  window.$RefreshReg$ = prevRefreshReg;
395  window.$RefreshSig$ = prevRefreshSig;
396}
397if (import.meta.hot && !inWebWorker) {
398  RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
399    RefreshRuntime.registerExportsForReactRefresh("/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", currentExports);
400    import.meta.hot.accept((nextExports) => {
401      if (!nextExports) return;
402      const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate("/root/pub/BettingApp/src/components/betting/history/MyMember.jsx", currentExports, nextExports);
403      if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
404    });
405  });
406}
407
408//# sourceMappingURL=data:application/json;base64,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BQUFBO0FBQUEsV0FxRkE7QUFBQSxPQTNGRjtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBNEZBO0FBRUo7QUFBQ0QsR0E5TlFELFVBQVE7QUFBQSxVQUNERixjQUFjO0FBQUE7QUFBQW1FLEtBRHJCakU7QUFnT1QsZUFBZUE7QUFBUSxJQUFBaUU7QUFBQUMsYUFBQUQsSUFBQSIsIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJ1c2VUcmFuc2xhdGlvbiIsImhpc3RvcnlTZXJ2aWNlIiwiTXlNZW1iZXIiLCJfcyIsInQiLCJtZW1iZXJEYXRhIiwic2V0TWVtYmVyRGF0YSIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsInRvdGFsQ291bnQiLCJzZXRUb3RhbENvdW50IiwiY3VycmVudFBhZ2UiLCJzZXRDdXJyZW50UGFnZSIsInRvdGFsUGFnZXMiLCJzZXRUb3RhbFBhZ2VzIiwidG90YWxSZWNvcmRzIiwic2V0VG90YWxSZWNvcmRzIiwiY29waWVkSWQiLCJzZXRDb3BpZWRJZCIsImZldGNoT3ZlcmFsbFRvdGFsIiwicmVzcG9uc2UiLCJnZXRNZW1iZXJDb3VudCIsInBhZ2UiLCJwZXIiLCJzdWNjZXNzIiwiYWxsTWVtYmVycyIsInJvd3MiLCJvdmVyYWxsVG90YWwiLCJyZWR1Y2UiLCJzdW0iLCJtZW1iZXIiLCJwYXJzZUludCIsImNudCIsImVyciIsImNvbnNvbGUiLCJmZXRjaE1lbWJlckRhdGEiLCJtZW1iZXJSb3dzIiwidG90YWwiLCJNYXRoIiwiY2VpbCIsIkVycm9yIiwibWVzc2FnZSIsImhhbmRsZVBhZ2VDaGFuZ2UiLCJnZXRNZW1iZXJDb2xvciIsImlzY21zIiwiaXNyZWZlcmFsIiwiZ2V0RnFtU3RhdHVzIiwiaGFuZGxlQ29weUlkIiwiaWQiLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJzZXRUaW1lb3V0IiwibWFwIiwiaW5kZXgiLCJjb2xvciIsImZvbnRXZWlnaHQiLCJjdXJzb3IiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImdhcCIsInVpZCIsImZvbnRTaXplIiwib3BhY2l0eSIsImN1cnJlbnQiLCJfYyIsIiRSZWZyZXNoUmVnJCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJNeU1lbWJlci5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IGhpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaGlzdG9yeVNlcnZpY2UnXG5cbmZ1bmN0aW9uIE15TWVtYmVyKCkge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgW21lbWJlckRhdGEsIHNldE1lbWJlckRhdGFdID0gdXNlU3RhdGUoW10pXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlKG51bGwpXG4gIGNvbnN0IFt0b3RhbENvdW50LCBzZXRUb3RhbENvdW50XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtjdXJyZW50UGFnZSwgc2V0Q3VycmVudFBhZ2VdID0gdXNlU3RhdGUoMSlcbiAgY29uc3QgW3RvdGFsUGFnZXMsIHNldFRvdGFsUGFnZXNdID0gdXNlU3RhdGUoMSlcbiAgY29uc3QgW3RvdGFsUmVjb3Jkcywgc2V0VG90YWxSZWNvcmRzXSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtjb3BpZWRJZCwgc2V0Q29waWVkSWRdID0gdXNlU3RhdGUobnVsbClcblxuICAvLyBGZXRjaCBvdmVyYWxsIHRvdGFsIGNvdW50IGFjcm9zcyBhbGwgcGFnZXNcbiAgY29uc3QgZmV0Y2hPdmVyYWxsVG90YWwgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZldGNoIGFsbCBkYXRhIHRvIGNhbGN1bGF0ZSBvdmVyYWxsIHRvdGFsXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGhpc3RvcnlTZXJ2aWNlLmdldE1lbWJlckNvdW50KHsgcGFnZTogMSwgcGVyOiAxMDAwIH0pIC8vIExhcmdlIHBlciB2YWx1ZSB0byBnZXQgYWxsIGRhdGFcbiAgICAgIFxuICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFsbE1lbWJlcnMgPSByZXNwb25zZS5yb3dzIHx8IFtdXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBjb3VudCBhY3Jvc3MgYWxsIHBhZ2VzXG4gICAgICAgIGNvbnN0IG92ZXJhbGxUb3RhbCA9IGFsbE1lbWJlcnMucmVkdWNlKChzdW0sIG1lbWJlcikgPT4gc3VtICsgcGFyc2VJbnQobWVtYmVyLmNudCB8fCAwKSwgMClcbiAgICAgICAgc2V0VG90YWxDb3VudChvdmVyYWxsVG90YWwpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBvdmVyYWxsIHRvdGFsOicsIGVycilcbiAgICAgIC8vIElmIGVycm9yLCBzZXQgdG90YWwgdG8gMFxuICAgICAgc2V0VG90YWxDb3VudCgwKVxuICAgIH1cbiAgfVxuXG4gIC8vIEZldGNoIG1lbWJlciBkYXRhIGZyb20gQVBJXG4gIGNvbnN0IGZldGNoTWVtYmVyRGF0YSA9IGFzeW5jIChwYWdlID0gMSkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICBzZXRFcnJvcihudWxsKVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGhpc3RvcnlTZXJ2aWNlLmdldE1lbWJlckNvdW50KHsgcGFnZSwgcGVyOiAyMCB9KVxuICAgICAgXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbWVtYmVyUm93cyA9IHJlc3BvbnNlLnJvd3MgfHwgW11cbiAgICAgICAgc2V0TWVtYmVyRGF0YShtZW1iZXJSb3dzKVxuICAgICAgICBzZXRUb3RhbFJlY29yZHMocmVzcG9uc2UudG90YWwgfHwgMClcbiAgICAgICAgc2V0VG90YWxQYWdlcyhNYXRoLmNlaWwoKHJlc3BvbnNlLnRvdGFsIHx8IDApIC8gMjApKVxuICAgICAgICBzZXRDdXJyZW50UGFnZShwYWdlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBmZXRjaCBtZW1iZXIgZGF0YScpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gI
408H1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIEZldGNoIG92ZXJhbGwgdG90YWwgYW5kIGZpcnN0IHBhZ2UgZGF0YVxuICAgIGZldGNoT3ZlcmFsbFRvdGFsKClcbiAgICBmZXRjaE1lbWJlckRhdGEoMSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlUGFnZUNoYW5nZSA9IChwYWdlKSA9PiB7XG4gICAgZmV0Y2hNZW1iZXJEYXRhKHBhZ2UpXG4gIH1cblxuICAvLyBHZXQgY29sb3IgYmFzZWQgb24gbWVtYmVyIHN0YXR1c1xuICBjb25zdCBnZXRNZW1iZXJDb2xvciA9IChtZW1iZXIpID0+IHtcbiAgICBpZiAobWVtYmVyLmlzY21zID09PSAxIHx8IG1lbWJlci5pc2NtcyA9PT0gJzEnKSByZXR1cm4gJyM5OTAwRkYnIC8vIFB1cnBsZSBmb3IgQ01TXG4gICAgaWYgKG1lbWJlci5pc3JlZmVyYWwgPT09IDEgfHwgbWVtYmVyLmlzcmVmZXJhbCA9PT0gJzEnKSB7XG4gICAgICBpZiAobWVtYmVyLmlzY21zID09PSAwIHx8IG1lbWJlci5pc2NtcyA9PT0gJzAnKSByZXR1cm4gJyMwMEZGMDAnIC8vIEdyZWVuIGZvciByZWZlcnJhbFxuICAgIH1cbiAgICBpZiAobWVtYmVyLmlzcmVmZXJhbCA9PT0gMCB8fCBtZW1iZXIuaXNyZWZlcmFsID09PSAnMCcpIHJldHVybiAnIzAwNjZGRicgLy8gQmx1ZSBmb3Igbm9uLXJlZmVycmFsXG4gICAgcmV0dXJuICcjZmZmZmZmJyAvLyBEZWZhdWx0IHdoaXRlXG4gIH1cblxuICAvLyBHZXQgRlFNIHN0YXR1cyB0ZXh0XG4gIGNvbnN0IGdldEZxbVN0YXR1cyA9IChtZW1iZXIpID0+IHtcbiAgICBpZiAobWVtYmVyLmlzY21zID09PSAxIHx8IG1lbWJlci5pc2NtcyA9PT0gJzEnKSByZXR1cm4gJ1BVUlBMRSdcbiAgICBpZiAobWVtYmVyLmlzcmVmZXJhbCA9PT0gMSB8fCBtZW1iZXIuaXNyZWZlcmFsID09PSAnMScpIHtcbiAgICAgIGlmIChtZW1iZXIuaXNjbXMgPT09IDAgfHwgbWVtYmVyLmlzY21zID09PSAnMCcpIHJldHVybiAnR1JFRU4nXG4gICAgfVxuICAgIGlmIChtZW1iZXIuaXNyZWZlcmFsID09PSAwIHx8IG1lbWJlci5pc3JlZmVyYWwgPT09ICcwJykgcmV0dXJuICdCTFVFJ1xuICAgIHJldHVybiAnVU5LTk9XTidcbiAgfVxuXG4gIC8vIENvcHkgSUQgdG8gY2xpcGJvYXJkXG4gIGNvbnN0IGhhbmRsZUNvcHlJZCA9IGFzeW5jIChpZCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChpZClcbiAgICAgIHNldENvcGllZElkKGlkKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldENvcGllZElkKG51bGwpXG4gICAgICB9LCAyMDAwKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvcHkgSUQ6JywgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGlmIChsb2FkaW5nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlzdG9yeS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaXN0b3J5LWhlYWRlclwiPlxuICAgICAgICAgIDxoMj57dCgnZGRtci5teU1lbWJlci50aXRsZScsICdNeSBNZW1iZXJzJyl9PC9oMj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibG9hZGluZy1jb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PlxuICAgICAgICAgIDxwPnt0KCdjb21tb24ubG9hZGluZycsICdMb2FkaW5nLi4uJyl9PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIGlmIChlcnJvcikge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpc3RvcnktY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlzdG9yeS1oZWFkZXJcIj5cbiAgICAgICAgICA8aDI+e3QoJ2RkbXIubXlNZW1iZXIudGl0bGUnLCAnTXkgTWVtYmVycycpfTwvaDI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImVycm9yLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImVycm9yLW1lc3NhZ2VcIj57ZXJyb3J9PC9wPlxuICAgICAgICAgIDxidXR0b24gb25DbGljaz17ZmV0Y2hNZW1iZXJEYXRhfSBjbGFzc05hbWU9XCJyZXRyeS1idXR0b25cIj5cbiAgICAgICAgICAgIHt0KCdjb21tb24ucmV0cnknLCAnUmV0cnknKX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlzdG9yeS1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlzdG9yeS1oZWFkZXJcIj5cbiAgICAgICAgPGgyPnt0KCdkZG1yLm15TWVtYmVyLnRpdGxlJywgJ015IE1lbWJlcicpfTwvaDI+XG4gICAgICA8L2Rpdj5cblxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwiaGlzdG9yeS10YWJsZVwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoPnt0KCdkZG1yLm15TWVtYmVyLnRhYmxlLmlkJywgJ0lEJyl9PC90aD5cbiAgICAgICAgICAgICAgPHRoPnt0KCdkZG1yLm15TWVtYmVyLnRhYmxlLmZxbVN0YXR1cycsICdGUU0gU3RhdHVzJyl9PC90aD5cbiAgICAgICAgICAgICAgPHRoPnt0KCdkZG1yLm15TWVtYmVyLnRhYmxlLnVzZXJDb3VudCcsICdTdWItTWVtYmVycycpfTwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAge21lbWJlckRhdGEubWFwKChtZW1iZXIsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDx0ciBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGdldE1lbWJlckNvbG9yKG1lbWJlciksXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnOHB4J1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDb3B5SWQobWVtYmVyLnVpZCB8fCBtZW1iZXIuaWQgfHwgJycpfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsaWNrIHRvIGNvcHkgSURcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7bWVtYmVyLnVpZCB8fCBtZW1iZXIuaWQgfHwgJy0nfVxuICAgICAgICAgICAgICAgICAgICB7Y29waWVkSWQgPT09IChtZW1iZXIudWlkIHx8IG1lbWJlci5pZCkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmFzIGZhLWNoZWNrXCIgc3R5bGU9e3sgY29sb3I6ICcjMDBGRjAwJywgZm9udFNpemU6ICcxMnB4JyB9fT48L2k+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmFzIGZhLWNvcHlcIiBzdHlsZT17eyBmb250U2l6ZTogJzEycHgnLCBvcGFjaXR5OiAwLjcgfX0+PC9pPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gXG4gICAgICAgICAgICAgICAgICAgI
408HN0eWxlPXt7IFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBnZXRNZW1iZXJDb2xvcihtZW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICdib2xkJ1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7Z2V0RnFtU3RhdHVzKG1lbWJlcil9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+e21lbWJlci5jbnQgfHwgMH08L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7LyogVG90YWwgcm93ICovfVxuICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cInRvdGFsLXJvd1wiPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57dCgnZGRtci5teU1lbWJlci50YWJsZS50b3RhbCcsICdUT1RBTCcpfTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3RvdGFsQ291bnR9PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG5cbiAgICAgICAgey8qIFBhZ2luYXRpb24gKi99XG4gICAgICAgIHt0b3RhbFBhZ2VzID4gMSAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaXN0b3J5LXBhZ2luYXRpb25cIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShjdXJyZW50UGFnZSAtIDEpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVudFBhZ2UgPT09IDF9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInBhZ2luYXRpb24tYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmFzIGZhLWNoZXZyb24tbGVmdFwiPjwvaT5cbiAgICAgICAgICAgICAge3QoJ2RkbXIubXlNZW1iZXIucHJldmlvdXMnLCAnUHJldmlvdXMnKX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2luYXRpb24taW5mb1wiPlxuICAgICAgICAgICAgICB7dCgnZGRtci5teU1lbWJlci5wYWdlSW5mbycsICdQYWdlIHt7Y3VycmVudH19IG9mIHt7dG90YWx9fScsIHsgY3VycmVudDogY3VycmVudFBhZ2UsIHRvdGFsOiB0b3RhbFBhZ2VzIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGFnZUNoYW5nZShjdXJyZW50UGFnZSArIDEpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17Y3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZXN9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInBhZ2luYXRpb24tYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2RkbXIubXlNZW1iZXIubmV4dCcsICdOZXh0Jyl9XG4gICAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cImZhcyBmYS1jaGV2cm9uLXJpZ2h0XCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNeU1lbWJlclxuIl0sImZpbGUiOiIvcm9vdC9wdWIvQmV0dGluZ0FwcC9zcmMvY29tcG9uZW50cy9iZXR0aW5nL2hpc3RvcnkvTXlNZW1iZXIuanN4In0=

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.