Compare commits

..

68 Commits

Author SHA1 Message Date
metacryst
07b42ccbc3 partiful link 2026-01-22 19:21:38 -06:00
metacryst
f1c7c340f9 new quill 2025-12-26 06:13:29 -06:00
metacryst
f8861666dd cleaning 2025-12-19 04:49:28 -06:00
metacryst
cd5f92b55f making loading faster 2025-12-19 04:34:53 -06:00
metacryst
8d57a507d1 Merge branch 'main' of https://git.sun.museum/sam/Hyperia 2025-12-17 22:16:41 -06:00
metacryst
9567e4e284 Mobile improvements 2025-12-17 22:16:38 -06:00
metacryst
5b564fbfb3 putting content back in the gitignore 2025-12-07 22:07:14 -06:00
metacryst
279be987a4 Processing Stripe Dance Payments 2025-12-07 22:01:37 -06:00
metacryst
9a1aa55297 bank updates 2025-12-03 11:34:28 -06:00
metacryst
be155ae913 Merge branch 'main' of https://git.sun.museum/sam/Hyperia 2025-12-01 03:14:59 -06:00
metacryst
9d43362cae webp vs. png for fabric background 2025-12-01 03:14:57 -06:00
metacryst
5d59cf8e50 Merge branch 'main' of https://git.sun.museum/sam/Hyperia 2025-12-01 03:10:19 -06:00
metacryst
bc1a3ccf75 small 2025-12-01 03:09:25 -06:00
metacryst
daa4182778 beginning of mobile site 2025-12-01 03:07:55 -06:00
metacryst
fcf0b4b08a More aesthetic improvements 2025-11-26 01:34:43 -06:00
metacryst
eca1354e94 Changing some aesthetics 2025-11-26 00:56:47 -06:00
metacryst
9e87364147 Well, sending messages took longer than it should have 2025-11-25 23:38:59 -06:00
metacryst
dc9b106439 Market filter works except for exclusive boxes 2025-11-25 12:51:32 -06:00
metacryst
cf9edc066a Rendering profile menu 2025-11-25 10:42:37 -06:00
metacryst
89702efa3a Ability to post in Forum 2025-11-25 10:17:01 -06:00
metacryst
7f4a9a8b18 Merge branch 'main' of https://git.sun.museum/sam/Hyperia 2025-11-25 00:44:23 -06:00
metacryst
6c2b183f8e small signup improvements 2025-11-25 00:44:21 -06:00
metacryst
c7ca5c01c4 rea-add profile button 2025-11-24 03:53:09 -06:00
metacryst
d63a7d02ec oopsie 2025-11-24 01:30:19 -06:00
metacryst
fd08d13bee Styling 2025-11-24 01:29:20 -06:00
metacryst
6299e80268 Saving token used and time joined 2025-11-24 00:56:15 -06:00
metacryst
40e7987ca2 Edits for public viewing 2025-11-23 23:33:37 -06:00
metacryst
9d62dbad86 saving data 2025-11-23 23:24:26 -06:00
metacryst
8c7ed68975 Signup working with new db 2025-11-23 22:16:53 -06:00
metacryst
c3ed5ac5ac Signup tentatively works 2025-11-22 23:12:01 -06:00
metacryst
525642d04e [Add User] Revamped db 2025-11-21 00:04:11 -06:00
metacryst
30faf12b20 Small edits, fixing bug with app spawning, working on forum page 2025-11-20 00:44:42 -06:00
metacryst
2bc5c00830 Adding events and better why sectino 2025-11-19 15:57:27 -06:00
metacryst
3588a68bee Adjustments for mobile home page 2025-11-18 08:19:06 -06:00
metacryst
1cc94f4d5f Merge branch 'main' of https://git.sun.museum/sam/Hyperia 2025-11-18 08:01:33 -06:00
metacryst
c240d43c40 fixing auth 2025-11-18 08:01:32 -06:00
metacryst
b8e48f7945 User Submitting Signup 2025-11-18 07:58:35 -06:00
metacryst
81ca35bf2f Pubilc site basically complete, apps are reasonable but could be better looking 2025-11-18 06:22:02 -06:00
metacryst
7f85dbe493 Basic Navigation 2025-11-18 04:51:40 -06:00
metacryst
ff28d68988 Terra Cotta Home Page, Quill Updates 2025-11-18 03:25:45 -06:00
metacryst
6d2da88f23 Adding tasks and forum 2025-11-12 19:34:35 -06:00
metacryst
02648859a8 Adding location pin, location input 2025-11-11 14:19:56 -06:00
metacryst
fa67271ae8 light mode better colors 2025-11-10 09:02:24 -06:00
metacryst
41c0bb57a3 1, 4: Fixing 404 after logged out, adding market entry 2025-11-10 04:05:21 -06:00
metacryst
6f9ed49b2e Javascript 2025-11-08 07:03:30 -06:00
metacryst
e17efce338 Improving the 3 apps 2025-11-07 20:14:38 -06:00
metacryst
cb526b5ec0 Adding buttons to market 2025-11-06 02:22:44 -06:00
metacryst
8a8fb7f4b1 Merge branch 'main' of https://git.sun.museum/sam/Hyperia 2025-10-30 13:19:43 -05:00
metacryst
0658c2603a remove env file, make ws secure in prod 2025-10-30 13:17:53 -05:00
metacryst
5859604f83 password hashing util function 2025-10-29 22:40:10 -05:00
metacryst
9dec94e58e adding some market elements 2025-10-29 22:27:56 -05:00
metacryst
759ee54c32 change logout button based on background 2025-10-29 21:51:02 -05:00
metacryst
eaa90703a1 adding search bar to appz 2025-10-29 18:52:23 -05:00
metacryst
0e36cd30cc responsive app menu 2025-10-29 16:03:47 -05:00
metacryst
6d46875546 re-adding signout 2025-10-29 00:11:23 -05:00
metacryst
a61562abfb adding qr codes, converting site to quill 2025-10-29 00:06:59 -05:00
metacryst
9a829ab34f Fixing opacity of profile menu 2025-10-19 20:58:24 -05:00
metacryst
5949c006f5 Fixing app menu styling and functionality 2025-10-18 23:02:30 -05:00
metacryst
80015f2435 Integrated Quill 2025-10-18 16:15:21 -05:00
metacryst
d483e5af37 asdf 2025-10-13 17:30:10 -05:00
metacryst
d9edb7d381 improvements 2025-10-13 11:41:11 -05:00
metacryst
a2f4206cf9 styling 2025-10-13 00:08:05 -05:00
metacryst
ac93ac5c4e improve text alignment 2025-10-12 20:41:36 -05:00
metacryst
e0f9866ab4 Fixing sign in / out redirect 2025-10-12 18:46:07 -05:00
metacryst
8a6f3da116 adding dashboard, changing front page 2025-10-12 17:56:07 -05:00
metacryst
d02103a0bc Input box, sidebar, ws connection 2025-10-03 11:44:00 -05:00
metacryst
989dbd88a0 profile menu 2025-10-01 22:49:25 -05:00
metacryst
a01fb24a69 Better message 2 2025-09-30 18:00:02 -05:00
146 changed files with 6857 additions and 2447 deletions

8
.gitignore vendored
View File

@@ -1,6 +1,8 @@
.DS_Store .DS_Store
package-lock.json package-lock.json
_/build node_modules
.env
content content
db/* db/db.json
server/db/users.json qrCodes/qr_codes

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" width="800px" height="800px" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M235.52 143.36h757.76c16.966 0 30.72 13.754 30.72 30.72s-13.754 30.72-30.72 30.72H235.52c-16.966 0-30.72-13.754-30.72-30.72s13.754-30.72 30.72-30.72zm0 225.28h757.76c16.966 0 30.72 13.754 30.72 30.72s-13.754 30.72-30.72 30.72H235.52c-16.966 0-30.72-13.754-30.72-30.72s13.754-30.72 30.72-30.72zm0 235.52h757.76c16.966 0 30.72 13.754 30.72 30.72s-13.754 30.72-30.72 30.72H235.52c-16.966 0-30.72-13.754-30.72-30.72s13.754-30.72 30.72-30.72zm0 225.28h757.76c16.966 0 30.72 13.754 30.72 30.72s-13.754 30.72-30.72 30.72H235.52c-16.966 0-30.72-13.754-30.72-30.72s13.754-30.72 30.72-30.72zM61.44 235.52C27.508 235.52 0 208.012 0 174.08s27.508-61.44 61.44-61.44 61.44 27.508 61.44 61.44-27.508 61.44-61.44 61.44zm0 225.28C27.508 460.8 0 433.292 0 399.36s27.508-61.44 61.44-61.44 61.44 27.508 61.44 61.44-27.508 61.44-61.44 61.44zm0 235.52C27.508 696.32 0 668.812 0 634.88s27.508-61.44 61.44-61.44 61.44 27.508 61.44 61.44-27.508 61.44-61.44 61.44zm0 225.28C27.508 921.6 0 894.092 0 860.16s27.508-61.44 61.44-61.44 61.44 27.508 61.44 61.44-27.508 61.44-61.44 61.44z"/></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd" [
<!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
]>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" version="1.1" baseProfile="tiny" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
width="800px" height="800px" viewBox="0 0 42 42" xml:space="preserve">
<path fill-rule="evenodd" d="M22.5,1.5h-14c-2.55,0-3,0.561-3,3v32c0,2.49,0.55,3,3,3h24c2.5,0,3-0.47,3-3v-22h-13V1.5z M35.5,11.5
l-10-10v10H35.5z"/>
</svg>

Before

Width:  |  Height:  |  Size: 980 B

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg fill="#000000" width="800px" height="800px" viewBox="-2 0 19 19" xmlns="http://www.w3.org/2000/svg" class="cf-icon-svg"><path d="M13.995 5.356v9.366a.476.476 0 0 1-.475.475H1.48a.476.476 0 0 1-.475-.475V5.356a.476.476 0 0 1 .475-.475h3.788V3.239a.476.476 0 0 1 .475-.475h3.515a.476.476 0 0 1 .475.475v1.642h3.787a.476.476 0 0 1 .475.475zm-7.62-.475h2.25V3.873h-2.25z"/></svg>

Before

Width:  |  Height:  |  Size: 499 B

View File

@@ -1,241 +0,0 @@
<svg width="956" height="832" viewBox="0 0 956 832" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M194 418.75C206.167 418.833 218.342 419.196 230.494 418.804C233.536 418.706 236.499 419.089 239.5 419.085C313.167 418.976 386.833 419 460.5 419C504.833 419 549.167 419 593.5 419C599.833 419 606.167 419.063 612.5 418.986C623.667 418.852 634.845 419.455 646 418.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M484.5 412C519.333 377.333 554.162 342.662 589.006 308.006C593.936 303.102 598.943 298.276 604.019 293.311C592.96 282.756 580.35 280.053 565.994 285.986C560.506 288.255 556.572 292.45 552.5 296.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M478 419.5C478 492.5 478 565.5 478 638.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M428.75 136.5C428.833 152.833 428.925 169.167 428.996 185.5C429.029 192.926 430.074 193.996 437.5 193.999C450.833 194.003 464.167 194 478 194C478 202.327 477.894 210.665 478.025 219C478.224 231.666 477.478 244.338 478.435 257.005C478.697 260.473 478.024 264 478.022 267.5C477.989 311.167 478.008 354.833 477.989 398.5C477.987 403.362 478.286 408.186 478.943 413.008C479.187 414.798 479.343 416.728 478.5 418.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M430.5 323.5C425.229 318.008 419.664 312.856 411.992 311.035C400.897 308.402 390.737 310.234 381.99 317.989C381.02 318.85 379.917 319.562 379.142 320.143C409.833 350.834 440.416 381.417 471 412" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M485 426C521 461.667 557 497.333 593 533" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M767.5 370C750.008 368.968 732.5 369.71 715 369.516C708.932 369.448 708.016 370.385 708.011 376.5C707.986 404.5 707.986 432.5 708.011 460.5C708.016 466.582 709.418 467.979 715.5 467.989C732.833 468.02 750.167 468 767.5 468" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M471 426C435.667 461.333 400.333 496.667 365 532" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M527.5 138C527.5 154.333 527.4 170.668 527.555 186.999C527.609 192.623 524.538 193.98 520 193.99C506.167 194.018 492.333 194 478.25 194C478.25 180.002 478.25 166.001 478.25 152" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M333 273C343.498 262.666 345.597 250.395 340.405 237.037C335.854 225.326 326.601 217.924 314.461 216.294C303.574 214.832 292.614 215.979 285.768 227.36C284.337 229.74 280.6 230.97 278.978 233.988C267.829 254.727 281.674 279.591 302.974 283.153C314.584 285.095 323.705 281.421 332 274" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M193 513.75C203.833 513.833 214.667 513.969 225.5 513.972C229.36 513.974 230.596 511.708 230.552 507.999C230.411 496.168 231.085 484.295 230.313 472.512C229.707 463.284 230.921 454.181 230.625 444.996C230.33 435.85 230.894 426.637 230.767 417.503C230.587 404.502 231.397 391.445 230.273 378.52C229.582 370.58 230.902 362.844 230.572 354.997C230.244 347.177 230.503 339.333 230.499 331.5C230.495 324.794 229.733 324.046 223 323.998C211.499 323.916 199.991 324.313 188.5 323.5" stroke="#F2DAC8" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M323.75 173.5C323.462 176.144 325.437 177.479 327.01 178.99C347.662 198.838 368.349 218.651 388.991 238.509C395.446 244.719 402.394 250.467 407.898 257.579C409.039 259.054 410.026 258.09 411 258.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M234.75 265.5C234.661 267.72 236.048 269.092 237.488 270.512C251.841 284.659 266.128 298.872 280.512 312.987C291.617 323.884 302.926 334.574 313.897 345.602C315.497 347.21 317.227 347.677 319 348.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M525.5 696C525.5 687 525.544 678 525.483 669C525.448 663.958 524.038 662.454 519.001 662.535C506.001 662.742 492.988 662.754 480 662.755C466.345 662.756 452.66 662.929 439.003 662.429C433.443 662.225 430.928 664.259 430.976 670.5C431.061 681.499 431 692.5 431 703.5" stroke="#F2DAC8" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M441.5 524.5C441.401 526.052 441.772 527.585 440.531 529.027C431.352 539.685 419.954 546.975 405.98 548.291C391.329 549.671 377.434 546.624 366.489 535.511C366.076 535.092 365.5 534.833 365 534.5" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M363.5 460.5C351.157 473.689 346.057 489.053 349.495 507.001C351.341 516.636 355.57 525.017 362.5 532" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M573 692C573 677 573.011 662 572.995 647C572.988 640.247 571.746 638.832 565.002 639.056C557.826 639.294 550.593 637.997 543.459 640.377C540.589 641.335 537.751 638.822 534.498 638.873C517.169 639.143 499.833 639 482.5 639C462.5 639 442.5 638.995 422.5 639.006C419.962 639.008 417.306 638.579 415.035 640.055C414.306 640.528 413.575 640.676 413.016 640.458C405.489 637.515 397.667 639.429 389.996 639.077C384.507 638.825 383.519 640.065 383.51 645.5C383.482 660.833 383.5 676.167 383.5 691.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M732 419C703.667 419 675.333 419 647 419" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M565 452.5C582.403 454.977 602.281 442.506 603.233 419.51C604.01 400.757 587.608 384.055 568.999 384.988C567.171 385.079 565.333 385 563.5 385" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M354 544.5C360.488 549.998 363.456 557.45 363.837 565.508C364.321 575.753 360.496 584.797 352.916 591.91C352.035 592.737 350 592.333 348.5 592.5" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M682 384.75C670.839 384.987 661.192 388.517 653.993 397.494C648.581 404.242 646.538 411.63 646.764 420.506C647.158 436.022 655.699 445.014 668.57 450.846C673.568 453.111 679.33 453.873 685 452.5" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M351.5 542C342.115 530.86 321.68 530.153 309.492 539.991C307.282 541.775 305.677 544.27 303 545.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M378 322.5C370.359 330.22 367.744 339.147 369.818 350.035C371.247 357.53 375.518 363.074 379.5 369" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M604 340.5C614.625 329.157 616.727 315.87 610.52 302.491C609.222 299.693 607.4 297.388 605 295.5" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M286.5 228.5C301.333 243.167 316.167 257.833 331 272.5" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M408 259C406.57 263.012 403.272 265.725 400.395 268.386C388.091 279.769 376.959 292.292 365 304" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M363 306C350.667 318.333 338.259 330.594 326.066 343.064C323.754 345.429 320.462 346.795 319 350" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M716.5 253.5C714.015 253.169 712.277 254.046 710.433 255.934C699.234 267.399 687.695 278.534 676.622 290.117C674.53 292.306 670.918 292.647 670 296" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M642.5 185C630 197.333 617.494 209.661 605.008 222.008C603.63 223.371 602.685 225.009 602.5 227" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M623 378.5C622.917 404.167 622.833 429.833 622.75 455.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M228.5 466C215.5 466 202.5 466 189.5 466" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M316 579C306.5 569.5 297.021 559.978 287.491 550.509C282.686 545.735 281.311 545.732 276.509 550.509C265.48 561.48 254.5 572.5 243.5 583.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M228.5 370.5C215.5 370.5 202.5 370.5 189.5 370.5" stroke="#F2DAC8" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M613 623C616.348 624.237 617.038 627.867 619.396 630.109C629.473 639.686 639.092 649.744 649.066 659.432C650.961 661.272 651.831 663.015 651.5 665.5" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M649 587C658.167 577.667 667.19 568.186 676.549 559.051C683.013 552.742 683.211 554.189 687.989 559.011C698.856 569.977 709.667 581 720.5 592" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M318 581.5C329.022 592.327 340.714 602.514 350.768 614.969C338.591 628.722 325.395 640.726 313 653.5" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M801.5 244C805.504 247.861 808.474 252.316 808.936 258.005C809.048 259.379 809.849 260.052 810.466 261.022C811.907 263.287 813.369 265.576 814.461 268.017C817.571 274.968 820.368 282.061 823.575 288.965C824.635 291.247 824.575 293.276 824 295.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M646.5 589C637.5 598.167 628.498 607.332 619.501 616.501C617.574 618.466 615.371 620.221 614.5 623" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M686 115.5C684.109 112.022 681.01 109.901 677.484 108.541C668.87 105.22 662.793 96.9794 653 96C650.789 92.3703 647.348 90.1492 643.477 89.0855C635.241 86.8231 628.701 80.6137 620.009 79.4306C616.524 78.9561 614.562 75.1355 610.999 74.5056C601.541 72.8336 593.283 67.169 583.506 66.4197C579.604 66.1206 577.029 62.4447 572.509 62.2721C563.005 61.9091 554.356 56.487 544.494 56.8438C541.378 56.9565 538.677 54.2391 534.995 54.352C525.615 54.6397 516.492 51.6757 506.999 51.7219C502.978 51.7415 498.724 50.1147 494.505 50.5466C486.006 51.4169 477.532 48.681 468.957 50.8276C465.9 51.5928 462.438 49.9775 458.99 50.4186C451.69 51.3524 444.182 51.1437 437.046 52.7116C431.008 54.0384 424.74 52.0894 419.021 54.5499C410.999 58.0017 401.831 56.1931 393.959 60.4236C390.338 62.3695 385.782 60.3447 381.991 62.4843C374.176 66.8952 364.526 66.2355 356.977 71.4672C356.146 72.0435 354.947 72.5606 354.009 72.4342C348.996 71.7588 344.943 74.2275 341.069 76.6116C338.331 78.2962 335.662 79.5023 332.51 80.0577C328.616 80.744 325.297 83.0094 322.051 85.0799C318.374 87.4251 319.071 91.9577 318.171 95.5429C317.652 97.6113 317.243 99.725 316.5 101.75" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M399.5 742.5C398.84 744.173 397.503 745.103 396.022 746.034C391.88 748.639 388.05 751.384 387.414 756.99C386.876 761.741 383.415 764.589 379.544 767.068C377.695 768.252 375.038 768.746 374.5 771.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M601 226.75C610 235.833 618.997 244.92 628.002 253.998C630.338 256.352 632.614 258.779 635.5 260.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M352 545C340.667 556.333 329.333 567.667 318 579" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M647 250C643.48 254.146 639.959 258.293 636.229 262.686C647.294 272.025 657.068 284.632 669.5 294.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M802.5 498.25C799.923 498.174 799.031 499.895 798.501 502C798.252 502.986 798.152 504.131 798.138 505.002C797.995 513.608 791.937 520.537 791.515 529.001C791.397 531.365 788.845 532.023 788.354 534.471C786.409 544.167 780.895 552.597 777.95 561.984C777.193 564.397 774.093 565.372 773.518 568.004C771.568 576.919 764.707 583.44 761.932 591.978C760.879 595.215 756.596 595.981 755.466 599.489C752.797 607.773 744.983 612.85 741.91 620.966C741.167 622.929 738.265 623.056 736.966 624.977C732.111 632.164 726.353 638.608 720.623 645.109C717.672 648.458 713.638 650.409 710.955 653.966C709.529 655.858 707.364 657.24 707.5 660" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M665.5 693.5C660.856 693.945 657.221 696.572 654.063 699.567C648.664 704.687 640.502 705.676 636 712C629.623 711.383 625.901 716.499 620.881 718.733C615.571 721.098 610.216 724.65 604.922 725.534C596.613 726.922 590.493 733.5 582 733.545C580.999 733.55 579.898 733.997 579.017 734.529C574.695 737.136 569.922 738.212 564.997 738.416C562.933 738.501 561.003 739.083 559.579 740.109C557.213 741.812 554.698 742.189 552.003 742.527C547.737 743.062 543.6 744.032 539.427 745.248C535.241 746.468 530.244 744.716 526.04 746.59C519.094 749.689 511.385 747.006 504.484 749.962C502.526 750.801 500.456 749.506 498.531 749.258C493.488 748.607 489.01 751.823 483.986 750.556C479.179 749.344 474.308 750.707 469.498 750.749C465.597 750.782 461.588 749.017 457.504 749.535C452.356 750.187 447.235 747.818 442.538 748.343C434.006 749.297 426.433 743.408 418 746C411.178 741.485 402.27 744.411 395.43 739.599C393.556 738.28 390.751 737.399 388.515 737.639C380.643 738.483 374.824 732.109 367.004 732.037C364.501 732.014 360.907 728.788 357.571 727.337C355.436 726.408 353.533 726.633 351.5 726.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M595 535C600.18 540.321 605.741 545.272 610.381 551.208C614.027 547.36 617.442 543.608 621.041 540.041C622.208 538.884 623.561 537.622 625.5 537.75" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M111.5 391.5C107.594 395.704 109.78 400.852 109.753 405.501C109.741 407.493 109.997 409.392 109.64 411.523C108.983 415.441 108.99 419.503 109.048 423.499C109.11 427.783 112.352 429.719 115.405 432.12C119.664 435.47 123.944 438.448 129.485 437.417C137.649 435.897 141.863 442.185 146.757 446.289C148.872 448.063 149.415 453.223 148.751 456.449C147.705 461.534 150.508 465.474 151.017 469.998C151.056 470.346 151.536 470.715 151.471 470.993C149.487 479.379 154.983 486.796 154.543 495.002C154.321 499.132 158.391 501.795 158.561 505.997C158.894 514.212 164.159 521.248 164.467 529.501C164.501 530.431 164.951 530.863 165.443 531.542C168.24 535.4 170.755 539.414 170.518 544.501C170.442 546.142 171.678 547.222 172.437 548.536C173.812 550.914 175.574 553.009 176.121 555.978C176.935 560.398 180.827 563.785 182.139 567.623C185.073 576.213 191.229 582.962 194.111 591.462C195.119 594.435 198.798 595.641 200.108 598.957C203.335 607.127 210.838 612.704 214.016 620.994C214.786 623.003 217.363 622.421 218.621 624.424C223.357 631.969 229.736 638.246 235.437 645.052C238.745 649.001 243.674 651.021 246.558 655.462C250.859 662.083 257.269 667.08 263.263 671.655C272.339 678.583 280.343 687.254 290.241 692.549C297.096 696.217 302.878 701.342 309.902 704.705C316.467 707.848 322.271 712.515 329.464 714.622C331.205 715.133 332.5 717.167 334 718.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M224 153C222.5 153.833 220.67 154.358 219.554 155.551C212.944 162.615 206.462 169.799 200.024 177.021C198.166 179.106 197.407 181.347 199.401 184.072C200.174 185.129 199.646 187.051 200.035 188.491C201.215 192.856 202.587 197.181 207.006 199.489C210.685 201.41 212.039 204.532 212.025 208.5C212.022 209.499 212.081 210.638 212.541 211.478C215.723 217.293 212.667 221.812 208.9 225.395C202.76 231.235 199.83 239.185 194.97 245.843C189.88 252.815 186.073 261.277 182.117 269.311C178.813 276.02 176.594 283.402 172.01 289.508C169.466 292.897 171.142 297.488 168.629 301.09C167.264 303.047 166.675 305.561 164.5 307" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M503 87.5C499.391 88.9334 495.547 89.2558 492.047 87.88C488.652 86.5452 485.338 86.5054 482.015 87.0856C479.11 87.5927 476.334 87.5218 473.5 87.0026C472.502 86.8199 471.337 86.2492 470.525 86.5655C463.517 89.2958 456.161 87.7738 448.998 88.4816C446.176 88.7605 443.335 88.9323 440.5 88.9785C435.303 89.0631 430.454 90.8189 425.528 92.1058C424.125 92.4723 422.663 92.7464 421.531 92.3999C418.581 91.4973 416.162 92.908 413.472 93.3197C404.094 94.7552 395.371 98.7927 385.978 99.7943C384.752 99.9251 383.459 100.127 382.542 100.584C377.6 103.043 372.438 104.514 367.041 105.689C363.925 106.368 361.619 109.768 358 109.993C350.988 110.429 345.932 115.814 339.468 117.366C334.959 118.448 331.947 121.705 328.012 123.526C322.45 126.101 316.636 127.934 311.808 132.287C309.121 134.711 304.707 136.609 300.458 133.558C299.231 132.678 297.528 132.201 295.995 132.058C291.994 131.686 289.304 129.85 287.991 126.003C286.365 121.236 282.223 119.307 277.975 118.089C271.272 116.167 264.539 115.594 259.512 122.01C255.774 126.781 249.508 128.287 245.593 132.585C239.965 138.765 232.502 142.74 226.967 148.971C224.9 151.298 224.136 153.393 225.392 156.543C226.697 159.819 226.022 163.491 226 167" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M745 203C743.616 207.33 743.891 211.992 742.111 216.296C741.389 218.041 742.851 220.248 744.081 221.415C749.372 226.432 752.737 232.662 755.991 239.005C756.228 239.468 756.179 240.253 756.523 240.463C763.724 244.863 764.093 253.855 769.415 259.579C771.857 262.205 770.893 266.696 773.508 269.493C779.114 275.487 779.413 284.266 784.556 290.453C785.686 291.811 785.538 292.946 785.708 294.477C785.986 296.991 786.287 299.844 788.02 301.984C793.24 308.431 791.553 317.668 797 324C795.735 327.752 796.702 331.344 798.57 334.458C802.854 341.597 801.075 350.212 804.743 357.627C806.35 360.876 803.903 365.442 805.334 369.558C806.029 371.557 806.187 373.612 808 375" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M487.5 86C489.405 81.8772 492.642 78.8874 495.997 75.4958C498.654 79.215 501.104 82.5884 503.49 86.0067C505.093 88.3025 507.581 88.6462 510.006 88.9548C511.81 89.1844 513.667 88.9913 515.5 89.0017C520.693 89.0311 525.559 90.7629 530.472 92.1033C531.878 92.4869 533.337 92.7464 534.469 92.3998C537.419 91.4973 539.869 93.0104 542.522 93.3027C552.109 94.3594 560.731 99.5314 570.5 99.5001C570.667 99.4995 570.876 99.4335 570.994 99.5095C577.427 103.672 585.325 103.987 591.996 107.507C595.461 109.335 598.941 111.067 603 111.001C603.333 110.995 603.768 110.861 603.985 111.02C609.784 115.267 616.867 116.934 622.995 120.509C624.031 121.113 624.917 122.058 626.013 122.464C634.675 125.678 642.147 131.209 650.524 134.946C652.863 135.989 653.965 138.335 656.025 139.453C663.782 143.665 670.488 149.461 678.068 153.884C680.624 155.376 681.769 157.97 684.022 159.466C691.963 164.741 698.42 171.793 705.931 177.589C708.209 179.347 709.235 182.811 711.58 184.381C718.99 189.339 723.567 197.081 730.302 202.736C732.848 204.875 733.746 209.253 736.432 212.065C737.968 213.672 739.2 215.458 741.5 216" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M634 236.5C640.833 243 647.824 249.347 654.398 256.1C656.215 257.967 658.424 259.409 660 261.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M606 522.5C598.5 530 590.902 537.406 583.569 545.066C581.74 546.978 579.985 547.831 577.5 547.5" stroke="#F2DAC8" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M478.5 663.5C477.557 672.986 478.177 682.5 478 692" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M581.5 66.5C579.634 70.2919 575.378 70.9913 572.426 73.41C568.986 76.2293 566.466 85.9854 568.441 90.0289C569.915 93.0464 572.042 95.8879 572 99.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M468.5 752C467.985 754.321 466.052 755.584 464.459 756.953C460.385 760.455 458.975 764.832 459.507 769.999C459.776 772.61 459.56 774.955 457.024 776.538C456.365 776.95 455.922 777.789 455.512 778.507C450.967 786.45 443.875 787.17 436.012 785.201C432.207 784.247 428.394 783.833 424.515 783.375C413.815 782.11 403.175 780.386 392.964 776.598C390.547 775.702 387.632 777.187 384.994 776.014C375.579 771.827 365.062 770.96 355.794 765.875C353.315 764.515 348.91 764.534 345.516 763.451C342.845 762.599 340.231 761.436 338.5 759" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M433.5 749C432.077 752.463 429.078 754.646 426.402 756.883C424.279 758.659 423.253 760.508 423.542 762.995C424.236 768.945 420.923 772.532 416.486 775.478C414.656 776.693 413.087 778.087 412 780" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M488.5 52C489.167 53.3333 489.501 55.0754 490.554 55.9332C497.05 61.2207 497.335 68.1064 496 75.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M557 743C557.782 745.483 560.261 746.171 562.058 747.416C565.545 749.831 568.186 752.314 568.609 756.99C569.117 762.595 573.787 765.2 577.964 768.053C579.286 768.956 581.507 769.159 581.5 771.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M478.5 639.5C477.651 647.152 478.112 654.832 478 662.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M148 463C145.005 465.005 142.674 467.668 140.49 470.492C138.991 472.431 136.995 473.838 134.508 473.449C127.593 472.367 123.997 476.758 120.483 481.487C119.429 482.904 118.167 484.167 117 485.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M316 581C308.5 588.333 301 595.667 293.5 603" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M496 259C482.5 259 469 259 455.5 259" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M806 359C809.659 358.578 811.624 361.854 814.362 363.268C817.404 364.838 820.253 365.172 822.956 364.355C826.949 363.15 829.987 363.1 833.669 365.766C835.809 367.315 838.212 369.071 840.955 370.117C844.56 371.491 844.87 375.759 844.756 378.49C844.429 386.285 847.188 393.845 846.347 401.483C845.6 408.271 847.539 414.819 846.986 421.499C846.678 425.217 847.142 429.346 842.021 430.586C841.043 430.822 840.354 432.189 839.497 432.996C835.086 437.151 829.87 438.505 824.007 437.216C822.028 436.781 820.387 436.937 818.995 438.496C818.525 439.023 818.089 439.698 817.486 439.97C810.777 442.992 807.099 447.893 807.481 455.501C807.667 459.211 806.619 463.273 810.986 465.526C811.585 465.835 812.109 466.43 812.483 467.011C815.658 471.951 820.184 473.952 826.001 473.801C831.183 473.665 832.513 478.704 835.481 481.52C836.761 482.734 837.833 484.167 839 485.5" stroke="#F2DAC8" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M477.5 236C470.167 236 462.833 236 455.5 236" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M402 693.5C396.451 693.976 390.87 695.147 385.487 692.527C384.748 692.167 383.631 691.762 383.031 692.062C376.032 695.561 368.713 693.659 361.5 693.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M402 670.5C400.397 671.301 398.664 671.079 397.002 670.973C385.174 670.22 373.318 671.738 361.5 670.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M456.5 615.5C468.321 614.473 480.169 615.35 492.001 615.019C493.671 614.972 495.397 614.699 497 615.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M497 592.5C493.88 591.448 490.653 591.959 487.502 592.054C477.169 592.366 466.819 591.426 456.5 592.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M554 670.5C559.635 671.745 565.35 670.958 570.998 670.882C578.829 670.778 586.687 671.623 594.5 670.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M497 693.5C491.309 694.172 485.583 694.804 480.033 692.903C478.949 692.532 477.791 692.265 477.031 692.575C470.269 695.331 463.357 693.659 456.5 693.5" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M803.5 499C804.667 500.5 805.866 501.976 806.994 503.504C811.554 509.678 819.807 511.127 827.059 508.676C835.735 505.743 839.263 500.306 839.062 491.499C838.928 485.571 842.58 480.424 843.149 474.514C843.376 472.16 843.408 470.11 842.5 468" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M110.5 430C109.075 435.548 108.443 441.091 111.031 446.485C111.639 447.752 111.187 448.794 111.111 450.007C110.819 454.712 110.907 459.409 112.415 464.028C113.091 466.1 114.227 467.273 115.986 468.274C119.202 470.105 122.333 472.083 125.5 474" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M150 359C146.341 358.578 144.189 361.725 141.679 363.287C138.565 365.225 135.594 365.24 133.069 364.312C128.775 362.733 125.592 363.58 121.911 365.857C119.652 367.255 117.588 368.999 115.064 370.142C112.04 371.513 111.927 375.069 111.541 378.005C110.747 384.047 110.055 389.376 116.232 394.334C121.094 398.238 125.102 401.359 131.509 400.572C134.334 400.225 136.565 401.914 138.532 403.969C140.654 406.186 142.531 408.742 145.5 410" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M845.5 430C846.948 435.167 847.221 440.345 845.486 445.495C844.595 448.139 844.938 450.846 845.049 453.498C845.377 461.309 843.866 467.94 835.518 471.049C833.727 471.715 832.167 473 830.5 474" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M125.5 522.5C125.361 526.153 125.834 529.734 127.527 532.986C131.156 539.95 131.217 548.309 135.206 554.875C139.63 562.16 140.168 571.112 146.247 577.732C148.021 579.664 147.392 584.409 149.578 586.932C155.757 594.064 157.377 603.848 164.22 610.777C166.493 613.079 167.165 617.784 169.445 621.039C170.901 623.117 171.991 625.393 174.75 626" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M554 693.5C559.691 694.172 565.421 694.816 570.968 692.906C572.225 692.473 573.586 692.212 574.462 692.589C580.706 695.278 587.145 693.667 593.5 693.75" stroke="#F2DAC8" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M451 785.5C455.318 788.874 460.345 787.795 464.965 787.037C467.441 786.631 469.639 786.398 472.002 786.993C472.825 787.201 473.69 787.553 474.496 787.466C483.335 786.52 492.398 788.778 500.933 787.151C509.108 785.593 517.817 787.799 525.5 783.501C527.497 782.384 529.308 784.114 531.533 783.66C542.079 781.508 552.883 780.682 563.05 776.625C565.207 775.765 568.229 777.158 570.459 776.381C578.234 773.673 586.262 771.663 593.91 768.763C599.546 766.625 605.161 764.837 610.985 763.436C613.71 762.78 615.78 760.676 618 759" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M831 315.5C834.932 319.358 835.531 324.637 835.659 329.509C835.711 331.486 835.902 333.345 836.588 334.963C837.966 338.211 839.029 341.485 838.972 345C838.87 351.342 842.435 356.795 843.141 362.984C843.46 365.777 843.566 368.164 842 370.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M113.5 468C110.875 473.037 113.318 477.976 114.792 482.403C116.034 486.127 116.447 489.77 116.999 493.5C117.514 496.979 117.847 500.549 120.036 503.473C121.053 504.831 120.719 506.006 120.601 507.508C120.216 512.416 121.694 516.906 124.442 521.039C125.115 522.05 125.589 522.151 126.5 521.75" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M830.5 522.5C830.476 527.452 829.82 532.191 827.038 536.524C823.94 541.349 825.411 547.831 822.346 552.397C817.156 560.131 816.004 569.662 810.201 577.156C807.852 580.19 808.141 585.007 805.647 588.602C804.387 590.417 803.392 592.281 801.5 593.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M133.5 327C130.167 328.667 126.937 330.607 123.471 331.923C120.02 333.232 118.428 335.515 117.986 338.998C116.887 347.653 114.887 356.114 112.565 364.518C112.004 366.552 112.554 368.736 114 370.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M194 593.5C193.377 594.614 192.601 595.584 192.46 596.996C191.758 604.02 187.89 608.852 181.459 611.398C179.496 612.175 179.027 613.447 178.508 615.003C177.338 618.502 177.709 622.443 175.111 625.591C174.524 626.303 175.194 628.206 175.553 629.485C175.763 630.233 176.504 630.83 176.999 631.5C182.667 639.166 187.534 647.642 194.235 654.262C200.379 660.332 205.806 667.1 211.595 673.373C218.438 680.787 226.032 687.349 233.242 694.247C237.962 698.764 242.197 704.511 248.103 707.281C256.424 711.185 261.059 720.365 270.7 722.256C271.611 722.434 272.63 725.546 274.504 726.491C283.785 731.171 291.763 738.222 301.567 741.818C304.376 742.848 304.983 745.641 307.494 746.517C315.761 749.398 323.637 753.211 331.459 757.082C334.992 758.83 337.786 758.156 341.03 756.56C347.392 753.431 352.666 749.531 354.005 742.001C354.696 738.114 358.638 737.735 361.147 736.248C362.998 735.151 364.403 733.766 366 732.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M781.5 212C786.565 213.424 787.926 218.03 789.639 222.047C790.801 224.773 791.775 227.493 794.016 229.482C796.952 232.089 798.203 235.717 799.966 239.018C801.722 242.306 800.107 245.401 799.013 248.504C797.104 253.92 794.714 258.32 788.627 260.811C784.726 262.408 781.498 261.249 777.996 261.419C775.851 261.523 773.667 260.833 771.5 260.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M777 613C778.112 617.016 778.171 621.411 780.577 624.947C781.803 626.748 780.838 628.394 780.343 629.425C778.96 632.308 777.075 635.048 774.943 637.449C771.845 640.937 769.249 644.793 766.352 648.381C759.841 656.444 753.643 664.853 745.542 671.551C742.539 674.034 741.479 678.163 738.06 680.584C732.469 684.543 728.443 690.572 722.85 694.274C715.634 699.05 711.188 706.86 702.663 710.393C698.325 712.191 695.254 717.602 690.487 719.973C687.425 721.495 684.814 723.344 682.349 725.852C679.933 728.311 677.081 730.766 673.014 731.145C670.73 731.359 668.794 733.315 666.977 734.975C663.824 737.856 660.231 739.959 656.01 741.04C651.89 742.096 649.68 746.153 645.557 747.656C639.14 749.994 632.852 752.755 626.915 756.359C622.961 758.759 618.269 759.307 613.983 756.022C609.895 752.889 604.322 751.404 603.427 745.01C602.762 740.262 598.575 738.309 595.007 735.99C593.302 734.882 591.667 733.667 590 732.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M786.5 292.5C787.333 292.5 788.296 292.224 788.98 292.543C795.599 295.629 802.053 295.307 808.514 292.027C811.298 290.613 813.981 292.617 816.448 293.216C825.255 295.354 830.994 304.3 830.545 313.502C830.439 315.67 828.781 316.836 827.889 318.438C826.282 321.324 824 323.833 822 326.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M135.5 401C137.652 397.942 140.709 396.085 143.992 394.483C146.032 393.488 147.475 392.049 147.528 389.501C147.611 385.486 149.212 381.728 148.736 377.474C148.377 374.274 150.162 370.832 151.005 367.501C151.134 366.992 151.573 366.44 151.464 366.009C149.63 358.741 154.565 352.381 154.315 345.507C154.109 339.822 158.824 336.064 158.609 330.496C158.381 324.588 161.519 319.38 163.596 314.037C165.056 310.282 164.621 306.908 162.415 304.066C159.082 299.774 157.25 294.202 150.555 292.745C146.318 291.823 142.829 292.844 138.995 293.471C130.962 294.783 127.146 300.843 126.346 307.541C125.586 313.901 121.967 318.949 120.924 324.987C120.478 327.566 120.166 330 121 332.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M779 564.5C779.665 565.501 780.602 566.145 781.118 567.453C782.828 571.79 784.705 575.893 789.961 577.617C797.106 579.961 798.014 587.624 800.929 593.169C802.559 596.27 799.804 601.443 797.289 603.773C792.001 608.671 790.751 615.578 786.901 621.105C785.361 623.317 783.977 625.097 781.5 626" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M807.5 463.5C804.402 467.163 805.067 471.762 804.645 476.014C804.522 477.254 805.126 478.586 804.534 480.014C802.187 485.68 801.782 491.758 801 497.75" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M319 87.5C312.938 86.9266 308.743 90.5334 304.529 94.035C304.144 94.3552 304.164 95.6776 304 95.6768C295.272 95.6365 290.367 103.236 283.091 106.221C278.289 108.191 272.334 109.751 270.5 116" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M197.5 181.5C193.085 182.486 190.792 186.25 189.212 189.6C186.953 194.388 182.528 197.239 180.114 201.564C176.512 208.015 170.602 213.085 167.803 219.63C164.18 228.102 156.349 234.136 154.733 243.705C154.515 244.992 151.22 246.688 150.635 248.543C147.467 258.582 140.594 266.987 138.303 277.457C137.691 280.253 134.524 282.483 133.547 285.515C132.51 288.732 130.515 291.869 132 295.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M817 365.5C815.25 368.677 812.761 371.35 809.925 373.395C806.843 375.618 806.734 379.04 807.27 381.44C808.051 384.937 806.894 388.977 809.545 391.961C810.503 393.04 809.782 393.794 809.456 394.479C807.597 398.388 808.089 402.626 808.666 406.475C809.927 414.889 809.639 423.119 808.672 431.52C808.187 435.739 807.234 440.428 810 444.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M654.5 135C661.683 132.02 667.798 128.231 672.338 121.219C674.919 117.233 681.621 117.311 686.55 116.226C689.625 115.548 692.449 118.586 694.965 120.545C704.884 128.269 715.009 135.783 724.37 144.146C729.88 149.068 735.616 154.076 740.249 159.707C745.974 166.665 753.902 171.637 758.106 179.946C759.05 181.812 761.593 182.797 762.954 184.536C768.234 191.281 773.505 198.047 778.417 205.058C780.424 207.923 782.631 211.233 779.567 215.054C778.786 216.028 778.842 217.669 778.498 219C777.571 222.588 776.312 225.841 772.516 227.536C766.986 230.006 764.019 234.269 763.909 240.498C763.891 241.51 762.667 242.5 762 243.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M146.5 394C148.24 398.247 148.162 402.837 147.022 406.937C146.141 410.106 146.839 413.007 146.502 416C146.484 416.165 146.494 416.334 146.501 416.5C146.833 424.333 147.149 432.167 147.513 439.999C147.594 441.728 146.889 443.13 146 444.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M323 724.5C325.852 724.709 328.065 722.866 329.893 721.369C333.469 718.439 336.82 718.933 340.499 720.503C340.841 720.649 341.15 720.909 341.503 720.989C348.725 722.614 352.232 727.385 353.004 734.5C353.204 736.346 353.997 737.968 355 739.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M835 506C836.861 511.028 834.149 515.423 832.874 519.965C832.619 520.872 831.484 522.802 829.5 521.75" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M304 135.5C302.441 139.099 299.103 141.061 295.935 142.338C290.355 144.588 286.216 148.657 281.508 152.011C278.399 154.226 275.364 156.185 271.478 153.532C270.011 152.531 268.041 153.47 266.522 152.937C258.355 150.07 253.288 144.203 254.02 134.001C254.144 132.281 254.572 130.576 253.5 129" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M743 672.5C741.333 672 739.617 670.951 738.009 671.096C731.322 671.7 726.521 669.014 722.976 663.515C721.853 661.774 720.046 661.418 717.999 661.451C715.503 661.491 712.834 661.66 710.537 660.889C706.698 659.6 703.592 660.614 701.58 663.555C696.061 671.622 686.155 674.458 680.154 682.233C677.927 685.118 672.949 686.85 669.531 689.539C667.204 691.369 665.814 693.31 666.177 697.032C666.476 700.093 666.949 703.884 665 707" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M235.5 176.5C233.577 179.456 235.474 182.49 236.257 184.917C237.575 189.002 236.523 191.912 233.953 194.452C228.089 200.246 223.386 206.935 218.463 213.472C217.525 214.717 216.441 216.138 214.5 216" stroke="#F2DAC8" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M275 155.5C273.273 159.544 269.879 162.605 266.391 164.273C259.431 167.603 255.463 174.22 249.209 178.318C246.728 179.944 245.037 183.95 242.499 186.499C241.086 187.92 239.744 189.462 237.5 189.5" stroke="#F2DAC8" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M636.5 87.5C637.348 92.2464 637.556 97.1527 640 101.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M226 671C226.765 675.802 225.803 680.419 224.5 685" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M187.5 194.5C192 195.483 196.5 195.014 201 194.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M716.25 139C711.869 140.927 707.227 141.656 702.5 142" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M179 225C174.601 226.7 170.018 225.912 165.5 226" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M284 718C285.213 722.435 285.861 726.911 285 731.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M702 696C702.243 700.507 701.203 705.108 703 709.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M254 696C253.912 700.503 254.834 705.043 253.5 709.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M665 131C666.7 135.399 665.912 139.982 666 144.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M160.5 257C156.134 258.605 151.701 259.902 147 260" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M291 131C289.774 135.461 289.057 139.94 290.5 144.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M672 718C670.813 722.437 670.587 726.945 671 731.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M730 671C730.1 675.584 729.009 680.344 732 684.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M702.5 128C700.642 130.906 702.083 134.021 702.104 136.999C702.131 140.768 701.531 144.03 698.497 146.497C694.076 150.092 693.478 154.812 694.51 159.998C694.906 161.987 693.745 163.651 693.5 165.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M639.5 736.5C637.983 740.873 636.872 745.322 637 750" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M285.5 106.5C285.497 111.098 285.447 115.69 283.5 120" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M601 73C602.5 77.5833 604 82.1667 605.5 86.75" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M316.5 736.5C318.303 740.82 319.092 745.329 319 750" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M172.5 574.5C176.635 576.364 180.88 577.658 185.5 577" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M731.5 154C729.249 158.131 730.108 162.621 730 167" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M147.5 577.5C151.945 578.018 156.295 578.945 160.5 580.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M808.5 577.5C804.055 578.018 799.705 578.945 795.5 580.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M275.5 682.5C274.167 683 272.869 683.769 271.494 683.953C265.847 684.708 260.377 685.526 257.47 691.485C255.033 696.483 249.797 695.919 245.478 696.902C243.614 697.327 241.842 697.522 240.5 699" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M350.5 752C352.317 756.224 354.229 760.414 355 765" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M790.5 611.5C787.833 611.667 785.151 611.704 782.503 612.023C773.074 613.161 765.128 606.746 764.015 598.498C763.799 596.902 763.197 595.568 762 594.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M777.5 225C781.723 226.763 786.146 225.93 790.5 226" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M178.5 613C174.294 611.398 169.892 611.495 165.5 611.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M237.5 648.5C236.665 652.807 233.871 656.813 235.5 661.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M200.5 643.5C196.177 643.053 191.892 641.643 187.5 643" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M605.5 751.5C604.031 755.792 601.915 759.884 601.5 764.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M240.5 139C244.645 140.818 248.913 142.1 253.5 142" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M262 152.5C261.036 156.877 261.197 161.21 262.5 165.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M755.5 194.5C759.833 195.169 764.167 195.362 768.5 194.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M766 605.5C761.735 606.725 757.444 607.606 753 606.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M224.5 203.5C220.287 201.604 215.895 202.037 211.5 202.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M719 648.5C719.92 652.794 721.125 657.045 721 661.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M355 73C353.833 76.6667 352.791 80.3796 351.456 83.9835C350.584 86.3355 350.9 88.3738 351.974 90.513C352.693 91.9448 353.434 93.4563 353.688 95.0102C354.076 97.3876 355.11 98.7503 357.477 99.5674C360.813 100.719 363.822 102.572 366 105.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M290.5 694C289.807 698.366 289.433 702.721 291 707" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M248.5 659.5C245.561 662.14 241.8 660.658 238.466 661.334C236.399 661.753 234.104 661.92 233.09 663.556C229.067 670.045 222.957 671.534 216 671.546C214.999 671.548 214 672.167 213 672.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M604.5 727C604.855 731.593 602.679 735.477 601 739.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M158.5 513C155 511.667 151.292 510.698 148.078 508.863C146.153 507.764 144.635 507.921 143.015 508.539C137.057 510.814 131.413 510.87 125.962 507.054C124.72 506.185 123 506 121.5 505.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M693.5 673C694.897 677.167 695.236 681.333 693.5 685.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M262.5 673C261.862 677.148 261.274 681.298 262 685.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M681.5 682C682.568 683.197 683.892 683.861 685.5 684.005C691.384 684.531 696.447 686.769 699.433 692.038C702.021 696.602 706.641 695.862 710.529 696.89C712.356 697.373 714.158 697.522 715.5 699" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M522.5 749C523.638 752.615 527.113 754.109 529.613 756.375C531.474 758.06 532.675 759.715 532.442 761.994C531.88 767.495 533.956 771.507 538.476 774.536C540.127 775.643 541.5 777.167 543 778.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M758 181.5C755.795 183.93 756.311 187.161 755.515 190.004C753.185 198.323 747.065 203.12 738.517 202.322C735.977 202.085 734.129 202.92 732 203.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M391.5 62C391.719 65.9542 388.879 68.7498 387.305 71.9026C385.898 74.721 385.718 77.0383 387.046 79.4751C389.848 84.6169 388.947 89.4838 385.895 93.928C384.605 95.8063 384.538 97.5406 384.5 99.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M203 606.5C198.709 607.718 194.585 606.854 190.5 605.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M796 257.5C800.036 258.983 804.268 259.239 808.5 259.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M844.5 391C841.201 392.157 838.616 394.404 836.572 397.055C834.677 399.512 832.265 400.829 829.515 400.404C822.96 399.389 818.591 402.779 814.52 407.019C813.33 408.259 812.041 409.277 810.5 410" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M164 531.5C162.461 532.71 161.257 534.195 160.506 536.003C156.713 545.138 146.457 547.869 138.07 543.853C136.146 542.932 134.459 542.538 132.5 542.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M811 547C811.992 551.783 815.55 555.068 818 559" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M527 55C527.757 59.9685 532.17 63.0734 533.5 67.75" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M768.5 643.5C764.167 643.164 759.833 641.771 755.308 643.208C754.885 642.925 754.015 642.601 753.527 641.979C748.332 635.351 741.247 634.268 733.497 634.97C732.851 635.029 732.167 634.667 731.5 634.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M634 113.5C634.976 117.617 637.018 121.564 636 126" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M721 177C721.503 181.354 719.631 185.328 719 189.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M570 763.5C567.824 767.582 564.911 771.31 564 776" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M386 763.5C388.598 767.379 390.754 771.472 392 776" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M155 244.5C156.873 245.857 156.865 248.23 157.969 250.019C160.177 253.595 161.05 257.484 165.799 259.896C170.175 262.118 173.923 261.808 177.987 261.374C180.169 261.142 182.316 260.937 184.5 261" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M743 165.5C741.27 166.4 739.382 166.334 737.508 166.564C733.342 167.073 728.728 166.693 726.003 171.002C723.065 175.646 718.494 176.584 713.5 176.482C711.578 176.443 709.73 176.6 708 177.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M487.5 752C488.46 754.906 491.021 756.488 493.044 758.455C495.664 761.004 496.962 764.1 496.403 767.484C495.531 772.756 498.203 776.278 501.561 779.435C503.4 781.164 505.541 782.523 506.5 785" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M213 165.5C214.458 166.024 215.862 166.539 217.5 166.547C222.961 166.571 228.233 167.287 231.49 172.506C234.137 176.748 238.58 175.961 242.508 176.436C244.383 176.662 246.27 176.6 248 177.5" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M792 530.5C793.167 532.333 794.809 534.023 795.414 536.026C797.562 543.127 803.984 543.938 809.524 545.934C812.551 547.026 815.081 544.357 817.943 543.736C819.671 543.36 821.637 542.584 823.5 542" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M755 644C755.467 648.295 755.889 652.6 758 656.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M304 702C302.667 702.667 301.4 703.591 299.989 703.956C293.578 705.61 288.668 709.021 285.443 714.969C283.503 718.548 279.273 718.606 275.955 719.883C274.387 720.487 272.711 720.684 271.5 722" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M412 57.5C413.535 61.298 417.455 62.7073 420.108 65.3934C422.351 67.6642 423.625 70.0178 423.445 72.9966C423.195 77.1101 424.573 80.0526 427.917 82.608C430.101 84.2761 432.658 85.9942 433.5 89" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M784 574.5C779.923 575.78 775.961 577.64 771.5 577" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M126 315.5C127.667 317.667 129.348 319.822 130.997 322.002C136.355 329.081 143.861 330.844 152.011 327.022C154.107 326.039 156.333 325.333 158.5 324.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M224 634.5C222.397 635.301 220.626 635.209 219.008 634.949C211.647 633.767 206.542 637.627 202.065 642.559C200.293 644.511 200.328 647.469 200.103 650.009C199.911 652.166 199.238 654.06 198.5 656" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M170 292C165.898 292.816 161.753 293.487 158 295.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M544 57.5C542.325 61.4914 537.953 62.7628 535.454 65.9643C534.235 67.5258 532.495 68.9113 532.808 70.9913C533.892 78.2046 528.892 81.895 524.513 86.0139C523.637 86.8382 522.33 87.4422 522.5 89" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M214.5 622.5C212.417 626.229 211.36 630.215 211.5 634.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M652.5 702C653.558 703.629 655.453 704.07 657.02 704.407C662.779 705.646 667.051 708.412 669.56 713.973C671.51 718.294 676.29 718.445 680.043 719.887C681.613 720.49 683.289 720.684 684.5 722" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M742 622.5C744.25 626.205 744.248 630.379 744.5 634.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M765 232C761.066 230.974 757.118 230.06 753 230.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M203 231C198.965 230.919 194.897 230.429 191 232" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M320 712.5C319.098 716.2 321.051 719.527 321.748 722.949C322.08 724.577 321.902 726.037 321.392 726.939C318.303 732.405 315.723 738.571 308.005 739.082C307.132 739.14 306.333 740.333 305.5 741" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M693.5 152C689.17 152.037 685.258 153.504 681.5 155.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M839.5 352.5C835.326 355.088 833.109 359.448 830 363" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M834.5 332C832.526 332.102 831.11 330.898 829.434 330.148C825.238 328.27 821.191 325.799 815.91 328.31C812.039 330.15 807.49 329.293 803.479 327.038C801.603 325.983 799.5 325.333 797.5 324.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M322 113.5C320.952 117.436 319.388 121.287 320 125.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M429.5 55C427.858 59.403 424.735 62.9427 422.5 67" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M533.5 771C531.569 775.128 527.561 778.13 527 783" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M459.5 63.75C459.671 66.8331 459.057 69.9636 460.007 72.9978C460.598 74.8861 459.258 76.0669 458.522 77.5112C456.81 80.8682 453.397 83.1364 452.5 87" stroke="#F2DAC8" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M175 212.5C177.837 214.626 177.768 218.351 178.628 221.116C179.686 224.512 181.468 226.73 184.062 227.857C188.558 229.81 191.052 233.318 191.773 237.539C192.253 240.347 194.024 241.989 195 244.25" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M571.5 738.5C571.054 743.009 569.27 746.96 566.5 750.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M601.5 99C602.645 102.796 604.796 106.329 604.5 110.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M374.5 66.5C377.105 70.2537 381.274 71.8168 385 74" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M564.5 62C564.932 66.5035 567.746 69.868 570 73.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M158.5 542C162.244 543.461 165.67 545.967 170 545.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M177 564.5C176.335 565.501 175.364 566.105 174.888 567.461C173.32 571.92 171.351 576.021 166.034 577.615C161.868 578.863 159.579 582.809 158.199 586.573C157.38 588.809 156.171 590.586 155 592.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M636 712.5C636.698 716.666 635.271 720.371 633.5 724" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M145 547C143.781 551.227 141.67 554.926 138.5 558" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M798.5 296C796.646 299.693 795.245 303.668 792 306.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M354.5 99C353.446 102.819 351.339 106.364 351.5 110.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M418 746.5C419.272 750.839 421.826 754.453 424.5 758" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M622.5 719C625.253 720.994 627.881 723.13 631.495 723.541C634.892 723.927 635.503 727.386 636.312 729.57C638.349 735.071 642.069 737.823 647.486 739.06C648.581 739.31 649.5 740.333 650.5 741" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M122 400.5C118.423 403.289 115.319 406.73 111 408.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M496.5 774.5C493.972 778.429 490.016 781.366 488.5 786" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M304.5 96C305.212 96.7016 305.967 97.1941 306.98 97.5559C313.048 99.7241 318.317 102.806 320.539 109.487C322.007 113.904 326.675 114.085 330.033 115.94C331.121 116.54 332.16 117.093 333 118" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M117 352.5C119.942 356.05 124.325 358.364 126 363" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M145.5 428C142.021 430.838 137.567 432.593 135.5 437" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M617 80C615.37 82.2057 612.677 82.9597 610.438 83.8421C605.566 85.7618 603.69 89.8729 602.715 94.0502C601.929 97.4216 600.294 98.8411 597.518 100.042C594.644 101.287 591.953 102.921 590 105.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M503.5 751C501.733 755.023 499.147 758.462 496 761.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M845 408.5C840.47 406.834 837.573 402.823 833.5 400.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M820.5 437C818.28 432.762 814.471 430.291 810.5 428" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M423 771.5C425.107 775.108 428.328 778.109 429 782.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M506 52.5C503.807 56.5183 500.229 59.4152 497.5 63" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M817 280C814.293 283.348 812.311 287.123 810.5 291" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M816.5 473C812.904 474.974 810.037 478.407 805.5 478.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M400 95.5C397.3 91.6779 393.059 89.7611 389.5 87" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M797.5 542C793.994 543.673 790.591 545.666 786.5 545.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M538 746.5C536.782 750.798 534.279 754.354 531.5 757.75" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M452.5 751C454.203 755.069 456.88 758.443 460 761.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M384.5 738.5C384.806 742.655 386.504 746.241 389 749.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M651.5 96C650.6 97.1338 649.327 97.5827 648.004 98.0122C642.093 99.9317 637.694 103.504 635.49 109.496C634.299 112.731 631.373 113.75 628.541 115.086C626.477 116.059 623.994 116.465 622.5 118.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M450 52.5C452.833 56 455.667 59.5 458.5 63" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M566.5 87C563.093 89.747 558.898 91.5663 556.5 95.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M834 438C837.916 440.515 840.194 444.941 844.5 447" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M532 80.5C534.043 84.2399 537.538 87.1215 538.5 91.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M424 80.5C421.957 84.2399 418.462 87.1215 417.5 91.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M139 365.5C141.806 368.694 143.939 372.561 148 374.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M467.5 52C466.157 56.3266 462.535 59.025 460 62.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M810.5 393.5C814.159 395.566 817.916 397.501 820.5 401" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M139.5 473C142.629 475.542 146.297 477.054 150 478.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M154.5 498C150.702 500.214 148.527 503.795 146.5 507.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M339.5 80C342.65 82.6127 346.047 84.7926 350 86" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M808.5 508C805.295 510.189 802.141 512.495 798 512.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M172 263C173.183 266.73 174.48 270.406 177 273.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M122 438C118.597 440.752 116.374 444.891 112 446.5" stroke="#F2DAC8" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M784 263C782.817 266.73 781.52 270.406 779 273.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M460 775.5C462.555 778.96 466.249 781.608 467.5 786" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M460.5 76C463.51 79.0589 466.785 81.9051 468.5 86" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M146.5 330.5C148.321 334.379 151.308 337.276 154.5 340" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M809.5 330C808.434 334.409 804.37 336.569 802 340" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M138.5 279C141.423 282.656 143.579 286.76 145.5 291" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M822 511C823.665 514.659 826.306 517.599 829 520.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M134 511C132.519 514.794 129.825 517.696 127 520.5" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M670.5 106C670.157 110.811 670.887 115.469 672.5 120" stroke="#F2DAC8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -1,241 +0,0 @@
<svg width="956" height="832" viewBox="0 0 956 832" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M194 418.75C206.167 418.833 218.342 419.196 230.494 418.804C233.536 418.706 236.499 419.089 239.5 419.085C313.167 418.976 386.833 419 460.5 419C504.833 419 549.167 419 593.5 419C599.833 419 606.167 419.063 612.5 418.986C623.667 418.852 634.845 419.455 646 418.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M484.5 412C519.333 377.333 554.162 342.662 589.006 308.006C593.936 303.102 598.943 298.276 604.019 293.311C592.96 282.756 580.35 280.053 565.994 285.986C560.506 288.255 556.572 292.45 552.5 296.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M478 419.5C478 492.5 478 565.5 478 638.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M428.75 136.5C428.833 152.833 428.925 169.167 428.996 185.5C429.029 192.926 430.074 193.996 437.5 193.999C450.833 194.003 464.167 194 478 194C478 202.327 477.894 210.665 478.025 219C478.224 231.666 477.478 244.338 478.435 257.005C478.697 260.473 478.024 264 478.022 267.5C477.989 311.167 478.008 354.833 477.989 398.5C477.987 403.362 478.286 408.186 478.943 413.008C479.187 414.798 479.343 416.728 478.5 418.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M430.5 323.5C425.229 318.008 419.664 312.856 411.992 311.035C400.897 308.402 390.737 310.234 381.99 317.989C381.02 318.85 379.917 319.562 379.142 320.143C409.833 350.834 440.416 381.417 471 412" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M485 426C521 461.667 557 497.333 593 533" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M767.5 370C750.008 368.968 732.5 369.71 715 369.516C708.932 369.448 708.016 370.385 708.011 376.5C707.986 404.5 707.987 432.5 708.011 460.5C708.016 466.582 709.418 467.979 715.5 467.989C732.833 468.02 750.167 468 767.5 468" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M471 426C435.667 461.333 400.333 496.667 365 532" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M527.5 138C527.5 154.333 527.4 170.668 527.555 186.999C527.609 192.623 524.538 193.98 520 193.99C506.167 194.018 492.333 194 478.25 194C478.25 180.002 478.25 166.001 478.25 152" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M333 273C343.498 262.666 345.597 250.395 340.405 237.037C335.854 225.326 326.601 217.924 314.461 216.294C303.574 214.832 292.614 215.979 285.768 227.36C284.337 229.74 280.6 230.97 278.978 233.988C267.829 254.727 281.674 279.591 302.974 283.153C314.584 285.095 323.705 281.421 332 274" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M193 513.75C203.833 513.833 214.667 513.969 225.5 513.972C229.36 513.974 230.596 511.708 230.552 507.999C230.411 496.168 231.085 484.295 230.313 472.512C229.707 463.284 230.921 454.181 230.625 444.996C230.33 435.85 230.894 426.637 230.767 417.503C230.587 404.502 231.397 391.445 230.273 378.52C229.582 370.58 230.902 362.844 230.572 354.997C230.244 347.177 230.503 339.333 230.499 331.5C230.495 324.794 229.733 324.046 223 323.998C211.499 323.916 199.991 324.313 188.5 323.5" stroke="black" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M323.75 173.5C323.462 176.144 325.437 177.479 327.01 178.99C347.662 198.838 368.349 218.651 388.991 238.509C395.446 244.719 402.394 250.467 407.898 257.579C409.039 259.054 410.026 258.09 411 258.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M234.75 265.5C234.661 267.72 236.048 269.092 237.488 270.512C251.841 284.659 266.128 298.872 280.512 312.987C291.617 323.884 302.926 334.574 313.897 345.602C315.497 347.21 317.227 347.677 319 348.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M525.5 696C525.5 687 525.544 678 525.483 669C525.448 663.958 524.039 662.454 519.001 662.535C506.001 662.742 492.988 662.754 480 662.755C466.345 662.756 452.66 662.929 439.003 662.429C433.443 662.226 430.928 664.259 430.976 670.5C431.061 681.5 431 692.5 431 703.5" stroke="black" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M441.5 524.5C441.401 526.052 441.772 527.585 440.531 529.027C431.352 539.685 419.954 546.975 405.98 548.291C391.329 549.671 377.434 546.624 366.489 535.511C366.076 535.092 365.5 534.833 365 534.5" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M363.5 460.5C351.157 473.689 346.057 489.053 349.495 507.001C351.341 516.636 355.57 525.017 362.5 532" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M573 692C573 677 573.011 662 572.995 647C572.988 640.247 571.746 638.832 565.002 639.056C557.826 639.294 550.593 637.997 543.459 640.377C540.589 641.335 537.751 638.822 534.498 638.873C517.169 639.143 499.833 639 482.5 639C462.5 639 442.5 638.995 422.5 639.006C419.962 639.008 417.306 638.579 415.035 640.055C414.306 640.528 413.575 640.676 413.016 640.458C405.489 637.515 397.667 639.429 389.996 639.077C384.507 638.825 383.519 640.065 383.51 645.5C383.482 660.833 383.5 676.167 383.5 691.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M732 419C703.667 419 675.333 419 647 419" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M565 452.5C582.403 454.977 602.281 442.506 603.233 419.51C604.01 400.757 587.608 384.055 568.999 384.988C567.171 385.079 565.333 385 563.5 385" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M354 544.5C360.488 549.998 363.456 557.45 363.837 565.508C364.321 575.753 360.496 584.797 352.916 591.91C352.035 592.737 350 592.333 348.5 592.5" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M682 384.75C670.839 384.987 661.192 388.517 653.993 397.494C648.581 404.242 646.538 411.63 646.764 420.506C647.158 436.022 655.699 445.014 668.57 450.846C673.568 453.111 679.33 453.873 685 452.5" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M351.5 542C342.115 530.86 321.68 530.153 309.492 539.991C307.282 541.775 305.677 544.27 303 545.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M378 322.5C370.359 330.22 367.744 339.147 369.818 350.035C371.247 357.53 375.518 363.074 379.5 369" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M604 340.5C614.625 329.157 616.727 315.87 610.52 302.491C609.222 299.693 607.4 297.388 605 295.5" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M286.5 228.5C301.333 243.167 316.167 257.833 331 272.5" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M408 259C406.57 263.012 403.272 265.725 400.395 268.386C388.091 279.769 376.959 292.292 365 304" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M363 306C350.667 318.333 338.259 330.594 326.066 343.064C323.754 345.429 320.462 346.795 319 350" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M716.5 253.5C714.015 253.169 712.277 254.046 710.433 255.934C699.234 267.399 687.695 278.534 676.622 290.117C674.53 292.306 670.918 292.647 670 296" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M642.5 185C630 197.333 617.494 209.661 605.008 222.008C603.63 223.371 602.685 225.009 602.5 227" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M623 378.5C622.917 404.167 622.833 429.833 622.75 455.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M228.5 466C215.5 466 202.5 466 189.5 466" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M316 579C306.5 569.5 297.021 559.978 287.491 550.509C282.686 545.735 281.311 545.732 276.509 550.509C265.48 561.48 254.5 572.5 243.5 583.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M228.5 370.5C215.5 370.5 202.5 370.5 189.5 370.5" stroke="black" stroke-width="12" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M613 623C616.348 624.237 617.038 627.867 619.396 630.109C629.473 639.686 639.092 649.744 649.066 659.432C650.961 661.272 651.831 663.015 651.5 665.5" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M649 587C658.167 577.667 667.19 568.186 676.549 559.051C683.013 552.742 683.211 554.189 687.989 559.011C698.856 569.977 709.667 581 720.5 592" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M318 581.5C329.022 592.327 340.714 602.514 350.768 614.969C338.591 628.722 325.395 640.726 313 653.5" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M801.5 244C805.504 247.861 808.474 252.316 808.936 258.005C809.048 259.379 809.849 260.052 810.466 261.022C811.907 263.287 813.369 265.576 814.461 268.017C817.571 274.968 820.368 282.061 823.575 288.965C824.635 291.247 824.575 293.276 824 295.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M646.5 589C637.5 598.167 628.498 607.332 619.501 616.501C617.574 618.466 615.371 620.221 614.5 623" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M686 115.5C684.109 112.022 681.01 109.901 677.484 108.541C668.87 105.22 662.793 96.9794 653 96C650.789 92.3703 647.348 90.1492 643.477 89.0855C635.241 86.8231 628.701 80.6137 620.009 79.4306C616.524 78.9561 614.562 75.1355 610.999 74.5056C601.541 72.8336 593.283 67.169 583.506 66.4197C579.604 66.1206 577.029 62.4447 572.509 62.2721C563.005 61.9091 554.356 56.487 544.494 56.8438C541.378 56.9565 538.677 54.2391 534.995 54.352C525.615 54.6397 516.492 51.6757 506.999 51.7219C502.978 51.7415 498.724 50.1147 494.505 50.5466C486.006 51.4169 477.532 48.681 468.957 50.8276C465.9 51.5928 462.438 49.9775 458.99 50.4186C451.69 51.3524 444.182 51.1437 437.046 52.7116C431.008 54.0384 424.74 52.0894 419.021 54.5499C410.999 58.0017 401.831 56.1931 393.959 60.4236C390.338 62.3695 385.782 60.3447 381.991 62.4843C374.176 66.8952 364.526 66.2355 356.977 71.4672C356.146 72.0435 354.947 72.5606 354.009 72.4342C348.996 71.7588 344.943 74.2275 341.069 76.6116C338.331 78.2962 335.662 79.5023 332.51 80.0577C328.616 80.744 325.297 83.0094 322.051 85.0799C318.374 87.4251 319.071 91.9577 318.171 95.5429C317.652 97.6113 317.243 99.725 316.5 101.75" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M399.5 742.5C398.84 744.173 397.503 745.103 396.022 746.034C391.88 748.639 388.05 751.384 387.414 756.99C386.876 761.741 383.415 764.589 379.544 767.068C377.695 768.252 375.038 768.746 374.5 771.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M601 226.75C610 235.833 618.997 244.92 628.002 253.998C630.338 256.352 632.614 258.779 635.5 260.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M352 545C340.667 556.333 329.333 567.667 318 579" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M647 250C643.48 254.146 639.959 258.293 636.229 262.686C647.294 272.025 657.068 284.632 669.5 294.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M802.5 498.25C799.923 498.174 799.031 499.895 798.501 502C798.252 502.986 798.152 504.131 798.138 505.002C797.995 513.608 791.937 520.537 791.515 529.001C791.397 531.365 788.845 532.023 788.354 534.471C786.409 544.167 780.895 552.597 777.95 561.984C777.193 564.397 774.093 565.372 773.518 568.004C771.568 576.919 764.707 583.44 761.932 591.978C760.879 595.215 756.597 595.981 755.466 599.489C752.797 607.773 744.983 612.85 741.91 620.966C741.167 622.929 738.265 623.056 736.966 624.977C732.111 632.164 726.353 638.608 720.624 645.109C717.672 648.458 713.638 650.409 710.955 653.966C709.529 655.858 707.364 657.24 707.5 660" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M665.5 693.5C660.856 693.945 657.221 696.572 654.063 699.567C648.664 704.687 640.502 705.676 636 712C629.623 711.383 625.901 716.499 620.881 718.733C615.571 721.098 610.216 724.65 604.922 725.534C596.613 726.922 590.493 733.5 582 733.545C580.999 733.55 579.898 733.997 579.017 734.529C574.695 737.136 569.922 738.212 564.997 738.416C562.933 738.501 561.003 739.083 559.579 740.109C557.213 741.812 554.698 742.189 552.003 742.527C547.737 743.062 543.6 744.032 539.427 745.248C535.241 746.468 530.244 744.716 526.04 746.59C519.094 749.689 511.385 747.006 504.484 749.962C502.526 750.801 500.456 749.506 498.531 749.258C493.488 748.607 489.01 751.823 483.986 750.556C479.179 749.344 474.308 750.707 469.498 750.749C465.597 750.782 461.588 749.017 457.504 749.535C452.356 750.187 447.235 747.818 442.538 748.343C434.006 749.297 426.433 743.408 418 746C411.178 741.485 402.27 744.411 395.43 739.599C393.556 738.28 390.751 737.399 388.515 737.639C380.643 738.483 374.824 732.109 367.004 732.037C364.501 732.014 360.907 728.788 357.571 727.337C355.436 726.408 353.533 726.633 351.5 726.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M595 535C600.18 540.321 605.741 545.272 610.381 551.208C614.027 547.36 617.442 543.608 621.041 540.041C622.208 538.884 623.561 537.622 625.5 537.75" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M111.5 391.5C107.594 395.704 109.78 400.852 109.753 405.501C109.741 407.493 109.997 409.392 109.64 411.523C108.983 415.441 108.99 419.503 109.048 423.499C109.11 427.783 112.352 429.719 115.405 432.12C119.664 435.47 123.944 438.448 129.485 437.417C137.649 435.897 141.863 442.185 146.757 446.289C148.872 448.063 149.415 453.223 148.751 456.449C147.705 461.534 150.508 465.474 151.017 469.998C151.056 470.346 151.536 470.715 151.471 470.993C149.487 479.379 154.983 486.796 154.543 495.002C154.321 499.132 158.391 501.795 158.561 505.997C158.894 514.212 164.159 521.248 164.467 529.501C164.501 530.431 164.951 530.863 165.443 531.542C168.24 535.4 170.755 539.414 170.518 544.501C170.442 546.142 171.678 547.222 172.437 548.536C173.812 550.914 175.574 553.009 176.121 555.978C176.935 560.398 180.827 563.785 182.139 567.623C185.073 576.213 191.229 582.962 194.111 591.462C195.119 594.435 198.798 595.641 200.108 598.957C203.335 607.127 210.838 612.704 214.016 620.994C214.786 623.003 217.363 622.421 218.621 624.424C223.357 631.969 229.736 638.246 235.437 645.052C238.745 649.001 243.674 651.021 246.558 655.462C250.859 662.083 257.269 667.08 263.263 671.655C272.339 678.583 280.343 687.254 290.241 692.549C297.096 696.217 302.878 701.342 309.902 704.705C316.467 707.848 322.271 712.515 329.464 714.622C331.205 715.133 332.5 717.167 334 718.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M224 153C222.5 153.833 220.67 154.358 219.554 155.551C212.944 162.615 206.462 169.799 200.024 177.021C198.166 179.106 197.407 181.347 199.401 184.072C200.174 185.129 199.646 187.051 200.035 188.491C201.215 192.856 202.587 197.181 207.006 199.489C210.685 201.41 212.039 204.532 212.025 208.5C212.022 209.499 212.081 210.638 212.541 211.478C215.723 217.293 212.667 221.812 208.9 225.395C202.76 231.235 199.83 239.185 194.97 245.843C189.88 252.815 186.073 261.277 182.117 269.311C178.813 276.02 176.594 283.402 172.01 289.508C169.466 292.897 171.142 297.488 168.629 301.09C167.264 303.047 166.675 305.561 164.5 307" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M503 87.5C499.391 88.9334 495.547 89.2558 492.047 87.88C488.652 86.5452 485.338 86.5054 482.015 87.0856C479.11 87.5927 476.334 87.5218 473.5 87.0026C472.502 86.8199 471.337 86.2492 470.526 86.5655C463.517 89.2958 456.161 87.7738 448.998 88.4816C446.176 88.7605 443.335 88.9323 440.5 88.9785C435.303 89.0631 430.454 90.8189 425.528 92.1058C424.125 92.4723 422.663 92.7464 421.531 92.3999C418.581 91.4973 416.162 92.908 413.472 93.3197C404.094 94.7552 395.371 98.7927 385.978 99.7943C384.752 99.9251 383.459 100.127 382.542 100.584C377.6 103.043 372.438 104.514 367.041 105.689C363.925 106.368 361.619 109.768 358 109.993C350.988 110.429 345.932 115.814 339.468 117.366C334.959 118.448 331.947 121.705 328.012 123.526C322.45 126.101 316.636 127.934 311.808 132.287C309.121 134.711 304.707 136.609 300.458 133.558C299.231 132.678 297.528 132.201 295.995 132.058C291.994 131.686 289.304 129.85 287.991 126.003C286.365 121.236 282.223 119.307 277.975 118.089C271.272 116.167 264.539 115.594 259.512 122.01C255.774 126.781 249.508 128.287 245.593 132.585C239.965 138.765 232.502 142.74 226.967 148.971C224.9 151.298 224.136 153.393 225.392 156.543C226.697 159.819 226.022 163.491 226 167" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M745 203C743.616 207.33 743.891 211.992 742.111 216.296C741.389 218.041 742.851 220.248 744.081 221.415C749.372 226.432 752.737 232.662 755.991 239.005C756.228 239.468 756.179 240.253 756.523 240.463C763.724 244.863 764.093 253.855 769.415 259.579C771.857 262.205 770.893 266.696 773.508 269.493C779.114 275.487 779.413 284.266 784.556 290.453C785.686 291.811 785.538 292.946 785.708 294.477C785.986 296.991 786.287 299.844 788.02 301.984C793.24 308.431 791.553 317.668 797 324C795.735 327.752 796.702 331.344 798.57 334.458C802.854 341.597 801.075 350.212 804.743 357.627C806.35 360.876 803.903 365.442 805.334 369.558C806.029 371.557 806.187 373.612 808 375" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M487.5 86C489.405 81.8772 492.642 78.8874 495.997 75.4958C498.654 79.215 501.104 82.5884 503.49 86.0067C505.093 88.3025 507.581 88.6462 510.006 88.9548C511.81 89.1844 513.667 88.9913 515.5 89.0017C520.693 89.0311 525.559 90.7629 530.472 92.1033C531.878 92.4869 533.337 92.7464 534.469 92.3998C537.419 91.4973 539.869 93.0104 542.522 93.3027C552.109 94.3594 560.731 99.5314 570.5 99.5001C570.667 99.4995 570.876 99.4335 570.994 99.5095C577.427 103.672 585.325 103.987 591.996 107.507C595.461 109.335 598.941 111.067 603 111.001C603.333 110.995 603.768 110.861 603.985 111.02C609.784 115.267 616.867 116.934 622.995 120.509C624.031 121.113 624.917 122.058 626.013 122.464C634.675 125.678 642.147 131.209 650.524 134.946C652.863 135.989 653.965 138.335 656.025 139.453C663.782 143.665 670.488 149.461 678.068 153.884C680.624 155.376 681.769 157.97 684.022 159.466C691.963 164.741 698.42 171.793 705.931 177.589C708.209 179.347 709.235 182.811 711.58 184.381C718.99 189.339 723.567 197.081 730.302 202.736C732.848 204.875 733.746 209.253 736.432 212.065C737.968 213.672 739.2 215.458 741.5 216" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M634 236.5C640.833 243 647.824 249.347 654.398 256.1C656.215 257.967 658.424 259.409 660 261.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M606 522.5C598.5 530 590.902 537.406 583.569 545.066C581.74 546.978 579.985 547.831 577.5 547.5" stroke="black" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M478.5 663.5C477.557 672.986 478.177 682.5 478 692" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M581.5 66.5C579.634 70.2919 575.378 70.9913 572.426 73.41C568.986 76.2293 566.466 85.9854 568.441 90.0289C569.915 93.0464 572.042 95.8879 572 99.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M468.5 752C467.985 754.321 466.052 755.584 464.459 756.953C460.385 760.455 458.975 764.832 459.507 769.999C459.776 772.61 459.56 774.955 457.024 776.538C456.365 776.95 455.922 777.789 455.512 778.507C450.967 786.45 443.875 787.17 436.012 785.201C432.207 784.247 428.394 783.833 424.515 783.375C413.815 782.11 403.175 780.386 392.964 776.598C390.547 775.702 387.632 777.187 384.994 776.014C375.579 771.827 365.062 770.96 355.794 765.875C353.315 764.515 348.91 764.534 345.516 763.451C342.845 762.599 340.231 761.436 338.5 759" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M433.5 749C432.077 752.463 429.078 754.646 426.402 756.883C424.279 758.659 423.253 760.508 423.542 762.995C424.236 768.945 420.923 772.532 416.486 775.478C414.656 776.693 413.087 778.087 412 780" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M488.5 52C489.167 53.3333 489.501 55.0754 490.554 55.9332C497.05 61.2207 497.335 68.1064 496 75.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M557 743C557.782 745.483 560.261 746.171 562.058 747.416C565.545 749.831 568.186 752.314 568.609 756.99C569.117 762.595 573.787 765.2 577.964 768.053C579.286 768.956 581.507 769.159 581.5 771.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M478.5 639.5C477.651 647.152 478.112 654.832 478 662.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M148 463C145.005 465.005 142.674 467.668 140.49 470.492C138.991 472.431 136.995 473.838 134.508 473.449C127.593 472.367 123.997 476.758 120.483 481.487C119.429 482.904 118.167 484.167 117 485.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M316 581C308.5 588.333 301 595.667 293.5 603" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M496 259C482.5 259 469 259 455.5 259" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M806 359C809.659 358.578 811.624 361.854 814.362 363.268C817.404 364.838 820.253 365.172 822.956 364.355C826.949 363.15 829.987 363.1 833.669 365.766C835.809 367.315 838.212 369.071 840.955 370.117C844.56 371.491 844.87 375.759 844.756 378.49C844.429 386.285 847.188 393.845 846.347 401.483C845.6 408.271 847.539 414.819 846.986 421.499C846.678 425.217 847.142 429.346 842.021 430.586C841.043 430.822 840.354 432.189 839.497 432.996C835.086 437.151 829.87 438.505 824.007 437.216C822.028 436.781 820.387 436.937 818.995 438.496C818.525 439.023 818.089 439.698 817.486 439.97C810.777 442.992 807.099 447.893 807.481 455.501C807.667 459.211 806.619 463.273 810.986 465.526C811.585 465.835 812.109 466.43 812.483 467.011C815.658 471.951 820.184 473.952 826.001 473.801C831.183 473.665 832.513 478.704 835.481 481.52C836.761 482.734 837.833 484.167 839 485.5" stroke="black" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M477.5 236C470.167 236 462.833 236 455.5 236" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M402 693.5C396.451 693.976 390.87 695.147 385.487 692.527C384.748 692.167 383.631 691.762 383.031 692.062C376.032 695.561 368.713 693.659 361.5 693.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M402 670.5C400.397 671.301 398.664 671.079 397.002 670.973C385.174 670.22 373.318 671.738 361.5 670.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M456.5 615.5C468.321 614.473 480.169 615.35 492.001 615.019C493.671 614.972 495.397 614.699 497 615.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M497 592.5C493.88 591.448 490.653 591.959 487.502 592.054C477.169 592.366 466.819 591.426 456.5 592.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M554 670.5C559.635 671.745 565.35 670.958 570.998 670.882C578.829 670.778 586.687 671.623 594.5 670.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M497 693.5C491.309 694.172 485.583 694.804 480.033 692.903C478.949 692.532 477.791 692.265 477.031 692.575C470.269 695.331 463.357 693.659 456.5 693.5" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M803.5 499C804.667 500.5 805.866 501.976 806.994 503.504C811.554 509.678 819.807 511.127 827.059 508.676C835.735 505.743 839.263 500.306 839.062 491.499C838.928 485.571 842.58 480.424 843.149 474.514C843.376 472.16 843.408 470.11 842.5 468" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M110.5 430C109.075 435.548 108.443 441.091 111.031 446.485C111.639 447.752 111.187 448.794 111.111 450.007C110.819 454.712 110.907 459.409 112.414 464.028C113.091 466.1 114.227 467.273 115.986 468.274C119.202 470.105 122.333 472.083 125.5 474" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M150 359C146.341 358.578 144.189 361.725 141.679 363.287C138.565 365.225 135.594 365.24 133.069 364.312C128.775 362.733 125.592 363.58 121.911 365.857C119.652 367.255 117.588 368.999 115.065 370.142C112.04 371.513 111.927 375.069 111.541 378.005C110.747 384.047 110.055 389.376 116.232 394.334C121.094 398.238 125.102 401.359 131.509 400.572C134.334 400.225 136.565 401.914 138.532 403.969C140.654 406.186 142.531 408.742 145.5 410" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M845.5 430C846.948 435.167 847.221 440.345 845.486 445.495C844.595 448.139 844.938 450.846 845.049 453.498C845.377 461.309 843.866 467.94 835.518 471.049C833.727 471.715 832.167 473 830.5 474" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M125.5 522.5C125.361 526.153 125.834 529.734 127.528 532.986C131.156 539.95 131.217 548.309 135.206 554.875C139.63 562.16 140.168 571.112 146.247 577.732C148.021 579.664 147.392 584.409 149.578 586.932C155.757 594.064 157.377 603.848 164.22 610.777C166.493 613.079 167.165 617.784 169.445 621.039C170.901 623.117 171.991 625.393 174.75 626" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M554 693.5C559.691 694.172 565.421 694.816 570.968 692.906C572.225 692.473 573.586 692.212 574.462 692.589C580.706 695.278 587.145 693.667 593.5 693.75" stroke="black" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M451 785.5C455.318 788.874 460.345 787.795 464.965 787.037C467.441 786.631 469.639 786.398 472.002 786.993C472.825 787.201 473.69 787.553 474.496 787.466C483.335 786.52 492.398 788.778 500.933 787.151C509.108 785.593 517.817 787.799 525.5 783.501C527.497 782.384 529.308 784.114 531.533 783.66C542.079 781.508 552.883 780.682 563.05 776.625C565.207 775.765 568.229 777.158 570.459 776.381C578.234 773.673 586.262 771.663 593.91 768.763C599.546 766.625 605.161 764.837 610.985 763.436C613.71 762.78 615.78 760.676 618 759" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M831 315.5C834.932 319.358 835.531 324.637 835.659 329.509C835.711 331.486 835.902 333.345 836.588 334.963C837.966 338.211 839.029 341.485 838.972 345C838.87 351.342 842.435 356.795 843.141 362.984C843.46 365.777 843.566 368.164 842 370.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M113.5 468C110.875 473.037 113.318 477.976 114.792 482.403C116.034 486.127 116.447 489.77 116.999 493.5C117.514 496.979 117.847 500.549 120.036 503.473C121.053 504.831 120.719 506.006 120.601 507.508C120.216 512.416 121.694 516.906 124.442 521.039C125.115 522.05 125.589 522.151 126.5 521.75" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M830.5 522.5C830.476 527.452 829.82 532.191 827.038 536.524C823.94 541.349 825.411 547.831 822.346 552.397C817.156 560.131 816.004 569.662 810.201 577.156C807.852 580.19 808.141 585.007 805.647 588.602C804.387 590.417 803.392 592.281 801.5 593.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M133.5 327C130.167 328.667 126.937 330.607 123.471 331.923C120.02 333.232 118.428 335.515 117.986 338.998C116.887 347.653 114.887 356.114 112.565 364.518C112.004 366.552 112.554 368.736 114 370.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M194 593.5C193.377 594.614 192.601 595.584 192.46 596.996C191.758 604.02 187.89 608.852 181.459 611.398C179.496 612.175 179.027 613.447 178.508 615.003C177.338 618.502 177.709 622.443 175.111 625.591C174.524 626.303 175.194 628.206 175.553 629.485C175.762 630.233 176.504 630.83 176.999 631.5C182.667 639.166 187.534 647.642 194.235 654.262C200.379 660.332 205.806 667.1 211.595 673.373C218.438 680.787 226.032 687.349 233.242 694.247C237.962 698.764 242.197 704.511 248.103 707.281C256.424 711.185 261.059 720.365 270.7 722.256C271.611 722.434 272.63 725.546 274.504 726.491C283.785 731.171 291.763 738.222 301.567 741.818C304.376 742.848 304.983 745.641 307.494 746.517C315.761 749.398 323.637 753.211 331.459 757.082C334.992 758.83 337.786 758.156 341.03 756.56C347.392 753.431 352.666 749.531 354.005 742.001C354.696 738.114 358.638 737.735 361.147 736.248C362.998 735.151 364.403 733.766 366 732.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M781.5 212C786.565 213.424 787.926 218.03 789.639 222.047C790.801 224.773 791.775 227.493 794.016 229.482C796.952 232.089 798.203 235.717 799.966 239.018C801.722 242.306 800.107 245.401 799.013 248.504C797.104 253.92 794.714 258.32 788.627 260.811C784.726 262.408 781.498 261.249 777.996 261.419C775.851 261.523 773.667 260.833 771.5 260.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M777 613C778.112 617.016 778.171 621.411 780.577 624.947C781.803 626.748 780.838 628.394 780.343 629.425C778.96 632.308 777.075 635.048 774.943 637.449C771.845 640.937 769.249 644.793 766.352 648.381C759.841 656.444 753.643 664.853 745.542 671.551C742.539 674.034 741.479 678.163 738.06 680.584C732.469 684.543 728.443 690.572 722.85 694.274C715.634 699.05 711.188 706.86 702.663 710.393C698.325 712.191 695.254 717.602 690.487 719.973C687.425 721.495 684.814 723.344 682.349 725.852C679.933 728.311 677.081 730.766 673.014 731.145C670.73 731.359 668.794 733.315 666.977 734.975C663.824 737.856 660.231 739.959 656.01 741.04C651.89 742.096 649.68 746.153 645.557 747.656C639.14 749.994 632.852 752.755 626.915 756.359C622.961 758.759 618.269 759.307 613.983 756.022C609.895 752.889 604.322 751.404 603.427 745.01C602.762 740.262 598.575 738.309 595.007 735.99C593.302 734.882 591.667 733.667 590 732.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M786.5 292.5C787.333 292.5 788.296 292.224 788.98 292.543C795.599 295.629 802.053 295.307 808.514 292.027C811.298 290.613 813.981 292.617 816.448 293.216C825.255 295.354 830.994 304.3 830.545 313.502C830.439 315.67 828.781 316.836 827.889 318.438C826.282 321.324 824 323.833 822 326.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M135.5 401C137.652 397.942 140.709 396.085 143.992 394.483C146.032 393.488 147.475 392.049 147.528 389.501C147.611 385.486 149.212 381.728 148.736 377.474C148.377 374.274 150.162 370.832 151.005 367.501C151.134 366.992 151.573 366.44 151.464 366.009C149.63 358.741 154.565 352.381 154.315 345.507C154.109 339.822 158.824 336.064 158.609 330.496C158.381 324.588 161.519 319.38 163.596 314.037C165.056 310.282 164.621 306.908 162.415 304.066C159.082 299.774 157.25 294.202 150.555 292.745C146.318 291.823 142.829 292.844 138.995 293.471C130.962 294.783 127.146 300.843 126.346 307.541C125.586 313.901 121.967 318.949 120.924 324.987C120.478 327.566 120.166 330 121 332.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M779 564.5C779.665 565.501 780.602 566.145 781.118 567.453C782.828 571.79 784.705 575.893 789.961 577.617C797.106 579.961 798.014 587.624 800.929 593.169C802.559 596.27 799.804 601.443 797.289 603.773C792.001 608.671 790.751 615.578 786.901 621.105C785.361 623.317 783.977 625.097 781.5 626" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M807.5 463.5C804.402 467.163 805.067 471.762 804.645 476.014C804.522 477.254 805.126 478.586 804.534 480.014C802.187 485.68 801.782 491.758 801 497.75" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M319 87.5C312.938 86.9266 308.743 90.5334 304.529 94.035C304.144 94.3552 304.164 95.6776 304 95.6768C295.272 95.6365 290.367 103.236 283.091 106.221C278.289 108.191 272.334 109.751 270.5 116" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M197.5 181.5C193.085 182.486 190.792 186.25 189.212 189.6C186.953 194.388 182.528 197.239 180.114 201.564C176.512 208.015 170.602 213.085 167.803 219.63C164.18 228.102 156.349 234.136 154.733 243.705C154.515 244.992 151.22 246.688 150.635 248.543C147.467 258.582 140.594 266.987 138.303 277.457C137.691 280.253 134.524 282.483 133.547 285.515C132.51 288.732 130.515 291.869 132 295.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M817 365.5C815.249 368.677 812.761 371.35 809.925 373.395C806.843 375.618 806.734 379.04 807.27 381.44C808.051 384.937 806.894 388.977 809.544 391.961C810.503 393.04 809.782 393.794 809.456 394.479C807.597 398.388 808.089 402.626 808.666 406.475C809.926 414.889 809.639 423.119 808.672 431.52C808.187 435.739 807.234 440.428 810 444.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M654.5 135C661.683 132.02 667.798 128.231 672.338 121.219C674.919 117.233 681.621 117.311 686.55 116.226C689.625 115.548 692.449 118.586 694.965 120.545C704.884 128.269 715.009 135.783 724.37 144.146C729.88 149.068 735.616 154.076 740.249 159.707C745.974 166.665 753.902 171.637 758.106 179.946C759.05 181.812 761.593 182.797 762.954 184.536C768.234 191.281 773.505 198.047 778.417 205.058C780.424 207.923 782.631 211.233 779.567 215.054C778.786 216.028 778.842 217.669 778.498 219C777.571 222.588 776.312 225.841 772.516 227.536C766.986 230.006 764.019 234.269 763.909 240.498C763.891 241.51 762.667 242.5 762 243.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M146.5 394C148.24 398.247 148.162 402.837 147.022 406.937C146.141 410.106 146.839 413.007 146.502 416C146.484 416.165 146.494 416.334 146.501 416.5C146.833 424.333 147.149 432.167 147.513 439.999C147.594 441.728 146.889 443.13 146 444.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M323 724.5C325.852 724.709 328.065 722.866 329.893 721.369C333.469 718.439 336.82 718.933 340.499 720.503C340.841 720.649 341.15 720.909 341.503 720.989C348.725 722.613 352.232 727.385 353.004 734.5C353.204 736.346 353.997 737.968 355 739.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M835 506C836.861 511.028 834.149 515.423 832.874 519.965C832.619 520.872 831.484 522.802 829.5 521.75" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M304 135.5C302.441 139.099 299.103 141.061 295.935 142.338C290.355 144.588 286.216 148.657 281.508 152.011C278.399 154.226 275.364 156.185 271.478 153.532C270.011 152.531 268.041 153.47 266.522 152.937C258.355 150.07 253.288 144.203 254.02 134.001C254.144 132.281 254.572 130.576 253.5 129" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M743 672.5C741.333 672 739.617 670.951 738.009 671.096C731.322 671.7 726.521 669.014 722.976 663.515C721.853 661.774 720.046 661.418 717.999 661.451C715.503 661.491 712.834 661.66 710.537 660.889C706.698 659.6 703.592 660.614 701.58 663.555C696.061 671.622 686.155 674.458 680.154 682.233C677.927 685.118 672.949 686.85 669.531 689.539C667.204 691.369 665.814 693.31 666.177 697.032C666.476 700.093 666.949 703.884 665 707" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M235.5 176.5C233.577 179.456 235.474 182.49 236.257 184.917C237.575 189.002 236.523 191.912 233.953 194.452C228.089 200.246 223.386 206.935 218.463 213.472C217.525 214.717 216.441 216.138 214.5 216" stroke="black" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M275 155.5C273.273 159.544 269.879 162.605 266.391 164.273C259.431 167.603 255.463 174.22 249.209 178.318C246.728 179.944 245.037 183.95 242.499 186.499C241.086 187.92 239.744 189.462 237.5 189.5" stroke="black" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M636.5 87.5C637.348 92.2464 637.556 97.1527 640 101.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M226 671C226.765 675.802 225.803 680.419 224.5 685" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M187.5 194.5C192 195.483 196.5 195.014 201 194.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M716.25 139C711.869 140.927 707.227 141.656 702.5 142" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M179 225C174.601 226.7 170.018 225.912 165.5 226" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M284 718C285.213 722.435 285.861 726.911 285 731.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M702 696C702.243 700.507 701.203 705.108 703 709.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M254 696C253.912 700.503 254.834 705.043 253.5 709.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M665 131C666.7 135.399 665.912 139.982 666 144.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M160.5 257C156.134 258.605 151.701 259.902 147 260" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M291 131C289.774 135.461 289.057 139.94 290.5 144.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M672 718C670.813 722.437 670.587 726.945 671 731.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M730 671C730.1 675.584 729.009 680.344 732 684.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M702.5 128C700.642 130.906 702.083 134.021 702.104 136.999C702.131 140.768 701.531 144.03 698.497 146.497C694.076 150.092 693.478 154.812 694.51 159.998C694.906 161.987 693.745 163.651 693.5 165.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M639.5 736.5C637.983 740.873 636.872 745.322 637 750" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M285.5 106.5C285.497 111.098 285.447 115.69 283.5 120" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M601 73C602.5 77.5833 604 82.1667 605.5 86.75" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M316.5 736.5C318.303 740.82 319.092 745.329 319 750" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M172.5 574.5C176.635 576.364 180.88 577.658 185.5 577" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M731.5 154C729.249 158.131 730.108 162.621 730 167" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M147.5 577.5C151.945 578.018 156.295 578.945 160.5 580.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M808.5 577.5C804.055 578.018 799.705 578.945 795.5 580.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M275.5 682.5C274.167 683 272.869 683.769 271.494 683.953C265.847 684.708 260.377 685.526 257.47 691.485C255.033 696.483 249.797 695.919 245.478 696.902C243.614 697.327 241.842 697.522 240.5 699" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M350.5 752C352.317 756.224 354.229 760.414 355 765" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M790.5 611.5C787.833 611.667 785.151 611.704 782.503 612.023C773.074 613.161 765.128 606.746 764.015 598.498C763.799 596.902 763.197 595.568 762 594.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M777.5 225C781.723 226.763 786.146 225.93 790.5 226" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M178.5 613C174.294 611.398 169.892 611.495 165.5 611.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M237.5 648.5C236.665 652.807 233.871 656.813 235.5 661.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M200.5 643.5C196.177 643.053 191.892 641.643 187.5 643" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M605.5 751.5C604.031 755.792 601.915 759.884 601.5 764.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M240.5 139C244.645 140.818 248.913 142.1 253.5 142" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M262 152.5C261.036 156.877 261.196 161.21 262.5 165.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M755.5 194.5C759.833 195.169 764.167 195.362 768.5 194.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M766 605.5C761.735 606.725 757.444 607.606 753 606.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M224.5 203.5C220.287 201.604 215.895 202.037 211.5 202.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M719 648.5C719.92 652.794 721.125 657.045 721 661.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M355 73C353.833 76.6667 352.791 80.3796 351.456 83.9835C350.584 86.3355 350.9 88.3738 351.974 90.513C352.693 91.9448 353.434 93.4563 353.688 95.0102C354.076 97.3876 355.11 98.7503 357.477 99.5674C360.813 100.719 363.822 102.572 366 105.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M290.5 694C289.807 698.366 289.433 702.721 291 707" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M248.5 659.5C245.561 662.14 241.8 660.658 238.466 661.334C236.399 661.753 234.104 661.92 233.09 663.556C229.067 670.045 222.957 671.534 216 671.546C214.999 671.548 214 672.167 213 672.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M604.5 727C604.855 731.593 602.679 735.477 601 739.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M158.5 513C155 511.667 151.292 510.698 148.078 508.863C146.153 507.764 144.635 507.921 143.015 508.539C137.057 510.814 131.413 510.87 125.962 507.054C124.72 506.185 123 506 121.5 505.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M693.5 673C694.897 677.167 695.236 681.333 693.5 685.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M262.5 673C261.862 677.148 261.274 681.298 262 685.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M681.5 682C682.568 683.197 683.892 683.861 685.5 684.005C691.384 684.531 696.447 686.769 699.433 692.038C702.021 696.602 706.641 695.862 710.529 696.89C712.356 697.373 714.158 697.522 715.5 699" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M522.5 749C523.638 752.615 527.113 754.109 529.613 756.375C531.474 758.06 532.675 759.715 532.442 761.994C531.88 767.495 533.956 771.507 538.476 774.536C540.127 775.643 541.5 777.167 543 778.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M758 181.5C755.795 183.93 756.311 187.161 755.515 190.004C753.185 198.323 747.065 203.12 738.517 202.322C735.977 202.085 734.129 202.92 732 203.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M391.5 62C391.719 65.9542 388.879 68.7498 387.305 71.9026C385.898 74.721 385.718 77.0383 387.046 79.4751C389.848 84.6169 388.947 89.4838 385.895 93.928C384.605 95.8063 384.538 97.5406 384.5 99.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M203 606.5C198.709 607.718 194.585 606.854 190.5 605.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M796 257.5C800.036 258.983 804.268 259.239 808.5 259.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M844.5 391C841.201 392.157 838.616 394.404 836.572 397.055C834.677 399.512 832.265 400.829 829.515 400.404C822.96 399.389 818.591 402.779 814.52 407.019C813.33 408.259 812.041 409.277 810.5 410" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M164 531.5C162.461 532.71 161.257 534.195 160.506 536.003C156.713 545.138 146.457 547.869 138.07 543.853C136.146 542.932 134.459 542.538 132.5 542.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M811 547C811.992 551.783 815.55 555.068 818 559" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M527 55C527.757 59.9685 532.17 63.0734 533.5 67.75" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M768.5 643.5C764.167 643.164 759.833 641.771 755.308 643.208C754.885 642.925 754.015 642.601 753.527 641.979C748.332 635.351 741.247 634.268 733.497 634.97C732.851 635.029 732.167 634.667 731.5 634.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M634 113.5C634.976 117.617 637.018 121.564 636 126" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M721 177C721.503 181.354 719.631 185.328 719 189.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M570 763.5C567.824 767.582 564.911 771.31 564 776" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M386 763.5C388.598 767.379 390.754 771.472 392 776" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M155 244.5C156.873 245.857 156.865 248.23 157.969 250.019C160.177 253.595 161.05 257.484 165.799 259.896C170.175 262.118 173.923 261.808 177.987 261.374C180.169 261.142 182.316 260.937 184.5 261" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M743 165.5C741.27 166.4 739.382 166.334 737.508 166.564C733.342 167.073 728.728 166.693 726.003 171.002C723.065 175.646 718.494 176.584 713.5 176.482C711.578 176.443 709.73 176.6 708 177.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M487.5 752C488.46 754.906 491.021 756.488 493.044 758.455C495.664 761.004 496.962 764.1 496.403 767.484C495.531 772.756 498.203 776.278 501.561 779.435C503.4 781.164 505.541 782.523 506.5 785" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M213 165.5C214.458 166.024 215.862 166.539 217.5 166.547C222.961 166.571 228.233 167.287 231.49 172.506C234.137 176.748 238.58 175.961 242.508 176.436C244.383 176.662 246.27 176.6 248 177.5" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M792 530.5C793.167 532.333 794.809 534.023 795.414 536.026C797.562 543.127 803.984 543.938 809.524 545.934C812.551 547.026 815.081 544.357 817.943 543.736C819.671 543.36 821.637 542.584 823.5 542" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M755 644C755.467 648.295 755.889 652.6 758 656.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M304 702C302.667 702.667 301.4 703.591 299.989 703.956C293.578 705.61 288.668 709.021 285.443 714.969C283.503 718.548 279.273 718.606 275.955 719.883C274.387 720.487 272.711 720.684 271.5 722" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M412 57.5C413.535 61.298 417.455 62.7073 420.108 65.3934C422.351 67.6642 423.625 70.0178 423.445 72.9966C423.195 77.1101 424.573 80.0526 427.917 82.608C430.101 84.2761 432.658 85.9942 433.5 89" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M784 574.5C779.923 575.78 775.961 577.64 771.5 577" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M126 315.5C127.667 317.667 129.348 319.822 130.997 322.002C136.355 329.081 143.861 330.844 152.011 327.022C154.107 326.039 156.333 325.333 158.5 324.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M224 634.5C222.397 635.301 220.626 635.209 219.008 634.949C211.647 633.767 206.542 637.627 202.065 642.559C200.293 644.511 200.328 647.469 200.103 650.009C199.911 652.166 199.238 654.06 198.5 656" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M170 292C165.898 292.816 161.753 293.487 158 295.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M544 57.5C542.325 61.4914 537.953 62.7628 535.454 65.9643C534.236 67.5258 532.495 68.9113 532.808 70.9913C533.892 78.2046 528.892 81.895 524.513 86.0139C523.637 86.8382 522.33 87.4422 522.5 89" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M214.5 622.5C212.417 626.229 211.36 630.215 211.5 634.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M652.5 702C653.558 703.629 655.453 704.07 657.02 704.407C662.779 705.646 667.051 708.412 669.56 713.973C671.51 718.294 676.29 718.445 680.043 719.887C681.613 720.49 683.289 720.684 684.5 722" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M742 622.5C744.25 626.205 744.248 630.379 744.5 634.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M765 232C761.066 230.974 757.118 230.06 753 230.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M203 231C198.965 230.919 194.897 230.429 191 232" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M320 712.5C319.098 716.2 321.051 719.527 321.748 722.949C322.08 724.577 321.902 726.037 321.392 726.939C318.303 732.405 315.723 738.571 308.005 739.082C307.132 739.14 306.333 740.333 305.5 741" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M693.5 152C689.17 152.037 685.258 153.504 681.5 155.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M839.5 352.5C835.326 355.088 833.109 359.448 830 363" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M834.5 332C832.526 332.102 831.11 330.898 829.434 330.148C825.238 328.27 821.191 325.799 815.91 328.31C812.039 330.15 807.49 329.293 803.479 327.038C801.603 325.983 799.5 325.333 797.5 324.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M322 113.5C320.952 117.436 319.388 121.287 320 125.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M429.5 55C427.858 59.403 424.735 62.9427 422.5 67" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M533.5 771C531.569 775.128 527.561 778.13 527 783" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M459.5 63.75C459.671 66.8331 459.057 69.9636 460.007 72.9978C460.598 74.8861 459.258 76.0669 458.522 77.5112C456.81 80.8682 453.397 83.1364 452.5 87" stroke="black" stroke-width="6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M175 212.5C177.837 214.626 177.768 218.351 178.628 221.116C179.686 224.512 181.468 226.73 184.062 227.857C188.558 229.81 191.052 233.318 191.773 237.539C192.253 240.347 194.024 241.989 195 244.25" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M571.5 738.5C571.054 743.009 569.27 746.96 566.5 750.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M601.5 99C602.645 102.796 604.796 106.329 604.5 110.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M374.5 66.5C377.105 70.2537 381.274 71.8168 385 74" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M564.5 62C564.932 66.5035 567.746 69.868 570 73.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M158.5 542C162.244 543.461 165.67 545.967 170 545.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M177 564.5C176.335 565.501 175.364 566.105 174.888 567.461C173.32 571.92 171.351 576.021 166.034 577.615C161.868 578.863 159.579 582.809 158.199 586.573C157.38 588.809 156.171 590.586 155 592.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M636 712.5C636.698 716.666 635.271 720.371 633.5 724" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M145 547C143.781 551.227 141.67 554.926 138.5 558" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M798.5 296C796.646 299.693 795.245 303.668 792 306.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M354.5 99C353.446 102.819 351.339 106.364 351.5 110.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M418 746.5C419.272 750.839 421.826 754.453 424.5 758" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M622.5 719C625.253 720.994 627.881 723.13 631.495 723.541C634.892 723.927 635.503 727.386 636.312 729.57C638.349 735.071 642.069 737.823 647.486 739.06C648.581 739.31 649.5 740.333 650.5 741" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M122 400.5C118.423 403.289 115.319 406.73 111 408.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M496.5 774.5C493.972 778.429 490.016 781.366 488.5 786" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M304.5 96C305.212 96.7016 305.967 97.1941 306.98 97.5559C313.048 99.7241 318.317 102.806 320.539 109.487C322.007 113.904 326.675 114.085 330.033 115.94C331.121 116.54 332.16 117.093 333 118" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M117 352.5C119.942 356.05 124.325 358.364 126 363" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M145.5 428C142.021 430.838 137.567 432.593 135.5 437" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M617 80C615.37 82.2057 612.677 82.9597 610.438 83.8421C605.566 85.7618 603.69 89.8729 602.715 94.0502C601.929 97.4216 600.294 98.8411 597.518 100.042C594.644 101.287 591.953 102.921 590 105.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M503.5 751C501.733 755.023 499.147 758.462 496 761.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M845 408.5C840.47 406.834 837.573 402.823 833.5 400.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M820.5 437C818.28 432.762 814.471 430.291 810.5 428" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M423 771.5C425.107 775.108 428.328 778.109 429 782.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M506 52.5C503.807 56.5183 500.229 59.4152 497.5 63" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M817 280C814.293 283.348 812.311 287.123 810.5 291" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M816.5 473C812.904 474.974 810.037 478.407 805.5 478.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M400 95.5C397.3 91.6779 393.059 89.7611 389.5 87" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M797.5 542C793.994 543.673 790.591 545.666 786.5 545.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M538 746.5C536.782 750.798 534.279 754.354 531.5 757.75" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M452.5 751C454.203 755.069 456.88 758.443 460 761.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M384.5 738.5C384.806 742.655 386.504 746.241 389 749.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M651.5 96C650.6 97.1338 649.327 97.5827 648.004 98.0122C642.093 99.9317 637.694 103.504 635.49 109.496C634.299 112.731 631.373 113.75 628.541 115.086C626.477 116.059 623.994 116.465 622.5 118.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M450 52.5C452.833 56 455.667 59.5 458.5 63" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M566.5 87C563.093 89.747 558.898 91.5663 556.5 95.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M834 438C837.916 440.515 840.194 444.941 844.5 447" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M532 80.5C534.043 84.2399 537.538 87.1215 538.5 91.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M424 80.5C421.957 84.2399 418.462 87.1215 417.5 91.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M139 365.5C141.806 368.694 143.939 372.561 148 374.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M467.5 52C466.157 56.3266 462.535 59.025 460 62.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M810.5 393.5C814.159 395.566 817.916 397.501 820.5 401" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M139.5 473C142.629 475.542 146.297 477.054 150 478.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M154.5 498C150.702 500.214 148.527 503.795 146.5 507.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M339.5 80C342.65 82.6127 346.047 84.7926 350 86" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M808.5 508C805.295 510.189 802.141 512.495 798 512.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M172 263C173.183 266.73 174.48 270.406 177 273.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M122 438C118.597 440.752 116.374 444.891 112 446.5" stroke="black" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M784 263C782.817 266.73 781.52 270.406 779 273.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M460 775.5C462.555 778.96 466.249 781.608 467.5 786" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M460.5 76C463.51 79.0589 466.785 81.9051 468.5 86" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M146.5 330.5C148.321 334.379 151.308 337.276 154.5 340" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M809.5 330C808.434 334.409 804.37 336.569 802 340" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M138.5 279C141.423 282.656 143.579 286.76 145.5 291" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M822 511C823.665 514.659 826.306 517.599 829 520.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M134 511C132.519 514.794 129.825 517.696 127 520.5" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M670.5 106C670.157 110.811 670.887 115.469 672.5 120" stroke="black" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 60 KiB

185
_/man.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 128 KiB

View File

@@ -1,7 +0,0 @@
<svg width="800" height="800" viewBox="0 0 800 800" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M716.029 172.201C721.697 172.201 726.308 176.663 726.308 182.148V623.369C726.308 628.854 721.697 633.315 716.029 633.315H82.5923C76.9233 633.315 72.3119 628.854 72.3119 623.369V182.148C72.3119 176.663 76.9233 172.201 82.5923 172.201H716.029ZM716.029 151.574H82.5923C65.5238 151.574 51.6846 165.264 51.6846 182.148V623.369C51.6846 640.257 65.5238 653.942 82.5923 653.942H716.029C733.097 653.942 746.936 640.257 746.936 623.369V182.148C746.936 165.264 733.097 151.574 716.029 151.574Z" fill="black"/>
<path d="M730.387 622.517C730.387 631.996 719.747 639.68 706.62 639.68H94.0559C80.9302 639.68 70.2889 631.996 70.2889 622.517V557.248C70.2889 557.248 146.904 428.434 202.467 431.262C228.679 432.596 321.22 499.546 388.413 499.546C454.08 499.546 484.763 359.412 573.695 359.412C621.394 359.412 730.386 445.283 730.386 445.283V622.517H730.387Z" fill="black"/>
<path d="M706.624 649.998H94.0559C74.9396 649.998 59.9733 637.932 59.9733 622.522V557.248C59.9733 555.395 60.4772 553.572 61.4235 551.981C69.501 538.384 143.437 417.62 202.991 420.963C214.926 421.567 233.498 430.965 259.201 443.967C296.96 463.068 348.677 489.234 388.41 489.234C413.66 489.234 435.223 461.024 458.056 431.156C487.445 392.692 520.772 349.097 573.699 349.097C623.533 349.097 725.328 428.164 736.769 437.178C737.993 438.145 738.982 439.376 739.662 440.779C740.342 442.182 740.696 443.721 740.697 445.281V622.522C740.696 637.932 725.73 649.998 706.624 649.998ZM80.5998 560.109V622.522C80.5998 625.252 85.968 629.371 94.0559 629.371H706.624C714.712 629.371 720.07 625.252 720.07 622.522V450.317C687.558 425.233 608.375 369.723 573.698 369.723C530.964 369.723 502.229 407.321 474.442 443.68C448.427 477.712 423.852 509.861 388.41 509.861C343.753 509.861 289.507 482.416 249.885 462.373C230.033 452.332 209.517 441.947 201.944 441.56L200.654 441.53C160.952 441.53 101.962 524.883 80.5998 560.109Z" fill="black"/>
<path d="M175.995 298.879C175.995 305.6 177.318 312.255 179.891 318.465C182.463 324.674 186.233 330.317 190.985 335.069C195.738 339.822 201.38 343.592 207.59 346.164C213.799 348.736 220.455 350.06 227.176 350.06C233.897 350.06 240.553 348.736 246.762 346.164C252.972 343.592 258.614 339.822 263.367 335.069C268.119 330.317 271.889 324.674 274.462 318.465C277.034 312.255 278.358 305.6 278.358 298.879C278.358 285.304 272.965 272.286 263.367 262.688C253.768 253.089 240.75 247.697 227.176 247.697C213.602 247.697 200.584 253.089 190.985 262.688C181.387 272.286 175.995 285.304 175.995 298.879Z" fill="black"/>
<path d="M227.193 360.372L226.216 360.368C209.789 360.111 194.45 353.474 183.019 341.675C171.587 329.881 165.433 314.335 165.685 297.913C166.209 264.541 193.785 237.388 227.163 237.388C244.566 237.649 259.905 244.287 271.337 256.086C282.768 267.88 288.912 283.42 288.66 299.842C288.137 333.219 260.56 360.372 227.193 360.372ZM227.807 258.019C204.975 258.019 186.654 276.057 186.312 298.235C186.141 309.153 190.23 319.482 197.834 327.317C205.428 335.158 215.621 339.569 226.538 339.74L227.192 350.058V339.745C249.37 339.745 267.69 321.702 268.032 299.519C268.204 288.607 264.114 278.278 256.521 270.438C248.927 262.602 238.734 258.19 227.817 258.019H227.807Z" fill="black"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 28 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 1H15V10H4.60087L4.17982 12H12C13.1046 12 14 12.8954 14 14C14 15.1046 13.1046 16 12 16C10.8954 16 10 15.1046 10 14H6C6 15.1046 5.10457 16 4 16C2.89543 16 2 15.1046 2 14V12.6459L2.98262 7.97846L2.15287 3H0V1Z" fill="#000000"/>
</svg>

Before

Width:  |  Height:  |  Size: 467 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.0 KiB

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="300px" height="200px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" xmlns:xlink="http://www.w3.org/1999/xlink">
<g><path style="opacity:0.998" fill="#f8e5ca" d="M 148.5,41.5 C 157.963,41.709 166.963,43.8757 175.5,48C 177.81,48.4966 180.143,48.6633 182.5,48.5C 182.663,50.8568 182.497,53.1902 182,55.5C 180.357,57.9768 178.524,60.3102 176.5,62.5C 178.069,68.3734 178.902,74.3734 179,80.5C 180.484,83.4689 181.984,86.4689 183.5,89.5C 182.52,90.9814 181.353,92.3147 180,93.5C 179.392,99.9978 177.226,105.831 173.5,111C 170.167,111.333 166.833,111.667 163.5,112C 162.39,114.737 162.223,117.571 163,120.5C 164.873,122.709 167.04,124.542 169.5,126C 176.98,129.095 184.314,132.262 191.5,135.5C 180.195,142.155 169.195,149.322 158.5,157C 155.634,158.457 152.634,158.79 149.5,158C 136.132,149.317 122.465,141.15 108.5,133.5C 108.977,132.522 109.643,131.689 110.5,131C 116.579,128.794 122.245,125.794 127.5,122C 129.102,120.065 130.269,117.899 131,115.5C 131.667,110.167 131.667,104.833 131,99.5C 121.826,87.1428 118.826,73.4762 122,58.5C 127.666,47.916 136.499,42.2493 148.5,41.5 Z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="512px" height="512px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" xmlns:xlink="http://www.w3.org/1999/xlink">
<g><path style="opacity:0.973" fill="#ffffff" d="M 240.5,19.5 C 302.67,17.8199 347.837,44.4866 376,99.5C 397.17,153.173 389.503,202.173 353,246.5C 347.096,253.074 340.596,258.908 333.5,264C 400.542,291.374 445.042,339.541 467,408.5C 473.226,430.08 475.893,452.08 475,474.5C 470.821,487.327 461.988,492.827 448.5,491C 439.207,488.264 433.707,482.098 432,472.5C 430.75,406.14 402.583,354.974 347.5,319C 298.809,290.998 247.809,285.998 194.5,304C 135.61,327.896 98.4428,370.73 83,432.5C 80.4326,445.373 79.0993,458.373 79,471.5C 75.5685,486.809 66.0685,492.975 50.5,490C 39.2226,485.289 34.2226,476.789 35.5,464.5C 39.6809,385.605 74.6809,324.771 140.5,282C 150.716,275.789 161.383,270.455 172.5,266C 125.947,229.016 108.447,181.183 120,122.5C 138.435,62.5593 178.601,28.226 240.5,19.5 Z M 240.5,63.5 C 285.016,61.1666 317.183,79.8333 337,119.5C 351.517,160.596 343.017,196.096 311.5,226C 282.965,248.03 251.632,253.03 217.5,241C 173.322,219.482 154.822,184.316 162,135.5C 173.431,95.229 199.597,71.229 240.5,63.5 Z"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,4 +0,0 @@
<svg width="139" height="139" viewBox="0 0 139 139" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M86.875 26.0625H0V112.938H86.875V26.0625Z" fill="black"/>
<path d="M130.312 26.0625L104.25 52.125V86.875L130.312 112.938H139V26.0625H130.312Z" fill="black"/>
</svg>

Before

Width:  |  Height:  |  Size: 274 B

View File

@@ -0,0 +1,27 @@
import OrderedObject from "../server/db/model/OrderedObject.js"
window.testSuites.push(
class testOrderedObject {
async addShouldFailIfKeyIsDuplicate() {
class Test extends OrderedObject {
}
let test = new Test()
test.add("1", {name: "hello"})
try {
test.add("1", {name: "bye"})
} catch(e){
return
}
return "Received no error!"
}
}
)

57
_test/test.js Normal file
View File

@@ -0,0 +1,57 @@
let scriptToPaste = `
<script type="module" src="./_test/test.js"></script>
`;
console.log("Tests initializing.")
window.testSuites = [];
/* Server - DB */
import ("./OrderedObject.test.js")
window.test = async function() {
// window.testSuites.sort();
window.alert = () => true;
window.confirm = () => true;
console.clear();
let failed = 0;
let success = 0;
var start = new Date();
for(let j=0; j<window.testSuites.length; j++) {
let testSuite = window.testSuites[j];
console.log(`%c ➽ ${j+1} ${testSuite.name.replace("test", "")}`, 'color: #ffffff; font-size: 17px; padding-left: -20px; padding-top: 10px; padding-bottom: 10px; text-align: right;')
let suite = new testSuite();
let testNum = 0;
let suiteContents = Object.getOwnPropertyNames(testSuite.prototype)
for(let i=0; i<suiteContents.length; i++) {
let test = suiteContents[i];
if(typeof suite[test] === 'function' && test !== "constructor") {
testNum++;
let fail = await suite[test]();
if(fail) {
failed++;
console.log(`%c ${testNum}. ${test}: ${fail}`, 'background: #222; color: rgb(254, 62, 43)');
} else {
success++;
console.log(`%c ${testNum}. ${test}`, 'background: #222; color: #00FF00');
}
}
}
}
console.log("")
console.log("")
let elapsed = new Date() - start;
if(failed === 0) {
console.log(`%cRan ${failed+success} tests in ${elapsed}ms`, 'background: #222; color: #00FF00');
} else {
console.log(`%cRan ${failed+success} tests in ${elapsed}ms`, 'background: #222; color: rgb(254, 62, 43)');
}
console.log(`%c ${success} passed`, 'background: #222; color: #00FF00');
console.log(`%c ${failed} failed`, 'background: #222; color: rgb(254, 62, 43)');
}
window.wait = ms => new Promise(res => setTimeout(res, ms));
window.__defineGetter__("test", test);

BIN
db/images/1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

37
db/processJSON.js Normal file
View File

@@ -0,0 +1,37 @@
import fs from "fs/promises";
import path from "path";
async function processJSON() {
// 1. Read original JSON
const inputPath = path.join(process.cwd(), "db/tokens.json");
const raw = await fs.readFile(inputPath, "utf8");
const data = JSON.parse(raw);
// 2. Create a new result object
const result = {};
// 3. Loop through all entries and modify as needed
const entries = Object.entries(data);
for (const [i, [key, value]] of entries.entries()) {
console.log(i);
// ==== CHANGE THINGS HERE ====
const newValue = {
"labels": value.labels,
"index": i+1,
"url": value.url,
"used": false
};
// =============================
// 4. Put modified entry into result
result[key] = newValue;
}
// 5. Write output JSON
const outputPath = path.join(process.cwd(), "db/output.json");
const jsonString = JSON.stringify(result, null, 2);
await fs.writeFile(outputPath, jsonString, "utf8");
}
processJSON();

11
index.html Normal file
View File

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Node Terminal</title>
<!-- <script type="module" src="./_test/test.js"></script> -->
</head>
<body style="background-color: rgb(32, 33, 36)">
<script type="module" src="./server/index.js"></script>
</body>
</html>

View File

@@ -1,9 +0,0 @@
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const modulePath = process.env.QUILL_PATH;
const { default: Server } = await import(modulePath);
const server = new Server(__dirname, 3003);

21
main.go
View File

@@ -1,21 +0,0 @@
package main
import (
"fmt"
"log"
"github.com/alexedwards/argon2id"
)
func main() {
password := "mmmmmmmm"
// Use default recommended parameters
hash, err := argon2id.CreateHash(password, argon2id.DefaultParams)
if err != nil {
log.Fatal(err)
}
fmt.Println("Argon2 Hash:")
fmt.Println(hash)
}

25
main.js Normal file
View File

@@ -0,0 +1,25 @@
// main.js
const { app, BrowserWindow, nativeImage } = require('electron');
const path = require('path');
process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = "true";
function createWindow() {
const win = new BrowserWindow({
show: false, // window is hidden
width: 1200,
height: 800,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
}
});
win.loadFile(path.join(__dirname, 'index.html'));
win.webContents.openDevTools({ mode: 'undocked' });
}
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});

25
package.json Normal file
View File

@@ -0,0 +1,25 @@
{
"name": "Hyperia",
"version": "1.0.0",
"main": "main.js",
"scripts": {
"start": "electron ."
},
"dependencies": {
"argon2": "^0.44.0",
"chalk": "^4.1.2",
"cookie-parser": "^1.4.7",
"cors": "^2.8.5",
"dotenv": "^17.2.3",
"express": "^4.18.2",
"express-useragent": "^2.0.2",
"jsonwebtoken": "^9.0.2",
"moment": "^2.30.1",
"stripe": "^20.0.0",
"ws": "^8.18.3",
"zod": "^4.1.12"
},
"devDependencies": {
"electron": "^25.0.0"
}
}

27
qrCodes/convertToJSON.js Normal file
View File

@@ -0,0 +1,27 @@
import fs from 'fs'
import {parse} from 'csv-parse'
const csvFilePath = './tokens.csv';
const jsonFilePath = './tokens.json';
fs.readFile(csvFilePath, 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
return;
}
parse(data, { columns: true, skip_empty_lines: true }, (err, output) => {
if (err) {
console.error('Error parsing CSV:', err);
return;
}
fs.writeFile(jsonFilePath, JSON.stringify(output, null, 2), (err) => {
if (err) {
console.error('Error writing JSON file:', err);
} else {
console.log(`JSON successfully written to ${jsonFilePath}`);
}
});
});
});

View File

@@ -0,0 +1,53 @@
import QRCode from 'qrcode';
import { v4 as uuidv4 } from 'uuid';
import fs from 'fs';
import { createObjectCsvWriter as createCsvWriter } from 'csv-writer';
// CONFIG
const totalQRCodes = 50;
const baseUrl = 'https://hyperia.so/signup?token='; // Replace with your URL
const outputDir = './qr_codes';
// Ensure output directory exists
if (!fs.existsSync(outputDir)){
fs.mkdirSync(outputDir);
}
// Create CSV writer
const csvWriter = createCsvWriter({
path: 'tokens.csv',
header: [
{id: 'index', title: 'Index'},
{id: 'token', title: 'Token'},
{id: 'url', title: 'URL'},
{id: 'used', title: 'Used'}
]
});
const records = [];
(async () => {
for (let i = 0; i < totalQRCodes; i++) {
const token = uuidv4();
const fullUrl = `${baseUrl}${token}`;
const fileName = `${outputDir}/qr_${i + 1}_${token}.png`;
try {
await QRCode.toFile(fileName, fullUrl);
console.log(`Generated: ${fileName}`);
records.push({
index: i + 1,
token,
url: fullUrl,
used: 'N'
});
} catch (err) {
console.error(`Error generating QR code ${i + 1}:`, err);
}
}
// Save tokens to CSV
await csvWriter.writeRecords(records);
console.log('All QR codes generated and tokens saved to tokens.csv');
})();

9
qrCodes/package.json Normal file
View File

@@ -0,0 +1,9 @@
{
"type": "module",
"dependencies": {
"csv-parse": "^6.1.0",
"csv-writer": "^1.6.0",
"qrcode": "^1.5.4",
"uuid": "^13.0.0"
}
}

33
qrCodes/readme.md Normal file
View File

@@ -0,0 +1,33 @@
This is a standalone sub-app to generate QR codes for the business cards
1. Run "generateQRCodes.js". This will create a qr_codes folder with all the codes as png images.
2. Upload all the Images into Figma. They should auto-organize into a grid.
3. Make QR Codes Transparent
- Select all the images
- go to the "Appearance" section in the right sidebar
- click the droplet ("Apply blend mode")
- select "Darken" from the menu
4. Make QR Codes the Right Size
- Change the width (and height) of each image to 538
5. Frame All Images
- Search "Batch wrap in Frame" in Figma plugins
- Select "Multiple Wrapper" plugin
- Wrap each image in a frame
6. Add Backgrounds
- Go to "Layout" section in right sidebar, select the "vertical" option (the icon with the 2 rectangles and arrow pointing down)
- Center the images using the alignment tool (right below width and height inputs)
- Change the width to 1888, height to 1079
- Change fill to #FFEACA
7. Export as 50 different images
8. Upload Each one to Moo
Process Improvements:
Figure out how to upload more efficiently (6 min per 50 cards)
Figure out how to add number to card so I know which one I am giving to people

51
qrCodes/tokens.csv Normal file
View File

@@ -0,0 +1,51 @@
Index,Token,URL,Used
1,810387b6-851e-4883-b9a3-c59703dc0fc9,https://hyperia.so/signup?token=810387b6-851e-4883-b9a3-c59703dc0fc9,N
2,d0b417c4-d69a-4958-9e1d-0658176d2710,https://hyperia.so/signup?token=d0b417c4-d69a-4958-9e1d-0658176d2710,N
3,1719b6d8-9b13-4720-ab94-9af5cbe42137,https://hyperia.so/signup?token=1719b6d8-9b13-4720-ab94-9af5cbe42137,N
4,16659e04-afbb-4192-9195-90f2f49277b2,https://hyperia.so/signup?token=16659e04-afbb-4192-9195-90f2f49277b2,N
5,88abc4b3-8416-4499-9fa7-6778841e4b23,https://hyperia.so/signup?token=88abc4b3-8416-4499-9fa7-6778841e4b23,N
6,e3342dd5-a214-4280-9488-f48f91e728ce,https://hyperia.so/signup?token=e3342dd5-a214-4280-9488-f48f91e728ce,N
7,a8176432-4e72-42b7-ac9a-2d799039f729,https://hyperia.so/signup?token=a8176432-4e72-42b7-ac9a-2d799039f729,N
8,1d57b6e0-e6c3-4ab6-808f-72b64b8303ee,https://hyperia.so/signup?token=1d57b6e0-e6c3-4ab6-808f-72b64b8303ee,N
9,67264f06-c4b1-4334-8ba8-0e5e045021df,https://hyperia.so/signup?token=67264f06-c4b1-4334-8ba8-0e5e045021df,N
10,e9fa5701-d90f-45d0-8e2b-7c3ef9022362,https://hyperia.so/signup?token=e9fa5701-d90f-45d0-8e2b-7c3ef9022362,N
11,c082880a-f12c-4eb0-b136-e11df9e6bde8,https://hyperia.so/signup?token=c082880a-f12c-4eb0-b136-e11df9e6bde8,N
12,083a18f5-6491-4dbf-9a28-2b22b6b4a5bd,https://hyperia.so/signup?token=083a18f5-6491-4dbf-9a28-2b22b6b4a5bd,N
13,af94443c-a0c5-4c58-a2e5-16a8c6d573c8,https://hyperia.so/signup?token=af94443c-a0c5-4c58-a2e5-16a8c6d573c8,N
14,5673dd07-25b1-441f-abbc-89b5e5a2b3e9,https://hyperia.so/signup?token=5673dd07-25b1-441f-abbc-89b5e5a2b3e9,N
15,f2b30979-1ece-41e1-87ec-6a102a21e809,https://hyperia.so/signup?token=f2b30979-1ece-41e1-87ec-6a102a21e809,N
16,d52c1bcc-8b97-4535-8395-dfdab4ee543a,https://hyperia.so/signup?token=d52c1bcc-8b97-4535-8395-dfdab4ee543a,N
17,7fed8604-1801-4500-8615-2ac8eb50c896,https://hyperia.so/signup?token=7fed8604-1801-4500-8615-2ac8eb50c896,N
18,e312c854-8df7-4c68-9f3f-1822b718b092,https://hyperia.so/signup?token=e312c854-8df7-4c68-9f3f-1822b718b092,N
19,5979853c-1755-4403-bea5-3b111384ffb3,https://hyperia.so/signup?token=5979853c-1755-4403-bea5-3b111384ffb3,N
20,d93307e4-a0a0-4b4a-86d0-897ca5382cdd,https://hyperia.so/signup?token=d93307e4-a0a0-4b4a-86d0-897ca5382cdd,N
21,b73b803a-c49d-4ea9-b8ed-f04be0373157,https://hyperia.so/signup?token=b73b803a-c49d-4ea9-b8ed-f04be0373157,N
22,5a0a7a8c-f080-4708-a2e1-fcd2d613adb1,https://hyperia.so/signup?token=5a0a7a8c-f080-4708-a2e1-fcd2d613adb1,N
23,99c547fe-1ec1-4ddc-bfcb-b95d73fdd907,https://hyperia.so/signup?token=99c547fe-1ec1-4ddc-bfcb-b95d73fdd907,N
24,6da35b58-81ea-478f-9ef5-8a70b407bfcf,https://hyperia.so/signup?token=6da35b58-81ea-478f-9ef5-8a70b407bfcf,N
25,402f4f83-165b-4b5a-b1f2-3dccc7ec5ef6,https://hyperia.so/signup?token=402f4f83-165b-4b5a-b1f2-3dccc7ec5ef6,N
26,04afd891-1250-4a6d-b239-3bdd06082c71,https://hyperia.so/signup?token=04afd891-1250-4a6d-b239-3bdd06082c71,N
27,c807c67f-2d8d-4f54-b657-8cb3aaf19b28,https://hyperia.so/signup?token=c807c67f-2d8d-4f54-b657-8cb3aaf19b28,N
28,5cf7639e-22b3-4469-8155-d490cc164367,https://hyperia.so/signup?token=5cf7639e-22b3-4469-8155-d490cc164367,N
29,90e82173-c7f8-47d9-9619-b333e032d1af,https://hyperia.so/signup?token=90e82173-c7f8-47d9-9619-b333e032d1af,N
30,5eed9d33-81ea-420f-834b-a71b01eb6f54,https://hyperia.so/signup?token=5eed9d33-81ea-420f-834b-a71b01eb6f54,N
31,2e96ecaa-bf8e-403c-89f3-8b2924788df3,https://hyperia.so/signup?token=2e96ecaa-bf8e-403c-89f3-8b2924788df3,N
32,7edb52b1-35ce-42c6-8cd0-341f3ee38f4c,https://hyperia.so/signup?token=7edb52b1-35ce-42c6-8cd0-341f3ee38f4c,N
33,ad5f483d-338f-4efc-936d-8253854b38a5,https://hyperia.so/signup?token=ad5f483d-338f-4efc-936d-8253854b38a5,N
34,d49a3c80-d0b8-4796-b1e2-f42d5ae0cc69,https://hyperia.so/signup?token=d49a3c80-d0b8-4796-b1e2-f42d5ae0cc69,N
35,382a7ffd-9227-4edc-8bc6-8c3ae82ccf14,https://hyperia.so/signup?token=382a7ffd-9227-4edc-8bc6-8c3ae82ccf14,N
36,27762835-f211-4c72-8187-b3f87ccb846c,https://hyperia.so/signup?token=27762835-f211-4c72-8187-b3f87ccb846c,N
37,7344f7ce-2609-46f4-b2cb-28dafc547270,https://hyperia.so/signup?token=7344f7ce-2609-46f4-b2cb-28dafc547270,N
38,fd23ce26-d78a-49fc-b198-1a73071a2db4,https://hyperia.so/signup?token=fd23ce26-d78a-49fc-b198-1a73071a2db4,N
39,869227be-1c80-421f-a17e-e052929c43e3,https://hyperia.so/signup?token=869227be-1c80-421f-a17e-e052929c43e3,N
40,3ac9b048-a132-4fad-bb2d-9bb1820592c8,https://hyperia.so/signup?token=3ac9b048-a132-4fad-bb2d-9bb1820592c8,N
41,7d9c71ac-646b-4a6b-b758-f55f632cec6f,https://hyperia.so/signup?token=7d9c71ac-646b-4a6b-b758-f55f632cec6f,N
42,6ad3a682-14fa-48d7-96bd-fd61b2b314dd,https://hyperia.so/signup?token=6ad3a682-14fa-48d7-96bd-fd61b2b314dd,N
43,c02ae012-089a-4c3b-bd28-8d7cedc2df0d,https://hyperia.so/signup?token=c02ae012-089a-4c3b-bd28-8d7cedc2df0d,N
44,df82c2b6-bd8c-4b69-bc8c-a1d7df53727c,https://hyperia.so/signup?token=df82c2b6-bd8c-4b69-bc8c-a1d7df53727c,N
45,1444c46c-4985-4e52-8cbf-f6d77795deae,https://hyperia.so/signup?token=1444c46c-4985-4e52-8cbf-f6d77795deae,N
46,38954160-0865-4f55-b190-e2a5a2268df1,https://hyperia.so/signup?token=38954160-0865-4f55-b190-e2a5a2268df1,N
47,0e88166f-936a-4156-a89d-e71e825db36e,https://hyperia.so/signup?token=0e88166f-936a-4156-a89d-e71e825db36e,N
48,a94aee8f-c47d-4606-a734-69355dfc642e,https://hyperia.so/signup?token=a94aee8f-c47d-4606-a734-69355dfc642e,N
49,de407269-9e31-485b-a857-5ba5d1a5ca5b,https://hyperia.so/signup?token=de407269-9e31-485b-a857-5ba5d1a5ca5b,N
50,f2016b40-a179-47ec-a415-84caa7da8521,https://hyperia.so/signup?token=f2016b40-a179-47ec-a415-84caa7da8521,N
1 Index Token URL Used
2 1 810387b6-851e-4883-b9a3-c59703dc0fc9 https://hyperia.so/signup?token=810387b6-851e-4883-b9a3-c59703dc0fc9 N
3 2 d0b417c4-d69a-4958-9e1d-0658176d2710 https://hyperia.so/signup?token=d0b417c4-d69a-4958-9e1d-0658176d2710 N
4 3 1719b6d8-9b13-4720-ab94-9af5cbe42137 https://hyperia.so/signup?token=1719b6d8-9b13-4720-ab94-9af5cbe42137 N
5 4 16659e04-afbb-4192-9195-90f2f49277b2 https://hyperia.so/signup?token=16659e04-afbb-4192-9195-90f2f49277b2 N
6 5 88abc4b3-8416-4499-9fa7-6778841e4b23 https://hyperia.so/signup?token=88abc4b3-8416-4499-9fa7-6778841e4b23 N
7 6 e3342dd5-a214-4280-9488-f48f91e728ce https://hyperia.so/signup?token=e3342dd5-a214-4280-9488-f48f91e728ce N
8 7 a8176432-4e72-42b7-ac9a-2d799039f729 https://hyperia.so/signup?token=a8176432-4e72-42b7-ac9a-2d799039f729 N
9 8 1d57b6e0-e6c3-4ab6-808f-72b64b8303ee https://hyperia.so/signup?token=1d57b6e0-e6c3-4ab6-808f-72b64b8303ee N
10 9 67264f06-c4b1-4334-8ba8-0e5e045021df https://hyperia.so/signup?token=67264f06-c4b1-4334-8ba8-0e5e045021df N
11 10 e9fa5701-d90f-45d0-8e2b-7c3ef9022362 https://hyperia.so/signup?token=e9fa5701-d90f-45d0-8e2b-7c3ef9022362 N
12 11 c082880a-f12c-4eb0-b136-e11df9e6bde8 https://hyperia.so/signup?token=c082880a-f12c-4eb0-b136-e11df9e6bde8 N
13 12 083a18f5-6491-4dbf-9a28-2b22b6b4a5bd https://hyperia.so/signup?token=083a18f5-6491-4dbf-9a28-2b22b6b4a5bd N
14 13 af94443c-a0c5-4c58-a2e5-16a8c6d573c8 https://hyperia.so/signup?token=af94443c-a0c5-4c58-a2e5-16a8c6d573c8 N
15 14 5673dd07-25b1-441f-abbc-89b5e5a2b3e9 https://hyperia.so/signup?token=5673dd07-25b1-441f-abbc-89b5e5a2b3e9 N
16 15 f2b30979-1ece-41e1-87ec-6a102a21e809 https://hyperia.so/signup?token=f2b30979-1ece-41e1-87ec-6a102a21e809 N
17 16 d52c1bcc-8b97-4535-8395-dfdab4ee543a https://hyperia.so/signup?token=d52c1bcc-8b97-4535-8395-dfdab4ee543a N
18 17 7fed8604-1801-4500-8615-2ac8eb50c896 https://hyperia.so/signup?token=7fed8604-1801-4500-8615-2ac8eb50c896 N
19 18 e312c854-8df7-4c68-9f3f-1822b718b092 https://hyperia.so/signup?token=e312c854-8df7-4c68-9f3f-1822b718b092 N
20 19 5979853c-1755-4403-bea5-3b111384ffb3 https://hyperia.so/signup?token=5979853c-1755-4403-bea5-3b111384ffb3 N
21 20 d93307e4-a0a0-4b4a-86d0-897ca5382cdd https://hyperia.so/signup?token=d93307e4-a0a0-4b4a-86d0-897ca5382cdd N
22 21 b73b803a-c49d-4ea9-b8ed-f04be0373157 https://hyperia.so/signup?token=b73b803a-c49d-4ea9-b8ed-f04be0373157 N
23 22 5a0a7a8c-f080-4708-a2e1-fcd2d613adb1 https://hyperia.so/signup?token=5a0a7a8c-f080-4708-a2e1-fcd2d613adb1 N
24 23 99c547fe-1ec1-4ddc-bfcb-b95d73fdd907 https://hyperia.so/signup?token=99c547fe-1ec1-4ddc-bfcb-b95d73fdd907 N
25 24 6da35b58-81ea-478f-9ef5-8a70b407bfcf https://hyperia.so/signup?token=6da35b58-81ea-478f-9ef5-8a70b407bfcf N
26 25 402f4f83-165b-4b5a-b1f2-3dccc7ec5ef6 https://hyperia.so/signup?token=402f4f83-165b-4b5a-b1f2-3dccc7ec5ef6 N
27 26 04afd891-1250-4a6d-b239-3bdd06082c71 https://hyperia.so/signup?token=04afd891-1250-4a6d-b239-3bdd06082c71 N
28 27 c807c67f-2d8d-4f54-b657-8cb3aaf19b28 https://hyperia.so/signup?token=c807c67f-2d8d-4f54-b657-8cb3aaf19b28 N
29 28 5cf7639e-22b3-4469-8155-d490cc164367 https://hyperia.so/signup?token=5cf7639e-22b3-4469-8155-d490cc164367 N
30 29 90e82173-c7f8-47d9-9619-b333e032d1af https://hyperia.so/signup?token=90e82173-c7f8-47d9-9619-b333e032d1af N
31 30 5eed9d33-81ea-420f-834b-a71b01eb6f54 https://hyperia.so/signup?token=5eed9d33-81ea-420f-834b-a71b01eb6f54 N
32 31 2e96ecaa-bf8e-403c-89f3-8b2924788df3 https://hyperia.so/signup?token=2e96ecaa-bf8e-403c-89f3-8b2924788df3 N
33 32 7edb52b1-35ce-42c6-8cd0-341f3ee38f4c https://hyperia.so/signup?token=7edb52b1-35ce-42c6-8cd0-341f3ee38f4c N
34 33 ad5f483d-338f-4efc-936d-8253854b38a5 https://hyperia.so/signup?token=ad5f483d-338f-4efc-936d-8253854b38a5 N
35 34 d49a3c80-d0b8-4796-b1e2-f42d5ae0cc69 https://hyperia.so/signup?token=d49a3c80-d0b8-4796-b1e2-f42d5ae0cc69 N
36 35 382a7ffd-9227-4edc-8bc6-8c3ae82ccf14 https://hyperia.so/signup?token=382a7ffd-9227-4edc-8bc6-8c3ae82ccf14 N
37 36 27762835-f211-4c72-8187-b3f87ccb846c https://hyperia.so/signup?token=27762835-f211-4c72-8187-b3f87ccb846c N
38 37 7344f7ce-2609-46f4-b2cb-28dafc547270 https://hyperia.so/signup?token=7344f7ce-2609-46f4-b2cb-28dafc547270 N
39 38 fd23ce26-d78a-49fc-b198-1a73071a2db4 https://hyperia.so/signup?token=fd23ce26-d78a-49fc-b198-1a73071a2db4 N
40 39 869227be-1c80-421f-a17e-e052929c43e3 https://hyperia.so/signup?token=869227be-1c80-421f-a17e-e052929c43e3 N
41 40 3ac9b048-a132-4fad-bb2d-9bb1820592c8 https://hyperia.so/signup?token=3ac9b048-a132-4fad-bb2d-9bb1820592c8 N
42 41 7d9c71ac-646b-4a6b-b758-f55f632cec6f https://hyperia.so/signup?token=7d9c71ac-646b-4a6b-b758-f55f632cec6f N
43 42 6ad3a682-14fa-48d7-96bd-fd61b2b314dd https://hyperia.so/signup?token=6ad3a682-14fa-48d7-96bd-fd61b2b314dd N
44 43 c02ae012-089a-4c3b-bd28-8d7cedc2df0d https://hyperia.so/signup?token=c02ae012-089a-4c3b-bd28-8d7cedc2df0d N
45 44 df82c2b6-bd8c-4b69-bc8c-a1d7df53727c https://hyperia.so/signup?token=df82c2b6-bd8c-4b69-bc8c-a1d7df53727c N
46 45 1444c46c-4985-4e52-8cbf-f6d77795deae https://hyperia.so/signup?token=1444c46c-4985-4e52-8cbf-f6d77795deae N
47 46 38954160-0865-4f55-b190-e2a5a2268df1 https://hyperia.so/signup?token=38954160-0865-4f55-b190-e2a5a2268df1 N
48 47 0e88166f-936a-4156-a89d-e71e825db36e https://hyperia.so/signup?token=0e88166f-936a-4156-a89d-e71e825db36e N
49 48 a94aee8f-c47d-4606-a734-69355dfc642e https://hyperia.so/signup?token=a94aee8f-c47d-4606-a734-69355dfc642e N
50 49 de407269-9e31-485b-a857-5ba5d1a5ca5b https://hyperia.so/signup?token=de407269-9e31-485b-a857-5ba5d1a5ca5b N
51 50 f2016b40-a179-47ec-a415-84caa7da8521 https://hyperia.so/signup?token=f2016b40-a179-47ec-a415-84caa7da8521 N

View File

@@ -1,3 +0,0 @@
BASE_URL=http://localhost:3003
JWT_SECRET=950b15c8c1c8a27dd716bba3ab51d96ce49afa85cae72884cf22e936e1bc0cb9
ENV=development

87
server/_/quilldb.js Normal file
View File

@@ -0,0 +1,87 @@
const chalk = require('chalk');
const path = require('path');
const fs = require('fs/promises');
const { pathToFileURL } = require('url');
function Node(node) {
let traits = [
"labels"
]
for(let i = 0; i < traits.length; i++) {
if(!node[traits[i]]) {
throw new Error(`Node is missing field "${traits[i]}": ${JSON.stringify(node)}`)
}
}
}
export default class QuillDB {
#nodes; get nodes() {return this.#nodes};
#edges; get edges() {return this.#edges};
#labels = {}; get labels() {return this.#labels}
constructor() {
this.loadData()
}
async loadData() {
const dbData = await fs.readFile(path.join(process.cwd(), 'db/db.json'), 'utf8');
let dbJson;
try {
dbJson = JSON.parse(dbData);
} catch {
dbJson = []
}
this.#nodes = dbJson["nodes"];
this.#edges = dbJson["edges"];
let labelModels = await this.getLabelModels();
// Index by label
for (const [id, entry] of Object.entries(this.#nodes)) {
Node(entry)
this.#checkLabelSchemas(id, entry, labelModels)
}
for (const [id, entry] of Object.entries(this.#edges)) {
Edge(entry)
this.#checkLabelSchemas(id, entry, labelModels)
}
console.log(chalk.yellow("DB established."))
Object.preventExtensions(this);
}
async getLabelModels() {
const labelHandlers = {};
const labelDir = path.join(process.cwd(), 'server/db/model');
const files = await fs.readdir(labelDir);
for (const file of files) {
if (!file.endsWith('.js')) continue;
const label = path.basename(file, '.js');
const modulePath = path.join(labelDir, file);
const module = await import(pathToFileURL(modulePath).href);
labelHandlers[label] = module.default;
if (!this.#labels[label]) {
this.#labels[label] = [];
}
}
return labelHandlers
}
#checkLabelSchemas(id, entry, labelModels) {
entry.labels.forEach(label => {
const model = labelModels[label];
if (!model) {
throw new Error("Data has unknown label or missing model: " + label)
}
model(entry);
this.#labels[label].push(id);
});
}
async getAll() {
return { nodes: this.#nodes }
}
}

89
server/auth.js Normal file
View File

@@ -0,0 +1,89 @@
const dotenv = require("dotenv")
const jwt = require('jsonwebtoken');
const argon2 = require('argon2');
dotenv.config();
export default class AuthHandler {
ips = new Map()
#secret
constructor() {
this.#secret = process.env.JWT_SECRET;
}
isLoggedInUser(req, res) {
const token = req.cookies.auth_token;
if (!token) {
return false;
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
return true;
} catch (err) {
return false;
}
}
getProfile(req, res) {
const token = req.cookies.auth_token;
if (!token) return res.status(401).send({ error: "No auth token" });
try {
const payload = jwt.verify(token, process.env.JWT_SECRET);
const email = payload.email;
const user = db.members.getByEmail(email);
res.send({ email: user.email, name: user.firstName + " " + user.lastName });
} catch (err) {
res.status(401).send({ error: "Invalid token" });
}
}
async login(req, res) {
const { email, password } = req.body;
let foundUser = global.db.members.getByEmail(email)
if(!foundUser) {
res.status(400).json({ error: 'Incorrect email.' });
return;
}
const storedHash = foundUser.password
const valid = await argon2.verify(storedHash, password);
if (!valid) {
res.status(400).json({ error: 'Incorrect password.' });
} else {
const payload = { email: foundUser.email };
console.log(payload)
const secret = process.env.JWT_SECRET;
const options = { expiresIn: "2h" };
const token = jwt.sign(payload, secret, options);
res.cookie("auth_token", token, {
httpOnly: true, // cannot be accessed by JS
secure: process.env.ENV === "production", // only over HTTPS
sameSite: "lax", // like SameSiteLaxMode
maxAge: 2 * 60 * 60 * 1000, // 2 hours in milliseconds
path: "/", // available on entire site
domain: process.env.ENV === "production" ? "." + process.env.BASE_URL : undefined
});
res.redirect("/")
}
}
logout(req, res) {
res.cookie('auth_token', '', {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'lax',
maxAge: 0, // expire immediately
path: '/',
domain: process.env.ENV === "production" ? "." + process.env.BASE_URL : undefined
});
res.redirect("/")
}
}

View File

@@ -1,52 +0,0 @@
package config
import (
"fmt"
"os"
"strconv"
"github.com/joho/godotenv"
)
var ENV string
// URLs
var BASE_URL string
const PORT = "3003"
// Auth
var JWT_SECRET string
// Logging
var LOG_TO_FILE bool
func SetConfiguration() {
fmt.Println("setting configuration for server")
err := godotenv.Load()
if err != nil {
fmt.Println("no .env file found. Needs to be added to server directory.")
}
ENV = os.Getenv("ENV")
if ENV != "production" && ENV != "development" {
fmt.Println("invalid value for ENV, must be 'development' or 'production'")
os.Exit(1)
}
BASE_URL = os.Getenv("BASE_URL")
if BASE_URL == "" {
fmt.Println("BASE_URL not provided, aborting")
os.Exit(1)
}
JWT_SECRET = os.Getenv("JWT_SECRET")
if JWT_SECRET == "" {
fmt.Println("JWT_SECRET not provided, aborting")
os.Exit(1)
}
LOG_TO_FILE, err = strconv.ParseBool(os.Getenv("LOG_TO_FILE"))
if err != nil {
LOG_TO_FILE = false
}
}

View File

@@ -1,67 +0,0 @@
package db
import (
"encoding/json"
"errors"
"fmt"
"log"
"os"
"github.com/alexedwards/argon2id"
)
type User struct {
Email string `json:"email"`
Password string `json:"password"`
// Other fields as needed
}
var DB map[string]User
type GetService struct{}
var Get = GetService{}
func (g GetService) UserByEmail(email string) (map[string]interface{}, error) {
for key, value := range DB {
if value.Email == email {
log.Println("found")
return map[string]interface{}{
"key": key,
"email": value.Email,
"password": value.Password,
}, nil
}
fmt.Printf("Key: %s, Value: %v\n", key, value)
}
return nil, errors.New("user not found")
}
func InitDB() error {
file, err := os.Open("../db/users.json")
if err != nil {
fmt.Println("Error opening file:", err)
return errors.New("Failed to read db")
}
defer file.Close()
var result map[string]User
err = json.NewDecoder(file).Decode(&result)
if err != nil {
fmt.Println("Error decoding JSON:", err)
return errors.New("failed to decode db")
}
DB = result
// Use default recommended parameters
hash, err := argon2id.CreateHash("hunter2", argon2id.DefaultParams)
if err != nil {
log.Fatal(err)
}
fmt.Println("Argon2 Hash:")
fmt.Println(hash)
return nil
}

107
server/db/db.js Normal file
View File

@@ -0,0 +1,107 @@
const fs = require('fs/promises');
const chalk = require('chalk');
const path = require('path');
import QuillDB from "../_/quilldb.js"
import Titles from "./model/Titles.js"
import Members from './model/Members.js'
import Tokens from './model/Tokens.js'
import Payments from "./model/Payments.js"
import Posts from "./model/Forum/Posts.js"
import Conversations from "./model/Messages/Conversations.js"
import Messages from "./model/Messages/Messages.js"
export default class Database {
titles = new Titles()
members = new Members()
tokens = new Tokens()
payments = new Payments()
posts = new Posts()
conversations = new Conversations()
messages = new Messages()
fromID = {
"HY": this.titles,
"MEMBER": this.members,
"TOKEN": this.tokens,
"PAYMENT": this.payments,
"POST": this.posts,
"CONVERSATION": this.conversations,
"DM": this.messages
}
constructor() {
this.loadData()
}
async loadData() {
const dbData = await fs.readFile(path.join(process.cwd(), 'db/db.json'), 'utf8');
let dbJson;
try {
dbJson = JSON.parse(dbData);
} catch {
dbJson = []
}
let nodes = dbJson["nodes"];
let entries = Object.entries(nodes)
for(let i=0; i<entries.length; i++) {
let entry = entries[i]
let id = entry[0]; let node = entry[1];
let type = id.split("-")[0]
try {
let collection = this.fromID[type]
if(collection) {
collection.save(node, id)
} else {
throw new Error("Type does not exist for node: ", id)
}
} catch(e) {
throw e
}
}
setInterval(() => {
console.log("saving db")
global.db.saveData()
}, 5000)
}
async saveData() {
let data = {
"nodes": {
},
"edges": {
}
}
let arrs = [
this.titles.entries,
this.members.entries,
this.tokens.entries,
this.posts.entries,
this.conversations.entries,
this.messages.entries,
this.payments.entries,
]
let ids = [
Object.entries(this.titles.ids),
Object.entries(this.members.ids),
Object.entries(this.tokens.ids),
Object.entries(this.posts.ids),
Object.entries(this.conversations.ids),
Object.entries(this.messages.ids),
Object.entries(this.payments.ids),
]
for(let i=0; i<arrs.length; i++) {
let arr = arrs[i]
for(let j=0; j<arr.length; j++) {
data.nodes[ids[i][j][0]] = arr[j]
}
}
let string = JSON.stringify(data, null, 4)
await fs.writeFile(path.join(process.cwd(), 'db/db.json'), string, "utf8");
}
}

View File

@@ -0,0 +1,56 @@
import OrderedObject from "../OrderedObject.js"
const { z } = require("zod")
export default class Posts extends OrderedObject {
schema = z.object({
text: z.string(),
time: z.string(),
sentBy: z.string()
})
makeID(forum, number) {
return `POST-${forum}-${number}`
}
save(post, id) {
let result = this.schema.safeParse(post)
if(result.success) {
try {
super.add(id, post)
} catch(e) {
console.error(e)
throw e
}
} else {
console.error("Failed parsing member: ", result.error)
throw new global.ServerError(400, "Invalid Member Data!: ");
}
}
get(forum, number) {
let result = []
let limit = Math.min(number, this.entries.length)
for(let i=1; i<=limit; i++) {
let id = this.makeID(forum, i)
let post = this.entries[this.ids[id]]
let {firstName, lastName} = global.db.members.get(post.sentBy)
let seededObj = {
...post
}
seededObj.sentByID = post.sentBy
seededObj.sentBy = firstName + " " + lastName
result.push(seededObj)
}
return result
}
async add(text, forum, userEmail) {
let newPost = {}
newPost.text = text
newPost.sentBy = db.members.getIDFromEmail(userEmail)
newPost.time = global.currentTime()
let idNumber = this.entries.length+1
super.add(this.makeID(forum, idNumber), newPost)
}
}

View File

@@ -0,0 +1,77 @@
import OrderedObject from "./OrderedObject.js"
const argon2 = require("argon2")
const { z } = require("zod")
export default class Members extends OrderedObject {
addressSchema = z.object({
address1: z.string(),
address2: z.string().optional(),
zip: z.string().regex(/^\d{5}(-\d{4})?$/),
state: z.string(),
city: z.string()
})
schema = z.object({
id: z.number(),
email: z.string().email(),
firstName: z.string(),
lastName: z.string(),
password: z.string(),
tokenUsed: z.string().regex(
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,
"Invalid UUID"
),
joined: z.string(),
address: this.addressSchema,
})
isHashed = (s) => {return s.startsWith("$argon2")}
save(member) {
let id = `MEMBER-${member.id}`
let result = this.schema.safeParse(member)
if(result.success) {
try {
super.add(id, member)
} catch(e) {
console.error(e)
throw e
}
} else {
console.error("Failed parsing member: ", result.error)
throw new global.ServerError(400, "Invalid Member Data!: ");
}
}
async add(newMember, tokenID) {
newMember.tokenUsed = tokenID
const hash = await argon2.hash(newMember.password);
newMember.password = hash
newMember.joined = global.currentTime()
newMember.id = this.entries.length+1
this.save(newMember)
}
get(id) {
return this.entries[this.ids[id]]
}
getByEmail(email) {
for(let i=0; i<this.entries.length; i++) {
if(this.entries[i].email === email) {
return this.entries[i]
}
}
return null
}
getIDFromEmail(email) {
let index = 0
for(let i=0; i<this.entries.length; i++) {
if(this.entries[i].email === email) {
index = i
break
}
}
return Object.entries(this.ids)[index][0]
}
}

View File

@@ -0,0 +1,62 @@
import OrderedObject from "../OrderedObject.js"
const { z } = require("zod")
export default class Conversations extends OrderedObject {
schema = z.object({
id: z.number(),
between: z.array(z.string()),
lastUpdated: z.string()
}).strict()
save(convo) {
let id = `CONVERSATION-${convo.id}`
let result = this.schema.safeParse(convo)
if(result.success) {
try {
super.add(id, convo)
} catch(e) {
console.error(e)
throw e
}
} else {
console.error(result.error)
throw new global.ServerError(400, "Invalid Conversation Data!");
}
}
get(convoID) {
console.log("convo getting, ", convoID)
return this.entries[this.ids[convoID]]
}
getByMember(userID) {
let convos = []
function populateMemberProfilesFromIDs(ids) {
let result = []
for(let i=0; i<ids.length; i++) {
result[i] = global.db.members.get(ids[i])
}
return result
}
for(let i=0; i<this.entries.length; i++) {
let convo = this.entries[i]
console.log(convo, userID)
if(convo.between.includes(userID)) {
console.log("found user convo: ", convo.id)
let messages = global.db.messages.getByConversation(`CONVERSATION-${convo.id}`)
let result = {
...convo,
messages,
}
result.between = populateMemberProfilesFromIDs(convo.between)
convos.push(result)
}
}
return convos
}
}

View File

@@ -0,0 +1,57 @@
import OrderedObject from "../OrderedObject.js"
const { z } = require("zod")
export default class Messages extends OrderedObject {
schema = z.object({
id: z.number(),
conversation: z.string(),
from: z.string(),
text: z.string(),
time: z.string()
}).strict()
save(msg) {
let id = `DM-${msg.id}`
let result = this.schema.safeParse(msg)
if(result.success) {
try {
super.add(id, msg)
} catch(e) {
console.error(e)
throw e
}
} else {
console.error(result.error)
throw new global.ServerError(400, "Invalid Conversation Data!");
}
}
add(convo, text, userID) {
let newMessage = {}
newMessage.time = global.currentTime()
newMessage.from = userID
newMessage.conversation = convo
newMessage.text = text
newMessage.id = this.entries.length+1
console.log(newMessage)
this.save(newMessage)
}
getByConversation(convoID) {
let result = []
for(let i=0; i<this.entries.length; i++) {
let entry = this.entries[i]
if(entry.conversation = convoID) {
let userID = entry.from
let fromUser = global.db.members.get(userID)
let newObj = {
...entry
}
newObj.from = fromUser
result.push(newObj)
}
}
return result
}
}

View File

@@ -0,0 +1,27 @@
export default class OrderedObject {
entries = []
ids = {}
indexes = []
add(id, data) {
if(this.ids[id]) {
console.error(`Can't add item ${id}: id already exists`)
throw new global.ServerError(400, `Member with this email already exists`)
}
this.entries.push(data)
this.ids[id] = this.entries.length - 1
}
update(id, data) {
let index = this.ids[id]
this.entries[index] = data
}
delete(key) {
if (typeof key === "number") {
return this.entries[key]
} else {
return this.entries[this.ids[key]]
}
}
}

View File

@@ -0,0 +1,42 @@
import OrderedObject from "./OrderedObject.js"
const { z } = require("zod")
export default class Payments extends OrderedObject {
schema = z.object({
id: z.number(),
name: z.string(),
email: z.string(),
time: z.string(),
amount: z.number(),
product: z.string(),
})
save(payment) {
let id = `PAYMENT-${payment.id}`
let result = this.schema.safeParse(payment)
if(result.success) {
try {
super.add(id, payment)
} catch(e) {
console.error(e)
throw e
}
} else {
console.error(result.error)
throw new global.ServerError(400, "Invalid Member Data!");
}
}
add(paymentObj) {
let toSave = {
id: this.entries.length+1,
...paymentObj
}
this.save(toSave)
}
get(id) {
return this.entries[this.ids[`PAYMENT-${id}`]]
}
}

52
server/db/model/Titles.js Normal file
View File

@@ -0,0 +1,52 @@
import OrderedObject from "./OrderedObject.js"
export default class Titles extends OrderedObject {
save(newTitle) {
let id = `HY-${this.entries.length+1}`
if(this.validate(id, newTitle)) {
try {
super.add(id, newTitle)
} catch(e) {
console.error(e)
throw e
}
} else {
throw new global.ServerError(400, "Invalid Member Data!");
}
}
validate(id, node) {
let checkID = () => {
let split = id.split("-")
return (
split.length === 2
&& split[0] === "HY"
&& !isNaN(Number(split[1]))
)
}
let idres = checkID()
if(!idres) {
return false
}
let checkFields = () => {
let fields = [
"fullName",
]
for(let i = 0; i < fields.length; i++) {
if(!node[fields[i]]) {
throw new Error(`Title ${id} is missing trait ${fields[i]}`)
return false
}
}
return true
}
let fieldres = checkFields()
if(!fieldres) {
return false
}
return true
}
}

41
server/db/model/Tokens.js Normal file
View File

@@ -0,0 +1,41 @@
import OrderedObject from "./OrderedObject.js"
const { z } = require("zod")
export default class Tokens extends OrderedObject {
schema = z.object({
index: z.number(),
url: z.string(),
uuid: z.string().regex(
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,
"Invalid UUID"
),
used: z.boolean(),
})
markUsed(uuid) {
let token = this.get(uuid)
token.used = true
super.update(`TOKEN-${uuid}`, token)
}
save(token) {
let id = `TOKEN-${token.uuid}`
let result = this.schema.safeParse(token)
if(result.success) {
try {
super.add(id, token)
} catch(e) {
console.error(e)
throw e
}
} else {
console.error(result.error)
throw new global.ServerError(400, "Invalid Member Data!");
}
}
get(uuid) {
return this.entries[this.ids[`TOKEN-${uuid}`]]
}
}

View File

@@ -1,33 +0,0 @@
module hyperia
go 1.24.0
toolchain go1.24.5
require (
github.com/alexedwards/argon2id v1.0.0
github.com/golang-jwt/jwt/v5 v5.3.0
github.com/joho/godotenv v1.5.1
github.com/lib/pq v1.10.9
github.com/mailgun/mailgun-go/v4 v4.23.0
github.com/mssola/user_agent v0.6.0
github.com/rs/zerolog v1.34.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
)
require (
github.com/go-chi/chi/v5 v5.2.1 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/mailgun/errors v0.4.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/yuin/goldmark v1.7.13 // indirect
golang.org/x/crypto v0.14.0 // indirect
golang.org/x/mod v0.27.0 // indirect
golang.org/x/sys v0.35.0 // indirect
golang.org/x/tools v0.36.1-0.20250903222949-a5c0eb837c9f // indirect
golang.org/x/tools/cmd/godoc v0.1.0-deprecated // indirect
golang.org/x/tools/godoc v0.1.0-deprecated // indirect
)

View File

@@ -1,105 +0,0 @@
github.com/alexedwards/argon2id v1.0.0 h1:wJzDx66hqWX7siL/SRUmgz3F8YMrd/nfX/xHHcQQP0w=
github.com/alexedwards/argon2id v1.0.0/go.mod h1:tYKkqIjzXvZdzPvADMWOEZ+l6+BD6CtBXMj5fnJppiw=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-chi/chi/v5 v5.2.1 h1:KOIHODQj58PmL80G2Eak4WdvUzjSJSm0vG72crDCqb8=
github.com/go-chi/chi/v5 v5.2.1/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/mailgun/errors v0.4.0 h1:6LFBvod6VIW83CMIOT9sYNp28TCX0NejFPP4dSX++i8=
github.com/mailgun/errors v0.4.0/go.mod h1:xGBaaKdEdQT0/FhwvoXv4oBaqqmVZz9P1XEnvD/onc0=
github.com/mailgun/mailgun-go/v4 v4.23.0 h1:jPEMJzzin2s7lvehcfv/0UkyBu18GvcURPr2+xtZRbk=
github.com/mailgun/mailgun-go/v4 v4.23.0/go.mod h1:imTtizoFtpfZqPqGP8vltVBB6q9yWcv6llBhfFeElZU=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mssola/user_agent v0.6.0 h1:uwPR4rtWlCHRFyyP9u2KOV0u8iQXmS7Z7feTrstQwk4=
github.com/mssola/user_agent v0.6.0/go.mod h1:TTPno8LPY3wAIEKRpAtkdMT0f8SE24pLRGPahjCH4uw=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yuin/goldmark v1.7.13 h1:GPddIs617DnBLFFVJFgpo1aBfe/4xcvMc3SB5t/D0pA=
github.com/yuin/goldmark v1.7.13/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.36.1-0.20250903222949-a5c0eb837c9f h1:jDEaVlf+r7N8Re8Es5pGylGkfnqcx9dfUCsd1T+biTs=
golang.org/x/tools v0.36.1-0.20250903222949-a5c0eb837c9f/go.mod h1:n+8pplxVZfXnmHBxWsfPnQRJ5vWroQDk+U2MFpjwtFY=
golang.org/x/tools/cmd/godoc v0.1.0-deprecated h1:sEGTwp9aZNTHsdf/2BGaRqE4ZLndRVH17rbQ2OVun9Q=
golang.org/x/tools/cmd/godoc v0.1.0-deprecated/go.mod h1:J6VY4iFch6TIm456U3fnw1EJZaIqcYlhHu6GpHQ9HJk=
golang.org/x/tools/godoc v0.1.0-deprecated h1:o+aZ1BOj6Hsx/GBdJO/s815sqftjSnrZZwyYTHODvtk=
golang.org/x/tools/godoc v0.1.0-deprecated/go.mod h1:qM63CriJ961IHWmnWa9CjZnBndniPt4a3CK0PVB9bIg=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@@ -1,148 +0,0 @@
package handlers
import (
"net/http"
"github.com/rs/zerolog/log"
"crypto/rand"
"encoding/hex"
"encoding/json"
"regexp"
"time"
"context"
"hyperia/config"
"github.com/mailgun/mailgun-go/v4"
)
type joinRequest struct {
Email string `json:"email"`
}
var emailRegex = regexp.MustCompile(`^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$`)
func isValidEmail(email string) bool {
return emailRegex.MatchString(email)
}
func HandleJoin(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Only POST allowed", http.StatusMethodNotAllowed)
return
}
var creds joinRequest
if err := json.NewDecoder(r.Body).Decode(&creds); err != nil {
http.Error(w, "Invalid JSON", http.StatusBadRequest)
return
}
if !isValidEmail(creds.Email) {
http.Error(w, "Invalid email address", http.StatusBadRequest)
return
}
// exists, err := EmailExists(creds.Email)
// if err != nil {
// log.Printf("Error checking email: %v", err)
// http.Error(w, "Internal server error", http.StatusInternalServerError)
// return
// }
// if exists {
// http.Error(w, "Email already exists.", http.StatusConflict)
// return
// }
// err = CreateApplicant(creds.Email)
// if err != nil {
// log.Printf("Error creating applicant: %v", err)
// http.Error(w, "Failed to create applicant", http.StatusInternalServerError)
// return
// }
// token, err := generateVerificationToken(creds.Email)
// if err != nil {
// log.Printf("Error generating verification token: %v", err)
// http.Error(w, "Error, please try again later.", http.StatusInternalServerError)
// return
// }
// err = sendWelcomeEmail(creds.Email, token)
// if err != nil {
// log.Printf("Error sending welcome email: %v", err)
// http.Error(w, "Failed to send email", http.StatusInternalServerError)
// return
// }
w.WriteHeader(http.StatusOK)
w.Write([]byte("OK"))
}
func generateVerificationToken(email string) (string, error) {
// Create 32 random bytes → 64-char hex string
b := make([]byte, 32)
if _, err := rand.Read(b); err != nil {
return "", err
}
token := hex.EncodeToString(b)
// err := CreateApplicantVerification(email, token)
// if err != nil {
// return "", err
// }
return token, nil
}
func mailgunEmail(to string, token string) error {
// link format: https://hyperia.so/verify?token=7a1a7cb986437cf8868b18cf43d73ce2e947d65aef30b42419bab957f5e51a09
domain := "mg.hyperia.so"
apiKey := "aeb90a0c75ef782eab6fc3d48fdf4435-812b35f5-fe818055"
mg := mailgun.NewMailgun(domain, apiKey)
sender := "welcome@" + domain
subject := "Verify Your Email"
verifyLink := config.BASE_URL + "/verify?token=" + token
body := "Thanks for signing up! Please verify your email by clicking this link: " + verifyLink
message := mg.NewMessage(sender, subject, body, to)
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
defer cancel()
_, _, err := mg.Send(ctx, message)
return err
}
func sendWelcomeEmail(to string, token string) error {
if config.ENV == "development" {
verifyLink := config.BASE_URL + "/verify?token=" + token
log.Debug().Msgf("email Verify Link: %s", verifyLink)
return nil
}
return nil
// query := `
// INSERT INTO emails ("to", "from", subject, body, createdon, createdby, status)
// VALUES ($1, $2, $3, $4, $5, $6, $7)
// `
// sender := "noreply@mail.hyperia.so"
// subject := "Verify Your Email"
// verifyLink := config.BASE_URL + "/verify?token=" + token
// body := "Thanks for signing up! Please verify your email by clicking this link: " + verifyLink
// _, err := DB.Exec(
// query,
// to,
// sender,
// subject,
// body,
// time.Now(), // createdon
// "go-backend", // createdby
// "pending", // status
// )
// return err
}

View File

@@ -1,101 +0,0 @@
package handlers
import (
"errors"
"log"
"net/http"
"os"
"strings"
"strconv"
"hyperia/db"
"github.com/alexedwards/argon2id"
)
type loginRequest struct {
Email string `json:"email"`
Password string `json:"password"`
}
type user struct {
ID int `json:"id"`
Email string `json:"email"`
}
func HandleLogin(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Only POST allowed", http.StatusMethodNotAllowed)
return
}
var creds loginRequest
if err := r.ParseForm(); err != nil {
http.Error(w, "Unable to parse form", http.StatusBadRequest)
return
}
email := r.FormValue("email")
password := r.FormValue("password")
creds.Email = email
creds.Password = password
user, err := getUserByCredentials(creds)
if err != nil || user == nil {
http.Error(w, "Unauthorized: "+ err.Error(), http.StatusUnauthorized)
return
}
keyInt, err := strconv.Atoi(user["key"].(string))
if err != nil {
// This means the string couldn't be parsed as an int — handle it
log.Println("user['key'] is not a valid int:", err)
http.Error(w, "internal server error", http.StatusInternalServerError)
return
}
jwtToken, err := GenerateJWT(keyInt)
if err != nil {
log.Println("JWT generation error:", err)
http.Error(w, "Failed to generate auth token", http.StatusInternalServerError)
return
}
cookie := &http.Cookie{
Name: "auth_token",
Value: jwtToken,
Path: "/",
HttpOnly: true,
Domain: "." + os.Getenv("BASE_URL"), // or ".localhost" — this allows subdomains
Secure: true, // default to true (production)
MaxAge: 2 * 60 * 60,
SameSite: http.SameSiteLaxMode,
}
http.SetCookie(w, cookie)
http.Redirect(w, r, "/", http.StatusSeeOther)
}
func getUserByCredentials(loginCreds loginRequest) (map[string]interface{}, error) {
email := strings.TrimSpace(strings.ToLower(loginCreds.Email))
user, err := db.Get.UserByEmail(email)
if err != nil {
return nil, errors.New("user not found")
}
dbPassword, ok := user["password"].(string)
if !ok {
return nil, errors.New("password format is invalid")
}
log.Println("pass: ", loginCreds, loginCreds.Password, dbPassword)
match, err := argon2id.ComparePasswordAndHash(loginCreds.Password, dbPassword)
if err != nil || !match {
return nil, errors.New("invalid password")
}
return user, nil
}

View File

@@ -1,27 +0,0 @@
package handlers
import (
"net/http"
"time"
"os"
"hyperia/config"
)
func HandleLogout(w http.ResponseWriter, r *http.Request) {
// Create a cookie with the same name and domain, but expired
cookie := &http.Cookie{
Name: "auth_token",
Value: "",
Path: "/",
HttpOnly: true,
Domain: "." + os.Getenv("BASE_URL"), // must match what you set when logging in
Secure: true,
Expires: time.Unix(0, 0), // way in the past
MaxAge: -1, // tells browser to delete immediately
SameSite: http.SameSiteLaxMode,
}
http.SetCookie(w, cookie)
http.Redirect(w, r, config.BASE_URL, http.StatusSeeOther)
}

View File

@@ -1,100 +0,0 @@
package handlers
import (
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"strings"
"strconv"
)
// Struct for incoming JSON request
type SignupRequest struct {
Email string `json:"email"`
}
// Struct for JSON response
type SignupResponse struct {
Message string `json:"message"`
}
type User struct {
Email string `json:"email"`
}
func HandleSignup(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Only POST allowed", http.StatusMethodNotAllowed)
return
}
if err := r.ParseForm(); err != nil {
http.Error(w, "Failed to parse form", http.StatusBadRequest)
return
}
email := strings.TrimSpace(r.FormValue("email"))
if email == "" {
http.Error(w, "Missing email", http.StatusBadRequest)
return
}
// Optional: basic email format check
if !strings.Contains(email, "@") {
http.Error(w, "Invalid email format", http.StatusBadRequest)
return
}
log.Printf("Received signup from email: %s", email)
err := AddUserToFile(email, "db/users.json")
if err != nil {
log.Printf("Error saving user: %v", err)
http.Error(w, "Failed to save user", http.StatusInternalServerError)
return
}
// Respond with success
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(SignupResponse{
Message: fmt.Sprintf("Signup received for %s. We will email you when we launch!", email),
})
}
func AddUserToFile(email string, filepath string) error {
// Read the current users (if file exists)
users := make(map[string]User)
if existingData, err := os.ReadFile(filepath); err == nil && len(existingData) > 0 {
if err := json.Unmarshal(existingData, &users); err != nil {
return fmt.Errorf("invalid users.json format: %v", err)
}
}
// Find the next numeric key
maxID := 0
for key := range users {
id, err := strconv.Atoi(key)
if err == nil && id > maxID {
maxID = id
}
}
newID := strconv.Itoa(maxID + 1)
// Add new user
users[newID] = User{Email: email}
// Marshal updated data
updated, err := json.MarshalIndent(users, "", " ")
if err != nil {
return fmt.Errorf("could not marshal updated users: %v", err)
}
// Write updated data back to file
if err := os.WriteFile(filepath, updated, 0644); err != nil {
return fmt.Errorf("could not write to users file: %v", err)
}
return nil
}

View File

@@ -1,24 +0,0 @@
package handlers
import (
"time"
"hyperia/config"
"github.com/golang-jwt/jwt/v5"
)
func GenerateJWT(userId int) (string, error) {
claims := jwt.MapClaims{
"applicant_id": userId,
"exp": time.Now().Add(2 * time.Hour).Unix(), // expires in 2 hours
"iat": time.Now().Unix(),
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
jwtSecret := []byte(config.JWT_SECRET)
signedToken, err := token.SignedString(jwtSecret)
if err != nil {
return "", err
}
return signedToken, nil
}

207
server/index.js Normal file
View File

@@ -0,0 +1,207 @@
const express = require('express');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const http = require('http');
const fs = require('fs');
const chalk = require('chalk');
const moment = require('moment');
const path = require('path');
const useragent = require("express-useragent");
import "./util.js"
import Socket from './ws/ws.js'
import Database from "./db/db.js"
import AuthHandler from './auth.js';
import PaymentsHandler from "./payments.js"
class Server {
db;
auth;
UIPath = path.join(__dirname, './ui')
DBPath = path.join(__dirname, './db')
registerRoutes(router) {
/* Stripe */
router.post("/create-checkout-session", PaymentsHandler.danceTicket)
router.post("/webhook", express.raw({ type: "application/json" }), PaymentsHandler.webhook)
/* Auth */
router.post('/login', this.auth.login)
router.get('/profile', this.auth.getProfile)
router.get('/signout', this.auth.logout)
/* Site */
router.get('/signup', this.verifyToken, this.get)
router.post('/signup', this.verifyToken, this.newUserSubmission)
router.get('/db/images/*', this.getUserImage)
router.get('/*', this.get)
return router
}
verifyToken = (req, res, next) => {
const { token } = req.query;
if (!token) {
return res.status(400).json({ error: 'Token is required' });
}
let fromDB = this.db.tokens.get(token)
if (!fromDB) {
return res.status(403).json({ error: 'Invalid or expired token' });
} else if(fromDB.used) {
return res.status(403).json({ error: 'Invalid or expired token' });
}
next()
}
newUserSubmission = async (req, res) => {
const { token } = req.query;
try {
let tokenData = db.tokens.get(token)
if(tokenData.used) throw new global.ServerError(400, "Token alredy used!")
await db.members.add(req.body, tokenData.uuid)
db.tokens.markUsed(token)
global.db.saveData()
return res.status(200).json({});
} catch(e) {
console.log(e)
return res.status(e.status).json({ error: 'Error adding new member' });
}
}
authMiddleware = (req, res, next) => {
const authHeader = req.headers.authorization;
if (!authHeader) {
return res.status(401).json({ error: 'Authorization token required.' });
}
const [scheme, token] = authHeader.split(' ');
if (scheme !== 'Bearer' || !token) {
return res.status(401).json({ error: 'Malformed authorization header.' })
}
try {
const payload = this.auth.verify(token);
req.user = payload;
return next();
} catch (err) {
return res.status(403).json({ error: 'Invalid or expired token.' });
}
}
getUserImage = async (req, res) => {
function getFileByNumber(dir, number) {
const files = fs.readdirSync(dir);
const match = files.find(file => {
const base = path.parse(file).name; // filename without extension
return base === String(number);
});
return match ? path.join(dir, match) : null;
}
let filePath = getFileByNumber(path.join(this.DBPath, "images"), path.basename(req.url))
res.sendFile(filePath)
}
get = async (req, res) => {
let url = req.url
let publicSite = () => {
let filePath;
if(url.startsWith("/_")) {
filePath = path.join(this.UIPath, url);
} else if(url.includes("75820185")) {
filePath = path.join(this.UIPath, "public", url.split("75820185")[1]);
} else {
filePath = path.join(this.UIPath, "public", "index.html");
}
res.sendFile(filePath);
}
let privateSite = () => {
let filePath;
let platformFolder = req.useragent.isMobile ? "mobile" : "desktop"
if(url.startsWith("/_")) {
filePath = path.join(this.UIPath, url);
} else if(url.includes("75820185")) {
filePath = path.join(this.UIPath, platformFolder, url.split("75820185")[1]);
} else {
filePath = path.join(this.UIPath, platformFolder, "index.html");
}
res.sendFile(filePath);
}
if(!this.auth.isLoggedInUser(req, res)) {
publicSite()
} else {
privateSite()
}
}
logRequest(req, res, next) {
const formattedDate = moment().format('M.D');
const formattedTime = moment().format('h:mma');
if(req.url.includes("/api/")) {
console.log(chalk.blue(` ${req.method} ${req.url} | ${formattedDate} ${formattedTime}`));
} else {
if(req.url === "/")
console.log(chalk.gray(` ${req.method} ${req.url} | ${formattedDate} ${formattedTime}`));
}
next();
}
logResponse(req, res, next) {
const originalSend = res.send;
res.send = function (body) {
if(res.statusCode >= 400) {
console.log(chalk.blue( `<-${chalk.red(res.statusCode)}- ${req.method} ${req.url} | ${chalk.red(body)}`));
} else {
console.log(chalk.blue(`<-${res.statusCode}- ${req.method} ${req.url}`));
}
originalSend.call(this, body);
};
next();
}
constructor() {
this.db = new Database()
global.db = this.db
this.auth = new AuthHandler()
const app = express();
app.post("/webhook", express.raw({ type: "application/json" }), PaymentsHandler.webhook)
app.use(cors({ origin: '*' }));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(useragent.express());
app.use(this.logRequest);
app.use(this.logResponse);
let router = express.Router();
this.registerRoutes(router)
app.use('/', router);
const server = http.createServer(app);
global.Socket = new Socket(server);
const PORT = 3003;
server.listen(PORT, () => {
console.log("\n")
console.log(chalk.yellow("*************** Hyperia ***************"))
console.log(chalk.yellowBright(`Server is running on port ${PORT}: http://localhost`));
console.log(chalk.yellow("***************************************"))
console.log("\n")
});
process.on('SIGINT', async () => {
console.log(chalk.red('Closing server...'));
console.log(chalk.green('Database connection closed.'));
process.exit(0);
});
Object.preventExtensions(this);
}
}
const server = new Server()

View File

@@ -1,28 +0,0 @@
package logger
import (
"fmt"
"os"
"hyperia/config"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"gopkg.in/natefinch/lumberjack.v2"
)
// Very basic setup for starters,
func ConfigureLogger() {
if !config.LOG_TO_FILE {
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
} else {
fmt.Println("logging to file /var/log/hyperia-server.log")
logFile := &lumberjack.Logger{
Filename: "/var/log/hyperia-server.log", // Path to your log file
MaxSize: 100, // Max size in MB before rotation
MaxBackups: 3, // Max number of old log files to keep
MaxAge: 28, // Max number of days to retain old log files
Compress: true, // Whether to compress old log files
}
log.Logger = zerolog.New(logFile).With().Timestamp().Logger()
}
}

View File

@@ -1,147 +0,0 @@
package main
import (
"fmt"
"net/http"
"path/filepath"
"hyperia/config"
"hyperia/db"
"hyperia/handlers"
"hyperia/logger"
// "runtime/debug"
"strings"
"github.com/golang-jwt/jwt/v5"
"github.com/rs/zerolog/log"
)
func main() {
config.SetConfiguration()
logger.ConfigureLogger()
err := db.InitDB()
if err != nil {
log.Fatal().Msgf("failed to connect to database: %v", err)
} else {
log.Info().Msg("successfully connected to PostgreSQL")
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
// Keeps server from crashing if a request fails
// defer func() {
// if r := recover(); r != nil {
// log.Error().
// Interface("panic_reason", r).
// Bytes("stack_trace", debug.Stack()).
// Msg("panic in http goroutine")
// }
// }()
if(loggedIn(w, r)) {
log.Info().Msg("logged")
handleSite(w, r)
} else {
handlePublic(w, r)
}
})
log.Info().Msgf("Server starting on http://localhost: %s", config.PORT)
err = http.ListenAndServe(":"+config.PORT, nil)
if err != nil {
log.Fatal().Msgf("failed to start server: %v", err)
}
}
func handlePublic(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/api/signup" {
handlers.HandleSignup(w, r)
return
}
if r.URL.Path == "/api/login" {
handlers.HandleLogin(w, r)
return
}
if strings.HasPrefix(r.URL.Path, "/_") {
handleAsset(w, r)
return
}
servePublicFile(w, r)
}
func servePublicFile(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if path == "/" {
w.Header().Set("Cache-Control", "no-store")
w.Header().Set("Pragma", "no-cache")
w.Header().Set("Expires", "0")
path = "/index.html"
} else if !strings.Contains(path, ".") {
path = filepath.Join("/pages", path) + ".html"
}
filePath := filepath.Join("../ui/public", path)
log.Debug().Msgf("serving: %s", filePath)
http.ServeFile(w, r, filePath)
}
func handleSite(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/signout" {
handlers.HandleLogout(w, r)
return
}
if strings.HasPrefix(r.URL.Path, "/_") {
handleAsset(w, r)
return
}
serveSiteFiles(w, r)
}
func serveSiteFiles(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if path == "/" {
path = "/index.html"
} else if !strings.Contains(path, ".") {
path = filepath.Join("/pages", path) + ".html"
}
filePath := filepath.Join("../ui/site", path)
log.Debug().Msgf("serving: %s", filePath)
http.ServeFile(w, r, filePath)
}
func handleAsset(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
filePath := filepath.Join("../ui", path)
log.Debug().Msgf("serving asset: %s", filePath)
http.ServeFile(w, r, filePath)
}
func loggedIn(w http.ResponseWriter, r *http.Request) bool {
cookie, err := r.Cookie("auth_token")
if err != nil {
log.Warn().Msg("Unauthorized - missing auth token")
return false
}
jwtToken := cookie.Value
token, err := jwt.Parse(jwtToken, func(token *jwt.Token) (interface{}, error) {
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
}
return []byte(config.JWT_SECRET), nil
})
if err != nil {
log.Err(err).Msg("error authenticating jwt")
return false
}
if err != nil || !token.Valid {
return false
}
return true
}

68
server/payments.js Normal file
View File

@@ -0,0 +1,68 @@
const Stripe = require("stripe")
const dotenv = require("dotenv")
dotenv.config();
const stripe = new Stripe(process.env.STRIPE_SECRET);
export default class PaymentsHandler {
static async danceTicket(req, res) {
try {
const session = await stripe.checkout.sessions.create({
mode: "payment",
payment_method_types: ["card"],
metadata: {
productId: "austin_winter_ball_2025_ticket"
},
line_items: [
{
price_data: {
currency: "usd",
product_data: {
name: "Hyperia Winter Ball"
},
unit_amount: 3500
},
quantity: 1
}
],
success_url: `${process.env.PROTOCOL + process.env.BASE_URL}/success`,
cancel_url: `${process.env.PROTOCOL + process.env.BASE_URL}/events`
});
res.json({ url: session.url });
} catch (err) {
console.error(err);
res.status(500).json({ error: "Something went wrong." });
}
}
static webhook = (req, res) => {
const sig = req.headers["stripe-signature"];
try {
const event = stripe.webhooks.constructEvent(
req.body,
sig,
process.env.WEBHOOK_SECRET
);
if (event.type === "checkout.session.completed") {
const session = event.data.object;
let toStore = {
"product": session.metadata.productId,
"email": session.customer_details.email,
"name": session.customer_details.name,
"time": global.currentTime(),
"amount": session.amount_total,
}
global.db.payments.add(toStore)
}
res.sendStatus(200);
} catch (err) {
console.error(err);
res.sendStatus(400);
}
}
}

24
server/util.js Normal file
View File

@@ -0,0 +1,24 @@
global.ServerError = class extends Error {
constructor(status, msg) {
super(msg);
this.status = status;
}
}
global.currentTime = function () {
const now = new Date();
const month = String(now.getMonth() + 1).padStart(2, "0");
const day = String(now.getDate()).padStart(2, "0");
const year = now.getFullYear();
let hours = now.getHours();
const ampm = hours >= 12 ? "pm" : "am";
hours = hours % 12 || 12; // convert to 12-hour format
const minutes = String(now.getMinutes()).padStart(2, "0");
const seconds = String(now.getSeconds()).padStart(2, "0");
const ms = String(now.getMilliseconds()).padStart(4, "0"); // 4-digit like "5838"
return `${month}.${day}.${year}-${hours}:${minutes}:${seconds}${ms}${ampm}`;
}

View File

@@ -0,0 +1,43 @@
const { z } = require("zod")
const sendSchema = z.object({
forum: z.string(),
text: z.string(),
})
.strict()
const getSchema = z.object({
forum: z.string(),
number: z.number()
})
.strict()
export default class ForumHandler {
static handleSend(msg, ws) {
try {
global.db.posts.add(msg.text, msg.forum, ws.userEmail)
global.Socket.broadcast({event: "new-post", app: "FORUM", forum: msg.forum, msg: this.handleGet({forum: msg.forum, number: 100})})
return {success: true}
} catch(e) {
console.error(e)
}
}
static handleGet(msg) {
let data = global.db.posts.get(msg.forum, msg.number)
return data
}
static handle(operation, msg, ws) {
switch(operation) {
case "SEND":
if(!sendSchema.safeParse(msg).success) throw new Error("Incorrectly formatted Forum ws message!")
return this.handleSend(msg, ws)
case "GET":
if(!getSchema.safeParse(msg).success) throw new Error("Incorrectly formatted Forum ws message!")
return this.handleGet(msg)
}
}
}

View File

@@ -0,0 +1,40 @@
const { z } = require("zod")
const sendSchema = z.object({
conversation: z.string(),
text: z.string(),
})
.strict()
export default class MessagesHandler {
static handleSend(msg, ws) {
let user = global.db.members.getByEmail(ws.userEmail)
let convo = global.db.conversations.get(msg.conversation)
if(convo.between.includes(`MEMBER-${user.id}`)) {
global.db.messages.add(msg.conversation, msg.text, `MEMBER-${user.id}`)
global.Socket.broadcast({event: "new-message", app: "MESSAGES", msg: {conversationID: convo.id, messages: global.db.messages.getByConversation(`CONVERSATION-${msg.conversation}`)}})
} else {
throw new Error("Can't add to a conversation user is not a part of!")
}
return {success: true}
}
static handleGet(ws) {
let user = global.db.members.getByEmail(ws.userEmail)
let data = global.db.conversations.getByMember(`MEMBER-${user.id}`)
return data
}
static handle(operation, msg, ws) {
switch(operation) {
case "GET":
return this.handleGet(ws)
case "SEND":
if(!sendSchema.safeParse(msg).success) throw new Error("Incorrectly formatted Forum ws message!")
return this.handleSend(msg, ws)
}
}
}

108
server/ws/ws.js Normal file
View File

@@ -0,0 +1,108 @@
const { WebSocket, WebSocketServer } = require('ws');
const { z } = require("zod")
const jwt = require('jsonwebtoken');
import ForumHandler from "./handlers/ForumHandler.js"
import MessagesHandler from "./handlers/MessagesHandler.js"
export default class Socket {
wss;
messageSchema = z.object({
id: z.string(),
app: z.string(),
operation: z.string().optional(),
msg: z.union([
z.object({}).passthrough(), // allows any object
z.array(z.any()) // allows any array
]).optional()
})
.superRefine((data, ctx) => {
if (data.operation !== "GET" && data.msg === undefined) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
path: ["msg"],
message: "msg is required when operation is not GET"
})
}
})
.strict()
constructor(server) {
this.wss = new WebSocketServer({ server });
this.wss.on('connection', (ws, req) => {
console.log('✅ New WebSocket client connected');
function parseCookies(cookieHeader = "") {
return Object.fromEntries(
cookieHeader.split(";").map(c => {
const [key, ...v] = c.trim().split("=");
return [key, decodeURIComponent(v.join("="))];
})
);
}
const cookies = parseCookies(req.headers.cookie);
const token = cookies.auth_token;
if (!token) throw new Error("No auth token");
const payload = jwt.verify(token, process.env.JWT_SECRET);
ws.userEmail = payload.email;
ws.on('message', (msg) => {
this.handleMessage(msg, ws);
});
ws.on('close', () => {
console.log('Client disconnected');
});
});
console.log('WebSocket server initialized');
}
// Build a system where the ws obj is updated every time on navigate, so it already has context
// this way, we can only send broadcast messages to clients that actually have that app / subapp open
handleMessage = (msg, ws) => {
try {
const text = msg.toString();
const req = JSON.parse(text);
if(!this.messageSchema.safeParse(req).success) throw new Error("Socket.handleMessage: Incoming ws message has incorrect format!")
let responseData;
switch (req.app) {
case "FORUM":
responseData = ForumHandler.handle(req.operation, req.msg, ws)
break;
case "MESSAGES":
responseData = MessagesHandler.handle(req.operation, req.msg, ws)
break;
default:
console.error("unknown ws message")
}
let response = {
...req
}
response.msg = responseData
if(!this.messageSchema.safeParse(response).success) throw new Error("Socket.handleMessage: Outgoing ws message has incorrect format!")
ws.send(JSON.stringify(response))
} catch (e) {
console.error("Invalid WS message:", e);
}
}
broadcast(event) {
if (!this.wss) return;
let message = JSON.stringify(event)
this.wss.clients.forEach(ws => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(message);
}
});
}
}

1173
ui/_/code/quill.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,16 +1,23 @@
:root { :root {
--tan: #E6D7AA; --main: var(--brown);
--accent: black; --accent: var(--gold);
--purple: #251D44;
--green: #0B5538; --tan: #FFDFB4;
--gold: #F2B36F;
--divider: #bb7c36;
--green: #0857265c;
--red: #BC1C02; --red: #BC1C02;
--brown: #c6a476; --brown: #812A18;
--darkbrown: #3f0808;
--accent2: var(--green);
} }
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
:root { :root {
--tan: #251D44; --main: var(--brown);
--accent: #AF7323; --accent: var(--gold);
--accent2: var(--gold);
} }
} }
@@ -36,12 +43,19 @@
} }
body { body {
margin: 0px;
font-family: 'Bona Nova', sans-serif; font-family: 'Bona Nova', sans-serif;
font-size: 16px; font-size: 16px;
background-color: var(--tan); background-color: var(--main);
color: var(--accent); color: var(--accent);
} }
@media (max-width: 480px) {
body, html{
overflow-x: hidden;
}
}
#title { #title {
padding: 5px 10px; padding: 5px 10px;
font-size: 1.7rem; font-size: 1.7rem;
@@ -71,8 +85,27 @@ a:active {
} }
button { button {
background-color: var(--green); background-color: transparent;
color: var(--tan); color: var(--accent);
padding: 1em; padding: 0.5em;
box-shadow: none; box-shadow: none;
border: 1px solid var(--accent);
border-radius: 0.3em;
}
input {
background-color: transparent;
border: 1px solid var(--accent2);
padding-left: 1em;
padding-top: 0.5em;
padding-bottom: 0.5em;
border-radius: 0.3em;
}
input::placeholder {
color: var(--accent)
}
input:focus {
outline: 1px solid var(--red);
} }

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,62 @@
class Connection {
connectionTries = 0
ws;
linkCreated;
wsStatus;
constructor(receiveCB) {
this.init()
this.receiveCB = receiveCB
}
init() {
if(window.location.hostname.includes("local")) {
this.ws = new WebSocket("ws://" + window.location.host)
} else {
this.ws = new WebSocket("wss://" + window.location.hostname + window.location.pathname)
}
this.ws.addEventListener('open', () => {
this.connectionTries = 0
console.log("Websocket connection established.");
this.ws.addEventListener('message', this.receiveCB)
});
this.ws.addEventListener("close", () => {
this.checkOpen();
console.log('Websocket Closed')
})
}
async checkOpen() {
if (this.ws.readyState === WebSocket.OPEN) {
return true
} else {
await this.sleep(this.connectionTries < 20 ? 5000 : 60000)
this.connectionTries++
console.log('Reestablishing connection')
this.init()
}
}
sleep = (time) => {
return new Promise(resolve => {
setTimeout(resolve, time);
});
}
send = (msg) => {
console.log("sending")
if (this.ws.readyState === WebSocket.OPEN) {
this.ws.send(msg);
}
else if(this.connectionTries === 0) {
setTimeout(() => {
this.send(msg)
}, 100)
}
else {
console.error('No websocket connection: Cannot send message');
}
}
}
export default Connection

45
ui/_/code/ws/Socket.js Normal file
View File

@@ -0,0 +1,45 @@
import Connection from "./Connection.js";
export default class Socket {
connection;
disabled = true;
requestID = 1;
pending = new Map();
constructor() {
this.connection = new Connection(this.receive);
}
isOpen() {
if(this.connection.checkOpen()) {
return true;
} else {
return false;
}
}
send(msg) {
return new Promise(resolve => {
const id = (++this.requestID).toString();
this.pending.set(id, resolve);
this.connection.send(JSON.stringify({ id, ...msg }));
});
}
receive = (event) => {
const msg = JSON.parse(event.data);
if (msg.id && this.pending.has(msg.id)) {
this.pending.get(msg.id)(msg);
this.pending.delete(msg.id);
return;
} else {
this.onBroadcast(msg)
}
}
onBroadcast(msg) {
window.dispatchEvent(new CustomEvent(msg.event, {
detail: msg.msg
}));
}
}

8
ui/_/code/zod.js Normal file

File diff suppressed because one or more lines are too long

4
ui/_/icons/Column.svg Normal file
View File

@@ -0,0 +1,4 @@
<svg width="28" height="32" viewBox="0 0 28 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.52366 0.0493342C4.88415 0.328928 1.12711 1.09781 0.253382 1.93659L0 2.18124V3.45688V4.73253L0.244645 4.9597C0.541713 5.23929 0.917417 5.43152 1.69504 5.69363C2.42023 5.94702 2.60372 5.96449 2.44645 5.77227C1.99211 5.22182 3.27649 4.584 5.7142 4.16461C8.0558 3.75395 9.35765 3.67532 13.5428 3.67532C17.728 3.67532 19.0299 3.75395 21.3715 4.16461C23.8354 4.584 25.0935 5.22182 24.6305 5.78974C24.5169 5.9208 24.5344 5.92954 24.7877 5.87712C25.3382 5.77227 26.4915 5.26551 26.7886 5.01212L27.0856 4.75001V3.45688V2.16376L26.7886 1.90164C25.9498 1.16771 22.8743 0.4862 18.7852 0.136707C17.3523 0.00564766 11.1401 -0.0467762 9.52366 0.0493342Z" fill="black"/>
<path d="M10.6246 5.30045C8.06453 5.44899 5.65304 5.82469 4.49971 6.26156C3.80073 6.52367 3.49492 6.83822 3.49492 7.27508V7.62458L4.0978 7.61584C4.63077 7.6071 4.73562 7.63331 4.93658 7.82553C5.06764 7.94786 5.20743 8.11386 5.25986 8.20997C5.31228 8.31482 5.33849 11.3292 5.32976 16.79L5.32102 25.2128H5.76662H6.20349V16.423C6.20349 6.60231 6.16854 7.15276 6.79762 6.89064C7.18207 6.73337 7.75873 6.80327 8.06453 7.03918C8.58877 7.45857 8.56256 6.82948 8.56256 18.1268V28.4456H9.17417H9.78578V17.8734C9.78578 11.4428 9.81199 7.24013 9.86442 7.14402C10.0741 6.75958 10.3974 6.56736 10.9216 6.53241C11.5158 6.48873 11.9526 6.68968 12.1361 7.0916C12.2148 7.26635 12.241 10.1671 12.2322 19.4549V31.591H13.5865H14.9408V19.4636C14.9408 7.59836 14.9408 7.33624 15.1155 7.06539C15.6136 6.24408 16.9853 6.34893 17.3436 7.24013C17.4571 7.52846 17.4746 8.89148 17.4746 18.0132V28.4543L18.0687 28.4281L18.6541 28.4019L18.6279 18.2229C18.6017 11.2069 18.6279 7.94786 18.6891 7.7469C18.9774 6.82948 20.2443 6.48873 20.7861 7.18771C20.9695 7.41488 20.9695 7.4673 20.9695 16.3095V25.2128H21.4064H21.8433V16.8424C21.8433 8.708 21.852 8.47209 22.018 8.20124C22.2714 7.77311 22.5597 7.63331 23.1189 7.64205H23.6169L23.5645 7.2314C23.5296 6.94307 23.4597 6.76832 23.2937 6.63726C22.1403 5.63247 16.0155 4.99465 10.6246 5.30045Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 -140 780 780" enable-background="new 0 0 780 500" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="780" height="500" fill="#FFF" stroke-width="15px" stroke="#000000"/><path d="m409.41 197.26c30.938 0 56.02 23.58 56.02 52.709v0.033c0 29.129-25.082 52.742-56.02 52.742-30.941 0-56.022-23.613-56.022-52.742v-0.033c0-29.129 25.081-52.709 56.022-52.709z" fill="#F47216"/><path d="m321.43 197.94c8.836 0 16.247 1.785 25.27 6.09v22.753c-8.544-7.863-15.955-11.154-25.757-11.154-19.265 0-34.413 15.015-34.413 34.051 0 20.074 14.681 34.195 35.368 34.195 9.312 0 16.586-3.12 24.802-10.856v22.764c-9.343 4.142-16.912 5.775-25.757 5.775-31.277 0-55.581-22.597-55.581-51.736-2e-3 -28.83 24.949-51.882 56.068-51.882zm-97.113 0.626c11.546 0 22.109 3.721 30.942 10.994l-10.748 13.248c-5.351-5.646-10.411-8.027-16.563-8.027-8.854 0-15.301 4.744-15.301 10.988 0 5.354 3.618 8.188 15.944 12.481 23.364 8.043 30.289 15.176 30.289 30.926 0 19.193-14.976 32.554-36.319 32.554-15.631 0-26.993-5.795-36.457-18.871l13.268-12.03c4.73 8.608 12.622 13.223 22.42 13.223 9.163 0 15.947-5.95 15.947-13.983 0-4.164-2.056-7.733-6.158-10.258-2.066-1.195-6.158-2.978-14.199-5.646-19.292-6.538-25.91-13.527-25.91-27.186-1e-3 -16.227 14.213-28.413 32.845-28.413zm234.72 1.729h22.436l28.084 66.592 28.447-66.592h22.267l-45.493 101.69h-11.054l-44.687-101.69zm-301.21 0.152h20.541v99.143h-20.541v-99.143zm411.73 0h58.253v16.799h-37.726v22.006h36.336v16.791h-36.336v26.762h37.726v16.785h-58.253v-99.143zm115.59 57.377c15.471-2.965 23.983-12.926 23.983-28.105 0-18.562-13.575-29.271-37.266-29.271h-30.454v99.144h20.516v-39.83h2.681l28.43 39.828h25.26l-33.15-41.766zm-17.218-11.736h-6.002v-30.025h6.326c12.791 0 19.744 5.049 19.744 14.697 2e-3 9.967-6.951 15.328-20.068 15.328zm-576.09-45.641h-30.149v99.143h29.992c15.946 0 27.465-3.543 37.573-11.445 12.014-9.359 19.117-23.467 19.117-38.057 1e-3 -29.259-23.221-49.641-56.533-49.641zm23.997 74.479c-6.454 5.484-14.837 7.879-28.108 7.879h-5.514v-65.559h5.513c13.271 0 21.323 2.238 28.108 8.018 7.104 5.956 11.377 15.184 11.377 24.682 1e-3 9.513-4.273 19.024-11.376 24.98z"/></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 -9 58 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="0.5" y="0.5" width="57" height="39" rx="3.5" fill="white" stroke="#F3F3F3"/>
<path d="M34.3102 28.9765H23.9591V10.5122H34.3102V28.9765Z" fill="#FF5F00"/>
<path d="M24.6223 19.7429C24.6223 15.9973 26.3891 12.6608 29.1406 10.5107C27.1285 8.93843 24.5892 7.99998 21.8294 7.99998C15.2961 7.99998 10 13.2574 10 19.7429C10 26.2283 15.2961 31.4857 21.8294 31.4857C24.5892 31.4857 27.1285 30.5473 29.1406 28.975C26.3891 26.8249 24.6223 23.4884 24.6223 19.7429" fill="#EB001B"/>
<path d="M48.2706 19.7429C48.2706 26.2283 42.9745 31.4857 36.4412 31.4857C33.6814 31.4857 31.1421 30.5473 29.1293 28.975C31.8815 26.8249 33.6483 23.4884 33.6483 19.7429C33.6483 15.9973 31.8815 12.6608 29.1293 10.5107C31.1421 8.93843 33.6814 7.99998 36.4412 7.99998C42.9745 7.99998 48.2706 13.2574 48.2706 19.7429" fill="#F79E1B"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 -140 780 780" enable-background="new 0 0 780 500" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="M40,0h700c22.092,0,40,17.909,40,40v420c0,22.092-17.908,40-40,40H40c-22.091,0-40-17.908-40-40V40 C0,17.909,17.909,0,40,0z" fill="#0E4595"/><path d="m293.2 348.73l33.361-195.76h53.36l-33.385 195.76h-53.336zm246.11-191.54c-10.57-3.966-27.137-8.222-47.822-8.222-52.725 0-89.865 26.55-90.18 64.603-0.299 28.13 26.514 43.822 46.752 53.186 20.771 9.595 27.752 15.714 27.654 24.283-0.131 13.121-16.586 19.116-31.922 19.116-21.357 0-32.703-2.967-50.227-10.276l-6.876-3.11-7.489 43.823c12.463 5.464 35.51 10.198 59.438 10.443 56.09 0 92.5-26.246 92.916-66.882 0.199-22.269-14.016-39.216-44.801-53.188-18.65-9.055-30.072-15.099-29.951-24.268 0-8.137 9.668-16.839 30.557-16.839 17.449-0.27 30.09 3.535 39.938 7.5l4.781 2.26 7.232-42.429m137.31-4.223h-41.232c-12.773 0-22.332 3.487-27.941 16.234l-79.244 179.4h56.031s9.16-24.123 11.232-29.418c6.125 0 60.555 0.084 68.338 0.084 1.596 6.853 6.49 29.334 6.49 29.334h49.514l-43.188-195.64zm-65.418 126.41c4.412-11.279 21.26-54.723 21.26-54.723-0.316 0.522 4.379-11.334 7.074-18.684l3.605 16.879s10.219 46.729 12.354 56.528h-44.293zm-363.3-126.41l-52.24 133.5-5.567-27.13c-9.725-31.273-40.025-65.155-73.898-82.118l47.766 171.2 56.456-0.064 84.004-195.39h-56.521" fill="#ffffff"/><path d="m146.92 152.96h-86.041l-0.681 4.073c66.938 16.204 111.23 55.363 129.62 102.41l-18.71-89.96c-3.23-12.395-12.597-16.094-24.186-16.527" fill="#F2AE14"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

5
ui/_/icons/jobs.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 20 KiB

4
ui/_/icons/letter.svg Normal file
View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="100" height="100">
<path d="M0 0 C33 0 66 0 100 0 C100 23.76 100 47.52 100 72 C67 72 34 72 0 72 C0 48.24 0 24.48 0 0 Z M4 4 C3.46383745 8.70053019 3.46383745 8.70053019 5.30664062 10.5546875 C5.91701172 10.99039062 6.52738281 11.42609375 7.15625 11.875 C7.84114502 12.37870117 8.52604004 12.88240234 9.23168945 13.40136719 C9.98023193 13.92891602 10.72877441 14.45646484 11.5 15 C13.06813799 16.14868129 14.63450237 17.29978719 16.19921875 18.453125 C17.40070557 19.33194336 17.40070557 19.33194336 18.62646484 20.22851562 C22.28176453 22.95664302 25.79456149 25.84835522 29.3125 28.75 C31.2591282 30.33484221 33.20813973 31.91671841 35.15722656 33.49853516 C36.36876709 34.48568066 37.57657813 35.4774244 38.78027344 36.47412109 C40.40268905 37.81286849 42.04179632 39.1275644 43.6875 40.4375 C44.59886719 41.17871094 45.51023438 41.91992188 46.44921875 42.68359375 C48.88630843 44.26660079 48.88630843 44.26660079 51.37890625 43.5859375 C54.95082046 41.42468986 58.06328957 38.87595616 61.25 36.1875 C67.05660886 31.37582668 72.93368091 26.68843648 78.9375 22.125 C80.0061731 21.30745239 80.0061731 21.30745239 81.09643555 20.47338867 C84.06177854 18.20933035 87.03509444 15.97490703 90.0703125 13.8046875 C91.30394531 12.91136719 91.30394531 12.91136719 92.5625 12 C93.24441406 11.525625 93.92632812 11.05125 94.62890625 10.5625 C96.54964019 8.72009187 96.54964019 8.72009187 96 4 C65.64 4 35.28 4 4 4 Z M4 15 C4 32.49 4 49.98 4 68 C34.36 68 64.72 68 96 68 C96 50.51 96 33.02 96 15 C91.10723979 18.66957016 86.23777639 22.33985116 81.4375 26.125 C80.5556604 26.81843506 80.5556604 26.81843506 79.65600586 27.52587891 C76.42735841 30.06945531 73.21156659 32.62826175 70.0078125 35.203125 C69.01890015 35.99759033 69.01890015 35.99759033 68.01000977 36.80810547 C66.75119369 37.82090246 65.49376977 38.83543328 64.23803711 39.85205078 C63.07629198 40.7874235 61.90867537 41.71555794 60.73486328 42.63574219 C59.54616335 43.57050931 58.37318371 44.52551784 57.21435547 45.49707031 C54.26370419 47.84496996 52.75924576 48.97890984 48.90625 49.0859375 C45.41094599 47.77989648 43.28715117 46.10681719 40.5 43.625 C39.44697905 42.70771873 38.39222174 41.79242782 37.3359375 40.87890625 C36.7903418 40.40340332 36.24474609 39.92790039 35.68261719 39.43798828 C32.89861809 37.05874355 30.01440497 34.81161154 27.125 32.5625 C26.54911133 32.11293945 25.97322266 31.66337891 25.37988281 31.20019531 C24.19857561 30.27805578 23.01693136 29.35634787 21.83496094 28.43505859 C19.90812651 26.92814897 17.98846374 25.41247563 16.0703125 23.89453125 C15.43077637 23.38913818 14.79124023 22.88374512 14.13232422 22.36303711 C12.90121746 21.38980809 11.671035 20.41540842 10.44189453 19.43969727 C7.37045638 16.99238729 7.37045638 16.99238729 4 15 Z " fill="#000000" transform="translate(0,14)"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="800px" height="800px" viewBox="0 0 466.583 466.582"
xml:space="preserve">
<g>
<path d="M233.292,0c-85.1,0-154.334,69.234-154.334,154.333c0,34.275,21.887,90.155,66.908,170.834
c31.846,57.063,63.168,104.643,64.484,106.64l22.942,34.775l22.941-34.774c1.317-1.998,32.641-49.577,64.483-106.64
c45.023-80.68,66.908-136.559,66.908-170.834C387.625,69.234,318.391,0,233.292,0z M233.292,233.291c-44.182,0-80-35.817-80-80
s35.818-80,80-80c44.182,0,80,35.817,80,80S277.473,233.291,233.292,233.291z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 878 B

View File

@@ -1,29 +1,38 @@
<svg width="115" height="161" viewBox="0 0 115 161" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg width="64" height="90" viewBox="0 0 64 90" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M46.9604 1.12722C52.2219 1.12677 58.2104 0.840336 72.1031 1.12852C75.0618 1.12852 73.7524 1.12818 80.0255 1.12722L103.502 1.12465C105.494 1.12465 111.55 1.14667 113.265 1.12465H113.272C113.69 1.12465 113.865 1.46049 113.895 1.52504C113.942 1.62458 113.96 1.72053 113.968 1.76851C113.986 1.87785 113.993 2.01051 113.997 2.14308C114.004 2.41925 113.999 2.8369 113.989 3.40304C113.971 4.54588 113.934 6.35911 113.934 9.06029V9.079C113.792 14.1294 113.829 19.1869 113.85 24.2593C113.87 29.3271 113.874 34.4079 113.664 39.4834C113.515 43.0922 113.22 50.9277 112.789 58.7839C112.36 66.6204 111.794 74.5402 111.095 78.2878C105.115 110.392 90.1533 132.013 73.5183 146.653C71.9113 148.067 63.2473 156.263 58.2387 159.602L57.8719 159.846L57.505 159.602C55.006 157.936 51.1892 155.114 47.7973 152.508C44.4221 149.915 41.4054 147.488 40.5411 146.623C24.9152 130.998 11.6773 110.712 4.65186 78.3063C3.98166 75.2147 3.15915 67.0238 2.48325 58.8801C1.80582 50.718 1.26962 42.5202 1.17874 39.3782C0.872797 28.8016 1.06241 18.1943 1.01793 7.64014C1.01448 6.82169 1.00955 5.39907 1.04764 4.17929C1.06659 3.57228 1.09666 2.99823 1.14515 2.56931C1.16883 2.3599 1.20014 2.15464 1.2459 1.99002C1.26736 1.91284 1.30358 1.80049 1.3686 1.6936C1.41416 1.6187 1.60552 1.33065 1.9918 1.33065C25.4683 1.33065 34.3097 1.27989 38.4797 1.22926C42.6326 1.17885 42.1643 1.12764 46.9604 1.12722Z" fill="#BD1C03" stroke="#EEC88E"/> <path d="M26.1239 0.570931C29.0573 0.570676 32.396 0.410984 40.1415 0.571653C41.7911 0.571653 41.0611 0.571461 44.5585 0.570931L57.647 0.569493C58.7578 0.569493 62.1339 0.581774 63.09 0.569493H63.0944C63.3274 0.569493 63.4247 0.756732 63.4417 0.792724C63.4679 0.848215 63.4775 0.901709 63.4819 0.928461C63.4922 0.98942 63.4963 1.06338 63.4981 1.13729C63.5022 1.29126 63.4992 1.52411 63.494 1.83975C63.4837 2.47691 63.4631 3.48782 63.4631 4.99379V5.00422C63.3842 7.81995 63.4048 10.6396 63.4163 13.4676C63.4277 16.293 63.4295 19.1256 63.3127 21.9554C63.2297 23.9673 63.0649 28.3358 62.8249 32.7158C62.5856 37.0848 62.27 41.5003 61.8807 43.5896C58.5462 61.4885 50.205 73.5428 40.9305 81.7045C40.0346 82.4931 35.2042 87.0623 32.4118 88.9238L32.2073 89.0603L32.0028 88.9238C30.6096 87.9951 28.4816 86.4219 26.5905 84.9689C24.7088 83.5233 23.0269 82.1702 22.545 81.6883C13.8332 72.9765 6.45283 61.6669 2.53599 43.6C2.16234 41.8763 1.70377 37.3097 1.32695 32.7694C0.94926 28.2189 0.650322 23.6484 0.599649 21.8967C0.429081 16 0.534793 10.0862 0.509995 4.20203C0.508074 3.74572 0.505323 2.95258 0.52656 2.27253C0.537126 1.9341 0.553891 1.61406 0.580927 1.37492C0.594126 1.25817 0.61158 1.14374 0.637093 1.05196C0.649057 1.00893 0.669254 0.946291 0.705504 0.886696C0.730903 0.844942 0.837591 0.684347 1.05295 0.684347C14.1416 0.684347 19.0709 0.656043 21.3958 0.62782C23.7111 0.599711 23.45 0.571163 26.1239 0.570931Z" fill="#AB2C19" stroke="#FFB700"/>
<path d="M70.4394 1.2207L44.3633 1.22074L44.6486 149.464L56.2214 158.392L57.8746 159.714L59.8586 158.392L70.4394 149.464V1.2207Z" fill="#233779"/> <path d="M39.2138 0.623047L24.6758 0.623065L24.8348 83.272L31.2869 88.2494L32.2087 88.9868L33.3147 88.2494L39.2138 83.272V0.623047Z" fill="#174228"/>
<path d="M44.3633 0.720735C44.3633 1.05407 44.3633 1.3874 44.3633 1.72074C50.2887 1.72073 56.2141 1.72072 62.1395 1.72071C64.9062 1.72071 67.6728 1.72071 70.4394 1.7207L69.9394 1.2207C69.9394 50.6352 69.9394 100.05 69.9394 149.464L70.117 149.082C66.59 152.058 63.0631 155.034 59.5361 158.01L59.5812 157.976C59.1999 158.23 58.8185 158.484 58.4372 158.738C58.1572 158.925 57.8773 159.112 57.5973 159.298L58.187 159.324C57.6359 158.883 57.0848 158.442 56.5337 158.001C54.3207 156.294 52.1146 154.592 49.9085 152.89C48.257 151.616 46.6055 150.342 44.954 149.068L45.1486 149.463C45.0649 105.974 44.9812 62.4851 44.8975 18.996C44.8861 13.0706 44.8747 7.14518 44.8633 1.21977C44.5299 1.22041 44.1966 1.22106 43.8633 1.2217C43.8747 7.14711 43.8861 13.0725 43.8975 18.9979C43.9812 62.487 44.0649 105.976 44.1486 149.465L44.1491 149.71L44.3432 149.86C45.9947 151.134 47.6462 152.408 49.2977 153.682C51.5038 155.384 53.7099 157.086 55.916 158.788C56.4601 159.223 57.0112 159.664 57.5623 160.105L57.8478 160.333L58.152 160.13C58.432 159.944 58.7119 159.757 58.9919 159.57C59.3732 159.316 59.7546 159.062 60.1359 158.808L60.181 158.774C63.7079 155.798 67.2349 152.822 70.7618 149.846L70.9394 149.696V149.464C70.9394 100.05 70.9394 50.6352 70.9394 1.2207V0.720703L70.4394 0.720703C67.6728 0.720707 64.9062 0.72071 62.1395 0.720713C56.2141 0.720721 50.2887 0.720728 44.3633 0.720735ZM44.3633 1.72074L44.3633 0.720735L43.8623 0.720736L43.8633 1.2217L44.8633 1.21977L44.3633 1.72074Z" fill="#EEC88E"/> <path d="M24.6758 0.123065C24.6758 0.456398 24.6758 0.789731 24.6758 1.12306C27.9793 1.12306 31.2829 1.12306 34.5864 1.12305C36.1289 1.12305 37.6713 1.12305 39.2138 1.12305L38.7138 0.623047C38.7138 28.1727 38.7138 55.7224 38.7138 83.272L38.8914 82.8899C36.925 84.549 34.9587 86.2081 32.9923 87.8672L33.0374 87.8333C32.8248 87.9751 32.6122 88.1168 32.3996 88.2586C32.2435 88.3626 32.0874 88.4667 31.9313 88.5707L32.521 88.5963C32.2138 88.3505 31.9065 88.1047 31.5993 87.8589C30.3624 86.9047 29.1324 85.9558 27.9025 85.007C26.9817 84.2967 26.061 83.5864 25.1403 82.8762L25.3348 83.2711C25.2882 59.025 25.2415 34.7788 25.1949 10.5327C25.1885 7.2292 25.1821 3.92563 25.1758 0.622102C24.8424 0.622744 24.5091 0.623385 24.1758 0.624027C24.1821 3.92756 24.1885 7.23113 24.1949 10.5347C24.2415 34.7808 24.2882 59.0269 24.3349 83.273L24.3353 83.5182L24.5294 83.6679C25.4502 84.3782 26.3709 85.0885 27.2917 85.7988C28.5216 86.7476 29.7516 87.6964 30.9815 88.6453C31.2818 88.8856 31.5891 89.1314 31.8963 89.3772L32.1818 89.6056L32.486 89.4028C32.6421 89.2987 32.7982 89.1947 32.9543 89.0906C33.1669 88.9489 33.3795 88.8071 33.5921 88.6654L33.6372 88.6315C35.6035 86.9724 37.5699 85.3133 39.5362 83.6542L39.7138 83.5044V83.272C39.7138 55.7224 39.7138 28.1727 39.7138 0.623047V0.123046L39.2138 0.123047C37.6713 0.123049 36.1289 0.123051 34.5864 0.123053C31.2829 0.123057 27.9793 0.123061 24.6758 0.123065ZM24.6758 1.12306L24.6758 0.123065L24.1748 0.123065L24.1758 0.624027L25.1758 0.622102L24.6758 1.12306Z" fill="#170405"/>
<path d="M4.17083 75.0672H111.439L112.762 62.1718L113.246 49.2764L1.83739 49.2764L2.65467 62.1718L4.17083 75.0672Z" fill="#223778" stroke="#EEC88E"/> <path d="M2.26625 41.793H62.0707L62.8081 34.6035L63.078 27.4141L0.965309 27.4141L1.42096 34.6035L2.26625 41.793Z" fill="#174228" stroke="#170405"/>
<path d="M48.595 49.1708C45.4425 48.7454 44.7529 47.1751 43.702 46.03C42.6512 44.885 42.2572 44.9504 42.2572 43.2164C42.2572 41.6786 44.3588 40.7299 43.2752 39.3885C42.1915 38.0472 40.1063 39.3067 41.4691 40.6645C41.7482 40.9426 40.7466 41.417 40.878 42.0058C40.4511 41.3515 39.8601 40.828 39.8601 40.3701C39.8601 39.912 40.8452 38.8651 39.9257 38.0144C39.0063 37.1639 37.1673 39.4867 37.8897 39.7484C38.6122 40.0102 38.7435 40.1083 38.7435 40.8281C38.7435 41.5478 38.6779 42.0059 38.9734 42.5621C38.0539 41.7768 38.1196 41.7442 37.8241 41.0571C37.5285 40.37 36.609 40.1082 35.8209 41.2534C35.0328 42.3984 34.7701 42.6601 35.3612 43.1836C35.9522 43.707 36.5433 42.4311 37.3643 43.6089C38.1853 44.7868 38.842 46.9133 37.7912 46.6516C36.7404 46.3898 36.0836 46.7824 36.5105 48.1892C36.9374 49.596 38.1196 49.138 38.7435 48.8108C39.3675 48.4837 39.4003 48.3855 40.3854 48.8435C41.3706 49.3015 42.3886 50.1522 46.7231 57.4805C51.0578 64.8087 50.598 49.6939 48.595 49.1708Z" fill="#EFC88F"/> <path d="M27.0323 27.356C25.2747 27.1189 24.8903 26.2433 24.3044 25.605C23.7186 24.9666 23.4989 25.003 23.4989 24.0363C23.4989 23.179 24.6706 22.65 24.0664 21.9022C23.4622 21.1544 22.2997 21.8566 23.0595 22.6135C23.2151 22.7686 22.6567 23.0331 22.73 23.3614C22.4919 22.9966 22.1624 22.7047 22.1624 22.4494C22.1624 22.194 22.7116 21.6103 22.199 21.1361C21.6864 20.6619 20.6612 21.9569 21.0639 22.1028C21.4667 22.2488 21.5399 22.3035 21.5399 22.7048C21.5399 23.106 21.5033 23.3614 21.6681 23.6715C21.1555 23.2337 21.1921 23.2155 21.0273 22.8324C20.8625 22.4494 20.3499 22.3034 19.9105 22.9419C19.4711 23.5803 19.3247 23.7262 19.6542 24.018C19.9837 24.3099 20.3133 23.5985 20.771 24.2551C21.2287 24.9118 21.5948 26.0974 21.009 25.9515C20.4231 25.8056 20.057 26.0244 20.295 26.8088C20.533 27.5931 21.1921 27.3377 21.5399 27.1553C21.8878 26.9729 21.9061 26.9182 22.4553 27.1736C23.0046 27.4289 23.5721 27.9032 25.9887 31.9889C28.4054 36.0745 28.1491 27.6477 27.0323 27.356Z" fill="#FE9201"/>
<path d="M58.8551 71.5038C55.4399 74.5306 51.2861 69.754 48.8557 71.3239C50.2184 71.7167 50.6064 72.8436 48.4934 72.8436C44.1513 72.8436 45.4516 74.8791 43.0366 76.5912C44.4995 76.4292 44.8598 76.0456 45.1497 75.6892C45.5331 77.6863 44.0351 77.1698 44.7317 80.1305C45.1497 78.7656 45.8695 78.6736 45.8695 78.6736C46.45 83.8325 49.1329 84.511 48.772 87.5801C49.817 86.5617 49.9795 89.1295 47.9594 89.523C45.9392 89.9165 44.0584 89.8702 42.8974 88.7598C41.7364 87.6495 39.2287 90.009 40.9469 90.1711C42.6652 90.3331 42.5491 90.8879 43.5476 91.0036C42.4795 91.2814 42.1428 91.9638 41.005 91.1075C39.8672 90.2517 38.323 92.9241 39.7394 93.3863C41.1559 93.8492 41.7016 92.6575 43.3502 92.3917C42.2937 93.1668 42.5258 93.9762 41.5158 93.7335C40.5058 93.4908 39.0545 93.8605 40.2503 95.2141C41.4461 96.5672 42.3052 95.4919 42.8974 95.0521C43.4895 94.6124 43.8266 94.7202 44.1513 94.127C43.8491 94.738 42.2125 95.318 43.176 96.255C44.1397 97.1921 45.5097 97.2152 45.9276 95.6764C46.3456 94.1382 46.4849 93.2243 48.5399 93.2243C50.5949 93.2243 52.2435 94.127 52.2435 92.4492C52.2435 90.7722 52.6075 90.2094 53.6255 90.7411C53.1411 89.5712 53.765 88.9252 53.1903 88.1891C53.6337 88.3855 53.8799 88.7618 53.8799 88.7618C54.6353 87.1258 53.4202 85.1954 52.9605 84.9177C53.765 84.3939 54.2247 84.4104 54.2247 84.4104C53.0426 84.1162 51.7455 81.8585 51.4992 80.3699C51.4007 79.7648 52.8127 80.3864 53.9292 81.2369C55.0457 82.0873 59.7087 83.277 61.2874 80.8705C62.8664 78.4647 60.8341 70.2341 58.8551 71.5038Z" fill="#EFC88F"/> <path d="M32.7512 39.8074C30.8471 41.4949 28.5313 38.8318 27.1763 39.7071C27.9361 39.9261 28.1523 40.5543 26.9743 40.5543C24.5535 40.5543 25.2784 41.6892 23.932 42.6437C24.7476 42.5534 24.9485 42.3395 25.1101 42.1408C25.3239 43.2543 24.4887 42.9663 24.8771 44.6169C25.1101 43.856 25.5114 43.8047 25.5114 43.8047C25.8351 46.6809 27.3308 47.0591 27.1296 48.7702C27.7122 48.2024 27.8028 49.6341 26.6766 49.8534C25.5503 50.0728 24.5017 50.047 23.8544 49.428C23.2071 48.8089 21.809 50.1244 22.767 50.2148C23.7249 50.3051 23.6602 50.6144 24.2169 50.6789C23.6214 50.8338 23.4337 51.2143 22.7993 50.7368C22.165 50.2597 21.3041 51.7496 22.0938 52.0073C22.8835 52.2654 23.1877 51.601 24.1069 51.4528C23.5178 51.8849 23.6473 52.3362 23.0842 52.2009C22.521 52.0656 21.7119 52.2717 22.3786 53.0264C23.0453 53.7807 23.5243 53.1812 23.8544 52.9361C24.1845 52.6909 24.3724 52.751 24.5535 52.4203C24.385 52.7609 23.4725 53.0843 24.0098 53.6067C24.547 54.1292 25.3108 54.1421 25.5438 53.2841C25.7768 52.4265 25.8545 51.917 27.0002 51.917C28.1459 51.917 29.0651 52.4203 29.0651 51.4849C29.0651 50.5499 29.268 50.2361 29.8355 50.5326C29.5655 49.8804 29.9133 49.5202 29.5929 49.1098C29.8401 49.2193 29.9774 49.4291 29.9774 49.4291C30.3985 48.5169 29.7211 47.4407 29.4648 47.2859C29.9133 46.9939 30.1697 47.0031 30.1697 47.0031C29.5106 46.839 28.7874 45.5803 28.6501 44.7504C28.5952 44.413 29.3824 44.7596 30.0049 45.2338C30.6273 45.7079 33.2271 46.3712 34.1072 45.0295C34.9876 43.6882 33.8545 39.0995 32.7512 39.8074Z" fill="#FE9201"/>
<path d="M68.0034 56.3075C65.5403 61.4112 64.7193 62.2292 64.8835 65.0103C65.0477 67.791 69.4153 69.9832 70.7286 73.2877C72.042 76.5923 75.4245 77.4096 75.6216 73.3201C75.8187 69.2306 68.791 66.8427 68.791 61.7713C68.791 56.7003 73.5174 54.2332 74.4392 52.2836C74.635 53.4448 74.2871 53.8606 74.0781 54.5083C74.0781 54.5083 83.8965 50.3534 82.7147 45.7078C83.503 46.4439 83.6994 47.3764 83.6994 47.8345C84.0777 47.36 86.3268 43.7776 83.7656 40.8007C81.2043 37.8235 78.9711 40.3754 78.9711 42.0766C78.9711 43.7779 81.9919 43.8433 81.9919 42.731C81.9919 41.8847 80.9716 41.9517 80.6455 42.731C80.0219 41.6186 81.861 39.8519 82.9442 41.0625C84.0281 42.273 84.0612 44.5958 81.9265 44.5958C80.8836 44.5958 78.3561 44.5715 78.0843 41.2261C76.4721 44.4822 81.0727 44.9034 81.0727 47.1805C81.0727 49.8959 78.3144 50.7138 78.1504 48.3255C78.6424 48.7181 80.1535 47.6385 78.774 46.1335C77.3952 44.6285 76.9072 43.7587 76.7379 42.6656C75.2751 44.6111 80.9411 48.9472 73.8487 52.2843C75.6547 50.2886 76.1302 48.2261 75.8518 46.7225C75.8518 46.7225 74.998 48.2602 73.9472 48.0639C75.7856 44.2687 74.3671 41.7119 78.1174 38.7396C76.5547 38.8542 75.7618 39.8589 73.8811 39.1649C75.4166 38.8794 76.806 37.9653 78.1828 37.5945C74.1112 36.2531 73.2899 31.6073 77.8548 30.2988C75.7532 32.8181 76.5408 34.3557 77.3622 35.3045C77.3952 33.2433 78.6424 33.1779 79.1351 33.2433C78.0843 34.7156 77.9858 35.7298 80.219 36.8422C82.4522 37.9545 82.5831 38.4126 82.5831 38.4126C82.5831 38.4126 83.47 36.9731 84.3892 37.3656C84.0936 37.7583 83.552 38.069 83.9296 38.6906C84.3072 39.3123 90.9896 47.3768 81.3029 52.6444C82.8457 52.35 83.634 53.0044 83.634 53.0044C83.634 53.0044 81.3029 53.2661 79.7263 54.4112C82.9773 55.0328 83.6525 54.3818 85.0789 53.3315C83.6075 56.7882 78.4784 55.5562 76.3775 56.8649C79.2012 57.2248 79.8255 59.5476 82.1566 58.5007C78.9089 62.891 76.2789 55.7525 72.2728 58.5333C74.9001 58.4352 75.2936 59.3513 75.9179 59.5476C74.7024 60.1365 69.941 59.0568 70.6638 62.5902C71.7146 61.5105 72.9625 61.2815 72.9625 61.2815C72.9625 61.2815 70.8609 63.4735 72.4044 64.9131C73.9472 66.3526 76.7062 68.4463 76.9356 69.9839C77.4938 68.9046 78.249 68.1521 78.249 68.1521C78.249 68.1521 78.249 70.704 77.8879 73.9431C77.5268 77.1815 73.8652 80.8458 70.0237 77.28C70.3028 76.1512 69.6785 74.2043 69.3505 73.8445C70.8278 76.3965 69.0549 79.4392 69.285 81.1731C68.8578 80.7803 68.6938 79.668 68.6938 79.668C65.859 83.7013 69.533 84.2422 72.2073 82.4812C71.9983 82.9441 71.2881 83.9539 72.0757 83.8884C72.864 83.8229 74.7361 83.6265 74.7361 84.9022C74.7361 86.1785 70.894 89.9737 70.894 92.7221C70.894 95.4705 71.8786 95.3065 71.058 96.5173C70.2373 97.7275 71.8132 99.2981 70.894 99.9852C69.9741 100.672 68.2666 99.8866 68.5622 99.265C68.8578 98.6434 69.2519 98.0548 69.1534 97.4987C69.0549 96.9425 69.58 96.844 69.416 96.2224C68.9398 96.6972 68.7262 97.8254 68.2011 97.9239C67.6754 98.0218 68.0695 100.051 66.8547 100.149C65.6397 100.246 64.1948 98.2182 65.2128 97.9894C66.2308 97.7599 66.0666 97.5641 66.6246 96.5821C67.1834 95.6007 66.5591 96.4842 65.8039 96.8116C65.0486 97.1383 65.2456 98.0548 64.5889 98.0548C63.9321 98.0548 62.6843 96.1569 63.6038 95.5683C64.5232 94.9791 65.2456 95.2086 65.8367 94.6848C66.5671 94.4507 66.8561 94.4256 67.0187 93.9977C66.7053 94.0903 65.8696 94.7827 64.9829 94.9136C64.0962 95.0446 64.4575 92.1005 65.2784 92.1005C66.0994 92.1005 66.0009 93.2782 66.8878 92.9509C67.7739 92.6236 69.449 88.4686 69.2189 87.5851C68.9894 86.7023 67.9055 87.5527 67.9386 88.0758C67.5114 87.9455 65.18 87.5851 64.6217 87.2584C64.7859 87.9455 65.6396 88.3377 65.6396 88.3377C63.6365 88.6815 62.2902 87.3239 62.323 86.3094C61.8304 87.88 61.4035 86.6037 60.09 88.0103C60.3527 85.5899 58.678 84.3136 58.678 84.3136C58.678 84.3136 58.7437 86.4073 57.0689 87.5527C56.8062 84.1503 53.6209 81.0746 56.9047 78.9154C55.427 78.6211 55.3942 77.6398 55.3942 77.6398C55.3942 77.6398 61.8304 76.298 60.7467 72.1106C61.1737 74.1388 59.8601 75.3821 59.8601 75.3821C59.8601 75.3821 58.7108 72.307 57.0688 71.2602C55.427 70.2127 54.4418 68.8391 54.4418 68.8391C54.4418 68.8391 54.3433 70.671 54.7373 71.0307C53.0625 70.1479 53.0625 67.5304 53.0625 67.5304C53.0625 67.5304 53.1282 69.886 52.3073 70.3767C52.3073 68.4787 51.0594 66.4507 51.0594 66.4507C51.0594 66.4507 51.2893 68.3485 50.9281 68.6751C50.7967 67.301 47.7756 63.7679 47.2174 62.3938C46.6591 61.0196 45.3127 56.8319 46.2651 56.0468C47.2174 55.2615 54.1789 50.3868 56.4446 51.4665C58.7104 52.5461 70.0065 51.6955 68.0041 56.3085L68.0034 56.3075Z" fill="#EFC88F"/> <path d="M37.8532 31.3344C36.48 34.1798 36.0223 34.6358 36.1138 36.1864C36.2054 37.7367 38.6404 38.9589 39.3726 40.8012C40.1048 42.6436 41.9907 43.0993 42.1006 40.8193C42.2104 38.5393 38.2924 37.208 38.2924 34.3806C38.2924 31.5534 40.9274 30.1779 41.4413 29.091C41.5505 29.7384 41.3565 29.9702 41.24 30.3313C41.24 30.3313 46.714 28.0148 46.0551 25.4248C46.4946 25.8352 46.6041 26.3551 46.6041 26.6105C46.815 26.346 48.0689 24.3487 46.641 22.689C45.213 21.0291 43.968 22.4519 43.968 23.4004C43.968 24.3489 45.6522 24.3853 45.6522 23.7652C45.6522 23.2933 45.0833 23.3307 44.9015 23.7652C44.5538 23.145 45.5792 22.1601 46.1831 22.8349C46.7874 23.5098 46.8058 24.8049 45.6157 24.8049C45.0342 24.8049 43.6251 24.7913 43.4736 22.9262C42.5747 24.7415 45.1397 24.9764 45.1397 26.2459C45.1397 27.7598 43.6019 28.2158 43.5104 26.8843C43.7847 27.1031 44.6272 26.5012 43.8581 25.6622C43.0894 24.8231 42.8173 24.3382 42.7229 23.7287C41.9074 24.8134 45.0663 27.2308 41.1121 29.0914C42.119 27.9787 42.3841 26.8289 42.2289 25.9905C42.2289 25.9905 41.7529 26.8478 41.167 26.7384C42.192 24.6225 41.4012 23.197 43.492 21.5399C42.6208 21.6038 42.1787 22.164 41.1302 21.777C41.9863 21.6178 42.7609 21.1082 43.5285 20.9015C41.2585 20.1536 40.8006 17.5635 43.3456 16.834C42.1739 18.2385 42.613 19.0958 43.071 19.6248C43.0894 18.4756 43.7847 18.4391 44.0594 18.4756C43.4736 19.2964 43.4186 19.8619 44.6637 20.4821C45.9088 21.1022 45.9818 21.3576 45.9818 21.3576C45.9818 21.3576 46.4762 20.555 46.9887 20.7739C46.8239 20.9928 46.5219 21.166 46.7324 21.5126C46.9429 21.8592 50.6686 26.3553 45.268 29.2922C46.1281 29.128 46.5676 29.4928 46.5676 29.4928C46.5676 29.4928 45.268 29.6387 44.389 30.2772C46.2015 30.6237 46.5779 30.2607 47.3732 29.6752C46.5529 31.6024 43.6933 30.9155 42.522 31.6451C44.0963 31.8458 44.4443 33.1408 45.744 32.5571C43.9333 35.0048 42.467 31.025 40.2335 32.5753C41.6983 32.5206 41.9177 33.0314 42.2657 33.1408C41.5881 33.4691 38.9335 32.8672 39.3365 34.8371C39.9223 34.2352 40.6181 34.1075 40.6181 34.1075C40.6181 34.1075 39.4464 35.3296 40.3069 36.1322C41.167 36.9347 42.7052 38.1021 42.8331 38.9593C43.1443 38.3576 43.5654 37.938 43.5654 37.938C43.5654 37.938 43.5654 39.3608 43.3641 41.1666C43.1628 42.9721 41.1213 45.015 38.9796 43.027C39.1352 42.3977 38.7871 41.3123 38.6043 41.1117C39.4279 42.5345 38.4395 44.2308 38.5678 45.1975C38.3296 44.9785 38.2382 44.3584 38.2382 44.3584C36.6577 46.607 38.706 46.9086 40.197 45.9268C40.0805 46.1849 39.6845 46.7479 40.1236 46.7114C40.5631 46.6749 41.6069 46.5654 41.6069 47.2766C41.6069 47.9881 39.4648 50.1041 39.4648 51.6363C39.4648 53.1686 40.0138 53.0772 39.5562 53.7522C39.0987 54.427 39.9773 55.3026 39.4648 55.6857C38.9519 56.0687 38 55.6307 38.1648 55.2842C38.3296 54.9376 38.5493 54.6095 38.4944 54.2994C38.4395 53.9893 38.7322 53.9344 38.6408 53.5878C38.3753 53.8525 38.2562 54.4815 37.9635 54.5365C37.6704 54.591 37.8901 55.7222 37.2128 55.7767C36.5354 55.8313 35.7298 54.7005 36.2974 54.573C36.865 54.445 36.7734 54.3359 37.0845 53.7884C37.3961 53.2412 37.048 53.7338 36.627 53.9163C36.2059 54.0984 36.3157 54.6095 35.9496 54.6095C35.5834 54.6095 34.8877 53.5513 35.4003 53.2232C35.913 52.8947 36.3157 53.0226 36.6453 52.7306C37.0524 52.6001 37.2136 52.5861 37.3043 52.3475C37.1295 52.3992 36.6636 52.7852 36.1692 52.8582C35.6749 52.9312 35.8763 51.2898 36.334 51.2898C36.7917 51.2898 36.7368 51.9464 37.2313 51.7639C37.7253 51.5814 38.6592 49.2649 38.5309 48.7723C38.403 48.2801 37.7987 48.7543 37.8171 49.0459C37.5789 48.9733 36.2791 48.7723 35.9679 48.5902C36.0594 48.9733 36.5354 49.1919 36.5354 49.1919C35.4186 49.3836 34.668 48.6267 34.6863 48.0611C34.4117 48.9368 34.1737 48.2252 33.4413 49.0094C33.5878 47.66 32.6541 46.9484 32.6541 46.9484C32.6541 46.9484 32.6907 48.1157 31.757 48.7543C31.6106 46.8574 29.8347 45.1426 31.6655 43.9388C30.8416 43.7747 30.8233 43.2276 30.8233 43.2276C30.8233 43.2276 34.4117 42.4795 33.8075 40.145C34.0455 41.2757 33.3132 41.9689 33.3132 41.9689C33.3132 41.9689 32.6724 40.2545 31.757 39.6708C30.8416 39.0868 30.2923 38.3211 30.2923 38.3211C30.2923 38.3211 30.2374 39.3423 30.4571 39.5429C29.5234 39.0507 29.5234 37.5914 29.5234 37.5914C29.5234 37.5914 29.56 38.9047 29.1023 39.1783C29.1023 38.1201 28.4066 36.9894 28.4066 36.9894C28.4066 36.9894 28.5347 38.0475 28.3333 38.2296C28.2601 37.4635 26.5758 35.4937 26.2646 34.7276C25.9533 33.9615 25.2027 31.6268 25.7336 31.189C26.2646 30.7513 30.1458 28.0335 31.4089 28.6354C32.6722 29.2373 38.97 28.7631 37.8536 31.335L37.8532 31.3344Z" fill="#FE9201"/>
<path d="M43.5826 62.7664C42.0228 62.6682 41.9078 62.57 41.6123 62.2756C41.8914 63.0935 40.9063 64.5657 39.3629 63.5188C37.8195 62.4719 36.9493 61.5067 36.2433 63.0772C35.5373 64.6476 36.8179 65.0565 37.5075 64.9093C38.1971 64.7621 38.4763 65.4491 39.4121 65.2855C38.4435 65.8581 37.9837 66.267 36.391 65.8581C34.7984 65.4491 34.3715 68.6719 36.2104 68.8187C38.0494 68.9661 37.1463 67.9028 38.1315 67.5106C39.1166 67.1178 39.9047 66.4796 39.9047 66.4796C39.9047 66.4796 39.0181 66.9703 39.0017 68.1157C38.9852 69.2604 37.606 69.4568 38.115 70.0785C38.624 70.7001 39.9211 71.2728 40.7255 70.7166C41.5301 70.1605 41.0539 69.2115 40.8897 68.6719C40.7255 68.1316 41.4316 67.4286 42.269 67.5106C43.1063 67.592 43.0243 68.2301 42.2854 68.7539C41.5465 69.277 44.4034 69.9965 45.0438 69.4079C45.6841 68.8187 44.3378 67.3466 45.8483 66.8725C47.3589 66.398 48.5082 66.889 48.5082 66.889C47.0274 65.8044 48.3347 65.8041 49.871 65.3837C51.1143 65.0435 51.71 64.1568 53.9429 65.1383C55.6833 65.8254 55.4863 65.5309 55.6177 64.3204C55.7491 63.1099 56.8984 63.1099 57.1612 61.6377C57.4238 60.1655 58.2776 59.7401 58.2776 55.7814C58.2776 51.8227 53.2509 53.5706 51.053 55.8141C48.8553 58.0578 49.3784 59.8387 47.999 60.738C45.8155 62.1615 45.1424 62.8645 43.5826 62.7664Z" fill="#EFC88F"/> <path d="M24.2398 34.9371C23.3702 34.8823 23.3061 34.8276 23.1413 34.6635C23.297 35.1195 22.7478 35.9402 21.8873 35.3566C21.0268 34.7729 20.5416 34.2348 20.148 35.1104C19.7544 35.9859 20.4684 36.2139 20.8528 36.1318C21.2373 36.0497 21.3929 36.4328 21.9147 36.3416C21.3747 36.6608 21.1183 36.8888 20.2304 36.6608C19.3425 36.4328 19.1044 38.2295 20.1297 38.3114C21.155 38.3936 20.6515 37.8007 21.2007 37.5821C21.7499 37.3631 22.1893 37.0073 22.1893 37.0073C22.1893 37.0073 21.695 37.2809 21.6859 37.9195C21.6767 38.5577 20.9077 38.6672 21.1915 39.0137C21.4753 39.3603 22.1985 39.6796 22.647 39.3695C23.0955 39.0594 22.8301 38.5304 22.7385 38.2295C22.647 37.9283 23.0406 37.5364 23.5075 37.5821C23.9743 37.6274 23.9286 37.9832 23.5166 38.2752C23.1047 38.5669 24.6975 38.968 25.0545 38.6399C25.4115 38.3114 24.6609 37.4907 25.503 37.2263C26.3452 36.9618 26.986 37.2355 26.986 37.2355C26.1604 36.6308 26.8892 36.6307 27.7458 36.3963C28.4389 36.2066 28.771 35.7123 30.016 36.2595C30.9863 36.6425 30.8764 36.4784 30.9497 35.8035C31.0229 35.1286 31.6637 35.1286 31.8102 34.3078C31.9566 33.487 32.4327 33.2499 32.4327 31.0428C32.4327 28.8358 29.6302 29.8102 28.4047 31.061C27.1795 32.3119 27.4711 33.3048 26.7021 33.8062C25.4847 34.5999 25.1095 34.9918 24.2398 34.9371Z" fill="#FE9201"/>
<path d="M58.5022 31.8522C58.8273 30.7418 57.1322 28.7754 57.1322 28.7754C57.1322 28.7754 59.4774 28.9836 61.0331 30.7418C62.5656 29.5389 64.5625 29.1687 64.5625 29.1687C64.5625 29.1687 64.0518 29.909 63.8892 30.3486C66.5133 30.3949 66.188 30.8344 66.9543 30.8344C65.8165 31.4821 65.5146 31.6672 65.5146 31.6672C68.603 32.5 71.9234 36.3634 71.9234 36.3634C71.9234 36.3634 70.6233 35.9007 68.394 36.3171C73.2003 37.7514 72.1555 40.0301 73.6183 41.3835C70.9248 40.7589 70.1121 40.0648 69.1604 40.6663C71.1338 41.129 71.9928 43.0028 71.9928 43.0028C71.9928 43.0028 71.645 42.7484 71.436 42.7021C71.7838 43.1185 73.8974 49.2259 71.4823 52.2793C71.6913 49.6882 69.9494 48.971 69.9494 48.971C69.9494 48.971 70.3911 54.0606 69.4852 55.3098C69.3807 54.905 69.1373 54.396 68.9746 54.2457C68.9746 54.2457 69.1373 57.068 67.6044 58.086C67.4887 54.9397 66.8148 54.639 66.4901 54.454C63.5758 58.6759 62.9837 58.8378 61.846 60.0524C62.3336 57.7621 62.2175 56.7442 61.962 56.3278C59.7561 58.5718 61.6137 59.1964 58.6416 61.718C58.7577 58.9882 58.1307 58.2248 58.1307 58.2248C58.1307 58.2248 58.3165 59.8905 56.9465 61.0009C56.7143 57.9009 56.2731 57.2069 56.575 55.333C55.3211 56.8831 55.0889 57.4845 55.0889 57.4845C54.9411 56.7157 55.4372 55.1479 55.1586 54.5927C54.5549 56.8136 52.9294 57.2532 52.9294 57.2532C52.9294 57.2532 53.7653 54.5696 53.2545 53.5749C51.7917 55.4718 52.4853 57.0289 49.7433 58.0596C50.2524 56.9472 50.2852 55.9657 50.2852 55.9657C50.2852 55.9657 48.4627 58.5339 48.1015 59.9408C47.7039 58.5707 48.2657 57.258 48.2657 57.258C47.9174 57.5009 46.6073 58.8775 46.3282 60.1862C45.6222 57.9778 45.9506 56.7673 45.9506 56.7673C45.9506 56.7673 45.5065 56.958 44.949 57.438C45.573 54.9842 46.2297 54.3299 46.6073 53.6919C45.54 54.2644 45.1296 54.7879 44.7356 55.1151C44.5057 53.8228 45.3365 50.8451 48.0765 49.9428C46.7529 48.5547 46.5671 47.6294 46.5903 46.6809C47.8675 48.3234 49.0981 48.7629 49.8179 48.069C50.5378 47.3749 51.1415 47.4212 52.047 46.4496C52.9526 45.4779 54.2297 45.6629 55.1818 44.8302C56.1338 43.9974 58.0349 42.2084 57.7394 40.8998C57.4729 41.5097 57.0267 41.162 57.1355 41.8586C56.6617 41.688 56.5799 41.9023 56.6526 42.3505C56.1336 42.1633 56.3471 42.6127 56.1139 42.5192C55.0959 42.1266 54.4884 43.2553 54.1929 43.9424C53.8973 44.6294 53.4869 44.564 52.5838 44.204C51.6807 43.8442 51.9434 43.4843 52.2718 43.288C52.6002 43.0917 52.0091 42.3556 52.0091 42.1102C52.436 42.4046 53.2241 42.192 53.4376 42.0284C51.3852 40.6542 49.2507 41.0959 49.7433 43.1081C48.6432 42.8136 48.8731 41.7175 48.8731 41.7175C48.8731 41.7175 45.6057 42.4046 45.7042 38.9858C46.7879 40.8996 48.9388 40.9487 50.0224 40.5562C51.1061 40.1635 52.7405 40.6931 54.0167 41.444C54.3547 41.6428 54.423 41.2181 54.3515 41.0537C53.7907 39.7644 52.0594 38.1654 51.5582 39.9628C51.0585 38.97 50.6135 39.7383 50.1374 39.3784C49.6612 39.0185 48.3148 37.8734 48.9881 36.8265C49.6612 35.7796 49.9896 36.2049 51.4838 34.9943C52.9778 33.7838 53.4095 33.3767 54.8169 33.195C55.2291 33.1417 55.2726 32.2031 55.1452 31.9518C55.9713 32.0919 56.7871 32.3444 56.7871 32.3444C56.7871 32.3444 56.6269 30.8043 55.2148 31.2296C56.1733 30.0958 57.6067 30.9181 58.5022 31.8522Z" fill="#EFC88F"/> <path d="M32.5568 17.6998C32.738 17.0807 31.793 15.9844 31.793 15.9844C31.793 15.9844 33.1005 16.1004 33.9678 17.0807C34.8222 16.41 35.9356 16.2037 35.9356 16.2037C35.9356 16.2037 35.6508 16.6164 35.5602 16.8615C37.0231 16.8873 36.8418 17.1323 37.2691 17.1323C36.6347 17.4934 36.4664 17.5966 36.4664 17.5966C38.1882 18.0609 40.0394 20.2148 40.0394 20.2148C40.0394 20.2148 39.3145 19.9569 38.0717 20.1891C40.7513 20.9887 40.1688 22.2591 40.9843 23.0136C39.4827 22.6654 39.0295 22.2785 38.499 22.6138C39.5992 22.8718 40.0781 23.9165 40.0781 23.9165C40.0781 23.9165 39.8842 23.7746 39.7677 23.7488C39.9616 23.981 41.1399 27.386 39.7935 29.0883C39.91 27.6437 38.9389 27.2439 38.9389 27.2439C38.9389 27.2439 39.1851 30.0814 38.68 30.7779C38.6218 30.5522 38.4861 30.2684 38.3954 30.1846C38.3954 30.1846 38.4861 31.7581 37.6315 32.3257C37.567 30.5716 37.1913 30.4039 37.0102 30.3007C35.3854 32.6546 35.0554 32.7448 34.421 33.422C34.6929 32.1451 34.6282 31.5776 34.4857 31.3455C33.2559 32.5965 34.2915 32.9448 32.6345 34.3506C32.6992 32.8287 32.3497 32.4031 32.3497 32.4031C32.3497 32.4031 32.4532 33.3317 31.6895 33.9508C31.56 32.2225 31.314 31.8356 31.4823 30.7908C30.7833 31.655 30.6538 31.9903 30.6538 31.9903C30.5714 31.5617 30.848 30.6877 30.6926 30.3781C30.3561 31.6163 29.4499 31.8614 29.4499 31.8614C29.4499 31.8614 29.9159 30.3652 29.6311 29.8106C28.8155 30.8682 29.2022 31.7364 27.6735 32.311C27.9573 31.6908 27.9756 31.1436 27.9756 31.1436C27.9756 31.1436 26.9595 32.5754 26.7582 33.3598C26.5365 32.5959 26.8497 31.8641 26.8497 31.8641C26.6555 31.9995 25.9251 32.767 25.7695 33.4966C25.3759 32.2654 25.559 31.5905 25.559 31.5905C25.559 31.5905 25.3114 31.6968 25.0006 31.9644C25.3485 30.5964 25.7146 30.2316 25.9251 29.8759C25.3301 30.1951 25.1013 30.4869 24.8816 30.6693C24.7534 29.9488 25.2166 28.2887 26.7442 27.7857C26.0063 27.0118 25.9027 26.4959 25.9157 25.9671C26.6277 26.8828 27.3138 27.1279 27.7151 26.741C28.1164 26.354 28.453 26.3798 28.9579 25.8381C29.4628 25.2964 30.1748 25.3996 30.7056 24.9353C31.2363 24.471 32.2963 23.4736 32.1315 22.744C31.9829 23.084 31.7342 22.8902 31.7948 23.2786C31.5307 23.1835 31.4851 23.3029 31.5256 23.5528C31.2363 23.4484 31.3553 23.699 31.2252 23.6468C30.6577 23.4279 30.319 24.0573 30.1542 24.4403C29.9895 24.8233 29.7606 24.7869 29.2571 24.5862C28.7537 24.3855 28.9001 24.1849 29.0832 24.0755C29.2663 23.9661 28.9367 23.5556 28.9367 23.4188C29.1748 23.583 29.6141 23.4644 29.7332 23.3732C28.5889 22.6071 27.3989 22.8533 27.6735 23.9752C27.0602 23.811 27.1884 23.1999 27.1884 23.1999C27.1884 23.1999 25.3667 23.583 25.4217 21.6769C26.0258 22.7439 27.225 22.7713 27.8291 22.5524C28.4333 22.3335 29.3445 22.6287 30.056 23.0474C30.2445 23.1582 30.2825 22.9214 30.2427 22.8298C29.93 22.111 28.9648 21.2195 28.6853 22.2216C28.4068 21.6681 28.1587 22.0964 27.8932 21.8958C27.6278 21.6951 26.8771 21.0567 27.2525 20.473C27.6278 19.8894 27.8108 20.1265 28.6439 19.4516C29.4768 18.7767 29.7175 18.5497 30.5021 18.4484C30.7319 18.4187 30.7562 17.8954 30.6852 17.7553C31.1458 17.8334 31.6006 17.9742 31.6006 17.9742C31.6006 17.9742 31.5113 17.1156 30.724 17.3527C31.2584 16.7205 32.0575 17.179 32.5568 17.6998Z" fill="#FE9201"/>
<path d="M69.3805 101.639C68.1498 100.61 68.7536 98.7595 69.5081 99.4651C70.2627 100.171 68.3938 100.344 69.3805 101.639Z" fill="#9C0001"/> <path d="M32.9805 18.5051C33.667 18.8425 34.7838 17.2374 35.6626 18.6145C36.5414 19.9917 34.8662 20.2197 34.5916 20.7486C34.738 20.2926 34.143 19.7089 33.8226 20.0008C34.1522 19.6998 34.4268 19.8002 34.4268 19.8002" fill="#FE9201"/>
<path d="M64.9431 100.86C63.933 99.3797 65.1869 97.8528 65.779 98.7092C66.3711 99.5649 64.4903 100.097 64.9431 100.86Z" fill="#9C0001"/> <path d="M32.363 20.0176C32.5552 20.4097 31.8503 20.3733 31.7771 20.7745C31.7039 21.1759 32.7474 21.5406 32.7474 21.5406" fill="#FE9201"/>
<path d="M62.4194 98.0807C61.955 96.3223 63.3134 95.5585 63.8243 96.3454C64.3351 97.1317 62.164 97.467 62.4194 98.0807Z" fill="#9C0001"/> <path d="M32.3203 21.7949C32.4851 21.9043 32.6773 22.2053 32.6773 22.2053Z" fill="#FE9201"/>
<path d="M62.7776 94.6558C61.8836 92.4001 65.3318 91.7639 64.879 93.0594C64.4262 94.3549 63.0214 93.1401 62.7776 94.6558Z" fill="#9C0001"/> <path d="M30.4413 20.2004C30.1371 20.2455 29.8329 19.6522 29.6387 19.5297C29.7811 19.2847 29.7875 19.1041 30.0853 19.1105" fill="#FE9201"/>
<path d="M49.8291 36.0225C49.4752 36.9792 49.4167 38.0393 49.4922 38.7988C48.9973 38.2747 48.537 37.5271 48.9893 36.8232C49.2919 36.3526 49.5286 36.1804 49.8291 36.0225Z" fill="black"/> <path d="M29.8359 19.7093C30.1725 19.4062 30.5788 19.3967 30.8118 19.616Z" fill="#FE9201"/>
<path d="M49.8291 36.0225C49.4752 36.9792 49.4167 38.0393 49.4922 38.7988C48.9973 38.2747 48.537 37.5271 48.9893 36.8232C49.2919 36.3526 49.5286 36.1804 49.8291 36.0225Z" stroke="#EFC88F"/> <path d="M38.6214 56.6091C37.9353 56.035 38.2719 55.0034 38.6926 55.3968C39.1132 55.7902 38.0713 55.8868 38.6214 56.6091Z" fill="#FE9201"/>
<path d="M39.3693 89.7329C38.812 88.0327 41.8538 87.5467 41.343 88.9691C40.8321 90.3922 39.8569 88.2986 39.3693 89.7329Z" fill="#9C0001"/> <path d="M36.1497 56.1741C35.5866 55.3486 36.2856 54.4973 36.6157 54.9748C36.9459 55.4519 35.8972 55.7487 36.1497 56.1741Z" fill="#FE9201"/>
<path d="M38.4649 93.0275C36.5609 91.6163 39.9162 89.6383 40.1601 91.3273C40.4038 93.0162 37.8265 91.3504 38.4649 93.0275Z" fill="#9C0001"/> <path d="M34.7425 54.6252C34.4836 53.6449 35.2409 53.219 35.5258 53.6578C35.8106 54.0962 34.6001 54.2831 34.7425 54.6252Z" fill="#FE9201"/>
<path d="M39.6464 96.9784C38.2262 95.5877 40.0569 93.7638 40.7793 94.5653C41.5017 95.3668 39.5397 95.882 39.6464 96.9784Z" fill="#9C0001"/> <path d="M34.9423 52.7162C34.4439 51.4586 36.3663 51.1039 36.1139 51.8262C35.8614 52.5485 35.0782 51.8712 34.9423 52.7162Z" fill="#FE9201"/>
<path d="M43.1582 97.7486C42.2223 96.4968 43.1746 95.0902 43.7903 95.7283C44.406 96.3658 43.0596 96.8816 43.1582 97.7486Z" fill="#9C0001"/> <path d="M27.7217 20.0254C27.5244 20.5588 27.4921 21.1498 27.5342 21.5732C27.2582 21.281 27.0015 20.8642 27.2539 20.4717C27.4226 20.2094 27.5542 20.1134 27.7217 20.0254Z" fill="#FE9201"/>
<path d="M36.6484 38.4928C37.2397 36.565 40.088 37.5596 39.2014 38.4593C38.3147 39.359 38.3397 37.3151 36.6484 38.4928Z" fill="#9C0001"/> <path d="M27.7217 20.0254C27.5244 20.5588 27.4921 21.1498 27.5342 21.5732C27.2582 21.281 27.0015 20.8642 27.2539 20.4717C27.4226 20.2094 27.5542 20.1134 27.7217 20.0254Z" stroke="#EFC88F"/>
<path d="M41.0391 38.6255C42.1884 38.0125 43.0359 39.3311 42.2465 39.6203C41.457 39.9094 42.1072 38.88 41.0391 38.6255Z" fill="#9C0001"/> <path d="M27.3797 20.6191C27.364 20.7201 27.3535 20.82 27.3458 20.9176C27.3238 20.8156 27.331 20.7168 27.3797 20.6191Z" fill="#FE9201"/>
<path d="M34.0664 41.5423C34.3915 39.4024 37.0386 40.1542 36.3536 41.0911C35.6685 42.0281 35.4596 40.1889 34.0664 41.5423Z" fill="#9C0001"/> <path d="M21.8897 49.9697C21.5791 49.0218 23.2749 48.7508 22.9901 49.5438C22.7053 50.3373 22.1616 49.17 21.8897 49.9697Z" fill="#FE9201"/>
<path d="M35.6055 47.0957C35.8681 49.3205 37.625 48.6334 37.4444 47.9463C37.2638 47.2593 36.6891 48.0445 35.6055 47.0957Z" fill="#9C0001"/> <path d="M21.389 51.8071C20.3275 51.0203 22.1981 49.9176 22.3341 50.8592C22.47 51.8008 21.033 50.8721 21.389 51.8071Z" fill="#FE9201"/>
<path d="M35.2945 64.9888C34.26 63.0913 36.6409 62.0116 36.8379 62.8787C37.0349 63.7457 35.508 63.2058 35.2945 64.9888Z" fill="#9C0001"/> <path d="M22.0468 54.0084C21.255 53.2331 22.2757 52.2162 22.6784 52.6631C23.0812 53.1099 21.9873 53.3971 22.0468 54.0084Z" fill="#FE9201"/>
<path d="M35.4449 69.8825C33.9179 68.3119 35.4267 66.783 36.1181 67.2161C37.1514 67.8629 35.527 68.3609 35.4449 69.8825Z" fill="#9C0001"/> <path d="M24.004 54.4377C23.4822 53.7397 24.0132 52.9555 24.3564 53.3113C24.6997 53.6667 23.9491 53.9543 24.004 54.4377Z" fill="#FE9201"/>
<path d="M39.8151 72.2087C38.4688 72.0454 38.3021 70.004 39.2405 70.0496C40.5869 70.1151 39.027 71.1288 39.8151 72.2087Z" fill="#9C0001"/> <path d="M20.3711 21.4018C20.7007 20.327 22.2887 20.8815 21.7944 21.3831C21.3001 21.8848 21.314 20.7452 20.3711 21.4018Z" fill="#FE9201"/>
<path d="M41.8594 69.9137C43.255 71.1893 44.3331 69.0943 43.5998 68.8179C42.5161 68.4086 43.3535 69.8813 41.8594 69.9137Z" fill="#9C0001"/> <path d="M22.8242 21.4763C23.465 21.1345 23.9375 21.8697 23.4974 22.0309C23.0572 22.1921 23.4197 21.6182 22.8242 21.4763Z" fill="#FE9201"/>
<path d="M18.9355 23.1036C19.1168 21.9105 20.5926 22.3297 20.2107 22.852C19.8288 23.3744 19.7123 22.349 18.9355 23.1036Z" fill="#FE9201"/>
<path d="M19.791 26.1992C19.9375 27.4396 20.917 27.0565 20.8163 26.6735C20.7156 26.2904 20.3952 26.7282 19.791 26.1992Z" fill="#FE9201"/>
<path d="M19.6192 36.1738C19.0425 35.1159 20.3699 34.5139 20.4797 34.9973C20.5895 35.4807 19.7382 35.1797 19.6192 36.1738Z" fill="#FE9201"/>
<path d="M19.7018 38.9021C18.8505 38.0265 19.6917 37.1741 20.0771 37.4156C20.6532 37.7762 19.7476 38.0538 19.7018 38.9021Z" fill="#FE9201"/>
<path d="M22.1387 40.2003C21.3881 40.1092 21.2952 38.9711 21.8184 38.9965C22.569 39.033 21.6993 39.5982 22.1387 40.2003Z" fill="#FE9201"/>
<path d="M23.2754 38.9215C24.0535 39.6327 24.6546 38.4647 24.2457 38.3105C23.6415 38.0823 24.1084 38.9034 23.2754 38.9215Z" fill="#FE9201"/>
<path d="M31.1973 18.6157C31.508 18.8478 31.8446 18.7317 32.0646 18.5898Z" fill="#FE9201"/>
<path d="M31.8965 19.3105C32.1166 19.5427 32.259 19.6072 32.492 19.5169Z" fill="#FE9201"/>
<path d="M33.2891 19.0358C33.582 19.1361 33.8474 19.1635 33.9207 19.3824C33.9573 19.1726 34.2411 18.9355 34.4699 19.1361C34.36 18.8625 34.7354 18.6801 35.1198 18.826" fill="#FE9201"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 18 KiB

29
ui/_/icons/logo2.svg Normal file
View File

@@ -0,0 +1,29 @@
<svg width="115" height="161" viewBox="0 0 115 161" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M46.9604 1.12722C52.2219 1.12677 58.2104 0.840336 72.1031 1.12852C75.0618 1.12852 73.7524 1.12818 80.0255 1.12722L103.502 1.12465C105.494 1.12465 111.55 1.14667 113.265 1.12465H113.272C113.69 1.12465 113.865 1.46049 113.895 1.52504C113.942 1.62458 113.96 1.72053 113.968 1.76851C113.986 1.87785 113.993 2.01051 113.997 2.14308C114.004 2.41925 113.999 2.8369 113.989 3.40304C113.971 4.54588 113.934 6.35911 113.934 9.06029V9.079C113.792 14.1294 113.829 19.1869 113.85 24.2593C113.87 29.3271 113.874 34.4079 113.664 39.4834C113.515 43.0922 113.22 50.9277 112.789 58.7839C112.36 66.6204 111.794 74.5402 111.095 78.2878C105.115 110.392 90.1533 132.013 73.5183 146.653C71.9113 148.067 63.2473 156.263 58.2387 159.602L57.8719 159.846L57.505 159.602C55.006 157.936 51.1892 155.114 47.7973 152.508C44.4221 149.915 41.4054 147.488 40.5411 146.623C24.9152 130.998 11.6773 110.712 4.65186 78.3063C3.98166 75.2147 3.15915 67.0238 2.48325 58.8801C1.80582 50.718 1.26962 42.5202 1.17874 39.3782C0.872797 28.8016 1.06241 18.1943 1.01793 7.64014C1.01448 6.82169 1.00955 5.39907 1.04764 4.17929C1.06659 3.57228 1.09666 2.99823 1.14515 2.56931C1.16883 2.3599 1.20014 2.15464 1.2459 1.99002C1.26736 1.91284 1.30358 1.80049 1.3686 1.6936C1.41416 1.6187 1.60552 1.33065 1.9918 1.33065C25.4683 1.33065 34.3097 1.27989 38.4797 1.22926C42.6326 1.17885 42.1643 1.12764 46.9604 1.12722Z" fill="#BD1C03" stroke="#EEC88E"/>
<path d="M70.4394 1.2207L44.3633 1.22074L44.6486 149.464L56.2214 158.392L57.8746 159.714L59.8586 158.392L70.4394 149.464V1.2207Z" fill="#233779"/>
<path d="M44.3633 0.720735C44.3633 1.05407 44.3633 1.3874 44.3633 1.72074C50.2887 1.72073 56.2141 1.72072 62.1395 1.72071C64.9062 1.72071 67.6728 1.72071 70.4394 1.7207L69.9394 1.2207C69.9394 50.6352 69.9394 100.05 69.9394 149.464L70.117 149.082C66.59 152.058 63.0631 155.034 59.5361 158.01L59.5812 157.976C59.1999 158.23 58.8185 158.484 58.4372 158.738C58.1572 158.925 57.8773 159.112 57.5973 159.298L58.187 159.324C57.6359 158.883 57.0848 158.442 56.5337 158.001C54.3207 156.294 52.1146 154.592 49.9085 152.89C48.257 151.616 46.6055 150.342 44.954 149.068L45.1486 149.463C45.0649 105.974 44.9812 62.4851 44.8975 18.996C44.8861 13.0706 44.8747 7.14518 44.8633 1.21977C44.5299 1.22041 44.1966 1.22106 43.8633 1.2217C43.8747 7.14711 43.8861 13.0725 43.8975 18.9979C43.9812 62.487 44.0649 105.976 44.1486 149.465L44.1491 149.71L44.3432 149.86C45.9947 151.134 47.6462 152.408 49.2977 153.682C51.5038 155.384 53.7099 157.086 55.916 158.788C56.4601 159.223 57.0112 159.664 57.5623 160.105L57.8478 160.333L58.152 160.13C58.432 159.944 58.7119 159.757 58.9919 159.57C59.3732 159.316 59.7546 159.062 60.1359 158.808L60.181 158.774C63.7079 155.798 67.2349 152.822 70.7618 149.846L70.9394 149.696V149.464C70.9394 100.05 70.9394 50.6352 70.9394 1.2207V0.720703L70.4394 0.720703C67.6728 0.720707 64.9062 0.72071 62.1395 0.720713C56.2141 0.720721 50.2887 0.720728 44.3633 0.720735ZM44.3633 1.72074L44.3633 0.720735L43.8623 0.720736L43.8633 1.2217L44.8633 1.21977L44.3633 1.72074Z" fill="#EEC88E"/>
<path d="M4.17083 75.0672H111.439L112.762 62.1718L113.246 49.2764L1.83739 49.2764L2.65467 62.1718L4.17083 75.0672Z" fill="#223778" stroke="#EEC88E"/>
<path d="M48.595 49.1708C45.4425 48.7454 44.7529 47.1751 43.702 46.03C42.6512 44.885 42.2572 44.9504 42.2572 43.2164C42.2572 41.6786 44.3588 40.7299 43.2752 39.3885C42.1915 38.0472 40.1063 39.3067 41.4691 40.6645C41.7482 40.9426 40.7466 41.417 40.878 42.0058C40.4511 41.3515 39.8601 40.828 39.8601 40.3701C39.8601 39.912 40.8452 38.8651 39.9257 38.0144C39.0063 37.1639 37.1673 39.4867 37.8897 39.7484C38.6122 40.0102 38.7435 40.1083 38.7435 40.8281C38.7435 41.5478 38.6779 42.0059 38.9734 42.5621C38.0539 41.7768 38.1196 41.7442 37.8241 41.0571C37.5285 40.37 36.609 40.1082 35.8209 41.2534C35.0328 42.3984 34.7701 42.6601 35.3612 43.1836C35.9522 43.707 36.5433 42.4311 37.3643 43.6089C38.1853 44.7868 38.842 46.9133 37.7912 46.6516C36.7404 46.3898 36.0836 46.7824 36.5105 48.1892C36.9374 49.596 38.1196 49.138 38.7435 48.8108C39.3675 48.4837 39.4003 48.3855 40.3854 48.8435C41.3706 49.3015 42.3886 50.1522 46.7231 57.4805C51.0578 64.8087 50.598 49.6939 48.595 49.1708Z" fill="#EFC88F"/>
<path d="M58.8551 71.5038C55.4399 74.5306 51.2861 69.754 48.8557 71.3239C50.2184 71.7167 50.6064 72.8436 48.4934 72.8436C44.1513 72.8436 45.4516 74.8791 43.0366 76.5912C44.4995 76.4292 44.8598 76.0456 45.1497 75.6892C45.5331 77.6863 44.0351 77.1698 44.7317 80.1305C45.1497 78.7656 45.8695 78.6736 45.8695 78.6736C46.45 83.8325 49.1329 84.511 48.772 87.5801C49.817 86.5617 49.9795 89.1295 47.9594 89.523C45.9392 89.9165 44.0584 89.8702 42.8974 88.7598C41.7364 87.6495 39.2287 90.009 40.9469 90.1711C42.6652 90.3331 42.5491 90.8879 43.5476 91.0036C42.4795 91.2814 42.1428 91.9638 41.005 91.1075C39.8672 90.2517 38.323 92.9241 39.7394 93.3863C41.1559 93.8492 41.7016 92.6575 43.3502 92.3917C42.2937 93.1668 42.5258 93.9762 41.5158 93.7335C40.5058 93.4908 39.0545 93.8605 40.2503 95.2141C41.4461 96.5672 42.3052 95.4919 42.8974 95.0521C43.4895 94.6124 43.8266 94.7202 44.1513 94.127C43.8491 94.738 42.2125 95.318 43.176 96.255C44.1397 97.1921 45.5097 97.2152 45.9276 95.6764C46.3456 94.1382 46.4849 93.2243 48.5399 93.2243C50.5949 93.2243 52.2435 94.127 52.2435 92.4492C52.2435 90.7722 52.6075 90.2094 53.6255 90.7411C53.1411 89.5712 53.765 88.9252 53.1903 88.1891C53.6337 88.3855 53.8799 88.7618 53.8799 88.7618C54.6353 87.1258 53.4202 85.1954 52.9605 84.9177C53.765 84.3939 54.2247 84.4104 54.2247 84.4104C53.0426 84.1162 51.7455 81.8585 51.4992 80.3699C51.4007 79.7648 52.8127 80.3864 53.9292 81.2369C55.0457 82.0873 59.7087 83.277 61.2874 80.8705C62.8664 78.4647 60.8341 70.2341 58.8551 71.5038Z" fill="#EFC88F"/>
<path d="M68.0034 56.3075C65.5403 61.4112 64.7193 62.2292 64.8835 65.0103C65.0477 67.791 69.4153 69.9832 70.7286 73.2877C72.042 76.5923 75.4245 77.4096 75.6216 73.3201C75.8187 69.2306 68.791 66.8427 68.791 61.7713C68.791 56.7003 73.5174 54.2332 74.4392 52.2836C74.635 53.4448 74.2871 53.8606 74.0781 54.5083C74.0781 54.5083 83.8965 50.3534 82.7147 45.7078C83.503 46.4439 83.6994 47.3764 83.6994 47.8345C84.0777 47.36 86.3268 43.7776 83.7656 40.8007C81.2043 37.8235 78.9711 40.3754 78.9711 42.0766C78.9711 43.7779 81.9919 43.8433 81.9919 42.731C81.9919 41.8847 80.9716 41.9517 80.6455 42.731C80.0219 41.6186 81.861 39.8519 82.9442 41.0625C84.0281 42.273 84.0612 44.5958 81.9265 44.5958C80.8836 44.5958 78.3561 44.5715 78.0843 41.2261C76.4721 44.4822 81.0727 44.9034 81.0727 47.1805C81.0727 49.8959 78.3144 50.7138 78.1504 48.3255C78.6424 48.7181 80.1535 47.6385 78.774 46.1335C77.3952 44.6285 76.9072 43.7587 76.7379 42.6656C75.2751 44.6111 80.9411 48.9472 73.8487 52.2843C75.6547 50.2886 76.1302 48.2261 75.8518 46.7225C75.8518 46.7225 74.998 48.2602 73.9472 48.0639C75.7856 44.2687 74.3671 41.7119 78.1174 38.7396C76.5547 38.8542 75.7618 39.8589 73.8811 39.1649C75.4166 38.8794 76.806 37.9653 78.1828 37.5945C74.1112 36.2531 73.2899 31.6073 77.8548 30.2988C75.7532 32.8181 76.5408 34.3557 77.3622 35.3045C77.3952 33.2433 78.6424 33.1779 79.1351 33.2433C78.0843 34.7156 77.9858 35.7298 80.219 36.8422C82.4522 37.9545 82.5831 38.4126 82.5831 38.4126C82.5831 38.4126 83.47 36.9731 84.3892 37.3656C84.0936 37.7583 83.552 38.069 83.9296 38.6906C84.3072 39.3123 90.9896 47.3768 81.3029 52.6444C82.8457 52.35 83.634 53.0044 83.634 53.0044C83.634 53.0044 81.3029 53.2661 79.7263 54.4112C82.9773 55.0328 83.6525 54.3818 85.0789 53.3315C83.6075 56.7882 78.4784 55.5562 76.3775 56.8649C79.2012 57.2248 79.8255 59.5476 82.1566 58.5007C78.9089 62.891 76.2789 55.7525 72.2728 58.5333C74.9001 58.4352 75.2936 59.3513 75.9179 59.5476C74.7024 60.1365 69.941 59.0568 70.6638 62.5902C71.7146 61.5105 72.9625 61.2815 72.9625 61.2815C72.9625 61.2815 70.8609 63.4735 72.4044 64.9131C73.9472 66.3526 76.7062 68.4463 76.9356 69.9839C77.4938 68.9046 78.249 68.1521 78.249 68.1521C78.249 68.1521 78.249 70.704 77.8879 73.9431C77.5268 77.1815 73.8652 80.8458 70.0237 77.28C70.3028 76.1512 69.6785 74.2043 69.3505 73.8445C70.8278 76.3965 69.0549 79.4392 69.285 81.1731C68.8578 80.7803 68.6938 79.668 68.6938 79.668C65.859 83.7013 69.533 84.2422 72.2073 82.4812C71.9983 82.9441 71.2881 83.9539 72.0757 83.8884C72.864 83.8229 74.7361 83.6265 74.7361 84.9022C74.7361 86.1785 70.894 89.9737 70.894 92.7221C70.894 95.4705 71.8786 95.3065 71.058 96.5173C70.2373 97.7275 71.8132 99.2981 70.894 99.9852C69.9741 100.672 68.2666 99.8866 68.5622 99.265C68.8578 98.6434 69.2519 98.0548 69.1534 97.4987C69.0549 96.9425 69.58 96.844 69.416 96.2224C68.9398 96.6972 68.7262 97.8254 68.2011 97.9239C67.6754 98.0218 68.0695 100.051 66.8547 100.149C65.6397 100.246 64.1948 98.2182 65.2128 97.9894C66.2308 97.7599 66.0666 97.5641 66.6246 96.5821C67.1834 95.6007 66.5591 96.4842 65.8039 96.8116C65.0486 97.1383 65.2456 98.0548 64.5889 98.0548C63.9321 98.0548 62.6843 96.1569 63.6038 95.5683C64.5232 94.9791 65.2456 95.2086 65.8367 94.6848C66.5671 94.4507 66.8561 94.4256 67.0187 93.9977C66.7053 94.0903 65.8696 94.7827 64.9829 94.9136C64.0962 95.0446 64.4575 92.1005 65.2784 92.1005C66.0994 92.1005 66.0009 93.2782 66.8878 92.9509C67.7739 92.6236 69.449 88.4686 69.2189 87.5851C68.9894 86.7023 67.9055 87.5527 67.9386 88.0758C67.5114 87.9455 65.18 87.5851 64.6217 87.2584C64.7859 87.9455 65.6396 88.3377 65.6396 88.3377C63.6365 88.6815 62.2902 87.3239 62.323 86.3094C61.8304 87.88 61.4035 86.6037 60.09 88.0103C60.3527 85.5899 58.678 84.3136 58.678 84.3136C58.678 84.3136 58.7437 86.4073 57.0689 87.5527C56.8062 84.1503 53.6209 81.0746 56.9047 78.9154C55.427 78.6211 55.3942 77.6398 55.3942 77.6398C55.3942 77.6398 61.8304 76.298 60.7467 72.1106C61.1737 74.1388 59.8601 75.3821 59.8601 75.3821C59.8601 75.3821 58.7108 72.307 57.0688 71.2602C55.427 70.2127 54.4418 68.8391 54.4418 68.8391C54.4418 68.8391 54.3433 70.671 54.7373 71.0307C53.0625 70.1479 53.0625 67.5304 53.0625 67.5304C53.0625 67.5304 53.1282 69.886 52.3073 70.3767C52.3073 68.4787 51.0594 66.4507 51.0594 66.4507C51.0594 66.4507 51.2893 68.3485 50.9281 68.6751C50.7967 67.301 47.7756 63.7679 47.2174 62.3938C46.6591 61.0196 45.3127 56.8319 46.2651 56.0468C47.2174 55.2615 54.1789 50.3868 56.4446 51.4665C58.7104 52.5461 70.0065 51.6955 68.0041 56.3085L68.0034 56.3075Z" fill="#EFC88F"/>
<path d="M43.5826 62.7664C42.0228 62.6682 41.9078 62.57 41.6123 62.2756C41.8914 63.0935 40.9063 64.5657 39.3629 63.5188C37.8195 62.4719 36.9493 61.5067 36.2433 63.0772C35.5373 64.6476 36.8179 65.0565 37.5075 64.9093C38.1971 64.7621 38.4763 65.4491 39.4121 65.2855C38.4435 65.8581 37.9837 66.267 36.391 65.8581C34.7984 65.4491 34.3715 68.6719 36.2104 68.8187C38.0494 68.9661 37.1463 67.9028 38.1315 67.5106C39.1166 67.1178 39.9047 66.4796 39.9047 66.4796C39.9047 66.4796 39.0181 66.9703 39.0017 68.1157C38.9852 69.2604 37.606 69.4568 38.115 70.0785C38.624 70.7001 39.9211 71.2728 40.7255 70.7166C41.5301 70.1605 41.0539 69.2115 40.8897 68.6719C40.7255 68.1316 41.4316 67.4286 42.269 67.5106C43.1063 67.592 43.0243 68.2301 42.2854 68.7539C41.5465 69.277 44.4034 69.9965 45.0438 69.4079C45.6841 68.8187 44.3378 67.3466 45.8483 66.8725C47.3589 66.398 48.5082 66.889 48.5082 66.889C47.0274 65.8044 48.3347 65.8041 49.871 65.3837C51.1143 65.0435 51.71 64.1568 53.9429 65.1383C55.6833 65.8254 55.4863 65.5309 55.6177 64.3204C55.7491 63.1099 56.8984 63.1099 57.1612 61.6377C57.4238 60.1655 58.2776 59.7401 58.2776 55.7814C58.2776 51.8227 53.2509 53.5706 51.053 55.8141C48.8553 58.0578 49.3784 59.8387 47.999 60.738C45.8155 62.1615 45.1424 62.8645 43.5826 62.7664Z" fill="#EFC88F"/>
<path d="M58.5022 31.8522C58.8273 30.7418 57.1322 28.7754 57.1322 28.7754C57.1322 28.7754 59.4774 28.9836 61.0331 30.7418C62.5656 29.5389 64.5625 29.1687 64.5625 29.1687C64.5625 29.1687 64.0518 29.909 63.8892 30.3486C66.5133 30.3949 66.188 30.8344 66.9543 30.8344C65.8165 31.4821 65.5146 31.6672 65.5146 31.6672C68.603 32.5 71.9234 36.3634 71.9234 36.3634C71.9234 36.3634 70.6233 35.9007 68.394 36.3171C73.2003 37.7514 72.1555 40.0301 73.6183 41.3835C70.9248 40.7589 70.1121 40.0648 69.1604 40.6663C71.1338 41.129 71.9928 43.0028 71.9928 43.0028C71.9928 43.0028 71.645 42.7484 71.436 42.7021C71.7838 43.1185 73.8974 49.2259 71.4823 52.2793C71.6913 49.6882 69.9494 48.971 69.9494 48.971C69.9494 48.971 70.3911 54.0606 69.4852 55.3098C69.3807 54.905 69.1373 54.396 68.9746 54.2457C68.9746 54.2457 69.1373 57.068 67.6044 58.086C67.4887 54.9397 66.8148 54.639 66.4901 54.454C63.5758 58.6759 62.9837 58.8378 61.846 60.0524C62.3336 57.7621 62.2175 56.7442 61.962 56.3278C59.7561 58.5718 61.6137 59.1964 58.6416 61.718C58.7577 58.9882 58.1307 58.2248 58.1307 58.2248C58.1307 58.2248 58.3165 59.8905 56.9465 61.0009C56.7143 57.9009 56.2731 57.2069 56.575 55.333C55.3211 56.8831 55.0889 57.4845 55.0889 57.4845C54.9411 56.7157 55.4372 55.1479 55.1586 54.5927C54.5549 56.8136 52.9294 57.2532 52.9294 57.2532C52.9294 57.2532 53.7653 54.5696 53.2545 53.5749C51.7917 55.4718 52.4853 57.0289 49.7433 58.0596C50.2524 56.9472 50.2852 55.9657 50.2852 55.9657C50.2852 55.9657 48.4627 58.5339 48.1015 59.9408C47.7039 58.5707 48.2657 57.258 48.2657 57.258C47.9174 57.5009 46.6073 58.8775 46.3282 60.1862C45.6222 57.9778 45.9506 56.7673 45.9506 56.7673C45.9506 56.7673 45.5065 56.958 44.949 57.438C45.573 54.9842 46.2297 54.3299 46.6073 53.6919C45.54 54.2644 45.1296 54.7879 44.7356 55.1151C44.5057 53.8228 45.3365 50.8451 48.0765 49.9428C46.7529 48.5547 46.5671 47.6294 46.5903 46.6809C47.8675 48.3234 49.0981 48.7629 49.8179 48.069C50.5378 47.3749 51.1415 47.4212 52.047 46.4496C52.9526 45.4779 54.2297 45.6629 55.1818 44.8302C56.1338 43.9974 58.0349 42.2084 57.7394 40.8998C57.4729 41.5097 57.0267 41.162 57.1355 41.8586C56.6617 41.688 56.5799 41.9023 56.6526 42.3505C56.1336 42.1633 56.3471 42.6127 56.1139 42.5192C55.0959 42.1266 54.4884 43.2553 54.1929 43.9424C53.8973 44.6294 53.4869 44.564 52.5838 44.204C51.6807 43.8442 51.9434 43.4843 52.2718 43.288C52.6002 43.0917 52.0091 42.3556 52.0091 42.1102C52.436 42.4046 53.2241 42.192 53.4376 42.0284C51.3852 40.6542 49.2507 41.0959 49.7433 43.1081C48.6432 42.8136 48.8731 41.7175 48.8731 41.7175C48.8731 41.7175 45.6057 42.4046 45.7042 38.9858C46.7879 40.8996 48.9388 40.9487 50.0224 40.5562C51.1061 40.1635 52.7405 40.6931 54.0167 41.444C54.3547 41.6428 54.423 41.2181 54.3515 41.0537C53.7907 39.7644 52.0594 38.1654 51.5582 39.9628C51.0585 38.97 50.6135 39.7383 50.1374 39.3784C49.6612 39.0185 48.3148 37.8734 48.9881 36.8265C49.6612 35.7796 49.9896 36.2049 51.4838 34.9943C52.9778 33.7838 53.4095 33.3767 54.8169 33.195C55.2291 33.1417 55.2726 32.2031 55.1452 31.9518C55.9713 32.0919 56.7871 32.3444 56.7871 32.3444C56.7871 32.3444 56.6269 30.8043 55.2148 31.2296C56.1733 30.0958 57.6067 30.9181 58.5022 31.8522Z" fill="#EFC88F"/>
<path d="M69.3805 101.639C68.1498 100.61 68.7536 98.7595 69.5081 99.4651C70.2627 100.171 68.3938 100.344 69.3805 101.639Z" fill="#9C0001"/>
<path d="M64.9431 100.86C63.933 99.3797 65.1869 97.8528 65.779 98.7092C66.3711 99.5649 64.4903 100.097 64.9431 100.86Z" fill="#9C0001"/>
<path d="M62.4194 98.0807C61.955 96.3223 63.3134 95.5585 63.8243 96.3454C64.3351 97.1317 62.164 97.467 62.4194 98.0807Z" fill="#9C0001"/>
<path d="M62.7776 94.6558C61.8836 92.4001 65.3318 91.7639 64.879 93.0594C64.4262 94.3549 63.0214 93.1401 62.7776 94.6558Z" fill="#9C0001"/>
<path d="M49.8291 36.0225C49.4752 36.9792 49.4167 38.0393 49.4922 38.7988C48.9973 38.2747 48.537 37.5271 48.9893 36.8232C49.2919 36.3526 49.5286 36.1804 49.8291 36.0225Z" fill="black"/>
<path d="M49.8291 36.0225C49.4752 36.9792 49.4167 38.0393 49.4922 38.7988C48.9973 38.2747 48.537 37.5271 48.9893 36.8232C49.2919 36.3526 49.5286 36.1804 49.8291 36.0225Z" stroke="#EFC88F"/>
<path d="M39.3693 89.7329C38.812 88.0327 41.8538 87.5467 41.343 88.9691C40.8321 90.3922 39.8569 88.2986 39.3693 89.7329Z" fill="#9C0001"/>
<path d="M38.4649 93.0275C36.5609 91.6163 39.9162 89.6383 40.1601 91.3273C40.4038 93.0162 37.8265 91.3504 38.4649 93.0275Z" fill="#9C0001"/>
<path d="M39.6464 96.9784C38.2262 95.5877 40.0569 93.7638 40.7793 94.5653C41.5017 95.3668 39.5397 95.882 39.6464 96.9784Z" fill="#9C0001"/>
<path d="M43.1582 97.7486C42.2223 96.4968 43.1746 95.0902 43.7903 95.7283C44.406 96.3658 43.0596 96.8816 43.1582 97.7486Z" fill="#9C0001"/>
<path d="M36.6484 38.4928C37.2397 36.565 40.088 37.5596 39.2014 38.4593C38.3147 39.359 38.3397 37.3151 36.6484 38.4928Z" fill="#9C0001"/>
<path d="M41.0391 38.6255C42.1884 38.0125 43.0359 39.3311 42.2465 39.6203C41.457 39.9094 42.1072 38.88 41.0391 38.6255Z" fill="#9C0001"/>
<path d="M34.0664 41.5423C34.3915 39.4024 37.0386 40.1542 36.3536 41.0911C35.6685 42.0281 35.4596 40.1889 34.0664 41.5423Z" fill="#9C0001"/>
<path d="M35.6055 47.0957C35.8681 49.3205 37.625 48.6334 37.4444 47.9463C37.2638 47.2593 36.6891 48.0445 35.6055 47.0957Z" fill="#9C0001"/>
<path d="M35.2945 64.9888C34.26 63.0913 36.6409 62.0116 36.8379 62.8787C37.0349 63.7457 35.508 63.2058 35.2945 64.9888Z" fill="#9C0001"/>
<path d="M35.4449 69.8825C33.9179 68.3119 35.4267 66.783 36.1181 67.2161C37.1514 67.8629 35.527 68.3609 35.4449 69.8825Z" fill="#9C0001"/>
<path d="M39.8151 72.2087C38.4688 72.0454 38.3021 70.004 39.2405 70.0496C40.5869 70.1151 39.027 71.1288 39.8151 72.2087Z" fill="#9C0001"/>
<path d="M41.8594 69.9137C43.255 71.1893 44.3331 69.0943 43.5998 68.8179C42.5161 68.4086 43.3535 69.8813 41.8594 69.9137Z" fill="#9C0001"/>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 102 KiB

3
ui/_/icons/profile.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg width="88" height="124" viewBox="0 0 88 124" fill="none" xmlns="http://www.w3.org/2000/svg">
<path opacity="0.998" d="M42.4512 2.00195C52.1659 2.22835 61.398 4.45649 70.166 8.69238L70.3818 8.79688L70.6162 8.84668C72.5686 9.26638 74.537 9.47923 76.5195 9.48535C76.5062 11.0178 76.3492 12.5388 76.0479 14.0508C74.4195 16.4705 72.6152 18.7571 70.6279 20.9072L69.8799 21.7168L70.1641 22.7812C71.785 28.8491 72.6458 35.0483 72.7471 41.3818L72.7549 41.8369L72.958 42.2432C74.3564 45.0408 75.7681 47.8651 77.1934 50.7148C76.401 51.7697 75.5014 52.7412 74.4893 53.6279L73.8906 54.1533L73.8164 54.9463C73.2326 61.1851 71.2275 66.786 67.8037 71.7871C66.3409 71.9333 64.8778 72.0802 63.415 72.2266C61.648 72.4034 59.8809 72.5803 58.1143 72.7568L56.9131 72.877L56.46 73.9951C55.1158 77.3095 54.9178 80.7587 55.8496 84.2715L55.9658 84.708L56.2578 85.0527C58.3856 87.5622 60.8538 89.6502 63.6553 91.3105L63.7783 91.3838L63.9102 91.4385C70.6068 94.2094 77.192 97.0352 83.665 99.9141C72.8406 106.409 62.2808 113.347 51.9873 120.731C49.5114 121.96 46.9641 122.264 44.2627 121.648C30.7653 112.891 16.9807 104.63 2.91113 96.8623C2.98649 96.7878 3.06425 96.7148 3.14453 96.6436C9.6346 94.2535 15.6931 91.0299 21.3154 86.9707L21.5225 86.8213L21.6855 86.625C23.5522 84.3704 24.9161 81.8385 25.7686 79.041L25.8184 78.877L25.8398 78.7061C26.5676 72.8871 26.5676 67.0651 25.8398 61.2461L25.7744 60.7236L25.4609 60.3018C16.1326 47.7366 13.0625 33.9256 16.21 18.7246C21.8795 8.29751 30.5529 2.76795 42.4512 2.00195Z" fill="#FE9201" fill-opacity="0.36" stroke="#FE9201" stroke-width="4"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 20 KiB

3
ui/_/images/divider.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg width="4004" height="80" viewBox="0 0 4004 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1978.59 16.9981C1958.34 34.6594 1926.21 39.7642 1911.05 27.2249C1905.12 22.3182 1901.18 22.3387 1895.3 27.3069C1889.42 32.2751 1668.94 35.0689 943.815 38.8441C319.093 42.0967 0.1788 45.4029 0.198794 49.2432C0.218788 53.0834 319.151 53.0688 943.873 49.8162C1617.81 46.3074 1889.5 46.5388 1894.77 50.9003C1900.04 55.2618 1905.95 55.231 1915.11 50.7944C1938.02 40.2513 1957.73 43.9891 1980.14 61.9768L2001.88 79.4194L2023.45 61.7513C2046.32 42.9792 2077.13 37.8812 2092.29 50.4205C2098.22 55.3272 2102.16 55.3067 2108.04 50.3385C2113.92 45.3703 2334.4 42.5766 3059.53 38.8013C3684.25 35.5487 4003.16 32.2425 4003.14 28.4023C4003.12 24.562 3684.19 24.5767 3059.47 27.8292C2334.35 31.6045 2113.85 31.1066 2107.92 26.2C2101.98 21.2933 2098.05 21.3138 2092.17 26.282C2077.14 38.9784 2044.96 34.2084 2024.53 16.759C2013.98 7.48739 2003.44 0.410206 2001.47 0.420455C1999.5 0.430705 1989.04 7.61722 1978.59 16.9981Z" fill="#FFDFB4"/>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
ui/_/images/fabric.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
ui/_/images/fabric.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

BIN
ui/_/images/knight.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 KiB

BIN
ui/_/images/knight.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

BIN
ui/_/images/the_return.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

View File

@@ -0,0 +1,104 @@
import './ForumPanel.js'
css(`
forum- {
font-family: 'Bona';
}
forum- input::placeholder {
font-family: 'Bona Nova';
font-size: 0.9em;
color: var(--accent);
}
input[type="checkbox"] {
appearance: none; /* remove default style */
-webkit-appearance: none;
width: 1em;
height: 1em;
border: 1px solid var(--accent);
}
input[type="checkbox"]:checked {
background-color: var(--red);
}
`)
class Forum extends Shadow {
selectedForum = "HY"
render() {
ZStack(() => {
HStack(() => {
VStack(() => {
img("/_/icons/logo.svg", "2em")
.padding(0.8, em)
.borderRadius(12, px)
.marginHorizontal(1, em)
.onHover(function (hovering) {
if(hovering) {
this.style.background = "var(--darkbrown)"
} else {
this.style.background = ""
}
})
.opacity(0)
img("/_/icons/place/austin.svg", "2em")
.padding(0.8, em)
.borderRadius(12, px)
.marginHorizontal(1, em)
.onHover(function (hovering) {
if(hovering) {
this.style.background = "var(--darkbrown)"
} else {
this.style.background = ""
}
})
.opacity(0)
})
.height(100, vh)
.paddingLeft(2, em)
.paddingRight(2, em)
.gap(1, em)
.marginTop(20, vh)
VStack(() => {
ForumPanel()
input("Message Hyperia", "98%")
.paddingVertical(1, em)
.paddingLeft(2, pct)
.color("var(--accent)")
.background("var(--darkbrown)")
.marginBottom(6, em)
.border("none")
.fontSize(1, em)
.onKeyDown(function (e) {
if (e.key === "Enter") {
window.Socket.send({app: "FORUM", operation: "SEND", msg: {forum: "HY", text: this.value }})
this.value = ""
}
})
})
.gap(0.5, em)
.width(100, pct)
.height(100, vh)
.alignHorizontal("center")
.alignVertical("end")
})
.width(100, "%")
.height(87, vh)
.x(0).y(0, vh)
})
.width(100, pct)
.height(100, pct)
}
}
register(Forum)

View File

@@ -0,0 +1,90 @@
import "../../components/LoadingCircle.js"
class ForumPanel extends Shadow {
forums = [
"HY"
]
messages = []
render() {
VStack(() => {
if(this.messages.length > 0) {
let previousDate = null
for(let i=0; i<this.messages.length; i++) {
let message = this.messages[i]
const dateParts = this.parseDate(message.time);
const { date, time } = dateParts;
if (previousDate !== date) {
previousDate = date;
p(date)
.textAlign("center")
.opacity(0.5)
.marginVertical(1, em)
.color("var(--divider)")
}
VStack(() => {
HStack(() => {
p(message.sentBy)
.fontWeight("bold")
.marginBottom(0.3, em)
p(util.formatTime(message.time))
.opacity(0.2)
.marginLeft(1, em)
})
p(message.text)
})
}
} else {
LoadingCircle()
}
})
.gap(1, em)
.position("relative")
.overflow("scroll")
.height(100, pct)
.width(96, pct)
.paddingTop(5, em)
.paddingBottom(2, em)
.paddingLeft(4, pct)
.backgroundColor("var(--darkbrown)")
.onAppear(async () => {
console.log("appear")
requestAnimationFrame(() => {
this.scrollTop = this.scrollHeight
});
let res = await Socket.send({app: "FORUM", operation: "GET", msg: {forum: "HY", number: 100}})
if(!res) console.error("failed to get messages")
if(res.msg.length > 0 && this.messages.length === 0) {
console.log("rerendering", res.msg)
this.messages = res.msg
this.rerender()
}
window.addEventListener("new-post", (e) => {
this.messages = e.detail
if(e.detail.length !== this.messages || e.detail.last.time !== this.messages.last.time || e.detail.first.time !== this.messages.first.time) {
this.rerender()
}
})
})
}
parseDate(str) {
// Format: MM.DD.YYYY-HH:MM:SSxxxxxx(am|pm)
const match = str.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})-(\d{1,2}):(\d{2}).*(am|pm)$/i);
if (!match) return null;
const [, mm, dd, yyyy, hh, min, ampm] = match;
const date = `${mm}/${dd}/${yyyy}`;
const time = `${hh}:${min}${ampm.toLowerCase()}`;
return { date, time };
}
}
register(ForumPanel)

View File

@@ -0,0 +1,101 @@
import "./JobsSidebar.js"
import "./JobsGrid.js"
css(`
jobs- {
font-family: 'Bona';
}
jobs- input::placeholder {
font-family: 'Bona Nova';
font-size: 0.9em;
color: var(--accent);
}
input[type="checkbox"] {
appearance: none; /* remove default style */
-webkit-appearance: none;
width: 1em;
height: 1em;
border: 1px solid var(--accent);
}
input[type="checkbox"]:checked {
background-color: var(--red);
}
`)
class Jobs extends Shadow {
jobs = [
{
title: "Austin Chapter Lead",
salary: "1% of Local Revenue",
company: "Hyperia",
city: "Austin",
state: "TX"
}
]
render() {
ZStack(() => {
HStack(() => {
JobsSidebar()
JobsGrid(this.jobs)
})
.width(100, "%")
.x(0).y(13, vh)
HStack(() => {
input("Search jobs... (Coming Soon!)", "45vw")
.attr({
"type": "text",
"disabled": "true"
})
.fontSize(1.1, em)
.paddingLeft(1.3, em)
.background("transparent")
.border("0.5px solid var(--divider)")
.outline("none")
.color("var(--accent)")
.opacity(0.5)
.borderRadius(10, px)
.background("grey")
.cursor("not-allowed")
button("+ Add Job")
.width(7, em)
.marginLeft(1, em)
.borderRadius(10, px)
.background("transparent")
.border("0.3px solid var(--accent2)")
.color("var(--accent)")
.fontFamily("Bona Nova")
.onHover(function (hovering) {
if(hovering) {
this.style.background = "var(--green)"
} else {
this.style.background = "transparent"
}
})
.onClick((clicking) => {
console.log(this, "clicked")
})
})
.x(55, vw).y(4, vh)
.position("absolute")
.transform("translateX(-50%)")
})
.width(100, "%")
.height(100, "%")
}
connectedCallback() {
// Optional additional logic
}
}
register(Jobs)

View File

@@ -0,0 +1,60 @@
class JobsGrid extends Shadow {
jobs;
constructor(jobs) {
super()
this.jobs = jobs
}
boldUntilFirstSpace(text) {
const index = text.indexOf(' ');
if (index === -1) {
// No spaces — bold the whole thing
return `<b>${text}</b>`;
}
return `<b>${text.slice(0, index)}</b>${text.slice(index)}`;
}
render() {
VStack(() => {
h3("Results")
.marginTop(0.1, em)
.marginBottom(1, em)
.marginLeft(0.4, em)
.color("var(--accent2)")
if (this.jobs.length > 0) {
ZStack(() => {
for (let i = 0; i < this.jobs.length; i++) {
VStack(() => {
p(this.jobs[i].title)
.fontSize(1.2, em)
.fontWeight("bold")
.marginBottom(0.5, em)
p(this.jobs[i].company)
p(this.jobs[i].city + ", " + this.jobs[i].state)
.marginBottom(0.5, em)
p(this.boldUntilFirstSpace(this.jobs[i].salary))
})
.padding(1, em)
.borderRadius(5, "px")
.background("var(--darkbrown)")
}
})
.display("grid")
.gridTemplateColumns("repeat(auto-fill, minmax(250px, 1fr))")
.gap(1, em)
} else {
p("No Jobs!")
}
})
.height(100, vh)
.paddingLeft(2, em)
.paddingRight(2, em)
.paddingTop(2, em)
.gap(0, em)
.width(100, "%")
}
}
register(JobsGrid)

View File

@@ -0,0 +1,26 @@
class JobsSidebar extends Shadow {
render() {
VStack(() => {
h3("Location")
.color("var(--accent2)")
.marginBottom(0, em)
HStack(() => {
input("Location", "100%")
.paddingLeft(3, em)
.paddingVertical(0.75, em)
.backgroundImage("/_/icons/locationPin.svg")
.backgroundRepeat("no-repeat")
.backgroundSize("18px 18px")
.backgroundPosition("10px center")
})
})
.paddingTop(1, em)
.paddingLeft(3, em)
.paddingRight(3, em)
.gap(1, em)
.minWidth(10, vw)
}
}
register(JobsSidebar)

View File

@@ -0,0 +1,105 @@
import "./MarketSidebar.js"
import "./MarketGrid.js"
css(`
market- {
font-family: 'Bona';
}
market- input::placeholder {
font-family: 'Bona Nova';
font-size: 0.9em;
color: var(--accent);
}
input[type="checkbox"] {
appearance: none; /* remove default style */
-webkit-appearance: none;
width: 1em;
height: 1em;
border: 1px solid var(--accent);
}
input[type="checkbox"]:checked {
background-color: var(--red);
}
`)
class Market extends Shadow {
listings = [
{
title: "Shield Lapel Pin",
stars: "5",
reviews: 1,
price: "$12",
company: "Hyperia",
type: "new",
image: "/db/images/1",
madeIn: "America"
}
]
render() {
ZStack(() => {
HStack(() => {
MarketSidebar()
MarketGrid(this.listings)
})
.width(100, "%")
.x(0).y(13, vh)
HStack(() => {
input("Search for products... (Coming Soon!)", "45vw")
.attr({
"type": "text",
"disabled": "true"
})
.fontSize(1.1, em)
.paddingLeft(1.3, em)
.background("transparent")
.border("0.5px solid var(--divider)")
.outline("none")
.color("var(--accent)")
.opacity(0.5)
.borderRadius(10, px)
.background("grey")
.cursor("not-allowed")
button("+ Add Item")
.width(7, em)
.marginLeft(1, em)
.borderRadius(10, px)
.background("transparent")
.border("0.5px solid var(--accent2)")
.color("var(--accent)")
.fontFamily("Bona Nova")
.onHover(function (hovering) {
if(hovering) {
this.style.background = "var(--green)"
} else {
this.style.background = "transparent"
}
})
.onClick((clicking) => {
console.log(this, "clicked")
})
})
.x(55, vw).y(4, vh)
.position("absolute")
.transform("translateX(-50%)")
})
.width(100, "%")
.height(100, "%")
}
connectedCallback() {
// Optional additional logic
}
}
register(Market)

View File

@@ -0,0 +1,140 @@
class MarketGrid extends Shadow {
listings;
constructor(listings) {
super()
this.listings = listings
}
boldUntilFirstSpace(text) {
if(!text) return
const index = text.indexOf(' ');
if (index === -1) {
// No spaces — bold the whole thing
return `<b>${text}</b>`;
}
return `<b>${text.slice(0, index)}</b>${text.slice(index)}`;
}
render() {
VStack(() => {
h3("Results")
.marginTop(0.1, em)
.marginBottom(1, em)
.marginLeft(0.4, em)
.color("var(--accent)")
.opacity(0.7)
if (this.listings.length > 0) {
ZStack(() => {
// BuyModal()
let params = new URLSearchParams(window.location.search);
const hyperiaMade = params.get("hyperia-made") === "true";
const americaMade = params.get("america-made") === "true";
const newItem = params.get("new") === "true";
const usedItem = params.get("used") === "true";
let filtered = this.listings;
if (hyperiaMade) {
filtered = filtered.filter(item => item.madeIn === "Hyperia");
}
if (americaMade) {
filtered = filtered.filter(item => item.madeIn === "America");
}
if (newItem) {
filtered = filtered.filter(item => item.type === "new");
}
if (usedItem) {
filtered = filtered.filter(item => item.type === "used");
}
for (let i = 0; i < filtered.length; i++) {
const rating = filtered[i].stars
const percent = (rating / 5)
VStack(() => {
img(filtered[i].image)
.marginBottom(0.5, em)
p(filtered[i].company)
.marginBottom(0.5, em)
p(filtered[i].title)
.fontSize(1.2, em)
.fontWeight("bold")
.marginBottom(0.5, em)
HStack(() => {
p(filtered[i].stars)
.marginRight(0.2, em)
ZStack(() => {
div("★★★★★") // Empty stars (background)
.color("#ccc")
div("★★★★★") // Filled stars (foreground, clipped by width)
.color("#ffa500")
.position("absolute")
.top(0)
.left(0)
.whiteSpace("nowrap")
.overflow("hidden")
.width(percent * 5, em)
})
.display("inline-block")
.position("relative")
.fontSize(1.2, em)
.lineHeight(1)
p(filtered[i].reviews)
.marginLeft(0.2, em)
})
.marginBottom(0.5, em)
p(filtered[i].price)
.fontSize(1.75, em)
.marginBottom(0.5, em)
button("Coming Soon!")
.onClick((finished) => {
if(finished) {
}
})
.onHover(function (hovering) {
if(hovering) {
this.style.backgroundColor = "var(--green)"
} else {
this.style.backgroundColor = ""
}
})
})
.padding(1, em)
.border("1px solid var(--accent2)")
.borderRadius(5, "px")
}
})
.display("grid")
.gridTemplateColumns("repeat(auto-fill, minmax(250px, 1fr))")
.gap(1, em)
} else {
p("No Listings!")
}
})
.onQueryChanged(() => {
console.log("query did change yup")
this.rerender()
})
.height(100, vh)
.paddingLeft(2, em)
.paddingRight(2, em)
.gap(0, em)
.width(100, "%")
}
}
register(MarketGrid)

View File

@@ -0,0 +1,85 @@
class MarketSidebar extends Shadow {
handleChecked(e) {
let checked = e.target.checked
let label = $(`label[for="${e.target.id}"]`).innerText
if(checked) {
window.setQuery(label.toLowerCase(), true)
} else {
window.setQuery(label.toLowerCase(), null)
}
}
render() {
VStack(() => {
p("Make")
HStack(() => {
input()
.attr({
"type": "checkbox",
"id": "hyperia-check"
})
.onChange(this.handleChecked)
label("Hyperia-Made")
.attr({
"for": "hyperia-check"
})
.marginLeft(0.5, em)
})
HStack(() => {
input()
.attr({
"type": "checkbox",
"id": "america-check"
})
.onChange(this.handleChecked)
label("America-Made")
.attr({
"for": "america-check"
})
.marginLeft(0.5, em)
})
p("Condition")
HStack(() => {
input()
.attr({
"type": "checkbox",
"id": "new-check"
})
.onChange(this.handleChecked)
label("New")
.attr({
"for": "new-check"
})
.marginLeft(0.5, em)
})
HStack(() => {
input()
.attr({
"type": "checkbox",
"id": "used-check"
})
.onChange(this.handleChecked)
label("Used")
.attr({
"for": "used-check"
})
.marginLeft(0.5, em)
})
})
.paddingTop(12, vh)
.paddingLeft(3, em)
.paddingRight(3, em)
.gap(1, em)
.minWidth(10, vw)
.userSelect('none')
}
}
register(MarketSidebar)

View File

@@ -0,0 +1,188 @@
import "./MessagesSidebar.js"
import "./MessagesPanel.js"
css(`
messages- {
font-family: 'Bona';
}
messages- input::placeholder {
font-family: 'Bona Nova';
font-size: 0.9em;
color: var(--accent);
}
input[type="checkbox"] {
appearance: none; /* remove default style */
-webkit-appearance: none;
width: 1em;
height: 1em;
border: 1px solid var(--accent);
}
input[type="checkbox"]:checked {
background-color: var(--red);
}
`)
class Messages extends Shadow {
conversations = []
selectedConvoID = null
onConversationSelect(i) {
console.log("convo selected: ", i)
this.selectedConvoID = i
this.$("messagessidebar-").rerender()
this.$("messagespanel-").rerender()
}
getConvoFromID(id) {
for(let i=0; i<this.conversations.length; i++) {
if(this.conversations[i].id === id) {
return this.conversations[i]
}
}
}
render() {
ZStack(() => {
HStack(() => {
MessagesSidebar(this.conversations, this.selectedConvoID, this.onConversationSelect)
VStack(() => {
if(this.getConvoFromID(this.selectedConvoID)) {
MessagesPanel(this.getConvoFromID(this.selectedConvoID).messages)
} else {
MessagesPanel()
}
input("Send Message", "93%")
.paddingVertical(1, em)
.paddingHorizontal(2, em)
.color("var(--accent)")
.background("var(--darkbrown)")
.marginBottom(6, em)
.border("none")
.fontSize(1, em)
.onKeyDown((e) => {
if (e.key === "Enter") {
window.Socket.send({app: "MESSAGES", operation: "SEND", msg: { conversation: `CONVERSATION-${this.selectedConvoID}`, text: e.target.value }})
e.target.value = ""
}
})
})
.gap(1, em)
.width(100, pct)
.alignHorizontal("center")
.alignVertical("end")
})
.onAppear(async () => {
let res = await Socket.send({app: "MESSAGES", operation: "GET"})
if(!res) console.error("failed to get messages")
if(res.msg.length > 0 && this.conversations.length === 0) {
this.conversations = res.msg
this.selectedConvoID = this.conversations[0].id
this.rerender()
}
window.addEventListener("new-message", (e) => {
let convoID = e.detail.conversationID
let messages = e.detail.messages
let convo = this.getConvoFromID(convoID)
convo.messages = messages
this.rerender()
})
})
.width(100, "%")
.height(87, vh)
.x(0).y(13, vh)
VStack(() => {
p("Add Message")
input("enter email...")
.color("var(--accent)")
.onKeyDown(function (e) {
if (e.key === "Enter") {
window.Socket.send({app: "MESSAGES", operation: "ADDCONVERSATION", msg: {email: this.value }})
this.value = ""
}
})
p("x")
.onClick(function (done) {
if(done) {
this.parentElement.style.display = "none"
}
})
.xRight(2, em).y(2, em)
.fontSize(1.4, em)
.cursor("pointer")
})
.gap(1, em)
.alignVertical("center")
.alignHorizontal("center")
.backgroundColor("black")
.border("1px solid var(--accent)")
.position("fixed")
.x(50, vw).y(50, vh)
.center()
.width(60, vw)
.height(60, vh)
.display("none")
.attr({id: "addPanel"})
HStack(() => {
input("Search messages... (Coming Soon!)", "45vw")
.attr({
"type": "text",
"disabled": "true"
})
.fontSize(1.1, em)
.paddingLeft(1.3, em)
.background("transparent")
.border("0.5px solid var(--divider)")
.outline("none")
.color("var(--accent)")
.opacity(0.5)
.borderRadius(10, px)
.background("grey")
.cursor("not-allowed")
button("+ New Message")
.width(13, em)
.marginLeft(1, em)
.borderRadius(10, px)
.background("transparent")
.border("0.5px solid var(--divider)")
.color("var(--accent)")
.fontFamily("Bona Nova")
.onHover(function (hovering) {
if(hovering) {
this.style.background = "var(--green)"
} else {
this.style.background = "transparent"
}
})
.onClick((done) => {
console.log("click")
if(done) {
this.$("#addPanel").style.display = "flex"
}
console.log(this, "clicked")
})
})
.x(55, vw).y(4, vh)
.position("absolute")
.transform("translateX(-50%)")
})
.width(100, "%")
.height(100, "%")
}
}
register(Messages)

View File

@@ -0,0 +1,56 @@
import "../../components/LoadingCircle.js"
class MessagesPanel extends Shadow {
messages
constructor(messages) {
super()
this.messages = messages
}
render() {
VStack(() => {
if(this.messages) {
for(let i=0; i<this.messages.length; i++) {
let message = this.messages[i]
let fromMe = window.profile.email === message.from.email
VStack(() => {
HStack(() => {
p(message.from.firstName + " " + message.from.lastName)
.fontWeight("bold")
.marginBottom(0.3, em)
p(util.formatTime(message.time))
.opacity(0.2)
.marginLeft(1, em)
})
p(message.text)
})
.paddingVertical(0.5, em)
.marginLeft(fromMe ? 70 : 0, pct)
.paddingRight(fromMe ? 10 : 0, pct)
.marginRight(fromMe ? 0 : 70, pct)
.paddingLeft(fromMe ? 5 : 10, pct)
.background(fromMe ? "var(--brown)" : "var(--green)")
}
} else {
LoadingCircle()
}
})
.onAppear(async () => {
requestAnimationFrame(() => {
this.scrollTop = this.scrollHeight
});
})
.gap(1, em)
.position("relative")
.overflow("scroll")
.height(95, pct)
.width(100, pct)
.paddingTop(2, em)
.paddingBottom(2, em)
.backgroundColor("var(--darkbrown)")
}
}
register(MessagesPanel)

View File

@@ -0,0 +1,73 @@
class MessagesSidebar extends Shadow {
conversations = []
selectedConvoID
onSelect
constructor(conversations, selectedConvoID, onSelect) {
super()
this.conversations = conversations
this.selectedConvoID = selectedConvoID
this.onSelect = onSelect
}
render() {
VStack(() => {
this.conversations.forEach((convo, i) => {
VStack(() => {
HStack(() => {
p(this.makeConvoTitle(convo.between))
.textAlign("left")
.marginLeft(0.5, inches)
.paddingTop(0.2, inches)
.width(100, pct)
.marginTop(0)
.fontSize(1, em)
.fontWeight("bold")
p(util.formatTime(convo.messages.last.time))
.paddingTop(0.2, inches)
.fontSize(0.8, em)
.marginRight(0.1, inches)
.color("var(--divider")
})
.justifyContent("space-between")
.marginBottom(0)
p(convo.messages.last.text)
.fontSize(0.8, em)
.textAlign("left")
.marginLeft(0.5, inches)
.marginBottom(2, em)
.color("var(--divider)")
})
.background(convo.id === this.selectedConvoID ? "var(--darkbrown)" : "")
.onClick(() => {
this.onSelect(i)
})
})
})
.minWidth(15, vw)
.height(100, vh)
.gap(0, em)
}
makeConvoTitle(members) {
let membersString = ""
for(let i=0; i<members.length; i++) {
let member = members[i]
if(member.email === window.profile.email) {
continue;
}
if(members.length > 2) {
membersString += member.firstName
} else {
membersString += member.firstName + " " + member.lastName
}
}
return membersString
}
}
register(MessagesSidebar)

View File

@@ -0,0 +1,153 @@
css(`
tasks- {
font-family: 'Bona';
}
tasks- input::placeholder {
font-family: 'Bona Nova';
font-size: 0.9em;
color: var(--accent);
}
input[type="checkbox"] {
appearance: none; /* remove default style */
-webkit-appearance: none;
width: 1em;
height: 1em;
border: 1px solid var(--accent);
}
input[type="checkbox"]:checked {
background-color: var(--red);
}
`)
class Tasks extends Shadow {
projects = [
{
"title": "Blockcatcher",
"tasks": {}
}
]
columns = [
{
"title": "backlog",
"tasks": {}
}
]
render() {
ZStack(() => {
HStack(() => {
VStack(() => {
h3("Projects")
.marginTop(0)
.marginBottom(1, em)
.marginLeft(0.4, em)
if (this.projects.length >= 1) {
for(let i = 0; i < this.projects.length; i++) {
p(this.projects[i].title)
}
} else {
p("No Projects!")
}
})
.height(100, vh)
.paddingLeft(2, em)
.paddingRight(2, em)
.paddingTop(2, em)
.gap(0, em)
.borderRight("0.5px solid var(--accent2)")
HStack(() => {
if (this.columns.length >= 1) {
for(let i = 0; i < this.columns.length; i++) {
p(this.columns[i].name)
}
} else {
p("No Conversations!")
}
})
.height(100, vh)
.paddingLeft(2, em)
.paddingRight(2, em)
.paddingTop(2, em)
.gap(0, em)
.borderRight("0.5px solid var(--accent2)")
})
.width(100, "%")
.x(0).y(13, vh)
.borderTop("0.5px solid var(--accent2)")
p("0 Items")
.position("absolute")
.x(50, vw).y(50, vh)
.transform("translate(-50%, -50%)")
HStack(() => {
input("Search tasks...", "45vw")
.attr({
"type": "text"
})
.fontSize(1.1, em)
.paddingLeft(1.3, em)
.background("transparent")
.border("0.5px solid var(--accent2)")
.outline("none")
.color("var(--accent)")
.borderRadius(10, px)
button("Search")
.marginLeft(2, em)
.borderRadius(10, px)
.background("transparent")
.border("0.5px solid var(--accent2)")
.color("var(--accent)")
.fontFamily("Bona Nova")
.onHover(function (hovering) {
if(hovering) {
this.style.background = "var(--green)"
} else {
this.style.background = "transparent"
}
})
button("+ New Task")
.width(9, em)
.marginLeft(1, em)
.borderRadius(10, px)
.background("transparent")
.border("0.5px solid var(--accent2)")
.color("var(--accent)")
.fontFamily("Bona Nova")
.onHover(function (hovering) {
if(hovering) {
this.style.background = "var(--green)"
} else {
this.style.background = "transparent"
}
})
.onClick((clicking) => {
console.log(this, "clicked")
})
})
.x(55, vw).y(4, vh)
.position("absolute")
.transform("translateX(-50%)")
})
.width(100, "%")
.height(100, "%")
}
connectedCallback() {
// Optional additional logic
}
}
register(Tasks)

View File

@@ -0,0 +1,133 @@
css(`
app-menu {
color: var(--tan);
transform: translateX(-50%);
transition: transform .3s;
display: flex; gap: 2em; position: fixed; left: 50vw; bottom: 2em;
}
app-menu.minimized {
color: var(--accent);
transform: translate(-50%, 65%);
border: 0.2px solid var(--accent);
padding-top: 0.5em;
padding-left: 2em;
padding-right: 2em;
padding-bottom: 4em;
bottom: 1em;
border-radius: 12px;
}
app-menu p {
cursor: default;
transition: transform .3s, text-decoration .3s;
padding: 0.5em;
border-radius: 5px;
text-underline-offset: 5px;
}
app-menu p:hover {
text-decoration: underline;
transform: translateY(-5%)
}
app-menu p.touched {
text-decoration: underline;
transform: translateY(0%)
}
app-menu p.selected {
text-decoration: underline;
transform: translateY(-10%)
}
#divider.minimized {
display: none;
}
`)
register(
class AppMenu extends Shadow {
selected;
constructor(selected) {
super()
this.selected = selected
}
render() {
VStack(() => {
HStack(() => {
p("Forum")
p("Messages")
p("Market")
p("Jobs")
})
.justifyContent("center")
.gap(1.5, em)
.paddingRight(2, em)
img("/_/images/divider.svg", "40vw")
.attr({
"id": "divider",
})
})
.gap(0.5, em)
.onNavigate(() => {
if(window.location.pathname === "/") {
this.styleMaximized()
$("app-window").close()
} else {
this.styleMinimized()
$("app-window").open(this.selected)
}
})
.onAppear(() => {
Array.from(this.querySelectorAll("p")).forEach((el) => {
el.addEventListener("mousedown", (e) => {
el.classList.add("touched")
})
})
window.addEventListener("mouseup", (e) => {
let target = e.target
if(!target.matches("app-menu p")) {
return
}
target.classList.remove("touched")
if(target.classList.contains("selected")) {
this.selected = ""
window.navigateTo("/")
} else {
this.selected = target.innerText
window.navigateTo("/app/" + target.innerText.toLowerCase())
}
})
})
if(this.selected) {
this.styleMinimized()
}
}
styleMaximized() {
$$("app-menu p").forEach((el) => {
el.classList.remove("selected")
})
this.classList.remove("minimized")
$("#divider").style.display = ""
}
styleMinimized() {
$$("app-menu p").forEach((el) => {
if(el.innerText !== this.selected) {
el.classList.remove("selected")
} else {
el.classList.add("selected")
}
})
this.classList.add("minimized")
$("#divider").style.display = "none"
}
}
, "app-menu")

Some files were not shown because too many files have changed in this diff Show More