├── .gitignore ├── README.md ├── bee.js ├── db.js ├── db_explore.js ├── goodbye.js ├── logos ├── eps │ ├── logo-black.eps │ ├── logo-color.eps │ ├── logo-no-background.eps │ └── logo-white.eps ├── pdf │ ├── logo-black.pdf │ ├── logo-color.pdf │ ├── logo-no-background.pdf │ └── logo-white.pdf ├── png │ ├── logo-black.png │ ├── logo-color.png │ ├── logo-no-background.png │ └── logo-white.png └── svg │ ├── logo-black.svg │ ├── logo-color.svg │ ├── logo-no-background.svg │ └── logo-white.svg ├── nostr_events.js ├── package.json ├── pnpm-lock.yaml ├── server.js ├── swarm.js └── tests ├── autobase_sync.js └── delete.js /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /.hyper-nostr-relay 3 | /caddy -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hyper-Nostr Relay 2 | ## Support me! 3 | - Sats: https://getalby.com/p/v_142857 4 | - Ko-fi: https://ko-fi.com/v142857 5 | ## Join the community! 6 | - Discord server: https://discord.gg/SeebbwYqrg 7 | ## Usage 8 | The goal of this tool is to behave as a public relay; think of the chosen topic as a public relay, where you can send and receive notes from your peers! 9 | 1. Install: `npm install -g hyper-nostr` 10 | 2. Run: `hyper-nostr [port [...starting topics]]` (default 3000) 11 | - Example: `hyper-nostr 3000 nostr` 12 | 3. Add your relay as `ws://localhost:[port]/[topic]` in your Nostr client (I am using `nostr` as a topic to make some kind of generic swarm) (topic is now optional; if you left it blank, it goes to `nostr`) 13 | 4. Setup done! 14 | ## HTTPS 15 | The best way is to setup a reverse proxy. I use caddy, so then all I need to do is to run `caddy reverse-proxy --to localhost:[port]`. 16 | Then I can add `wss://localhost` as a relay. 17 | 18 | Browsers have the tendency to refuse self signed certificates. A workaround is to go to the reverse-proxy link `https://localhost` and "accept the risk". There is no page in that path, so you will see a blank page, but after that your browser client probably will accept it. 19 | ## How it works 20 | Hyper-Nostr is a distributed nostr relay that syncs your relay storage and real time events through the [Hyperswarm](https://github.com/holepunchto/hyperswarm), linearizes the databases with [Autobase](https://github.com/holepunchto/autobase), and uses a [Hyperbeedee](https://github.com/Telios-org/hyperdeebee) database (loosely based on MongoDB). 21 | 22 | The hyperswarm and cores management was highly abstracted thanks to [Hyper SDK](https://github.com/rangermauve/hyper-sdk). 23 | ## NIPs implemented 24 | - [x] NIP-01 (mandatory nostr implementation) 25 | - [x] NIP-02 (contact lists) 26 | - [ ] NIP-04 (direct messages) 27 | - [x] NIP-09 (event deletion) 28 | - [x] NIP-11 (relay information) 29 | - [x] NIP-12 (generic tag queries) 30 | - [x] NIP-16 (event treatment) 31 | - [x] NIP-20 (command results) 32 | - [x] NIP-33 (parametrized replaceable events) 33 | - [x] NIP-45 (event counts) 34 | - [ ] NIP-50 (search) 35 | 36 | ## Code API 37 | ```js 38 | import * as SDK from 'hyper-sdk' 39 | /** (sdk: SDK.SDK, topic: string) => swarm object */ 40 | import createSwarm from 'hyper-nostr' 41 | import goodbye from 'graceful-goodbye' 42 | 43 | const yourStorageFolder = '.hyper-nostr-relay' // set to false to not persist 44 | const theTopic = 'nostr' 45 | 46 | const sdk = SDK.create({ 47 | storage: yourStorageFolder 48 | }) 49 | goodbye(_ => sdk.close()) 50 | 51 | const { 52 | subscriptions, // a Map }> object 53 | sendEvent, // (event: Event) => document: Object | Error | void; to send an Nostr Event to the peers and the local database. 54 | queryEvents, // (filters: Filter[]) => Promise; to query the database for the events that match the list of filters 55 | sendQueryToSubscription, // (sub: Subscription, key: subscriptionId, opts: { hasLimit: Boolean }) => Promise // Write the events to the socket; internally includes each id on receivedEvents and dont send duplicated events 56 | update // () => Promise; manually sync the databases in the background 57 | } = await createSwarm(sdk, theTopic) 58 | ``` 59 | ## Server API 60 | The client can send the following events through the websocket: 61 | - REQ: Request and subscription event 62 | - Format: `["REQ", , ...]` 63 | - The server then adds the socket and the filters to the `subs` map 64 | - The server will send all the events that are on the database that matches the query, followed by a `["EOSE", ]` event, signalling that all events from now on will be on real time 65 | - EVENT: Send an event to the relay 66 | - Format: `["EVENT", ]` 67 | - The server will use `sendEvent` to broadcast the event, and received events through this broadcast are internally validated and sent through the `subs` Map 68 | - The server confirms that the message was sent with an `["OK", , true, ""]` (NIP-20) 69 | - CLOSE: Cancel a subscription 70 | - Format: `["CLOSE", ]` 71 | - Cancels a subscription, removing it from the `subs` map 72 | - COUNT: Counts the number of events that match a query (NIP-45) 73 | - Format: `["COUNT", , ...]` 74 | - Query and count events that match the filters sent in the same event 75 | 76 | The server sends the following events: 77 | - EOSE and OK specified above; 78 | - EVENT: Sending an event that matches the filters of a subscription 79 | - Format: `["EVENT", , ]` 80 | - NOTICE: Reporting errors 81 | - Format: `["NOTICE", ]` 82 | - The only Notice this server implements is `"Unrecognized event"`, for when there is no match for the event kind sent. 83 | ## License 84 | MIT 85 | -------------------------------------------------------------------------------- /bee.js: -------------------------------------------------------------------------------- 1 | import Autobase from 'autobase' 2 | import goodbye from './goodbye.js' 3 | import Autodeebee from 'hyperdeebee/autodeebee.js' 4 | 5 | export default async function createBee (sdk, topic) { 6 | const IOCores = await sdk.namespace(topic) 7 | const localInput = IOCores.get({ name: 'local-input' }) 8 | const localOutput = IOCores.get({ name: 'local-output' }) 9 | await Promise.all([localInput.ready(), localOutput.ready()]) 10 | const autobase = new Autobase({ inputs: [localInput], localInput, localOutput }) 11 | goodbye(async _ => { 12 | console.log('closing bee...') 13 | await autobase.close() 14 | await localInput.close() 15 | await localOutput.close() 16 | await IOCores.close() 17 | }) 18 | return new Autodeebee(autobase) 19 | } 20 | -------------------------------------------------------------------------------- /db.js: -------------------------------------------------------------------------------- 1 | import { DB } from 'hyperdeebee' 2 | import { getEventType, validateEvent } from './nostr_events.js' 3 | 4 | const defaultLimit = Infinity 5 | 6 | const filtersHandlers = { 7 | ids: filter => ['id', { $in: filter }], 8 | kinds: filter => ['kind', { $in: filter }], 9 | authors: filter => ['pubkey', { $gte: { $in: filter } }], 10 | hastag: (filter, tag) => ['tags', { $all: [tag.slice(1), ...filter] }], 11 | since: filter => ['created_at', { $gt: filter }], 12 | until: filter => ['created_at', { $lt: filter }] 13 | } 14 | export default async function createDB (bee) { 15 | const db = new DB(bee) 16 | 17 | const events = db.collection('events') 18 | 19 | await events.createIndex(['kind']) 20 | await events.createIndex(['pubkey']) 21 | await events.createIndex(['created_at']) 22 | await events.createIndex(['id']) 23 | await events.createIndex(['pubkey', 'kind']) 24 | await events.createIndex(['pubkey', 'created_at']) 25 | await events.createIndex(['kind', 'pubkey']) 26 | await events.createIndex(['kind', 'created_at']) 27 | 28 | return { handleEvent, queryEvents } 29 | 30 | async function handleEvent (event) { 31 | if (!validateEvent(event)) return 32 | const type = getEventType(event.kind) 33 | if (type === 'regular') await events.insert(event) 34 | else if (type === 'replaceable') { 35 | events.update({ 36 | pubkey: event.pubkey, 37 | kind: event.kind 38 | }, event, { upsert: true }) 39 | } else if (type === 'parameterized replaceable') { 40 | const originalEvents = await events.find({ 41 | pubkey: event.pubkey, 42 | kind: event.kind, 43 | tags: { 44 | $all: [ 45 | 'd', 46 | event.tags.find(([tag]) => tag === 'd')?.[1] || '' 47 | ] 48 | } 49 | }) 50 | if (originalEvents) { 51 | for (const originalEvent of originalEvents) await events.update({ _id: originalEvent._id }, event) 52 | } else { 53 | const dTag = event.tags.find(tag => tag[0] === 'd') 54 | if (!dTag[1]) dTag[1] = '' 55 | events.insert(event) 56 | } 57 | } else if (type === 'delete') { 58 | for await (const toDelete of events.find({ 59 | id: { 60 | $in: event.tags.filter(t => t[0] === 'e').map(t => t[1]) 61 | } 62 | })) { 63 | if (toDelete.pubkey === event.pubkey) await events.delete({ _id: toDelete._id }) 64 | } 65 | } else throw new Error('Unrecognized event kind: ' + type) 66 | } 67 | async function queryEvents (filters, { hasLimit } = { hasLimit: true }) { 68 | await bee.autobase.view.update() 69 | if (!filters || 70 | filters 71 | .filter(filter => Object.keys(filter).length) 72 | .length === 0) return await events.find({}) 73 | const queries = buildQueries(filters) 74 | 75 | const limit = Math.max(filters.map(filter => filter.limit || 0)) 76 | const queryResult = new Map() 77 | for (const query of queries) { 78 | for await (const doc of events.find(query).sort('created_at', -1)) { 79 | queryResult.set(doc.id, doc) 80 | } 81 | } 82 | const queryArray = Array.from(queryResult.values()).sort((a, b) => b.created_at - a.created_at) 83 | if (hasLimit) return queryArray.slice(0, limit > 0 ? limit : defaultLimit) 84 | else return queryArray 85 | } 86 | } 87 | 88 | function buildQueries (filters) { 89 | return filters.map(filter => 90 | Object.fromEntries( 91 | Object.entries(filter) 92 | .filter(([key]) => key.startsWith('#') || key in filtersHandlers) 93 | .reduce((entries, [key, filter]) => { 94 | key.startsWith('#') 95 | ? entries 96 | .find(([key]) => key === 'tags') 97 | ?.[1].$all.push( 98 | ...filtersHandlers.hastag(filter, key)[1].$all 99 | ) || entries.push(filtersHandlers.hastag(filter, key)) 100 | : entries.push(filtersHandlers[key](filter)) 101 | return entries 102 | }, 103 | []) 104 | ) 105 | ) 106 | } 107 | -------------------------------------------------------------------------------- /db_explore.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import createBee from './bee.js' 4 | import * as SDK from 'hyper-sdk' 5 | import goodbye from './goodbye.js' 6 | import { DB } from 'hyperdeebee' 7 | import { createInterface } from 'readline' 8 | const int = createInterface(process.stdin, process.stdout) 9 | 10 | const prefix = 'hyper-nostr-' 11 | 12 | const sdk = await SDK.create({ 13 | storage: '.hyper-nostr-relay', 14 | autoJoin: true 15 | }) 16 | goodbye(_ => sdk.close()) 17 | 18 | const topic = prefix + process.argv[2] 19 | const db = new DB(await createBee(sdk, topic)) 20 | 21 | let input 22 | while (true) { 23 | input = await question('Enter your query: ') 24 | if (input === 'q') { 25 | int.close() 26 | process.exit(0) 27 | } 28 | try { 29 | input = JSON.parse(input) 30 | } catch { 31 | console.log('Invalid query, try again (it has to follow JSON format)') 32 | continue 33 | } 34 | for await (const event of db.collection('events').find(input)) console.log(event) 35 | } 36 | 37 | function question (prompt) { 38 | let res 39 | const promise = new Promise(resolve => (res = resolve)) 40 | int.question(prompt, res) 41 | return promise 42 | } 43 | -------------------------------------------------------------------------------- /goodbye.js: -------------------------------------------------------------------------------- 1 | import goodbye from 'graceful-goodbye' 2 | 3 | let counter = 0 4 | export default function customGoodbye (cb) { 5 | goodbye(cb, counter--) 6 | } 7 | -------------------------------------------------------------------------------- /logos/eps/logo-black.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: cairo 1.16.0 (https://cairographics.org) 3 | %%CreationDate: Sun May 7 17:54:44 2023 4 | %%Pages: 1 5 | %%DocumentData: Clean7Bit 6 | %%LanguageLevel: 2 7 | %%BoundingBox: 0 0 1000 1000 8 | %%EndComments 9 | %%BeginProlog 10 | 50 dict begin 11 | /q { gsave } bind def 12 | /Q { grestore } bind def 13 | /cm { 6 array astore concat } bind def 14 | /w { setlinewidth } bind def 15 | /J { setlinecap } bind def 16 | /j { setlinejoin } bind def 17 | /M { setmiterlimit } bind def 18 | /d { setdash } bind def 19 | /m { moveto } bind def 20 | /l { lineto } bind def 21 | /c { curveto } bind def 22 | /h { closepath } bind def 23 | /re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto 24 | 0 exch rlineto 0 rlineto closepath } bind def 25 | /S { stroke } bind def 26 | /f { fill } bind def 27 | /f* { eofill } bind def 28 | /n { newpath } bind def 29 | /W { clip } bind def 30 | /W* { eoclip } bind def 31 | /BT { } bind def 32 | /ET { } bind def 33 | /BDC { mark 3 1 roll /BDC pdfmark } bind def 34 | /EMC { mark /EMC pdfmark } bind def 35 | /cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def 36 | /Tj { show currentpoint cairo_store_point } bind def 37 | /TJ { 38 | { 39 | dup 40 | type /stringtype eq 41 | { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse 42 | } forall 43 | currentpoint cairo_store_point 44 | } bind def 45 | /cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore 46 | cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def 47 | /Tf { pop /cairo_font exch def /cairo_font_matrix where 48 | { pop cairo_selectfont } if } bind def 49 | /Td { matrix translate cairo_font_matrix matrix concatmatrix dup 50 | /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point 51 | /cairo_font where { pop cairo_selectfont } if } bind def 52 | /Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def 53 | cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def 54 | /g { setgray } bind def 55 | /rg { setrgbcolor } bind def 56 | /d1 { setcachedevice } bind def 57 | /cairo_data_source { 58 | CairoDataIndex CairoData length lt 59 | { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def } 60 | { () } ifelse 61 | } def 62 | /cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def 63 | /cairo_image { image cairo_flush_ascii85_file } def 64 | /cairo_imagemask { imagemask cairo_flush_ascii85_file } def 65 | %%EndProlog 66 | %%BeginSetup 67 | %%EndSetup 68 | %%Page: 1 1 69 | %%BeginPageSetup 70 | %%PageBoundingBox: 0 0 1000 1000 71 | %%EndPageSetup 72 | q 0 0 1000 1000 rectclip 73 | 1 0 0 -1 0 1000 cm q 74 | 1 g 75 | 0 0 1000 1000 rectfill 76 | 0 g 77 | 850 515.555 m 850 415.445 805.73 325.535 735.805 264.195 c 674.461 194.273 78 | 584.551 150 484.445 150 c 300.035 150 150 300.035 150 484.445 c 150 584.531 79 | 194.254 674.426 264.156 735.77 c 325.5 805.715 415.426 850 515.555 850 80 | c 516.211 850 516.848 849.953 517.5 849.953 c 518.152 849.953 518.789 850 81 | 519.445 850 c 702.004 850 850 702.004 850 519.445 c 850 518.789 849.953 82 | 518.152 849.953 517.5 c 849.953 516.848 850 516.211 850 515.555 c h 83 | 280.883 681.773 m 247.867 635.281 228.23 578.648 227.824 517.5 c 228.875 84 | 357.969 357.965 228.875 517.5 227.824 c 578.648 228.23 635.285 247.867 85 | 681.773 280.883 c 735.074 332.57 768.336 404.785 768.336 484.445 c 768.336 86 | 640.98 640.98 768.336 484.445 768.336 c 404.785 768.336 332.57 735.074 87 | 280.883 681.773 c h 88 | 157.777 484.445 m 157.777 304.32 304.32 157.777 484.445 157.777 c 561.117 89 | 157.777 631.645 184.395 687.445 228.789 c 637.176 198.551 578.371 181.109 90 | 515.555 181.109 c 331.145 181.109 181.109 331.145 181.109 515.555 c 181.109 91 | 578.355 198.539 637.145 228.766 687.406 c 184.387 631.625 157.777 561.102 92 | 157.777 484.445 c h 93 | 515.555 803.336 m 437.156 803.336 366.012 771.793 314.07 720.77 c 362.09 94 | 755.531 420.961 776.109 484.445 776.109 c 645.273 776.109 776.109 645.273 95 | 776.109 484.445 c 776.109 420.965 755.531 362.094 720.77 314.07 c 771.793 96 | 366.012 803.332 437.156 803.336 515.555 c 803.336 674.238 674.238 803.336 97 | 515.555 803.336 c h 98 | 515.555 803.336 m f 99 | Q q 100 | 290 528.344 420 60.027 re W n 101 | 0 g 102 | 295.359 574.75 m 290.012 574.75 l 290.012 528.344 l 295.359 528.344 l 295.359 103 | 540.988 l 295.031 548.484 l 295.227 548.484 l 296.879 546.703 298.652 545.223 104 | 300.547 544.051 c 302.43 542.879 304.613 542.293 307.09 542.293 c 310.871 105 | 542.293 313.641 543.363 315.406 545.512 c 317.16 547.664 318.039 550.852 106 | 318.039 555.066 c 318.039 574.75 l 312.695 574.75 l 312.695 555.781 l 312.695 107 | 552.785 312.129 550.555 311 549.094 c 309.871 547.645 308 546.918 305.395 108 | 546.918 c 304.438 546.918 303.562 547.035 302.762 547.27 c 301.953 547.516 109 | 301.16 547.875 300.375 548.352 c 299.594 548.832 298.789 549.426 297.965 110 | 550.137 c 297.141 550.859 296.27 551.699 295.359 552.652 c h 111 | 331.598 588.371 m 330.031 588.371 328.641 588.152 327.426 587.719 c 328.531 112 | 583.484 l 328.969 583.613 329.434 583.723 329.926 583.809 c 330.43 583.895 113 | 330.922 583.938 331.398 583.938 c 333.617 583.938 335.418 583.301 336.809 114 | 582.023 c 338.199 580.738 339.285 579.117 340.07 577.16 c 341.047 574.812 115 | l 326.25 543.074 l 331.66 543.074 l 339.418 560.605 l 340.027 561.996 340.664 116 | 563.496 341.332 565.102 c 342.012 566.711 342.676 568.273 343.328 569.797 117 | c 343.59 569.797 l 344.152 568.273 344.727 566.719 345.309 565.129 c 345.898 118 | 563.547 346.457 562.039 346.977 560.605 c 353.887 543.074 l 358.969 543.074 119 | l 345.023 577.355 l 344.414 578.922 343.719 580.375 342.938 581.723 c 342.156 120 | 583.07 341.219 584.234 340.133 585.215 c 339.047 586.191 337.797 586.957 121 | 336.379 587.523 c 334.973 588.09 333.379 588.371 331.598 588.371 c h 122 | 373.57 588.109 m 368.227 588.109 l 368.227 543.074 l 372.656 543.074 l 123 | 373.113 547.113 l 373.309 547.113 l 374.785 545.723 376.488 544.57 378.418 124 | 543.66 c 380.355 542.746 382.305 542.293 384.258 542.293 c 386.387 542.293 125 | 388.266 542.668 389.891 543.426 c 391.523 544.191 392.895 545.277 393.996 126 | 546.684 c 395.109 548.102 395.941 549.797 396.5 551.77 c 397.074 553.75 127 | 397.359 555.977 397.359 558.453 c 397.359 561.148 396.965 563.547 396.172 128 | 565.652 c 395.398 567.762 394.348 569.559 393.02 571.035 c 391.699 572.512 129 | 390.168 573.629 388.43 574.383 c 386.691 575.148 384.867 575.531 382.957 130 | 575.531 c 381.477 575.531 379.879 575.172 378.16 574.449 c 376.445 573.738 131 | 374.895 572.73 373.504 571.426 c 373.309 571.426 l 373.57 577.422 l h 132 | 382.043 571.035 m 384.91 571.035 387.258 569.926 389.082 567.711 c 390.906 133 | 565.492 391.82 562.41 391.82 558.453 c 391.82 556.719 391.641 555.133 391.285 134 | 553.695 c 390.945 552.262 390.414 551.035 389.695 550.008 c 388.98 548.992 135 | 388.062 548.199 386.93 547.637 c 385.801 547.07 384.453 546.789 382.891 136 | 546.789 c 381.5 546.789 380.008 547.168 378.418 547.922 c 376.836 548.688 137 | 375.223 549.895 373.57 551.547 c 373.57 567.32 l 375.09 568.664 376.613 138 | 569.621 378.133 570.188 c 379.652 570.75 380.957 571.035 382.043 571.035 139 | c h 140 | 422.766 575.531 m 420.375 575.531 418.152 575.16 416.09 574.422 c 414.023 141 | 573.684 412.219 572.598 410.68 571.164 c 409.133 569.73 407.918 567.98 142 | 407.031 565.91 c 406.137 563.852 405.688 561.496 405.688 558.848 c 405.688 143 | 556.281 406.137 553.98 407.031 551.938 c 407.918 549.895 409.113 548.156 144 | 410.617 546.723 c 412.109 545.289 413.828 544.191 415.766 543.426 c 417.695 145 | 542.668 419.723 542.293 421.852 542.293 c 424.113 542.293 426.145 542.648 146 | 427.953 543.359 c 429.754 544.082 431.273 545.094 432.516 546.398 c 433.75 147 | 547.699 434.691 549.266 435.344 551.09 c 435.996 552.914 436.32 554.934 148 | 436.32 557.152 c 436.32 557.758 436.301 558.348 436.258 558.91 c 436.215 149 | 559.477 436.148 559.977 436.062 560.41 c 411.098 560.41 l 411.445 564.016 150 | 412.762 566.719 415.047 568.52 c 417.324 570.324 420.113 571.23 423.418 151 | 571.23 c 425.328 571.23 427.059 570.957 428.605 570.41 c 430.145 569.871 152 | 431.629 569.145 433.062 568.23 c 435.02 571.75 l 433.453 572.793 431.664 153 | 573.684 429.648 574.422 c 427.625 575.16 425.328 575.531 422.766 575.531 154 | c h 155 | 421.984 546.527 m 420.68 546.527 419.434 546.746 418.242 547.18 c 417.043 156 | 547.613 415.965 548.23 415.008 549.031 c 414.055 549.84 413.25 550.852 157 | 412.598 552.066 c 411.945 553.285 411.488 554.676 411.23 556.238 c 431.434 158 | 556.238 l 431.215 552.98 430.273 550.547 428.605 548.938 c 426.93 547.332 159 | 424.719 546.527 421.984 546.527 c h 160 | 455.223 574.75 m 449.879 574.75 l 449.879 543.074 l 454.312 543.074 l 454.766 161 | 550.57 l 454.961 550.57 l 456.613 548.004 458.648 545.984 461.062 544.508 162 | c 463.469 543.031 466.152 542.293 469.105 542.293 c 470.281 542.293 471.367 163 | 542.387 472.363 542.578 c 473.363 542.777 474.363 543.117 475.363 543.594 164 | c 474.125 548.223 l 472.996 547.832 472.051 547.547 471.297 547.375 c 470.531 165 | 547.199 469.52 547.113 468.258 547.113 c 465.867 547.113 463.578 547.797 166 | 461.391 549.16 c 459.191 550.535 457.137 552.871 455.223 556.172 c h 167 | 513.035 555.262 m 485.008 555.262 l 485.008 551.219 l 513.035 551.219 l 168 | h 169 | 529.98 574.75 m 524.637 574.75 l 524.637 543.074 l 529.07 543.074 l 529.523 170 | 548.484 l 529.785 548.484 l 531.438 546.703 533.219 545.223 535.129 544.051 171 | c 537.043 542.879 539.238 542.293 541.715 542.293 c 545.492 542.293 548.262 172 | 543.363 550.016 545.512 c 551.781 547.664 552.664 550.852 552.664 555.066 173 | c 552.664 574.75 l 547.32 574.75 l 547.32 555.781 l 547.32 552.785 546.754 174 | 550.555 545.625 549.094 c 544.492 547.645 542.625 546.918 540.02 546.918 175 | c 539.062 546.918 538.18 547.035 537.371 547.27 c 536.574 547.516 535.781 176 | 547.875 535 548.352 c 534.219 548.832 533.414 549.426 532.59 550.137 c 177 | 531.762 550.859 530.895 551.699 529.98 552.652 c h 178 | 577.223 575.531 m 575.137 575.531 573.148 575.16 571.266 574.422 c 569.371 179 | 573.684 567.707 572.605 566.273 571.191 c 564.84 569.781 563.699 568.043 180 | 562.855 565.977 c 562.004 563.918 561.578 561.582 561.578 558.977 c 561.578 181 | 556.324 562.004 553.965 562.855 551.898 c 563.699 549.84 564.84 548.09 182 | 566.273 546.656 c 567.707 545.223 569.371 544.137 571.266 543.398 c 573.148 183 | 542.66 575.137 542.293 577.223 542.293 c 579.309 542.293 581.297 542.66 184 | 583.191 543.398 c 585.078 544.137 586.738 545.223 588.172 546.656 c 589.605 185 | 548.09 590.746 549.84 591.602 551.898 c 592.441 553.965 592.863 556.324 186 | 592.863 558.977 c 592.863 561.582 592.441 563.918 591.602 565.977 c 590.746 187 | 568.043 589.605 569.781 588.172 571.191 c 586.738 572.605 585.078 573.684 188 | 583.191 574.422 c 581.297 575.16 579.309 575.531 577.223 575.531 c h 189 | 577.223 571.098 m 578.742 571.098 580.125 570.805 581.367 570.211 c 582.602 190 | 569.629 583.664 568.805 584.559 567.734 c 585.445 566.676 586.129 565.406 191 | 586.605 563.93 c 587.086 562.453 587.324 560.801 587.324 558.977 c 587.324 192 | 557.152 587.086 555.488 586.605 553.984 c 586.129 552.488 585.445 551.199 193 | 584.559 550.113 c 583.664 549.027 582.602 548.188 581.367 547.598 c 580.125 194 | 547.016 578.742 546.723 577.223 546.723 c 575.699 546.723 574.324 547.016 195 | 573.09 547.598 c 571.848 548.188 570.781 549.027 569.895 550.113 c 569 196 | 551.199 568.312 552.488 567.836 553.984 c 567.359 555.488 567.121 557.152 197 | 567.121 558.977 c 567.121 560.801 567.359 562.453 567.836 563.93 c 568.312 198 | 565.406 569 566.676 569.895 567.734 c 570.781 568.805 571.848 569.629 573.09 199 | 570.211 c 574.324 570.805 575.699 571.098 577.223 571.098 c h 200 | 616.98 575.531 m 613.852 575.531 610.961 575.039 608.312 574.059 c 605.66 201 | 573.086 603.359 571.926 601.402 570.578 c 603.879 567.059 l 605.703 568.363 202 | 607.715 569.406 609.914 570.188 c 612.105 570.969 614.676 571.359 617.633 203 | 571.359 c 620.324 571.359 622.336 570.867 623.668 569.887 c 624.988 568.914 204 | 625.648 567.754 625.648 566.406 c 625.648 565.797 625.539 565.234 625.32 205 | 564.711 c 625.105 564.191 624.641 563.691 623.926 563.211 c 623.207 562.734 206 | 622.195 562.277 620.891 561.844 c 619.586 561.41 617.871 560.977 615.742 207 | 560.539 c 611.613 559.672 608.52 558.508 606.461 557.047 c 604.391 555.598 208 | 603.359 553.676 603.359 551.285 c 603.359 550.023 603.641 548.84 604.203 209 | 547.727 c 604.77 546.625 605.609 545.668 606.719 544.859 c 607.824 544.059 210 | 609.191 543.43 610.828 542.969 c 612.453 542.516 614.352 542.293 616.523 211 | 542.293 c 618.957 542.293 621.305 542.691 623.562 543.492 c 625.82 544.297 212 | 627.734 545.246 629.297 546.332 c 626.691 549.785 l 625.215 548.785 623.586 213 | 547.984 621.801 547.375 c 620.02 546.766 618.109 546.461 616.066 546.461 214 | c 613.375 546.461 611.484 546.918 610.398 547.832 c 609.309 548.742 608.766 215 | 549.809 608.766 551.023 c 608.766 552.414 609.484 553.465 610.918 554.18 216 | c 612.352 554.902 614.699 555.609 617.957 556.305 c 620.609 556.867 622.781 217 | 557.465 624.477 558.09 c 626.168 558.723 627.508 559.434 628.488 560.215 218 | c 629.465 560.996 630.137 561.867 630.512 562.82 c 630.875 563.777 631.059 219 | 564.863 631.059 566.082 c 631.059 567.383 630.754 568.602 630.145 569.73 220 | c 629.535 570.859 628.633 571.859 627.434 572.73 c 626.242 573.598 624.77 221 | 574.285 623.016 574.789 c 621.25 575.285 619.238 575.531 616.98 575.531 222 | c h 223 | 661.559 575.531 m 659.258 575.531 657.324 575.215 655.762 574.578 c 654.195 224 | 573.953 652.934 573.062 651.98 571.906 c 651.023 570.762 650.336 569.383 225 | 649.922 567.773 c 649.512 566.168 649.309 564.387 649.309 562.43 c 649.309 226 | 547.441 l 640.379 547.441 l 640.379 543.398 l 649.504 543.074 l 650.219 227 | 532.906 l 654.652 532.906 l 654.652 543.074 l 670.23 543.074 l 670.23 547.441 228 | l 654.652 547.441 l 654.652 562.496 l 654.652 563.93 654.781 565.176 655.043 229 | 566.238 c 655.305 567.305 655.738 568.211 656.348 568.949 c 656.953 569.688 230 | 657.781 570.238 658.824 570.605 c 659.867 570.977 661.148 571.164 662.668 231 | 571.164 c 664.188 571.164 665.559 571.035 666.773 570.773 c 667.992 570.512 232 | 669.164 570.164 670.293 569.73 c 671.469 573.641 l 670.035 574.164 668.52 233 | 574.609 666.93 574.984 c 665.348 575.348 663.559 575.531 661.559 575.531 234 | c h 235 | 689.848 574.75 m 684.504 574.75 l 684.504 543.074 l 688.934 543.074 l 689.391 236 | 550.57 l 689.586 550.57 l 691.238 548.004 693.266 545.984 695.676 544.508 237 | c 698.09 543.031 700.773 542.293 703.73 542.293 c 704.902 542.293 705.988 238 | 542.387 706.988 542.578 c 707.988 542.777 708.988 543.117 709.988 543.594 239 | c 708.75 548.223 l 707.617 547.832 706.672 547.547 705.906 547.375 c 705.152 240 | 547.199 704.145 547.113 702.883 547.113 c 700.492 547.113 698.199 547.797 241 | 696 549.16 c 693.809 550.535 691.758 552.871 689.848 556.172 c h 242 | 689.848 574.75 m f 243 | Q q 244 | 290 602.543 420 37.094 re W n 245 | 0 g 246 | 304.84 616.828 m 307.051 617.09 308.773 617.848 310.012 619.094 c 311.246 247 | 620.348 311.867 621.801 311.867 623.457 c 311.867 625.484 310.965 627.148 248 | 309.164 628.445 c 307.359 629.754 304.973 630.445 302 630.523 c 290.238 249 | 630.523 l 290 629.262 l 293.355 628.035 l 293.355 606.922 l 290.555 606.766 250 | l 290.594 604.871 l 294.961 604.66 298.395 604.555 300.895 604.555 c 303.84 251 | 604.555 306.176 605.141 307.902 606.309 c 309.625 607.48 310.484 609.082 252 | 310.484 611.105 c 310.484 612.555 310.012 613.816 309.062 614.895 c 308.117 253 | 615.973 306.707 616.617 304.84 616.828 c h 254 | 302.434 606.883 m 297.027 607.477 l 297.027 616 l 299 616 l 301.527 616 255 | 303.395 615.551 304.605 614.656 c 305.812 613.762 306.418 612.672 306.418 256 | 611.383 c 306.418 610.328 306.047 609.363 305.297 608.477 c 304.547 607.598 257 | 303.59 607.066 302.434 606.883 c h 258 | 297.027 627.801 m 300.973 628.117 l 301.84 628.156 l 303.684 628.156 305.105 259 | 627.707 306.102 626.812 c 307.102 625.918 307.602 624.828 307.602 623.539 260 | c 307.602 622.09 306.996 620.84 305.789 619.789 c 304.578 618.734 303.051 261 | 618.184 301.211 618.133 c 297.027 618.133 l h 262 | 334.566 612.25 m 334.672 614.199 334.434 616.328 333.855 618.645 c 331.723 263 | 618.645 l 331.289 614.305 l 329.16 615.488 327.355 617.051 325.883 619 264 | c 325.883 627.918 l 327.805 628.051 329.16 628.285 329.949 628.629 c 329.711 265 | 630.523 l 319.688 630.523 l 319.488 629.223 l 322.371 628.156 l 322.371 266 | 614.262 l 319.41 614.5 l 318.938 612.645 l 320.699 611.883 322.488 611.473 267 | 324.305 611.422 c 325.883 612.805 l 325.883 616.395 l 330.027 611.973 l 268 | 330.789 611.66 331.488 611.5 332.117 611.5 c 332.961 611.5 333.777 611.75 269 | 334.566 612.25 c h 270 | 347.043 607.91 m 345.754 607.355 344.742 606.566 344.004 605.543 c 344.691 271 | 604.121 345.492 603.121 346.414 602.543 c 347.598 603.016 348.582 603.805 272 | 349.371 604.91 c 348.953 606.121 348.176 607.121 347.043 607.91 c h 273 | 348.625 612.805 m 348.625 627.996 l 349.938 628.156 350.887 628.367 351.465 274 | 628.629 c 351.227 630.523 l 342.309 630.523 l 342.113 629.223 l 342.742 275 | 628.906 343.742 628.535 345.109 628.117 c 345.109 614.262 l 342.152 614.5 276 | l 341.676 612.645 l 343.441 611.883 345.23 611.473 347.043 611.422 c h 277 | 377.875 618.406 m 377.875 627.996 l 379.215 628.18 380.137 628.391 380.637 278 | 628.629 c 380.402 630.523 l 372.309 630.523 l 372.113 629.223 l 374.363 279 | 628.352 l 374.363 618.84 l 374.363 616 373.52 614.578 371.836 614.578 c 280 | 370.312 614.578 368.258 615.566 365.68 617.539 c 365.68 628.035 l 366.785 281 | 628.168 367.641 628.367 368.246 628.629 c 368.008 630.523 l 359.562 630.523 282 | l 359.367 629.223 l 362.168 628.195 l 362.168 614.262 l 359.207 614.5 l 283 | 358.734 612.645 l 360.496 611.883 362.285 611.473 364.102 611.422 c 365.68 284 | 612.805 l 365.68 615.406 l 369.625 612.75 372.309 611.422 373.73 611.422 285 | c 374.492 611.555 375.266 611.941 376.043 612.582 c 376.816 613.23 377.316 286 | 613.895 377.543 614.578 c 377.766 615.262 377.875 616.539 377.875 618.406 287 | c h 288 | 392.445 626.734 m 394.367 626.762 396.703 627.043 399.453 627.578 c 402.199 289 | 628.121 404.441 628.734 406.18 629.418 c 406.375 631.113 l 406.375 633.508 290 | 405.27 635.531 403.062 637.176 c 400.852 638.82 398.234 639.641 395.207 291 | 639.641 c 393.156 639.641 391.414 639.191 389.984 638.297 c 388.547 637.402 292 | 387.828 636.18 387.828 634.629 c 387.867 634.035 l 392.562 629.695 l 389.445 293 | 629.535 l 388.734 627.68 l 390.023 626.156 391.418 624.852 392.918 623.773 294 | c 389.895 622.617 388.379 620.59 388.379 617.695 c 388.379 615.75 389.168 295 | 614.137 390.75 612.859 c 392.328 611.586 394.273 610.949 396.59 610.949 296 | c 398.641 610.949 400.391 611.461 401.84 612.488 c 402.785 610.699 404.352 297 | 609.582 406.535 609.133 c 407.285 613.238 l 405.918 613.238 404.668 613.5 298 | 403.535 614.027 c 404.352 615.133 404.758 616.383 404.758 617.777 c 404.758 299 | 619.75 403.965 621.355 402.375 622.59 c 400.781 623.828 398.852 624.445 300 | 396.59 624.445 c 395.129 624.328 l 393.973 625.223 393.078 626.023 392.445 301 | 626.734 c h 302 | 393.312 613.828 m 392.445 614.855 392.012 616.066 392.012 617.461 c 392.012 303 | 618.934 392.418 620.129 393.234 621.051 c 394.051 621.973 395.168 622.434 304 | 396.59 622.434 c 397.406 622.434 398.285 622.262 399.234 621.918 c 400.496 305 | 620.895 401.129 619.605 401.129 618.051 c 401.129 616.684 400.652 615.512 306 | 399.707 614.539 c 398.758 613.566 397.602 613.078 396.234 613.078 c 395.285 307 | 613.078 394.312 613.328 393.312 613.828 c h 308 | 395.445 636.441 m 397.18 636.441 398.871 636.082 400.52 635.363 c 402.16 309 | 634.637 403.336 633.613 404.047 632.301 c 402.363 631.301 399.324 630.512 310 | 394.93 629.93 c 392.352 631.695 391.062 633.141 391.062 634.273 c 391.062 311 | 634.93 391.473 635.457 392.289 635.852 c 393.102 636.246 394.156 636.441 312 | 395.445 636.441 c h 313 | 432.086 604.871 m 443.094 604.555 l 445.855 604.555 448.105 605.324 449.844 314 | 606.859 c 451.578 608.402 452.449 610.355 452.449 612.723 c 452.449 614.988 315 | 451.652 616.887 450.062 618.422 c 448.469 619.965 446.41 620.773 443.883 316 | 620.855 c 438.516 620.855 l 438.516 628.117 l 443.133 628.668 l 443.094 317 | 630.523 l 431.73 630.523 l 431.492 629.262 l 434.848 628.035 l 434.848 318 | 606.922 l 432.043 606.766 l h 319 | 442.543 618.566 m 444.516 618.566 445.988 617.984 446.961 616.828 c 447.938 320 | 615.672 448.422 614.262 448.422 612.605 c 448.422 611.344 448.16 610.191 321 | 447.633 609.148 c 447.105 608.113 446.344 607.355 445.344 606.883 c 438.516 322 | 607.477 l 438.516 618.211 l 440.094 618.445 441.438 618.566 442.543 618.566 323 | c h 324 | 476.262 623.695 m 478.391 624.012 l 478.156 626.641 477.801 628.812 477.328 325 | 630.523 c 461.582 630.523 l 460.871 627.996 l 470.027 617.695 l 472.262 326 | 615.039 473.379 612.805 473.379 610.988 c 473.379 609.91 473.039 608.953 327 | 472.355 608.121 c 471.672 607.297 470.633 606.883 469.238 606.883 c 467.949 328 | 606.883 466.473 607.133 464.816 607.633 c 464.105 612.566 l 461.855 612.527 329 | l 461.621 611.105 461.5 609.684 461.5 608.266 c 461.539 606.566 l 464.277 330 | 604.91 466.988 604.082 469.672 604.082 c 471.777 604.082 473.559 604.746 331 | 475.016 606.07 c 476.477 607.402 477.207 609.066 477.207 611.066 c 477.207 332 | 612.223 476.918 613.375 476.34 614.516 c 475.762 615.664 474.34 617.527 333 | 472.078 620.105 c 465.25 627.406 l 465.367 627.762 l 475 627.207 l h 334 | 488.305 604.871 m 499.316 604.555 l 502.078 604.555 504.328 605.324 506.066 335 | 606.859 c 507.801 608.402 508.672 610.355 508.672 612.723 c 508.672 614.988 336 | 507.871 616.887 506.277 618.422 c 504.691 619.965 502.633 620.773 500.105 337 | 620.855 c 494.738 620.855 l 494.738 628.117 l 499.355 628.668 l 499.316 338 | 630.523 l 487.949 630.523 l 487.715 629.262 l 491.07 628.035 l 491.07 606.922 339 | l 488.266 606.766 l h 340 | 498.766 618.566 m 500.738 618.566 502.211 617.984 503.184 616.828 c 504.156 341 | 615.672 504.645 614.262 504.645 612.605 c 504.645 611.344 504.383 610.191 342 | 503.855 609.148 c 503.328 608.113 502.566 607.355 501.566 606.883 c 494.738 343 | 607.477 l 494.738 618.211 l 496.316 618.445 497.66 618.566 498.766 618.566 344 | c h 345 | 540.02 627.84 m 540.785 627.84 541.996 627.535 543.652 626.934 c 544.324 346 | 628.746 l 539.191 631.113 l 538.297 631.168 537.41 630.832 536.523 630.105 347 | c 535.645 629.383 535.207 628.602 535.207 627.762 c 535.207 615.012 l 532.758 348 | 615.051 l 532.484 613.16 l 533.324 612.789 534.258 612.488 535.285 612.25 349 | c 536.863 607.277 l 538.719 607.277 l 538.719 612.055 l 544.242 612.055 350 | l 544.402 613.199 l 542.547 615.094 l 538.719 615.094 l 538.719 625.707 351 | l 538.719 626.523 538.812 627.082 538.996 627.383 c 539.18 627.688 539.52 352 | 627.84 540.02 627.84 c h 353 | 551.91 621.211 m 551.91 618.262 552.742 615.867 554.41 614.027 c 556.082 354 | 612.184 558.223 611.266 560.828 611.266 c 563.406 611.266 565.496 612.211 355 | 567.102 614.105 c 568.707 616 569.508 618.445 569.508 621.445 c 569.508 356 | 624.418 568.719 626.805 567.141 628.605 c 565.562 630.41 563.484 631.312 357 | 560.906 631.312 c 558.301 631.312 556.148 630.363 554.449 628.473 c 552.754 358 | 626.578 551.91 624.156 551.91 621.211 c h 359 | 563.234 628.473 m 564.945 627.34 565.801 625.145 565.801 621.879 c 565.801 360 | 619.539 565.367 617.59 564.496 616.039 c 563.629 614.488 562.301 613.711 361 | 560.512 613.711 c 559.328 613.711 558.328 614 557.512 614.578 c 556.277 362 | 616.051 555.656 618.117 555.656 620.773 c 555.656 623.039 556.137 624.934 363 | 557.094 626.457 c 558.059 627.984 559.473 628.746 561.34 628.746 c 561.945 364 | 628.746 562.578 628.656 563.234 628.473 c h 365 | 620.711 604.871 m 620.949 606.133 l 617.594 607.355 l 617.594 630.523 l 366 | 613.527 630.957 l 599.52 608.539 l 600.23 614.027 l 600.23 628.273 l 603.742 367 | 628.668 l 603.703 630.523 l 594.152 630.523 l 593.914 629.262 l 597.27 368 | 628.035 l 597.27 607.043 l 594.703 606.727 l 594.742 604.871 l 601.77 604.871 369 | l 615.344 626.734 l 614.594 621.367 l 614.594 607.16 l 610.766 606.727 370 | l 610.805 604.871 l h 371 | 627.43 621.211 m 627.43 618.262 628.266 615.867 629.938 614.027 c 631.605 372 | 612.184 633.742 611.266 636.348 611.266 c 638.926 611.266 641.02 612.211 373 | 642.621 614.105 c 644.227 616 645.031 618.445 645.031 621.445 c 645.031 374 | 624.418 644.242 626.805 642.664 628.605 c 641.082 630.41 639.004 631.312 375 | 636.426 631.312 c 633.82 631.312 631.672 630.363 629.977 628.473 c 628.277 376 | 626.578 627.43 624.156 627.43 621.211 c h 377 | 638.754 628.473 m 640.465 627.34 641.32 625.145 641.32 621.879 c 641.32 378 | 619.539 640.887 617.59 640.02 616.039 c 639.148 614.488 637.82 613.711 379 | 636.031 613.711 c 634.848 613.711 633.848 614 633.031 614.578 c 631.797 380 | 616.051 631.18 618.117 631.18 620.773 c 631.18 623.039 631.66 624.934 632.621 381 | 626.457 c 633.582 627.984 634.992 628.746 636.859 628.746 c 637.465 628.746 382 | 638.098 628.656 638.754 628.473 c h 383 | 656.758 615.922 m 656.758 616.762 657.102 617.434 657.785 617.934 c 658.469 384 | 618.434 659.523 619 660.941 619.629 c 663.27 620.695 l 665.535 621.879 385 | 666.664 623.512 666.664 625.59 c 666.664 627.273 666.035 628.648 664.77 386 | 629.711 c 663.508 630.777 661.875 631.312 659.879 631.312 c 657.691 631.312 387 | 655.363 630.629 652.891 629.262 c 654.352 625.789 l 656.824 627.473 659.43 388 | 628.496 662.168 628.867 c 662.875 628.234 663.23 627.473 663.23 626.578 389 | c 663.23 625.684 662.902 624.957 662.246 624.406 c 661.586 623.852 660.293 390 | 623.148 658.363 622.289 c 656.426 621.438 655.121 620.609 654.453 619.805 391 | c 653.781 619.004 653.445 618.039 653.445 616.906 c 653.445 615.25 654.148 392 | 613.895 655.559 612.844 c 656.965 611.789 658.758 611.266 660.941 611.266 393 | c 662.785 611.266 664.469 611.66 665.992 612.449 c 666.074 614.367 665.848 394 | 616.066 665.324 617.539 c 663.191 617.539 l 662.914 614.5 l 661.602 613.922 395 | 660.219 613.633 658.773 613.633 c 658.023 613.672 l 657.18 614.199 656.758 396 | 614.949 656.758 615.922 c h 397 | 682.656 627.84 m 683.418 627.84 684.629 627.535 686.289 626.934 c 686.957 398 | 628.746 l 681.828 631.113 l 680.934 631.168 680.047 630.832 679.168 630.105 399 | c 678.285 629.383 677.84 628.602 677.84 627.762 c 677.84 615.012 l 675.395 400 | 615.051 l 675.117 613.16 l 675.961 612.789 676.895 612.488 677.922 612.25 401 | c 679.5 607.277 l 681.355 607.277 l 681.355 612.055 l 686.879 612.055 l 402 | 687.035 613.199 l 685.184 615.094 l 681.355 615.094 l 681.355 625.707 l 403 | 681.355 626.523 681.445 627.082 681.629 627.383 c 681.812 627.688 682.156 404 | 627.84 682.656 627.84 c h 405 | 709.973 612.25 m 710.078 614.199 709.844 616.328 709.266 618.645 c 707.133 406 | 618.645 l 706.699 614.305 l 704.566 615.488 702.766 617.051 701.293 619 407 | c 701.293 627.918 l 703.211 628.051 704.566 628.285 705.355 628.629 c 705.121 408 | 630.523 l 695.098 630.523 l 694.898 629.223 l 697.781 628.156 l 697.781 409 | 614.262 l 694.82 614.5 l 694.348 612.645 l 696.109 611.883 697.898 611.473 410 | 699.715 611.422 c 701.293 612.805 l 701.293 616.395 l 705.438 611.973 l 411 | 706.199 611.66 706.895 611.5 707.527 611.5 c 708.371 611.5 709.184 611.75 412 | 709.973 612.25 c h 413 | 709.973 612.25 m f 414 | Q q 415 | 0 g 416 | 518.855 385.707 m 518.855 390.383 515.062 394.176 510.387 394.176 c 505.707 417 | 394.176 501.918 390.383 501.918 385.707 c 501.918 381.027 505.707 377.238 418 | 510.387 377.238 c 515.062 377.238 518.855 381.027 518.855 385.707 c h 419 | 518.855 385.707 m f 420 | 463.43 425.32 m 463.43 430 459.637 433.789 454.961 433.789 c 450.281 433.789 421 | 446.492 430 446.492 425.32 c 446.492 420.645 450.281 416.852 454.961 416.852 422 | c 459.637 416.852 463.43 420.645 463.43 425.32 c h 423 | 463.43 425.32 m f 424 | 501.914 464.297 m 501.914 468.973 498.121 472.766 493.441 472.766 c 488.766 425 | 472.766 484.973 468.973 484.973 464.297 c 484.973 459.621 488.766 455.828 426 | 493.441 455.828 c 498.121 455.828 501.914 459.621 501.914 464.297 c h 427 | 501.914 464.297 m f 428 | 445.273 494.574 m 445.273 499.254 441.48 503.043 436.805 503.043 c 432.125 429 | 503.043 428.336 499.254 428.336 494.574 c 428.336 489.898 432.125 486.105 430 | 436.805 486.105 c 441.48 486.105 445.273 489.898 445.273 494.574 c h 431 | 445.273 494.574 m f 432 | 563.719 395.859 m 563.719 400.539 559.926 404.332 555.25 404.332 c 550.57 433 | 404.332 546.777 400.539 546.777 395.859 c 546.777 391.184 550.57 387.391 434 | 555.25 387.391 c 559.926 387.391 563.719 391.184 563.719 395.859 c h 435 | 563.719 395.859 m f 436 | Q q 437 | 488 497 18 17.172 re W n 438 | 0 g 439 | 505.289 505.703 m 505.289 510.379 501.5 514.172 496.82 514.172 c 492.145 440 | 514.172 488.352 510.379 488.352 505.703 c 488.352 501.023 492.145 497.234 441 | 496.82 497.234 c 501.5 497.234 505.289 501.023 505.289 505.703 c h 442 | 505.289 505.703 m f 443 | Q q 444 | 421.305 360.359 157.395 136.641 re W n 445 | 0 g 446 | 436.805 496.562 m 436.555 496.562 436.309 496.516 436.082 496.426 c 435.906 447 | 496.355 435.738 496.262 435.586 496.145 c 435.328 495.945 435.117 495.676 448 | 434.977 495.355 c 434.941 495.273 434.914 495.191 434.891 495.109 c 421.383 449 | 448.625 l 421.148 447.809 421.449 446.938 422.141 446.449 c 510.645 383.559 450 | l 511.43 383 512.5 383.086 513.188 383.762 c 513.879 384.434 513.98 385.504 451 | 513.438 386.301 c 443.047 488.984 l 492.508 462.543 l 492.793 462.391 493.117 452 | 462.312 493.441 462.312 c 574 462.312 l 553.52 397.254 l 515.773 363.836 453 | l 514.953 363.109 514.875 361.852 515.605 361.031 c 516.328 360.211 517.586 454 | 360.133 518.406 360.859 c 556.562 394.641 l 556.832 394.883 557.035 395.191 455 | 557.145 395.535 c 578.605 463.699 l 578.793 464.301 578.688 464.961 578.312 456 | 465.469 c 577.938 465.98 577.344 466.281 576.711 466.281 c 493.941 466.281 457 | l 437.781 496.305 l 437.691 496.352 437.598 496.398 437.504 496.434 c 437.387 458 | 496.477 437.262 496.512 437.137 496.531 c 437.027 496.555 436.914 496.562 459 | 436.805 496.562 c h 460 | 425.594 448.871 m 437.539 489.984 l 503.84 393.27 l h 461 | 425.594 448.871 m f 462 | Q q 463 | 421.305 360.359 136.695 106.641 re W n 464 | 0 g 465 | 493.445 466.285 m 493.312 466.285 493.176 466.27 493.043 466.246 c 493.039 466 | 466.246 493.039 466.246 493.039 466.246 c 493.008 466.238 492.984 466.23 467 | 492.957 466.223 c 492.953 466.223 492.949 466.223 492.945 466.219 c 492.578 468 | 466.125 492.262 465.938 492.016 465.68 c 432.91 406.574 l 425.246 448.43 469 | l 425.051 449.508 424.012 450.223 422.934 450.027 c 421.852 449.828 421.141 470 | 448.789 421.336 447.715 c 429.684 402.133 l 429.816 401.406 430.34 400.816 471 | 431.047 400.594 c 431.75 400.375 432.52 400.562 433.043 401.086 c 492.316 472 | 460.359 l 509.418 386.629 l 460.168 374.211 l 459.258 373.984 458.633 373.152 473 | 458.668 372.215 c 458.699 371.277 459.387 370.492 460.305 370.328 c 516.746 474 | 360.391 l 517.402 360.273 518.074 360.5 518.531 360.98 c 518.992 361.465 475 | 519.176 362.148 519.027 362.797 c 514.168 383.727 l 555.734 394.207 l 556.41 476 | 394.375 556.945 394.891 557.148 395.559 c 557.348 396.223 557.188 396.949 477 | 556.719 397.469 c 494.941 465.602 l 494.828 465.734 494.699 465.848 494.555 478 | 465.941 c 494.555 465.945 494.555 465.945 494.555 465.945 c 494.551 465.945 479 | 494.551 465.945 494.551 465.945 c 494.547 465.949 l 494.516 465.969 494.492 480 | 465.984 494.461 466.004 c 494.457 466.004 494.457 466.004 494.457 466.008 481 | c 494.453 466.008 l 494.152 466.188 493.805 466.285 493.445 466.285 c h 482 | 513.273 387.602 m 497.105 457.297 l 551.551 397.25 l h 483 | 470.152 372.629 m 510.32 382.754 l 514.477 364.828 l h 484 | 470.152 372.629 m f 485 | Q q 486 | 0 g 487 | 496.82 507.691 m 496.703 507.691 496.578 507.68 496.457 507.656 c 436.441 488 | 496.527 l 435.363 496.328 434.652 495.289 434.848 494.211 c 435.051 493.133 489 | 436.09 492.418 437.164 492.621 c 494.629 503.273 l 491.484 464.715 l 458.781 490 | 372.953 l 458.41 371.918 458.953 370.781 459.984 370.414 c 461.02 370.043 491 | 462.156 370.582 462.523 371.617 c 495.316 463.633 l 495.371 463.793 495.41 492 | 463.961 495.422 464.137 c 498.801 505.539 l 498.852 506.156 498.613 506.762 493 | 498.152 507.176 c 497.785 507.508 497.309 507.691 496.82 507.691 c h 494 | 496.82 507.691 m f 495 | 496.82 507.691 m 496.504 507.691 496.184 507.617 495.887 507.457 c 494.914 496 | 506.938 494.551 505.734 495.066 504.766 c 553.492 395.195 l 554.012 394.227 497 | 555.215 393.859 556.184 394.375 c 557.152 394.895 557.516 396.098 557.004 498 | 397.066 c 498.574 506.637 l 498.219 507.309 497.531 507.691 496.82 507.691 499 | c h 500 | 496.82 507.691 m f 501 | Q Q 502 | showpage 503 | %%Trailer 504 | end 505 | %%EOF 506 | -------------------------------------------------------------------------------- /logos/eps/logo-color.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: cairo 1.16.0 (https://cairographics.org) 3 | %%CreationDate: Sun May 7 17:54:44 2023 4 | %%Pages: 1 5 | %%DocumentData: Clean7Bit 6 | %%LanguageLevel: 2 7 | %%BoundingBox: 0 0 1000 1000 8 | %%EndComments 9 | %%BeginProlog 10 | 50 dict begin 11 | /q { gsave } bind def 12 | /Q { grestore } bind def 13 | /cm { 6 array astore concat } bind def 14 | /w { setlinewidth } bind def 15 | /J { setlinecap } bind def 16 | /j { setlinejoin } bind def 17 | /M { setmiterlimit } bind def 18 | /d { setdash } bind def 19 | /m { moveto } bind def 20 | /l { lineto } bind def 21 | /c { curveto } bind def 22 | /h { closepath } bind def 23 | /re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto 24 | 0 exch rlineto 0 rlineto closepath } bind def 25 | /S { stroke } bind def 26 | /f { fill } bind def 27 | /f* { eofill } bind def 28 | /n { newpath } bind def 29 | /W { clip } bind def 30 | /W* { eoclip } bind def 31 | /BT { } bind def 32 | /ET { } bind def 33 | /BDC { mark 3 1 roll /BDC pdfmark } bind def 34 | /EMC { mark /EMC pdfmark } bind def 35 | /cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def 36 | /Tj { show currentpoint cairo_store_point } bind def 37 | /TJ { 38 | { 39 | dup 40 | type /stringtype eq 41 | { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse 42 | } forall 43 | currentpoint cairo_store_point 44 | } bind def 45 | /cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore 46 | cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def 47 | /Tf { pop /cairo_font exch def /cairo_font_matrix where 48 | { pop cairo_selectfont } if } bind def 49 | /Td { matrix translate cairo_font_matrix matrix concatmatrix dup 50 | /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point 51 | /cairo_font where { pop cairo_selectfont } if } bind def 52 | /Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def 53 | cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def 54 | /g { setgray } bind def 55 | /rg { setrgbcolor } bind def 56 | /d1 { setcachedevice } bind def 57 | /cairo_data_source { 58 | CairoDataIndex CairoData length lt 59 | { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def } 60 | { () } ifelse 61 | } def 62 | /cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def 63 | /cairo_image { image cairo_flush_ascii85_file } def 64 | /cairo_imagemask { imagemask cairo_flush_ascii85_file } def 65 | %%EndProlog 66 | %%BeginSetup 67 | %%EndSetup 68 | %%Page: 1 1 69 | %%BeginPageSetup 70 | %%PageBoundingBox: 0 0 1000 1000 71 | %%EndPageSetup 72 | q 0 0 1000 1000 rectclip 73 | 1 0 0 -1 0 1000 cm q 74 | 1 g 75 | 0 0 1000 1000 rectfill 76 | 0.643137 0.215686 0.858824 rg 77 | 850 515.555 m 850 415.445 805.73 325.535 735.805 264.195 c 674.461 194.273 78 | 584.551 150 484.445 150 c 300.035 150 150 300.035 150 484.445 c 150 584.531 79 | 194.254 674.426 264.156 735.77 c 325.5 805.715 415.426 850 515.555 850 80 | c 516.211 850 516.848 849.953 517.5 849.953 c 518.152 849.953 518.789 850 81 | 519.445 850 c 702.004 850 850 702.004 850 519.445 c 850 518.789 849.953 82 | 518.152 849.953 517.5 c 849.953 516.848 850 516.211 850 515.555 c h 83 | 280.883 681.773 m 247.867 635.281 228.23 578.648 227.824 517.5 c 228.875 84 | 357.969 357.965 228.875 517.5 227.824 c 578.648 228.23 635.285 247.867 85 | 681.773 280.883 c 735.074 332.57 768.336 404.785 768.336 484.445 c 768.336 86 | 640.98 640.98 768.336 484.445 768.336 c 404.785 768.336 332.57 735.074 87 | 280.883 681.773 c h 88 | 157.777 484.445 m 157.777 304.32 304.32 157.777 484.445 157.777 c 561.117 89 | 157.777 631.645 184.395 687.445 228.789 c 637.176 198.551 578.371 181.109 90 | 515.555 181.109 c 331.145 181.109 181.109 331.145 181.109 515.555 c 181.109 91 | 578.355 198.539 637.145 228.766 687.406 c 184.387 631.625 157.777 561.102 92 | 157.777 484.445 c h 93 | 515.555 803.336 m 437.156 803.336 366.012 771.793 314.07 720.77 c 362.09 94 | 755.531 420.961 776.109 484.445 776.109 c 645.273 776.109 776.109 645.273 95 | 776.109 484.445 c 776.109 420.965 755.531 362.094 720.77 314.07 c 771.793 96 | 366.012 803.332 437.156 803.336 515.555 c 803.336 674.238 674.238 803.336 97 | 515.555 803.336 c h 98 | 515.555 803.336 m f 99 | Q q 100 | 290 528.344 420 60.027 re W n 101 | 0.521569 0.0784314 0.294118 rg 102 | 295.359 574.75 m 290.012 574.75 l 290.012 528.344 l 295.359 528.344 l 295.359 103 | 540.988 l 295.031 548.484 l 295.227 548.484 l 296.879 546.703 298.652 545.223 104 | 300.547 544.051 c 302.43 542.879 304.613 542.293 307.09 542.293 c 310.871 105 | 542.293 313.641 543.363 315.406 545.512 c 317.16 547.664 318.039 550.852 106 | 318.039 555.066 c 318.039 574.75 l 312.695 574.75 l 312.695 555.781 l 312.695 107 | 552.785 312.129 550.555 311 549.094 c 309.871 547.645 308 546.918 305.395 108 | 546.918 c 304.438 546.918 303.562 547.035 302.762 547.27 c 301.953 547.516 109 | 301.16 547.875 300.375 548.352 c 299.594 548.832 298.789 549.426 297.965 110 | 550.137 c 297.141 550.859 296.27 551.699 295.359 552.652 c h 111 | 331.598 588.371 m 330.031 588.371 328.641 588.152 327.426 587.719 c 328.531 112 | 583.484 l 328.969 583.613 329.434 583.723 329.926 583.809 c 330.43 583.895 113 | 330.922 583.938 331.398 583.938 c 333.617 583.938 335.418 583.301 336.809 114 | 582.023 c 338.199 580.738 339.285 579.117 340.07 577.16 c 341.047 574.812 115 | l 326.25 543.074 l 331.66 543.074 l 339.418 560.605 l 340.027 561.996 340.664 116 | 563.496 341.332 565.102 c 342.012 566.711 342.676 568.273 343.328 569.797 117 | c 343.59 569.797 l 344.152 568.273 344.727 566.719 345.309 565.129 c 345.898 118 | 563.547 346.457 562.039 346.977 560.605 c 353.887 543.074 l 358.969 543.074 119 | l 345.023 577.355 l 344.414 578.922 343.719 580.375 342.938 581.723 c 342.156 120 | 583.07 341.219 584.234 340.133 585.215 c 339.047 586.191 337.797 586.957 121 | 336.379 587.523 c 334.973 588.09 333.379 588.371 331.598 588.371 c h 122 | 373.57 588.109 m 368.227 588.109 l 368.227 543.074 l 372.656 543.074 l 123 | 373.113 547.113 l 373.309 547.113 l 374.785 545.723 376.488 544.57 378.418 124 | 543.66 c 380.355 542.746 382.305 542.293 384.258 542.293 c 386.387 542.293 125 | 388.266 542.668 389.891 543.426 c 391.523 544.191 392.895 545.277 393.996 126 | 546.684 c 395.109 548.102 395.941 549.797 396.5 551.77 c 397.074 553.75 127 | 397.359 555.977 397.359 558.453 c 397.359 561.148 396.965 563.547 396.172 128 | 565.652 c 395.398 567.762 394.348 569.559 393.02 571.035 c 391.699 572.512 129 | 390.168 573.629 388.43 574.383 c 386.691 575.148 384.867 575.531 382.957 130 | 575.531 c 381.477 575.531 379.879 575.172 378.16 574.449 c 376.445 573.738 131 | 374.895 572.73 373.504 571.426 c 373.309 571.426 l 373.57 577.422 l h 132 | 382.043 571.035 m 384.91 571.035 387.258 569.926 389.082 567.711 c 390.906 133 | 565.492 391.82 562.41 391.82 558.453 c 391.82 556.719 391.641 555.133 391.285 134 | 553.695 c 390.945 552.262 390.414 551.035 389.695 550.008 c 388.98 548.992 135 | 388.062 548.199 386.93 547.637 c 385.801 547.07 384.453 546.789 382.891 136 | 546.789 c 381.5 546.789 380.008 547.168 378.418 547.922 c 376.836 548.688 137 | 375.223 549.895 373.57 551.547 c 373.57 567.32 l 375.09 568.664 376.613 138 | 569.621 378.133 570.188 c 379.652 570.75 380.957 571.035 382.043 571.035 139 | c h 140 | 422.766 575.531 m 420.375 575.531 418.152 575.16 416.09 574.422 c 414.023 141 | 573.684 412.219 572.598 410.68 571.164 c 409.133 569.73 407.918 567.98 142 | 407.031 565.91 c 406.137 563.852 405.688 561.496 405.688 558.848 c 405.688 143 | 556.281 406.137 553.98 407.031 551.938 c 407.918 549.895 409.113 548.156 144 | 410.617 546.723 c 412.109 545.289 413.828 544.191 415.766 543.426 c 417.695 145 | 542.668 419.723 542.293 421.852 542.293 c 424.113 542.293 426.145 542.648 146 | 427.953 543.359 c 429.754 544.082 431.273 545.094 432.516 546.398 c 433.75 147 | 547.699 434.691 549.266 435.344 551.09 c 435.996 552.914 436.32 554.934 148 | 436.32 557.152 c 436.32 557.758 436.301 558.348 436.258 558.91 c 436.215 149 | 559.477 436.148 559.977 436.062 560.41 c 411.098 560.41 l 411.445 564.016 150 | 412.762 566.719 415.047 568.52 c 417.324 570.324 420.113 571.23 423.418 151 | 571.23 c 425.328 571.23 427.059 570.957 428.605 570.41 c 430.145 569.871 152 | 431.629 569.145 433.062 568.23 c 435.02 571.75 l 433.453 572.793 431.664 153 | 573.684 429.648 574.422 c 427.625 575.16 425.328 575.531 422.766 575.531 154 | c h 155 | 421.984 546.527 m 420.68 546.527 419.434 546.746 418.242 547.18 c 417.043 156 | 547.613 415.965 548.23 415.008 549.031 c 414.055 549.84 413.25 550.852 157 | 412.598 552.066 c 411.945 553.285 411.488 554.676 411.23 556.238 c 431.434 158 | 556.238 l 431.215 552.98 430.273 550.547 428.605 548.938 c 426.93 547.332 159 | 424.719 546.527 421.984 546.527 c h 160 | 455.223 574.75 m 449.879 574.75 l 449.879 543.074 l 454.312 543.074 l 454.766 161 | 550.57 l 454.961 550.57 l 456.613 548.004 458.648 545.984 461.062 544.508 162 | c 463.469 543.031 466.152 542.293 469.105 542.293 c 470.281 542.293 471.367 163 | 542.387 472.363 542.578 c 473.363 542.777 474.363 543.117 475.363 543.594 164 | c 474.125 548.223 l 472.996 547.832 472.051 547.547 471.297 547.375 c 470.531 165 | 547.199 469.52 547.113 468.258 547.113 c 465.867 547.113 463.578 547.797 166 | 461.391 549.16 c 459.191 550.535 457.137 552.871 455.223 556.172 c h 167 | 513.035 555.262 m 485.008 555.262 l 485.008 551.219 l 513.035 551.219 l 168 | h 169 | 529.98 574.75 m 524.637 574.75 l 524.637 543.074 l 529.07 543.074 l 529.523 170 | 548.484 l 529.785 548.484 l 531.438 546.703 533.219 545.223 535.129 544.051 171 | c 537.043 542.879 539.238 542.293 541.715 542.293 c 545.492 542.293 548.262 172 | 543.363 550.016 545.512 c 551.781 547.664 552.664 550.852 552.664 555.066 173 | c 552.664 574.75 l 547.32 574.75 l 547.32 555.781 l 547.32 552.785 546.754 174 | 550.555 545.625 549.094 c 544.492 547.645 542.625 546.918 540.02 546.918 175 | c 539.062 546.918 538.18 547.035 537.371 547.27 c 536.574 547.516 535.781 176 | 547.875 535 548.352 c 534.219 548.832 533.414 549.426 532.59 550.137 c 177 | 531.762 550.859 530.895 551.699 529.98 552.652 c h 178 | 577.223 575.531 m 575.137 575.531 573.148 575.16 571.266 574.422 c 569.371 179 | 573.684 567.707 572.605 566.273 571.191 c 564.84 569.781 563.699 568.043 180 | 562.855 565.977 c 562.004 563.918 561.578 561.582 561.578 558.977 c 561.578 181 | 556.324 562.004 553.965 562.855 551.898 c 563.699 549.84 564.84 548.09 182 | 566.273 546.656 c 567.707 545.223 569.371 544.137 571.266 543.398 c 573.148 183 | 542.66 575.137 542.293 577.223 542.293 c 579.309 542.293 581.297 542.66 184 | 583.191 543.398 c 585.078 544.137 586.738 545.223 588.172 546.656 c 589.605 185 | 548.09 590.746 549.84 591.602 551.898 c 592.441 553.965 592.863 556.324 186 | 592.863 558.977 c 592.863 561.582 592.441 563.918 591.602 565.977 c 590.746 187 | 568.043 589.605 569.781 588.172 571.191 c 586.738 572.605 585.078 573.684 188 | 583.191 574.422 c 581.297 575.16 579.309 575.531 577.223 575.531 c h 189 | 577.223 571.098 m 578.742 571.098 580.125 570.805 581.367 570.211 c 582.602 190 | 569.629 583.664 568.805 584.559 567.734 c 585.445 566.676 586.129 565.406 191 | 586.605 563.93 c 587.086 562.453 587.324 560.801 587.324 558.977 c 587.324 192 | 557.152 587.086 555.488 586.605 553.984 c 586.129 552.488 585.445 551.199 193 | 584.559 550.113 c 583.664 549.027 582.602 548.188 581.367 547.598 c 580.125 194 | 547.016 578.742 546.723 577.223 546.723 c 575.699 546.723 574.324 547.016 195 | 573.09 547.598 c 571.848 548.188 570.781 549.027 569.895 550.113 c 569 196 | 551.199 568.312 552.488 567.836 553.984 c 567.359 555.488 567.121 557.152 197 | 567.121 558.977 c 567.121 560.801 567.359 562.453 567.836 563.93 c 568.312 198 | 565.406 569 566.676 569.895 567.734 c 570.781 568.805 571.848 569.629 573.09 199 | 570.211 c 574.324 570.805 575.699 571.098 577.223 571.098 c h 200 | 616.98 575.531 m 613.852 575.531 610.961 575.039 608.312 574.059 c 605.66 201 | 573.086 603.359 571.926 601.402 570.578 c 603.879 567.059 l 605.703 568.363 202 | 607.715 569.406 609.914 570.188 c 612.105 570.969 614.676 571.359 617.633 203 | 571.359 c 620.324 571.359 622.336 570.867 623.668 569.887 c 624.988 568.914 204 | 625.648 567.754 625.648 566.406 c 625.648 565.797 625.539 565.234 625.32 205 | 564.711 c 625.105 564.191 624.641 563.691 623.926 563.211 c 623.207 562.734 206 | 622.195 562.277 620.891 561.844 c 619.586 561.41 617.871 560.977 615.742 207 | 560.539 c 611.613 559.672 608.52 558.508 606.461 557.047 c 604.391 555.598 208 | 603.359 553.676 603.359 551.285 c 603.359 550.023 603.641 548.84 604.203 209 | 547.727 c 604.77 546.625 605.609 545.668 606.719 544.859 c 607.824 544.059 210 | 609.191 543.43 610.828 542.969 c 612.453 542.516 614.352 542.293 616.523 211 | 542.293 c 618.957 542.293 621.305 542.691 623.562 543.492 c 625.82 544.297 212 | 627.734 545.246 629.297 546.332 c 626.691 549.785 l 625.215 548.785 623.586 213 | 547.984 621.801 547.375 c 620.02 546.766 618.109 546.461 616.066 546.461 214 | c 613.375 546.461 611.484 546.918 610.398 547.832 c 609.309 548.742 608.766 215 | 549.809 608.766 551.023 c 608.766 552.414 609.484 553.465 610.918 554.18 216 | c 612.352 554.902 614.699 555.609 617.957 556.305 c 620.609 556.867 622.781 217 | 557.465 624.477 558.09 c 626.168 558.723 627.508 559.434 628.488 560.215 218 | c 629.465 560.996 630.137 561.867 630.512 562.82 c 630.875 563.777 631.059 219 | 564.863 631.059 566.082 c 631.059 567.383 630.754 568.602 630.145 569.73 220 | c 629.535 570.859 628.633 571.859 627.434 572.73 c 626.242 573.598 624.77 221 | 574.285 623.016 574.789 c 621.25 575.285 619.238 575.531 616.98 575.531 222 | c h 223 | 661.559 575.531 m 659.258 575.531 657.324 575.215 655.762 574.578 c 654.195 224 | 573.953 652.934 573.062 651.98 571.906 c 651.023 570.762 650.336 569.383 225 | 649.922 567.773 c 649.512 566.168 649.309 564.387 649.309 562.43 c 649.309 226 | 547.441 l 640.379 547.441 l 640.379 543.398 l 649.504 543.074 l 650.219 227 | 532.906 l 654.652 532.906 l 654.652 543.074 l 670.23 543.074 l 670.23 547.441 228 | l 654.652 547.441 l 654.652 562.496 l 654.652 563.93 654.781 565.176 655.043 229 | 566.238 c 655.305 567.305 655.738 568.211 656.348 568.949 c 656.953 569.688 230 | 657.781 570.238 658.824 570.605 c 659.867 570.977 661.148 571.164 662.668 231 | 571.164 c 664.188 571.164 665.559 571.035 666.773 570.773 c 667.992 570.512 232 | 669.164 570.164 670.293 569.73 c 671.469 573.641 l 670.035 574.164 668.52 233 | 574.609 666.93 574.984 c 665.348 575.348 663.559 575.531 661.559 575.531 234 | c h 235 | 689.848 574.75 m 684.504 574.75 l 684.504 543.074 l 688.934 543.074 l 689.391 236 | 550.57 l 689.586 550.57 l 691.238 548.004 693.266 545.984 695.676 544.508 237 | c 698.09 543.031 700.773 542.293 703.73 542.293 c 704.902 542.293 705.988 238 | 542.387 706.988 542.578 c 707.988 542.777 708.988 543.117 709.988 543.594 239 | c 708.75 548.223 l 707.617 547.832 706.672 547.547 705.906 547.375 c 705.152 240 | 547.199 704.145 547.113 702.883 547.113 c 700.492 547.113 698.199 547.797 241 | 696 549.16 c 693.809 550.535 691.758 552.871 689.848 556.172 c h 242 | 689.848 574.75 m f 243 | Q q 244 | 290 602.543 420 37.094 re W n 245 | 0.694118 0.615686 0.815686 rg 246 | 304.84 616.828 m 307.051 617.09 308.773 617.848 310.012 619.094 c 311.246 247 | 620.348 311.867 621.801 311.867 623.457 c 311.867 625.484 310.965 627.148 248 | 309.164 628.445 c 307.359 629.754 304.973 630.445 302 630.523 c 290.238 249 | 630.523 l 290 629.262 l 293.355 628.035 l 293.355 606.922 l 290.555 606.766 250 | l 290.594 604.871 l 294.961 604.66 298.395 604.555 300.895 604.555 c 303.84 251 | 604.555 306.176 605.141 307.902 606.309 c 309.625 607.48 310.484 609.082 252 | 310.484 611.105 c 310.484 612.555 310.012 613.816 309.062 614.895 c 308.117 253 | 615.973 306.707 616.617 304.84 616.828 c h 254 | 302.434 606.883 m 297.027 607.477 l 297.027 616 l 299 616 l 301.527 616 255 | 303.395 615.551 304.605 614.656 c 305.812 613.762 306.418 612.672 306.418 256 | 611.383 c 306.418 610.328 306.047 609.363 305.297 608.477 c 304.547 607.598 257 | 303.59 607.066 302.434 606.883 c h 258 | 297.027 627.801 m 300.973 628.117 l 301.84 628.156 l 303.684 628.156 305.105 259 | 627.707 306.102 626.812 c 307.102 625.918 307.602 624.828 307.602 623.539 260 | c 307.602 622.09 306.996 620.84 305.789 619.789 c 304.578 618.734 303.051 261 | 618.184 301.211 618.133 c 297.027 618.133 l h 262 | 334.566 612.25 m 334.672 614.199 334.434 616.328 333.855 618.645 c 331.723 263 | 618.645 l 331.289 614.305 l 329.16 615.488 327.355 617.051 325.883 619 264 | c 325.883 627.918 l 327.805 628.051 329.16 628.285 329.949 628.629 c 329.711 265 | 630.523 l 319.688 630.523 l 319.488 629.223 l 322.371 628.156 l 322.371 266 | 614.262 l 319.41 614.5 l 318.938 612.645 l 320.699 611.883 322.488 611.473 267 | 324.305 611.422 c 325.883 612.805 l 325.883 616.395 l 330.027 611.973 l 268 | 330.789 611.66 331.488 611.5 332.117 611.5 c 332.961 611.5 333.777 611.75 269 | 334.566 612.25 c h 270 | 347.043 607.91 m 345.754 607.355 344.742 606.566 344.004 605.543 c 344.691 271 | 604.121 345.492 603.121 346.414 602.543 c 347.598 603.016 348.582 603.805 272 | 349.371 604.91 c 348.953 606.121 348.176 607.121 347.043 607.91 c h 273 | 348.625 612.805 m 348.625 627.996 l 349.938 628.156 350.887 628.367 351.465 274 | 628.629 c 351.227 630.523 l 342.309 630.523 l 342.113 629.223 l 342.742 275 | 628.906 343.742 628.535 345.109 628.117 c 345.109 614.262 l 342.152 614.5 276 | l 341.676 612.645 l 343.441 611.883 345.23 611.473 347.043 611.422 c h 277 | 377.875 618.406 m 377.875 627.996 l 379.215 628.18 380.137 628.391 380.637 278 | 628.629 c 380.402 630.523 l 372.309 630.523 l 372.113 629.223 l 374.363 279 | 628.352 l 374.363 618.84 l 374.363 616 373.52 614.578 371.836 614.578 c 280 | 370.312 614.578 368.258 615.566 365.68 617.539 c 365.68 628.035 l 366.785 281 | 628.168 367.641 628.367 368.246 628.629 c 368.008 630.523 l 359.562 630.523 282 | l 359.367 629.223 l 362.168 628.195 l 362.168 614.262 l 359.207 614.5 l 283 | 358.734 612.645 l 360.496 611.883 362.285 611.473 364.102 611.422 c 365.68 284 | 612.805 l 365.68 615.406 l 369.625 612.75 372.309 611.422 373.73 611.422 285 | c 374.492 611.555 375.266 611.941 376.043 612.582 c 376.816 613.23 377.316 286 | 613.895 377.543 614.578 c 377.766 615.262 377.875 616.539 377.875 618.406 287 | c h 288 | 392.445 626.734 m 394.367 626.762 396.703 627.043 399.453 627.578 c 402.199 289 | 628.121 404.441 628.734 406.18 629.418 c 406.375 631.113 l 406.375 633.508 290 | 405.27 635.531 403.062 637.176 c 400.852 638.82 398.234 639.641 395.207 291 | 639.641 c 393.156 639.641 391.414 639.191 389.984 638.297 c 388.547 637.402 292 | 387.828 636.18 387.828 634.629 c 387.867 634.035 l 392.562 629.695 l 389.445 293 | 629.535 l 388.734 627.68 l 390.023 626.156 391.418 624.852 392.918 623.773 294 | c 389.895 622.617 388.379 620.59 388.379 617.695 c 388.379 615.75 389.168 295 | 614.137 390.75 612.859 c 392.328 611.586 394.273 610.949 396.59 610.949 296 | c 398.641 610.949 400.391 611.461 401.84 612.488 c 402.785 610.699 404.352 297 | 609.582 406.535 609.133 c 407.285 613.238 l 405.918 613.238 404.668 613.5 298 | 403.535 614.027 c 404.352 615.133 404.758 616.383 404.758 617.777 c 404.758 299 | 619.75 403.965 621.355 402.375 622.59 c 400.781 623.828 398.852 624.445 300 | 396.59 624.445 c 395.129 624.328 l 393.973 625.223 393.078 626.023 392.445 301 | 626.734 c h 302 | 393.312 613.828 m 392.445 614.855 392.012 616.066 392.012 617.461 c 392.012 303 | 618.934 392.418 620.129 393.234 621.051 c 394.051 621.973 395.168 622.434 304 | 396.59 622.434 c 397.406 622.434 398.285 622.262 399.234 621.918 c 400.496 305 | 620.895 401.129 619.605 401.129 618.051 c 401.129 616.684 400.652 615.512 306 | 399.707 614.539 c 398.758 613.566 397.602 613.078 396.234 613.078 c 395.285 307 | 613.078 394.312 613.328 393.312 613.828 c h 308 | 395.445 636.441 m 397.18 636.441 398.871 636.082 400.52 635.363 c 402.16 309 | 634.637 403.336 633.613 404.047 632.301 c 402.363 631.301 399.324 630.512 310 | 394.93 629.93 c 392.352 631.695 391.062 633.141 391.062 634.273 c 391.062 311 | 634.93 391.473 635.457 392.289 635.852 c 393.102 636.246 394.156 636.441 312 | 395.445 636.441 c h 313 | 432.086 604.871 m 443.094 604.555 l 445.855 604.555 448.105 605.324 449.844 314 | 606.859 c 451.578 608.402 452.449 610.355 452.449 612.723 c 452.449 614.988 315 | 451.652 616.887 450.062 618.422 c 448.469 619.965 446.41 620.773 443.883 316 | 620.855 c 438.516 620.855 l 438.516 628.117 l 443.133 628.668 l 443.094 317 | 630.523 l 431.73 630.523 l 431.492 629.262 l 434.848 628.035 l 434.848 318 | 606.922 l 432.043 606.766 l h 319 | 442.543 618.566 m 444.516 618.566 445.988 617.984 446.961 616.828 c 447.938 320 | 615.672 448.422 614.262 448.422 612.605 c 448.422 611.344 448.16 610.191 321 | 447.633 609.148 c 447.105 608.113 446.344 607.355 445.344 606.883 c 438.516 322 | 607.477 l 438.516 618.211 l 440.094 618.445 441.438 618.566 442.543 618.566 323 | c h 324 | 476.262 623.695 m 478.391 624.012 l 478.156 626.641 477.801 628.812 477.328 325 | 630.523 c 461.582 630.523 l 460.871 627.996 l 470.027 617.695 l 472.262 326 | 615.039 473.379 612.805 473.379 610.988 c 473.379 609.91 473.039 608.953 327 | 472.355 608.121 c 471.672 607.297 470.633 606.883 469.238 606.883 c 467.949 328 | 606.883 466.473 607.133 464.816 607.633 c 464.105 612.566 l 461.855 612.527 329 | l 461.621 611.105 461.5 609.684 461.5 608.266 c 461.539 606.566 l 464.277 330 | 604.91 466.988 604.082 469.672 604.082 c 471.777 604.082 473.559 604.746 331 | 475.016 606.07 c 476.477 607.402 477.207 609.066 477.207 611.066 c 477.207 332 | 612.223 476.918 613.375 476.34 614.516 c 475.762 615.664 474.34 617.527 333 | 472.078 620.105 c 465.25 627.406 l 465.367 627.762 l 475 627.207 l h 334 | 488.305 604.871 m 499.316 604.555 l 502.078 604.555 504.328 605.324 506.066 335 | 606.859 c 507.801 608.402 508.672 610.355 508.672 612.723 c 508.672 614.988 336 | 507.871 616.887 506.277 618.422 c 504.691 619.965 502.633 620.773 500.105 337 | 620.855 c 494.738 620.855 l 494.738 628.117 l 499.355 628.668 l 499.316 338 | 630.523 l 487.949 630.523 l 487.715 629.262 l 491.07 628.035 l 491.07 606.922 339 | l 488.266 606.766 l h 340 | 498.766 618.566 m 500.738 618.566 502.211 617.984 503.184 616.828 c 504.156 341 | 615.672 504.645 614.262 504.645 612.605 c 504.645 611.344 504.383 610.191 342 | 503.855 609.148 c 503.328 608.113 502.566 607.355 501.566 606.883 c 494.738 343 | 607.477 l 494.738 618.211 l 496.316 618.445 497.66 618.566 498.766 618.566 344 | c h 345 | 540.02 627.84 m 540.785 627.84 541.996 627.535 543.652 626.934 c 544.324 346 | 628.746 l 539.191 631.113 l 538.297 631.168 537.41 630.832 536.523 630.105 347 | c 535.645 629.383 535.207 628.602 535.207 627.762 c 535.207 615.012 l 532.758 348 | 615.051 l 532.484 613.16 l 533.324 612.789 534.258 612.488 535.285 612.25 349 | c 536.863 607.277 l 538.719 607.277 l 538.719 612.055 l 544.242 612.055 350 | l 544.402 613.199 l 542.547 615.094 l 538.719 615.094 l 538.719 625.707 351 | l 538.719 626.523 538.812 627.082 538.996 627.383 c 539.18 627.688 539.52 352 | 627.84 540.02 627.84 c h 353 | 551.91 621.211 m 551.91 618.262 552.742 615.867 554.41 614.027 c 556.082 354 | 612.184 558.223 611.266 560.828 611.266 c 563.406 611.266 565.496 612.211 355 | 567.102 614.105 c 568.707 616 569.508 618.445 569.508 621.445 c 569.508 356 | 624.418 568.719 626.805 567.141 628.605 c 565.562 630.41 563.484 631.312 357 | 560.906 631.312 c 558.301 631.312 556.148 630.363 554.449 628.473 c 552.754 358 | 626.578 551.91 624.156 551.91 621.211 c h 359 | 563.234 628.473 m 564.945 627.34 565.801 625.145 565.801 621.879 c 565.801 360 | 619.539 565.367 617.59 564.496 616.039 c 563.629 614.488 562.301 613.711 361 | 560.512 613.711 c 559.328 613.711 558.328 614 557.512 614.578 c 556.277 362 | 616.051 555.656 618.117 555.656 620.773 c 555.656 623.039 556.137 624.934 363 | 557.094 626.457 c 558.059 627.984 559.473 628.746 561.34 628.746 c 561.945 364 | 628.746 562.578 628.656 563.234 628.473 c h 365 | 620.711 604.871 m 620.949 606.133 l 617.594 607.355 l 617.594 630.523 l 366 | 613.527 630.957 l 599.52 608.539 l 600.23 614.027 l 600.23 628.273 l 603.742 367 | 628.668 l 603.703 630.523 l 594.152 630.523 l 593.914 629.262 l 597.27 368 | 628.035 l 597.27 607.043 l 594.703 606.727 l 594.742 604.871 l 601.77 604.871 369 | l 615.344 626.734 l 614.594 621.367 l 614.594 607.16 l 610.766 606.727 370 | l 610.805 604.871 l h 371 | 627.43 621.211 m 627.43 618.262 628.266 615.867 629.938 614.027 c 631.605 372 | 612.184 633.742 611.266 636.348 611.266 c 638.926 611.266 641.02 612.211 373 | 642.621 614.105 c 644.227 616 645.031 618.445 645.031 621.445 c 645.031 374 | 624.418 644.242 626.805 642.664 628.605 c 641.082 630.41 639.004 631.312 375 | 636.426 631.312 c 633.82 631.312 631.672 630.363 629.977 628.473 c 628.277 376 | 626.578 627.43 624.156 627.43 621.211 c h 377 | 638.754 628.473 m 640.465 627.34 641.32 625.145 641.32 621.879 c 641.32 378 | 619.539 640.887 617.59 640.02 616.039 c 639.148 614.488 637.82 613.711 379 | 636.031 613.711 c 634.848 613.711 633.848 614 633.031 614.578 c 631.797 380 | 616.051 631.18 618.117 631.18 620.773 c 631.18 623.039 631.66 624.934 632.621 381 | 626.457 c 633.582 627.984 634.992 628.746 636.859 628.746 c 637.465 628.746 382 | 638.098 628.656 638.754 628.473 c h 383 | 656.758 615.922 m 656.758 616.762 657.102 617.434 657.785 617.934 c 658.469 384 | 618.434 659.523 619 660.941 619.629 c 663.27 620.695 l 665.535 621.879 385 | 666.664 623.512 666.664 625.59 c 666.664 627.273 666.035 628.648 664.77 386 | 629.711 c 663.508 630.777 661.875 631.312 659.879 631.312 c 657.691 631.312 387 | 655.363 630.629 652.891 629.262 c 654.352 625.789 l 656.824 627.473 659.43 388 | 628.496 662.168 628.867 c 662.875 628.234 663.23 627.473 663.23 626.578 389 | c 663.23 625.684 662.902 624.957 662.246 624.406 c 661.586 623.852 660.293 390 | 623.148 658.363 622.289 c 656.426 621.438 655.121 620.609 654.453 619.805 391 | c 653.781 619.004 653.445 618.039 653.445 616.906 c 653.445 615.25 654.148 392 | 613.895 655.559 612.844 c 656.965 611.789 658.758 611.266 660.941 611.266 393 | c 662.785 611.266 664.469 611.66 665.992 612.449 c 666.074 614.367 665.848 394 | 616.066 665.324 617.539 c 663.191 617.539 l 662.914 614.5 l 661.602 613.922 395 | 660.219 613.633 658.773 613.633 c 658.023 613.672 l 657.18 614.199 656.758 396 | 614.949 656.758 615.922 c h 397 | 682.656 627.84 m 683.418 627.84 684.629 627.535 686.289 626.934 c 686.957 398 | 628.746 l 681.828 631.113 l 680.934 631.168 680.047 630.832 679.168 630.105 399 | c 678.285 629.383 677.84 628.602 677.84 627.762 c 677.84 615.012 l 675.395 400 | 615.051 l 675.117 613.16 l 675.961 612.789 676.895 612.488 677.922 612.25 401 | c 679.5 607.277 l 681.355 607.277 l 681.355 612.055 l 686.879 612.055 l 402 | 687.035 613.199 l 685.184 615.094 l 681.355 615.094 l 681.355 625.707 l 403 | 681.355 626.523 681.445 627.082 681.629 627.383 c 681.812 627.688 682.156 404 | 627.84 682.656 627.84 c h 405 | 709.973 612.25 m 710.078 614.199 709.844 616.328 709.266 618.645 c 707.133 406 | 618.645 l 706.699 614.305 l 704.566 615.488 702.766 617.051 701.293 619 407 | c 701.293 627.918 l 703.211 628.051 704.566 628.285 705.355 628.629 c 705.121 408 | 630.523 l 695.098 630.523 l 694.898 629.223 l 697.781 628.156 l 697.781 409 | 614.262 l 694.82 614.5 l 694.348 612.645 l 696.109 611.883 697.898 611.473 410 | 699.715 611.422 c 701.293 612.805 l 701.293 616.395 l 705.438 611.973 l 411 | 706.199 611.66 706.895 611.5 707.527 611.5 c 708.371 611.5 709.184 611.75 412 | 709.973 612.25 c h 413 | 709.973 612.25 m f 414 | Q q 415 | 0.545098 0.235294 0.498039 rg 416 | 518.855 385.707 m 518.855 390.383 515.062 394.176 510.387 394.176 c 505.707 417 | 394.176 501.918 390.383 501.918 385.707 c 501.918 381.027 505.707 377.238 418 | 510.387 377.238 c 515.062 377.238 518.855 381.027 518.855 385.707 c h 419 | 518.855 385.707 m f 420 | 463.43 425.32 m 463.43 430 459.637 433.789 454.961 433.789 c 450.281 433.789 421 | 446.492 430 446.492 425.32 c 446.492 420.645 450.281 416.852 454.961 416.852 422 | c 459.637 416.852 463.43 420.645 463.43 425.32 c h 423 | 463.43 425.32 m f 424 | 501.914 464.297 m 501.914 468.973 498.121 472.766 493.441 472.766 c 488.766 425 | 472.766 484.973 468.973 484.973 464.297 c 484.973 459.621 488.766 455.828 426 | 493.441 455.828 c 498.121 455.828 501.914 459.621 501.914 464.297 c h 427 | 501.914 464.297 m f 428 | 445.273 494.574 m 445.273 499.254 441.48 503.043 436.805 503.043 c 432.125 429 | 503.043 428.336 499.254 428.336 494.574 c 428.336 489.898 432.125 486.105 430 | 436.805 486.105 c 441.48 486.105 445.273 489.898 445.273 494.574 c h 431 | 445.273 494.574 m f 432 | 563.719 395.859 m 563.719 400.539 559.926 404.332 555.25 404.332 c 550.57 433 | 404.332 546.777 400.539 546.777 395.859 c 546.777 391.184 550.57 387.391 434 | 555.25 387.391 c 559.926 387.391 563.719 391.184 563.719 395.859 c h 435 | 563.719 395.859 m f 436 | Q q 437 | 488 497 18 17.172 re W n 438 | 0.545098 0.235294 0.498039 rg 439 | 505.289 505.703 m 505.289 510.379 501.5 514.172 496.82 514.172 c 492.145 440 | 514.172 488.352 510.379 488.352 505.703 c 488.352 501.023 492.145 497.234 441 | 496.82 497.234 c 501.5 497.234 505.289 501.023 505.289 505.703 c h 442 | 505.289 505.703 m f 443 | Q q 444 | 421.305 360.359 157.395 136.641 re W n 445 | 0.545098 0.235294 0.498039 rg 446 | 436.805 496.562 m 436.555 496.562 436.309 496.516 436.082 496.426 c 435.906 447 | 496.355 435.738 496.262 435.586 496.145 c 435.328 495.945 435.117 495.676 448 | 434.977 495.355 c 434.941 495.273 434.914 495.191 434.891 495.109 c 421.383 449 | 448.625 l 421.148 447.809 421.449 446.938 422.141 446.449 c 510.645 383.559 450 | l 511.43 383 512.5 383.086 513.188 383.762 c 513.879 384.434 513.98 385.504 451 | 513.438 386.301 c 443.047 488.984 l 492.508 462.543 l 492.793 462.391 493.117 452 | 462.312 493.441 462.312 c 574 462.312 l 553.52 397.254 l 515.773 363.836 453 | l 514.953 363.109 514.875 361.852 515.605 361.031 c 516.328 360.211 517.586 454 | 360.133 518.406 360.859 c 556.562 394.641 l 556.832 394.883 557.035 395.191 455 | 557.145 395.535 c 578.605 463.699 l 578.793 464.301 578.688 464.961 578.312 456 | 465.469 c 577.938 465.98 577.344 466.281 576.711 466.281 c 493.941 466.281 457 | l 437.781 496.305 l 437.691 496.352 437.598 496.398 437.504 496.434 c 437.387 458 | 496.477 437.262 496.512 437.137 496.531 c 437.027 496.555 436.914 496.562 459 | 436.805 496.562 c h 460 | 425.594 448.871 m 437.539 489.984 l 503.84 393.27 l h 461 | 425.594 448.871 m f 462 | Q q 463 | 421.305 360.359 136.695 106.641 re W n 464 | 0.545098 0.235294 0.498039 rg 465 | 493.445 466.285 m 493.312 466.285 493.176 466.27 493.043 466.246 c 493.039 466 | 466.246 493.039 466.246 493.039 466.246 c 493.008 466.238 492.984 466.23 467 | 492.957 466.223 c 492.953 466.223 492.949 466.223 492.945 466.219 c 492.578 468 | 466.125 492.262 465.938 492.016 465.68 c 432.91 406.574 l 425.246 448.43 469 | l 425.051 449.508 424.012 450.223 422.934 450.027 c 421.852 449.828 421.141 470 | 448.789 421.336 447.715 c 429.684 402.133 l 429.816 401.406 430.34 400.816 471 | 431.047 400.594 c 431.75 400.375 432.52 400.562 433.043 401.086 c 492.316 472 | 460.359 l 509.418 386.629 l 460.168 374.211 l 459.258 373.984 458.633 373.152 473 | 458.668 372.215 c 458.699 371.277 459.387 370.492 460.305 370.328 c 516.746 474 | 360.391 l 517.402 360.273 518.074 360.5 518.531 360.98 c 518.992 361.465 475 | 519.176 362.148 519.027 362.797 c 514.168 383.727 l 555.734 394.207 l 556.41 476 | 394.375 556.945 394.891 557.148 395.559 c 557.348 396.223 557.188 396.949 477 | 556.719 397.469 c 494.941 465.602 l 494.828 465.734 494.699 465.848 494.555 478 | 465.941 c 494.555 465.945 494.555 465.945 494.555 465.945 c 494.551 465.945 479 | 494.551 465.945 494.551 465.945 c 494.547 465.949 l 494.516 465.969 494.492 480 | 465.984 494.461 466.004 c 494.457 466.004 494.457 466.004 494.457 466.008 481 | c 494.453 466.008 l 494.152 466.188 493.805 466.285 493.445 466.285 c h 482 | 513.273 387.602 m 497.105 457.297 l 551.551 397.25 l h 483 | 470.152 372.629 m 510.32 382.754 l 514.477 364.828 l h 484 | 470.152 372.629 m f 485 | Q q 486 | 0.545098 0.235294 0.498039 rg 487 | 496.82 507.691 m 496.703 507.691 496.578 507.68 496.457 507.656 c 436.441 488 | 496.527 l 435.363 496.328 434.652 495.289 434.848 494.211 c 435.051 493.133 489 | 436.09 492.418 437.164 492.621 c 494.629 503.273 l 491.484 464.715 l 458.781 490 | 372.953 l 458.41 371.918 458.953 370.781 459.984 370.414 c 461.02 370.043 491 | 462.156 370.582 462.523 371.617 c 495.316 463.633 l 495.371 463.793 495.41 492 | 463.961 495.422 464.137 c 498.801 505.539 l 498.852 506.156 498.613 506.762 493 | 498.152 507.176 c 497.785 507.508 497.309 507.691 496.82 507.691 c h 494 | 496.82 507.691 m f 495 | 496.82 507.691 m 496.504 507.691 496.184 507.617 495.887 507.457 c 494.914 496 | 506.938 494.551 505.734 495.066 504.766 c 553.492 395.195 l 554.012 394.227 497 | 555.215 393.859 556.184 394.375 c 557.152 394.895 557.516 396.098 557.004 498 | 397.066 c 498.574 506.637 l 498.219 507.309 497.531 507.691 496.82 507.691 499 | c h 500 | 496.82 507.691 m f 501 | Q Q 502 | showpage 503 | %%Trailer 504 | end 505 | %%EOF 506 | -------------------------------------------------------------------------------- /logos/eps/logo-white.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%Creator: cairo 1.16.0 (https://cairographics.org) 3 | %%CreationDate: Sun May 7 17:54:44 2023 4 | %%Pages: 1 5 | %%DocumentData: Clean7Bit 6 | %%LanguageLevel: 2 7 | %%BoundingBox: 0 0 1000 1000 8 | %%EndComments 9 | %%BeginProlog 10 | 50 dict begin 11 | /q { gsave } bind def 12 | /Q { grestore } bind def 13 | /cm { 6 array astore concat } bind def 14 | /w { setlinewidth } bind def 15 | /J { setlinecap } bind def 16 | /j { setlinejoin } bind def 17 | /M { setmiterlimit } bind def 18 | /d { setdash } bind def 19 | /m { moveto } bind def 20 | /l { lineto } bind def 21 | /c { curveto } bind def 22 | /h { closepath } bind def 23 | /re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto 24 | 0 exch rlineto 0 rlineto closepath } bind def 25 | /S { stroke } bind def 26 | /f { fill } bind def 27 | /f* { eofill } bind def 28 | /n { newpath } bind def 29 | /W { clip } bind def 30 | /W* { eoclip } bind def 31 | /BT { } bind def 32 | /ET { } bind def 33 | /BDC { mark 3 1 roll /BDC pdfmark } bind def 34 | /EMC { mark /EMC pdfmark } bind def 35 | /cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def 36 | /Tj { show currentpoint cairo_store_point } bind def 37 | /TJ { 38 | { 39 | dup 40 | type /stringtype eq 41 | { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse 42 | } forall 43 | currentpoint cairo_store_point 44 | } bind def 45 | /cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore 46 | cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def 47 | /Tf { pop /cairo_font exch def /cairo_font_matrix where 48 | { pop cairo_selectfont } if } bind def 49 | /Td { matrix translate cairo_font_matrix matrix concatmatrix dup 50 | /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point 51 | /cairo_font where { pop cairo_selectfont } if } bind def 52 | /Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def 53 | cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def 54 | /g { setgray } bind def 55 | /rg { setrgbcolor } bind def 56 | /d1 { setcachedevice } bind def 57 | /cairo_data_source { 58 | CairoDataIndex CairoData length lt 59 | { CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def } 60 | { () } ifelse 61 | } def 62 | /cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def 63 | /cairo_image { image cairo_flush_ascii85_file } def 64 | /cairo_imagemask { imagemask cairo_flush_ascii85_file } def 65 | %%EndProlog 66 | %%BeginSetup 67 | %%EndSetup 68 | %%Page: 1 1 69 | %%BeginPageSetup 70 | %%PageBoundingBox: 0 0 1000 1000 71 | %%EndPageSetup 72 | q 0 0 1000 1000 rectclip 73 | 1 0 0 -1 0 1000 cm q 74 | 0 g 75 | 0 0 1000 1000 rectfill 76 | 1 g 77 | 850 515.555 m 850 415.445 805.73 325.535 735.805 264.195 c 674.461 194.273 78 | 584.551 150 484.445 150 c 300.035 150 150 300.035 150 484.445 c 150 584.531 79 | 194.254 674.426 264.156 735.77 c 325.5 805.715 415.426 850 515.555 850 80 | c 516.211 850 516.848 849.953 517.5 849.953 c 518.152 849.953 518.789 850 81 | 519.445 850 c 702.004 850 850 702.004 850 519.445 c 850 518.789 849.953 82 | 518.152 849.953 517.5 c 849.953 516.848 850 516.211 850 515.555 c h 83 | 280.883 681.773 m 247.867 635.281 228.23 578.648 227.824 517.5 c 228.875 84 | 357.969 357.965 228.875 517.5 227.824 c 578.648 228.23 635.285 247.867 85 | 681.773 280.883 c 735.074 332.57 768.336 404.785 768.336 484.445 c 768.336 86 | 640.98 640.98 768.336 484.445 768.336 c 404.785 768.336 332.57 735.074 87 | 280.883 681.773 c h 88 | 157.777 484.445 m 157.777 304.32 304.32 157.777 484.445 157.777 c 561.117 89 | 157.777 631.645 184.395 687.445 228.789 c 637.176 198.551 578.371 181.109 90 | 515.555 181.109 c 331.145 181.109 181.109 331.145 181.109 515.555 c 181.109 91 | 578.355 198.539 637.145 228.766 687.406 c 184.387 631.625 157.777 561.102 92 | 157.777 484.445 c h 93 | 515.555 803.336 m 437.156 803.336 366.012 771.793 314.07 720.77 c 362.09 94 | 755.531 420.961 776.109 484.445 776.109 c 645.273 776.109 776.109 645.273 95 | 776.109 484.445 c 776.109 420.965 755.531 362.094 720.77 314.07 c 771.793 96 | 366.012 803.332 437.156 803.336 515.555 c 803.336 674.238 674.238 803.336 97 | 515.555 803.336 c h 98 | 515.555 803.336 m f 99 | Q q 100 | 290 528.344 420 60.027 re W n 101 | 1 g 102 | 295.359 574.75 m 290.012 574.75 l 290.012 528.344 l 295.359 528.344 l 295.359 103 | 540.988 l 295.031 548.484 l 295.227 548.484 l 296.879 546.703 298.652 545.223 104 | 300.547 544.051 c 302.43 542.879 304.613 542.293 307.09 542.293 c 310.871 105 | 542.293 313.641 543.363 315.406 545.512 c 317.16 547.664 318.039 550.852 106 | 318.039 555.066 c 318.039 574.75 l 312.695 574.75 l 312.695 555.781 l 312.695 107 | 552.785 312.129 550.555 311 549.094 c 309.871 547.645 308 546.918 305.395 108 | 546.918 c 304.438 546.918 303.562 547.035 302.762 547.27 c 301.953 547.516 109 | 301.16 547.875 300.375 548.352 c 299.594 548.832 298.789 549.426 297.965 110 | 550.137 c 297.141 550.859 296.27 551.699 295.359 552.652 c h 111 | 331.598 588.371 m 330.031 588.371 328.641 588.152 327.426 587.719 c 328.531 112 | 583.484 l 328.969 583.613 329.434 583.723 329.926 583.809 c 330.43 583.895 113 | 330.922 583.938 331.398 583.938 c 333.617 583.938 335.418 583.301 336.809 114 | 582.023 c 338.199 580.738 339.285 579.117 340.07 577.16 c 341.047 574.812 115 | l 326.25 543.074 l 331.66 543.074 l 339.418 560.605 l 340.027 561.996 340.664 116 | 563.496 341.332 565.102 c 342.012 566.711 342.676 568.273 343.328 569.797 117 | c 343.59 569.797 l 344.152 568.273 344.727 566.719 345.309 565.129 c 345.898 118 | 563.547 346.457 562.039 346.977 560.605 c 353.887 543.074 l 358.969 543.074 119 | l 345.023 577.355 l 344.414 578.922 343.719 580.375 342.938 581.723 c 342.156 120 | 583.07 341.219 584.234 340.133 585.215 c 339.047 586.191 337.797 586.957 121 | 336.379 587.523 c 334.973 588.09 333.379 588.371 331.598 588.371 c h 122 | 373.57 588.109 m 368.227 588.109 l 368.227 543.074 l 372.656 543.074 l 123 | 373.113 547.113 l 373.309 547.113 l 374.785 545.723 376.488 544.57 378.418 124 | 543.66 c 380.355 542.746 382.305 542.293 384.258 542.293 c 386.387 542.293 125 | 388.266 542.668 389.891 543.426 c 391.523 544.191 392.895 545.277 393.996 126 | 546.684 c 395.109 548.102 395.941 549.797 396.5 551.77 c 397.074 553.75 127 | 397.359 555.977 397.359 558.453 c 397.359 561.148 396.965 563.547 396.172 128 | 565.652 c 395.398 567.762 394.348 569.559 393.02 571.035 c 391.699 572.512 129 | 390.168 573.629 388.43 574.383 c 386.691 575.148 384.867 575.531 382.957 130 | 575.531 c 381.477 575.531 379.879 575.172 378.16 574.449 c 376.445 573.738 131 | 374.895 572.73 373.504 571.426 c 373.309 571.426 l 373.57 577.422 l h 132 | 382.043 571.035 m 384.91 571.035 387.258 569.926 389.082 567.711 c 390.906 133 | 565.492 391.82 562.41 391.82 558.453 c 391.82 556.719 391.641 555.133 391.285 134 | 553.695 c 390.945 552.262 390.414 551.035 389.695 550.008 c 388.98 548.992 135 | 388.062 548.199 386.93 547.637 c 385.801 547.07 384.453 546.789 382.891 136 | 546.789 c 381.5 546.789 380.008 547.168 378.418 547.922 c 376.836 548.688 137 | 375.223 549.895 373.57 551.547 c 373.57 567.32 l 375.09 568.664 376.613 138 | 569.621 378.133 570.188 c 379.652 570.75 380.957 571.035 382.043 571.035 139 | c h 140 | 422.766 575.531 m 420.375 575.531 418.152 575.16 416.09 574.422 c 414.023 141 | 573.684 412.219 572.598 410.68 571.164 c 409.133 569.73 407.918 567.98 142 | 407.031 565.91 c 406.137 563.852 405.688 561.496 405.688 558.848 c 405.688 143 | 556.281 406.137 553.98 407.031 551.938 c 407.918 549.895 409.113 548.156 144 | 410.617 546.723 c 412.109 545.289 413.828 544.191 415.766 543.426 c 417.695 145 | 542.668 419.723 542.293 421.852 542.293 c 424.113 542.293 426.145 542.648 146 | 427.953 543.359 c 429.754 544.082 431.273 545.094 432.516 546.398 c 433.75 147 | 547.699 434.691 549.266 435.344 551.09 c 435.996 552.914 436.32 554.934 148 | 436.32 557.152 c 436.32 557.758 436.301 558.348 436.258 558.91 c 436.215 149 | 559.477 436.148 559.977 436.062 560.41 c 411.098 560.41 l 411.445 564.016 150 | 412.762 566.719 415.047 568.52 c 417.324 570.324 420.113 571.23 423.418 151 | 571.23 c 425.328 571.23 427.059 570.957 428.605 570.41 c 430.145 569.871 152 | 431.629 569.145 433.062 568.23 c 435.02 571.75 l 433.453 572.793 431.664 153 | 573.684 429.648 574.422 c 427.625 575.16 425.328 575.531 422.766 575.531 154 | c h 155 | 421.984 546.527 m 420.68 546.527 419.434 546.746 418.242 547.18 c 417.043 156 | 547.613 415.965 548.23 415.008 549.031 c 414.055 549.84 413.25 550.852 157 | 412.598 552.066 c 411.945 553.285 411.488 554.676 411.23 556.238 c 431.434 158 | 556.238 l 431.215 552.98 430.273 550.547 428.605 548.938 c 426.93 547.332 159 | 424.719 546.527 421.984 546.527 c h 160 | 455.223 574.75 m 449.879 574.75 l 449.879 543.074 l 454.312 543.074 l 454.766 161 | 550.57 l 454.961 550.57 l 456.613 548.004 458.648 545.984 461.062 544.508 162 | c 463.469 543.031 466.152 542.293 469.105 542.293 c 470.281 542.293 471.367 163 | 542.387 472.363 542.578 c 473.363 542.777 474.363 543.117 475.363 543.594 164 | c 474.125 548.223 l 472.996 547.832 472.051 547.547 471.297 547.375 c 470.531 165 | 547.199 469.52 547.113 468.258 547.113 c 465.867 547.113 463.578 547.797 166 | 461.391 549.16 c 459.191 550.535 457.137 552.871 455.223 556.172 c h 167 | 513.035 555.262 m 485.008 555.262 l 485.008 551.219 l 513.035 551.219 l 168 | h 169 | 529.98 574.75 m 524.637 574.75 l 524.637 543.074 l 529.07 543.074 l 529.523 170 | 548.484 l 529.785 548.484 l 531.438 546.703 533.219 545.223 535.129 544.051 171 | c 537.043 542.879 539.238 542.293 541.715 542.293 c 545.492 542.293 548.262 172 | 543.363 550.016 545.512 c 551.781 547.664 552.664 550.852 552.664 555.066 173 | c 552.664 574.75 l 547.32 574.75 l 547.32 555.781 l 547.32 552.785 546.754 174 | 550.555 545.625 549.094 c 544.492 547.645 542.625 546.918 540.02 546.918 175 | c 539.062 546.918 538.18 547.035 537.371 547.27 c 536.574 547.516 535.781 176 | 547.875 535 548.352 c 534.219 548.832 533.414 549.426 532.59 550.137 c 177 | 531.762 550.859 530.895 551.699 529.98 552.652 c h 178 | 577.223 575.531 m 575.137 575.531 573.148 575.16 571.266 574.422 c 569.371 179 | 573.684 567.707 572.605 566.273 571.191 c 564.84 569.781 563.699 568.043 180 | 562.855 565.977 c 562.004 563.918 561.578 561.582 561.578 558.977 c 561.578 181 | 556.324 562.004 553.965 562.855 551.898 c 563.699 549.84 564.84 548.09 182 | 566.273 546.656 c 567.707 545.223 569.371 544.137 571.266 543.398 c 573.148 183 | 542.66 575.137 542.293 577.223 542.293 c 579.309 542.293 581.297 542.66 184 | 583.191 543.398 c 585.078 544.137 586.738 545.223 588.172 546.656 c 589.605 185 | 548.09 590.746 549.84 591.602 551.898 c 592.441 553.965 592.863 556.324 186 | 592.863 558.977 c 592.863 561.582 592.441 563.918 591.602 565.977 c 590.746 187 | 568.043 589.605 569.781 588.172 571.191 c 586.738 572.605 585.078 573.684 188 | 583.191 574.422 c 581.297 575.16 579.309 575.531 577.223 575.531 c h 189 | 577.223 571.098 m 578.742 571.098 580.125 570.805 581.367 570.211 c 582.602 190 | 569.629 583.664 568.805 584.559 567.734 c 585.445 566.676 586.129 565.406 191 | 586.605 563.93 c 587.086 562.453 587.324 560.801 587.324 558.977 c 587.324 192 | 557.152 587.086 555.488 586.605 553.984 c 586.129 552.488 585.445 551.199 193 | 584.559 550.113 c 583.664 549.027 582.602 548.188 581.367 547.598 c 580.125 194 | 547.016 578.742 546.723 577.223 546.723 c 575.699 546.723 574.324 547.016 195 | 573.09 547.598 c 571.848 548.188 570.781 549.027 569.895 550.113 c 569 196 | 551.199 568.312 552.488 567.836 553.984 c 567.359 555.488 567.121 557.152 197 | 567.121 558.977 c 567.121 560.801 567.359 562.453 567.836 563.93 c 568.312 198 | 565.406 569 566.676 569.895 567.734 c 570.781 568.805 571.848 569.629 573.09 199 | 570.211 c 574.324 570.805 575.699 571.098 577.223 571.098 c h 200 | 616.98 575.531 m 613.852 575.531 610.961 575.039 608.312 574.059 c 605.66 201 | 573.086 603.359 571.926 601.402 570.578 c 603.879 567.059 l 605.703 568.363 202 | 607.715 569.406 609.914 570.188 c 612.105 570.969 614.676 571.359 617.633 203 | 571.359 c 620.324 571.359 622.336 570.867 623.668 569.887 c 624.988 568.914 204 | 625.648 567.754 625.648 566.406 c 625.648 565.797 625.539 565.234 625.32 205 | 564.711 c 625.105 564.191 624.641 563.691 623.926 563.211 c 623.207 562.734 206 | 622.195 562.277 620.891 561.844 c 619.586 561.41 617.871 560.977 615.742 207 | 560.539 c 611.613 559.672 608.52 558.508 606.461 557.047 c 604.391 555.598 208 | 603.359 553.676 603.359 551.285 c 603.359 550.023 603.641 548.84 604.203 209 | 547.727 c 604.77 546.625 605.609 545.668 606.719 544.859 c 607.824 544.059 210 | 609.191 543.43 610.828 542.969 c 612.453 542.516 614.352 542.293 616.523 211 | 542.293 c 618.957 542.293 621.305 542.691 623.562 543.492 c 625.82 544.297 212 | 627.734 545.246 629.297 546.332 c 626.691 549.785 l 625.215 548.785 623.586 213 | 547.984 621.801 547.375 c 620.02 546.766 618.109 546.461 616.066 546.461 214 | c 613.375 546.461 611.484 546.918 610.398 547.832 c 609.309 548.742 608.766 215 | 549.809 608.766 551.023 c 608.766 552.414 609.484 553.465 610.918 554.18 216 | c 612.352 554.902 614.699 555.609 617.957 556.305 c 620.609 556.867 622.781 217 | 557.465 624.477 558.09 c 626.168 558.723 627.508 559.434 628.488 560.215 218 | c 629.465 560.996 630.137 561.867 630.512 562.82 c 630.875 563.777 631.059 219 | 564.863 631.059 566.082 c 631.059 567.383 630.754 568.602 630.145 569.73 220 | c 629.535 570.859 628.633 571.859 627.434 572.73 c 626.242 573.598 624.77 221 | 574.285 623.016 574.789 c 621.25 575.285 619.238 575.531 616.98 575.531 222 | c h 223 | 661.559 575.531 m 659.258 575.531 657.324 575.215 655.762 574.578 c 654.195 224 | 573.953 652.934 573.062 651.98 571.906 c 651.023 570.762 650.336 569.383 225 | 649.922 567.773 c 649.512 566.168 649.309 564.387 649.309 562.43 c 649.309 226 | 547.441 l 640.379 547.441 l 640.379 543.398 l 649.504 543.074 l 650.219 227 | 532.906 l 654.652 532.906 l 654.652 543.074 l 670.23 543.074 l 670.23 547.441 228 | l 654.652 547.441 l 654.652 562.496 l 654.652 563.93 654.781 565.176 655.043 229 | 566.238 c 655.305 567.305 655.738 568.211 656.348 568.949 c 656.953 569.688 230 | 657.781 570.238 658.824 570.605 c 659.867 570.977 661.148 571.164 662.668 231 | 571.164 c 664.188 571.164 665.559 571.035 666.773 570.773 c 667.992 570.512 232 | 669.164 570.164 670.293 569.73 c 671.469 573.641 l 670.035 574.164 668.52 233 | 574.609 666.93 574.984 c 665.348 575.348 663.559 575.531 661.559 575.531 234 | c h 235 | 689.848 574.75 m 684.504 574.75 l 684.504 543.074 l 688.934 543.074 l 689.391 236 | 550.57 l 689.586 550.57 l 691.238 548.004 693.266 545.984 695.676 544.508 237 | c 698.09 543.031 700.773 542.293 703.73 542.293 c 704.902 542.293 705.988 238 | 542.387 706.988 542.578 c 707.988 542.777 708.988 543.117 709.988 543.594 239 | c 708.75 548.223 l 707.617 547.832 706.672 547.547 705.906 547.375 c 705.152 240 | 547.199 704.145 547.113 702.883 547.113 c 700.492 547.113 698.199 547.797 241 | 696 549.16 c 693.809 550.535 691.758 552.871 689.848 556.172 c h 242 | 689.848 574.75 m f 243 | Q q 244 | 290 602.543 420 37.094 re W n 245 | 1 g 246 | 304.84 616.828 m 307.051 617.09 308.773 617.848 310.012 619.094 c 311.246 247 | 620.348 311.867 621.801 311.867 623.457 c 311.867 625.484 310.965 627.148 248 | 309.164 628.445 c 307.359 629.754 304.973 630.445 302 630.523 c 290.238 249 | 630.523 l 290 629.262 l 293.355 628.035 l 293.355 606.922 l 290.555 606.766 250 | l 290.594 604.871 l 294.961 604.66 298.395 604.555 300.895 604.555 c 303.84 251 | 604.555 306.176 605.141 307.902 606.309 c 309.625 607.48 310.484 609.082 252 | 310.484 611.105 c 310.484 612.555 310.012 613.816 309.062 614.895 c 308.117 253 | 615.973 306.707 616.617 304.84 616.828 c h 254 | 302.434 606.883 m 297.027 607.477 l 297.027 616 l 299 616 l 301.527 616 255 | 303.395 615.551 304.605 614.656 c 305.812 613.762 306.418 612.672 306.418 256 | 611.383 c 306.418 610.328 306.047 609.363 305.297 608.477 c 304.547 607.598 257 | 303.59 607.066 302.434 606.883 c h 258 | 297.027 627.801 m 300.973 628.117 l 301.84 628.156 l 303.684 628.156 305.105 259 | 627.707 306.102 626.812 c 307.102 625.918 307.602 624.828 307.602 623.539 260 | c 307.602 622.09 306.996 620.84 305.789 619.789 c 304.578 618.734 303.051 261 | 618.184 301.211 618.133 c 297.027 618.133 l h 262 | 334.566 612.25 m 334.672 614.199 334.434 616.328 333.855 618.645 c 331.723 263 | 618.645 l 331.289 614.305 l 329.16 615.488 327.355 617.051 325.883 619 264 | c 325.883 627.918 l 327.805 628.051 329.16 628.285 329.949 628.629 c 329.711 265 | 630.523 l 319.688 630.523 l 319.488 629.223 l 322.371 628.156 l 322.371 266 | 614.262 l 319.41 614.5 l 318.938 612.645 l 320.699 611.883 322.488 611.473 267 | 324.305 611.422 c 325.883 612.805 l 325.883 616.395 l 330.027 611.973 l 268 | 330.789 611.66 331.488 611.5 332.117 611.5 c 332.961 611.5 333.777 611.75 269 | 334.566 612.25 c h 270 | 347.043 607.91 m 345.754 607.355 344.742 606.566 344.004 605.543 c 344.691 271 | 604.121 345.492 603.121 346.414 602.543 c 347.598 603.016 348.582 603.805 272 | 349.371 604.91 c 348.953 606.121 348.176 607.121 347.043 607.91 c h 273 | 348.625 612.805 m 348.625 627.996 l 349.938 628.156 350.887 628.367 351.465 274 | 628.629 c 351.227 630.523 l 342.309 630.523 l 342.113 629.223 l 342.742 275 | 628.906 343.742 628.535 345.109 628.117 c 345.109 614.262 l 342.152 614.5 276 | l 341.676 612.645 l 343.441 611.883 345.23 611.473 347.043 611.422 c h 277 | 377.875 618.406 m 377.875 627.996 l 379.215 628.18 380.137 628.391 380.637 278 | 628.629 c 380.402 630.523 l 372.309 630.523 l 372.113 629.223 l 374.363 279 | 628.352 l 374.363 618.84 l 374.363 616 373.52 614.578 371.836 614.578 c 280 | 370.312 614.578 368.258 615.566 365.68 617.539 c 365.68 628.035 l 366.785 281 | 628.168 367.641 628.367 368.246 628.629 c 368.008 630.523 l 359.562 630.523 282 | l 359.367 629.223 l 362.168 628.195 l 362.168 614.262 l 359.207 614.5 l 283 | 358.734 612.645 l 360.496 611.883 362.285 611.473 364.102 611.422 c 365.68 284 | 612.805 l 365.68 615.406 l 369.625 612.75 372.309 611.422 373.73 611.422 285 | c 374.492 611.555 375.266 611.941 376.043 612.582 c 376.816 613.23 377.316 286 | 613.895 377.543 614.578 c 377.766 615.262 377.875 616.539 377.875 618.406 287 | c h 288 | 392.445 626.734 m 394.367 626.762 396.703 627.043 399.453 627.578 c 402.199 289 | 628.121 404.441 628.734 406.18 629.418 c 406.375 631.113 l 406.375 633.508 290 | 405.27 635.531 403.062 637.176 c 400.852 638.82 398.234 639.641 395.207 291 | 639.641 c 393.156 639.641 391.414 639.191 389.984 638.297 c 388.547 637.402 292 | 387.828 636.18 387.828 634.629 c 387.867 634.035 l 392.562 629.695 l 389.445 293 | 629.535 l 388.734 627.68 l 390.023 626.156 391.418 624.852 392.918 623.773 294 | c 389.895 622.617 388.379 620.59 388.379 617.695 c 388.379 615.75 389.168 295 | 614.137 390.75 612.859 c 392.328 611.586 394.273 610.949 396.59 610.949 296 | c 398.641 610.949 400.391 611.461 401.84 612.488 c 402.785 610.699 404.352 297 | 609.582 406.535 609.133 c 407.285 613.238 l 405.918 613.238 404.668 613.5 298 | 403.535 614.027 c 404.352 615.133 404.758 616.383 404.758 617.777 c 404.758 299 | 619.75 403.965 621.355 402.375 622.59 c 400.781 623.828 398.852 624.445 300 | 396.59 624.445 c 395.129 624.328 l 393.973 625.223 393.078 626.023 392.445 301 | 626.734 c h 302 | 393.312 613.828 m 392.445 614.855 392.012 616.066 392.012 617.461 c 392.012 303 | 618.934 392.418 620.129 393.234 621.051 c 394.051 621.973 395.168 622.434 304 | 396.59 622.434 c 397.406 622.434 398.285 622.262 399.234 621.918 c 400.496 305 | 620.895 401.129 619.605 401.129 618.051 c 401.129 616.684 400.652 615.512 306 | 399.707 614.539 c 398.758 613.566 397.602 613.078 396.234 613.078 c 395.285 307 | 613.078 394.312 613.328 393.312 613.828 c h 308 | 395.445 636.441 m 397.18 636.441 398.871 636.082 400.52 635.363 c 402.16 309 | 634.637 403.336 633.613 404.047 632.301 c 402.363 631.301 399.324 630.512 310 | 394.93 629.93 c 392.352 631.695 391.062 633.141 391.062 634.273 c 391.062 311 | 634.93 391.473 635.457 392.289 635.852 c 393.102 636.246 394.156 636.441 312 | 395.445 636.441 c h 313 | 432.086 604.871 m 443.094 604.555 l 445.855 604.555 448.105 605.324 449.844 314 | 606.859 c 451.578 608.402 452.449 610.355 452.449 612.723 c 452.449 614.988 315 | 451.652 616.887 450.062 618.422 c 448.469 619.965 446.41 620.773 443.883 316 | 620.855 c 438.516 620.855 l 438.516 628.117 l 443.133 628.668 l 443.094 317 | 630.523 l 431.73 630.523 l 431.492 629.262 l 434.848 628.035 l 434.848 318 | 606.922 l 432.043 606.766 l h 319 | 442.543 618.566 m 444.516 618.566 445.988 617.984 446.961 616.828 c 447.938 320 | 615.672 448.422 614.262 448.422 612.605 c 448.422 611.344 448.16 610.191 321 | 447.633 609.148 c 447.105 608.113 446.344 607.355 445.344 606.883 c 438.516 322 | 607.477 l 438.516 618.211 l 440.094 618.445 441.438 618.566 442.543 618.566 323 | c h 324 | 476.262 623.695 m 478.391 624.012 l 478.156 626.641 477.801 628.812 477.328 325 | 630.523 c 461.582 630.523 l 460.871 627.996 l 470.027 617.695 l 472.262 326 | 615.039 473.379 612.805 473.379 610.988 c 473.379 609.91 473.039 608.953 327 | 472.355 608.121 c 471.672 607.297 470.633 606.883 469.238 606.883 c 467.949 328 | 606.883 466.473 607.133 464.816 607.633 c 464.105 612.566 l 461.855 612.527 329 | l 461.621 611.105 461.5 609.684 461.5 608.266 c 461.539 606.566 l 464.277 330 | 604.91 466.988 604.082 469.672 604.082 c 471.777 604.082 473.559 604.746 331 | 475.016 606.07 c 476.477 607.402 477.207 609.066 477.207 611.066 c 477.207 332 | 612.223 476.918 613.375 476.34 614.516 c 475.762 615.664 474.34 617.527 333 | 472.078 620.105 c 465.25 627.406 l 465.367 627.762 l 475 627.207 l h 334 | 488.305 604.871 m 499.316 604.555 l 502.078 604.555 504.328 605.324 506.066 335 | 606.859 c 507.801 608.402 508.672 610.355 508.672 612.723 c 508.672 614.988 336 | 507.871 616.887 506.277 618.422 c 504.691 619.965 502.633 620.773 500.105 337 | 620.855 c 494.738 620.855 l 494.738 628.117 l 499.355 628.668 l 499.316 338 | 630.523 l 487.949 630.523 l 487.715 629.262 l 491.07 628.035 l 491.07 606.922 339 | l 488.266 606.766 l h 340 | 498.766 618.566 m 500.738 618.566 502.211 617.984 503.184 616.828 c 504.156 341 | 615.672 504.645 614.262 504.645 612.605 c 504.645 611.344 504.383 610.191 342 | 503.855 609.148 c 503.328 608.113 502.566 607.355 501.566 606.883 c 494.738 343 | 607.477 l 494.738 618.211 l 496.316 618.445 497.66 618.566 498.766 618.566 344 | c h 345 | 540.02 627.84 m 540.785 627.84 541.996 627.535 543.652 626.934 c 544.324 346 | 628.746 l 539.191 631.113 l 538.297 631.168 537.41 630.832 536.523 630.105 347 | c 535.645 629.383 535.207 628.602 535.207 627.762 c 535.207 615.012 l 532.758 348 | 615.051 l 532.484 613.16 l 533.324 612.789 534.258 612.488 535.285 612.25 349 | c 536.863 607.277 l 538.719 607.277 l 538.719 612.055 l 544.242 612.055 350 | l 544.402 613.199 l 542.547 615.094 l 538.719 615.094 l 538.719 625.707 351 | l 538.719 626.523 538.812 627.082 538.996 627.383 c 539.18 627.688 539.52 352 | 627.84 540.02 627.84 c h 353 | 551.91 621.211 m 551.91 618.262 552.742 615.867 554.41 614.027 c 556.082 354 | 612.184 558.223 611.266 560.828 611.266 c 563.406 611.266 565.496 612.211 355 | 567.102 614.105 c 568.707 616 569.508 618.445 569.508 621.445 c 569.508 356 | 624.418 568.719 626.805 567.141 628.605 c 565.562 630.41 563.484 631.312 357 | 560.906 631.312 c 558.301 631.312 556.148 630.363 554.449 628.473 c 552.754 358 | 626.578 551.91 624.156 551.91 621.211 c h 359 | 563.234 628.473 m 564.945 627.34 565.801 625.145 565.801 621.879 c 565.801 360 | 619.539 565.367 617.59 564.496 616.039 c 563.629 614.488 562.301 613.711 361 | 560.512 613.711 c 559.328 613.711 558.328 614 557.512 614.578 c 556.277 362 | 616.051 555.656 618.117 555.656 620.773 c 555.656 623.039 556.137 624.934 363 | 557.094 626.457 c 558.059 627.984 559.473 628.746 561.34 628.746 c 561.945 364 | 628.746 562.578 628.656 563.234 628.473 c h 365 | 620.711 604.871 m 620.949 606.133 l 617.594 607.355 l 617.594 630.523 l 366 | 613.527 630.957 l 599.52 608.539 l 600.23 614.027 l 600.23 628.273 l 603.742 367 | 628.668 l 603.703 630.523 l 594.152 630.523 l 593.914 629.262 l 597.27 368 | 628.035 l 597.27 607.043 l 594.703 606.727 l 594.742 604.871 l 601.77 604.871 369 | l 615.344 626.734 l 614.594 621.367 l 614.594 607.16 l 610.766 606.727 370 | l 610.805 604.871 l h 371 | 627.43 621.211 m 627.43 618.262 628.266 615.867 629.938 614.027 c 631.605 372 | 612.184 633.742 611.266 636.348 611.266 c 638.926 611.266 641.02 612.211 373 | 642.621 614.105 c 644.227 616 645.031 618.445 645.031 621.445 c 645.031 374 | 624.418 644.242 626.805 642.664 628.605 c 641.082 630.41 639.004 631.312 375 | 636.426 631.312 c 633.82 631.312 631.672 630.363 629.977 628.473 c 628.277 376 | 626.578 627.43 624.156 627.43 621.211 c h 377 | 638.754 628.473 m 640.465 627.34 641.32 625.145 641.32 621.879 c 641.32 378 | 619.539 640.887 617.59 640.02 616.039 c 639.148 614.488 637.82 613.711 379 | 636.031 613.711 c 634.848 613.711 633.848 614 633.031 614.578 c 631.797 380 | 616.051 631.18 618.117 631.18 620.773 c 631.18 623.039 631.66 624.934 632.621 381 | 626.457 c 633.582 627.984 634.992 628.746 636.859 628.746 c 637.465 628.746 382 | 638.098 628.656 638.754 628.473 c h 383 | 656.758 615.922 m 656.758 616.762 657.102 617.434 657.785 617.934 c 658.469 384 | 618.434 659.523 619 660.941 619.629 c 663.27 620.695 l 665.535 621.879 385 | 666.664 623.512 666.664 625.59 c 666.664 627.273 666.035 628.648 664.77 386 | 629.711 c 663.508 630.777 661.875 631.312 659.879 631.312 c 657.691 631.312 387 | 655.363 630.629 652.891 629.262 c 654.352 625.789 l 656.824 627.473 659.43 388 | 628.496 662.168 628.867 c 662.875 628.234 663.23 627.473 663.23 626.578 389 | c 663.23 625.684 662.902 624.957 662.246 624.406 c 661.586 623.852 660.293 390 | 623.148 658.363 622.289 c 656.426 621.438 655.121 620.609 654.453 619.805 391 | c 653.781 619.004 653.445 618.039 653.445 616.906 c 653.445 615.25 654.148 392 | 613.895 655.559 612.844 c 656.965 611.789 658.758 611.266 660.941 611.266 393 | c 662.785 611.266 664.469 611.66 665.992 612.449 c 666.074 614.367 665.848 394 | 616.066 665.324 617.539 c 663.191 617.539 l 662.914 614.5 l 661.602 613.922 395 | 660.219 613.633 658.773 613.633 c 658.023 613.672 l 657.18 614.199 656.758 396 | 614.949 656.758 615.922 c h 397 | 682.656 627.84 m 683.418 627.84 684.629 627.535 686.289 626.934 c 686.957 398 | 628.746 l 681.828 631.113 l 680.934 631.168 680.047 630.832 679.168 630.105 399 | c 678.285 629.383 677.84 628.602 677.84 627.762 c 677.84 615.012 l 675.395 400 | 615.051 l 675.117 613.16 l 675.961 612.789 676.895 612.488 677.922 612.25 401 | c 679.5 607.277 l 681.355 607.277 l 681.355 612.055 l 686.879 612.055 l 402 | 687.035 613.199 l 685.184 615.094 l 681.355 615.094 l 681.355 625.707 l 403 | 681.355 626.523 681.445 627.082 681.629 627.383 c 681.812 627.688 682.156 404 | 627.84 682.656 627.84 c h 405 | 709.973 612.25 m 710.078 614.199 709.844 616.328 709.266 618.645 c 707.133 406 | 618.645 l 706.699 614.305 l 704.566 615.488 702.766 617.051 701.293 619 407 | c 701.293 627.918 l 703.211 628.051 704.566 628.285 705.355 628.629 c 705.121 408 | 630.523 l 695.098 630.523 l 694.898 629.223 l 697.781 628.156 l 697.781 409 | 614.262 l 694.82 614.5 l 694.348 612.645 l 696.109 611.883 697.898 611.473 410 | 699.715 611.422 c 701.293 612.805 l 701.293 616.395 l 705.438 611.973 l 411 | 706.199 611.66 706.895 611.5 707.527 611.5 c 708.371 611.5 709.184 611.75 412 | 709.973 612.25 c h 413 | 709.973 612.25 m f 414 | Q q 415 | 1 g 416 | 518.855 385.707 m 518.855 390.383 515.062 394.176 510.387 394.176 c 505.707 417 | 394.176 501.918 390.383 501.918 385.707 c 501.918 381.027 505.707 377.238 418 | 510.387 377.238 c 515.062 377.238 518.855 381.027 518.855 385.707 c h 419 | 518.855 385.707 m f 420 | 463.43 425.32 m 463.43 430 459.637 433.789 454.961 433.789 c 450.281 433.789 421 | 446.492 430 446.492 425.32 c 446.492 420.645 450.281 416.852 454.961 416.852 422 | c 459.637 416.852 463.43 420.645 463.43 425.32 c h 423 | 463.43 425.32 m f 424 | 501.914 464.297 m 501.914 468.973 498.121 472.766 493.441 472.766 c 488.766 425 | 472.766 484.973 468.973 484.973 464.297 c 484.973 459.621 488.766 455.828 426 | 493.441 455.828 c 498.121 455.828 501.914 459.621 501.914 464.297 c h 427 | 501.914 464.297 m f 428 | 445.273 494.574 m 445.273 499.254 441.48 503.043 436.805 503.043 c 432.125 429 | 503.043 428.336 499.254 428.336 494.574 c 428.336 489.898 432.125 486.105 430 | 436.805 486.105 c 441.48 486.105 445.273 489.898 445.273 494.574 c h 431 | 445.273 494.574 m f 432 | 563.719 395.859 m 563.719 400.539 559.926 404.332 555.25 404.332 c 550.57 433 | 404.332 546.777 400.539 546.777 395.859 c 546.777 391.184 550.57 387.391 434 | 555.25 387.391 c 559.926 387.391 563.719 391.184 563.719 395.859 c h 435 | 563.719 395.859 m f 436 | Q q 437 | 488 497 18 17.172 re W n 438 | 1 g 439 | 505.289 505.703 m 505.289 510.379 501.5 514.172 496.82 514.172 c 492.145 440 | 514.172 488.352 510.379 488.352 505.703 c 488.352 501.023 492.145 497.234 441 | 496.82 497.234 c 501.5 497.234 505.289 501.023 505.289 505.703 c h 442 | 505.289 505.703 m f 443 | Q q 444 | 421.305 360.359 157.395 136.641 re W n 445 | 1 g 446 | 436.805 496.562 m 436.555 496.562 436.309 496.516 436.082 496.426 c 435.906 447 | 496.355 435.738 496.262 435.586 496.145 c 435.328 495.945 435.117 495.676 448 | 434.977 495.355 c 434.941 495.273 434.914 495.191 434.891 495.109 c 421.383 449 | 448.625 l 421.148 447.809 421.449 446.938 422.141 446.449 c 510.645 383.559 450 | l 511.43 383 512.5 383.086 513.188 383.762 c 513.879 384.434 513.98 385.504 451 | 513.438 386.301 c 443.047 488.984 l 492.508 462.543 l 492.793 462.391 493.117 452 | 462.312 493.441 462.312 c 574 462.312 l 553.52 397.254 l 515.773 363.836 453 | l 514.953 363.109 514.875 361.852 515.605 361.031 c 516.328 360.211 517.586 454 | 360.133 518.406 360.859 c 556.562 394.641 l 556.832 394.883 557.035 395.191 455 | 557.145 395.535 c 578.605 463.699 l 578.793 464.301 578.688 464.961 578.312 456 | 465.469 c 577.938 465.98 577.344 466.281 576.711 466.281 c 493.941 466.281 457 | l 437.781 496.305 l 437.691 496.352 437.598 496.398 437.504 496.434 c 437.387 458 | 496.477 437.262 496.512 437.137 496.531 c 437.027 496.555 436.914 496.562 459 | 436.805 496.562 c h 460 | 425.594 448.871 m 437.539 489.984 l 503.84 393.27 l h 461 | 425.594 448.871 m f 462 | Q q 463 | 421.305 360.359 136.695 106.641 re W n 464 | 1 g 465 | 493.445 466.285 m 493.312 466.285 493.176 466.27 493.043 466.246 c 493.039 466 | 466.246 493.039 466.246 493.039 466.246 c 493.008 466.238 492.984 466.23 467 | 492.957 466.223 c 492.953 466.223 492.949 466.223 492.945 466.219 c 492.578 468 | 466.125 492.262 465.938 492.016 465.68 c 432.91 406.574 l 425.246 448.43 469 | l 425.051 449.508 424.012 450.223 422.934 450.027 c 421.852 449.828 421.141 470 | 448.789 421.336 447.715 c 429.684 402.133 l 429.816 401.406 430.34 400.816 471 | 431.047 400.594 c 431.75 400.375 432.52 400.562 433.043 401.086 c 492.316 472 | 460.359 l 509.418 386.629 l 460.168 374.211 l 459.258 373.984 458.633 373.152 473 | 458.668 372.215 c 458.699 371.277 459.387 370.492 460.305 370.328 c 516.746 474 | 360.391 l 517.402 360.273 518.074 360.5 518.531 360.98 c 518.992 361.465 475 | 519.176 362.148 519.027 362.797 c 514.168 383.727 l 555.734 394.207 l 556.41 476 | 394.375 556.945 394.891 557.148 395.559 c 557.348 396.223 557.188 396.949 477 | 556.719 397.469 c 494.941 465.602 l 494.828 465.734 494.699 465.848 494.555 478 | 465.941 c 494.555 465.945 494.555 465.945 494.555 465.945 c 494.551 465.945 479 | 494.551 465.945 494.551 465.945 c 494.547 465.949 l 494.516 465.969 494.492 480 | 465.984 494.461 466.004 c 494.457 466.004 494.457 466.004 494.457 466.008 481 | c 494.453 466.008 l 494.152 466.188 493.805 466.285 493.445 466.285 c h 482 | 513.273 387.602 m 497.105 457.297 l 551.551 397.25 l h 483 | 470.152 372.629 m 510.32 382.754 l 514.477 364.828 l h 484 | 470.152 372.629 m f 485 | Q q 486 | 1 g 487 | 496.82 507.691 m 496.703 507.691 496.578 507.68 496.457 507.656 c 436.441 488 | 496.527 l 435.363 496.328 434.652 495.289 434.848 494.211 c 435.051 493.133 489 | 436.09 492.418 437.164 492.621 c 494.629 503.273 l 491.484 464.715 l 458.781 490 | 372.953 l 458.41 371.918 458.953 370.781 459.984 370.414 c 461.02 370.043 491 | 462.156 370.582 462.523 371.617 c 495.316 463.633 l 495.371 463.793 495.41 492 | 463.961 495.422 464.137 c 498.801 505.539 l 498.852 506.156 498.613 506.762 493 | 498.152 507.176 c 497.785 507.508 497.309 507.691 496.82 507.691 c h 494 | 496.82 507.691 m f 495 | 496.82 507.691 m 496.504 507.691 496.184 507.617 495.887 507.457 c 494.914 496 | 506.938 494.551 505.734 495.066 504.766 c 553.492 395.195 l 554.012 394.227 497 | 555.215 393.859 556.184 394.375 c 557.152 394.895 557.516 396.098 557.004 498 | 397.066 c 498.574 506.637 l 498.219 507.309 497.531 507.691 496.82 507.691 499 | c h 500 | 496.82 507.691 m f 501 | Q Q 502 | showpage 503 | %%Trailer 504 | end 505 | %%EOF 506 | -------------------------------------------------------------------------------- /logos/pdf/logo-black.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ruulul/hyper-nostr/ed25074065ad54afe7e4ef022298b3abc08e4feb/logos/pdf/logo-black.pdf -------------------------------------------------------------------------------- /logos/pdf/logo-color.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ruulul/hyper-nostr/ed25074065ad54afe7e4ef022298b3abc08e4feb/logos/pdf/logo-color.pdf -------------------------------------------------------------------------------- /logos/pdf/logo-no-background.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ruulul/hyper-nostr/ed25074065ad54afe7e4ef022298b3abc08e4feb/logos/pdf/logo-no-background.pdf -------------------------------------------------------------------------------- /logos/pdf/logo-white.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ruulul/hyper-nostr/ed25074065ad54afe7e4ef022298b3abc08e4feb/logos/pdf/logo-white.pdf -------------------------------------------------------------------------------- /logos/png/logo-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ruulul/hyper-nostr/ed25074065ad54afe7e4ef022298b3abc08e4feb/logos/png/logo-black.png -------------------------------------------------------------------------------- /logos/png/logo-color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ruulul/hyper-nostr/ed25074065ad54afe7e4ef022298b3abc08e4feb/logos/png/logo-color.png -------------------------------------------------------------------------------- /logos/png/logo-no-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ruulul/hyper-nostr/ed25074065ad54afe7e4ef022298b3abc08e4feb/logos/png/logo-no-background.png -------------------------------------------------------------------------------- /logos/png/logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Ruulul/hyper-nostr/ed25074065ad54afe7e4ef022298b3abc08e4feb/logos/png/logo-white.png -------------------------------------------------------------------------------- /logos/svg/logo-black.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /logos/svg/logo-color.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /logos/svg/logo-no-background.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /logos/svg/logo-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /nostr_events.js: -------------------------------------------------------------------------------- 1 | import { validateEvent as nostrValidate, verifySignature as nostrVerify } from 'nostr-tools' 2 | 3 | export const persistentKinds = Object.freeze(['regular', 'delete', 'replaceable', 'parameterized replaceable']) 4 | const replaceableKinds = Object.freeze([0, 3]) 5 | export function getEventType (kind) { 6 | if (kind === 5) return 'delete' 7 | if (replaceableKinds.includes(kind)) return 'replaceable' 8 | if (kind < 10000) return 'regular' 9 | if (kind < 20000) return 'replaceable' 10 | if (kind < 30000) return 'ephemeral' 11 | if (kind < 40000) return 'parameterized replaceable' 12 | } 13 | export function isPersistent (event) { 14 | return persistentKinds.includes(getEventType(event.kind)) 15 | } 16 | 17 | const validateHandlers = { 18 | ids: (event, filter) => filter.some(id => event.id.startsWith(id)), 19 | kinds: (event, filter) => filter.includes(event.kind), 20 | authors: (event, filter) => filter.some(author => event.pubkey.startsWith(author)), 21 | hastag: (event, filter, tag) => event.tags.some(([_tag, key]) => _tag === tag.slice(1) && filter.includes(key)), 22 | since: (event, filter) => event.created_at > filter, 23 | until: (event, filter) => event.created_at < filter 24 | } 25 | export function validateEvent (event, filters) { 26 | return nostrValidate(event) && 27 | nostrVerify(event) && 28 | filters 29 | ? filters.map(filter => 30 | Object.entries(filter) 31 | .filter(([key]) => key.startsWith('#') || (key in validateEvent && key !== 'limit')) 32 | .map(([key, value]) => 33 | key.startsWith('#') 34 | ? validateHandlers.hastag(event, value, key) 35 | : validateHandlers[key](event, value) 36 | ) 37 | .every(Boolean) 38 | ).some(Boolean) 39 | : true 40 | } 41 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hyper-nostr", 3 | "version": "1.8.3", 4 | "description": "a distributed local-first nostr relay that syncs on background based on topic", 5 | "main": "swarm.js", 6 | "type": "module", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/Ruulul/hyper-nostr" 10 | }, 11 | "funding": [ 12 | "https://getalby.com/p/v_142857", 13 | "https://ko-fi.com/v142857" 14 | ], 15 | "bin": { 16 | "hyper-nostr": "server.js", 17 | "hyper-nostr-db-explorer": "db_explore.js" 18 | }, 19 | "scripts": { 20 | "test": "pnpm lint && tape tests/**/*.js", 21 | "lint": "standard --fix", 22 | "start": "pnpm lint && node server.js" 23 | }, 24 | "dependencies": { 25 | "@fastify/websocket": "^8.0.0", 26 | "autobase": "github:holepunchto/autobase", 27 | "autodeebee": "^1.0.1", 28 | "fastify": "^4.17.0", 29 | "graceful-goodbye": "^1.2.1", 30 | "hyper-sdk": "^4.2.4", 31 | "hyperbee": "^2.8.0", 32 | "hyperdeebee": "github:Telios-org/hyperdeebee", 33 | "nostr-tools": "^1.10.1", 34 | "tape": "^5.6.3" 35 | }, 36 | "keywords": [ 37 | "local-first", 38 | "distributed", 39 | "p2p", 40 | "nostr", 41 | "hypercore" 42 | ], 43 | "author": "v142857", 44 | "license": "MIT", 45 | "devDependencies": { 46 | "standard": "^17.0.0" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import fastify from 'fastify' 4 | import fastifyWebsocket from '@fastify/websocket' 5 | import createSwarm from './swarm.js' 6 | import * as SDK from 'hyper-sdk' 7 | import goodbye from './goodbye.js' 8 | import { validateEvent, getEventType } from './nostr_events.js' 9 | 10 | const port = process.argv[2] || 3000 11 | const startingTopics = process.argv.slice(3) 12 | 13 | const sdk = await SDK.create({ 14 | storage: '.hyper-nostr-relay', 15 | autoJoin: true 16 | }) 17 | console.log('your key is', sdk.publicKey.toString('hex')) 18 | goodbye(async _ => { 19 | console.log('exiting...') 20 | await sdk.close().catch(e => { 21 | console.error(e) 22 | throw e 23 | }) 24 | }) 25 | 26 | const fi = fastify() 27 | goodbye(_ => fi.close()) 28 | 29 | const topics = new Map() 30 | await Promise.all( 31 | startingTopics 32 | .filter(Boolean) 33 | .map(async topic => { 34 | const swarm = await createSwarm(sdk, topic) 35 | topics.set(topic, swarm) 36 | return swarm.update() 37 | }) 38 | ) 39 | 40 | fi.register(fastifyWebsocket) 41 | fi.register(async function (fastify) { 42 | fastify.route({ 43 | method: 'GET', 44 | url: '/:topic', 45 | handler: (req, reply) => { 46 | const { topic } = req.params 47 | if (req.headers.accept === 'application/nostr+json') { 48 | reply.send({ 49 | name: 'nostr-relay-' + (topic || 'nostr'), 50 | description: 'a decentralized nostr relay, powered by Hypercore', 51 | pubkey: 'd5b4107402ea8a23719f8c7fc57e7eaba6bc54e7c2da62b39300207c156978f1', 52 | 'supported-nips': [1, 2, 9, 11, 12, 16, 20, 33, 45], 53 | software: 'https://github.com/Ruulul/hyper-nostr' 54 | }) 55 | } else reply.send() 56 | }, 57 | wsHandler: async (con, req) => { 58 | let { topic } = req.params 59 | if (!topic) topic = 'nostr' 60 | if (!topics.has(topic)) { 61 | topics.set(topic, await createSwarm(sdk, topic)) 62 | } 63 | const { sendEvent, subscriptions, queryEvents, sendQueryToSubscription } = topics.get(topic) 64 | const { socket } = con 65 | 66 | socket.on('message', async message => { 67 | const [type, value, ...rest] = JSON.parse(message) 68 | switch (type) { 69 | case 'EVENT': { 70 | if (!validateEvent(value)) { 71 | socket.send('["NOTICE", "Invalid event"]') 72 | break 73 | } 74 | const type = getEventType(value.kind) 75 | if (!type) { 76 | socket.send('["NOTICE", "Unrecognized event kind"]') 77 | break 78 | } 79 | sendEvent(value) 80 | socket.send(`["OK", ${value.id}, true, ""]`) 81 | break 82 | } 83 | case 'REQ': 84 | subscriptions.set(value, { filters: rest, socket, receivedEvents: new Set() }) 85 | await sendQueryToSubscription(subscriptions.get(value), value) 86 | socket.send(`["EOSE", "${value}"]`) 87 | break 88 | case 'CLOSE': 89 | subscriptions.delete(value) 90 | break 91 | case 'COUNT': 92 | socket.send(`["COUNT", "${value}", ${JSON.stringify({ count: (await queryEvents(rest)).length })}]`) 93 | break 94 | default: 95 | socket.send('["NOTICE", "Unrecognized event"]') 96 | } 97 | }) 98 | socket.once('close', _ => { 99 | subscriptions.forEach(({ socket: _socket }, key) => socket === _socket && subscriptions.delete(key)) 100 | }) 101 | } 102 | }) 103 | }) 104 | 105 | fi.listen({ port, host: '0.0.0.0' }, err => { 106 | if (err) throw err 107 | console.log(`listening on ${port}`) 108 | }) 109 | -------------------------------------------------------------------------------- /swarm.js: -------------------------------------------------------------------------------- 1 | import createDB from './db.js' 2 | import createBee from './bee.js' 3 | import { createHash } from 'crypto' 4 | import { validateEvent, isPersistent } from './nostr_events.js' 5 | import goodbye from './goodbye.js' 6 | 7 | const prefix = 'hyper-nostr-' 8 | 9 | export default async function createSwarm (sdk, _topic) { 10 | const topic = prefix + _topic 11 | const subscriptions = new Map() 12 | 13 | const bee = await createBee(sdk, topic) 14 | const { handleEvent, queryEvents } = await createDB(bee) 15 | 16 | const knownDBs = new Set() 17 | knownDBs.add(bee.autobase.localInput.url) 18 | 19 | const discovery = await sdk.get(createTopicBuffer(topic)) 20 | goodbye(_ => { 21 | console.log('closing discovery core of', topic) 22 | return discovery.close() 23 | }) 24 | const events = discovery.registerExtension(topic, { 25 | encoding: 'json', 26 | onmessage: streamEvent 27 | }) 28 | const DBBroadcast = discovery.registerExtension(topic + '-sync', { 29 | encoding: 'json', 30 | onmessage: async (message) => { 31 | let sawNew = false 32 | for (const url of message) { 33 | if (knownDBs.has(url)) continue 34 | sawNew = true 35 | await handleNewDB(url) 36 | } 37 | if (sawNew) { 38 | broadcastDBs() 39 | logDBs() 40 | await update() 41 | } 42 | } 43 | }) 44 | const requestSync = discovery.registerExtension(topic + '-request-sync', { 45 | encoding: 'json', 46 | onmessage: broadcastDBs 47 | }) 48 | discovery.on('peer-add', initConnection) 49 | discovery.on('peer-remove', logPeers) 50 | initConnection() 51 | 52 | console.log(`swarm ${topic} created with hyper!`) 53 | return { subscriptions, sendEvent, queryEvents, sendQueryToSubscription, update } 54 | 55 | function initConnection () { 56 | requestSync.broadcast('') 57 | logPeers() 58 | logDBs() 59 | broadcastDBs() 60 | } 61 | 62 | function logPeers () { 63 | console.log(`${discovery.peers.length} peers on ${_topic}!`) 64 | } 65 | function logDBs () { 66 | console.log('DB count:', bee.autobase.inputs.filter(core => core.readable).length) 67 | } 68 | 69 | function streamEvent (event) { 70 | subscriptions.forEach((sub, key) => { 71 | if (validateEvent(event, sub.filters)) sendEventTo(event, sub, key) 72 | }) 73 | } 74 | 75 | function sendEvent (event) { 76 | events.broadcast(event) 77 | streamEvent(event) 78 | if (isPersistent(event)) return handleEvent(event) 79 | } 80 | 81 | function broadcastDBs () { 82 | DBBroadcast.broadcast(Array.from(knownDBs)) 83 | } 84 | 85 | function update () { 86 | return bee.autobase.view.update() 87 | } 88 | 89 | async function handleNewDB (url) { 90 | knownDBs.add(url) 91 | await bee.autobase.addInput(await sdk.get(url)) 92 | subscriptions.forEach((sub, key) => sendQueryToSubscription(sub, key, { hasLimit: false })) 93 | } 94 | 95 | async function sendQueryToSubscription (sub, key, { hasLimit } = { hasLimit: true }) { 96 | return queryEvents(sub.filters, { hasLimit }).then(events => { 97 | for (let i = events.length - 1; i >= 0; i--) sendEventTo(events[i], sub, key) 98 | }) 99 | } 100 | } 101 | 102 | function sendEventTo (event, sub, key) { 103 | if (!sub.receivedEvents.has(event.id)) { 104 | sub.socket.send(`["EVENT", "${key}", ${JSON.stringify((delete event._id, event))}]`) 105 | sub.receivedEvents.add(event.id) 106 | } 107 | } 108 | 109 | function createTopicBuffer (topic) { 110 | return createHash('sha256').update(topic).digest() 111 | } 112 | -------------------------------------------------------------------------------- /tests/autobase_sync.js: -------------------------------------------------------------------------------- 1 | import createSwarm from '../swarm.js' 2 | import * as SDK from 'hyper-sdk' 3 | import goodbye from 'graceful-goodbye' 4 | import test from 'tape' 5 | 6 | const topic = 'example' 7 | const timeout = 200 8 | 9 | async function createPeer () { 10 | const sdk = await SDK.create({ 11 | storage: false, 12 | autoJoin: true 13 | }) 14 | goodbye(_ => sdk.close()) 15 | return await createSwarm(sdk, topic) 16 | } 17 | 18 | test.onFinish(_ => process.exit(0)) 19 | test('syncing events', async t => { 20 | const peer1 = await createPeer() 21 | const peer2 = await createPeer() 22 | 23 | const eventPeer1 = { 24 | id: 0, 25 | kind: 1, 26 | pubkey: 'peer1', 27 | content: 'hello' 28 | } 29 | const eventPeer2 = { 30 | id: 1, 31 | kind: 1, 32 | pubkey: 'peer2', 33 | content: 'world' 34 | } 35 | 36 | await peer1.sendEvent(eventPeer1) 37 | await peer2.sendEvent(eventPeer2) 38 | 39 | await new Promise(resolve => setTimeout(resolve, timeout)) 40 | await Promise.all([peer1.update(), peer2.update()]) 41 | 42 | const peer1Query = await peer1.queryEvents() 43 | const peer2Query = await peer2.queryEvents() 44 | console.log('queries:', { peer1Query, peer2Query }) 45 | 46 | t.deepEqual(peer1Query, peer2Query) 47 | }) 48 | -------------------------------------------------------------------------------- /tests/delete.js: -------------------------------------------------------------------------------- 1 | import createSwarm from '../swarm.js' 2 | import { generatePrivateKey, getPublicKey, getEventHash, signEvent } from 'nostr-tools' 3 | import goodbye from 'graceful-goodbye' 4 | import * as SDK from 'hyper-sdk' 5 | import test from 'tape' 6 | 7 | async function createPeer () { 8 | const sdk = await SDK.create({ 9 | storage: false, 10 | autoJoin: false 11 | }) 12 | goodbye(_ => sdk.close()) 13 | return await createSwarm(sdk, 'example') 14 | } 15 | const createdAt = _ => Math.floor(Date.now() / 1000) 16 | 17 | test('delete', async t => { 18 | const peer = await createPeer() 19 | const userPrivK = generatePrivateKey() 20 | const userPubK = getPublicKey(userPrivK) 21 | const event = { 22 | kind: 1, 23 | created_at: createdAt(), 24 | content: 'some text', 25 | tags: [], 26 | pubkey: userPubK 27 | } 28 | event.id = getEventHash(event) 29 | event.sign = signEvent(event, userPrivK) 30 | 31 | await peer.sendEvent(event) 32 | 33 | const deleteEvent = { 34 | kind: 5, 35 | content: '', 36 | created_at: createdAt(), 37 | pubkey: userPubK, 38 | tags: [['e', event.id]] 39 | } 40 | deleteEvent.id = getEventHash(deleteEvent) 41 | deleteEvent.sign = signEvent(deleteEvent, userPrivK) 42 | 43 | await peer.sendEvent(deleteEvent) 44 | 45 | const foundEvent = (await peer.queryEvents()).find(_event => _event.id === event.id) 46 | t.assert(!foundEvent) 47 | }) 48 | --------------------------------------------------------------------------------