browse the protocol like its 2008 ibex.desertthunder.dev
ubuntu atproto svelte
7

Configure Feed

Select the types of activity you want to include in your feed.

feat: MIME type images

Owais Jamil (Jun 16, 2026, 11:26 PM -0500) 020da3cc 6b7a41e1

+241 -26
+1 -4
.changeset/config.json
··· 8 8 "baseBranch": "main", 9 9 "updateInternalDependencies": "patch", 10 10 "ignore": [], 11 - "privatePackages": { 12 - "version": true, 13 - "tag": true 14 - } 11 + "privatePackages": { "version": true, "tag": true } 15 12 }
+8 -3
src/lib/atproto/blobs.svelte.ts
··· 81 81 82 82 openMedia(identity: AccountIdentity, media: BlobReference) { 83 83 this.loadedDid = identity.did; 84 - const summary = blobSummary(identity, media.cid, media.sourceUri); 84 + const summary = blobSummary(identity, media.cid, media.sourceUri, media.sourceIcon); 85 85 86 86 if (!this.blobs.some((blob) => blob.cid === media.cid)) { 87 87 this.blobs = [summary, ...this.blobs]; ··· 138 138 ); 139 139 } 140 140 141 - function blobSummary(identity: AccountIdentity, cid: string, sourceUri: string | null): RepoBlobSummary { 142 - return { cid, sourceUri, rawUrl: rawBlobUrl(identity, cid) }; 141 + function blobSummary( 142 + identity: AccountIdentity, 143 + cid: string, 144 + sourceUri: string | null, 145 + sourceIcon?: string 146 + ): RepoBlobSummary { 147 + return { cid, sourceUri, sourceIcon, rawUrl: rawBlobUrl(identity, cid) }; 143 148 } 144 149 145 150 function rawBlobUrl(identity: AccountIdentity, cid: string) {
+2 -2
src/lib/atproto/types.ts
··· 38 38 appLabel: string | null; 39 39 }; 40 40 41 - export type BlobReference = { cid: string; sourceUri: string | null }; 41 + export type BlobReference = { cid: string; sourceUri: string | null; sourceIcon?: string }; 42 42 43 - export type RepoBlobSummary = { cid: string; rawUrl: string; sourceUri: string | null }; 43 + export type RepoBlobSummary = { cid: string; rawUrl: string; sourceUri: string | null; sourceIcon?: string }; 44 44 45 45 export type RecordRouteParams = { did: string; collection: string; rkey: string }; 46 46
+1 -1
src/lib/components/CollectionBrowser.svelte
··· 48 48 49 49 if (identity && blob) { 50 50 repoBrowser.selectedRecord = record; 51 - repoBlobs.openMedia(identity, blob); 51 + repoBlobs.openMedia(identity, { ...blob, sourceIcon: record.icon }); 52 52 windowManager.setTitle('eog', `${blob.cid} - Eye of GNOME`, '/icons/humanity/apps/eog.svg'); 53 53 windowManager.open('eog'); 54 54 void goto(blobPath(identity.did, blob.cid), { keepFocus: true, noScroll: true });
+1 -1
src/lib/components/EyeOfGnome.svelte
··· 76 76 class:active={blob.cid === repoBlobs.selectedCid} 77 77 aria-current={blob.cid === repoBlobs.selectedCid ? 'true' : undefined} 78 78 onclick={() => selectBlob(blob.cid)}> 79 - <img src="/icons/humanity/mimes/image-x-generic.svg" alt="" width="24" height="24" /> 79 + <img src={blob.sourceIcon ?? '/icons/humanity/mimes/image-x-generic.svg'} alt="" width="24" height="24" /> 80 80 <span>{blob.cid}</span> 81 81 </button> 82 82 {/each}
+19 -4
src/lib/components/IdentityInspector.svelte
··· 16 16 17 17 return [ 18 18 { id: 'overview', label: 'Identity', icon: '/icons/humanity/status/network-wireless-encrypted.svg', count: 1 }, 19 - { id: 'aliases', label: 'Handle aliases', icon: '/icons/humanity/places/user-home.svg', count: inspection.aliases.length }, 19 + { 20 + id: 'aliases', 21 + label: 'Handle aliases', 22 + icon: '/icons/humanity/places/user-home.svg', 23 + count: inspection.aliases.length 24 + }, 20 25 { 21 26 id: 'services', 22 27 label: 'Services', ··· 136 141 </div> 137 142 {:else} 138 143 <header class="identity-heading"> 139 - <img src={identity?.avatar ?? '/icons/humanity/status/network-wireless-encrypted.svg'} alt="" width="48" height="48" /> 144 + <img 145 + src={identity?.avatar ?? '/icons/humanity/status/network-wireless-encrypted.svg'} 146 + alt="" 147 + width="48" 148 + height="48" /> 140 149 <div> 141 150 <p>Default public keyring</p> 142 151 <h2>{inspection.handle ? `@${inspection.handle}` : inspection.did}</h2> ··· 167 176 {#if inspection.handleValidation} 168 177 <div class="validation-list" aria-label="Handle validation"> 169 178 {#each [inspection.handleValidation.resolveHandle, inspection.handleValidation.wellKnown, inspection.handleValidation.dnsTxt] as check (check.label)} 170 - <div class="validation-row" class:mismatch={check.status === 'mismatch'} class:valid={check.status === 'valid'}> 179 + <div 180 + class="validation-row" 181 + class:mismatch={check.status === 'mismatch'} 182 + class:valid={check.status === 'valid'}> 171 183 <img 172 184 src={check.status === 'valid' 173 185 ? '/icons/humanity/status/network-wireless-encrypted.svg' ··· 211 223 <div> 212 224 <strong>{service.id ?? 'Unnamed service'}</strong> 213 225 <p>{service.type ?? 'Unknown service type'}</p> 214 - <code>{typeof service.serviceEndpoint === 'string' ? service.serviceEndpoint : JSON.stringify(service.serviceEndpoint)}</code> 226 + <code 227 + >{typeof service.serviceEndpoint === 'string' 228 + ? service.serviceEndpoint 229 + : JSON.stringify(service.serviceEndpoint)}</code> 215 230 </div> 216 231 </div> 217 232 {:else}
+2 -11
src/routes/+layout.svelte
··· 217 217 accountSetup.load(); 218 218 } 219 219 220 - async function openRepoRoute(route: { 221 - did: string; 222 - app?: string; 223 - collection?: string; 224 - rkey?: string; 225 - cid?: string; 226 - }) { 220 + async function openRepoRoute(route: { did: string; app?: string; collection?: string; rkey?: string; cid?: string }) { 227 221 try { 228 222 const { hydratePublicIdentity } = await import('$lib/atproto/identity'); 229 223 const identity = await hydratePublicIdentity(route.did); ··· 241 235 if (route.app === 'blobs') { 242 236 await repoBrowser.load(identity); 243 237 await repoBlobs.load(identity, route.cid); 244 - windowManager.setTitle( 245 - 'eog', 246 - route.cid ? `${route.cid} - Eye of GNOME` : `${identity.handle} - Eye of GNOME` 247 - ); 238 + windowManager.setTitle('eog', route.cid ? `${route.cid} - Eye of GNOME` : `${identity.handle} - Eye of GNOME`); 248 239 windowManager.open('eog'); 249 240 return; 250 241 }
+38
static/icons/humanity/mimes/image-x-generic.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 + <svg id="svg2453" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink"> 4 + <defs id="defs2455"> 5 + <radialGradient id="radialGradient19613" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.028917 0 0 .012353 26.973 38.471)" r="117.14"/> 6 + <linearGradient id="linearGradient5060"> 7 + <stop id="stop5062" offset="0"/> 8 + <stop id="stop5064" style="stop-opacity:0" offset="1"/> 9 + </linearGradient> 10 + <radialGradient id="radialGradient19616" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.028917 0 0 .012353 21.027 38.471)" r="117.14"/> 11 + <linearGradient id="linearGradient19619" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.084497 0 0 .012353 -6.5396 38.471)" y1="366.65" x1="302.86"> 12 + <stop id="stop5050" style="stop-opacity:0" offset="0"/> 13 + <stop id="stop5056" offset=".5"/> 14 + <stop id="stop5052" style="stop-opacity:0" offset="1"/> 15 + </linearGradient> 16 + <linearGradient id="linearGradient2447" y2="14.029" gradientUnits="userSpaceOnUse" x2="25.818" gradientTransform="matrix(.50664 0 0 .35125 -58.338 -49.086)" y1="110.28" x1="108.26"> 17 + <stop id="stop3802" style="stop-color:#fff" offset="0"/> 18 + <stop id="stop3804" style="stop-color:#e0e0e0" offset="1"/> 19 + </linearGradient> 20 + <linearGradient id="linearGradient2444" y2="-40.164" gradientUnits="userSpaceOnUse" x2="-24.098" gradientTransform="matrix(1.1143 0 0 1.1111 2.7514 3.5103)" y1="-13.091" x1="-24.032"> 21 + <stop id="stop3796" style="stop-color:#333" offset="0"/> 22 + <stop id="stop3798" style="stop-color:#292929" offset="1"/> 23 + </linearGradient> 24 + <linearGradient id="linearGradient2442" y2="92.824" gradientUnits="userSpaceOnUse" x2="105.37" gradientTransform="matrix(.49084 0 0 .38034 -57.357 -48.338)" y1="17.333" x1="28.938"> 25 + <stop id="stop3790" style="stop-color:#262626" offset="0"/> 26 + <stop id="stop3792" style="stop-color:#828282" offset="1"/> 27 + </linearGradient> 28 + </defs> 29 + <g id="layer1"> 30 + <g id="g3257" style="opacity:.4"> 31 + <rect id="rect2879" style="fill:url(#linearGradient19619)" height="3" width="40.8" y="43" x="3.6"/> 32 + <path id="path2881" style="fill:url(#radialGradient19616)" d="m3.6 43v2.9998c-1.4891 0.006-3.6-0.672-3.6-1.5s1.6618-1.5 3.6-1.5z"/> 33 + <path id="path2883" style="fill:url(#radialGradient19613)" d="m44.4 43v2.9998c1.4891 0.0056 3.6-0.67211 3.6-1.5001 0-0.828-1.6618-1.4997-3.6-1.4997z"/> 34 + </g> 35 + <rect id="rect3580" style="stroke-opacity:.96863;stroke:#c1c1c1;stroke-linecap:round;fill:url(#linearGradient2447)" transform="matrix(-1 .0017332 -.00096053 -1 0 0)" height="35.922" width="44.966" y="-44.503" x="-46.457"/> 36 + <rect id="rect3582" style="stroke:url(#linearGradient2444);stroke-linecap:round;fill:url(#linearGradient2442)" transform="matrix(-.99999 .0037552 .0024409 -1 0 0)" rx="0" ry="0" height="29.854" width="38.927" y="-41.517" x="-43.529"/> 37 + </g> 38 + </svg>
+103
static/icons/humanity/mimes/video-x-generic.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 + <svg id="svg4351" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="48px" width="48px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/"> 4 + <defs id="defs4353"> 5 + <linearGradient id="linearGradient3409" y2="6.5436" gradientUnits="userSpaceOnUse" x2="34.103" y1="4.8577" x1="35.517"> 6 + <stop id="stop4269" style="stop-color:#c4c4c4" offset="0"/> 7 + <stop id="stop4271" style="stop-color:#c4c4c4;stop-opacity:0" offset="1"/> 8 + </linearGradient> 9 + <linearGradient id="linearGradient3412" y2="5.4565" gradientUnits="userSpaceOnUse" x2="36.358" gradientTransform="matrix(.99770 0 0 1.0407 .16380 -1.1058)" y1="8.059" x1="32.892"> 10 + <stop id="stop8591" style="stop-color:#fefefe" offset="0"/> 11 + <stop id="stop8593" style="stop-color:#cbcbcb" offset="1"/> 12 + </linearGradient> 13 + <filter id="filter3212" height="1.3287" width="1.2969" color-interpolation-filters="sRGB" y="-.16434" x="-.14846"> 14 + <feGaussianBlur id="feGaussianBlur3214" stdDeviation="0.77391625"/> 15 + </filter> 16 + <linearGradient id="linearGradient3416" y2="46.017" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(1 0 0 .97778 0 -.96667)" y1="2" x1="24"> 17 + <stop id="stop3213" style="stop-color:#fff" offset="0"/> 18 + <stop id="stop3215" style="stop-color:#fff;stop-opacity:0" offset="1"/> 19 + </linearGradient> 20 + <linearGradient id="linearGradient3438" y2="46.264" xlink:href="#linearGradient3932" gradientUnits="userSpaceOnUse" x2="-22.54" gradientTransform="matrix(.88575 0 0 1.0074 46.104 -1.718)" y1="11.109" x1="-22.54"/> 21 + <linearGradient id="linearGradient3932"> 22 + <stop id="stop3934" style="stop-color:#828282" offset="0"/> 23 + <stop id="stop3936" style="stop-color:#434343" offset="1"/> 24 + </linearGradient> 25 + <linearGradient id="linearGradient3440" y2="1.4098" xlink:href="#linearGradient3582" gradientUnits="userSpaceOnUse" x2="16.746" gradientTransform="matrix(.94724 0 0 .97076 2.0425 -.79435)" y1="46.133" x1="16.746"/> 26 + <linearGradient id="linearGradient3582"> 27 + <stop id="stop3584" style="stop-color:#333" offset="0"/> 28 + <stop id="stop3586" style="stop-color:#5a5a5a" offset="1"/> 29 + </linearGradient> 30 + <linearGradient id="linearGradient3443" y2="46.264" xlink:href="#linearGradient3932" gradientUnits="userSpaceOnUse" x2="-22.54" gradientTransform="matrix(.87741 0 0 1.0045 44.193 -1.5806)" y1="11.109" x1="-22.54"/> 31 + <linearGradient id="linearGradient3445" y2="1.4098" xlink:href="#linearGradient3582" gradientUnits="userSpaceOnUse" x2="16.746" gradientTransform="matrix(.93832 0 0 .96794 .54721 -.65965)" y1="46.133" x1="16.746"/> 32 + <radialGradient id="radialGradient3450" gradientUnits="userSpaceOnUse" cy="112.3" cx="102" gradientTransform="matrix(.36170 0 0 -.39078 .85106 47.517)" r="139.56"> 33 + <stop id="stop41" offset="0"/> 34 + <stop id="stop47" offset=".18851"/> 35 + <stop id="stop49" style="stop-opacity:0" offset=".25718"/> 36 + <stop id="stop51" style="stop-opacity:0" offset="1"/> 37 + </radialGradient> 38 + <radialGradient id="radialGradient3453" gradientUnits="userSpaceOnUse" cy="10.898" cx="14.766" gradientTransform="matrix(-2.2703e-8 2.1357 -3.5601 -3.7845e-8 54.621 -24.438)" r="18"> 39 + <stop id="stop3618" style="stop-color:#f0c178" offset="0"/> 40 + <stop id="stop3270" style="stop-color:#e18941" offset=".5"/> 41 + <stop id="stop3620" style="stop-color:#ec4f18" offset="1"/> 42 + </radialGradient> 43 + <linearGradient id="linearGradient3455" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(.80750 0 0 .89483 59.41 -2.9806)" y1="53.624" x1="-51.786"> 44 + <stop id="stop3624" style="stop-color:#c92e13" offset="0"/> 45 + <stop id="stop3626" style="stop-color:#dea176" offset="1"/> 46 + </linearGradient> 47 + <radialGradient id="radialGradient3458" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.023040 0 0 0.0147 26.361 37.04)" r="117.14"/> 48 + <linearGradient id="linearGradient5060"> 49 + <stop id="stop5062" offset="0"/> 50 + <stop id="stop5064" style="stop-opacity:0" offset="1"/> 51 + </linearGradient> 52 + <radialGradient id="radialGradient3461" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.023040 0 0 0.0147 21.623 37.04)" r="117.14"/> 53 + <linearGradient id="linearGradient4349" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.067325 0 0 0.0147 -.34114 37.04)" x2="302.86" x1="302.86"> 54 + <stop id="stop5050" style="stop-opacity:0" offset="0"/> 55 + <stop id="stop5056" offset=".5"/> 56 + <stop id="stop5052" style="stop-opacity:0" offset="1"/> 57 + </linearGradient> 58 + </defs> 59 + <metadata id="metadata4356"> 60 + <rdf:RDF> 61 + <cc:Work rdf:about=""> 62 + <dc:format>image/svg+xml</dc:format> 63 + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> 64 + <dc:title/> 65 + </cc:Work> 66 + </rdf:RDF> 67 + </metadata> 68 + <g id="layer1"> 69 + <rect id="rect2879" style="opacity:.3;fill:url(#linearGradient4349)" height="3.5701" width="32.508" y="42.43" x="7.7378"/> 70 + <path id="path2881" style="opacity:.3;fill:url(#radialGradient3461)" d="m7.7378 42.43v3.5699c-1.1865 0.0067-2.8684-0.79982-2.8684-1.7852 0-0.98533 1.324-1.7847 2.8684-1.7847z"/> 71 + <path id="path2883" style="opacity:.3;fill:url(#radialGradient3458)" d="m40.246 42.43v3.5699c1.1865 0.0067 2.8684-0.79982 2.8684-1.7852 0-0.98533-1.324-1.7847-2.8684-1.7847z"/> 72 + <path id="path4160" style="stroke-linejoin:round;stroke:url(#linearGradient3455);stroke-width:.99992;fill:url(#radialGradient3453)" d="m6.5 0.4972h24.061c0.52523 1.9602 6.1331 6.8516 10.939 9.6264v34.379h-35v-44.006z"/> 73 + <path id="path4191" style="opacity:.05;fill:url(#radialGradient3450)" d="m7.3617 44c-0.1993 0-0.3617-0.17546-0.3617-0.39078v-42.204c0-0.21571 0.1624-0.39078 0.3617-0.39078 7.4833 0.1082 15.775-0.16138 23.249 0.0271l10.283 8.866 0.106 33.702c0 0.216-0.162 0.391-0.362 0.391h-33.276z"/> 74 + <path id="path3460" style="stroke-linejoin:round;stroke:#464646;stroke-linecap:square;stroke-width:0.963;fill:none" d="m13.482 22.518 23.037-0.03716"/> 75 + <path id="path4720" style="opacity:.3;stroke-linejoin:round;fill-rule:evenodd;stroke:#fff;stroke-linecap:square;stroke-width:0.963;fill:#fff" d="m13.481 23.518 23.037-0.037"/> 76 + <path id="path3489" style="stroke-linejoin:round;stroke:url(#linearGradient3445);stroke-width:.97336;display:block;fill:url(#linearGradient3443)" d="m12.435 0.48668c0 2.6105 0.07856 41.917 0.07856 44.027h-5.7772c-0.46808-0.5213-0.11214-1.5563-0.22336-2.2943v-41.479l0.065-0.18007 0.15808-0.073933h5.6987z"/> 77 + <path id="path4696" style="stroke-linejoin:round;stroke:url(#linearGradient3440);stroke-width:.97796;display:block;fill:url(#linearGradient3438)" d="m35.538 44.481c0-2.3164-0.04879-36.575-0.04879-38.992 1.6474 2.3487 5.0717 3.0723 6.022 4.8768 0.000001 11.287 0.000003 22.575 0.000003 33.862-0.46468 0.53134-1.3872 0.1273-2.0451 0.25355h-3.9282z"/> 78 + <rect id="rect3464" style="fill:#fff" height="2" width="3" y="4" x="8"/> 79 + <rect id="rect3466" style="fill:#fff" height="2" width="3" y="8" x="8"/> 80 + <rect id="rect3468" style="fill:#fff" height="2" width="3" y="12" x="8"/> 81 + <rect id="rect3470" style="fill:#fff" height="2" width="3" y="16" x="8"/> 82 + <rect id="rect3472" style="fill:#fff" height="2" width="3" y="20" x="8"/> 83 + <rect id="rect3474" style="fill:#fff" height="2" width="3" y="24" x="8"/> 84 + <rect id="rect3476" style="fill:#fff" height="2" width="3" y="28" x="8"/> 85 + <rect id="rect3478" style="fill:#fff" height="2" width="3" y="32" x="8"/> 86 + <rect id="rect3480" style="fill:#fff" height="2" width="3" y="36" x="8"/> 87 + <rect id="rect3482" style="fill:#fff" height="2" width="3" y="40" x="8"/> 88 + <g id="g4684" style="stroke-width:.91854" transform="matrix(1.2089 0 0 .95191 -8.5145 -.32751)"> 89 + <rect id="rect2565" style="fill:#fff" height="1.9644" width="2.4815" y="11.9" x="37.648"/> 90 + <rect id="rect2567" style="fill:#fff" height="1.9644" width="2.4815" y="16.271" x="37.648"/> 91 + <rect id="rect2569" style="fill:#fff" height="1.9644" width="2.4815" y="20.643" x="37.648"/> 92 + <rect id="rect2571" style="fill:#fff" height="1.9644" width="2.4815" y="25.015" x="37.648"/> 93 + <rect id="rect2573" style="fill:#fff" height="1.9644" width="2.4815" y="29.387" x="37.648"/> 94 + <rect id="rect2575" style="fill:#fff" height="1.9644" width="2.4815" y="33.758" x="37.648"/> 95 + <rect id="rect2577" style="fill:#fff" height="1.9644" width="2.4815" y="38.13" x="37.648"/> 96 + <rect id="rect2579" style="fill:#fff" height="1.9644" width="2.4815" y="42.502" x="37.648"/> 97 + </g> 98 + <path id="path2435" style="opacity:.4;stroke-linejoin:round;stroke:url(#linearGradient3416);stroke-width:.99992;fill:none" d="m40.5 10.259v33.263h-33v-42.045h22.866"/> 99 + <path id="path12038" style="opacity:.4;fill-rule:evenodd;filter:url(#filter3212)" d="m28.617 0.92126c4.2825 0 2.1532 8.4832 2.1532 8.4832s10.358-1.8023 10.358 2.8187c0-2.6097-11.302-10.729-12.511-11.302z"/> 100 + <path id="path4474" style="fill:url(#linearGradient3412);fill-rule:evenodd" d="m28.617 0.92126c3.1865 0 2.3358 7.6619 2.3358 7.6619s10.175-0.98105 10.175 3.64c0-1.1259 0.08591-1.9322-0.13378-2.2836-1.578-2.5243-8.113-8.1885-10.575-8.9309-0.184-0.05556-0.875-0.08754-1.802-0.08754z"/> 101 + <path id="path4238" style="stroke-linejoin:round;stroke:url(#linearGradient3409);stroke-width:.99992;fill:none" d="m30.561 0.5c1.4069 0.47465 8.9655 5.8794 10.939 9.6236v12.285c-40.446 15.729-35.236-21.909-10.939-21.909z"/> 102 + </g> 103 + </svg>
+66
static/icons/humanity/status/image-missing.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!-- Created with Inkscape (http://www.inkscape.org/) --> 3 + <svg id="svg3268" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink"> 4 + <defs id="defs3270"> 5 + <radialGradient id="radialGradient19613" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.028917 0 0 .012353 26.973 38.471)" r="117.14"/> 6 + <linearGradient id="linearGradient5060"> 7 + <stop id="stop5062" offset="0"/> 8 + <stop id="stop5064" style="stop-opacity:0" offset="1"/> 9 + </linearGradient> 10 + <radialGradient id="radialGradient19616" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.028917 0 0 .012353 21.027 38.471)" r="117.14"/> 11 + <linearGradient id="linearGradient19619" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.084497 0 0 .012353 -6.5396 38.471)" y1="366.65" x1="302.86"> 12 + <stop id="stop5050" style="stop-opacity:0" offset="0"/> 13 + <stop id="stop5056" offset=".5"/> 14 + <stop id="stop5052" style="stop-opacity:0" offset="1"/> 15 + </linearGradient> 16 + <linearGradient id="linearGradient19610" y2="14.029" gradientUnits="userSpaceOnUse" x2="25.818" gradientTransform="matrix(.50664 0 0 .35125 -58.338 -49.086)" y1="110.28" x1="108.26"> 17 + <stop id="stop3802" style="stop-color:#fff" offset="0"/> 18 + <stop id="stop3804" style="stop-color:#e0e0e0" offset="1"/> 19 + </linearGradient> 20 + <linearGradient id="linearGradient19607" y2="-40.164" gradientUnits="userSpaceOnUse" x2="-24.098" gradientTransform="matrix(1.1143 0 0 1.1111 2.7514 3.5103)" y1="-13.091" x1="-24.032"> 21 + <stop id="stop3796" style="stop-color:#333" offset="0"/> 22 + <stop id="stop3798" style="stop-color:#292929" offset="1"/> 23 + </linearGradient> 24 + <linearGradient id="linearGradient19605" y2="92.824" gradientUnits="userSpaceOnUse" x2="105.37" gradientTransform="matrix(.49084 0 0 .38034 -57.357 -48.338)" y1="17.333" x1="28.938"> 25 + <stop id="stop3790" style="stop-color:#262626" offset="0"/> 26 + <stop id="stop3792" style="stop-color:#828282" offset="1"/> 27 + </linearGradient> 28 + <linearGradient id="linearGradient2494" y2="45.074" gradientUnits="userSpaceOnUse" x2="24.481" gradientTransform="matrix(.53842 0 0 .53842 -.92208 -1.4605)" y1="5.0809" x1="24.481"> 29 + <stop id="stop3783" style="stop-color:#fff" offset="0"/> 30 + <stop id="stop3785" style="stop-color:#fff;stop-opacity:0" offset="1"/> 31 + </linearGradient> 32 + <linearGradient id="linearGradient2497" y2="5.4676" gradientUnits="userSpaceOnUse" x2="63.397" gradientTransform="matrix(1.0863 0 0 1.0862 -55.567 15.814)" y1="-12.489" x1="63.397"> 33 + <stop id="stop4875" style="stop-color:#fff" offset="0"/> 34 + <stop id="stop4877" style="stop-color:#fff;stop-opacity:0" offset="1"/> 35 + </linearGradient> 36 + <linearGradient id="linearGradient2502" y2="3.0816" gradientUnits="userSpaceOnUse" x2="18.379" gradientTransform="matrix(.51604 0 0 .51604 -.38499 -.38499)" y1="44.98" x1="18.379"> 37 + <stop id="stop2492" style="stop-color:#791235" offset="0"/> 38 + <stop id="stop2494" style="stop-color:#dd3b27" offset="1"/> 39 + </linearGradient> 40 + <radialGradient id="radialGradient2500" gradientUnits="userSpaceOnUse" cy="3.99" cx="23.896" gradientTransform="matrix(0 1.2316 -1.6257 0 18.487 -28.721)" r="20.397"> 41 + <stop id="stop3244" style="stop-color:#f8b17e" offset="0"/> 42 + <stop id="stop3246" style="stop-color:#e35d4f" offset=".26238"/> 43 + <stop id="stop3248" style="stop-color:#c6262e" offset=".66094"/> 44 + <stop id="stop3250" style="stop-color:#690b54" offset="1"/> 45 + </radialGradient> 46 + <radialGradient id="radialGradient2478" gradientUnits="userSpaceOnUse" cy="4.625" cx="62.625" gradientTransform="matrix(1.1294 0 0 .28235 -58.729 19.694)" r="10.625"> 47 + <stop id="stop8840" offset="0"/> 48 + <stop id="stop8842" style="stop-opacity:0" offset="1"/> 49 + </radialGradient> 50 + </defs> 51 + <g id="layer1"> 52 + <g id="g3257" style="opacity:.4"> 53 + <rect id="rect2879" style="opacity:1;fill:url(#linearGradient19619)" height="3" width="40.8" y="43" x="3.6"/> 54 + <path id="path2881" style="opacity:1;fill:url(#radialGradient19616)" d="m3.6 43v3c-1.4891 0.006-3.6-0.672-3.6-1.5 7.1054e-15 -0.828 1.6618-1.5 3.6-1.5z"/> 55 + <path id="path2883" style="opacity:1;fill:url(#radialGradient19613)" d="m44.4 43v3c1.489 0.006 3.6-0.672 3.6-1.5s-1.662-1.5-3.6-1.5z"/> 56 + </g> 57 + <rect id="rect3580" style="stroke-opacity:.96863;stroke:#c1c1c1;stroke-linecap:round;fill:url(#linearGradient19610)" transform="matrix(-1 .0017332 -.00096053 -1 0 0)" height="35.922" width="44.966" y="-44.503" x="-46.457"/> 58 + <rect id="rect3582" style="stroke:url(#linearGradient19607);stroke-linecap:round;fill:url(#linearGradient19605)" transform="matrix(-.99999 .0037552 .0024409 -1 0 0)" rx="0" ry="0" height="29.854" width="38.927" y="-41.517" x="-43.529"/> 59 + <g id="g2481" transform="translate(12 15)"> 60 + <path id="path8836" style="opacity:.4;fill-rule:evenodd;fill:url(#radialGradient2478)" d="m24 21c0 1.657-5.373 3-12 3-6.6274 0-12-1.343-12-3-2.5e-7 -1.657 5.3726-3 12-3 6.627 0 12 1.343 12 3z"/> 61 + <path id="path2555" style="stroke-linejoin:round;stroke:url(#linearGradient2502);stroke-linecap:round;stroke-width:1.0037;fill:url(#radialGradient2500)" d="m12 1.5018c-5.7926 0-10.498 4.7056-10.498 10.498-0.0002 5.793 4.7054 10.498 10.498 10.498 5.793 0 10.498-4.705 10.498-10.498 0-5.7926-4.705-10.498-10.498-10.498zm0 3.3704c3.938 0 7.128 3.1896 7.128 7.1278 0 1.653-0.573 3.162-1.516 4.37l-9.0308-10.627c1.0147-0.5552 2.1798-0.8708 3.4188-0.8708zm-5.7087 2.8705l8.9987 10.579c-0.984 0.512-2.103 0.806-3.29 0.806-3.9382 0-7.1278-3.19-7.1278-7.128 0-1.6 0.5299-3.0682 1.4191-4.2573z"/> 62 + <path id="path2463" style="opacity:.4;stroke:url(#linearGradient2497);fill:none" d="m21.5 12c0 5.247-4.254 9.5-9.5 9.5-5.2466 0-9.5-4.254-9.5-9.5 0-5.247 4.2534-9.5 9.5-9.5 5.246 0 9.5 4.253 9.5 9.5z"/> 63 + <path id="path3270" style="opacity:.4;stroke:url(#linearGradient2494);stroke-linecap:round;stroke-width:1px;fill:none" d="m7.8042 6.4112l9.1148 10.631"/> 64 + </g> 65 + </g> 66 + </svg>