@fxhash/open-form-graph 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2099 +1,4 @@
1
- // src/components/OpenFormGraph.tsx
2
- import ForceGraph2D from "react-force-graph-2d";
3
- import { useEffect as useEffect2, useRef as useRef2 } from "react";
4
- import { forceCollide } from "d3-force";
1
+ import { DEFAULT_GRAPH_CONFIG, OpenFormGraphProvider, VOID_DETACH_ID, VOID_ROOT_ID, useOpenFormGraph } from "./provider-PqOen2FE.js";
2
+ import { Highlight, OpenFormGraph, OpenGraphEventEmitter, OpenGraphSimulation, TransformCanvas, buildTreeFromGraphData, circle, color, dim, generateTree, getAllParentsUntil, getChildren, getClusterSize, getNodeDepth, getNodeId, getNodeSubgraph, getParents, getPrunedData, getRootParent, hasOnlyLeafs, hexagon, img, isCustomHighlight, isSimLink, isSimNode, loadHTMLImageElement, rect, red, searchParents } from "./OpenFormGraph-i8VSTamk.js";
5
3
 
6
- // src/context/graph.tsx
7
- import {
8
- createContext,
9
- useContext,
10
- useCallback,
11
- useMemo,
12
- useState,
13
- useRef,
14
- useEffect
15
- } from "react";
16
- import { scaleLinear } from "d3-scale";
17
-
18
- // src/util/img.ts
19
- var imageCache = /* @__PURE__ */ new Map();
20
- function preloadImage(url, ref) {
21
- if (imageCache.has(url)) return imageCache.get(url);
22
- const img2 = new Image();
23
- img2.src = url;
24
- imageCache.set(url, img2);
25
- img2.onload = () => {
26
- ref?.current?.zoomToFit(1);
27
- };
28
- return img2;
29
- }
30
-
31
- // src/context/constants.ts
32
- var VOID_ROOT_ID = "void-root";
33
- var DEFAULT_GRAPH_CONFIG = {
34
- debug: false,
35
- nodeSize: 15,
36
- minClusterSize: 5,
37
- maxClusterSize: 15,
38
- minZoom: 0.1,
39
- maxZoom: 10,
40
- focusPadding: 200,
41
- minDagLevelDistance: 80,
42
- maxDagLevelDistance: 400,
43
- theme: {
44
- light: [255, 255, 255],
45
- dark: [0, 0, 0]
46
- }
47
- };
48
-
49
- // src/util/math.ts
50
- function normalize(val, min, max, minOut, maxOut) {
51
- if (max === min) return (minOut + maxOut) / 2;
52
- return minOut + (val - min) / (max - min) * (maxOut - minOut);
53
- }
54
-
55
- // src/util/data.ts
56
- var images = [
57
- "https://media.fxhash.xyz/w_512/QmPN6Pg34LiaSu1hE2THHY3ikiTWUvq2DWBazAZyHvGtEG",
58
- "https://media.fxhash.xyz/w_512/QmXo9BoTCeJ7CUQArQLmM8V7oQuX1ctTkH8gRkEWWDRieT",
59
- "https://media.fxhash.xyz/w_512/QmaYkf8juoEiVouWi247dW42uQmdecPx6DMcVJKEZ3Axje",
60
- "https://media.fxhash.xyz/w_512/QmYrJaPcHEZTuDg1WFyRk4TXGSXHJRt3z4PkP9wwUeDRDY",
61
- "https://media.fxhash.xyz/w_512/QmcShyUsUbgbCE3W5vVFK72ZkmxVfRqoiCehNuVUYYRqLw",
62
- "https://media.fxhash.xyz/w_512/QmZxqurFjBQ5qD9ctL3j5nipBecezjV8Y6ZvKdpKanRu7U",
63
- "https://media.fxhash.xyz/w_512/QmcgvgY42xTWAHHV6wA3j2FdiBavYMAKBjwg7czkWRjDtb",
64
- "https://media.fxhash.xyz/w_512/QmZmQzt4e48iucRTFCCQQF8HdTbyJK712rNfoL5XFqfrkG",
65
- "https://media.fxhash.xyz/w_512/Qmdpse54tNdwBEpwUjyBEgnYnH9gTj64hTu3Q8eyB27Huz",
66
- "https://media.fxhash.xyz/w_512/Qma24DrZmu5Zwe7zty64v6LtzzCZGDPHPJJuQ9aZxUrBX6",
67
- "https://media.fxhash.xyz/w_512/QmUN9rPgp5rnzwg1D2L2azV1hERT9PVjCmob3D4XiLe5ER",
68
- "https://media.fxhash.xyz/w_512/QmW6HWC2iCecyFsDtDmWxD8J9NTUrZ1VpjZqffuQKP8pV9",
69
- "https://media.fxhash.xyz/w_512/QmW4u7sxJcJFkhAvoenoLVyibnSUyXWzTDMKeXMwvRGCcL",
70
- "https://media.fxhash.xyz/w_512/QmRYzwzqs2v63sjRjAaYFoLrrxUVvEL2VwyonV5RzZjegx",
71
- "https://media.fxhash.xyz/w_512/QmfMvJBHgavXvBRR6DSy1qsKzQwEG65eGhdKDKBismJ1GS",
72
- "https://media.fxhash.xyz/w_512/QmfVXPeCwgpQ1vfJNs2my7bu2DVXBPKcSWRiD2p1vHwLvW",
73
- "https://media.fxhash.xyz/w_512/QmXfsDbovYwXTax8GFvDq5ohPQvcdxGuN41wxTRcevVuow",
74
- "https://media.fxhash.xyz/w_512/QmVnDHXoja5G5e9DasUxC9c3oXdEKRD1gmMba6QyEST24c",
75
- "https://media.fxhash.xyz/w_512/QmVsUH2fQYA6q2DWvXCqahbsC99w6E4TtN8Lw91dPEWrGa",
76
- "https://media.fxhash.xyz/w_512/QmRKCgLFdmLhSAAxpRDrB2AwrW3ZG25dYri2S8eFscPmCY",
77
- "https://media.fxhash.xyz/w_512/QmeT4yqfcbhQUfpcmBhwHLHZk2ECxgRFCZ6kQ1GEwe2bPg",
78
- "https://media.fxhash.xyz/w_512/QmW9pegNpLnoxiq91q8GTotJBWNePskNEHuVmA2G2R9JKH",
79
- "https://media.fxhash.xyz/w_512/Qme3Qz3Nm6AZepchdUs3UHhMJGDbHbJNtyPjFZRCGcC4cs",
80
- "https://media.fxhash.xyz/w_512/QmSnS8k7RF5wuVjS3Sd2r1qTrmChxMoG2MkrFqVscM1Fte",
81
- "https://media.fxhash.xyz/w_512/QmbhsWZXyggTdtm1peCgQqmXpHFaZnLsKUN7Jm5Y38gFoE",
82
- "https://media.fxhash.xyz/w_512/QmeRyBgDRYmm2kiCvaNyXQPS7qK4F7R88Up2qxDfZPnv5e",
83
- "https://media.fxhash.xyz/w_512/QmTx66oAkhr21d62rjRkW54fd2Ji7KWEtWGCexkumhL6z9",
84
- "https://media.fxhash.xyz/w_512/QmegcXgaVqcxwoRbwQCRtHv27u545FF2MgSZpipmvVsZpz",
85
- "https://media.fxhash.xyz/w_512/QmZACJkbNJcbahWEAGzS5PeKDnk17aEduVYS4Bh61ELsDa",
86
- "https://media.fxhash.xyz/w_512/QmcN5KAuxaC8kYts1jdvstTJy9UvSLc2D5kMp2FTLoVrxa",
87
- "https://media.fxhash.xyz/w_512/QmZpvV4SwdZ9cCEWSJpPoBSfc1sG6gJoFEfQaaiaCkKa2V",
88
- "https://media.fxhash.xyz/w_512/QmPPfkaK9uZLyZWES8zhaXq4CM8WFURdL29DpBrzGBdFzY",
89
- "https://media.fxhash.xyz/w_512/QmWr59pviF2FWKiR5fZk7F4tfJc27tvjKbPabGLZxUehgN",
90
- "https://media.fxhash.xyz/w_512/Qmbz9uv8Z8D94qv9pgfbib5RoMLKGQzpRFSCH85kfkoP5a",
91
- "https://media.fxhash.xyz/w_512/QmRuqARwjsJ9MSQCqPV9s461GfhA69L5N7RG4p2ZjtX7x7",
92
- "https://media.fxhash.xyz/w_512/QmbTZaLurhXgrWNZxPYSMoUVughKc5AfiwpievAHqitxW4",
93
- "https://media.fxhash.xyz/w_512/QmPa13ZqkCvJ16iov19fyZGEtPi54md5VBfVRec8F3b5Lx",
94
- "https://media.fxhash.xyz/w_512/Qmck4Hd4xvc9sjRCVdf4PodriWzprAdngP987MoZzvbadG",
95
- "https://media.fxhash.xyz/w_512/QmVsETUQMjXQZQMFuBbBB3AF8BCJ6JneQBWLR2Axxq9BN4",
96
- "https://media.fxhash.xyz/w_512/QmRMCXRfWr5W7kLBjsYqDpjjMbbTaAgqQJfJf35eaPvdv7",
97
- "https://media.fxhash.xyz/w_512/QmZkUdEdNAewvJsDE7smGT1iEs7aTqRSUMqpFmDrrAMrwC",
98
- "https://media.fxhash.xyz/w_512/QmTYVZ8LaaCMHZjsmzghBLQkJvi3UfPLjapsnGYB9TNMBL",
99
- "https://media.fxhash.xyz/w_512/QmZh3faSwjc2ttiJ24XgwEjW2ahAGyS2AttRcgEGqmN6SF",
100
- "https://media.fxhash.xyz/w_512/QmYMCGxm1UayedJynHZGwXvGmSTQLNtVrfTyshWSwBDK6J",
101
- "https://media.fxhash.xyz/w_512/QmQARQfJHUU9P2N5bAfZh9R5zGq32TTXFjS3e5bG4k1TPD",
102
- "https://media.fxhash.xyz/w_512/QmSNZL4Xz4kQEsiBD5cFXv75TJW3biVoLT9irALkwtdMBt",
103
- "https://media.fxhash.xyz/w_512/QmZhV1dg38iyurMykoNmbGSwkD8x6PqYMpqYizXbpJ2NA3",
104
- "https://media.fxhash.xyz/w_512/QmWkmM8a5a9QWdJfBC6Fqp6yCR7HzbYFWey4pf2TTKFDBS",
105
- "https://media.fxhash.xyz/w_512/QmTXyw45vai4JGL1VY2PsNpSXzTxXf73Z2xPe2GabvSHZ5",
106
- "https://media.fxhash.xyz/w_512/QmWtbAxktC9cu76xZmHbDQUTmDDhujxTixorEoVdFpC5HH",
107
- "https://media.fxhash.xyz/w_512/QmfNnPzFAUrT81f4Cx9gTzrZQjJJ5ExDUJoysPvo6medZQ",
108
- "https://media.fxhash.xyz/w_512/QmU7GikBRFW71VbrvmaJEELKVyYMqSswBdGu26dbJfNcwb",
109
- "https://media.fxhash.xyz/w_512/QmSM6CBYTo2t2RxexU2FpBL8MyRqXCGRvxNJXC9oxyAgEi",
110
- "https://media.fxhash.xyz/w_512/QmNyhtM25qgKk2hQkCiCsMCRiR6CQEHFjdq39d4fDpgsYt",
111
- "https://media.fxhash.xyz/w_512/QmWuqSaeKhLj25Zdbo5aCUMBimfH4rnMRzBtaDmnysv7GX",
112
- "https://media.fxhash.xyz/w_512/QmWaiMW1wUtPnm43H4bnUNQguGSnF63kBdDN4Wcw3LEwkK",
113
- "https://media.fxhash.xyz/w_512/QmNs225SQzXLXPiduZDuT9Fcp1Syadscb68PHHm2fr9k6P",
114
- "https://media.fxhash.xyz/w_512/QmRRqLmjCoMZPL6NP9vcn7WcvqCebF9DjNM75gidg1LdSC",
115
- "https://media.fxhash.xyz/w_512/QmWjMqzDKvmhaHinr3S7oyxWdy7w3RbLAqLJvc5yEVhA5d",
116
- "https://media.fxhash.xyz/w_512/QmccfMG26DSws55nxzLh4EWngo6gByCtA4RPjHyn1cDFuu",
117
- "https://media.fxhash.xyz/w_512/QmWzL28A5rpUtnUXj1x9sSAzYeTajw6S84CP6vuGVd9GdP",
118
- "https://media.fxhash.xyz/w_512/QmfE9Ep8zbLGrSrFuFX9nzhmRijo9Z5XRAZeMb91iyJjFw",
119
- "https://media.fxhash.xyz/w_512/QmTZ5ADzcrm2nrBNN7gTTKyiJFem8Uvv2BuwMU57ic66MB",
120
- "https://media.fxhash.xyz/w_512/QmZYGqRsi63ktJqTdYeZNapyxP3rx7wrEWottshz3kQV7y",
121
- "https://media.fxhash.xyz/w_512/QmdFyzANVbfNGrvBZUVPbpYJxQLNNbKmjZTvtjjvzTURb1",
122
- "https://media.fxhash.xyz/w_512/QmPqySj1jzTfnL92By37eSadkurhLmtr8W5qn4cyJFYtES",
123
- "https://media.fxhash.xyz/w_512/QmW1UfF1H47GVprD9NREseZcKBgkK6VzApaqPftGbXN5cj",
124
- "https://media.fxhash.xyz/w_512/QmZF5kAuF3CggKMz9w9vgsav1mPrDNdmRY7EqCHM2w4EYq",
125
- "https://media.fxhash.xyz/w_512/Qmbof3eJtp8Me8CKdFwiFBZ3gkR93zr1efgVs7g7Aba8UT",
126
- "https://media.fxhash.xyz/w_512/QmViWM9xJ3dtAgCPMkwbdKsiN4pFzS5mirFaqkkbnKNWbk",
127
- "https://media.fxhash.xyz/w_512/Qma7QhWriXyk5njhHB85jTUUNrNNJAYM3zY9cYJ1r1LB4B",
128
- "https://media.fxhash.xyz/w_512/QmVamTXXfc8YFVvgVQpKTGf4zGcPNNwsGActCqwmQLaLwA",
129
- "https://media.fxhash.xyz/w_512/QmNr61Ts64dU2jWJWXwp3RvrYarHfEB7ATd35fV6hU4GeA",
130
- "https://media.fxhash.xyz/w_512/QmPfv8WzegDv1jGQCxfL9nz6W4iYKpE6fKoqQfW63LzrJq",
131
- "https://media.fxhash.xyz/w_512/QmexdzJRhxDD4Z3w8qaV27QVW1iJj4VhWwDR6s2XmrzLxq",
132
- "https://media.fxhash.xyz/w_512/QmPKNupEx2bufCPC7zPqaUrwr78dsFtUQHdTHbmeMbQAS8",
133
- "https://media.fxhash.xyz/w_512/QmaLR1oXwa5aARFBbwVmG2zyYqEMrQhocmfqQkR5vNXp6S",
134
- "https://media.fxhash.xyz/w_512/QmdLtRhWRVCQEeEiKk5NdnePaqguBBMbJ1wDGEikteX5Yz",
135
- "https://media.fxhash.xyz/w_512/QmZGPy6DuY52xqiGSAQZJJJ7rXxzwP7s4FdQuxh9y81HYs",
136
- "https://media.fxhash.xyz/w_512/QmRtaMnQLyArp8PfnvG9zLPiqVyTuQzBjrHjb9EFRqBB14",
137
- "https://media.fxhash.xyz/w_512/QmShp2GtGemiVGFh6vpn6uBnkMzk5cKesuE5w1v727Wb7n",
138
- "https://media.fxhash.xyz/w_512/QmTe6Eo9mAyN52edo1J889Je8v7oDmuRmcYcdH57Q1PdLS",
139
- "https://media.fxhash.xyz/w_512/QmdG7S4NRB8qTNSpBpgw6kYiiPtRFaXW7kJ8TbSSvKAiVt",
140
- "https://media.fxhash.xyz/w_512/QmSG5USoWNKkgn37HFFWt9onoJjJwWBmKZnKSqBq7S9p1R",
141
- "https://media.fxhash.xyz/w_512/QmW2AUXNDSVK39cx5rue133cevvR2MXFuAHxVwPPCcDk1F",
142
- "https://media.fxhash.xyz/w_512/QmSkpVk6FyCtFxy5F53TotxiZq6Vj4f5cQ8fw2j5AG63sV",
143
- "https://media.fxhash.xyz/w_512/QmSHue9HvSyWQp9sw5mvAzhXCrtHdNdT8cdpxwtNiMhfZL",
144
- "https://media.fxhash.xyz/w_512/QmXV4mEyqyicUnvPjynbuRPLKzdKHv7Gj99Utsa1xKgaLQ",
145
- "https://media.fxhash.xyz/w_512/QmWhGyBE9hUDDvhS81UrweHWnWpcQvFfzGgCFvZgmj7QEZ",
146
- "https://media.fxhash.xyz/w_512/QmWgCyHz1gnm3wGQaKXFsaHqtMvY4oRTDJkod5nRzUKMhn",
147
- "https://media.fxhash.xyz/w_512/QmejvcPoWpk5ezzKEEpz8wAJ9TifWataUPeWppvj7XraTg",
148
- "https://media.fxhash.xyz/w_512/Qme3E87vroogtQEWLf72BX8VhRdnmcd8GUzbYTxv61n28E",
149
- "https://media.fxhash.xyz/w_512/QmUzsRgPas7FqwsiekSTMgWo4gHMjsyTt93ReTFc6yECHy",
150
- "https://media.fxhash.xyz/w_512/QmTEWmkdh35a2p2XmMSVF41bY73E2ydM2ThYD947Dbm314",
151
- "https://media.fxhash.xyz/w_512/QmNtVQDnAFfTve7quBa2MDrZm27wra4Ku6UzBzPUwDK3it",
152
- "https://media.fxhash.xyz/w_512/QmekNoCf4SrPD64wZGSjuLDtnuKpahEgsWBuvWURd99Eun",
153
- "https://media.fxhash.xyz/w_512/QmNZKTM4VsSo9Y9JAoXakEuf9WUzQppejZXmvz4qnTdCR3",
154
- "https://media.fxhash.xyz/w_512/QmRDWDht9vm93WZxKtaqxAaXeaQAYAKtgveYvtZYWfmf8K",
155
- "https://media.fxhash.xyz/w_512/Qmeum88WyYVgLB9Gzj1wL4Qg4ai1oZ38W2ebdCgdmvh6KA",
156
- "https://media.fxhash.xyz/w_512/QmULcjpzZMgqnG6jMvo6fbpJCJ8VYarYJyWjPPVkDR191p",
157
- "https://media.fxhash.xyz/w_512/QmczC1jJSprVWJLeTfgmPZVfY72JDmmaCDRhhgcfbGBdsa",
158
- "https://media.fxhash.xyz/w_512/QmRyt4uj91VeBxQHLeBoiWPovBhkbqwEZbs1DpFHBhzh41",
159
- "https://media.fxhash.xyz/w_512/QmaMfnXjJ5JZK9dbuFCaLU4hAQRsYrrsV13ZifuEzCHtkq",
160
- "https://media.fxhash.xyz/w_512/QmWrdx6qcNBoAg1a7oCZi1Y8ZSa475KaR4L9WeQbwtBmMR",
161
- "https://media.fxhash.xyz/w_512/QmR5S5RV7HaCp9UwtpDHFTQeRtuMXu17Zp8TNHbs16yFCk",
162
- "https://media.fxhash.xyz/w_512/QmNowVbruR64R8TLZ7M4fdrRtsm27x83HtZ1zJsf7qH5po",
163
- "https://media.fxhash.xyz/w_512/QmZzTSTaYN6pcmVL9Ufd5EAXJ9Qpxp3Nf2eh926gjQvBE8",
164
- "https://media.fxhash.xyz/w_512/Qmck5HtuD8xNJK62vqWTFbcLHuUvGybE8zyEpLAtSMZGrx",
165
- "https://media.fxhash.xyz/w_512/QmXat7kh8JkDQY4nVnanPsaz3JvqByQ3ezuPG2FZsRqxs8",
166
- "https://media.fxhash.xyz/w_512/QmVxXneR3Nz3fByKShxNTiW3Da81DMViwcqDRniSB1JdRY",
167
- "https://media.fxhash.xyz/w_512/QmY8cjqqaJDbByGDViDj8wPgHuUFEkVBJzwwsqvX8tMnJK",
168
- "https://media.fxhash.xyz/w_512/QmZ2AG92pcCTn7NTuLe1hbi8zUiPrzDzHauDTFMj4NGAeX",
169
- "https://media.fxhash.xyz/w_512/QmUnNhzBSPqXNaqZoeZRWvordT959vs3tNLF4CWaaLYTKd",
170
- "https://media.fxhash.xyz/w_512/QmQhi2Q56nR5W8nxwCS8wwZLcLv8FwEC9Kam3Vk7genimL",
171
- "https://media.fxhash.xyz/w_512/QmekAPxiWjgZhvEsx752Tn8Qr9bjH8fbMnEyhChwMTU4EG",
172
- "https://media.fxhash.xyz/w_512/QmV89dxo2MkS4PXumgDqtMDzi2AgrYrt3tnUrsmybadbC1",
173
- "https://media.fxhash.xyz/w_512/QmaYiP1iVSw83z3DWK5GzsLdH99Kt1gLDfYsj7E4pzaQBL",
174
- "https://media.fxhash.xyz/w_512/Qmf6pegjy82QPQsihBNff3RQcM3UnNsy1UfE72WMgTD99V",
175
- "https://media.fxhash.xyz/w_512/QmXRwXHjT5a2WeuEDZ6aUi8VtwS2MzgLaDEXE98NCDvTpe",
176
- "https://media.fxhash.xyz/w_512/QmRYHXWZtBTuCxvfu8go4G3TamyEMgex4umNNCywcqRFk4",
177
- "https://media.fxhash.xyz/w_512/QmUCo46H1k8kiPMWnFfrLTMRfXsvEhSxK4niGcSx4o6chz",
178
- "https://media.fxhash.xyz/w_512/QmaJtRyHdfXccSoG81LoF6Kgg3hLNAwkBRhPSXsBRreTLC",
179
- "https://media.fxhash.xyz/w_512/QmSRRmT3oYsj4LVmUSStqwv7tE8kq99t7ZFAvAJqBsuhQP",
180
- "https://media.fxhash.xyz/w_512/QmXurGBiNpRD3aSdV4XvcZddecKhVBNuwKNUvpYTEHB53L",
181
- "https://media.fxhash.xyz/w_512/QmXVnbJZBX1DR7vfo5NfEb2u3QFYqtYZNgFd7zSddDdWfj",
182
- "https://media.fxhash.xyz/w_512/QmRawtrvBsfpmzLvS5eW2ggz8WbUXtFXe5xwxx1ttakxJs",
183
- "https://media.fxhash.xyz/w_512/QmSEDHqCAFBU85aR13f2k87nEwrEYb8LhRwC6GLctkcf6r",
184
- "https://media.fxhash.xyz/w_512/QmcBJFmNNuTNpJW4ZXSpAYWCGTinPpcaTCiRmzEKU35nmY",
185
- "https://media.fxhash.xyz/w_512/QmVDLykt8L37jicsA3mmaMF1Cqd655uygE71VmyY2fVFZg",
186
- "https://media.fxhash.xyz/w_512/QmTyLGg1MnvPVGuYAwRQ5d1jesuhUfThtPT8JMkx4uNvTs",
187
- "https://media.fxhash.xyz/w_512/QmZ27StKPQDxknWzfMf5R6T3jnoVDPFGUKsqBDSUUuJmen",
188
- "https://media.fxhash.xyz/w_512/QmSVQ9jmQKbvdYJNEq9YHYfB7wQmyuAGTcEQn1YKTUk3js",
189
- "https://media.fxhash.xyz/w_512/QmNZPTBbNyoq6dAbJZQ4DEHkyuS6frLLHF1Esf5R6zJRkb",
190
- "https://media.fxhash.xyz/w_512/QmYphaApiHTGtoo6nTNMPHV353rvWicyva125BH4dfi4Jb",
191
- "https://media.fxhash.xyz/w_512/QmRxstGvx62BU11SD8ChobHc9odNPAQd64pv5N84fcxW2G",
192
- "https://media.fxhash.xyz/w_512/QmXGond8Vq6ndBMxjwy4hTzgZh4fZvSkCjRQiQJsrYG92j",
193
- "https://media.fxhash.xyz/w_512/QmQ3bke1VSLDw9hHHskgU3Kdf6MFC4DFKU8ep5S9v1xgLK",
194
- "https://media.fxhash.xyz/w_512/QmWTPgFepkQTsTechEnRvNcKvFAXYveTEzfuonzQtDouyd",
195
- "https://media.fxhash.xyz/w_512/QmeBumdG8a271hcGdF6jbavEBFFTtUb4tccX2Kcp19pvhJ",
196
- "https://media.fxhash.xyz/w_512/QmdNYyZNbLRfiBoH1rbdvutHvZvxT7P5zXK2rJQbgh4wPa",
197
- "https://media.fxhash.xyz/w_512/QmWjX57E3bjsBQe6hho9f1kQTiBYMQjFAmhmZtQPQSHroM",
198
- "https://media.fxhash.xyz/w_512/QmWRyM8a3gpGcjnz9DmgynkRM9omQ3QtAULoVcTYQtnWbN",
199
- "https://media.fxhash.xyz/w_512/QmWmEj4ZbArkYxfyUhPkGgCB7LaCjNwYa8Xjvt63MrcMU9",
200
- "https://media.fxhash.xyz/w_512/QmbVQ4DTSLtv3wPFdBS3Eny8273XtRS5MAjUStq3XYiStD",
201
- "https://media.fxhash.xyz/w_512/QmdUhpomYghVU3t78R9pZaN6qpFi2GPMogBFgvKzv44ppo",
202
- "https://media.fxhash.xyz/w_512/QmY9jdFbXVizQ4qfnETNHbx6ws1uFWdtvFfr9c4j1ak6nn",
203
- "https://media.fxhash.xyz/w_512/QmNnD7bBV56fmSBu7BLjHmn4FbRRz1FWnLDnLDHDn9DDQ8",
204
- "https://media.fxhash.xyz/w_512/QmPZfCmNnR4DKyfQhucat4LAoveKQMPWDDk9qvCFHXRgbQ",
205
- "https://media.fxhash.xyz/w_512/QmQ2JLHAvsvS8s5Q8KGMixCN4EpwuXhQFuQHaGNJoyvVRw",
206
- "https://media.fxhash.xyz/w_512/QmbgZVCvfRErYwDpnGwrt4CLY6uYFu8Kr3W4tyFYbHg9bp",
207
- "https://media.fxhash.xyz/w_512/QmThGMSy3k9WRUscQturPzxm53BSF19V6yw75TJDWBYDjG",
208
- "https://media.fxhash.xyz/w_512/QmcnXn3SdC9uLDAxhToiBvviTfeD8qHtvVk2WeijvsGx9d",
209
- "https://media.fxhash.xyz/w_512/QmYeio3aWhLKe6m6D88raABKJ4U8YWAquvCKrtHMa1SxKH",
210
- "https://media.fxhash.xyz/w_512/QmVKg927JSLDAWp5MnJHKeQZv5T4Bpe6UPg7EF1obVbBcB",
211
- "https://media.fxhash.xyz/w_512/Qma7gW8HFj224KPJb5ETs2kVRRQSZ6timfeNn59P87fTaK",
212
- "https://media.fxhash.xyz/w_512/Qmauj3shE24KkLehDixYnZzAHjgfEA3GPjFTfaBcA7QMja",
213
- "https://media.fxhash.xyz/w_512/QmXN4ejVYqwRkHNJwGWnphMubCe2Qx7V9YXGsgA9fbuwF8",
214
- "https://media.fxhash.xyz/w_512/QmPJQWbazp4oMcts1DEohTdi3G1FceovCooFTyLSgEsVCa",
215
- "https://media.fxhash.xyz/w_512/QmU7wCZR2pP9PU3Thdxo6xWaNBh4AnWtSP6dDmhwS1czkt",
216
- "https://media.fxhash.xyz/w_512/QmPmyJkrWcmTiLVjMvpcGXu6ParMhzMVhfMfgFZ2Ls4WLV",
217
- "https://media.fxhash.xyz/w_512/QmZyzqJ1giBdAeVjUZNnKas8fHjp91YwFJHUqVkubq72bQ",
218
- "https://media.fxhash.xyz/w_512/QmX5LvYUq7NbdpkcfDD1H1sCd3kLHeXpXDK14hRkD3Pz8A",
219
- "https://media.fxhash.xyz/w_512/QmXHt1D7HusfL5bhbiqxPQ9EBCopfUynTMK9Nf9v5NPHwn",
220
- "https://media.fxhash.xyz/w_512/QmR5ts7WxUFRZc4j8PV8wZF3wtT41PcKcbuaJjmCkhUQQ2",
221
- "https://media.fxhash.xyz/w_512/QmSvofQwVtj33BEZDvXxodrRLXc7SaJ3cuMw2YjujqH553",
222
- "https://media.fxhash.xyz/w_512/QmYV4r74Veay5km3KvL9F3G1Wyg2JFKDZCYy4tFA149MvB",
223
- "https://media.fxhash.xyz/w_512/QmNtAp8VoFiZg8qmY7aSLM6VzyDv9BJrKSWUQNUTnNdvUU",
224
- "https://media.fxhash.xyz/w_512/QmWpm1aNFGMfz31fM5Uzt3roaSuGMHDPPsDjtWCLwLpQWA",
225
- "https://media.fxhash.xyz/w_512/QmQF5LvqBZVGoroQLHfsw9JoS1QrCE9bUvcraUQaRzZa6K",
226
- "https://media.fxhash.xyz/w_512/QmaMcK2vHb3Zjtu8CvinT6tGAJYtLUkwW3DYQ2mEFi2xqT",
227
- "https://media.fxhash.xyz/w_512/QmSRshrcfgrkaszWB4RqTSa4vNRTeNpM5KpgWGg7UdvvVR",
228
- "https://media.fxhash.xyz/w_512/QmYDKPf8utzdG6Ai8HVWYBRhCMJzo9ZgNtiYaLCx7rH2Gy",
229
- "https://media.fxhash.xyz/w_512/QmZGpmhR9f1w7NsCX4nMxq87bYawGcSD9A2rBpig5eVZey",
230
- "https://media.fxhash.xyz/w_512/QmXrYPaWoowSA1VLtraYudrfxZ5rEY3LVceSHzfSh2VPsc",
231
- "https://media.fxhash.xyz/w_512/QmTTw2GjXP2D5TQgj9zsfSsHwvovw8KNM5UuMqTPRUS2yQ",
232
- "https://media.fxhash.xyz/w_512/QmXwskZiCNKt8euPxNULdHpmWftVAY19ubppk1tZ8D4fm6",
233
- "https://media.fxhash.xyz/w_512/QmRMzcQPiF98NSaN2ZNgMQA4BT43jhkbC2uPq18vJCDqBK",
234
- "https://media.fxhash.xyz/w_512/QmNupncbzywoxuzzFPwKyaBHmirDEJE25wMxNiwpyfv7fL",
235
- "https://media.fxhash.xyz/w_512/QmcuCk3GmcKGohxhV3h1qo2QPzmTp4wupo9a7GsxzdXstR",
236
- "https://media.fxhash.xyz/w_512/QmbLcjHMD82hDWmi8UbrGJ5dMMPr2N59BBMksYBd8E5Eci",
237
- "https://media.fxhash.xyz/w_512/QmbqjbDCjsgYqvkDPik72faSW5J2ddasynx38cRm2s16uf",
238
- "https://media.fxhash.xyz/w_512/QmY6Wkuiwkjg1eq4aHhNRDcrB3RebuDY7hu8Lwr9E619Pu",
239
- "https://media.fxhash.xyz/w_512/QmctXMnPq5hoGSmhLbWS8ixWo2y6rDcnmzLc18dNoFpxw4",
240
- "https://media.fxhash.xyz/w_512/QmVVAfKyPy7LTUfmMoPykEYVeUqcqoGDiiDYV69KvHobdN",
241
- "https://media.fxhash.xyz/w_512/QmZyvexhyPvTJZkwGA9gHp7mtvnXsJu8Bxx9rdftm1dkFJ",
242
- "https://media.fxhash.xyz/w_512/QmaM5VeT7hSfjfdQ8ZLvDqN5iyU52HLyEpbfodz8NGZgSv",
243
- "https://media.fxhash.xyz/w_512/QmS6JaavBaaoBiyVrj5cBkmcyDzVWsx2bywjYd6qq1Tzpy",
244
- "https://media.fxhash.xyz/w_512/QmV7vDrmyi7ZhdiTxRH2Cnn6KkheSGh6TFn5sSt5DsEdnM",
245
- "https://media.fxhash.xyz/w_512/Qmca32MZWKk3VuBVbg49NwG5DBdZ5LUBDdJ1o3FEQ9Kaut",
246
- "https://media.fxhash.xyz/w_512/QmUQqeKfZjZsCzmYcEixSkYBy8ntf6PmkvNV9y3rqkMoAA",
247
- "https://media.fxhash.xyz/w_512/QmcHAwZmHuFbHRjbzv6GLKNbKxssueFwgAf344SSN6SPeK",
248
- "https://media.fxhash.xyz/w_512/QmZFdKroLy1jZaGRhnAUNyeNvWgarRhok5qbqqYmDA3nQA",
249
- "https://media.fxhash.xyz/w_512/QmPi7N4awTVFkhwvkGaEbaT8x35QYtdJfWBxqcx32rtv7n",
250
- "https://media.fxhash.xyz/w_512/QmdFkuFMmDZanS1CPKoaqKLnry2LScVTJMDCZaFmzUgzDY",
251
- "https://media.fxhash.xyz/w_512/QmZZZhV9KHupLT4MSqzDU4HobFimsohF4U4iBXVb7kjteW",
252
- "https://media.fxhash.xyz/w_512/QmZjV7ZuR1e2H3bPbynWKaWqL89BFU2j16SvWCyvZ264io",
253
- "https://media.fxhash.xyz/w_512/QmVCr9WjdMDowSnbt9NpeLXheUEupyP8ggSn5LMLtNchmR",
254
- "https://media.fxhash.xyz/w_512/QmR6x1yKmfyKzEYs6KWZ8S5QKz4DAPoFwcx1RuECvmB7Pp",
255
- "https://media.fxhash.xyz/w_512/QmY37EsgB5jbKBj5xUhWMUPwK6Vqf8CT9UQCbuH363LJg4",
256
- "https://media.fxhash.xyz/w_512/QmYz4zyaRC9SRcBTfVSSWVxGW1Ps3aDFD7m4fnfaGrvEyF",
257
- "https://media.fxhash.xyz/w_512/QmVCX3MhskgLJsStDJHMCr4cW9zSAtgUhiEvq9inv1TUAi",
258
- "https://media.fxhash.xyz/w_512/QmYEv8jA7L9AEY9y2F1h98yYAax2KuGzf8RnrGzHgehA7f",
259
- "https://media.fxhash.xyz/w_512/QmaXuLfxmsViiJ4KPYyCtcHFPHT9mm2zqbgjUryWeHsyE3",
260
- "https://media.fxhash.xyz/w_512/QmRpfYCrXZg5irVgsSscsbJgnSefu11V28ewGAHQoQ9rAx",
261
- "https://media.fxhash.xyz/w_512/Qme5xo3SuKRW3fVgh5hqVJSeJmWU1M3Zf9ki1a2yhoEDfy",
262
- "https://media.fxhash.xyz/w_512/QmRBGcsBXeXzoLCcFmnXdCiufzwmEtGBmbPtHFxxvcX3N3",
263
- "https://media.fxhash.xyz/w_512/Qmexam8GprdCEDrGZZEgsPHXL2ajrqYegiSqQLHvxSqZL5",
264
- "https://media.fxhash.xyz/w_512/QmS3HGNrc1xc3DiicesYBVNTfWzdxWKgCHqGoWTZjYnuZQ",
265
- "https://media.fxhash.xyz/w_512/QmUHdvDR1AR3USZGurjGBdfBUL8pAsBmfkUxxn67iwec6U",
266
- "https://media.fxhash.xyz/w_512/QmQrwFD2a6gRXv8jpgLfEW95EmgdqYVdXCY9JnMa5HsQkt",
267
- "https://media.fxhash.xyz/w_512/QmY639tpFumSBRZwvkB6vrLsdN6Wwg61epo5iyumsFHWqc",
268
- "https://media.fxhash.xyz/w_512/QmdCSYw467W1omayKVEsnS9WixcVecyCaK57gQeq5GtB7e",
269
- "https://media.fxhash.xyz/w_512/QmTFJ5DA7HZj3CWRF34J95pDzvLNyHFt6UcCsyVmW5MfYL",
270
- "https://media.fxhash.xyz/w_512/Qme7EdKXfAKAfuiX8x4i5jeecnDnx7wphNNdEZquhPvvAv",
271
- "https://media.fxhash.xyz/w_512/Qma65kwFdxgQXjwi9tXLJ5yWYmH13Cj35j7uqqtuycnoHf",
272
- "https://media.fxhash.xyz/w_512/QmVhkNmN6RFDEXRPxoy7WpNCJpEnuoWtMk5YPzSDhtoKyB",
273
- "https://media.fxhash.xyz/w_512/QmT61dwZEVySC9d7hSJMWSk3EVNinamPb1k2n3vvrfMWm1",
274
- "https://media.fxhash.xyz/w_512/QmdUEQ2cNyEaz52u2J2EbpfWcbsEN9GMNcu9jD3EfkVU7X",
275
- "https://media.fxhash.xyz/w_512/QmeMkCJKuaLohbkYTinyvsEZekrpFqhxoMMZcMDuFr756z",
276
- "https://media.fxhash.xyz/w_512/QmNV85EjvG52GrpL1G3kCe9aNKJj2oWS63z7CX25AfoZbv",
277
- "https://media.fxhash.xyz/w_512/QmSJqMhYT3JXTJ163EVnhSRNmRfc9ASoeGn3ECrvfQX8A3",
278
- "https://media.fxhash.xyz/w_512/QmU2UixzjiQ8Q4DWfe98uKkJdivnqszsEYp3KyfifibjjA",
279
- "https://media.fxhash.xyz/w_512/QmZwfXpf84tM5DmgiremUVM3f14yaz3NSREz21zcxBcGYR",
280
- "https://media.fxhash.xyz/w_512/QmXiRtmGYw4KRE6DzdnW2NH5mrVbSXNv7pJnSmvr5ctBKS",
281
- "https://media.fxhash.xyz/w_512/QmXmF3dzWth21tEZHbypfSCdCBLn8EpK35wbGSMp8HQ81s",
282
- "https://media.fxhash.xyz/w_512/QmWUsx7gt7fat9YU1MPpQxYYRcLsGEoAc1TNHtYnD1SD3g",
283
- "https://media.fxhash.xyz/w_512/QmbVqQJaDAE6H7MWexf5bQBwM1jAWNJCL6MibyxUCCjLrQ",
284
- "https://media.fxhash.xyz/w_512/QmaaPEBhzgf3N4V98G6aFgjrJSTMPvu8cVavKRwCtBE2Su",
285
- "https://media.fxhash.xyz/w_512/QmVU9XvPaWjKv7Z7wdpdxtBBBaBtT7Vn8zxzJEWgXCf92c",
286
- "https://media.fxhash.xyz/w_512/Qmct1uCFHWYfm6iTo9BC8vJoJWXmMXNPuYX9wCNeLkMsLY",
287
- "https://media.fxhash.xyz/w_512/QmRTpDQJvfjJY45APpBD73eu2neEt7msQrLbaLJSMe3HEH",
288
- "https://media.fxhash.xyz/w_512/QmUiN2uAjbdvK6nHTvDH7BxA29CAu1MwtyByBhLejx9Fq8",
289
- "https://media.fxhash.xyz/w_512/QmVzFJq7T77mhqh398kwnhk7qJoUE7BV52tmerm1xyxD33",
290
- "https://media.fxhash.xyz/w_512/QmekdQgcA2DUfrGHmpbCmuEufAGPA7K99SdFeiVS7MrnTF",
291
- "https://media.fxhash.xyz/w_512/QmYnsbG6NCamdaQ2e9fzNo3qxdhrFb6Q71cHBdmyddHVt3",
292
- "https://media.fxhash.xyz/w_512/Qmf9Nhx9fLnoTFeCNpynRwF6rjp9iYwYeYE9SaqdtZqH1g",
293
- "https://media.fxhash.xyz/w_512/QmYYwiJd8a5akF8RgS29mzsid9L6u99RkuyJRQtpJwXmGP",
294
- "https://media.fxhash.xyz/w_512/QmYqc6iQqBBW8v9d4PwWEEho8rXiy1EEVMNf1x5Ed7Je89",
295
- "https://media.fxhash.xyz/w_512/QmU2VxZzL618EkeyMvHFdiiZoT8AXmDwmzuACainFjfaEx",
296
- "https://media.fxhash.xyz/w_512/QmaguHZKJ3cTMdhM5Bm39nJomreeeCmEhF24z7ooVyz4cY",
297
- "https://media.fxhash.xyz/w_512/QmVwCQ8WK3ZZsvmgqHvAoLJTbmkzWGjny19mBKLbhjSD2N",
298
- "https://media.fxhash.xyz/w_512/Qmca7MtdCpLY6kFsxH6ebwQKahkLp8K5afCz4dEB6XMnPw",
299
- "https://media.fxhash.xyz/w_512/QmU8i4oMVb1yd5JhNFjycWNZ1CwqwwWpP8ahc55HRRebxW",
300
- "https://media.fxhash.xyz/w_512/QmXWGg6Y9wB1ARS3ysAL62PtijGWNrDbebf3apqSz45Cdt",
301
- "https://media.fxhash.xyz/w_512/Qmf6dpp6ftHJve1PkmxUp5qBhb4jRDvPKYdPtvxf6iUJxG",
302
- "https://media.fxhash.xyz/w_512/QmX7jMSNEUUCkANKHt668aMDYMKYAYjX7bgeueqv2Y2zXV",
303
- "https://media.fxhash.xyz/w_512/QmUvBG4Smvo7NUra8VkYHsdrn4ZNeUkfzLMh7pL5fB1na3",
304
- "https://media.fxhash.xyz/w_512/QmbF8XZ3fEJqTh72JhvN6YxQRN5dSABkHHREpaZuuGrp7G",
305
- "https://media.fxhash.xyz/w_512/Qme7Qpjv6FVkV8SGBdusia1VMAegW8Bi6CYmbJcE1wUJbY",
306
- "https://media.fxhash.xyz/w_512/Qmd3sZTngYp85m7E2s3RRJXFFygmJrNGwA51NidoUs7Kr4",
307
- "https://media.fxhash.xyz/w_512/QmRofMpHyWXSJoLmhWcMNTZRr4z7R4FKXDHpBF42AmaL5W",
308
- "https://media.fxhash.xyz/w_512/QmZg1n6UnW3Mbd1Gd3nhGyUgAiLLK3sFFxCW96g29UFj6Y",
309
- "https://media.fxhash.xyz/w_512/QmNzXcpQ3GS8uD3bx3ht2vGr7ZZUjZbvEt7QwM9dPkePMv",
310
- "https://media.fxhash.xyz/w_512/QmUzSEAqjL3phoeDEWFEyoDqnRthBKBdS1TBzHewcU1Kk3",
311
- "https://media.fxhash.xyz/w_512/QmaLP5sXrCjjgpJRM9gn3LAFrh3cVP1AEgvktzCcnmQKm5",
312
- "https://media.fxhash.xyz/w_512/QmVrqCVGUn6U7f6njgw7Af312R2HPxznwVsr37sk7tp4Z5",
313
- "https://media.fxhash.xyz/w_512/QmdBwDDFBcFdDCjEHMmaizw5NK2nC69dW3yy9DPyoy7je8",
314
- "https://media.fxhash.xyz/w_512/QmdgVt4Hp9quiD3FdcpUKVVoqfb3ZnfjsR2D8wneje5oU6",
315
- "https://media.fxhash.xyz/w_512/QmUDVL58YsnYChodHipjRY4QmepNakKs9TVXSxCWNpH2aA",
316
- "https://media.fxhash.xyz/w_512/QmS6A7TV3Syne8kWioPny6V8fuodvRxpJg8Uq2w71uvntS",
317
- "https://media.fxhash.xyz/w_512/QmdJjky1yEYf6Kk7KHqM2jBb87u1osySf76CvZW7vj6KUy",
318
- "https://media.fxhash.xyz/w_512/QmPSRVwqEra5APi2q6GV9ob1b1TAwDuURS1FSj7bVLifGF",
319
- "https://media.fxhash.xyz/w_512/QmRbmbDAnWA48HRpyEcbB5Dhe4sRHdJqYY4G4pRcDTAqfE",
320
- "https://media.fxhash.xyz/w_512/QmSdDpa8eGbUWkCrRAtoPCnvRw9FFjHwK1g3iac9EoYVFN",
321
- "https://media.fxhash.xyz/w_512/QmYDnuToY6SBxJ7RFSpLvqe6W6c2ixCCVDd5mCtfNBz1zq",
322
- "https://media.fxhash.xyz/w_512/QmYfoicG6KupuxB9zQQjrt5z74SposHj9FVzGtcso1SRcg",
323
- "https://media.fxhash.xyz/w_512/QmUs7MR6KP2kewKq2Ga9yPeUKjS48aTuDz8XrywzFx3fmg",
324
- "https://media.fxhash.xyz/w_512/QmPGiyw7LemJpKYBiiR9WTHjAPFtooZtVpMzdXLPxrgwwT",
325
- "https://media.fxhash.xyz/w_512/QmUrtNe69ymut37C56rNF4BRQarVy5y8rDhAMFJ3ijRoGQ",
326
- "https://media.fxhash.xyz/w_512/QmewX47wpdEtvJzdzS3AaVNi8VndLKjy1ZJBkMRzzCSjrS",
327
- "https://media.fxhash.xyz/w_512/QmTrHN47PYbgcMgrGXBfxXTeUfDZUQxSTBvAnxAuhnwNQz",
328
- "https://media.fxhash.xyz/w_512/QmYNpaFbEN1t57oSo923XF1AgJSfrqogf64Mwd983Cup1n",
329
- "https://media.fxhash.xyz/w_512/QmZ3dBmD96V39Cq9BwNoQt2dgiu3YureXbXdgBhHYnQVoE",
330
- "https://media.fxhash.xyz/w_512/QmdB8dEYnPQmW5xurP45rAchpUG5wbXuhBiZc5evGYR3YE",
331
- "https://media.fxhash.xyz/w_512/QmRC8dYQw5GTBLWLRwmoLoB9Dty9TxrQJc1H936bPTzg9k",
332
- "https://media.fxhash.xyz/w_512/QmQaJFsEvzA8mmiRm5aPtKuqZLGd4cpoDEZu2deWWFGfTF",
333
- "https://media.fxhash.xyz/w_512/QmdxRP51ZLJWgAuttuRp9VvjjZYnhxnc7XcfedA6v3xC8f",
334
- "https://media.fxhash.xyz/w_512/QmQoDgWVXQX1pU3Cgae6ZsDQcrmsBNN2cV3WfSgCErtad5",
335
- "https://media.fxhash.xyz/w_512/QmQC5JUbVeaXk7RakC2vpz8vpnKsSfD1ks5rP6BE3dCi8Q",
336
- "https://media.fxhash.xyz/w_512/QmXqWPwH8PkXgAQ9EokYu7NuJJn9GtQZ825qpS9iP8hSze",
337
- "https://media.fxhash.xyz/w_512/QmZ5iAB6ir2kBb1ExQgjtFd9AjQcWVzKT1vfHafE3uBRue",
338
- "https://media.fxhash.xyz/w_512/QmeuHCAHznvrJLCrU8G463Tuefct7FbhjLVyh18MNVTQvb",
339
- "https://media.fxhash.xyz/w_512/Qme8hdyryWHADioNJ8pzDTRdrZ6yyCBSUojTVsJhzppTMB",
340
- "https://media.fxhash.xyz/w_512/QmXaRvJpuji7pV5oNdGudXqnNMfyoeMeZ5htSr33yZjdCr",
341
- "https://media.fxhash.xyz/w_512/QmXuMEq82127K8ACEA7eZhuMUJMcQhpv6ydDEGgodhX1Rz",
342
- "https://media.fxhash.xyz/w_512/QmTvHFugHhuNje82kNTQZsmRVCWPUjiDwTwHHpWzQzjVCf",
343
- "https://media.fxhash.xyz/w_512/QmQnmRmvaxHETPgMGHfRDsXAztwU8jh6ZPRjsE6oe1zCY6",
344
- "https://media.fxhash.xyz/w_512/QmUEEy3XYQPucQrbHgCpGHPaGgjS27B52FMSqUm5xexgqb",
345
- "https://media.fxhash.xyz/w_512/QmfA6XJitUo2WNGBCydKqC7avfGrrxbcWk8mCdDZ4zRrj6",
346
- "https://media.fxhash.xyz/w_512/QmQ5PVSBxkWdhf8tAGQE5VoepD2gCqsnzFBBoxnXmsthSj",
347
- "https://media.fxhash.xyz/w_512/QmRU5w6A4oErH9tsaCKQsvkw4ptjFnQ1tAteoFD1ex6uKc",
348
- "https://media.fxhash.xyz/w_512/QmfCJrRaUHFaUmNhEimEy2z48u3KHZpbUajTaFrWkm1NTB",
349
- "https://media.fxhash.xyz/w_512/QmasAXzKV54ojBfyJhTmyfwG9AZHHcm3dY7yReUKznan5p",
350
- "https://media.fxhash.xyz/w_512/QmbYEmwsyNKtVTSMJwisZRtnv8ourzdiRnX14qHppQKoH2",
351
- "https://media.fxhash.xyz/w_512/QmbNs5i41nHGwFgMJ73ZmhycWf29To2VpJfd6KRcCNL88f",
352
- "https://media.fxhash.xyz/w_512/QmWhgTd7cy2Fpgq2fPbfFvT3BWza743yfRbu1hNwEYiMJ3",
353
- "https://media.fxhash.xyz/w_512/QmYSntkrwtGF6cd2qPhEZr28D55YsyzcqJA9jYQekCZC2D",
354
- "https://media.fxhash.xyz/w_512/Qmet1YUJ9uPtcn3ZZfDmXnKAGoT5bHt59bdtJMNE631Re5",
355
- "https://media.fxhash.xyz/w_512/QmSgECw5jGS79gaZdSftEfVE6HZbtsDzSPb14wn7DfuTK6",
356
- "https://media.fxhash.xyz/w_512/QmWwktFc9W3yME2BCw7n1btKzWC4AR1uPCrRnEuAueg2Zt",
357
- "https://media.fxhash.xyz/w_512/QmRTaHMavaSSTea6sFvKQ64PM1NFaLcfuXg1EuGc4e99CJ",
358
- "https://media.fxhash.xyz/w_512/QmUWM3syW9MWbwzm3Hm7PmGzQtRDmsRtXNTcgJ3eznQDLy",
359
- "https://media.fxhash.xyz/w_512/QmYrJS521tGWAG6bLPbSFaf26kjvTUbRz1j88ztA8d85mV",
360
- "https://media.fxhash.xyz/w_512/QmcxRmeKmKZoVaMNRnuHgduwF6PbEcFVK3gHzMd2nqLDmc",
361
- "https://media.fxhash.xyz/w_512/QmThasUnY7uG4TkviVmEtjkTfcn3JWdbWCJXCfhxVFv3K2",
362
- "https://media.fxhash.xyz/w_512/QmPtKXh194BQJHymfP3vsfNWePhbm85ZSbi5WaSd6PJVCR",
363
- "https://media.fxhash.xyz/w_512/Qmd2HwzNb3qVaugY4wgAUWbd5dAiPqEm52WtziRQirfifJ",
364
- "https://media.fxhash.xyz/w_512/QmWC2iarmhggBt4648Wt1t2bnVRtTn3i9dFfDQWjyj9GWa",
365
- "https://media.fxhash.xyz/w_512/QmcdXXbpgz9pbyVL8nQJ5kGn513Gbpc2PaMLzpDvRfhTCE",
366
- "https://media.fxhash.xyz/w_512/QmYLudT4pe8XjKSba9uNxfbRDksKxZNK7iXEHbjMZBA72A",
367
- "https://media.fxhash.xyz/w_512/QmbarsQ3AXYUVvrsmbwrwsDQzoE5K7SXUKdcJtKjaPwjGy",
368
- "https://media.fxhash.xyz/w_512/QmXok5ayn1MvrideVp4oj57sJKJpNHvLgAoxQBqz6iuYxK",
369
- "https://media.fxhash.xyz/w_512/QmPBkF6c2K5FCunC2Mrnj4yqpf9a2CRA1ZEh6UjkLRdjif",
370
- "https://media.fxhash.xyz/w_512/QmeRVUqYEZsi2uWGHhQPSHyBMw1yFka8NoNvVhuZRhBTbB",
371
- "https://media.fxhash.xyz/w_512/QmbqWqouSFfnpurPqVNbKc1pS4wT5SszA9fg8uja829RHT",
372
- "https://media.fxhash.xyz/w_512/QmTsneVt3PFryeyGztc55vEYQgwQkNPa9F111AHShPRVhy",
373
- "https://media.fxhash.xyz/w_512/QmWbHtwNRYq1dBRCQVi5fREwyyraNVRYdQRL6e8HNBFTrc",
374
- "https://media.fxhash.xyz/w_512/Qmae2ixxy18hRW2Ekif5wdBu6qx5MfdCSKGCV875MiYXsf",
375
- "https://media.fxhash.xyz/w_512/QmWs23yjU1NFedvnwa3oqfqt9JBEambV3wnoWtMvbixkvy",
376
- "https://media.fxhash.xyz/w_512/QmYxiAXdiPp2B9AjYDrYAGJWYrtQvMbpeojg3cRDwPSkQs",
377
- "https://media.fxhash.xyz/w_512/QmR5KZt8jHjZxkoK2hZM3WukJT6gG8gpR3NdnRHhqMUA3z",
378
- "https://media.fxhash.xyz/w_512/QmbRi2Mo2VaShCeLbmFiEBf4JqCaj5bHNEkgiVaAWNpYpb",
379
- "https://media.fxhash.xyz/w_512/QmSdkt7DbKfWvYMVqDMeXoD45rWQ59zcBKE8u4LPHFZGCP",
380
- "https://media.fxhash.xyz/w_512/QmaxdEUm72UHimZKRBAdQP4dfi8VZPtqz6sx7YCiBfuL9P",
381
- "https://media.fxhash.xyz/w_512/QmaAyKZgnLDXRr7T1AQCwx1e81B14QXzmUv8QHDwhpStBi",
382
- "https://media.fxhash.xyz/w_512/QmdHL4eiR8NvbKRmgpDv8LH1kagmMF43xZCUkHUoXYSPdQ",
383
- "https://media.fxhash.xyz/w_512/QmUDvMiAf6YA4grqMT5NmUCKNqoVUjF6ZwouL1f67PGZ3J",
384
- "https://media.fxhash.xyz/w_512/QmYmYFG293hwoFHozNNedrAFajeSYZEQNnX9D4dLC9hdYY",
385
- "https://media.fxhash.xyz/w_512/QmVu1ueWbfSVEKxPdzKBTNgcW4mrZGAgBZaXbr3SDMMBSW",
386
- "https://media.fxhash.xyz/w_512/QmX6qTkzX57ngKbaoWsd3Kgt49VTKVVBiTzeZXkUDmkUap",
387
- "https://media.fxhash.xyz/w_512/QmeMe2XBdHuo8ZVu84pL1WSa4YtfHeMEBDTqRTpSwfS7qL",
388
- "https://media.fxhash.xyz/w_512/QmSQiLczkvN7ypRWwMpNBib7sVhst13XNhuWZfFBUhykBj",
389
- "https://media.fxhash.xyz/w_512/QmfXU78pQQCqrMaB6vJuWDzicHE1d7PfMHoWsrQx6x4Wqu",
390
- "https://media.fxhash.xyz/w_512/QmZ9VgyXh2f7BkxMbBi95UTbvzRzVMLLdy8cX3NZoR8hWj",
391
- "https://media.fxhash.xyz/w_512/Qme9qKJB1S7TahQd1dXVG8fNBqop1pF2WEBS6YXgL7TBg1",
392
- "https://media.fxhash.xyz/w_512/QmPFe6SQiBBNpPuetQDAemaBmhp6jw56afafdzFzUgRGRR",
393
- "https://media.fxhash.xyz/w_512/Qmcr4ntJpAd1SWuEB7euD7jNxC5ydDNho4w5zMyD9oz43x",
394
- "https://media.fxhash.xyz/w_512/Qmavi1faUo5SFrZDWJJ4jVgzxDsKiTGjwrj7D3eNC8vcQg",
395
- "https://media.fxhash.xyz/w_512/QmYipqrpQNSsL2ht3EWzQBFD4Hv5AqbxjvyTj2uoteWxBR",
396
- "https://media.fxhash.xyz/w_512/QmcMMfZaoToeYgqWdZxJuy12rxV672SjQr4GvagX6soh3B",
397
- "https://media.fxhash.xyz/w_512/QmeZ2iCDSc9otb8eAieG5emHzSXwoDaCkjikBYzv2LjfGY",
398
- "https://media.fxhash.xyz/w_512/QmczZ9kxbbDct1NgrvpS75F59qDAWVxiZwrFe4HUvxvbvA",
399
- "https://media.fxhash.xyz/w_512/QmaXAWkkHD6k52kQTDetzg2P8RgayYNFP4t5zVcheV3jb8",
400
- "https://media.fxhash.xyz/w_512/QmfH4KhXcHrYQKpaiVJRcFKyXHQEtmWGb5US5n77R4z9AX",
401
- "https://media.fxhash.xyz/w_512/QmabMVEKmsiH6hxsDzZ5Q8RPwMitiJZShDyXyScFNiuu1m",
402
- "https://media.fxhash.xyz/w_512/QmT52tW9EPSyjZ6vYdq734E9C4GQwcCKNV1x1JVzEP7j7G",
403
- "https://media.fxhash.xyz/w_512/QmaBWmN6gbSnvdEGnfGeRs7L33rVXBCxgcqzs2wTRm8vi9",
404
- "https://media.fxhash.xyz/w_512/QmcamJF53xavexdDoE2orjvXKYsGag6F6oericXG7aLXVZ",
405
- "https://media.fxhash.xyz/w_512/QmZtZyEbNcuqq6Dm6XoJxRAHsfh4xEtySkNimLXJXXGXjD",
406
- "https://media.fxhash.xyz/w_512/QmNdMAVUsq4nL6GRcyQvFkuqoZFdvZQGGW9XFiXfNNmdxq",
407
- "https://media.fxhash.xyz/w_512/QmfTySDZVS7GendFUpCTTL9SerXUWvudEiKqi4CSpQM7ME",
408
- "https://media.fxhash.xyz/w_512/QmPgXfgJGJLeE3qWy5ibfx4UBTmK2SZxWehpLXBRCaiq33",
409
- "https://media.fxhash.xyz/w_512/QmSdjips5Ec54UnkSHdWS2wttncHmJXTBKGKNWFZ9kBGZZ",
410
- "https://media.fxhash.xyz/w_512/Qmdq4SL34x7xpzXDDHtwypRBWhbCkL1uqnXaikJ4aj1RCj",
411
- "https://media.fxhash.xyz/w_512/QmWZA4ucJvFeHTcd77JUQETaevicLgGy5UeKJRAL7Ux8uw",
412
- "https://media.fxhash.xyz/w_512/QmdgxZ5n6eEjas2eS3rdNhVrUnizPnWroiBGhYCGFWWzPi",
413
- "https://media.fxhash.xyz/w_512/QmUQPzUZY4pg7gMAHPUEgKNkw9haNG1WUphXgJvzhtStyd",
414
- "https://media.fxhash.xyz/w_512/QmPRKm3yDrtZTVzXnfDKbeFWnFDNxt2Y9Yhoq2PqN3voVt",
415
- "https://media.fxhash.xyz/w_512/QmPkGGY7BZbGtGNkwMA3pMF7gUEWJJ34FsU17wzaWTHTWw",
416
- "https://media.fxhash.xyz/w_512/QmRGpC37twDNrn12J8hC2ij63fq4SjaXKSHoqDnDJhuAcw",
417
- "https://media.fxhash.xyz/w_512/QmYCunGqCfw763MB2TewT8nJkKZ9NKpBcLQULw93Nq6NLP",
418
- "https://media.fxhash.xyz/w_512/QmRZRY517smVUFN5rVNqZwXAKCnswsPXYYoAKzpTPssnta",
419
- "https://media.fxhash.xyz/w_512/QmVcHiGVRk9cPPhD9ReFDBxHKPTJw35r6R5A6MzYi6YAy2",
420
- "https://media.fxhash.xyz/w_512/QmS3o49o2ETJi7iZGyT9i4GGfJmWyPg27GpxVoUGQt4j2G",
421
- "https://media.fxhash.xyz/w_512/QmV5BawprCdPGem37dffGVm6XjNyvLCGMcsxjA4LWX5Rrp",
422
- "https://media.fxhash.xyz/w_512/QmfRWSp8HHWfWwBDxGA2GbrHd3gPidD5prav86gFoCdFK4",
423
- "https://media.fxhash.xyz/w_512/QmcCgxmxxFSNSVzrhGjo1EdtxxviauaBHsqYrAxysbwkZG",
424
- "https://media.fxhash.xyz/w_512/QmcSFvrYBwZNDVcptSaNXJKVesRTnG8732xR2VxacYUgDV",
425
- "https://media.fxhash.xyz/w_512/QmcLGxdf5fvJqqYJKPC7j1PE2EkWEB43y5k9dB7rw5xJEB",
426
- "https://media.fxhash.xyz/w_512/QmZfuGF2M5RNUNQUJkrpgLhmozqftU2JfLPWiYbaGWJyhL",
427
- "https://media.fxhash.xyz/w_512/QmeqxXBBX7gnyjy9gMWBCqPxGdtD3cU8dV3Qav8HLifBor",
428
- "https://media.fxhash.xyz/w_512/QmetjwdZgrcdiLV5ipumXuWwJNxT7Zdh16UGmGMcp853uw",
429
- "https://media.fxhash.xyz/w_512/QmPk8t6MdAKh8AUnfRmKH1Swnzv4WNqzCVT4cWKukFm2GP",
430
- "https://media.fxhash.xyz/w_512/QmaZGgFJ4VcJNsBbcao8NBqEwWvcdMFvzkatBMzTexxeb8",
431
- "https://media.fxhash.xyz/w_512/QmUfZ8Ce589hebAEii2qRQSmkSDWnBLwdLYuLWSv3ckcLy",
432
- "https://media.fxhash.xyz/w_512/QmeCreHXB1pCHfvCzPymtcciVtTRoW3PwG8bx9SeSRVtLJ",
433
- "https://media.fxhash.xyz/w_512/QmfRYycMSbcRsThzLDRcTHmKgitZdTCRFCEL9D8m4ekrHb",
434
- "https://media.fxhash.xyz/w_512/QmVcHgCCkBUgsKpbCSkokkNxAzHnz9kcLpBSCdyk5UGgEo",
435
- "https://media.fxhash.xyz/w_512/QmdQLgn3Cim8UYuy8cv8skb6bvHTroHvqLbKy7BWd9kqr4",
436
- "https://media.fxhash.xyz/w_512/QmbpETftE5z72pfjdY666ALFAxvB4fPnaT9GDGLvEPyzBB",
437
- "https://media.fxhash.xyz/w_512/QmPa6ycNA92DyG64pXE1vYRPUegqCGNaURhmeEf1wPVWWC",
438
- "https://media.fxhash.xyz/w_512/QmenjA87ACk32ZgN5rJdZPZdBpHCZqgYuZcJBv63QespoJ",
439
- "https://media.fxhash.xyz/w_512/QmYgsAiH5zuyiSvMqiv4etpgubwkKxvbnVqwpRzDKVePGR",
440
- "https://media.fxhash.xyz/w_512/QmYMJG7rVJUbM1v9EDNE41MiPnh2Z1JCrGepsvS4ziuAEM",
441
- "https://media.fxhash.xyz/w_512/QmaWhEAAAHiZKG9Twg9bXczzFehreeegPm9ygPV4hdHr4h",
442
- "https://media.fxhash.xyz/w_512/QmRRsVrfUCaWfz4sncS9aBhoQ4bHiLgYen523A3SsNtqSD",
443
- "https://media.fxhash.xyz/w_512/QmZ4rTJ93Gg5of4CNmXs6Y87EyksPNmZVNGPAwGbu8evFr",
444
- "https://media.fxhash.xyz/w_512/QmPWGiCLwCm8HG2n4aNpYzrKNDRaZhRjrLtXNfXFRP5zNR",
445
- "https://media.fxhash.xyz/w_512/QmRfgC7JPdT8NkBXP8v5xL4baLADxnX3oTEi8n6LTHp4Jr",
446
- "https://media.fxhash.xyz/w_512/QmVSSBxtHvDj4CdbAvSP7paDxRQAyxtbow5bmcSPT7VaNY",
447
- "https://media.fxhash.xyz/w_512/QmbPzgdABgXwcxNTYCv1AbZSEr9gYYPpSK82BSUHMh9F3q",
448
- "https://media.fxhash.xyz/w_512/QmRoga8FXjYBbyA9cKZXVxLe1N6LZZcsGYNc6LSPC3Hhk6",
449
- "https://media.fxhash.xyz/w_512/QmfTPdsHBTwhjvazQFTT5JSk4XHe6F7DNwxUB4vdL1BoBg",
450
- "https://media.fxhash.xyz/w_512/Qmd8n8pC9forQnPbyN3NyLTVo6bTMnDNDuK7btTCNS4ZN8",
451
- "https://media.fxhash.xyz/w_512/QmTVJXWAxHoh9mr9cnmZf2FzJCGKpZDv27xQwWq7xDfbUg",
452
- "https://media.fxhash.xyz/w_512/QmcM9cwqDsEW86qCkL57ryFDWPP7t2j9cwqYTCgdj8Doqz",
453
- "https://media.fxhash.xyz/w_512/QmVQ6cAzqMK7QKLFnNFqpeVuDjY2uNe2KAV8Uy33A9Snwf",
454
- "https://media.fxhash.xyz/w_512/QmYjn2bKv5Aoc1gUr5oRS2rJ7T4P3s2GCDtVKh6wfDXeQz",
455
- "https://media.fxhash.xyz/w_512/Qmc5K3BwusFrGyfB51sSqcxBU1Zakddw98QHbd7Zr71geu",
456
- "https://media.fxhash.xyz/w_512/QmVjFfDPbd8bXcgz73HFqcniQvZZc1wXuCqPYCyAB1ayV6",
457
- "https://media.fxhash.xyz/w_512/QmNiqbUMZCoTb3QmyA5sPVQvXynzu5gASVRdaTvh8AjqGC",
458
- "https://media.fxhash.xyz/w_512/QmUnAfe9Bg9cKkMXevMFb1byGdRMuHvAKLR2bdanxkTMUN",
459
- "https://media.fxhash.xyz/w_512/QmaC5nbaqk5a4a7sjJnxx2pZFKrBMArGjJwN5LJtYsLvmu",
460
- "https://media.fxhash.xyz/w_512/QmdWx68z9wS1Q7GYft1VZGKPNDUxRdPJRpjM8bi5poVzAh",
461
- "https://media.fxhash.xyz/w_512/QmfHTn2Cp2DqKbLLdGocwC2LvEn7EtW9R8yTGEoM3aHvRv",
462
- "https://media.fxhash.xyz/w_512/QmcQPNZK8Q3xPHbzixZGtTyTTsoXjQrUzUpCB3DhAaPS8m",
463
- "https://media.fxhash.xyz/w_512/QmVZ13pafa1RkA2aRogz9suxUJLnMJScH8yTSZ7UtKAWjc",
464
- "https://media.fxhash.xyz/w_512/QmcE61w4ocAtMpcmtHJykL8tu5ZgZrFvzAHipy9Y4tnJs5",
465
- "https://media.fxhash.xyz/w_512/QmXRDAaNjaB1wyaEkZZ6u41ihW89sQBXdSSxRiBovEaTiT",
466
- "https://media.fxhash.xyz/w_512/QmRHp5vPMf6q67fpVZNZkuHHXDetGkyHYDgP9grempX3Mg",
467
- "https://media.fxhash.xyz/w_512/QmeLH7EniEGMxUbxnCfc76gX8awfuh9gCqjQVr6Ki4Yk7D",
468
- "https://media.fxhash.xyz/w_512/QmbxTtRwjNGxNVCUxFVLnyxWTMvTVNbZup9VGuNbnWoXCk",
469
- "https://media.fxhash.xyz/w_512/QmWybLoxZYoisEP3Ud1k19RbFTCRLcNqv2aoCiDV1ipC9i",
470
- "https://media.fxhash.xyz/w_512/QmPNdWy5KUyS2aHgMpG9Vuy5nSkvXHjqpDkwNxETMnh199",
471
- "https://media.fxhash.xyz/w_512/QmfKzpWDodvkZtY8QA5Phhy8pvA5ik2TE7ZSdz22jfiMm2",
472
- "https://media.fxhash.xyz/w_512/QmQFTyHoCtAru6TkBeRkxa9eHUZkg5oKtoQDotstLZLoZ7",
473
- "https://media.fxhash.xyz/w_512/QmNni29NR1TyUUHFoRiWViYeDY17D811qqJj7HryeareJG",
474
- "https://media.fxhash.xyz/w_512/QmcdZX2nE64trTBPZSXURWC7eHbmbjh8KV4hKBu6fzWzd3",
475
- "https://media.fxhash.xyz/w_512/QmWLqPRL4Gq74Av9D5XKkC6s4DkzZYppaD8qEYa4AieDFE",
476
- "https://media.fxhash.xyz/w_512/QmUrfvDVRv7mrWNkkb71bpaop9iPABDnXHPK95Z79N8zUk",
477
- "https://media.fxhash.xyz/w_512/QmQwe8v8f4UaX3JqKksUNU6yJ1v1M24KBYLboZh3Eskqhj",
478
- "https://media.fxhash.xyz/w_512/Qme6qEbZHpi4Yn7Eqhc83KzoTLzV7vDeTDpMy1Wsakzywx",
479
- "https://media.fxhash.xyz/w_512/Qmb8qknq7LpV1esM6xRpHV8HSavb9woRVTqHB85xyRqK8B",
480
- "https://media.fxhash.xyz/w_512/QmbXpDVrMeSP9rK6ormgRTkCHkSwhgosv6ppzEHShdxuAn",
481
- "https://media.fxhash.xyz/w_512/QmcyQ8CgEMWjG9L4AEUfJUFaStxqJ71VXTirHar8XkygNy",
482
- "https://media.fxhash.xyz/w_512/QmNjL5gsVytw3BYt4okEeNCU1yin3F1P9YJK7Dir5Bt5Dj",
483
- "https://media.fxhash.xyz/w_512/Qmc68jpxUBd4BsJiaVKTSZMa9dwDAs4eqJwcyaTTh9okpe",
484
- "https://media.fxhash.xyz/w_512/QmeKgvLXe7sFGUTwRN8TjvE8T1rVcaZVgb8di1tcy2A6wt",
485
- "https://media.fxhash.xyz/w_512/QmRXSZnGaMcFHoGPPR8M3w74cJWadEdBdF8Pvzpsymg6uB",
486
- "https://media.fxhash.xyz/w_512/QmeP3W1oqL34CVe6MjSJN9mWdQtaxdncpW1vuY83oJoTye",
487
- "https://media.fxhash.xyz/w_512/QmQeMPUMS1PHiXSexLMvB5xVxoU3dz3jAdHqiMXeSiXJBy",
488
- "https://media.fxhash.xyz/w_512/QmQCNVznGKRdHxvNy2hJJeaHKYqRiAPCTd2DU2xTLyucLK",
489
- "https://media.fxhash.xyz/w_512/QmUVkNH2ryMUs8Vkeva7i95AavTz6kyYdsnaQDXRcQhmGF",
490
- "https://media.fxhash.xyz/w_512/QmVupFUtQdFzjhwvJ7pvAQTVLXeqveLQ3FpbRmmKMoprJQ",
491
- "https://media.fxhash.xyz/w_512/QmSM5KVuAewKCEyWpyXnSb58BkgS8pPUYYyrw42Le98aNW",
492
- "https://media.fxhash.xyz/w_512/QmW1567HAVM2sMobypbzSN2tS577ny9gckqxJdHzes15mP",
493
- "https://media.fxhash.xyz/w_512/QmaqGsvtmWK3qw8Y6FaL3nJtmp8Sy1N3NJTWCEE7kf1VGk",
494
- "https://media.fxhash.xyz/w_512/QmSFXjuXYchhJotNeyC25qMiNgy34X6PMEmqPceP1KFHZa",
495
- "https://media.fxhash.xyz/w_512/QmTg42Gx4R81MLNBbFDo8neGRBbSwiP1RqpR7bRK2MBuwr",
496
- "https://media.fxhash.xyz/w_512/QmSTWDY5SSun9aAjRMc6UF26wHBgesEtQGeY7zmmK2Ncpo",
497
- "https://media.fxhash.xyz/w_512/QmPRYt51VTRdeZ6WMNoXJgjQq6fWcxsUzAk9nprpxSgtEV",
498
- "https://media.fxhash.xyz/w_512/QmX2WLzMmRDPz1ZwxaHQpHgoYWkPveh4CcWKmNWukudKgw",
499
- "https://media.fxhash.xyz/w_512/QmSxbDfE5h5392GWe4VWpBgjbpUSQv5MDSas6vXwJXgu9K",
500
- "https://media.fxhash.xyz/w_512/QmeYAbPnfdVqu9EzZr4HDWrLtSYBnt4USseAiiLSC5eBxF",
501
- "https://media.fxhash.xyz/w_512/QmeX9vvxqoQQbY7viQVzhyjQXXhmkK7Vmczh3Qq5NUtDww",
502
- "https://media.fxhash.xyz/w_512/QmVYgQEHLW1WXnfCr2iqqDMrQzYwM7Rxbq25UzuVHW5gRU",
503
- "https://media.fxhash.xyz/w_512/Qmdc96MGPhCkXRtMPw4V2dGxY8fQG5uRXfY9F31bY71fh8",
504
- "https://media.fxhash.xyz/w_512/QmWU6ZM5EPcGh2V9MLSJXjAYUbKZ2JawHvqkihC5kGkiSv",
505
- "https://media.fxhash.xyz/w_512/QmXhQdKSnkjJftzXVbsH5Si85rjrzicAuB8ApFf5AgRxq2",
506
- "https://media.fxhash.xyz/w_512/QmQdqr1g5XEUcuJf2FkrH2cV5KviSnee7V3FBbEZR57y76",
507
- "https://media.fxhash.xyz/w_512/QmY4WhQYZ3gTrCYMN14AqwtctieReyxeFgkJoUP2bqBH1y",
508
- "https://media.fxhash.xyz/w_512/QmQp3waLsG8DaTY7RZeLde5UmB3KtgVhNvWoWzQ2o2CfVr",
509
- "https://media.fxhash.xyz/w_512/QmR9SqjsuJLsbJsJ7N9wgCLaDq8EhySRwWUQ1oY8u6W61f",
510
- "https://media.fxhash.xyz/w_512/QmbP45xzPbjWLH9u8B5RwXoUm714ZHPzUeno9KYCQh93HK",
511
- "https://media.fxhash.xyz/w_512/QmPvTq9ceMDMnGnQ3cQ6NFNAdfGcbxF9JrF3JwUxUUG7nu",
512
- "https://media.fxhash.xyz/w_512/QmSaFmJGTrQvPPkme4zB9yZHa1sriJ7FiWsBwYZB1F2ALu",
513
- "https://media.fxhash.xyz/w_512/QmWCdqJe2dvQ82T3C9iAkyGgEEkLFayCvfQ1AuhuGcnZ8A",
514
- "https://media.fxhash.xyz/w_512/QmXhdnbPww1smiqGTZvDtVL8QEqZEf9hoKrdYEQyZjHJFU",
515
- "https://media.fxhash.xyz/w_512/QmX4BKhtWybmmMpaysxgBSPCMvPzUpqYT3iH3W5sUC11jY",
516
- "https://media.fxhash.xyz/w_512/QmTNoFuXjwRXj3KGRfCqe6kQhGWTZpgfrz4GHZvwZezrTK",
517
- "https://media.fxhash.xyz/w_512/QmYAsiZP7iZjztyptcx5bXq1GATtxsTjMFbTkRwf1mgwsb",
518
- "https://media.fxhash.xyz/w_512/QmY2RhnwMGu3YnFKHWDtyp14CwKF8nkUSTmkHXhebWHRzX",
519
- "https://media.fxhash.xyz/w_512/QmYr8ZcfTiYE8NafbysH8886mi13M8aPkX6f6YzhqQBqEB",
520
- "https://media.fxhash.xyz/w_512/QmdYdkfmZttj3RwhCgJoWXjiVCG7RANpDWFM6haz32vnSs",
521
- "https://media.fxhash.xyz/w_512/QmUw8HKUckes9FNiZ9L5bhftsUzYAHtSy7ySo7MSp8G191",
522
- "https://media.fxhash.xyz/w_512/QmP3Xh1Kbykr22Cx4jUejf3e9DFprsRSf2C9jgRapGrou3",
523
- "https://media.fxhash.xyz/w_512/QmX5SMsrTRX6rgCUSCkwXMnbx7mbgZDTdGi3m441WYibVc",
524
- "https://media.fxhash.xyz/w_512/QmSRdUnLHKbTSEtW3ArBcYN6uVNmwGMSac9jz9V8w4nsgf",
525
- "https://media.fxhash.xyz/w_512/QmXHzMyERwEecQEGL1g2F1jC9BQih3a86sHbQnZLxjvZGQ",
526
- "https://media.fxhash.xyz/w_512/QmYiy6Jw2PHDF74Y3tFMGcvDzHyevooevSGhiGmYYjvvcW",
527
- "https://media.fxhash.xyz/w_512/QmXYDwuJyGePzi5BZk5Sq4EyJyfTd2fohfBpWPvDmi1apq",
528
- "https://media.fxhash.xyz/w_512/QmeUQgY5KZQXUWAMtKdCYW1FBJVGa8QyNth28DiqiBgaN5",
529
- "https://media.fxhash.xyz/w_512/QmW216BKJFWaucFj73BmpK8sBVueofCEAefsWS8VAJaDPr",
530
- "https://media.fxhash.xyz/w_512/QmPdaSEZzbHVu6kHxi33MpC6Gpy1yB3AiqJRTcGMsfcKLt",
531
- "https://media.fxhash.xyz/w_512/QmZFRdtjvkVfFH45af59yDUqiFRt2g6omUCdBMGgRFYe3W",
532
- "https://media.fxhash.xyz/w_512/QmPZLa7RQH1NXU2wdygqyrJR9ujf44jL3SpYct2LMXbzVZ",
533
- "https://media.fxhash.xyz/w_512/Qmbp8UpKD2A1XcwrjeBSRZKUqJ9BV87f6ye2kH8V2fJ33V",
534
- "https://media.fxhash.xyz/w_512/QmUiHaAmewGCFoyx663FbnG13cie46c2WFd3H8PybfNssn",
535
- "https://media.fxhash.xyz/w_512/QmSDiXxLqHEb9uGkpfZvpURc4DTdqL3PaCCvw35sfpFW1y",
536
- "https://media.fxhash.xyz/w_512/Qmb4Ujbc98NXV8HKf3V6MvgFD6Fo7Uf4z7j5r4xndr5mPY",
537
- "https://media.fxhash.xyz/w_512/QmVkAkWcVnx93RLDzJPAttaqR8cfDVAHagYqsWThDuWtvb",
538
- "https://media.fxhash.xyz/w_512/QmQGoKD8whCoyozsVLXeX2w3SHE4X67K3VGqVuuPZyvMpC",
539
- "https://media.fxhash.xyz/w_512/QmPEZaKM5bd4i2Y22tpKajSSKt7nPkxFB2vdAdyed8fQFa",
540
- "https://media.fxhash.xyz/w_512/QmbJRSoJGcoSuNG2cxYeuCfkjWyHt5omwg7r5SYqphHaec",
541
- "https://media.fxhash.xyz/w_512/QmamK8u4su5anNRQL6JgesAG6BJwFZfA1uzN2YQLr6iQxG",
542
- "https://media.fxhash.xyz/w_512/QmXs3SXSqeMH6qxNaweBAxm3Bwq3htjJHgFQu99mZUN2X5",
543
- "https://media.fxhash.xyz/w_512/QmZFYcFK5SX6jAc3Mzc6poGu2bix6EhMXX4YncXxZnRvHC",
544
- "https://media.fxhash.xyz/w_512/QmNYm5X4EsTUBGr4SenGAE7Z7MGqfZo2yRfbQx4wBZKiky",
545
- "https://media.fxhash.xyz/w_512/QmSEhxWZGxACHM7Q3idyHUpn2cVsS1FRjTZcra8rQRJBxk",
546
- "https://media.fxhash.xyz/w_512/QmPjzzjcMUbeS2PvbFAEsCh4LLwKSyJ2q8fPDbCqyrrybM",
547
- "https://media.fxhash.xyz/w_512/QmaTS2cStkFGf617GukoHtwEu5ZSgrRBuD1w9mqidP6bm5",
548
- "https://media.fxhash.xyz/w_512/QmVxkYKWFDHiptoi1Bf8EGJnUsUcKAPZ8P8zE8EoDDqUV4",
549
- "https://media.fxhash.xyz/w_512/QmbMMzZbQddFPdJx2HQ2ajxPXYaxK5pP3DvBiRvRPgecnS",
550
- "https://media.fxhash.xyz/w_512/QmdYy4kPmFMjizL3Zf76Xm9K69Zhv5NsZxi2xAVwngkiNt",
551
- "https://media.fxhash.xyz/w_512/QmeKToLPEbZrbDsGVDU9QmwFbPiBeJbhtnhP3MNzCuqAM1",
552
- "https://media.fxhash.xyz/w_512/QmQpBwXv8pYjUS7tuLMTFCJJhDvSEQi8rMHqrr3uJFKpLR",
553
- "https://media.fxhash.xyz/w_512/QmVdR2eUqqCs85peY4QxNkNGujATedS5mWRc3U1a7D5ykw",
554
- "https://media.fxhash.xyz/w_512/QmZav8HFKSPshGmZ9QF1TvvJgLf2d7U6nHmroqM6Stutaq",
555
- "https://media.fxhash.xyz/w_512/QmfLQenyV2kJP5tdKuxRVR3DN2B7DFtmHHZiyTUHwV4CVU",
556
- "https://media.fxhash.xyz/w_512/QmbLQonAyhp95WyyfKdVQjg7jj3C7Y8H6dXibhTJHnmZPx",
557
- "https://media.fxhash.xyz/w_512/QmdsWtrnYwt97s5GFkgzJc4AkHnFujdF8cQHpm5BAuP9Qa",
558
- "https://media.fxhash.xyz/w_512/QmPx4r45ZVVhYtFrfvUCrpTQLVBuqb5ZYUV29GbVBrroF1",
559
- "https://media.fxhash.xyz/w_512/QmcffU7xmsQeZBXMWwtMXSRBhaXLXi7YHpTJMqb4tm2psD",
560
- "https://media.fxhash.xyz/w_512/QmZ1aNSqsotSXDnAGCyvK5jzuW22ixCVfhWoBSuysT3Drj",
561
- "https://media.fxhash.xyz/w_512/QmdSE7UrV3j46Fux7LfuujpeQMqUXR5u6or62M19VmyjVm",
562
- "https://media.fxhash.xyz/w_512/QmaZ9wGf1MGVzX2vnsLyzW5r8RW7C8Bc8uV3NZEk4dkDP9",
563
- "https://media.fxhash.xyz/w_512/QmSQSvJBzf4wAqVLFvEX49mqt3fiN5JhgJshG2wdJu5dwd",
564
- "https://media.fxhash.xyz/w_512/QmY6HvEv8AyCQH3wAGdgAPtGEVBjVbihXZDn5vASSxPgCK",
565
- "https://media.fxhash.xyz/w_512/Qmf2tx4WjeDcG68w3sai9Jv7B8M7ZHbLHHidWxC9iRqTag",
566
- "https://media.fxhash.xyz/w_512/QmWrabuG1dae3iZ8UzSsDfQMsm9STWMHXnnKrdxRP9k6jj",
567
- "https://media.fxhash.xyz/w_512/QmW3o72hbuU3hRadRoGHGGnczguyDJxmutjjzVuju8Ha6V",
568
- "https://media.fxhash.xyz/w_512/QmQGFRUAF8DdWprGR8HN8Zer3ByL4LPhGfF5mpY3AwDbXD",
569
- "https://media.fxhash.xyz/w_512/QmWHcJ8y3Cp2ggFDSHWS3atVqmMU21jb73dXvk2ERWQANH",
570
- "https://media.fxhash.xyz/w_512/QmfNKvg8mx7EUtD612zVK2eyLYcJ1vNB6cJENYXgkgr2jD",
571
- "https://media.fxhash.xyz/w_512/QmVm6bqRNM4k136mWrdwGVnzokWEHVv3tLAaCzPzDcwiVb",
572
- "https://media.fxhash.xyz/w_512/QmVe3isctNa1GzPjBqZd1t6FvG37k6Scbqa8YFxCckfYxy",
573
- "https://media.fxhash.xyz/w_512/QmfBU7amNp1N2Pkbm5AXrJcTECUT88TKtwxE77VHZq6Lac",
574
- "https://media.fxhash.xyz/w_512/QmfSv8uwpnhhtdNbtFuXno3XoSAFcYM3u32ieFT1LX64EX",
575
- "https://media.fxhash.xyz/w_512/QmPAbs5S3Mv7R9SecJhHm6yy6T9L7vAJeFs1NgUnnG4P9L",
576
- "https://media.fxhash.xyz/w_512/QmP8Gx8v74rFJggoGZW4BgE6UERAoihBhi2K1P9duXoicA",
577
- "https://media.fxhash.xyz/w_512/QmT9vxN5S2uAUfHuHHcRkFVtKSyrHvA8uRcFMkNg87L4DT",
578
- "https://media.fxhash.xyz/w_512/QmdXTtYWf8MV4eYZGL1EjyqmoMRDRAAE8QfwA4obq2vKdp",
579
- "https://media.fxhash.xyz/w_512/QmSTb3uyCC9dGX1ZfSXZxRTUDpedJh9oRH3Ui6LGkq7Yvy",
580
- "https://media.fxhash.xyz/w_512/QmVXLGrJ3eKgkf1XmXb9e6r8onNpUbUxfmQ1vRMQzbvxvu",
581
- "https://media.fxhash.xyz/w_512/QmXJ1cz1NGB5GZGAv3wmfygXaVYSFCRXfYLWCZAcLUpzEz",
582
- "https://media.fxhash.xyz/w_512/QmS1mKaK3WfRkAAnghbi4uTWMxqSGNubHZnXAq6nueEa8R",
583
- "https://media.fxhash.xyz/w_512/Qma2vnmCKYv1FXPfPDMAuyv6aaFBM1eWxhGvGgdytVWZJH",
584
- "https://media.fxhash.xyz/w_512/QmRaeRmZaEuvqmWDyqVv8NwRsCVn8F74tqhRLJR3ikH7kp",
585
- "https://media.fxhash.xyz/w_512/QmRqyxwBFikYy84h1HboazUeUkuQA8QMb5FK8CByJAZxsJ",
586
- "https://media.fxhash.xyz/w_512/Qmbkerxz7y6bVgdqXL76H4pEdADJLjJEpE94DJsHvGpbxm",
587
- "https://media.fxhash.xyz/w_512/QmQ77yJmWoxQi8v36rVE7fHHra1dp4aTLtTDmoDM2iveed",
588
- "https://media.fxhash.xyz/w_512/Qmdn5s5JRDApvjmhT5g7X7KJ6d1eqiNxkHEBBB5oGZqUq3",
589
- "https://media.fxhash.xyz/w_512/QmWSkt6c25ULsMA8GJBgZLwiUw7khWsq6ff16t5Aa6mm8W",
590
- "https://media.fxhash.xyz/w_512/QmT8HifxeUaGJVj1ttUAo8G89DFjT2m6P3ZsK1wQh4J8hT",
591
- "https://media.fxhash.xyz/w_512/QmcS3hU9x95UMh6UcwSYqLLTbS8ug2tSjff3PsMgPQ7974",
592
- "https://media.fxhash.xyz/w_512/QmcT9PV5MrigpTJbZzTsDSkYEnEieXic2umFXMdmav3Eqi",
593
- "https://media.fxhash.xyz/w_512/QmWp965wxeWK3gjkuqPYb4MbzCZXsxhRQgSfdJp8b1rNxD",
594
- "https://media.fxhash.xyz/w_512/QmdgMVk3TG6sdJvM3tKFbgXNi6bu8N8vT83k9N1So7Dbs8",
595
- "https://media.fxhash.xyz/w_512/QmPmwJUsqwXrHKizf4DvuVLyJQ2LN72gm3HydX41Ssi25D",
596
- "https://media.fxhash.xyz/w_512/Qmahv1Hpo8K3ncdSbRG2e8Wf2skcu4SYPWQmoRPPyaNLe2",
597
- "https://media.fxhash.xyz/w_512/QmdSbjrRqRQKjNczoLGuzwpDn2q673f8WqNnffCGrsvi1Y",
598
- "https://media.fxhash.xyz/w_512/QmeqhNjRxewZmbSzqwUudUiBmadbsrSRcEE83aQXwk2WiF",
599
- "https://media.fxhash.xyz/w_512/Qmf592kZRgRuy5CRgUXAgNrn6TiEGDCrPSAEttf4c8SWAz",
600
- "https://media.fxhash.xyz/w_512/QmPaodEFu4ufEi4hVkPbC8EfBmW5F4mqxrHxzBp99DaFgN",
601
- "https://media.fxhash.xyz/w_512/QmNTFhA47ydTu77Ccswne5CX8fxRNWjwUNKvxUWYaFS86e",
602
- "https://media.fxhash.xyz/w_512/QmVyDEvZ9djHxUpjvpTsVME6EYiuXgdwj2rgGq4dD2ZvrG",
603
- "https://media.fxhash.xyz/w_512/QmToqbj9QMWwS9xnECNeAYo2bLU1VWxCUDZCv8B6teMn62",
604
- "https://media.fxhash.xyz/w_512/QmbwyrcYhvu4F5ubULjdEbjXh6PWdLsz9aq3nsdVhf3Gxn",
605
- "https://media.fxhash.xyz/w_512/QmPcyrDsTbynmZAtvr5ejnxpHGxJtexVnKiLjgKXXrFb55",
606
- "https://media.fxhash.xyz/w_512/QmbuvkD2hFWGTfqVueHCK3quKTnWudkgErJtVJCAdnd7o1",
607
- "https://media.fxhash.xyz/w_512/QmNytKcDYN1XMpmd1voXuVbQuXjukfJfawM3zgsKrppNK6",
608
- "https://media.fxhash.xyz/w_512/QmcN8PX2WZQfumY8CXynG4Si9JHbrsGqT1k4i7vj7i3Kyi",
609
- "https://media.fxhash.xyz/w_512/Qma7LZxj6CwgKhzMVynYCdbdo3JgXUK9irzthyPLY188Tj",
610
- "https://media.fxhash.xyz/w_512/QmetspXLgfarug26WScSoVe7BfF4C369NDwgxxAjuBmpiQ",
611
- "https://media.fxhash.xyz/w_512/QmX4iQ7xXEDiPQmVH3vzL6yuYmjre95aKeKN4wCwea7zJy",
612
- "https://media.fxhash.xyz/w_512/QmaoCjEkBJ6pfV4RjB3G9jNVw9dNuFzJbZXMXfV71qeXj2",
613
- "https://media.fxhash.xyz/w_512/Qmeq28ZZPsvJBZghnwLZtzEEVAuDjgJcpP5spubdptQuKs",
614
- "https://media.fxhash.xyz/w_512/QmchuSMvkio9gLf66pL5u3VakThaFDAFucfNzzPwaBoMPa",
615
- "https://media.fxhash.xyz/w_512/QmZ2jDL9hYouC1iRewPLznt14fDtK97dNiN2wyoRbs5UF3",
616
- "https://media.fxhash.xyz/w_512/QmXCkoCgi6tNTqaWmG9jNigcNQGW5v7QcNzHXZ4z7oUoqr",
617
- "https://media.fxhash.xyz/w_512/QmUpPKVLeJgQM5sfjSyfeta4PhpRb3dtiGn4eQZv3mp41g",
618
- "https://media.fxhash.xyz/w_512/QmPHu4kwde4C1F7DxjjGtDiTunk5KLEio1PUnWuvLu9fi4",
619
- "https://media.fxhash.xyz/w_512/QmVM27AgzwdfVXmMNLxyvvx2R9oi9jNqQqFr4MBxRQnTo6",
620
- "https://media.fxhash.xyz/w_512/QmWC98jLxXbeiYkpjJkzDGTsqsnbRH9xy1J6WzcaTdvngf",
621
- "https://media.fxhash.xyz/w_512/QmaLPSLLoyR7hAf42qrUU7iFPVvEQAmvq4SXquvdVvTNWZ",
622
- "https://media.fxhash.xyz/w_512/QmUZRDpWtGBwZNiKFwfkr4g2n1ButjSiZy8BDdzsUZpU6u",
623
- "https://media.fxhash.xyz/w_512/QmQxTHGS5bqy7CwMAwHphvRR2bhWkMPFwvppv9RMJhCCDR",
624
- "https://media.fxhash.xyz/w_512/QmabMEGzPodCCdGUDXiaxW39QYWfhdi8WrgnUoFZB1S3oA",
625
- "https://media.fxhash.xyz/w_512/QmWQN18xiD5exw73Y6gB7aD6gBXQrAwVJTmt3fLFrNY1LT",
626
- "https://media.fxhash.xyz/w_512/QmcvpLxaJgSkgijU4BMAVgp6BRBmY3JM8nxyYkySps2MGP",
627
- "https://media.fxhash.xyz/w_512/QmQyBfLebKxd42magVDtAkhhRnRKrvCFmDNgFRFWgpiSJL",
628
- "https://media.fxhash.xyz/w_512/QmcWjpNv7G82UtW1BDp3cxk97btsrmNvDP5Q4qJWJsvoNG",
629
- "https://media.fxhash.xyz/w_512/QmXBBmXaP5J28jAcd6B7PRrokjpaedvwVqRukVpiV7PNF8",
630
- "https://media.fxhash.xyz/w_512/QmeGyWTVb976MHhvYyNzryBjpZrVwXYVimrocUtEn5gJoe",
631
- "https://media.fxhash.xyz/w_512/QmfCmkqGMvD7JqC9QBLQPQ36ggzTnpGjUCbZ8HjyAyKu6H",
632
- "https://media.fxhash.xyz/w_512/QmV7Hpuqah8brP1wQpibjkLjQp6jmiAii7kbetHwEZVdA4",
633
- "https://media.fxhash.xyz/w_512/QmQwjYCRufD1UCe9RdkkmY48oDNBTJMrPAKxm1uybveBoD",
634
- "https://media.fxhash.xyz/w_512/QmReugDHCkxZvft7oV3HMZ7HR3WbHCW2Ld6WCFuu7m6mUi",
635
- "https://media.fxhash.xyz/w_512/QmaqQkVLDH8Ct9qeppkebZXR7Xqe57uNPZbMJsq5oa8BfM",
636
- "https://media.fxhash.xyz/w_512/QmS9gma5aq36mDxHkqULUTZPVZ1tSx84Tn4WjLir1uUy5N",
637
- "https://media.fxhash.xyz/w_512/QmUCPXZuFDyBvuqjzaq7CLcQnEhaNN3YbFi5uh4o1jp69S",
638
- "https://media.fxhash.xyz/w_512/QmNMxGK3FEHSM9GBymE33mVt77CtL1GpG5qXkg1gAWavG5",
639
- "https://media.fxhash.xyz/w_512/QmcGG1s4SjoMK7fNg8GtgEoCTYP7zE6cHmz4jzTekoxUap",
640
- "https://media.fxhash.xyz/w_512/QmRibeztef4ECHsnvCjrxjuBbckGiTJptcvxMf5uKpTquz",
641
- "https://media.fxhash.xyz/w_512/QmUfjbq7HKxkpHbuyVxxnSWsRQB2TCoySzu5YUXM2wzL4b",
642
- "https://media.fxhash.xyz/w_512/Qmf8avoMPvJUMRCyFpaBQAoUnAxq6rtKcSTcfPHRDin7SC",
643
- "https://media.fxhash.xyz/w_512/QmUtbaaSdPRy4nr28Bpv3AbbL5Z4ipZT7KDFzg1Q3aPErp",
644
- "https://media.fxhash.xyz/w_512/QmPq8QvzNcwKHME7K3EeSwoPa52p7MAxZNa8QJ4yP4AXJg",
645
- "https://media.fxhash.xyz/w_512/QmbbYikF7Vxwt5h41YthPzxXVBjMS2NejwfdQTvqt3WXQQ",
646
- "https://media.fxhash.xyz/w_512/QmbQ1DmyDFfjApfEHs5og6kYzKK1dmkKr2BSYaMUTjHssu",
647
- "https://media.fxhash.xyz/w_512/QmcUG8U3JvyXaiHrjs9T6NhyReSWHt1ZnG7fiadCBu9BgG",
648
- "https://media.fxhash.xyz/w_512/QmfKJH4ufQJ7yPkc9sqkjbbgnggydPkQFnt1wuH9qwWX7U",
649
- "https://media.fxhash.xyz/w_512/QmXPd6qW4GpqQ8JzdzsFn24mH21caNTuXDkrt3cqNeucaE",
650
- "https://media.fxhash.xyz/w_512/Qmd4Lk2MpSd97MeigZ8HnfimbRFQe1fsAdQVXai6GbffT2",
651
- "https://media.fxhash.xyz/w_512/QmTXeuzr6TKWsV8MDfegbG4tej4fibBJnY59yJhQxsyNzZ",
652
- "https://media.fxhash.xyz/w_512/QmX5T1zUvNq5PD8iwRcYrDjJfs6wXLCw6jPG6atRWq6FJZ",
653
- "https://media.fxhash.xyz/w_512/QmQYzWRd1X5HeiLBv9JeGQrEFBMo1mK8zZBFobhqmR2ePE",
654
- "https://media.fxhash.xyz/w_512/QmNWqBJqVCK4z5wqRQcLxjEEs9PKLQb9MuXD6EsY3HyVWC",
655
- "https://media.fxhash.xyz/w_512/Qmdnw8RCxVgDb9cuCz9z2YECW3MXaqeTNrEjcDBCvFiRXM",
656
- "https://media.fxhash.xyz/w_512/QmZrBA2PdXLLMVdZUTZrqifrd9xPgrB4N4gzzFygkGnw7q",
657
- "https://media.fxhash.xyz/w_512/QmRDo4f4VADRNdMXVgESwAoacU7wHyAbYqsPJw2fFThZxv",
658
- "https://media.fxhash.xyz/w_512/QmeaMDpgfRZPmFYJ6UwRKZ5LAriQNAqbxEX2VFmrt2zZS6",
659
- "https://media.fxhash.xyz/w_512/QmexjuwQfsqvURtfw8NbvDoarZmUvGPAVcDYMntCf6ADRg",
660
- "https://media.fxhash.xyz/w_512/QmRfa33TLoPhHEY75BgCFCzpsMEbZmNyKbPYazPstmuSqR",
661
- "https://media.fxhash.xyz/w_512/QmZvVGxgJcC7WLvHV39mSF9F3fvtDkRi1Bev7dNFYFuVYD",
662
- "https://media.fxhash.xyz/w_512/QmTAD1A7x6dn2nyrvLGu9DqbThVmwo4LXVXu148z38ffh6",
663
- "https://media.fxhash.xyz/w_512/QmWGNGqVabh6y6immMZo7UmLjG7q2ydHsYWQhxL7mEws4F",
664
- "https://media.fxhash.xyz/w_512/QmRk7mEnreSdHu32E4wZX2tWLsXSsScgUvyZkc7KZQpXdj",
665
- "https://media.fxhash.xyz/w_512/QmfPnVvWiFusTdHyiyeu5qDz4Hw7zEnpLPtMDomucegdhe",
666
- "https://media.fxhash.xyz/w_512/QmWh9JFuaUh1ZVjz4SdYvGrDPno2iFpGBRNMioDhLataS5",
667
- "https://media.fxhash.xyz/w_512/QmQbg1c6Gqa2Znwwf4FcqnuvrghJEKYEjrrmHskcVWwtH7",
668
- "https://media.fxhash.xyz/w_512/QmZ8yCd4rnXdD8qk4e7gXRU89z5tSBZTNXc8VSFsc1e8bz",
669
- "https://media.fxhash.xyz/w_512/QmTFssuBYhURghhHftoNsmMg2m9QQnP9T9zUeo67yXUDwC",
670
- "https://media.fxhash.xyz/w_512/QmPSqaPnJSybzHnp3onbdeywKzrPZtwbMgLv1BnaGdqBV1",
671
- "https://media.fxhash.xyz/w_512/QmRgfCbhAJU6LjTP4NAgjixDKGdBGQaLDkLeSKkbijiNjk",
672
- "https://media.fxhash.xyz/w_512/Qmaaz4FJcGUzpaKxVYpHEtnX1kXKfF52LEDVkcpuBzFdBo",
673
- "https://media.fxhash.xyz/w_512/QmbSBvmHExt6tHVECtjHDYqKp6TJ8ZY8xfyTfG5TzndoJs",
674
- "https://media.fxhash.xyz/w_512/Qmas5Y1oDUavhFoovugLzTS61yRJR3ykD6ZaVKAntcVFxX",
675
- "https://media.fxhash.xyz/w_512/QmV81nF7WMqnjHTFeXFnd7CYko9Ur6MWyyQgtzxQCDVNYD",
676
- "https://media.fxhash.xyz/w_512/QmXoQuALDXR4JeCGYqFZZUeNcEBWBcdtipoeNUmQbwRSdH",
677
- "https://media.fxhash.xyz/w_512/QmWPS7XviJbMvqP1pW5qUyesciHSbynpfUw7Cgr6iZ4T7z",
678
- "https://media.fxhash.xyz/w_512/QmXbjdvLx6LYgW8nzXu2Wc1xV85PEUWEtDSvHDAX5LjmN3",
679
- "https://media.fxhash.xyz/w_512/QmdHQuZhY38LXx66qhwtNssuBKWXuwsFRy4SivgndCC8Bd",
680
- "https://media.fxhash.xyz/w_512/QmNaF4YaKsGiF8qKuFjhjWcJbgYQcuianqebnjtwq2yLJq",
681
- "https://media.fxhash.xyz/w_512/QmScyugzqLPAWgvLCq8Kq2NgoFDsCzMqC6jvERdoFt3dh4",
682
- "https://media.fxhash.xyz/w_512/QmekFFxETh51wezLZUG1CWBE7wfc3bMjdQ59H6BUo4KCHJ",
683
- "https://media.fxhash.xyz/w_512/QmVoXFLp2R9v5uqkPXjsRkmnQcJ4vrnMbY6C3TjqrczmhQ",
684
- "https://media.fxhash.xyz/w_512/QmahPBuB7cSoAN2JAH5D9tKUn4f73TCG76KMJCMqpjoJtz",
685
- "https://media.fxhash.xyz/w_512/QmchxdtRdCkQzZ8JpzBwzhxhNgJ2eVGqhCy6gTTTRFBR1A",
686
- "https://media.fxhash.xyz/w_512/QmcUadTJWfcDcXpQC7W7FGHBBmSEsZXaJhoqKhMSSDBfDq",
687
- "https://media.fxhash.xyz/w_512/QmP9NEYNryVBxnviLbv6NoioYVJXHo8ZpXLCKjE1hCyoXX",
688
- "https://media.fxhash.xyz/w_512/QmYscvUjob2BeAEKvY1cbGX1eXZv5uBYuD6DYG7Q2JNs54",
689
- "https://media.fxhash.xyz/w_512/QmWSffHGxJy7fsJDba9pTBZn58rAoCRVDFamPH7Hjs8DJE",
690
- "https://media.fxhash.xyz/w_512/QmNNS7bG3MG4RMuiqkEB4TPyEpeJ2NwaGGBqPxM1jcoNc9",
691
- "https://media.fxhash.xyz/w_512/QmexJLjo67RdfUUhJGzqCCzLHXmugyyvpNzn4BfdGPsKUT",
692
- "https://media.fxhash.xyz/w_512/QmarkwptJK8bH7MGnaR7MZJs8mW9ftYSdkZKpCiQPf6Rcg",
693
- "https://media.fxhash.xyz/w_512/QmRe1wL6ms6fb4Pxui7CfBXVzTVdVN7vGhbUTrkEhPLDPj",
694
- "https://media.fxhash.xyz/w_512/QmTqRDSK7jN7GbGgkExvUutAW7K2meJ9yy91y7w76La4AC",
695
- "https://media.fxhash.xyz/w_512/QmUuAN9W2nBxr1KnaqK4PDQrgDeHQyZ9h7Q9LvFBXeUpLN",
696
- "https://media.fxhash.xyz/w_512/QmST9ydKucA2BG1RS4BvN9EFpq9Gx4Xjw7CaQv1y3FRc3o",
697
- "https://media.fxhash.xyz/w_512/QmQUtzj9Q3WGoqY2cCe8vs16azkqsAkGs7ZcPB6uq7wdqn",
698
- "https://media.fxhash.xyz/w_512/Qma1bbomARcmHRQt1AYJ3Ab2tBAzDvf3p3PxQtNijbhec8",
699
- "https://media.fxhash.xyz/w_512/QmXWFiZK5ebSj2bG5BQwaU8gcLMXL8q4diRrrmJcvhimhU",
700
- "https://media.fxhash.xyz/w_512/QmYtBvA7QsBWVVQorkb9BQF6q553vCvxAhvFc1vd8dpF2U",
701
- "https://media.fxhash.xyz/w_512/Qma2YweMFVpE6sEPffnJCc4cXQsxMNALLT3hQTskcYvozm",
702
- "https://media.fxhash.xyz/w_512/QmddPfcdM7sfp6wBzeF22nNU743nEQdws814PzSBHkpDTo",
703
- "https://media.fxhash.xyz/w_512/QmYaTA3fY4GKwPE3DjV3qsnCeYeX5KQnCH6F84XDPJSYwU",
704
- "https://media.fxhash.xyz/w_512/QmdUhqTLHy4cpAjhnhTHvgrByEwFYLZNMfLKdVMAEqSogH",
705
- "https://media.fxhash.xyz/w_512/QmcfmdKfVixZRbNBTftBuSSxWtu6d7r6MAkXqns6Kj7vKg",
706
- "https://media.fxhash.xyz/w_512/QmY9YkYncyZATSwZFUqrwcWURDLc9UvcMuomR6Fb59MNNG",
707
- "https://media.fxhash.xyz/w_512/QmV3kE5ScaAjGUvDLZLwYxv6KenyreTnHPodefVYpiHw3V",
708
- "https://media.fxhash.xyz/w_512/QmXZ9L2PCusZTjgm3RH7Qe2eu97dGirSDq6uyoWNRcwHXw",
709
- "https://media.fxhash.xyz/w_512/QmX8gwcbPY32WWfZJRQc59uw1oMXcB5SiY8SLmM8ttZHCm",
710
- "https://media.fxhash.xyz/w_512/QmNp6LdzivCmeZhXw6yU8dGA2obDCnxgr9114XLAa3xLSh",
711
- "https://media.fxhash.xyz/w_512/QmSJEGqJpG1ev1fXPYCgBha6rvnSwBPF4nwPc47oXwV7zq",
712
- "https://media.fxhash.xyz/w_512/QmdrwcjrbNPR3ukWoorfphFXLVCredjgPf6SjsJQnEJFgx",
713
- "https://media.fxhash.xyz/w_512/QmNkCBK9qfRDESdxRSfEToPkgM7vznkz7E9m36mPfEfDrM",
714
- "https://media.fxhash.xyz/w_512/QmR12VNQ9Cfg64hboLUUsKv2SixpHpPDX3wYNxPXzzXDFa",
715
- "https://media.fxhash.xyz/w_512/QmYZpjQna8mxSNuMhz5EdqELxGPwNAYxAZ2n12i6FsMtup",
716
- "https://media.fxhash.xyz/w_512/QmPMmEKGVHB179X9MBWAxhaPcA3W5kcuowejTV9WPcWtd7",
717
- "https://media.fxhash.xyz/w_512/Qmc6Z1LZrDGjqoePkAfvLn4q37tPkdK5W5HMnpQQ5SqFYQ",
718
- "https://media.fxhash.xyz/w_512/QmTSPtQxpVpUw1aCBpcePgqwsQTJoboWH3dQwUciNkHLNh",
719
- "https://media.fxhash.xyz/w_512/QmTNpPzfjc1mUfSN2mEFbBxanf6YZuTE9pHkiuppJQoMMD",
720
- "https://media.fxhash.xyz/w_512/QmZr3e4t45DFztnzhEGN7Rqz2HB4ADNut8cGtzgV66wGN5",
721
- "https://media.fxhash.xyz/w_512/Qmap1NtfihFtuG9sfnjrmG4NRc64jFDSNenWBEL4gGdgM8",
722
- "https://media.fxhash.xyz/w_512/QmSAXLw9rEMcKpScqjCvtC6z99Tz4GQXPNu49GdVrXUVXv",
723
- "https://media.fxhash.xyz/w_512/QmaRqd1NDqRWxPPGjs4Nuv98qZn3WzSnP7tEceT9BE6bHj",
724
- "https://media.fxhash.xyz/w_512/QmZS29SXpXWrEqFCgghjmhBK51azPZJ3ZeDvWPLGL2udkT",
725
- "https://media.fxhash.xyz/w_512/QmdwwT86x9fo7Rgeo7SZPjjWKesfzWvzBXMfBStt17czZj",
726
- "https://media.fxhash.xyz/w_512/QmXo48MNPAHdXaAcfUa7p1QQh8HZ5vE7TiEUULfno64mb4",
727
- "https://media.fxhash.xyz/w_512/Qmb9K2pqVdqhGqQouyLMP4JB3aoHf1iyX8EMi1LXNteiEw",
728
- "https://media.fxhash.xyz/w_512/QmVthU1mkeUxdqjiDFWndew6FTkCnUES4YakP4MP7Fy6Wk",
729
- "https://media.fxhash.xyz/w_512/QmUy376nx3EbNctb6zd2cK9FfKzEydYQyXsyYDiGtcMg48",
730
- "https://media.fxhash.xyz/w_512/QmXGNEnuLcwtixQvWhwU78EfbVuhdfFzxMpuChXbJnU1K8",
731
- "https://media.fxhash.xyz/w_512/QmSHq4LopGW4RPe2m7Ygwy7TDuqhtowAMnMM79SVHQPwby",
732
- "https://media.fxhash.xyz/w_512/QmajeCUuEbkq9ak8QDaVXrQgFLmabumKNZ8wKQJoGUVzxg",
733
- "https://media.fxhash.xyz/w_512/QmbWSLisEHgWTmXZcYWzJYKthHmXvqvKCTJv4xQRZHJrpF",
734
- "https://media.fxhash.xyz/w_512/QmRXKtqMXzo3i2nBDhvqBDTSp9FVwfHanEWuTDpjjwJCYF",
735
- "https://media.fxhash.xyz/w_512/QmXtZd7WCTdPhcBy8fQR1wLpvPfVyg7Ty7K3yAjofCRBbm",
736
- "https://media.fxhash.xyz/w_512/QmZUWb6XH8VrYM7JYvMqJPAP23zP8KG2fmJ1zV6jX5RWxG",
737
- "https://media.fxhash.xyz/w_512/QmendbhmQJXTBfaiByQkravyiVLrzJKLbSETpt6kpAx8NG",
738
- "https://media.fxhash.xyz/w_512/QmZfJbR1ERW4YbqBDKCpgEwYbEEGN4ou4MnG8yAoAB3AVb",
739
- "https://media.fxhash.xyz/w_512/QmXHQdiqKEopZsZ1etYABjvYgnF9CKAxhUkrPrjcap8kkr",
740
- "https://media.fxhash.xyz/w_512/Qmdo2hShZTVQH3sffHT27mAW9uuXreduheD8M3xq68rMsz",
741
- "https://media.fxhash.xyz/w_512/QmcAfgwZCTqwqfx1DZQP4kyfyozvsmB86542N4gMU75cDu",
742
- "https://media.fxhash.xyz/w_512/Qmd5pvTochT9oi1h1j6H8HGox6gsR9GVYhvCkor7ambFqr",
743
- "https://media.fxhash.xyz/w_512/QmYpUGJCp9CVckiMCFWyokWvtK6MVdXC2XiUsShenDiBxK",
744
- "https://media.fxhash.xyz/w_512/QmaWjU8eYEdHEDU63WoBprw3nH3ZVpsua3v6JquEaWQBfK",
745
- "https://media.fxhash.xyz/w_512/QmYUivU3qJJ9gMWhuAsKEijhmgA9PCpbo2CRzeLumvJpmk",
746
- "https://media.fxhash.xyz/w_512/QmURtDyrdmkPAWKMUry2A7NVH5opV4eKMGgBHtJp32VeUS",
747
- "https://media.fxhash.xyz/w_512/QmZ7N64qSho9sUJ6G8G9qV55RvbsZmQUp3MA5dHtUXvwwp",
748
- "https://media.fxhash.xyz/w_512/QmPbpN1jCpBo2JTuF53CugWh1deAUhj8rGw1TzqLxnoHAX",
749
- "https://media.fxhash.xyz/w_512/QmRp7FvyCKVR8uzdweeQi8XvobT2UcQEAYfgYeJU7T6Nfn",
750
- "https://media.fxhash.xyz/w_512/QmcYq4AmqJEzyuXMoacB15uYXASZjFqi4H5dobtj9K6XqM",
751
- "https://media.fxhash.xyz/w_512/QmUkZA1jLECkcvdbKcWzrmk7jLGJSWYuaWumv5VKXMtLKx",
752
- "https://media.fxhash.xyz/w_512/Qmd2KXroCvwjikr2g4vme3dkav9iJ9px3BFChD3VxbTmzi",
753
- "https://media.fxhash.xyz/w_512/QmZYhbV6eYKmduTpDnX4uxLqiE5AKGHgiA4xdyLchWzrgX",
754
- "https://media.fxhash.xyz/w_512/QmdBs1opnRzPEnv2bgcvgj4kkGJL8a82phiVi2yUJickuy",
755
- "https://media.fxhash.xyz/w_512/QmSoY8bFtRVQwptD3VDZ57LuV9oBaHAL2ufax5fNAJ3sR5",
756
- "https://media.fxhash.xyz/w_512/QmNYGiNJoVATu7B29jxR3tqYJMZh1hHCFUQJ63TCFB5yBX",
757
- "https://media.fxhash.xyz/w_512/QmYHGo58FqLo5Y89R8krgQiPszoAcwrxLcxaBzuNEB8PRA",
758
- "https://media.fxhash.xyz/w_512/QmYevsBrQgSUC4zaVLZA6mVf5RGUckUtujz4JSw2AgiDXF",
759
- "https://media.fxhash.xyz/w_512/QmQdpTgCBBg6MGpbSj6PVf9mnKxcKkhnWife2QPXarDDN8",
760
- "https://media.fxhash.xyz/w_512/QmZX7u3iVeERqRRaj1znE6EGFXpizBijtD26714r2SZ6TW",
761
- "https://media.fxhash.xyz/w_512/Qmdk1mUmbk68tjffmNQHsiXdqDAXY5hVUQVrWqvVYaTnoc",
762
- "https://media.fxhash.xyz/w_512/QmU8s5ukKdxBhaePZchxidP3VriBHUuWDHVcqx6f8vZAmy",
763
- "https://media.fxhash.xyz/w_512/Qmckk8k9v3xdG2bhD2G1ah9beSYzrWz8XtjY2AJuK7Cjwf",
764
- "https://media.fxhash.xyz/w_512/QmY9UW8AaU9E1z7uvGX6iE1BFHUiB51hHRJEP1nQRp1unx",
765
- "https://media.fxhash.xyz/w_512/QmUy5CGrwCtzsWvkhA3XSDF1AU62UteaukJBqDpoA3RGGL",
766
- "https://media.fxhash.xyz/w_512/QmbLSv3YyGdiUqfVXKYFGYQHRCc6iQTzwGoP7CdRG2eYWQ",
767
- "https://media.fxhash.xyz/w_512/QmQZTmG4wh9twBvjziueVTSP8Tz6LPHZBxYkCG3texQJ53",
768
- "https://media.fxhash.xyz/w_512/QmcFadNNgfkEXdATyvPk1Xv4U8PFzmZuX1VZvjd677Kj9o",
769
- "https://media.fxhash.xyz/w_512/QmZ1EQ2N2F5Z5svqDsAMq1dCTpQ5mWFcx2Z3jzXcLPQ6Do",
770
- "https://media.fxhash.xyz/w_512/QmZhPCUVtRaJfam3N5pHk5LXaXm1QELTChVkVnWZdJWPbY",
771
- "https://media.fxhash.xyz/w_512/QmPnzQdYE1FLscqZEajjTs1fwDFGFUFKCaWuVgkSQoWku3",
772
- "https://media.fxhash.xyz/w_512/Qmf3xm625iawueDgaaE7mBaJe76DoDb1jBoPD5SoPrtctT",
773
- "https://media.fxhash.xyz/w_512/QmP8CTb5heiNr2M4FPF8EXgbGhum2CHkwrZ8WcdB7zgHZD",
774
- "https://media.fxhash.xyz/w_512/QmSdg6AeEUEdPFou5b2fhGvemcoDNwsjaJUiGhf63Tp4tU",
775
- "https://media.fxhash.xyz/w_512/QmcQq97uKnqtfy122JgPpEkoJsv6f993ncN73BFZ8Cchxc",
776
- "https://media.fxhash.xyz/w_512/QmZakte1Vi8zFKYxqmVZzS5KLwbNnMHYRFDR3HSseWCdxX",
777
- "https://media.fxhash.xyz/w_512/QmWwavQmDYSXFthpYEQGnXEwETgEotytdq9PkPro65Fb3N",
778
- "https://media.fxhash.xyz/w_512/QmVKaknnUDmtATzLeaTquAcaakyckhvgBbjQwhZ7Wb77TE",
779
- "https://media.fxhash.xyz/w_512/QmT1x4uQ7cRurZzjBPsL9boCktqheBBPGdh5cTzMqFnXZg",
780
- "https://media.fxhash.xyz/w_512/QmPwRWLWAHr2e8jpg4BrUMkNevxLg5SRQA4aY7cLXuTpPc",
781
- "https://media.fxhash.xyz/w_512/QmVMhrqisvenbXb6w2JAtdhowp6oPYTigfA4oiQm2bYcp6",
782
- "https://media.fxhash.xyz/w_512/QmY7TpPzd8z5fxcvuQVaTeyrYfuq6UB86Gv4W3YFgLQSfE",
783
- "https://media.fxhash.xyz/w_512/QmUvipTqNexPf9buMyZH1G7JvNhbJa4CjDAAy2yy5y8Gde",
784
- "https://media.fxhash.xyz/w_512/Qme6o2eE1vRTs3dkMGa5z27qjyEMx1GeQ7CX9n2YcNWKeG",
785
- "https://media.fxhash.xyz/w_512/QmUuvArSEiUwm9q5pNJJ48tEiDcQCPxSCCeERAwsi5wi78",
786
- "https://media.fxhash.xyz/w_512/QmfEkqKmhEx337iectghGEWvyX28Pk3uXeWQ6V2rmT4Bvk",
787
- "https://media.fxhash.xyz/w_512/QmSJXkXqVLSPLt8wjBcz5kj1go59DYAVbPpzQitPBM2XZi",
788
- "https://media.fxhash.xyz/w_512/QmabpaTimdHxGW4tgaLtrfEPPAuxBMFY5LTPuezY7VA1Hv",
789
- "https://media.fxhash.xyz/w_512/QmQHzaNmnyb7kNVT9YiZPEgk9R547NdsAB76RedJvrcJQW",
790
- "https://media.fxhash.xyz/w_512/Qme5Ya5ozvrpqqk3mokLwd8hmCBnuDLWjN2fFuMW771LPA",
791
- "https://media.fxhash.xyz/w_512/Qmem75td2Y73BZkURaofc899Ti3QhnicBwt4qTiQEAwV3f",
792
- "https://media.fxhash.xyz/w_512/QmTpKfZXgfnHG8Jd5DRJKuUSZQzaPQJui7D1q3ZzEZJChE",
793
- "https://media.fxhash.xyz/w_512/Qmcr59ocm8iGz7UNdiG8DLL6kRzX2Tay2517rFrrydhvYw",
794
- "https://media.fxhash.xyz/w_512/QmSuA8EJRaXwTZRKjtDAbevJRDAk78JStPM2XDZZQK978T",
795
- "https://media.fxhash.xyz/w_512/QmdpjgYywh7E4poesWbKi7muhYv6AV5tNR72AxeMsSZGW5",
796
- "https://media.fxhash.xyz/w_512/QmPkztfbLJoY6YpTwFztDmS5NNAEJoJPkHWEpYeyjBsATT",
797
- "https://media.fxhash.xyz/w_512/QmPtAm7bymTMUuov4CrX91o1XvK8QGg9dGSNfoJdvcTSrd",
798
- "https://media.fxhash.xyz/w_512/QmdWKDbwXH6AQaTSc1XX674ChaxADiM82uyNAomEGa1sog",
799
- "https://media.fxhash.xyz/w_512/QmcNrJiU4bF52cvT89XUiL1Tsd5LTkH8G2QJoxuPkiR5PU",
800
- "https://media.fxhash.xyz/w_512/QmWMJ9s7ZxEDBAvhZCUNbxUFpUT4bPBoD9Vsdi7ksmw77g",
801
- "https://media.fxhash.xyz/w_512/Qme3XZ34U7EBgaaNDbrbgYT9hdhKTxcG4LZzeqyWYpGgB4",
802
- "https://media.fxhash.xyz/w_512/QmZsvKo9U2yKVF9zV8Yp1ytQwxnR7yaiKgbXDQZJmcxiqT",
803
- "https://media.fxhash.xyz/w_512/QmYGQEYsP3eUAv3MyQcvZWrHdjiu3kZn2KRnkN7WVZVsDr",
804
- "https://media.fxhash.xyz/w_512/QmS3yQDQkTAp2nx5t8ZqiCFEkFU4ewzxe2euK9pXGTvpHc",
805
- "https://media.fxhash.xyz/w_512/Qmd1Vr8ZYyD9h4DWS2pwQukaMzMiBmwyW1YRt4RvhbLSPh",
806
- "https://media.fxhash.xyz/w_512/QmZPz1VTxzoqqMrkV7SopJDquEvbaQPbSDQY8eYLARX24F",
807
- "https://media.fxhash.xyz/w_512/QmdZryy53mN8zHJnnp7YuPMtHYS2heAtkkkeMh8R3gduLV",
808
- "https://media.fxhash.xyz/w_512/Qmc9gVPQcQdTRBuQ7bntyFVa49rJQNBKLwCkzzPtNKABDp",
809
- "https://media.fxhash.xyz/w_512/QmTXt2Bz1TK5p1GLV4jJAaWDvACbxhQtjxjExyCALJVXDL",
810
- "https://media.fxhash.xyz/w_512/QmPRwvfX4dWEYzQtc1rE89ooL94F5x8LPUY8AoByNzzCFB",
811
- "https://media.fxhash.xyz/w_512/QmQcVU7gBAAB1AuBNV6Ty25UVYpgprsn83HwHsNi4UfwKC",
812
- "https://media.fxhash.xyz/w_512/Qmd1BqEHox1pHxtsjLncUTH87CtNauX1kJu8Vcdxx7uRBj",
813
- "https://media.fxhash.xyz/w_512/QmX6aGcGgSu3y99idpfvgzZUpYJiHZGey5kKrjKYoL9H4e",
814
- "https://media.fxhash.xyz/w_512/QmQmqxGaTnDspNeDkAdUvx799dCugBuLpcEJmBhVUEdF63",
815
- "https://media.fxhash.xyz/w_512/QmQgAcjqQVWSwAshSr1jMDSq6Uxp9af95roC5aDRujDUa9",
816
- "https://media.fxhash.xyz/w_512/Qmb4GP7yCz6BkGSKwzQrCS9hz8PgakRsdSZEEpb5qVqrW2",
817
- "https://media.fxhash.xyz/w_512/QmYLjDiGNBopP9rKpjKwqMCvxfCq9uqzu2kwV7wXrTFufx",
818
- "https://media.fxhash.xyz/w_512/QmRCp8ZBXuwPTvV6tzq4JqA3bTKbpXSMAeJQhAV7WQ6sCk",
819
- "https://media.fxhash.xyz/w_512/QmVuMuTu5UxQhmC6Ay9LPt1RdBhqFohnYvkVfkx2Mm3AHR",
820
- "https://media.fxhash.xyz/w_512/QmaVPswM8t6JVGHwXaYV4cwsQBmDCQbEYjTh4VPy4KeKKd",
821
- "https://media.fxhash.xyz/w_512/QmdG2Jigf8xx8rNejyj3op6GwmfjydVepYYyJ748WvjtSL",
822
- "https://media.fxhash.xyz/w_512/QmfPT87iXDrzFFeYNs3kVb1Je2EieHvyfh4hkh5dCu7RaT",
823
- "https://media.fxhash.xyz/w_512/QmYHtgG67NqUGdiJjpHhWSXJXgb8H5rVKZrq9BLv9VU88p",
824
- "https://media.fxhash.xyz/w_512/QmbCJn2fKyHCFRtBKGp15e9tFn54AUDeurGASmQUa4i5jR",
825
- "https://media.fxhash.xyz/w_512/QmSC8a9aa4X6MggbQfBLFMm3K8jzCR7hwzS5bHkZEkXH1i",
826
- "https://media.fxhash.xyz/w_512/QmbgterihLEdYtqKZABgxi4UKu7CHSqjuGJa4oAqiY9gyJ",
827
- "https://media.fxhash.xyz/w_512/QmTs4jFzz76X2mSmLfyhqs3Kufc3jkxhg7KggWZ6NDPjUx",
828
- "https://media.fxhash.xyz/w_512/QmRSFtEFcp7d5CvxWxbSyTUFf1z7yEHk6ZadiPhxtKdzbg",
829
- "https://media.fxhash.xyz/w_512/QmdUsFnLozjdTYSRWxu9hzi4q7FLAyMmfgakJL9R3zyPfp",
830
- "https://media.fxhash.xyz/w_512/QmU9kTHTzwfJUFvWaT89yFV6Md8Y4qT7zTYuAdug88Q1VW",
831
- "https://media.fxhash.xyz/w_512/QmWS6Hh1SSUQnDGTiu3C6JLsinVz88f5Qmq7LzZj9jqWfD",
832
- "https://media.fxhash.xyz/w_512/QmPmQDoBQdZZKfdEb6f8pLzxrydBoSU4fmeuqJtViQaXod",
833
- "https://media.fxhash.xyz/w_512/QmNYJNE6xUxfyFaVgFkR7FVhBR8E3c3j3DAf1bXRLwqYcr",
834
- "https://media.fxhash.xyz/w_512/QmSDRHeYPaNVvKowjNMoVE9TBev7JMS9MwNEFSfrsJX1L6",
835
- "https://media.fxhash.xyz/w_512/QmPAQYcBs8kKTCPoYcjKYtAmjSeWKtvm5CUGdHxfsS1zDG",
836
- "https://media.fxhash.xyz/w_512/QmTNTwDgqVCMoVV6iyHKXacHuwKECio3VBaG1rrbwMjdvB",
837
- "https://media.fxhash.xyz/w_512/QmbBG4cYueRdbMJZJUt6JUvZbAUHMqj733XSoCQtQKBUti",
838
- "https://media.fxhash.xyz/w_512/QmefSa5mLustraa7HZRTnv9xm4viaQSNwL2SjwBT1nbym5",
839
- "https://media.fxhash.xyz/w_512/QmWUD67isHVyfWcKJuwMJshk3DfSufBXA7t5m5YHP6zs1V",
840
- "https://media.fxhash.xyz/w_512/QmRAss2AU7sKqtzk6L633Nm5dZGAzjkyxSsVJMpcjDjtRN",
841
- "https://media.fxhash.xyz/w_512/QmefgmDbRN9paZwPburJ8SNZnzJhiot8aJMmrDntjsCeks",
842
- "https://media.fxhash.xyz/w_512/QmTuSYpcjDypaFW9saTmPRYjTM8buQU9KzSALLrHr5LBoq",
843
- "https://media.fxhash.xyz/w_512/QmNjVB94xyCEDyqQ7Cxf9YpcHArESajCYKxAUKurvGetad",
844
- "https://media.fxhash.xyz/w_512/QmPpL8VD9ENwqTFWJj3cR9qrNnEDpNM2yRWbEBXqS2ddHA",
845
- "https://media.fxhash.xyz/w_512/Qmeca2LHxb8S3du9VQTZPzzu4AVgkQE1py3DLw36ZjonJn",
846
- "https://media.fxhash.xyz/w_512/QmaShQykMeTM35XDZj6oiAcSAkzXsv7MKbb1cCiR8iTHge",
847
- "https://media.fxhash.xyz/w_512/QmdSZH3zWpBCR9ixsCLuZXC1yD5hBPyFWhgQgNYanh3d62",
848
- "https://media.fxhash.xyz/w_512/QmdTqTf1uFkAuddEYBTi9q65ocHTdYXYsiMFT4TBQFraAr",
849
- "https://media.fxhash.xyz/w_512/QmWi9U2BBqHFyJLckDUarL2wP63VAqPDyHXjh5BUxDAJ2B",
850
- "https://media.fxhash.xyz/w_512/QmeVuSFr1exKa3rXNsJJmsh9xWdRG5962gWZbuiCjhfLMJ",
851
- "https://media.fxhash.xyz/w_512/QmTK2JmiRpNdbuxbUYywcoH4H4GuMAbhqmrb6vvyUXtD2P",
852
- "https://media.fxhash.xyz/w_512/QmeaY2huPFN8CjuMejJhsV35swPSuouGWUa7Ep659Pj7Zz",
853
- "https://media.fxhash.xyz/w_512/QmRwwMBepvpSdGynM43bHkVHF7VC3UwHVD2WxfxFG8zvqm",
854
- "https://media.fxhash.xyz/w_512/Qmd1nPde4yDHuCaxerrf3KDrY71zt56Unti2A6xhqMTWX1",
855
- "https://media.fxhash.xyz/w_512/QmRrUs3Vrw3TtAWPthYv8ALVXErCAPX8JtviTSQ4gGRBCQ",
856
- "https://media.fxhash.xyz/w_512/QmSC7U7CMJD1sJCs2mc75XyKCyEDN3uYSxB93msmxNyMKV",
857
- "https://media.fxhash.xyz/w_512/QmaGtWRXdS1HjWZbCk4gALaKPJJ17GULazQ8tt3JEVxbVB",
858
- "https://media.fxhash.xyz/w_512/QmUtNgZB8noMs5epMpdDdvQZWJY4imBvu6s3jg4vSdWfc7",
859
- "https://media.fxhash.xyz/w_512/QmVK6y1mCJM9384vVxrrvVNoyUAbh7oncEQzgamQh3Q8di",
860
- "https://media.fxhash.xyz/w_512/QmfCA9mY5oV3TNoyDktXCT7kMCJ9REWNr6ARqxcyhKeLSB",
861
- "https://media.fxhash.xyz/w_512/QmWwN2Zksj9Sj3e4AEcZFpxDSKKbn3ZHorH66FyQWyKpFY",
862
- "https://media.fxhash.xyz/w_512/QmXAGR7JW1eW64juPSFEmpSibC1vD37fqShfk88StnBVZQ",
863
- "https://media.fxhash.xyz/w_512/QmZYpc57ScsqdKvS8CqbDT8d1jQrK7cjs5ox92YrjkAvsr",
864
- "https://media.fxhash.xyz/w_512/QmShjNb3H2S5QvhTt8mFFZWu8s4aExjo4cD4TpYDxxTKXA",
865
- "https://media.fxhash.xyz/w_512/Qme3WzZud9PQgY4AYWLu2JNLdPu5nKi2jbyRPa9z2BWJZw",
866
- "https://media.fxhash.xyz/w_512/Qmcat7VoVY7uywPCc9d8XexEuCRq9bPKBhpVmRq3T2Zssf",
867
- "https://media.fxhash.xyz/w_512/QmY6Sz8DLqBadJnzD56wPKvLbc9WMy4u2BEmAB6jU2n5xF",
868
- "https://media.fxhash.xyz/w_512/QmT7VTtNCAkTkk8xXUYQsyPaTfds5dg4DXfahVk14eiMSG",
869
- "https://media.fxhash.xyz/w_512/QmdaGuJQQiUDQLd9PFSA6LubztiHLR1jp79aToDon2RVXE",
870
- "https://media.fxhash.xyz/w_512/QmW4gqqe6ZYkya6QwCgjzHXvgx21GqJFHCuDbMAoJru6pg",
871
- "https://media.fxhash.xyz/w_512/Qmb25piZ2XmCvtwW9RvUBg6DN7WJmX97fyAQTYJtxsb6xn",
872
- "https://media.fxhash.xyz/w_512/QmZ8N49GphuZoFLyFaaTyoQHCouc8rW6WdGZW9icb9HRh6",
873
- "https://media.fxhash.xyz/w_512/QmRF9YVPLpoUDPiYW5RARMmo5sY8tXNQ9E5Y24qWJVDyHf",
874
- "https://media.fxhash.xyz/w_512/QmeMS1H7qh98vu21wqjjjP66JmT6NB6hW1UsJg8MQGGS73",
875
- "https://media.fxhash.xyz/w_512/Qmex8Lsz3Fj2dGYtiXx5HwL1THFpyVappcr3mBXjULZBP7",
876
- "https://media.fxhash.xyz/w_512/QmXoaENfxnEdmeVPNdrBTbnL2eEhm9uZt1FtBVgB1233ab",
877
- "https://media.fxhash.xyz/w_512/QmbaPxKExf2jjzXfC1kucF1fNkm6ZzmJAuqkCXH5855zFh",
878
- "https://media.fxhash.xyz/w_512/QmeeE9spN9Dc9LHQ111J3kvfa4pKmhh65saKBhZuo5GRvv",
879
- "https://media.fxhash.xyz/w_512/QmZfxGFqqayiGxgwwDUSuD2B8P3Qtz8WZns9erYSZQsRWa",
880
- "https://media.fxhash.xyz/w_512/QmSEWjuKX5iBWZLi7Wr79GsX6i8J24GwaMLg4zrgiMYNoR",
881
- "https://media.fxhash.xyz/w_512/QmeUWjLGYJ1jLEDe2LPfU9YDh4N3jYQH81Kgez48C7ZB3m",
882
- "https://media.fxhash.xyz/w_512/QmTtuzEyEdmURJX2sXhs97A8TitpMZ8UegXYuPtVkJmNkG",
883
- "https://media.fxhash.xyz/w_512/QmSWqYUuFh3hEDdfr9yJh7sjA872yU8eXg1k9ioL1CvCAT",
884
- "https://media.fxhash.xyz/w_512/QmPC5omWddMexNDnLA94CSTrBJFrBJuDWZZtisfX4JE7Ge",
885
- "https://media.fxhash.xyz/w_512/QmZz4tCMRPZ8XYD1aJ1kZJVm2UkQ8bKpuBhQn5PFtRMiEM",
886
- "https://media.fxhash.xyz/w_512/QmUUJh8otWkjQGa2bKvWv2DLFx6mALA4TLYAgEGbgEUQMh",
887
- "https://media.fxhash.xyz/w_512/QmV2NxfLM3PSY9vRV4LrRzyWW7LrEjiZ1iebkdm9jSvuWJ",
888
- "https://media.fxhash.xyz/w_512/QmZgau4Bt85TqerDksHQZSxEH7viGhsL9dX3AdZQHJHMPv",
889
- "https://media.fxhash.xyz/w_512/QmU4sU4ouZPZir4S4MXGwaEGi6AMCAqdniWWYj94BKSN26",
890
- "https://media.fxhash.xyz/w_512/QmdwyzYF86usPYJEwXi3WkpFJxV7P6z36S66StpzE6qDUr",
891
- "https://media.fxhash.xyz/w_512/QmWusuAqJ9G5Lk6vDdV4EW3dEWwa3P4hcbEpbvRPixHpXr",
892
- "https://media.fxhash.xyz/w_512/QmejUcrpTLiz52TYyBUPEJq9KBSAyKuT9K1Y2fRt5fkUeM",
893
- "https://media.fxhash.xyz/w_512/Qme8gMF98voKWWrgva4RfkA4qpSH9T3i656hPa95YxXcys",
894
- "https://media.fxhash.xyz/w_512/QmVtvoHf5HSg66h5wfSxxRmdXRYMsTtgU39hLLMkNrS5uB",
895
- "https://media.fxhash.xyz/w_512/QmSGbEDaUdkGHsSyu55S3th1WyRMufrNMQ8RVZcwX6iyA7",
896
- "https://media.fxhash.xyz/w_512/QmZUPNWQ2WyUtHSdbWyVv8iwBXV5YaQnYWj4mH18aS7qg9",
897
- "https://media.fxhash.xyz/w_512/Qma67eVitUNJGQNNUR5W4tz7v7A19HtncWNcC96NopGiwo",
898
- "https://media.fxhash.xyz/w_512/QmTtfBV1qXCiPN7Ka8ZuChXj594EWSzRS9oW7F7ujyYeUE",
899
- "https://media.fxhash.xyz/w_512/QmRX5NPt81beMa3LqikYodUjqkcvfr1fz6fsCVCwf7upkz",
900
- "https://media.fxhash.xyz/w_512/QmNZR3aGfvDKLaoTXknGzBqNRJCZjSJPvFnGypr9onjdSJ",
901
- "https://media.fxhash.xyz/w_512/QmaWoGL2sjpjVsrejt9HdgWXnKDnW8CccVNBnkDzKyd1gB",
902
- "https://media.fxhash.xyz/w_512/QmX3u3U74ZbdMCNYgvW2gsSSr6KuwLa5PBVkHNUdmMu7G5",
903
- "https://media.fxhash.xyz/w_512/QmT8W85DndrCgSjc4oNyywoYrPcKFuBUnrHpBvSYMj2tuq",
904
- "https://media.fxhash.xyz/w_512/QmdHewYsM9btU3fsPihT2trdq1qs5DzkDgCA633M548h72",
905
- "https://media.fxhash.xyz/w_512/QmbDZ7ENiJFxLUmzLTZsdBoZb5QN2CZ44DeaGcy4jHoqmy",
906
- "https://media.fxhash.xyz/w_512/QmRodXnPBZUBrDMEnXV2gC84bqc8LL69LNTP8JVsswTHQo",
907
- "https://media.fxhash.xyz/w_512/QmdAdxF5hodWkNvUVsHzHMBSk7Hqdk8ezUbrbNHPQ1b4Gd",
908
- "https://media.fxhash.xyz/w_512/QmZVFZe61qKCFuJovcK1bV5FWb5Lf13Xhe8AimAhrQAcfN",
909
- "https://media.fxhash.xyz/w_512/QmNvhpfLMYUoFNuwZ7rNzFmXGdHedQYcwoAhTcmvZZtT9j",
910
- "https://media.fxhash.xyz/w_512/QmZabPZgYMhh6ASM6mKWsKvhiutGsui6jLujZrabKv1TLt",
911
- "https://media.fxhash.xyz/w_512/QmQBqDor48L3u6vUy6skMChZZjg2LpjmNj19fmcBT1hUkq",
912
- "https://media.fxhash.xyz/w_512/QmXwqtDDSCW6pJpaQAoLkS4DN29c3bAmWVh9T2jdheWxEo",
913
- "https://media.fxhash.xyz/w_512/QmNSdvgUxUCBQtrNqh6u6cUQBS72an1iZrsQQwhpe8cxzF",
914
- "https://media.fxhash.xyz/w_512/QmUCoDBdJWq4jioCxTj2Rqw6hEoqqJM6jF4X5vFv6WJXGq",
915
- "https://media.fxhash.xyz/w_512/QmeC9ie5V93vaX5wKvDLrp8sBo9RvMF9eKTc9mCTjePvhJ",
916
- "https://media.fxhash.xyz/w_512/Qmd1aVKZkT5hpUr1y2T3uY6VxBuCPiKmMn3kxDAjSMtU6S",
917
- "https://media.fxhash.xyz/w_512/QmczSGAZ7bBvLYUgSgLFAt3XQtsWiPSFjCuSeJHm1XCTQa",
918
- "https://media.fxhash.xyz/w_512/QmZKXyLXXT3M33Nq8JvLwetHrZtnepyPfwSwBnPBPcRnGC",
919
- "https://media.fxhash.xyz/w_512/QmRWwEjFDrDR7kwd9cexuPCS5aKuQZQ2Mdj5KnYx7cmCZP",
920
- "https://media.fxhash.xyz/w_512/QmPs4UyCNcywEskpQBXaEqGQntxMnVkmsqx8xoh4PRDxyL",
921
- "https://media.fxhash.xyz/w_512/QmcJ2qCdBWdNAoEMoXfA1YL5wSkx68QfyTG4YSZx4dp8jr",
922
- "https://media.fxhash.xyz/w_512/QmW3e2G2qYTA4ncW8LkBB8Ai6L8ruHzUkYMBFaawGbhoEP",
923
- "https://media.fxhash.xyz/w_512/QmQMBh4gaxNSxS4vFUxj358Cg2Y4oR9tx8FPYY9pLurZLt",
924
- "https://media.fxhash.xyz/w_512/QmTvZsw5aY36eWouK5rUwF8VeU7BZq3Eyd4kcHmFUUK4yS",
925
- "https://media.fxhash.xyz/w_512/QmdRzCeZJwR7pyzU8P9szmHzzTEZXQ6DGFVbG2ajipo5VC",
926
- "https://media.fxhash.xyz/w_512/QmX4CBgs99TkPF2MrgKBsqMtUHYJqEnVyTjAvpWsn9dXbH",
927
- "https://media.fxhash.xyz/w_512/QmW4YTnAwkrbvyjqKZek1eSXj3LFpQpdxBycjTpAf849cf",
928
- "https://media.fxhash.xyz/w_512/QmSFMYxqXMdBUbYPBrqZ7ndUeMAjevFjejiVsvLGnsqgPa",
929
- "https://media.fxhash.xyz/w_512/QmdhMuEnJjzKBk1obGsnXSeSx1X8JQnAihbNVfXqcw3jkz",
930
- "https://media.fxhash.xyz/w_512/QmQCSoY2Yub6wy98pjPdt6VxuCv28v6kYa3ARQygNkMtxj",
931
- "https://media.fxhash.xyz/w_512/QmNvXHJajLrdTZuLMByWvprySZ9vstcjDcfym2gdWtJhXe",
932
- "https://media.fxhash.xyz/w_512/QmUKZYaGaNnvCNGfnPT2GmtXitXLB3JaoTouH17FyQofxG",
933
- "https://media.fxhash.xyz/w_512/QmWc4oZBGjdjb3y3QjQeYs2ShtPNdFCRy2sfUYbCaGEwh6",
934
- "https://media.fxhash.xyz/w_512/Qmc3hNF5NECsy29aKPLrEmxH7cQCGKor8X72dsCsD4RvEf",
935
- "https://media.fxhash.xyz/w_512/QmRBtZE2MPRXYAJCe7mYUpWBzHySpWP4C9XQefVKujiS9T",
936
- "https://media.fxhash.xyz/w_512/QmYKptZjQFmjg9rafDEkCf1PNwyF6RdYnFqhBc9vSdTiCf",
937
- "https://media.fxhash.xyz/w_512/QmVzX5Cn3c4fGBZgeuzAxQZDJozd6ttyaCkRpb5t4cbAwi",
938
- "https://media.fxhash.xyz/w_512/QmVsnwmopERQpHhYM7qZATbJj1TUVtXaEnoDTmMwrDH6dH",
939
- "https://media.fxhash.xyz/w_512/QmdRszDnxiEFKAqNkCnxL5ri3ysCREWHh5jtrbT6Wtnuqr",
940
- "https://media.fxhash.xyz/w_512/QmWWUVHzmJycDEAA29qLwCJ7eMtR1ieFKuZsu9ut4Rycx7",
941
- "https://media.fxhash.xyz/w_512/QmacPPJHWqwqTcDgPfdH364iX8aFE2FuQLUHra1Lrrhf2N",
942
- "https://media.fxhash.xyz/w_512/QmZzmYrpbeYSDg3o7ZKjXL5GMsTiQuWHUnbpeaenhJL41G",
943
- "https://media.fxhash.xyz/w_512/QmaGLv6nTazirhDvHv4Y6TZ8onSwkFRCNhPRHYzpwHQejd",
944
- "https://media.fxhash.xyz/w_512/QmURzzdpJzAHCMVCvUSf3SyVBUMwjQA7T93f8zwEME4NPh",
945
- "https://media.fxhash.xyz/w_512/QmPnNQwedLpQZ9zhvzfLRb7nB2BsGjsjw2TXqJ3VBopiMc",
946
- "https://media.fxhash.xyz/w_512/Qmcyqa2Cf7GzzWYHtHqcSxucCNmEmjiwN4jTgJJnnAmqLj",
947
- "https://media.fxhash.xyz/w_512/QmazcDgEFeSKpUCpbn39UvDnq8tD24XjjnB1QrwL6E3pqm",
948
- "https://media.fxhash.xyz/w_512/Qmd3VGGwHc8XXf3gLQMyN2gDZ346qR21XFLau7NUJXqCH8",
949
- "https://media.fxhash.xyz/w_512/QmbDpaa95KcG8qdUdR3LwpCPWq8sx1eiv7vh4BpFpnaa7w",
950
- "https://media.fxhash.xyz/w_512/QmWFUThW1jDojneTQqiDpArb7cdCdnKdatEhK5GkJAiAY5",
951
- "https://media.fxhash.xyz/w_512/QmYi5E1LJMiSzFNvwQrjoPdbpZSoCUaCz4KrW7DgxfTusV",
952
- "https://media.fxhash.xyz/w_512/QmNRB1TJmStJ7Y4ku8Vhy74X7yXeNxqCDSwoxBsWgzPY8T",
953
- "https://media.fxhash.xyz/w_512/QmR2WjHDfmUJgyVNEyAygkQ5GpLAXFCgQcicUV6NxeCSJt",
954
- "https://media.fxhash.xyz/w_512/QmddswtzGtGFi5U2jx71TPdNkAPL4DB1k3wVCu2JNfzdVS",
955
- "https://media.fxhash.xyz/w_512/QmW77q6ZgWsuVfKyQ5439Y6AdjAxmUGocPLtyrJGbTDxDu",
956
- "https://media.fxhash.xyz/w_512/QmYYBiLEdTYKQcW77DKjTS7ZyxGS1DTZMMiHCyLGTYLsyT",
957
- "https://media.fxhash.xyz/w_512/QmTpccDd4TxurvDpcBbxxU5mDPqYoDuX5hRjCw9rY3X8Xx",
958
- "https://media.fxhash.xyz/w_512/QmPyGdx4BTHFeikaZSYq8vnAZJmCFE4bdoYmpFUH1fRZuT",
959
- "https://media.fxhash.xyz/w_512/QmegaPTJrn9vGcbV1EekUXovxQGajsGUP9sEnGh58M7Vsx",
960
- "https://media.fxhash.xyz/w_512/QmScWV8WrcJWYEwuTkNDaG7AWNPmJXq8KKgDjpYkza2JfX",
961
- "https://media.fxhash.xyz/w_512/QmfNZ81rJXZmqvAporjYAbWZezoH69S3CVA6t8NSv4p6w2",
962
- "https://media.fxhash.xyz/w_512/QmX5QLZRjMdzHuMnpkYq5SrjQk1BozqGz8v8gxvYi5CHkD",
963
- "https://media.fxhash.xyz/w_512/QmSmaJAMEeFNPNpUpxcXRWfSAzxxqnuTjbhR5xx3VgfRYV",
964
- "https://media.fxhash.xyz/w_512/QmYx9BFzHsBZPZ5ma3Diq6DUC72vxigGcCcCzWhgnfvXxK",
965
- "https://media.fxhash.xyz/w_512/QmWp8zSXBEQpgm8uKrFopNe3pbEdWxXyzVz2o3cWxJxiwG",
966
- "https://media.fxhash.xyz/w_512/QmSdLNfCQUwGh22ijvUNYD9qJoQ2Wa86he79tUvUhdLYVU",
967
- "https://media.fxhash.xyz/w_512/Qmb7WYDZqGhUou8NAnMUSVkqoZoo1QsKUDniKh1V3UkZ1W",
968
- "https://media.fxhash.xyz/w_512/QmRrXUa9D1nehKVnQAmSHN7mkjYTyp8FWAyZmQhvtbraBS",
969
- "https://media.fxhash.xyz/w_512/QmYo15SSQsPweS7RFUcFc7tHnpULNQqWRXqCVb7NbFtu3y",
970
- "https://media.fxhash.xyz/w_512/QmdkvrJBckqxBqwgAFP1nwe1aud7mMrrA1C8s3MSmRo96q",
971
- "https://media.fxhash.xyz/w_512/QmXAFFCP7REXaT79oBBE77yMVmFXYGoWqYQrdoVR9ZpTB2",
972
- "https://media.fxhash.xyz/w_512/QmfMpQ6tCZyFLjFZzFAP8P5bLmPxumns9xNnRUis1ekSS5",
973
- "https://media.fxhash.xyz/w_512/QmNkNLnbHzhy5P37h6ZZAYspgtvSb5zHj87TWNzg8Djrww",
974
- "https://media.fxhash.xyz/w_512/QmfWtYhchgsEWc2EiN7sUTTEk9YcaSpfGku9ALpEa1b8yF",
975
- "https://media.fxhash.xyz/w_512/QmYDz2mwnGYkkjfwW9B46QardiLYghqEvPHT3X5CQfkHWV",
976
- "https://media.fxhash.xyz/w_512/QmfDUXE9MaeZL45hVac6g6ENzshH4pwAFjMKjfMbg9tsb3",
977
- "https://media.fxhash.xyz/w_512/QmUSVxKG5gDsHyheh9Pp4CG8J9E6pygmayQBJNo2AExdDY",
978
- "https://media.fxhash.xyz/w_512/QmaN61pcVZFnoMyhougAAytG6huhnyvNDLLDaEDtxRgW6k",
979
- "https://media.fxhash.xyz/w_512/QmWcD1m9xHxNmSSf1mxUCjZ2mtMaAm6i1sbwQmuSJGCetW",
980
- "https://media.fxhash.xyz/w_512/QmYBcKLopsU96YT6w6FziMFTDucfke9LcAU5ZMKovxoy1h",
981
- "https://media.fxhash.xyz/w_512/QmTegLuJobDzXZL9ncxYFSv9QJN65sdtwQcAFoAkBo3BkC",
982
- "https://media.fxhash.xyz/w_512/QmTjuQ3KFfErjkfVaTkhvGXagNUp41L1dweCcpeBJnsBKP",
983
- "https://media.fxhash.xyz/w_512/QmXEJxEdPaxNxSXwiexRJ3BgfawLcHgTg3cr9YyoVrSgf5",
984
- "https://media.fxhash.xyz/w_512/QmbWyDBhL7za8zF9ZhtFdUn8zSrvLmqdS2vssoY7WriuNV",
985
- "https://media.fxhash.xyz/w_512/QmVqEf1K3sDTdSzHEHfgJUdaoNPKN2o8bkgNh9AfbKPoXM",
986
- "https://media.fxhash.xyz/w_512/Qma6KHV21XJ7Y1HQqToopX9Sc3CTtNUFuqTB2e8wpuGzpj",
987
- "https://media.fxhash.xyz/w_512/QmfPCS56mT7et4rZqK4Zaj4MZfHc9vnfh6YDdhn2LUjghw",
988
- "https://media.fxhash.xyz/w_512/Qme3XiTQbj5R8axtXFiXSWP48s4JAErs59bC4VW1i5gHK8",
989
- "https://media.fxhash.xyz/w_512/QmVvzWfPtEs1DR1YCmSUqyXBSsJGVXUAqCbZkLr79Dmt5B",
990
- "https://media.fxhash.xyz/w_512/QmX81VB4EsiN4VAJrcHmbzswq74X15wZFbdUPo3JDBwFej",
991
- "https://media.fxhash.xyz/w_512/QmcwyB97e6tsmTLckaR5FcAMarjJrG9s2usDhQLCPvMzNM",
992
- "https://media.fxhash.xyz/w_512/QmShUdfaSs61hNjhS6ShrKogVtRCoA111RvRbVm3cN7Prx",
993
- "https://media.fxhash.xyz/w_512/Qmcv79jwf6VpziSaigJs774UWoNMCAj7M4M39tt8y9C2jt",
994
- "https://media.fxhash.xyz/w_512/QmSM4e8NUkbUmeN7YJnDkUqkLvMD2WB7uHdQYbioTi2BXQ",
995
- "https://media.fxhash.xyz/w_512/QmPFu1pkMePHuCuC3K6H6LtoLqQuPpZcDn2X46G6mfntqU",
996
- "https://media.fxhash.xyz/w_512/QmP7FgX24iTV4W35BhbBkmfSWm1y3PNu3sj1W1E6o853q7",
997
- "https://media.fxhash.xyz/w_512/QmX5kZaPD4LokgkjkT391pZkRSUAHBkr2dvAaDiVTVHHsh",
998
- "https://media.fxhash.xyz/w_512/QmQaWkBaJ45LtBAMjfx91d6jiqFUwLCXMECk84A1ZQJo1C",
999
- "https://media.fxhash.xyz/w_512/QmVsrE4fPuad1w8Cm7qR6YucmY4a5xSUnXx2UHx1XfoadQ",
1000
- "https://media.fxhash.xyz/w_512/QmXRhSxN3Z2w7qMuPPeoKUNc4LAW6MMgDpaPvgnn5aAsLx",
1001
- "https://media.fxhash.xyz/w_512/QmWXvcLjeD7tR2qxMuy2UWJU9NrfDzWc4JoJXuwfnjJpK8",
1002
- "https://media.fxhash.xyz/w_512/QmcZC5Y7ok31qXf876sFn9oTapccVSXocbBQb8MqN2AsF5",
1003
- "https://media.fxhash.xyz/w_512/QmbaAShFPZQX6QivCnbygp8nMwEyX75yk5ZPA7zfcEg3oK",
1004
- "https://media.fxhash.xyz/w_512/QmWo8FeZq7vuLteod5tb8NTzkPk2d5dsi6d7rWSQQQdDga",
1005
- "https://media.fxhash.xyz/w_512/QmYPAVExze2QAFn9Z6NfjnEkyyY99T9icHgp5FVijeYxgg",
1006
- "https://media.fxhash.xyz/w_512/QmQPikwyUsnxo4ReRdYo1QtfBCgFGPKv6TwTVagXcvQEPb",
1007
- "https://media.fxhash.xyz/w_512/QmQtWVcdS9KU2ZMxZxkhtMAPKRM4wZf6Jr6TxNY6MYQ4E4",
1008
- "https://media.fxhash.xyz/w_512/QmbZCuTwDygFqDsCACaasi6NngrFoHtncMbm5YATnLZknm",
1009
- "https://media.fxhash.xyz/w_512/QmP1j7z7GG7KeU7FJS7yzwYVb8i5udNuxaeKp8JYSW6Z7V",
1010
- "https://media.fxhash.xyz/w_512/QmbVPK6qepoUW1fckswK9LPQY4W33p9DUbXuoWEAWAyMyM",
1011
- "https://media.fxhash.xyz/w_512/QmRJjSjDqCHujTM4CJRQmsVGYm67PnDvoJBfj6EFNENKQS",
1012
- "https://media.fxhash.xyz/w_512/QmZMv9sRMvb7w9Y1HJgEHJmpzMyL9gcUqPT21yhK193QyA",
1013
- "https://media.fxhash.xyz/w_512/QmUW15xXQu97AKppyG4NTiLHAGXNn69WNMmCwienPDEz6w",
1014
- "https://media.fxhash.xyz/w_512/QmPA9H9KZpr5TfkZeJPYZRXV4UaDzGXvnKt9PrDUsatYio",
1015
- "https://media.fxhash.xyz/w_512/Qmdmdv2Xy2Nd5ghpbmMsxD1qgPpogPsfcij7V5zV1XsE42",
1016
- "https://media.fxhash.xyz/w_512/QmQm1NJXNEuhorvh8AVTjWtJDBhdiyyg2yshsTkr96c6jp",
1017
- "https://media.fxhash.xyz/w_512/QmZWGkRFtkUgA5dY9LssYGWW27KFqLqUXCE3r8v9wBDNg5",
1018
- "https://media.fxhash.xyz/w_512/QmVLZfoe18ruZG1m3p9Z7T2R1t7CyBtQTmiRgMcpPGXK6Z",
1019
- "https://media.fxhash.xyz/w_512/QmZ74E7iauGYcYHEinhinRYzx1wu74Atbz4aX6ZGtjFcq3",
1020
- "https://media.fxhash.xyz/w_512/QmWEMUykYV3HFPssi1Xu377PfzvpfLdHZZ5kka6pVNrHcQ",
1021
- "https://media.fxhash.xyz/w_512/Qmdf39usFefxisBtZaWNBfLmzzeugbd2gE41sJgm1vqPEK",
1022
- "https://media.fxhash.xyz/w_512/QmTYcmYCmVwS3UFR8rjFef9pK6pYtAzR2FMwc6rAkfBGE5",
1023
- "https://media.fxhash.xyz/w_512/QmezjAPUs1oAm5mQxg6uhZsdC3CUDAyDqY93wySsdHigtz",
1024
- "https://media.fxhash.xyz/w_512/QmaiBa66F2NPsBJPkFB7VNeUR1YiVgwDZSe8XhbUAo7QeS",
1025
- "https://media.fxhash.xyz/w_512/QmVqHVSs2LDpQbWVSb8Sm1tZPKwLWnTRmrgdQsA3MGZNHz",
1026
- "https://media.fxhash.xyz/w_512/Qme38mPSeJP15im4gssZTrfXxFrPoGRSbNFDX6eC9gQnmi",
1027
- "https://media.fxhash.xyz/w_512/QmPMNSFknqvAR1AC5LyJwXqgQQxFnQVuwiRg2j3dzqCS8j",
1028
- "https://media.fxhash.xyz/w_512/Qmazb893nZT6bMaWvnnpFTFsRLkLMHA6UGKMUX7C6x5nuS",
1029
- "https://media.fxhash.xyz/w_512/Qmap6svf5BRs7AVcD7m1k8fT7WkMidUkGJCcL7YfzvRYmk",
1030
- "https://media.fxhash.xyz/w_512/QmbCwUxuToiLUEBgE4oHPSHG3QoD3XapQWrSomJSEom5Qv",
1031
- "https://media.fxhash.xyz/w_512/QmNsSBJdjbBcv2Y8cTr7K6PktsB5P8FX4TFKng6hb2Nyf9",
1032
- "https://media.fxhash.xyz/w_512/QmQeWcMsnAqPozCEPCAXk9btNw4dAR8NMaEa1LFMt66a7J",
1033
- "https://media.fxhash.xyz/w_512/QmfUG7qUTaz54Z9RdjfAZcnuMSjQ7NuB1pkLxDZpT4W6xj",
1034
- "https://media.fxhash.xyz/w_512/QmdpsB57ie6hDcdwzgPJtMMqihybh5UbGzbPufoM85UM8o",
1035
- "https://media.fxhash.xyz/w_512/QmUJ4LCzYDyPtH7ahXSZpH2rHhfN92p5BK1JxBRqqVSvHV",
1036
- "https://media.fxhash.xyz/w_512/QmQv6nktfpJ5MKnJ2S7mFA1RRHhfhEUuN3UeEiyz4VkcAD",
1037
- "https://media.fxhash.xyz/w_512/QmdHyoP9SPtRrFu6HSvfH7beHGVoaHgpyJDa5fkNUagcxR",
1038
- "https://media.fxhash.xyz/w_512/QmVeyv4tBeNUcv95utWAm1jZgz9LXiHisPExBRWEBFxNAJ",
1039
- "https://media.fxhash.xyz/w_512/QmYLLLSUzaYdy3yZzTMTc6xEAwGiUJWCZ97F2DJpXUa8yw",
1040
- "https://media.fxhash.xyz/w_512/QmdHYQduxg9GBQVPUJEF4So1MXLrD3SBfs64bYcAinTGVY",
1041
- "https://media.fxhash.xyz/w_512/QmVkErRxYuNwA1pWr8btjqiTKWA3zdMU8SQ4HUAEjMwNqu",
1042
- "https://media.fxhash.xyz/w_512/QmSnfUq2vLqjqj97h7xyRRYRC54umDeGoyj9GSWrVQ64y7",
1043
- "https://media.fxhash.xyz/w_512/QmUY4YtBgSoDpPxqmHeZdAooqBrHAHXKAzjHYsqsib9t8K",
1044
- "https://media.fxhash.xyz/w_512/QmSo53PhYGnmtdDY7qhuiy7YS1yiskFLJ292ztdmK6v9Dx",
1045
- "https://media.fxhash.xyz/w_512/QmZFYHmmUxdqEogBEhcC9C2zGwVyCRkPxSh8w6qszSr1zF",
1046
- "https://media.fxhash.xyz/w_512/QmU9NNYa2akUh9HZabzX3MGt8RYtHAVJJ32JY3TuEscELa",
1047
- "https://media.fxhash.xyz/w_512/QmYGT2sPQwxaVmybERxy44jo2QNssvuNbqUzDi52Mq5cD1",
1048
- "https://media.fxhash.xyz/w_512/QmTsgXM119KyBBhMWmuYtdcnTKhNKjDtW1FpQopW3ZGQYL",
1049
- "https://media.fxhash.xyz/w_512/QmQ9SzLDZJXXhh3mRYB93QGFnCL57Q9CvGf4CG24sYSkfR",
1050
- "https://media.fxhash.xyz/w_512/QmRX9LBGtHHPmRZn4esLiG9bH4V9VWqJ2cDhy6i1vwTRB3",
1051
- "https://media.fxhash.xyz/w_512/QmY9PMnrDzyRQptW9yrWA9A6xifPNuVwkKdZmrsDG5rADo",
1052
- "https://media.fxhash.xyz/w_512/QmfCfQECp7JBGMUTpbB8bEpfXwicSBxhjJHpHwbkDXBsVN",
1053
- "https://media.fxhash.xyz/w_512/QmWV4G3oDmej5ZkVCgHpTXHSVG5FcDM5mv8aeig4WDwqSu",
1054
- "https://media.fxhash.xyz/w_512/QmTg7qqv1PZdYBz9uZQ7s1CXXX44XECyGinLohMihGa9wp",
1055
- "https://media.fxhash.xyz/w_512/Qmc3aFG4s7y4Zj82RTwEdxYyUfKuVd3nmZxMMFVjxhsHoT",
1056
- "https://media.fxhash.xyz/w_512/QmPadWkr5pqTSuMp4sUVy9tHBDi9ddp4USDLrxHEFqwYYn"
1057
- ];
1058
- function generateTree(maxNodes, maxChildren) {
1059
- const nodes = [];
1060
- const links = [];
1061
- let index = 0;
1062
- function createNode(label) {
1063
- const isRoot = label === VOID_ROOT_ID;
1064
- const idx = isRoot ? VOID_ROOT_ID : index++;
1065
- return {
1066
- id: idx.toString(),
1067
- label,
1068
- imgSrc: isRoot ? void 0 : images[index % images.length]
1069
- };
1070
- }
1071
- const root = createNode(VOID_ROOT_ID);
1072
- nodes.push(root);
1073
- const queue = [root];
1074
- while (queue.length > 0 && nodes.length < maxNodes) {
1075
- const parent = queue.shift();
1076
- const rand = Math.random();
1077
- const biased = Math.floor(Math.pow(rand, 2) * (maxChildren + 1));
1078
- const childrenCount = Math.min(biased, maxChildren);
1079
- for (let i = 0; i < childrenCount; i++) {
1080
- if (nodes.length >= maxNodes) break;
1081
- const child = createNode(`Node ${nodes.length}`);
1082
- nodes.push(child);
1083
- links.push({ source: parent.id, target: child.id });
1084
- queue.push(child);
1085
- }
1086
- }
1087
- return { nodes, links };
1088
- }
1089
- function collectChildren(node, threshold, visited = /* @__PURE__ */ new Set()) {
1090
- const collectedNodes = [];
1091
- const collectedLinks = [];
1092
- function collect(n) {
1093
- for (const link of n.childLinks) {
1094
- const child = link.target;
1095
- if (visited.has(child.id)) continue;
1096
- if (child.clusterSize <= threshold) {
1097
- visited.add(child.id);
1098
- collectedNodes.push(child);
1099
- collectedLinks.push(link);
1100
- collect(child);
1101
- }
1102
- }
1103
- }
1104
- collect(node);
1105
- return { nodes: collectedNodes, links: collectedLinks };
1106
- }
1107
-
1108
- // src/context/graph.tsx
1109
- import { jsx } from "react/jsx-runtime";
1110
- var OpenFormGraphContext = createContext(
1111
- void 0
1112
- );
1113
- function OpenFormGraphProvider({
1114
- config = {},
1115
- theme = "light",
1116
- data,
1117
- rootId: _rootId,
1118
- children
1119
- }) {
1120
- const [rootId, setRootId] = useState(_rootId);
1121
- const [_config, setConfig] = useState({
1122
- ...DEFAULT_GRAPH_CONFIG,
1123
- ...config
1124
- });
1125
- const [_theme, setTheme] = useState(theme);
1126
- const [layoutConfig, setLayoutConfig] = useState({
1127
- velocityDecay: 0.33,
1128
- alphaDecay: 0.17,
1129
- alphaMin: 5e-5,
1130
- dagLevelDistance: 100
1131
- });
1132
- const ref = useRef();
1133
- const graphData = useMemo(() => {
1134
- const _nodes = [...data.nodes].map((n) => {
1135
- const enhancedNode = {
1136
- ...n,
1137
- clusterSize: data.nodes.length,
1138
- collapsed: n.id !== rootId,
1139
- childLinks: [],
1140
- level: void 0,
1141
- hide: false
1142
- };
1143
- if ("imgSrc" in n && typeof n.imgSrc === "string") {
1144
- enhancedNode.image = preloadImage(n.imgSrc, ref);
1145
- }
1146
- return enhancedNode;
1147
- });
1148
- const nodesById2 = Object.fromEntries(
1149
- _nodes.map((node) => [node.id, node])
1150
- );
1151
- const transformedLinks = data.links.map((l) => ({
1152
- source: nodesById2[l.source],
1153
- target: nodesById2[l.target]
1154
- }));
1155
- if (!nodesById2[rootId]) {
1156
- const rootNode = {
1157
- id: rootId,
1158
- label: "Root Node",
1159
- clusterSize: data.nodes.length,
1160
- collapsed: false,
1161
- childLinks: [],
1162
- level: 0,
1163
- hide: false
1164
- };
1165
- _nodes.push(rootNode);
1166
- nodesById2[rootId] = rootNode;
1167
- const targetIds = new Set(transformedLinks.map((link) => link.target.id));
1168
- const innerRootNodes = _nodes.filter(
1169
- (node) => node.id !== rootId && !targetIds.has(node.id)
1170
- );
1171
- const newRootLinks = innerRootNodes.map((node) => ({
1172
- source: rootNode,
1173
- target: node
1174
- }));
1175
- return {
1176
- nodes: _nodes,
1177
- links: [...transformedLinks, ...newRootLinks]
1178
- };
1179
- }
1180
- return {
1181
- nodes: _nodes,
1182
- links: transformedLinks
1183
- };
1184
- }, [data, rootId]);
1185
- const nodesById = useMemo(() => {
1186
- const nodesById2 = Object.fromEntries(
1187
- graphData.nodes.map((node) => [node.id, node])
1188
- );
1189
- graphData.nodes.forEach((node) => {
1190
- node.childLinks = [];
1191
- });
1192
- graphData.links.forEach(
1193
- (link) => nodesById2[link.source.id]?.childLinks.push(link)
1194
- );
1195
- const root = nodesById2[rootId];
1196
- const queue = [root];
1197
- while (queue.length > 0) {
1198
- const node = queue.shift();
1199
- const childNodes = node.childLinks.map((link) => link.target);
1200
- for (const child of childNodes) {
1201
- if (child.level === void 0) {
1202
- child.level = (node?.level || 0) + 1;
1203
- queue.push(child);
1204
- }
1205
- }
1206
- }
1207
- graphData.nodes.forEach((node) => {
1208
- if (node.id === rootId) {
1209
- node.collapsed = false;
1210
- return;
1211
- }
1212
- const childNodes = node.childLinks.map((link) => link.target);
1213
- const shouldCollapse = childNodes.every(
1214
- (child) => child.childLinks.length === 0
1215
- );
1216
- node.collapsed = shouldCollapse;
1217
- function countDescendants(n) {
1218
- const children2 = n.childLinks.map((link) => link.target);
1219
- if (children2.length === 0) return 0;
1220
- return children2.length + children2.map(countDescendants).reduce((a, b) => a + b, 0);
1221
- }
1222
- node.clusterSize = countDescendants(node);
1223
- if (node.clusterSize === 0) node.collapsed = false;
1224
- });
1225
- return nodesById2;
1226
- }, [graphData.links, graphData.nodes, rootId]);
1227
- const hasNodeChildren = useCallback(
1228
- (nodeId) => nodesById[nodeId]?.childLinks.length > 0,
1229
- [nodesById]
1230
- );
1231
- const [selectedNodeId, setSelectedNodeId] = useState(null);
1232
- const selectedNode = useMemo(() => {
1233
- if (!selectedNodeId) return null;
1234
- const n = graphData.nodes.find((n2) => n2.id === selectedNodeId);
1235
- if (n) return n;
1236
- return null;
1237
- }, [graphData.nodes, selectedNodeId]);
1238
- const breadthFirstSearch = (startNodeId, rootId2) => {
1239
- const startNode = nodesById[startNodeId];
1240
- const resultNodes = [startNode];
1241
- const visited = /* @__PURE__ */ new Set([startNode.id]);
1242
- let currentNode = startNode;
1243
- let pathToRoot = [];
1244
- while (currentNode.id !== rootId2) {
1245
- let foundParent = false;
1246
- for (const link of graphData.links) {
1247
- const sourceId = link.source.id;
1248
- const targetId = link.target.id;
1249
- if (targetId === currentNode.id) {
1250
- const parentNode = nodesById[sourceId];
1251
- if (parentNode && !visited.has(parentNode.id)) {
1252
- pathToRoot.push(parentNode);
1253
- visited.add(parentNode.id);
1254
- currentNode = parentNode;
1255
- foundParent = true;
1256
- break;
1257
- }
1258
- }
1259
- }
1260
- if (!foundParent || currentNode.id === rootId2) break;
1261
- }
1262
- const rootNode = nodesById[rootId2];
1263
- if (rootNode && !visited.has(rootId2)) {
1264
- pathToRoot.push(rootNode);
1265
- visited.add(rootId2);
1266
- }
1267
- resultNodes.push(...pathToRoot);
1268
- graphData.links.forEach((link) => {
1269
- const sourceId = link.source.id;
1270
- const targetId = link.target.id;
1271
- if (sourceId === startNode.id) {
1272
- const childNode = nodesById[targetId];
1273
- if (childNode && !visited.has(childNode.id)) {
1274
- resultNodes.push(childNode);
1275
- visited.add(childNode.id);
1276
- }
1277
- }
1278
- });
1279
- const resultLinks = graphData.links.filter((link) => {
1280
- const sourceId = typeof link.source === "object" ? link.source.id : link.source;
1281
- const targetId = typeof link.target === "object" ? link.target.id : link.target;
1282
- return visited.has(sourceId) && visited.has(targetId);
1283
- });
1284
- return { nodes: resultNodes, links: resultLinks };
1285
- };
1286
- const highlights = useMemo(() => {
1287
- if (!selectedNodeId) {
1288
- return { nodes: [], links: [] };
1289
- }
1290
- const node = nodesById[selectedNodeId];
1291
- if (!node) {
1292
- return { nodes: [], links: [] };
1293
- }
1294
- const pathHighlights = breadthFirstSearch(node.id, rootId);
1295
- const children2 = collectChildren(node, 25);
1296
- return {
1297
- nodes: [...pathHighlights.nodes, ...children2.nodes],
1298
- links: [...pathHighlights.links, ...children2.links]
1299
- };
1300
- }, [selectedNodeId, nodesById, rootId, breadthFirstSearch]);
1301
- const prunedTree = useMemo(() => {
1302
- const visibleNodes = [];
1303
- const visibleLinks = [];
1304
- (function traverseTree(node = nodesById[rootId]) {
1305
- visibleNodes.push(node);
1306
- if (node.collapsed) return;
1307
- visibleLinks.push(...node.childLinks);
1308
- node.childLinks.map((link) => link.target).forEach(traverseTree);
1309
- })();
1310
- visibleNodes.sort((a, b) => {
1311
- const aHighlighted = highlights.nodes.includes(a);
1312
- const bHighlighted = highlights.nodes.includes(b);
1313
- if (aHighlighted && !bHighlighted) return -1;
1314
- if (!aHighlighted && bHighlighted) return 1;
1315
- if (a.collapsed && !b.collapsed) return 1;
1316
- if (!a.collapsed && b.collapsed) return -1;
1317
- return 0;
1318
- });
1319
- return { nodes: visibleNodes, links: visibleLinks };
1320
- }, [nodesById, rootId, highlights]);
1321
- const handleNodeClick = useCallback(
1322
- (nodeId) => {
1323
- const node = nodesById[nodeId];
1324
- if (node.id === rootId) {
1325
- setSelectedNodeId(null);
1326
- return;
1327
- }
1328
- if (selectedNode?.id !== node.id) {
1329
- node.collapsed = false;
1330
- } else {
1331
- node.collapsed = !node.collapsed;
1332
- }
1333
- if (node.collapsed) {
1334
- if (selectedNode) {
1335
- let collapseFrom2 = function(node2) {
1336
- const childNodes = node2.childLinks.map((link) => link.target);
1337
- const shouldCollapse = childNodes.every(
1338
- (child) => child.childLinks.length === 0
1339
- );
1340
- node2.collapsed = shouldCollapse;
1341
- childNodes.forEach(collapseFrom2);
1342
- if (node2.clusterSize === 0) node2.collapsed = false;
1343
- };
1344
- var collapseFrom = collapseFrom2;
1345
- collapseFrom2(selectedNode);
1346
- }
1347
- setSelectedNodeId(null);
1348
- } else {
1349
- const children2 = collectChildren(node, 25);
1350
- children2.nodes.forEach((n) => {
1351
- n.collapsed = false;
1352
- });
1353
- setSelectedNodeId(node.id);
1354
- }
1355
- },
1356
- [rootId, selectedNode, collectChildren, nodesById, setSelectedNodeId]
1357
- );
1358
- useEffect(() => {
1359
- setLayoutConfig((prev) => ({
1360
- ...prev,
1361
- dagLevelDistance: scaleLinear().domain([0, data.nodes.length]).range([_config.minDagLevelDistance, _config.maxDagLevelDistance])(
1362
- prunedTree.nodes.length
1363
- )
1364
- }));
1365
- }, [prunedTree.nodes.length, data.nodes.length, _config]);
1366
- const allSizes = graphData.nodes.filter((n) => n.collapsed).map((n) => n.clusterSize || 1);
1367
- const minClusterSize = Math.min(...allSizes);
1368
- const maxClusterSize = Math.max(...allSizes);
1369
- const allLevels = graphData.nodes.map((n) => n.level || 0);
1370
- const minNodeLevel = Math.min(...allLevels);
1371
- const maxNodeLevel = Math.max(...allLevels);
1372
- const getNodeSize = useCallback(
1373
- (nodeId) => {
1374
- const n = nodesById[nodeId];
1375
- if (!n) return 0;
1376
- if (!n.collapsed && hasNodeChildren(n.id)) return _config.nodeSize;
1377
- if (!n.collapsed || n.id === rootId) return _config.nodeSize;
1378
- return normalize(
1379
- n.clusterSize,
1380
- minClusterSize,
1381
- maxClusterSize,
1382
- _config.minClusterSize / 2,
1383
- _config.maxClusterSize / 2
1384
- );
1385
- },
1386
- [
1387
- _config,
1388
- minClusterSize,
1389
- maxClusterSize,
1390
- rootId,
1391
- hasNodeChildren,
1392
- nodesById
1393
- ]
1394
- );
1395
- const getNodeForce = useCallback(
1396
- (nodeId) => {
1397
- const n = nodesById[nodeId];
1398
- if (!n) return 0;
1399
- if (selectedNode?.id === n.id) return _config.nodeSize * 1.5;
1400
- if (!n.collapsed && hasNodeChildren(n.id)) return _config.nodeSize * 2;
1401
- if (!n.collapsed || n.id === rootId) return _config.nodeSize * 0.75;
1402
- return normalize(
1403
- n.clusterSize,
1404
- minClusterSize,
1405
- maxClusterSize,
1406
- _config.minClusterSize / 2,
1407
- _config.maxClusterSize / 2
1408
- );
1409
- },
1410
- [
1411
- _config,
1412
- minClusterSize,
1413
- maxClusterSize,
1414
- rootId,
1415
- hasNodeChildren,
1416
- selectedNode,
1417
- nodesById
1418
- ]
1419
- );
1420
- const contextValue = {
1421
- rootId,
1422
- data: prunedTree,
1423
- onClickNode: handleNodeClick,
1424
- hasNodeChildren,
1425
- clusterSizeRange: [minClusterSize, maxClusterSize],
1426
- graphLevelRange: [minNodeLevel, maxNodeLevel],
1427
- layoutConfig,
1428
- setLayoutConfig,
1429
- selectedNode,
1430
- setSelectedNodeId,
1431
- selectedNodeId,
1432
- highlights,
1433
- ref,
1434
- theme: _theme,
1435
- setTheme,
1436
- config: _config,
1437
- setConfig,
1438
- getNodeSize,
1439
- getNodeForce,
1440
- search: breadthFirstSearch
1441
- };
1442
- return /* @__PURE__ */ jsx(OpenFormGraphContext.Provider, { value: contextValue, children });
1443
- }
1444
- function useOpenFormGraph() {
1445
- const context = useContext(OpenFormGraphContext);
1446
- if (!context) {
1447
- throw new Error(
1448
- "useOpenFormGraph must be used within a OpenFormGraphProvider"
1449
- );
1450
- }
1451
- return context;
1452
- }
1453
-
1454
- // src/util/color.ts
1455
- function color(rgb) {
1456
- const colorHandler = function(arg) {
1457
- if (typeof arg === "number") {
1458
- return `rgba(${rgb[0]},${rgb[1]},${rgb[2]},${arg})`;
1459
- }
1460
- if (typeof arg === "function") {
1461
- const transformedRGB = arg(rgb);
1462
- return color(transformedRGB);
1463
- }
1464
- return `rgb(${rgb[0]},${rgb[1]},${rgb[2]})`;
1465
- };
1466
- colorHandler.rgb = rgb;
1467
- return colorHandler;
1468
- }
1469
- function dim(factor = 0.6, white = true) {
1470
- const base = white ? 255 : 0;
1471
- return function(rgb) {
1472
- return [
1473
- Math.round(rgb[0] + (base - rgb[0]) * (1 - factor)),
1474
- Math.round(rgb[1] + (base - rgb[1]) * (1 - factor)),
1475
- Math.round(rgb[2] + (base - rgb[2]) * (1 - factor))
1476
- ];
1477
- };
1478
- }
1479
-
1480
- // src/hooks/useColor.ts
1481
- function useColor() {
1482
- const { theme, config } = useOpenFormGraph();
1483
- return {
1484
- color: theme === "light" ? color(config.theme.dark) : color(config.theme.light),
1485
- colorContrast: theme === "light" ? color(config.theme.light) : color(config.theme.dark)
1486
- };
1487
- }
1488
-
1489
- // src/hooks/useGraphLinks.ts
1490
- function useGraphLinks() {
1491
- const { color: color2 } = useColor();
1492
- const { highlights, selectedNode, theme } = useOpenFormGraph();
1493
- return {
1494
- linkColor: (link) => {
1495
- const isLight = theme === "light";
1496
- const visible = isLight ? 0.2 : 0.15;
1497
- const opaque = isLight ? 0.1 : 0.05;
1498
- if (!selectedNode) return color2(visible);
1499
- const isHighlighted = highlights.links.find((l) => l === link);
1500
- return color2(isHighlighted ? visible : opaque);
1501
- },
1502
- linkWidth: (link) => {
1503
- const isHighlighted = highlights.links.find((l) => l === link);
1504
- return isHighlighted ? 1.2 : 1;
1505
- }
1506
- };
1507
- }
1508
-
1509
- // src/util/canvas.ts
1510
- function circle(ctx, x, y, radius = 5, options) {
1511
- const {
1512
- fill = true,
1513
- fillStyle,
1514
- stroke = false,
1515
- strokeStyle,
1516
- lineWidth = 0.2
1517
- } = options || {};
1518
- ctx.save();
1519
- if (fillStyle !== void 0) ctx.fillStyle = fillStyle;
1520
- if (strokeStyle !== void 0) ctx.strokeStyle = strokeStyle;
1521
- if (lineWidth !== void 0) ctx.lineWidth = lineWidth;
1522
- ctx.beginPath();
1523
- ctx.arc(x, y, radius, 0, 2 * Math.PI);
1524
- ctx.closePath();
1525
- if (fill) {
1526
- ctx.fill();
1527
- }
1528
- if (stroke) {
1529
- ctx.stroke();
1530
- }
1531
- ctx.restore();
1532
- }
1533
- function rect(ctx, x, y, width, height, options) {
1534
- const {
1535
- fill = true,
1536
- fillStyle,
1537
- stroke = false,
1538
- strokeStyle,
1539
- lineWidth = 0.2,
1540
- borderRadius = 0
1541
- } = options || {};
1542
- ctx.save();
1543
- if (fillStyle !== void 0) ctx.fillStyle = fillStyle;
1544
- if (strokeStyle !== void 0) ctx.strokeStyle = strokeStyle;
1545
- if (lineWidth !== void 0) ctx.lineWidth = lineWidth;
1546
- const r = Math.min(borderRadius, width / 2, height / 2);
1547
- ctx.beginPath();
1548
- if (r > 0) {
1549
- ctx.moveTo(x + r, y);
1550
- ctx.lineTo(x + width - r, y);
1551
- ctx.quadraticCurveTo(x + width, y, x + width, y + r);
1552
- ctx.lineTo(x + width, y + height - r);
1553
- ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height);
1554
- ctx.lineTo(x + r, y + height);
1555
- ctx.quadraticCurveTo(x, y + height, x, y + height - r);
1556
- ctx.lineTo(x, y + r);
1557
- ctx.quadraticCurveTo(x, y, x + r, y);
1558
- } else {
1559
- ctx.rect(x, y, width, height);
1560
- }
1561
- ctx.closePath();
1562
- if (fill) {
1563
- ctx.fill();
1564
- }
1565
- if (stroke) {
1566
- ctx.stroke();
1567
- }
1568
- ctx.restore();
1569
- }
1570
- function img(ctx, image, x, y, width, height, borderRadius = 0, opacity = 1, bgColor) {
1571
- ctx.save();
1572
- ctx.beginPath();
1573
- if (borderRadius > 0) {
1574
- const r = Math.min(borderRadius, width / 2, height / 2);
1575
- ctx.moveTo(x + r, y);
1576
- ctx.lineTo(x + width - r, y);
1577
- ctx.quadraticCurveTo(x + width, y, x + width, y + r);
1578
- ctx.lineTo(x + width, y + height - r);
1579
- ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height);
1580
- ctx.lineTo(x + r, y + height);
1581
- ctx.quadraticCurveTo(x, y + height, x, y + height - r);
1582
- ctx.lineTo(x, y + r);
1583
- ctx.quadraticCurveTo(x, y, x + r, y);
1584
- } else {
1585
- ctx.rect(x, y, width, height);
1586
- }
1587
- ctx.closePath();
1588
- if (bgColor) {
1589
- ctx.save();
1590
- ctx.fillStyle = bgColor;
1591
- ctx.globalAlpha = 1;
1592
- ctx.fillRect(x, y, width, height);
1593
- ctx.restore();
1594
- }
1595
- ctx.clip();
1596
- ctx.globalAlpha = opacity;
1597
- ctx.drawImage(image, x, y, width, height);
1598
- ctx.restore();
1599
- }
1600
- function hexagon(ctx, x, y, radius, options) {
1601
- const {
1602
- fill = true,
1603
- fillStyle,
1604
- stroke = false,
1605
- strokeStyle,
1606
- lineWidth = 0.2,
1607
- rotation = 0,
1608
- borderRadius = 0
1609
- } = options || {};
1610
- ctx.save();
1611
- if (fillStyle !== void 0) ctx.fillStyle = fillStyle;
1612
- if (strokeStyle !== void 0) ctx.strokeStyle = strokeStyle;
1613
- if (lineWidth !== void 0) ctx.lineWidth = lineWidth;
1614
- const sides = 6;
1615
- const angleStep = Math.PI * 2 / sides;
1616
- ctx.beginPath();
1617
- const points = [];
1618
- for (let i = 0; i < sides; i++) {
1619
- const angle = rotation + i * angleStep;
1620
- points.push({
1621
- x: x + radius * Math.cos(angle),
1622
- y: y + radius * Math.sin(angle)
1623
- });
1624
- }
1625
- if (borderRadius > 0) {
1626
- const maxBorderRadius = Math.min(borderRadius, radius / 3);
1627
- for (let i = 0; i < sides; i++) {
1628
- const current = points[i];
1629
- const next = points[(i + 1) % sides];
1630
- const prev = points[(i - 1 + sides) % sides];
1631
- const toPrev = { x: prev.x - current.x, y: prev.y - current.y };
1632
- const toNext = { x: next.x - current.x, y: next.y - current.y };
1633
- const lenPrev = Math.sqrt(toPrev.x * toPrev.x + toPrev.y * toPrev.y);
1634
- const lenNext = Math.sqrt(toNext.x * toNext.x + toNext.y * toNext.y);
1635
- const normPrev = { x: toPrev.x / lenPrev, y: toPrev.y / lenPrev };
1636
- const normNext = { x: toNext.x / lenNext, y: toNext.y / lenNext };
1637
- const cpPrev = {
1638
- x: current.x + normPrev.x * maxBorderRadius,
1639
- y: current.y + normPrev.y * maxBorderRadius
1640
- };
1641
- const cpNext = {
1642
- x: current.x + normNext.x * maxBorderRadius,
1643
- y: current.y + normNext.y * maxBorderRadius
1644
- };
1645
- if (i === 0) {
1646
- ctx.moveTo(cpPrev.x, cpPrev.y);
1647
- } else {
1648
- ctx.lineTo(cpPrev.x, cpPrev.y);
1649
- }
1650
- ctx.quadraticCurveTo(current.x, current.y, cpNext.x, cpNext.y);
1651
- }
1652
- } else {
1653
- ctx.moveTo(points[0].x, points[0].y);
1654
- for (let i = 1; i < sides; i++) {
1655
- ctx.lineTo(points[i].x, points[i].y);
1656
- }
1657
- }
1658
- ctx.closePath();
1659
- if (fill) {
1660
- ctx.fill();
1661
- }
1662
- if (stroke) {
1663
- ctx.stroke();
1664
- }
1665
- ctx.restore();
1666
- }
1667
-
1668
- // src/hooks/useGraphNodes.ts
1669
- import { scaleLog } from "d3-scale";
1670
- import { useCallback as useCallback2 } from "react";
1671
- function useGraphNodes() {
1672
- const {
1673
- selectedNode,
1674
- theme,
1675
- clusterSizeRange,
1676
- highlights,
1677
- hasNodeChildren,
1678
- config,
1679
- getNodeSize
1680
- } = useOpenFormGraph();
1681
- const { color: color2, colorContrast } = useColor();
1682
- const visibilityScale = useCallback2(
1683
- (clusterSize, currentZoom) => {
1684
- const minZoomRequired = scaleLog().domain([1, clusterSizeRange[1]]).range([7.5, 1.8]).clamp(true)(clusterSize);
1685
- return currentZoom >= minZoomRequired ? 1 : 0;
1686
- },
1687
- [clusterSizeRange]
1688
- );
1689
- const nodePointerAreaPaint = useCallback2(
1690
- (node, col, ctx, scale) => {
1691
- const x = node.x || 0;
1692
- const y = node.y || 0;
1693
- const size = getNodeSize(node.id);
1694
- const collapsed = node.collapsed && hasNodeChildren(node.id);
1695
- const isSelected = selectedNode?.id === node.id;
1696
- if (collapsed) {
1697
- circle(ctx, x, y, size, {
1698
- stroke: true,
1699
- strokeStyle: col,
1700
- fill: true,
1701
- fillStyle: col
1702
- });
1703
- } else {
1704
- rect(ctx, x - size / 2, y - size / 2, size, size, {
1705
- stroke: true,
1706
- strokeStyle: col,
1707
- lineWidth: isSelected ? 1 : 0.2,
1708
- fill: true,
1709
- fillStyle: col,
1710
- borderRadius: 1
1711
- });
1712
- }
1713
- },
1714
- [getNodeSize, hasNodeChildren, selectedNode]
1715
- );
1716
- const renderNode = useCallback2(
1717
- (node, ctx, scale) => {
1718
- const isSelected = selectedNode?.id === node.id;
1719
- const isHighlighted = highlights.nodes.find((n) => n.id === node.id);
1720
- const size = getNodeSize(node.id) + (isSelected ? 5 : 0);
1721
- const fontSize = 12 / scale;
1722
- const isLight = theme === "light";
1723
- const x = node.x || 0;
1724
- const y = node.y || 0;
1725
- let opacity = 1;
1726
- if (selectedNode && !isHighlighted) {
1727
- opacity = 0.1;
1728
- }
1729
- const collapsed = node.collapsed && hasNodeChildren(node.id);
1730
- if (collapsed) {
1731
- circle(ctx, x, y, size, {
1732
- stroke: true,
1733
- strokeStyle: colorContrast(dim(opacity, isLight))(),
1734
- fill: true,
1735
- fillStyle: color2(dim(opacity, isLight))()
1736
- });
1737
- const showLabel = visibilityScale(node.clusterSize, scale);
1738
- if (showLabel) {
1739
- ctx.font = `${fontSize}px Sans-Serif`;
1740
- ctx.textAlign = "center";
1741
- ctx.textBaseline = "middle";
1742
- ctx.fillStyle = colorContrast(opacity);
1743
- ctx.fillText(node.clusterSize.toString(), x, y);
1744
- }
1745
- } else {
1746
- if (node.id !== VOID_ROOT_ID) {
1747
- rect(ctx, x - size / 2, y - size / 2, size, size, {
1748
- stroke: true,
1749
- strokeStyle: color2(dim(opacity, isLight))(),
1750
- lineWidth: isSelected ? 1 : 0.2,
1751
- fill: true,
1752
- fillStyle: color2(dim(opacity, isLight))(),
1753
- borderRadius: 1
1754
- });
1755
- } else {
1756
- hexagon(ctx, x, y, size, {
1757
- stroke: true,
1758
- strokeStyle: color2(dim(opacity, isLight))(),
1759
- lineWidth: isSelected ? 1 : 0.2,
1760
- fill: true,
1761
- fillStyle: color2(dim(opacity, isLight))(),
1762
- borderRadius: 1
1763
- });
1764
- }
1765
- if (node.image) {
1766
- const PADDING = 0.5;
1767
- img(
1768
- ctx,
1769
- node.image,
1770
- x - (size - PADDING) / 2,
1771
- y - (size - PADDING) / 2,
1772
- size - PADDING,
1773
- size - PADDING,
1774
- 1,
1775
- opacity,
1776
- isLight ? "white" : "black"
1777
- );
1778
- }
1779
- const showLabel = false;
1780
- if (showLabel) {
1781
- ctx.font = "6px Sans-Serif";
1782
- ctx.textAlign = "left";
1783
- ctx.textBaseline = "middle";
1784
- ctx.fillText(node.label, x + config.nodeSize, y);
1785
- }
1786
- }
1787
- },
1788
- [
1789
- selectedNode,
1790
- theme,
1791
- clusterSizeRange,
1792
- highlights,
1793
- hasNodeChildren,
1794
- config,
1795
- visibilityScale,
1796
- color2,
1797
- getNodeSize
1798
- ]
1799
- );
1800
- return {
1801
- renderNode,
1802
- nodePointerAreaPaint
1803
- };
1804
- }
1805
-
1806
- // src/components/OpenFormGraph.tsx
1807
- import { jsx as jsx2 } from "react/jsx-runtime";
1808
- function OpenFormGraph(props) {
1809
- const { width, height } = props;
1810
- const {
1811
- ref,
1812
- hasNodeChildren,
1813
- rootId,
1814
- config,
1815
- clusterSizeRange,
1816
- data,
1817
- layoutConfig,
1818
- selectedNode,
1819
- highlights,
1820
- onClickNode,
1821
- getNodeSize,
1822
- getNodeForce
1823
- } = useOpenFormGraph();
1824
- const { renderNode, nodePointerAreaPaint } = useGraphNodes();
1825
- const links = useGraphLinks();
1826
- useEffect2(() => {
1827
- if (!ref.current) return;
1828
- ref.current.d3Force(
1829
- "collision",
1830
- forceCollide().strength(0.3).radius((node) => {
1831
- return getNodeForce(node.id);
1832
- })
1833
- );
1834
- ref.current.d3Force("center", null);
1835
- ref.current.d3Force("link")?.distance((l) => {
1836
- if (!l.target.collapsed) return config.nodeSize;
1837
- return config.nodeSize * 2;
1838
- });
1839
- }, [ref, config, hasNodeChildren, clusterSizeRange, rootId, getNodeForce]);
1840
- const reheated = useRef2(false);
1841
- return /* @__PURE__ */ jsx2(
1842
- ForceGraph2D,
1843
- {
1844
- ref,
1845
- width,
1846
- height,
1847
- graphData: data,
1848
- dagMode: "radialout",
1849
- onDagError: (err) => {
1850
- console.error("dag error", err);
1851
- },
1852
- d3VelocityDecay: layoutConfig.velocityDecay,
1853
- d3AlphaDecay: layoutConfig.alphaDecay,
1854
- d3AlphaMin: layoutConfig.alphaMin,
1855
- dagLevelDistance: layoutConfig.dagLevelDistance,
1856
- cooldownTicks: 4e3,
1857
- onEngineStop: () => {
1858
- ref.current?.zoomToFit(
1859
- 400,
1860
- config.focusPadding,
1861
- (node) => selectedNode ? highlights.nodes.findIndex((n) => n.id === node.id) > -1 : true
1862
- );
1863
- },
1864
- minZoom: config.minZoom,
1865
- maxZoom: config.maxZoom,
1866
- nodeRelSize: 2,
1867
- enableNodeDrag: false,
1868
- onNodeClick: (n) => onClickNode(n.id),
1869
- onNodeDrag: () => {
1870
- if (!reheated.current) {
1871
- ref.current?.d3ReheatSimulation();
1872
- reheated.current = true;
1873
- }
1874
- },
1875
- onNodeDragEnd: () => {
1876
- reheated.current = false;
1877
- },
1878
- nodeVal: (node) => {
1879
- const n = node;
1880
- return getNodeSize(n.id);
1881
- },
1882
- nodeCanvasObject: renderNode,
1883
- nodePointerAreaPaint,
1884
- ...links
1885
- }
1886
- );
1887
- }
1888
-
1889
- // src/components/OpenFormGraph3D.tsx
1890
- import ForceGraph3D from "react-force-graph-3d";
1891
- import { useEffect as useEffect4, useRef as useRef4 } from "react";
1892
- import { forceCollide as forceCollide2 } from "d3-force";
1893
-
1894
- // src/hooks/useGraphNodesThree.ts
1895
- import { useCallback as useCallback3, useEffect as useEffect3, useRef as useRef3 } from "react";
1896
- import { scaleLog as scaleLog2 } from "d3-scale";
1897
- import * as THREE from "three";
1898
- import SpriteText from "three-spritetext";
1899
- import throttle from "lodash.throttle";
1900
- function rgbToHex(rgb) {
1901
- const result = rgb.match(/\d+/g);
1902
- if (!result || result.length < 3) return "#000000";
1903
- const [r, g, b] = result.map((n) => parseInt(n).toString(16).padStart(2, "0"));
1904
- return `#${r}${g}${b}`;
1905
- }
1906
- function useGraphNodesThree() {
1907
- const {
1908
- selectedNode,
1909
- clusterSizeRange,
1910
- highlights,
1911
- hasNodeChildren,
1912
- getNodeSize,
1913
- ref
1914
- } = useOpenFormGraph();
1915
- const { color: color2 } = useColor();
1916
- const zoomRef = useRef3(0);
1917
- useEffect3(() => {
1918
- if (!ref.current) return;
1919
- const _ref = ref.current;
1920
- const throttledDebounce = throttle(() => {
1921
- }, 30);
1922
- const controls = _ref.controls();
1923
- const handleChange = (e) => {
1924
- zoomRef.current = e.target.object.position.z;
1925
- throttledDebounce();
1926
- };
1927
- controls.addEventListener("change", handleChange);
1928
- return () => {
1929
- controls.removeEventListener("change", handleChange);
1930
- throttledDebounce.cancel();
1931
- };
1932
- }, []);
1933
- const visibilityScale = useCallback3(
1934
- (clusterSize, currentZoom) => {
1935
- const minZoomRequired = scaleLog2().domain([1, clusterSizeRange[1]]).range([1e3, 300]).clamp(true)(clusterSize);
1936
- return currentZoom >= minZoomRequired ? 0 : 1;
1937
- },
1938
- [clusterSizeRange]
1939
- );
1940
- const nodeThreeObject = useCallback3(
1941
- (node) => {
1942
- const size = getNodeSize(node.id);
1943
- const isSelected = selectedNode?.id === node.id;
1944
- const isHighlighted = highlights.nodes.find((n) => n.id === node.id);
1945
- let opacity = 1;
1946
- if (selectedNode && !isHighlighted) {
1947
- opacity = 0.1;
1948
- }
1949
- if (node.imgSrc && !node.collapsed) {
1950
- const geometry2 = new THREE.PlaneGeometry(size, size);
1951
- const material2 = new THREE.MeshLambertMaterial({
1952
- color: 0,
1953
- transparent: true,
1954
- opacity,
1955
- side: THREE.DoubleSide
1956
- });
1957
- const plane = new THREE.Mesh(geometry2, material2);
1958
- plane.userData = { node };
1959
- return plane;
1960
- }
1961
- if (node.collapsed && hasNodeChildren(node.id)) {
1962
- const geometry2 = new THREE.SphereGeometry(size / 2, 16, 16);
1963
- const material2 = new THREE.MeshLambertMaterial({
1964
- color: 0,
1965
- transparent: true,
1966
- opacity
1967
- });
1968
- const sphere = new THREE.Mesh(geometry2, material2);
1969
- sphere.userData = { node };
1970
- const showLabel = visibilityScale(node.clusterSize, zoomRef.current);
1971
- if (showLabel) {
1972
- const label = new SpriteText(String(node.clusterSize));
1973
- label.color = rgbToHex(color2(1));
1974
- label.textHeight = 10;
1975
- const group = new THREE.Group();
1976
- group.add(sphere);
1977
- group.add(label);
1978
- return group;
1979
- }
1980
- return sphere;
1981
- }
1982
- const rgbColor = color2(opacity);
1983
- const hex = rgbToHex(rgbColor);
1984
- const geometry = new THREE.BoxGeometry(size, size, size);
1985
- const material = new THREE.MeshLambertMaterial({
1986
- color: hex,
1987
- transparent: true,
1988
- opacity
1989
- });
1990
- const box = new THREE.Mesh(geometry, material);
1991
- box.userData = { node };
1992
- return box;
1993
- },
1994
- [
1995
- getNodeSize,
1996
- selectedNode,
1997
- highlights,
1998
- hasNodeChildren,
1999
- visibilityScale,
2000
- color2
2001
- ]
2002
- );
2003
- return {
2004
- nodeThreeObject
2005
- };
2006
- }
2007
-
2008
- // src/components/OpenFormGraph3D.tsx
2009
- import { jsx as jsx3 } from "react/jsx-runtime";
2010
- function OpenFormGraph3D(props) {
2011
- const { width, height } = props;
2012
- const {
2013
- ref,
2014
- theme,
2015
- hasNodeChildren,
2016
- rootId,
2017
- config,
2018
- clusterSizeRange,
2019
- data,
2020
- layoutConfig,
2021
- selectedNode,
2022
- highlights,
2023
- onClickNode,
2024
- getNodeSize,
2025
- getNodeForce
2026
- } = useOpenFormGraph();
2027
- const nodes = useGraphNodesThree();
2028
- const links = useGraphLinks();
2029
- useEffect4(() => {
2030
- if (!ref.current) return;
2031
- ref.current.d3Force(
2032
- "collision",
2033
- forceCollide2().strength(0.3).radius((node) => {
2034
- return getNodeForce(node.id);
2035
- })
2036
- );
2037
- ref.current.d3Force("center", null);
2038
- ref.current.d3Force("link")?.distance((l) => {
2039
- if (!l.target.collapsed) return config.nodeSize;
2040
- return config.nodeSize * 2;
2041
- });
2042
- }, [ref, config, hasNodeChildren, clusterSizeRange, rootId, getNodeForce]);
2043
- const reheated = useRef4(false);
2044
- return /* @__PURE__ */ jsx3(
2045
- ForceGraph3D,
2046
- {
2047
- ref,
2048
- width,
2049
- height,
2050
- graphData: data,
2051
- dagMode: "radialout",
2052
- onDagError: (err) => {
2053
- console.error("dag error", err);
2054
- },
2055
- d3VelocityDecay: layoutConfig.velocityDecay,
2056
- d3AlphaDecay: layoutConfig.alphaDecay,
2057
- d3AlphaMin: layoutConfig.alphaMin,
2058
- dagLevelDistance: layoutConfig.dagLevelDistance,
2059
- cooldownTicks: 4e3,
2060
- onEngineStop: () => {
2061
- },
2062
- nodeRelSize: 2,
2063
- enableNodeDrag: false,
2064
- numDimensions: 2,
2065
- backgroundColor: theme === "dark" ? "#000" : "#fff",
2066
- onNodeClick: (n) => onClickNode(n.id),
2067
- onNodeDrag: () => {
2068
- if (!reheated.current) {
2069
- ref.current?.d3ReheatSimulation();
2070
- reheated.current = true;
2071
- }
2072
- },
2073
- onNodeDragEnd: () => {
2074
- reheated.current = false;
2075
- },
2076
- nodeVal: (node) => {
2077
- const n = node;
2078
- return getNodeSize(n.id);
2079
- },
2080
- ...nodes,
2081
- ...links
2082
- }
2083
- );
2084
- }
2085
- export {
2086
- DEFAULT_GRAPH_CONFIG,
2087
- OpenFormGraph,
2088
- OpenFormGraph3D,
2089
- OpenFormGraphProvider,
2090
- VOID_ROOT_ID,
2091
- collectChildren,
2092
- color,
2093
- dim,
2094
- generateTree,
2095
- normalize,
2096
- preloadImage,
2097
- useOpenFormGraph
2098
- };
2099
- //# sourceMappingURL=index.js.map
4
+ export { DEFAULT_GRAPH_CONFIG, Highlight, OpenFormGraph, OpenFormGraphProvider, OpenGraphEventEmitter, OpenGraphSimulation, TransformCanvas, VOID_DETACH_ID, VOID_ROOT_ID, buildTreeFromGraphData, circle, color, dim, generateTree, getAllParentsUntil, getChildren, getClusterSize, getNodeDepth, getNodeId, getNodeSubgraph, getParents, getPrunedData, getRootParent, hasOnlyLeafs, hexagon, img, isCustomHighlight, isSimLink, isSimNode, loadHTMLImageElement, rect, red, searchParents, useOpenFormGraph };