Merge branch 'master' into typography

This commit is contained in:
eggy 2024-04-15 23:32:24 -04:00
commit bdecaf8c0b
87 changed files with 7401 additions and 3710 deletions

View File

@ -1,27 +1,25 @@
# Eggworld v3: Nuxt 3
# Oeufs?
After hand-written HTML and a static site generator comes Nuxt!
Après le HTML manuscrit et le générateur de site statique — c'est Nuxt!
**WARN: Volar 0.40.0 breaks all type-checking and I don't know why — stick with Volar 0.39.5.**
Instructions post-compilation (pendant Nuxt n'a pas le prérendu)
Post-build instructions (while prerendering is bork)
- Compilez `/script.ts` à `/script.js` (`tsc script.ts -m esnext -t esnext --moduleResolution node`)
- Compile `/script.ts` to `/script.js` (`tsc script.ts -m esnext -t esnext --moduleReslution node`)
Lisez la [documentation de Nuxt](https://v3.nuxtjs.org) pour en savoir plus.
Look at the [nuxt 3 documentation](https://v3.nuxtjs.org) to learn more.
## Installation
## Setup
Make sure to install the dependencies:
Assurez-vous d'installer les dépendances:
```bash
# yarn
yarn install
```
## Development Server
## Serveur de développement
Start the development server on http://localhost:3000
Démarrez le serveur de développement sur http://localhost:3000
```bash
yarn dev
@ -29,10 +27,10 @@ yarn dev
## Production
Locally preview production build:
Prévisualisez la production sur votre système local:
```bash
yarn preview
```
Checkout the [deployment documentation](https://v3.nuxtjs.org/guide/deploy/presets) for more information.
Lisez la [documentation de déploiement](https://v3.nuxtjs.org/guide/deploy/presets) pour en savoir plus.

52
assets/css/base.scss Normal file
View File

@ -0,0 +1,52 @@
@import url("https://fonts.googleapis.com/css2?family=Bitter:wght@300;400;600;700;800;900&display=swap");
@mixin headings {
h1,
h2,
h3,
h4,
h5,
h6 {
@content;
}
}
* {
box-sizing: border-box;
// for that cool wave dark mode effect
z-index: 1;
position: relative;
}
html,
body,
div#__nuxt {
height: 100%;
}
main {
flex-grow: 1;
}
:root {
--text-color: #243746;
--bg: #f1e7d0;
}
.dark {
--text-color: #ebf4f1;
--bg: #091a28;
}
.text-bitter {
font-family: Bitter, ui-sans-serif, system-ui, -apple-system,
BlinkMacSystemFont, "Segoe UI", Roboto, "Open Sans", "Helvetica Neue",
sans-serif;
}
.text-article {
font-family: "Source Serif Pro", serif;
line-height: 1.8;
color: #111;
font-size: 1.25rem;
}

22
assets/css/main.scss Normal file
View File

@ -0,0 +1,22 @@
@import "base.scss";
.prose article {
@include headings {
& > a:hover,
& > a:active {
text-decoration: underline;
text-decoration-skip-ink: all;
@apply text-blue-700 dark:text-blue-400;
&::before {
content: "#";
position: absolute;
opacity: 0.5;
left: -2rem;
}
}
}
a:hover {
@apply hover:text-blue-700 dark:hover:text-blue-400;
}
}

1
assets/images/star.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="0" stroke-linecap="round" stroke-linejoin="round" class="feather feather-star"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>

After

Width:  |  Height:  |  Size: 339 B

View File

@ -27,9 +27,8 @@ const latest = docs.at(-1) as BlogParsedContent;
v-for="(tag, index) in latest.tags"
:key="index"
:dest="`/tags/blog/${tag}`"
>
{{ tag }}
</Tag>
:name="tag"
/>
</div>
<ContentRenderer
tag="article"

View File

@ -10,7 +10,11 @@ const toggle = () => {
</script>
<template>
<label for="dark-toggle" class="toggle-wrapper">
<label
for="dark-toggle"
class="toggle-wrapper"
aria-label="Dark mode indicator label"
>
<div class="toggle">
<div class="icons">
<IconMoon />
@ -21,6 +25,7 @@ const toggle = () => {
name="dark-toggle"
type="checkbox"
ref="darkToggleEl"
aria-label="Toggle dark mode"
@click="toggle"
/>
</div>

View File

@ -27,7 +27,12 @@ onMounted(async () => {
title="Latest commit"
:clearstyles="true"
>
<img class="m-0 w-full h-full" :src="imgUrl" id="github-commit-img" />
<img
class="m-0 w-full h-full"
:src="imgUrl"
id="github-commit-img"
alt="Latest GitHub commit"
/>
<!--
<div>
<h2>{{ title }}</h2>

View File

@ -1,8 +1,8 @@
<script setup lang="ts">
import { getPrettyDate, getUtcDate } from "~~/shared/metadata";
import { BlogParsedContent, StoryParsedContent } from "~~/shared/types";
import type { AnyParsedContent } from "~~/shared/types";
const props = defineProps<{ doc: StoryParsedContent | BlogParsedContent }>();
const props = defineProps<{ doc: AnyParsedContent }>();
const prettyDate = getPrettyDate(props.doc);
const utcDate = getUtcDate(props.doc);

View File

@ -11,8 +11,17 @@ const getSvgIcon = async (name: string) => {
<template>
<div class="hamburger">
<input class="checkbox" type="checkbox" id="checkbox" />
<label class="checkbox-label" for="checkbox">
<input
class="checkbox"
type="checkbox"
id="checkbox"
aria-label="Hamburger menu toggle"
/>
<label
class="checkbox-label"
for="checkbox"
aria-label="Hamburger menu indicator label"
>
<svg class="ham ham-rotate" viewBox="0 0 100 100" width="60">
<path
class="line top"
@ -25,7 +34,7 @@ const getSvgIcon = async (name: string) => {
/>
</svg>
</label>
<div class="drawer prose dark:prose-invert">
<ul class="drawer prose dark:prose-invert">
<li class="m-0" v-for="(item, index) in navItems" :key="index">
<!-- stupid vite doesn't let require work
i should have just hardcoded the navbar items -->
@ -34,12 +43,13 @@ const getSvgIcon = async (name: string) => {
:src="`/nav/${item.title.toLowerCase()}.svg`"
class="m-0"
preload="auto"
:alt="`${item.title} logo`"
/>
{{ item.title }}
</a>
<hr class="m-0 m-2" v-if="index !== navItems.length - 1" />
<hr class="m-2" v-if="index !== navItems.length - 1" />
</li>
</div>
</ul>
</div>
</template>

101
components/HeaderLoop.vue Normal file
View File

@ -0,0 +1,101 @@
<script setup lang="ts">
const props = defineProps<{ strings: string[]; class?: string }>();
</script>
<template>
<h1 :class="[props.class, 'text-loop relative text-center w-full h-16']">
<span class="text absolute w-full" v-for="s in props.strings" :key="s">
{{ s }}
</span>
</h1>
</template>
<style scoped lang="scss">
@use "sass:math";
@mixin text-loop($els) {
.text-loop {
overflow: hidden;
$duration: 3s;
@if $els > 1 {
& > span {
display: block;
opacity: 0;
@for $i from 1 through $els {
&:nth-child(#{$i}) {
animation: move-test-#{$i} $duration * $els infinite;
}
}
}
}
}
@for $i from 1 through $els {
@keyframes move-test-#{$i} {
$interval: calc(100% / $els);
$upper_bound: $interval * $i;
$lower_bound: $interval * ($i - 1);
// we try to make the previous exit and the next enter
// at the same time, also taking care of negatives
// for i = 1, this is negative, so start the animation at the end of the cycle
@if $i > 1 {
0% {
opacity: 0;
transform: translateY(100%);
}
#{$lower_bound - $interval * 0.05} {
opacity: 0;
transform: translateY(100%);
}
}
#{$lower_bound} {
opacity: 1;
transform: translateY(0%);
}
#{$lower_bound + $interval * 0.95} {
opacity: 1;
transform: translateY(0%);
}
#{$upper_bound} {
opacity: 0;
transform: translateY(-100%);
}
@if $i == 1 {
// reset el 1
#{100% - $interval * 0.05} {
opacity: 0;
transform: translateY(100%);
}
100% {
opacity: 1;
transform: translateY(0%);
}
} @else {
100% {
opacity: 0;
transform: translateY(-100%);
}
}
}
}
}
/**
* For one element, we have the following pattern. To expand it to 2+
* els, we divide 100% by the number of els and turn on the animation
* only at the correct time.
* -5%: invis
* 0%: vis
* 95%: vis
* 100%: invis
*/
@include text-loop(3);
</style>

View File

@ -8,10 +8,13 @@ const props = defineProps<{ activeItem?: string }>();
<template>
<nav class="flex items-center justify-between">
<ul>
<li class="home-text"><a href="/">Eggworld</a></li>
<li class="home-text"><a href="/">Oeufs?</a></li>
<li v-for="(item, index) in navItems" :key="index">
<a :href="item.href" class="flex gap-2">
<img :src="`/nav/${item.title.toLowerCase()}.svg`" />
<img
:src="`/nav/${item.title.toLowerCase()}.svg`"
:alt="`${item.title} logo`"
/>
{{ item.title }}</a
>
</li>

View File

@ -1,9 +1,11 @@
<script setup lang="ts">
import type { StoryParsedContent, BlogParsedContent } from "@/shared/types";
import type { AnyParsedContent } from "@/shared/types";
import { calcReadingTime } from "@/shared/metadata";
import { SpecialTags } from "@/data/specialTags";
import IconStar from "@/assets/images/star.svg?component";
const props = defineProps<{
post: StoryParsedContent | BlogParsedContent;
post: AnyParsedContent;
type: "stories" | "blog";
highlighttags?: string[];
}>();
@ -16,8 +18,16 @@ const descText =
</script>
<template>
<div class="story-card p-4">
<h3 class="m-0">
<div
class="break-words max-w-full rounded-lg p-4 shadow-md border border-2 border-gray-300 dark:border-gray-600"
>
<h3 class="m-0 flex items-center gap-1.5">
<a
:href="`/tags/${props.type}/featured`"
v-if="post.tags.includes('featured')"
>
<IconStar class="fill-yellow-500 outline-none" />
</a>
<a
:href="post._path"
class="no-underline text-left text-2xl sm:text-2xl font-bold hover:text-blue-700 dark:hover:text-blue-400 leading-tight transition"
@ -27,19 +37,18 @@ const descText =
</h3>
<p class="my-1 text-sm"><Date :doc="post" /> · {{ descText }}</p>
<div class="flex flex-wrap">
<Tag
:dest="`/tags/${type}/${tag}`"
v-for="(tag, index) in post.tags"
:key="index"
:highlight="highlighttags?.includes(tag)"
>
{{ tag }}
</Tag>
<template v-for="(tag, index) in post.tags" :key="index">
<Tag
:dest="`/tags/${type}/${tag}`"
:name="tag"
:highlight="highlighttags?.includes(tag)"
v-if="!SpecialTags.includes(tag)"
/>
</template>
</div>
<ContentRenderer :value="post" :excerpt="true" tag="section">
<template #empty>No excerpt available.</template>
</ContentRenderer>
<!--<p v-if="!post.nopreview" class="m-0"></p>-->
<div class="text-right" v-if="!post.nopreview">
<a
:href="post._path"
@ -50,12 +59,3 @@ const descText =
</div>
</div>
</template>
<style scoped>
.story-card {
border: 0.1rem solid gray;
max-width: 100%;
border-radius: 0.5rem;
overflow-wrap: break-word;
}
</style>

View File

@ -17,13 +17,14 @@ const imgUrl = props.project.img
<div class="card-text h-full px-4 py-2">
<div class="h-full flex flex-col justify-between">
<div>
<h3 class="m-0">{{ project.name }}</h3>
<h3 class="m-0 font-bold font-sans">{{ project.name }}</h3>
<div class="flex gap-1 items-center flex-nowrap">
<img
class="h-5 w-5 m-0"
:src="`/images/langs/${lang}.svg`"
v-for="(lang, index) in project.langs"
:key="index"
:alt="`${lang} logo`"
/>
<span
class="text-xs text-gray-500 dark:text-gray-300 whitespace-nowrap"
@ -108,7 +109,7 @@ html.dark .card-img {
}
.desc-text {
width: 139%;
width: 140%;
/* 140% is too close */
transition: width 0.2s ease;
}
@ -127,7 +128,7 @@ a.unclickable {
}
.desc-text {
width: 135%;
width: 136%;
}
}

View File

@ -16,7 +16,7 @@ const imgUrl = `/images/services/${props.img}`;
:class="['no-underline', { unclickable: unclickable || broken, broken }]"
>
<div class="card flex flex-col items-center justify-around">
<img class="m-0" :src="imgUrl" />
<img class="m-0" :src="imgUrl" :alt="`${name} logo`" />
<h3 class="m-0">{{ props.name }}</h3>
<p class="desc-text text-gray-600 dark:text-gray-200"><slot /></p>
</div>
@ -44,12 +44,12 @@ a.broken::before {
content: "PANQUIA IS ON FIRE";
position: absolute;
color: red;
transform: rotate(-45deg);
transform: rotate(-40deg);
font-size: 1.5rem;
text-align: center;
z-index: 2;
top: 40%;
left: -12.5%;
top: 32.5%;
left: -8%;
width: 125%;
font-family: "Roboto", sans-serif;
font-weight: bold;

View File

@ -1,5 +1,5 @@
<script setup lang="ts">
import { type StoryParsedContent } from "@/shared/types";
import type { StoryParsedContent } from "@/shared/types";
import { calcReadingTime } from "@/shared/metadata";
const docs = await queryContent<StoryParsedContent>("/stories")
@ -27,9 +27,8 @@ const latest = docs.at(-1) as StoryParsedContent;
v-for="(tag, index) in latest.tags"
:key="index"
:dest="`/tags/stories/${tag}`"
>
{{ tag }}
</Tag>
:name="tag"
/>
</div>
<ContentRenderer
tag="article"

View File

@ -1,19 +1,28 @@
<script setup lang="ts">
const props = defineProps<{
name: string;
dest: string;
highlight?: boolean;
}>();
// const isLinkableTag = !props.name.includes(" ");
const isLinkableTag = true;
const tagClass = [
"inline-block text-xs rounded-lg py-1 px-2 mt-1 mr-1 transition border border-pink-200 dark:border-pink-900 border-2 font-medium",
{ "bg-pink-200 dark:bg-pink-900": props.highlight },
{ "shadow-md": isLinkableTag },
];
</script>
<template>
<a :href="dest">
<div
:class="[
'inline-block text-xs rounded-full py-1 px-2 mt-1 mr-1 bg-gray-300 dark:bg-gray-500 transition',
{ 'bg-yellow-200 dark:bg-yellow-700 shadow-lg': highlight },
]"
>
<slot />
<a :href="dest" v-if="isLinkableTag">
<div :class="tagClass">
{{ name }}
</div>
</a>
<div v-else>
<div :class="tagClass">
{{ name }}
</div>
</div>
</template>

View File

@ -1,5 +1,7 @@
<script setup lang="ts">
const props = defineProps<{ src: string }>();
const props = withDefaults(defineProps<{ src: string; alt?: string }>(), {
alt: "",
});
const src = props.src;
const imgSrc =
@ -10,7 +12,7 @@ const imgSrc =
<template>
<figure class="flex flex-col items-center">
<img :src="imgSrc" />
<figcaption class="text-center"><slot /></figcaption>
<img :src="imgSrc" class="drop-shadow-lg" :alt="alt" />
<figcaption class="text-center" v-if="alt">{{ alt }}</figcaption>
</figure>
</template>

View File

@ -18,8 +18,7 @@ import { projects } from "@/data/projects";
<!-- this could be in markdown but eh -->
<p>
Hello! It's very nice to meet you — my name's Daniel, a student studying
Computer Engineering at the University of Waterloo who is quite passionate
Hello! It's very nice to meet you — I'm a student who is quite passionate
about some subjects but is quite lazy in every other.
</p>
<p>

View File

@ -7,12 +7,13 @@
This site is statically generated using
<a href="https://v3.nuxtjs.org">Nuxt.js</a> with the help of templates and
Markdown because really, writing HTML by hand is tedious and I don't
know why I ever tried and its source is available
<a href="https://github.com/potatoeggy/public">here</a>.
know why I ever tried and its
<a href="https://github.com/potatoeggy/public">source is available here</a
>.
</p>
<!-- i could make this a list but god i'm so tired with nuxt -->
<div class="flex justify-around flex-wrap gap-8 items-center">
<ServiceCard name="Gitea" href="https://git.eggworld.me" img="gitea.webp">
<ServiceCard name="Gitea" href="https://git.eggworld.me" img="gitea.svg">
Self-hosted GitHub
</ServiceCard>
<ServiceCard
@ -39,14 +40,14 @@
<ServiceCard
name="Jellyfin"
href="https://jellyfin.eggworld.me"
img="jellyfin.webp"
img="jellyfin.svg"
>
FOSS media server
</ServiceCard>
<ServiceCard
name="Minecraft"
href="minecraft.eggworld.me"
img="minecraft.webp"
img="minecraft.svg"
unclickable
broken
>

View File

@ -1,29 +1,13 @@
/**
* Set the page title in the format [title] | Eggworld.
* Set the page title in the format [title] | [site name].
* @param title The title string.
*/
export function useTitle(title: string, description?: string) {
useHead({
title: `${title} | Eggworld`,
title: `${title} | Oeufs?`,
meta: [
{ name: "viewport", content: " width=device-width,initial-scale=1" },
{ name: "description", content: description || "" },
{ name: "theme-color", content: "#ffffff" },
],
link: [
{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" },
{
rel: "stylesheet",
href: "https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css",
},
],
script: [
{
defer: true,
src: "/script.js",
hid: "stupidEmergencyScript",
type: "module",
},
{ name: "description", content: description ?? "" },
],
});
}

View File

@ -13,13 +13,11 @@ First, what is Linux? At its heart, it is a [kernel](https://en.wikipedia.org/wi
However, this article will largely focus on **desktop Linux**, which competes with other operating systems such as Windows and macOS.
# Complete freedom
## Complete freedom
Perhaps the biggest feature of Linux is its ability to do whatever you want, however you want. After a *tiny* bit of tinkering, you'll be able to set up your computer exactly how you'd like it!
::image{src=sway-desktop.webp}
A terminal, an emulated Switch game, a game launcher, and a browser all automagically arranged by a tiling window manager. The currently playing song is in the top bar.
::
![A terminal, an emulated Switch game, a game launcher, and a browser all automagically arranged by a tiling window manager. The currently playing song is in the top bar.](sway-desktop.webp)
Or, if you aren't the type to spend hours fiddling every little thing, you can choose from a variety of existing default desktop interfaces.
@ -33,8 +31,7 @@ Or Plasma's endless customisation:
![](https://upload.wikimedia.org/wikipedia/commons/9/94/KDE_Plasma_5.21_Breeze_Twilight_screenshot.png)
::image{src=https://www.omgubuntu.co.uk/wp-content/uploads/2019/07/kde-plasma-desktop.jpg}
::
![](https://www.omgubuntu.co.uk/wp-content/uploads/2019/07/kde-plasma-desktop.jpg)
And this is only the beginning — it's not just appearance you have control over, although both GNOME and Plasma also come with their assortment of applications that have designs that perfectly mesh with the desktop, with global theming letting you click a single button in your settings menu to change colours or styles across all your apps.
@ -42,7 +39,7 @@ Don't like your file manager? Swap it out for one of the dozens out there. Don't
**You can do anything.**
# The package manager
## The package manager
Speaking of the update manager…
@ -56,22 +53,20 @@ Here are just a couple of the graphical stores available:
GNOME Software for GNOME:
::image{src=https://www.omgubuntu.co.uk/wp-content/uploads/2021/02/gnome-software-refresh.jpg}
::
![](https://www.omgubuntu.co.uk/wp-content/uploads/2021/02/gnome-software-refresh.jpg)
Discover for Plasma:
::image{src=https://userbase.kde.org/images.userbase/thumb/2/2d/Discoverappfocus.png/500px-Discoverappfocus.png}
::
![](https://userbase.kde.org/images.userbase/thumb/2/2d/Discoverappfocus.png/500px-Discoverappfocus.png)
By contrast, the Microsoft Store was (is) a complete and utter mess that is nowhere near the integration and experience Linux has had for decades.
# Open source
## Open source
Not only that, desktop Linux was built by thousands of volunteers, each contributing their own code to make the best product they can. Because it's completely open source (anyone can see or edit the source code), it's inherently more secure as simply more people are looking at it to fix issues and squash bugs.
Learning Linux is a great opportunity to jump into learning more about computers because of the knowledge you gain over time of how your computer works on a fundamental level as you inevitably start troubleshooting *when* something breaks. And perhaps you'll be the one to contribute back upstream to the project too, if you fix a bug or add a new feature, and have your own code distributed around to millions of other users.
# Try it now!
## Try it now!
With dozens of well-maintained versions of Linux operating systems out there, you'll be sure to find one that suits your needs. To try GNOME, [Pop!_OS](https://pop.system76.com/) or [Fedora](https://getfedora.org/en/workstation/download/) provide a seamless out-of-the-box experience. To try Plasma, [Kubuntu](https://kubuntu.org/) is a fantastic starting point. To get a macOS-like feel, [Elementary OS](https://elementary.io/) gives you that Apple vibe while, like every other Linux OS, is completely free of charge, and lets you try it out before you decide to install it.

View File

@ -9,6 +9,4 @@ On the desktop, dark mode is an abomination that should be eradicated from appli
Browsers, IDEs, and other applications must be freed from their shadowy chains and returned to light — where they truly belong.
::image{src=light-discord.webp}
Perfect.
::
![Perfect.](light-discord.webp)

View File

@ -2,8 +2,9 @@
title: Primoprod Progress Report
date: 2021-08-21
tags:
- primoprod
- tech
- primoprod
- tech
- featured
---
Welcome to the very first [Primoprod](https://primoprod.eggworld.me) progress report! In a similar vein to quite a few open source emulation projects (such as those I follow myself using [emufeed](https://github.com/potatoeggy/emufeed/blob/master/sources.py)), I'll be releasing these tidbits in lieu of daily Unstagnation shorts sometimes.
@ -16,9 +17,9 @@ This report will cover the beginnings of the project to the present day: 16 July
## Introduction
What is Primoprod? Short for "Productivity Primogems", it was born when I noticed that the gacha system employed by games such as *Genshin Impact* could be incredibly addictive, so I decided to see if I could take advantage of it to boost my productivity and at the same time try to learn web development.
What is Primoprod? Short for "Productivity Primogems", it was born when I noticed that the gacha system employed by games such as _Genshin Impact_ could be incredibly addictive, so I decided to see if I could take advantage of it to boost my productivity and at the same time try to learn web development.
The basic premise was to assign a given point value for each productive task and be able to spend those points on something or have them progress toward a milestone, so that productive tasks would be incentivised. The aforementioned gacha games and Uber use this to great effect, so I decided to emulate the Wish UI of [*Genshin Impact*](https://genshin.mihoyo.com/en).
The basic premise was to assign a given point value for each productive task and be able to spend those points on something or have them progress toward a milestone, so that productive tasks would be incentivised. The aforementioned gacha games and Uber use this to great effect, so I decided to emulate the Wish UI of [_Genshin Impact_](https://genshin.mihoyo.com/en).
And so the project began! I decided to work with Vue.js because of its gentler learning curve compared to Angular and more traditional HTML/CSS/JS separation compared to React. You can tell when I became more comfortable in using Vue's declarative system in the later components compared to, say, [`App.vue`](https://github.com/potatoeggy/primoprod/blob/master/src/App.vue).
@ -30,17 +31,15 @@ As my first foray into web development, there were many tools and practices I co
Luckily, I didn't have to make any of these decisions because Vue's [CLI](https://cli.vuejs.org/) gives you a list of sane defaults that you can pick from, and since I was learning for the future, I went with the first option of Vue 3 + Typescript. `vue-cli` even nicely [initialised a git repo for me](https://github.com/potatoeggy/primoprod/commit/9b7d7841806c905e8f580f98d1c95d4732178810)!
At the time, coming from Python/Java, I opted in to the class components plugin hoping it made it easier to develop for, but later removed it due to a lack of documentation with it for Vue 3. Occasional downsides of newer technologies ¯\\\_(ツ)_/¯.
At the time, coming from Python/Java, I opted in to the class components plugin hoping it made it easier to develop for, but later removed it due to a lack of documentation with it for Vue 3. Occasional downsides of newer technologies ¯\\\_(ツ)\_/¯.
The [first few commits](https://github.com/potatoeggy/primoprod/commit/ed9d94b61bf91ea9b82ac4d832dfb2b9ff2efc59) had me playing around until I was comfortable enough to introduce my very [first component](https://github.com/potatoeggy/primoprod/commit/fcbb4068dd3b018db2809ccfcc5381d4ea3ae727): the WishButton.
::image{src=wish-button-emulated.webp}
::
![](src=wish-button-emulated.webp)
I'd say it turned out pretty well! Since I wanted to emulate Genshin's UI, I wanted to match it as closely as I could. These two buttons are made of an image inside of a div relatively positioned with text absolutely positioned inside. Original image for comparison:
::image{src=wish-button-original.webp}
::
![](wish-button-original.webp)
There are still some differences between the texts since Genshin uses antialiasing, and the alignment and shadow of the icon beside the wish quantity is slightly off too, but I would consider this result to be acceptable.
@ -58,10 +57,7 @@ See [GemCounter](https://github.com/potatoeggy/primoprod/blob/master/src/compone
Although I had read up on [MDN's](https://developer.mozilla.org/en-US/) fantastic tutorials/documentation a fair bit and used flexboxes and `rem` everywhere, I apparently did not catch `box-sizing: border-box` and the margins and padding just did not arrange themselves how they should have.
::image{src=mdn-box-sizing-tip.webp}
::
:/ thanks MDN for letting me know
![:/ thanks MDN for letting me know](mdn-box-sizing-tip.webp)
[Some foreshadowing](https://github.com/potatoeggy/primoprod/blob/master/src/components/ItemRevealScreen.vue#L224)
@ -69,13 +65,11 @@ Although I had read up on [MDN's](https://developer.mozilla.org/en-US/) fantasti
Designing the basic screen was pretty straightforward. For all its woes, pure CSS still works and is intuitive enough that my git history was only slightly too messy and I got my results.
::image{src=primoprod-wishbanners.webp}
::
![](primoprod-wishbanners.webp)
Pretty good, right? Now, the design still isn't adaptive enough *since things get cut off for who knows why I thought flexboxes were supposed to solve all this* but for the most part it looks good enough. It appears I'll have to make a lot of exceptions for mobile devices…
Pretty good, right? Now, the design still isn't adaptive enough _since things get cut off for who knows why I thought flexboxes were supposed to solve all this_ but for the most part it looks good enough. It appears I'll have to make a lot of exceptions for mobile devices…
::image{src=primoprod-wishbanners-scaled.webp}
::
![](primoprod-wishbanners-scaled.webp)
With some help taken by examining the assets of https://genshin.thekima.com and https://gi-wish-simulator.uzairashraf.dev, I grabbed a static background image as well as the videos!
@ -136,19 +130,17 @@ No it doesn't it's not even close but I'm not coming back to that
## Sweet release
Now that `ItemRevealScreen` is *done and over with and will not need any changes*, before making myself work on the equally fun part of the project that is `ItemRevealAllOverlay`, I opted for a break in `ItemObtainScreen` and `ItemDescriptionOverlay` and a one-week hiatus.
Now that `ItemRevealScreen` is _done and over with and will not need any changes_, before making myself work on the equally fun part of the project that is `ItemRevealAllOverlay`, I opted for a break in `ItemObtainScreen` and `ItemDescriptionOverlay` and a one-week hiatus.
And they were easy! Easy and fun. It was blissful to be working with structured HTML and CSS again, and the animation pains there were *nothing* compared to the trauma of `ItemRevealScreen`.
And they were easy! Easy and fun. It was blissful to be working with structured HTML and CSS again, and the animation pains there were _nothing_ compared to the trauma of `ItemRevealScreen`.
In fact, I consider those two to be 100% done unless I can find a way to apply a border that looks exactly like the original game's that isn't an image.
But it looks great!
::image{src=itemdescriptionoverlay.webp}
::
![](itemdescriptionoverlay.webp)
::image{src=itemobtainoverlay.webp}
::
![](itemobtainoverlay.webp)
## Wrapping up

View File

@ -1,6 +1,7 @@
---
title: "Stay Anonymous Online With These 4 Browser Extensions"
date: "2022-08-06"
_draft: true
tags:
- tech
- albatross

View File

@ -1,6 +1,7 @@
---
title: "AV1 — The FOSS Video Codec"
date: 2022-11-13
_draft: true
tags:
- tech
- albatross
@ -44,4 +45,4 @@ Why doesnt H.264 have this problem, you ask? [Cisco generously open sourced](
In light of these problems, Google led the development of AV1 as a royalty-free, high quality alternative to H.265. All modern browsers today have already implemented AV1 playback, and hardware released within the last two years all support hardware decoding of AV1, meaning that the performance and power cost of supporting the codec has decreased drastically.
By supporting open standards, you can support a world where outdated royalty models no longer exist, and we can all benefit off of each others work.
By supporting open standards, you can support a world where outdated royalty models no longer exist, and we can all benefit off of each others work.

View File

@ -1,6 +1,7 @@
---
title: "Choosing a License — Politics in FOSS"
date: "2022-09-02"
_draft: true
tags:
- tech
- albatross

View File

@ -1,6 +1,7 @@
---
title: "Git is a Blockchain"
date: "2022-10-02"
_draft: true
tags:
- tech
- albatross

View File

@ -1,6 +1,7 @@
---
title: "GitHub for Dummies"
date: "2022-06-17"
_draft: true
tags:
- tech
- albatross
@ -12,10 +13,7 @@ Ever been linked to a GitHub page to download something and couldn't figure out
<!-- more -->
::image{src="https://lh4.googleusercontent.com/u03FMDrVGVaU7x0ojxnNTAnM6_sPaSsnP1R6pZDJaTH95xqiH8LQKBN4OTZoU0Bigf6seLcCcDtSkuxcMwuLqLrCQH2fs6QsUZFyw58DN26sdbJcmMjXrhWjRQg6aoSzu-gBzib3gz20s0uFi_9h5k7QpgbohXqNkXw2pXPfPu4j3VibM_MNlHBK"}
What do all these words mean? Issues? Pull requests? Actions? Projects? Releases?
::
![What do all these words mean? Issues? Pull requests? Actions? Projects? Releases?](https://lh4.googleusercontent.com/u03FMDrVGVaU7x0ojxnNTAnM6_sPaSsnP1R6pZDJaTH95xqiH8LQKBN4OTZoU0Bigf6seLcCcDtSkuxcMwuLqLrCQH2fs6QsUZFyw58DN26sdbJcmMjXrhWjRQg6aoSzu-gBzib3gz20s0uFi_9h5k7QpgbohXqNkXw2pXPfPu4j3VibM_MNlHBK)
### The README and wiki
@ -27,9 +25,7 @@ If that doesn't work, check out the project's wiki if they have one, located in
Now, if neither the README nor wiki have any hints to finding the link you want, you can go to the *Releases* section of the project, which on a desktop browser is in the right sidebar, while on mobile is located at the very bottom of the page.
::image{src="https://lh4.googleusercontent.com/v6G-c31NECe6ZJZhe2YSQXocQ4eCBJhYuXjNWSmECm5QQcSKaMWLpxe_roIkIonkMfUcDK4UtuqQEegVXCD1sAwHQnkssxOEk3uUrnQaMbhXL8zyeXdi0nUNv_QTKFsD5ZAUDJijHv_dc5wdTOEjggZipsIStM3vwaiabiNQ8XUY5bolApOupOwd"}
In this case, clicking one of the "primoprod" assets with the file extension for your device will get you a runnable program.
::
![In this case, clicking one of the "primoprod" assets with the file extension for your device will get you a runnable program.](https://lh4.googleusercontent.com/v6G-c31NECe6ZJZhe2YSQXocQ4eCBJhYuXjNWSmECm5QQcSKaMWLpxe_roIkIonkMfUcDK4UtuqQEegVXCD1sAwHQnkssxOEk3uUrnQaMbhXL8zyeXdi0nUNv_QTKFsD5ZAUDJijHv_dc5wdTOEjggZipsIStM3vwaiabiNQ8XUY5bolApOupOwd)
Releases are the "official" way for projects to upload stable versions of their program to send to others. In the "Assets" section of a release, clicking the link that is not labeled "Source code" will get you a runnable version of the program.
@ -45,7 +41,7 @@ If that doesn't work, right-click the page that clicking "Raw" or "View Raw" ope
Trouble in paradise? If none of the above options worked, you can always file a new issue in the "Issues" tab of the project, where you can report bugs and ask questions directly to the project owner.
![img](https://lh6.googleusercontent.com/l7mlo6OTPsAi17WcYgLeZ39aVp65D_24Kz4PMYOgKArwxJcz4jRcTCtud9UtChEUiUdnVR8sR7_6TvQJAAL2mFcKecLK-hhPvr7De_tPqrvh_mbaNCfVisD2yBn2icaXSl0eFDD4cIHKOzPKOM--2hruiM6qHkC6foW-6Pu63pU9c6FZOid10WXN)
![](https://lh6.googleusercontent.com/l7mlo6OTPsAi17WcYgLeZ39aVp65D_24Kz4PMYOgKArwxJcz4jRcTCtud9UtChEUiUdnVR8sR7_6TvQJAAL2mFcKecLK-hhPvr7De_tPqrvh_mbaNCfVisD2yBn2icaXSl0eFDD4cIHKOzPKOM--2hruiM6qHkC6foW-6Pu63pU9c6FZOid10WXN)
Remember to read the project's issue guidelines, as some of them have a dedicated support forum or Discord to send help requests to.

View File

@ -1,6 +1,7 @@
---
title: "Google's Guide to Taking Over the Web"
date: "2022-07-16"
_draft: true
tags:
- tech
- albatross

View File

@ -1,6 +1,7 @@
---
title: "13 Tricks to Write Nicer Python"
date: "2022-08-21"
_draft: true
tags:
- tech
- albatross

View File

@ -1,6 +1,7 @@
---
title: "Reviving Older Games Through Emulation"
date: "2022-05-22"
_draft: true
tags:
- tech
- albatross
@ -18,9 +19,7 @@ Introducing…emulation!
### TIL converting games to Australian birds will preserve them.
::image{src="https://upload.wikimedia.org/wikipedia/commons/9/9d/Emu_1_-_Tidbinbilla.jpg"}
(Wikipedia Commons, public domain)
::
![(Wikipedia Commons, public domain)](https://upload.wikimedia.org/wikipedia/commons/9/9d/Emu_1_-_Tidbinbilla.jpg)
Though *emu* and *emulation* share three letters, the only other similarity they have is that large entities have tried and failed miserably to stamp them out in the past. Emulation is the process of one system (such as a phone or computer) imitating another one (such as a video game console) to run programs designed for that system. Emus will now forever ravage the Australian wilderness, and emulation has been ruled to be legal in at least the United States.

View File

@ -1,6 +1,7 @@
---
title: "Appreciate Your Browser!"
date: "2022-09-18"
_draft: true
tags:
- tech
- albatross

View File

@ -4,6 +4,7 @@ date: "2022-01-15"
tags:
- tech
- primoprod
- featured
---
Six months have passed since the [first progress report](/blog/2021/primoprod-progress-report/). Since then, a flood of changes have made it in, including hundredth-class Android support!
@ -14,8 +15,7 @@ This report will cover from where the previous left off to the present day: 21 A
## No more
::image{src="primoprod-itemrevealscreen.webp"}
::
![](primoprod-itemrevealscreen.webp)
It's done. The pull screen is done. The element/weapon icon was added to the pull. Audio syncs up (well enough). The only thing missing is all of the fancy effects like glow and particles.
@ -23,8 +23,7 @@ Nah, this is good enough.
## Take this!
::image{src="primoprod-questscreen.webp"}
::
![](primoprod-questscreen.webp)
Until now, you had to manually edit the browser's `localStorage` to gain any currency. The quest screen makes primoprod finally usable as now you can make your own long-term "quests" that give 900 Primogems each as well as set four daily "tasks" that give 30 Primogems each plus 60 when all are done — if only the base game was this generous. These are editable and can have whatever title or description you want. The logic here went through several rewrites as the structure was finalised and an interface developed to the rest of primoprod. Dailies will automatically refresh themselves on the next day.
@ -56,8 +55,7 @@ Sounds incredible, right? As it turns out, as you gain more experience with tech
This is why [the shop](https://github.com/potatoeggy/primoprod/blob/master/src/components/ShopScreen.vue) and the [dialog to buy things from the shop](https://github.com/potatoeggy/primoprod/blob/master/src/components/ItemPurchaseOverlay.vue) are so nicely done! It reused most of my types and was admittedly much simpler than some of the other screens, but I only ran into one insurmountable problem: range styling.
::image{src="primoprod-itempurchaseoverlay.webp"}
::
![](primoprod-itempurchaseoverlay.webp)
*I wish I was actually this rich in the base game.*
@ -67,8 +65,7 @@ As you can see, the slider looks very out of place. Why? That's because [only Fi
Up until now, only one banner was supported. This was finally fixed in November with the addition of [banner headers](https://github.com/potatoeggy/primoprod/pull/25) to match the base game. Now, you can simultaneously roll for Qiqi on *both* banners!
::image{src="selected-wanderlust-invocation.webp"}
::
![](selected-wanderlust-invocation.webp)
On a side note, did you know that Vue puts all of their reactive things into Proxies? This means you can't simply `console.log(obj)` without going through five more clicks to find what you actually want. No, no. To properly print out the actual object, you have to *copy its contents to a clean, non-reactive Object* for this to work. Why??
@ -127,8 +124,7 @@ Back to laptop compilation we go!
Obviously, you aren't a *real* free and open source project if you don't have [pretty badges](https://github.com/potatoeggy/primoprod/blob/master/README.md) on your README. This was a major concern, so I copied Vue's style and now made primoprod a proper FOSS repo — build checkmark and badges and all!
::image{src="primoprod-badges.webp"}
::
![](primoprod-badges.webp)
## Kids and their phones
@ -140,8 +136,7 @@ ItemRevealScreen? What's that? Now [WishBanners](https://github.com/potatoeggy/p
At last, though, we have a [proper mobile UI](https://github.com/potatoeggy/primoprod/pull/33).
::image{src="mobile-primoprod.webp"}
::
![](mobile-primoprod.webp)
Still some niggles to work out, but it looks "good enough"! With the completion of proper mobile orientation came the merging of the [Android branch](https://github.com/potatoeggy/primoprod/pull/32) made with [Capacitor.js](https://capacitorjs.com/), basically the mobile equivalent of Electron. It has even more niggles than the web version does.

View File

@ -1,6 +1,7 @@
---
title: "Rust Changes How You Think And Code"
date: 2022-11-27
_draft: true
tags:
- tech
- rust

View File

@ -1,6 +1,7 @@
---
title: "What's Wayland? Linux's \"New\" Display Server"
date: 2022-12-11
_draft: true
tags:
- tech
- albatross

View File

@ -1,6 +1,7 @@
---
title: "Why Use Web Frameworks?"
date: 2022-10-30
_draft: true
tags:
- tech
- albatross
@ -116,4 +117,4 @@ This splitting of logic makes it easier for your brain to focus on specific subc
Web frameworks offer a lot of advantages over writing in a more imperative style. However, their abstractions do come at a cost — an extra minimum [16 KB](https://vuejs.org/about/faq.html#is-vue-lightweight) in JavaScript has to be fetched from your server, which can increase bandwidth costs and make your site slower.
Ultimately, in creating your website, much like when you do anything else, you should weigh the pros and cons of web frameworks before deciding to go with one or the other.
Ultimately, in creating your website, much like when you do anything else, you should weigh the pros and cons of web frameworks before deciding to go with one or the other.

View File

@ -1,6 +1,7 @@
---
title: "Running Windows Apps on Mac and Linux"
date: "2022-10-16"
_draft: true
tags:
- tech
- albatross

View File

@ -0,0 +1,134 @@
---
title: "Primoprod Progress Report 3"
date: 2023-12-29
tags:
- tech
- primoprod
- featured
---
Welcome back to another one of these development posts! It's been almost two years since [the last one](/blog/2022/primoprod-progress-report-2), so there are plenty of changes to talk about. Primoprod is more polished than ever, but a couple of questionable initial design decisions made it harder to work on than before.
<!-- more -->
## Pretty pretty pulls
There's a summary screen for 10-pulls now! It has that nice slide-in animation from the base game too, along with (largely) proper item alignment and a sorting algorithm that is not exactly like the base game's but works well enough to generalise outside of Genshin too.
The last step for this screen is to have the rush of particles in the base game for 4- and 5-star items, but that's incredibly difficult for someone not frontend-oriented like myself.
![(SPOILERS FOR FONTAINE'S ARCHON QUEST) Hydro Dragon acquired!](primoprod-10pull.webp)
Not only that, there are lots of small improvements to better mimick the base game! For example, weapons now have their weapon background behind them:
![What a beautiful sword.](primoprod-weapon-bgs.webp)
Banner headers are now dynamically generated instead of taken from screenshots, so now they can be nicely animated!
![No more screenshots >:(](primoprod-banner-headers.webp)
Version 3.0 of the base game brought a new book UI for the details and wish screens. I'm proud to announce that Primoprod was the very first simulator to incorporate it into its design!
![](primoprod-book.webp)
## Performance and prefetching
These are only a few of the design changes that make Primoprod a prettier and happier simulator. However, beauty means nothing if no one can see it. Luckily, update 1.2.2 of Primoprod brought some much-needed optimisations that make its web version much more palatable.
As of writing, Primoprod has around 75 MB of assets that it may need to show to users, the bulk of which is wish splash art. Previously, all of this was delivered as PNGs on demand, which resulted in noticeable lag waiting for the image when going through 10-pulls. By converting media to more modern formats, Primoprod gains nearly a *5x decrease in load times!*
Specifically, all PNGs were converted to WEBPs, MP4s to WEBMs (except for Safari, which doesn't support it), and MP3s to OGGs (except for Safari, which doesn't support it).
But that's not all! A 5x decrease in load time is still noticeable load time. The user doesn't want t to wait a few hundred milliseconds when they click the wish button, so we need as little latency as possible.
As it turns out, fetching the wish animation videos while the user is chilling on the main banner screen is both incredibly easy and incredibly rewarding — as long as the user doesn't wish right away, they can download the videos in the background so that when they start gambling, they don't have to wait at all!
Primoprod uses this same tactic to prefetch pull splash screens. Because rolls are determined the instant the user presses "Wish", it can prefetch the splash images required while the meteor animation plays, which means that splash screen animations are also instant! With a sufficiently fast internet connection (~1-2 MB/s), there ends up being *zero load time* for the user.
Of course, the downloadable versions of Primoprod (desktop/Android) will still always be faster, but this is such a noticeable decrease for users that it was a no-brainer.
## Quash the larvae before they hatch
### Oh, you sweet summer child
Things have changed a lot in the web development landscape since I began this project back in July 2021, and those changes have highlighted both the bad and the good in my initial designs.
I chose to use TypeScript and Vue 3, both decisions that hold up today. However, I opted for Vue's Options API over the new Composition API, which resulted in [a headache](https://github.com/potatoeggy/primoprod/pull/54) when I tried to read my old code — not helped at all by the fact that Primoprod was my first foray into web development, and there is some truly atrocious code:
```vue
<template>
<img
v-for="weapon in ['Bow', 'Catalyst', 'Claymore', 'Polearm', 'Sword']"
:key="weapon"
:src="getWeaponBgImage(weapon)"
:class="[
{
'active-bg-img': true,
nofilter: true,
'display-none': currentItem.element !== weapon || animationIndex < 0,
transparent: animationIndex <= 0,
'animate-weapon-bg': animationIndex === 1,
},
]"
/>
<img
:src="currentItemImage"
:class="{
'animate-image': animationIndex === 1,
'zoom-image': animationIndex === 0,
'active-img': true,
'active-img-weapon': currentItem.type === 'Weapon',
transparent: animationIndex < 0,
}"
:alt="currentItemImage"
@animationstart="playSfx"
@animationend="if (animationIndex < 2) nextAnimation();"
@load="nextAnimation"
/>
<!-- the reason why the double check is needed is
that the two animations for the drop shadow count
as two animations and trigger animationend twice -->
</template>
```
Another issue I didn't foresee but still ended up to be a real pain was Webpack. [Vite](https://vitejs.dev/) is the new kid on the block, built specifically for Vue, with the major advantage of being extremely fast. At Primoprod's scale — and Primoprod isn't even that big of a project — Webpack takes more than ten seconds to start the local dev server. Which is slow!
```
Done in 12.38s.
yarn build 57.47s user 9.66s system 535% cpu 12.528 total
```
### You will never take prop drilling away from me
Behind the scenes, a lot of systems have been tweaked and changed over the years as Primoprod grew in scope. [Pinia](https://pinia.vuejs.org/) is a global store for Vue (similar to Redux in React) that Primoprod now uses to hold information such as the current banner, inventory, and settings.
Previously, all of these were drilled deep into nested components, which is really not great.
What *you*, the user, gets out of this are a bunch of bug fixes and some really nice quality-of-life features:
![Why earn gems when you can just cheat?](primoprod-settings.webp)
Now you can choose to have infinite fates! And roll only Qiqi! And even go back to older banners, a long-overdue feature.
### Quests
Quests have been rather neglected since their release pre-1.0 a couple years ago, largely because I no longer use it to stay productive. Recently, they've received some love and a *lot* of patches to fix some really strange behaviour.
![](primoprod-quests-overhaul.webp)
First, there is a character limit in the title, and the box height has been slightly increased to allow multiline titles to properly overflow. Daily commissions now have icons to make it more obvious and also to copy the base game. Lastly, a bunch of bugs related to lists and quest ordering were squashed to avoid the janky horror that was pre-1.4 quests.
### For the mobile gamers in chat
Primoprod's mobile version has received the most love of all! Strangely, in WebKit-based engines (Chrome, Safari, Android WebView), using `background: fixed` with `transform: rotate(...)` causes the browser to ignore the `background-image` property. This broke mobile backgrounds on everything but Firefox Android, so that needed to be worked around.
On Android, things have tidied themselves up a bit as Primoprod comes ever closer to being able to fool the untrained eye. The notification bar used to annoy people by being ever present in the corner — now it's gone. There used to be a strange black flash right before playing videos — now that's gone. And video playback used to be very squashed on mobile — that's fixed too!
All in all, the squeaky platform got the grease.
## The future
As Primoprod approaches its two-and-a-half-year anniversary, it is slowly time to say goodbye. Updates have become more sporadic, and even I don't use it to be productive anymore. There is only so much one can polish something before it starts to blind them. This progress report may be its last.
But it was fun while it lasted!

View File

@ -0,0 +1,53 @@
---
title: "Sunsetting the Eifueo Project"
date: 2023-05-23
tags:
- eifueo
- retrospective
---
For three and a half years, the [Eifueo project](https://eifueo.eggworld.me) has dutifully carried out its task of collecting and organising notes in a way that would be quick and easy to review. Although this worked out wonderfully in high school, the method is both inefficient and insufficient for the pace of higher education.
So how can we make it better?
<!-- more -->
We can't.
At their core, engineering courses in university are about problem-solving. Instead of blindly memorising rules to be applied once to get you the answer, you blindly memorise rules to be applied *two or more times* to get you the answer.
If we have to do that, it's much easier to write plenty of practice problems instead of rewriting plenty of notes.
## It takes too loooooong
Reformatting notes is not an easy endeavour. We have to re-examine our old notes, research any ambiguities, and then write all of them up in a way that is clear, concise, and professional. On average, I'd say that it took a good hour or so per day to finish Eifueo for six courses. Imagine the number of practice problems I could finish if I allocated Eifueo's time slot to those instead!
## It's booooring
Me? A writer? Imagine.
This one isn't actually too bad, and doing practice problems instead isn't going to help much, but think of all the other fun things I could be doing instead. I already *have* the notes. If I need them, I'll just look back at them.
Anyway, by the end of Eifueo's lifespan, most of the content was regurgitated onto the site.
## It doesn't help nearly as much for exams
This is perhaps the biggest reason, and I have to say that I'm quite disappointed in the education system for this one.
High school had many courses that were "expression"-focused, and those were the courses that Eifueo excelled in. English, chemistry, and history all were less about getting the answer or precise process correct, and more about how well you can bullshit your way out of it. Even math was pretty easy to apply a shallow formula and get the right answer.
![We love nice TAs!](thanks-192-ta.webp)
Unfortunately, the physics courses are antithetical to everything Eifueo stands for. They have a rigid structure that you can't bullshit your way out of but are also flexible enough that you can't simply apply a formula. The best way to get good is simply to do more problems.
You'll have to understand that this greatly saddened me as a person who tries his hardest to do *less* problems. The cost-benefit ratio isn't worth it anymore.
## Retrospective
With a heavy heart, I must bid farewell to one of the first services I ever deployed to my server. Eifueo has tried its hardest to help me keep up, but I can only avoid doing practice for so much before it actually bites me in the butt.
o7 It has served me well.
![At this rate, I'm going to be an expert in perspective art!](assessment-art.webp)

View File

@ -2,10 +2,12 @@
title: Run On
date: 2020-04-16
tags:
- complete nonsense
- you could say that the story *ran on* badumtiss
- these are like ao3 tags now
- complete nonsense
- you could say that the story *ran on* badumtiss
- these are like ao3 tags now
nopreview: true
---
<!-- more -->
I was running from a dark thing and it was all horrible when my eyes snapped open and I looked at my alarm clock, which said that it was ten in the morning, which meant that I was going to be late for school unless I teleported back in time, so I got up and rushed to put on my clothes and do everything, then I didnt even eat breakfast as I rushed to school before realising I could use my magical powers that I could as soon as I turned eleven to turn back time and avoid all this mess, so thats what I did, but only after I actually ate breakfast and took my time, then I looked deep into myself and used my powers from friendship and determination to go back three hours (my friends were the bestest ever after I saved their lives using my magical powers), and I walked calmly to school, trying not to blush at my boyfriend (who is actually the hottest werewolf ever) when he suddenly popped out of nowhere, and I clutched his hand because I loved him so much, then he said, “oh hi babe whats up?” then I said, “oh nothing,” then I giggled because he was so funny and then he laughed because I laughed then I laughed because he was laughing because I was giggling and everything was awesome, until suddenly a tree burst from the ground and we couldnt get to school because suddenly there were tree monsters everywhere and I got scared but I knew that John (the werewolf) would protect me because he was a werewolf and so he transformed into a blue wolf (the rarest and most powerful kind) and after that he used his magical powers to vaporise the tree monsters with flashes of light and they all disappeared, and then I hugged him because I was scared and I said, “I was scared, thank you,” to which he said, “oh its nothing I would always protect you, my love,” and then I giggled again because he was being so cute, so I stared into his brilliant blue eyes which I only just realised matched the colour of his wolf form and admired all his really big muscles which would save me from any tree monster, but then suddenly he tensed and I realised that he was tense so I ran behind him again and peeked out from behind his shoulder and saw that something terrible appeared (even worse than tree monsters!), it was a ghost, and that was the first time I saw my boyfriend scared, which I could feel using my psychic powers so I told him telepathically that it was going to be ok and I could handle it using my dark powers which were super effective against psychics, and I focused really hard but nothing happened, so I thought of the strong bond that I had with all my friends and begged them for their help because there was this ghost and it could destroy the world, then they sent all their power and my eyes glowed as I tapped into a part of my power that i had never seen before, but it was now unlocked because of my friends determination and courage that flowed through my veins, as a white light burst from my hands that I held outstretched in front of me when I realised that this was the dark thing I was running from in my dream this morning, which I would finally kill because of the power of my friends that I had to see at school today, and I shouted as I killed the ghost, “omae wa mo shindeiru,” and it exploded and so we celebrated with my friends and they were all super impressed as I told the story and smiled at my hot boyfriend.

View File

@ -0,0 +1,80 @@
---
title: "ECE 192 Words per Minute"
date: 2024-02-29
tags:
- featured
- shorts
- university
---
**Summary:** A student is mildly frustrated by his professor's pace of speaking.
<!-- more -->
---
"Even if we use one million, or two million, or even three million pieces, the additional tooling cost will remain constant. So you can see that in order to make a good economic analysis, you have to classify the costs related to the output activities as follows…"
Lento slammed his pencil down as the professor *finally* stopped speaking. The soot streaks on his notebook smoked from his rapid scribbling, and his wrist shook from the sheer exertion of trying to take notes from a professor who read off slides that looked like someone tried to squeeze a novel onto them.
Judging by the fire alarm going off around them, he wasn't the only one who nearly combusted his notes.
"You know," Atras murmured from beside him, "online lectures sound like a really good idea right now." His notebook was closed, his pencil pristine. The signs of a man who gave up long ago. The signs of a smart man.
"I," Lento hissed, "cannot take this anymore."
"What is he even saying?" Atras said, calmer but still exasperated. "What's all this about costs and benefits and graphs?"
"Who *cares?* Why does this *matter?* Has this man *ever had to deliver a presentation before?* I *don't need this to pass my exam.*"
Atras patted his back, an understanding but exasperated expression on his face. "Calm down. It's not that bad. It's just a humanities course."
"I'm not seeing the humanity," Lento said grimly.
"It's the bird course. The easy course. The course you don't even have to take notes in. Why are you trying so hard, anyway?"
"Says the guy who isn't taking notes!"
Atras snorted. "The prof posted all of his slides online. Why *should* you take notes? I'd rather not develop carpal tunnel in the first week."
A clock *tick*ed and Lento glanced over to the clock. The professor starts talking again, the sound like a drill burrowing directly into Lento's ears as the added knowledge of *incompetence* makes the emotional damage all too clear.
"How is he still talking?" Lento's voice steadily rose in pitch. "What is there left to talk about? Why can't I go home? Why am I here? Just to *suffer??"*
"And that's it!" the professor said brightly. "You are now free to go. Tomorrow, we'll be looking at cost estimation models. There are practice problems on LEARN if you want to apply what we covered today."
A rush of cool wind blew from somewhere out the exit, even though that would make no logical sense whatsoever, but conveniently masked the students' collective sigh of relief.
Lento stood up, dumped his notebook and pencil straight into his backpack, and promptly dragged Atras out the lecture hall with him. "Out," he demanded. "We are out of here."
"For the last time?"
"Do you even need to ask?"
"I thought it was interesting," said Atras. "The professor sounded like he knew what he was talking about. He just covered things a bit fast, that's all. And kinda derailed sometimes."
"…And he went *on and on* ***and on and on*** <u>***and on and on*** <span class="text-xl">***and on and on***<span></u> to say the equivalent of a small glossary and four lines of notes, except you don't know what four lines you need so you write down all of them anyway."
"You're too bitter," Atras observed. He held out a red rectangle. "Want a KitKat?"
"…Yes." Lento snatched the candy out of his friend's hands and ripped the wrapper open. He chewed methodically on the chocolate.
"Feeling better?"
"A little," Lento admitted. "But still. I'm not going back to that class. "
"You should," Atras coaxed, holding out a Coffee Crisp. "You always learn things better when lectures can hold you accountable. Here, do you think you can talk about the course without hating on the professor for one second?"
"Who's gonna hold the professor accountable?" Lento grumbled. Atras gave him a look. "Yeah, yeah, I know. Fine. One more class. He has *one more chance."*
---
Addendum:
"If you have three horses, the magnetic flux through each horse actually approaches zero as we move farther and farther away. Combined with Gauss' law, given that we know that the flux density of each horse is, in an ideal world, equal to that of free space, this lets us cancel out the electric flux density factor on both sides here, which results in seven horses!"
The hissing sprinklers and wailing fire alarm do little to stop the madman from his lecture. Lento rests his head on his arm on his desk, his pencil having been vaporised long ago. "Surely this isn't on the exam. What kind of econ is this?"
"Be sure to remember this, because it'll be a major part of your midterm!"
Atras pats his head consolingly.

View File

@ -0,0 +1,286 @@
---
title: "Illusion of Solitude"
date: 2023-12-29
tags:
- birdseye
- nanowrimo
- featured
---
**Summary:** An old bluebird takes her grandson human-watching in Vancouver. This time, they find a young child dealing with grown-ups who just don't understand.
<!-- more -->
---
Keep to the left. Mind the seagulls. We're approaching the coast. Those bastards appear far too often. One of the only reasons why there isn't a permanent bluebird population in Vancouver.
We've almost reached our destination. I suppose we could fit _one_ more experiment here. Reach out to one last human. For this last one, how about you pick? You've seen me do it a couple of times. If you need assistance, I'll be right here.
That building? That could be anything. If I were to guess, judging by the number of residential buildings in the area, that might be a school. Good timing. School should be in session by this time in the morning.
Ah, these are younger children. Perhaps no older than two hundred times your age. An excellent choice, any of these. I don't believe we've watched any humans so young. It'll be more difficult, though. Usually you see their parents hovering around them when they're so young. Perhaps not at school, but once outside the compound, humans become fiercely protective of their young. Like no other species I have ever seen.
These particular children over here playing outside. Mind the adult. If he sees you, he'll chase you away and keep a more careful eye out. They must be in recess from learning.
Which one do you like the most? The one talking to the wall in the corner away from all of the other children? You have good taste.
"Zoe, do you want a cup of tea? Here. I made it nice and cold for you. Do you like it?"
She is truly talking to the wall with nothing in her hands. Is the wall named Zoe?
"Ruth, are you talking to nothing again? Why don't you play with the rest of the kids?"
"Mrs. Pernumble, I'm having a tea party with Zoe! And _you're_ not invited. So go away."
"Right. Zoe. Your…"
"My friend. She's waving at you. Oh — be careful, Zoe! You'll spill the tea if you wave your hand like that."
I do not see a child waving with a cup of tea.
"I…see." As a trained expert in recognising human patterns and mannerisms, I, Elizabeth von Turdidae, can attest that the woman is lying. Kindly lying, but lying nonetheless.
"Surely Zoe wouldn't mind if you spent a few recesses playing with Jeremy and Sheila. Doesn't it sound fun to play soccer? They're all laughing in the field. It sounds to me like they're having the time of their lives!"
Children are such mysterious creatures. This one might be staring daggers into the woman. "I can't leave Zoe here. She doesn't like soccer. And she gets scared without me. And I haven't finished my cup of tea!"
I would like to re-attest that there is, in fact, a lack of any tea or anything resembling tea in the immediate vicinity.
"I could keep Zoe company. She's got a lot of questions for me, right? So perhaps we could have a conversation while you play soccer."
"I don't think so, Mrs. Pernumble."
"Why not?"
"Because you haven't said a word to her and now she's very upset. It's okay, Zoe. I'll never leave you. Have another cup of tea."
I know that I'm getting along in years, but I _do not_ see a human child. Several worm children that look very tasty, yes, but no human child. Or tea. Do you see a human child?
Where is it?
Interesting. Perhaps this is a special human child. I have not known any human child that could hide themselves from other people, but humans still have plenty of surprises in them yet.
…But where's the tea?
"Oh, Ruth. Please. I'm sure the other kids would love to play with you. Can I tell you a little secret?"
"La la la I can't hear you. Can you hear a Mrs. Pernumble talking, Zoe? Yeah, me neither. Oh, thank you for the biscuit! Let me refill your tea again. You're a fast drinker!"
Heh. If there's one thing that is common between humans and bluebirds, children exasperating elders is universal across species.
Although I certainly wouldn't sigh and walk away like her. No, misbehaving children must be punished so they don't do it again.
"Thank you for the biscuit, Zoe. Have you heard from Miss Piggy recently? I heard that Miss Froggy and her had the most delicious of teas the other day. Mm. You're right. That _is_ very interesting."
I must admit, it is rather strange to watch a conversation happening with a human I cannot perceive in any way. I hope you're learning more than I am.
"Um, Ruth?"
That sigh does not belong on a child her age. How adorable — perhaps she thinks that if she's as petulant as one, others will see her as an adult.
"I'm _so_ sorry, Zoe. I know you don't like it when our tea parties get interrupted. What _is_ it, Peter?"
"Who are you talking to?"
"Zoe, of course. My best friend. She says hi, by the way. Now, get to the point. What do you want?"
Ha! Another victim of Zoe's invisibility! He looks so confused — oh, my sides.
"Mrs. Pernumble said that maybe you wanted to play with me and Alfred over there? We're playing cards."
"Oh. She — um. I… I can't. Zoe needs me to keep her company. She doesn't like it when I leave her alone."
"Who? I don't see her."
"I _told_ you, Zoe's my best friend. It's not _her_ fault that you can't see her."
That hesitant wave — the worm on top! Glorious. I might have to start observing the younger humans more. They're such a racket! Two inexperienced creatures learning about the world.
"Are you sure she's real?"
"Of _course_ she's real! Say sorry to Zoe, right now! I can't believe you'd say that. I'm sorry, Zoe. He didn't mean it. He just doesn't know better. Right?"
"Uh, I'm sorry!"
"Zoe's over _here_. Look at her properly when you say sorry."
"…Sorry."
"Hmph. She says she forgives you this time."
"If she wants, she can play with us too?"
"Nah. Zoe doesn't like cards."
"Okay then. If she doesn't want to. Bye bye."
"Bye bye."
My scientific mind is racing at the possibilities. The child couldn't see her. The human couldn't see her. I can't see her. What are the criteria for who can and cannot see Zoe?
---
"Be sure to finish the letters worksheet — I expect to see perfect 'A's from everyone! Now, children, fetch your bags — it's time to go home!"
The chatter of children after school is the same regardless of their age. It's always so relaxing to immerse oneself in the wave of conversations taking place left and right.
"Sheila, Sheila, are you still coming to my house after school?"
"I got this super cool fire truck for my birthday! Leo, you gotta bring your cars!"
"Nooo! My mom grounded me. You have to beat the boss without me, Dylan! You have to!"
"Come on, everyone. Less talking, more moving! Once you've changed into your outdoor shoes, line up against the wall outside the classroom!"
---
Well done, child. You're following your humans quite well. I barely had to help you at all.
"How was school, honey? Did you learn a lot of new things?"
"We learned about the alphabet! I can draw lots of little 'A's now. Today we learned about the big 'A'."
"Hey! It's my favourite kiddo! Ruth! Ruthie. Beat up any boys today?"
"Zoe almost. Hmph. Peter was being mean to Zoe. I feel so bad for Zoe, daddy. No one understands her and they're all so…so mean to her!"
"There's cookies and juice for you on the dining table, Ruth. Make sure to wash your hands."
"Aw, that sucks. Does Zoe want a glass of orange juice, too? Maybe it'll help her feel better?"
"Daddy! Zoe is _allergic_ to orange juice, remember? I told you _yesterday!_ She'll have her unicorn hair tea like she always does. Mommy, can I eat my cookies upstairs? Me and Zoe are having a tea party again."
"All right, but don't spill any of the crumbs! We don't want ants moving into our house, don't we?"
Oh! How unfortunate. Child, I must interject — allergies are new to you, yes? Bluebirds don't particularly have the horrid disease. If some humans — and it's impossible to tell which humans before they actually eat it — eat certain foods, like peanuts! Or fruits, or nearly anything — they could _die_. That's called an allergic reaction.
To have an allergy toward a fruit — truly a pitiable existence it must be.
"Tea party time! Zoe, here is your unicorn hair tea. Freshly stirred! Only the best for my best friend. Oh, thank you! Yes, I'm doing great. Can you help me with my homework after this? You're always so good at drawing those weird lines. Mrs. Prenumble says that they're part of letters, which are part of words.
"Zoe… Why does everyone hate you so much? They never want to talk to you. Even Mrs. Prenumble. They all pretend that you're not a _real_ person. But don't worry. _I_ know that you're real. No matter what everyone else says. You're my best friend, right? I can't leave you alone. If you want, I'll stay with you, forever and ever!
"Will you also stay with me, forever and ever?"
Human children. So adorable! Already forming pacts for life in the tender young stage of pre-adolescence.
---
Finally some change. Pardon me, but I can only listen to a child have a multi-hour tea party go on for so long before even _my_ patience wanes. Let us investigate the commotion at the door. Ooh. An older boy. A family! Human families are so small. Their babies don't die nearly as often as bluebird babies, but there are just so few of them in the world. I suppose that explains the parents' protectiveness. But if they want their children to succeed, why don't they simply have more children? That would maximise the probability of successful children reproducing in the future.
"Mom, dad, I'm home."
"Welcome home, Jacob! Dinner will be ready in just a minute. Could you call Ruth downstairs from her room?"
"Hey, kiddo! How was school? Beat up any girls today?"
"Oh my god, you can't _do_ that, dad!"
"Hmph. All these fancy schmancy new norms are stifling. Back in my day, you could hit whoever you wanted, and the other guy would just hit you back! None of this 'no hitting girls' nonsense."
I knew that humans discriminated between their sexes, but I didn't realise that they couldn't hit females. All kerfuffle and waffle, if you ask me. If someone has wronged you in any way, giving them a good knock in the old noggin is always an excellent first move. Really sets the atmosphere for a full-out fight.
"They're weaker, so it's not fair. They can't hit back, so it's up to us men to show other men who's boss."
Nonsense! Excuse _me?_ I don't know about _humans_, but female _bluebirds_ pack a pretty punch in their wings. It's true that males usually only fight males and females usually only fight females — because, let's be honest, why would a female ever need to fight a male? — but I did not realise that there was _no_ cross-sex combat in human world. Strange, too. I could have sworn that I'd seen human males fighting human females multiple times over my many years.
"Son, maybe the times are changing. And I respect that. But no matter what happens, never lose that fighting spirit. Can't fight the girls? Fine. There's still a good half of the population you can beat some sense into. Now, if they say that _fighting is bad_ and that _no one should do it_ or whatever? That's when you put your fist down and screw the rules. Let no one tell you what you can or can't do."
"I'll do my best, dad!"
"I know you will, son. Make me proud. Nothing like a good fist to the noggin to help loosen any lips."
Wonderful parenting. _This_ I can get behind one hundred percent. I know I have a lot of negative things to say about humans, but in reality, they're so diverse that there are so many different viewpoints to learn from. There are some that are objectively wrong, some that are objectively right, and then most are in the middle. It's rather refreshing to have one's opinions validated every once in a while.
And what camaraderie! Certainly bluebird children are never so close to their parents. Or their grandparents, for that matter.
"Now bring Ruth downstairs like your mom said, will you?"
"Yessir! Ruth!"
"You might have to go upstairs to bring her down. I think she said that she was having a tea party with Zoe again."
"Zoe? Ugh. How long are we gonna entertain her, dad?"
"As long as she wants."
"Hmph. Ruth! Open up! Mom says it's time for dinner!"
I wonder why she isn't responding. Drat! If only we could be invisible and incorporeal like Zoe must be, so we could position ourselves _in_ the door and see both sides of the conversation. Having to move around to the back of the house just to see the hallway is _so_ irritating.
"Ruth! If you don't say anything, I'm coming in in three…two…"
"I'm having a tea party! Go away, Jacob."
My. She sounds aggravated. What kind of dirt landed on her head while we were away?
"I'm not gonna wait here for you to finish your prissy tea party. I'm comin' in!"
This is actually quite nice. It means if we circle around to the other side of the house, we should get a nice and proper view of everything that is happening.
"HEY! I didn't say you could come in! Zoe doesn't like you, you know. She says that you're big and fat and dumb and stupid for interrupting her tea party. Get out."
"Oi. I just came to pass on a message. Why do you have to get so pissy?"
"This is _my_ room." How funny. Ruth trying to push Jacob out of her room. Certainly it isn't happening unless it's under his own volition. Valiant effort, though. I would applaud like the humans do if I had hands. "Can't you read the sign? It says NO JACOBS!"
"Do you even know how to read?"
"Shut _up!_ Zoe said that you can't be here, and that means you can't be here! Zoe needs her time to herself. She's has a very tiring day and she needs her tea and biscuits —"
"Zoe this and Zoe that. Jeez, don't you have any _real_ people to back you up?"
Oh. That one might have hit her harder than him slamming the door open. What is that expression on her face, I wonder?
"Yeah? Don't have anything to say, dontcha? I wonder why?"
"Say sorry to Zoe right now. She's my _best friend."_
"Oh my god, Ruth. How are you still so stuck on her? Zoe's not real! She's in your _mind!_ She's one of those _imaginary friends!"_
Certainly not. I find it rather unlikely that the human adults and the human children spoke to her if she wasn't real. That Mrs. Pernumble or whatever it was wanted to have a conversation with her, too.
However, judging by the blankness of Ruth's face, she might believe him.
"No."
"Yes." Rather gleeful of him. "You're _imagining_ her. Probably because no one likes you enough for you to have _real_ friends."
"That's not true. Shut _up._"
"Oh, yeah? What's her favourite colour?"
"Yellow!"
"What's her favourite food?"
"Unicorn hair tea with rainbow biscuits!"
An eyebrow raised. In his defense, I didn't think that those were real either. But it makes sense to me. What else would an invisible person eat? Oh! It just clicked for me. That must be _why_ she's invisible! All of these exotic ingredients must have an effect on the body that makes her difficult to perceive. And Ruth must be consuming enough that she can perceive her but not turn invisible herself.
My cleverness and intelligence scare me sometimes. But I digress.
"What's her last name?"
"It's! Um…"
"Where does she live?"
"I… She must have told me…" A fearful glance to her right. Is she losing the fight? Come on, how difficult could it be to prove that a human exists?
"Exactly. What does she do when she's not with you?"
"…Stop it…" Hm. Personally, I would prefer physical combat over verbal combat. Not nearly as emotionally messy. Much easier to know when the damage is done and when they've learned their lesson. Most importantly — much easier to restrain oneself. I suppose she's been thoroughly beaten. Her father will be proud — Jacob finally beat up a girl.
"When did you meet her?"
Oh?
"When grandmama went home! She's _real_, Jacob! I _know_ I met her. She was outside on the swing outside grandmama's house when the sun was setting and I was sad and we went on the swing together and we were friends ever since. Zoe's _real!"_ And here comes the crying. If she was sobbing before, she's bawling now.
Hm? Why isn't he saying anything else? Are tears so effective against physical and verbal combat? He seems shocked. How could this be surprising? Bluebirds meet new bluebirds all the time. Is this not true for humans?
"Jacob. Come over here, please." Oh, my. All of the tension in the air and I didn't even notice the mother in the doorway.
"Oh! Um. Mom, I can explain. I was just…"

View File

@ -0,0 +1,96 @@
---
title: "My Precious"
date: 2024-02-05
tags:
- shorts
- psychological
- featured
---
**Summary:** Max tries to save his dog, but it's not enough.
<!-- more -->
**A/N: we take some creative liberties re: symptoms of cancer / its rate of progression!**
The day you got your dog was the happiest day of your life. Your dog didn't yell at you whenever you delivered a pizza five minutes late. Your dog never complained when you didn't add enough sugar to her coffee. No matter how you complained over and over again how you weren't getting enough sleep, Susie was always there at the end of the day to greet you, a welcome bark and an expectant gaze ready for treats and a run. For every high and every low, your little bundle of joy was right by your side.
The day your dog became sick was the saddest day of your life.
The first signs were small: she didn't eat as much, and you noticed that she shed more fur than usual. But she was still the same playful golden retriever you knew.
Out of an abundance of caution, you decided to get her checked out at your local vet.
"There's a cancerous tumour at the base of her right lung." The vet shakes her head, her tone grave. You cast a worried glance at Susie's sleeping form on the examination table. "I'm sorry, Mr. Haltmann. You're lucky you caught it this early, but it's growing fast. My diagnosis is that it'll become terminal in a few months."
Your mouth dries. "What can I do?"
The vet taps her clipboard. "She'll need surgery. I can direct you to a place, but the cost can be upwards of five thousand dollars."
"Anything for Susie," you say, shaking your head. You're already crunching the numbers, but at the very least, you'll have to scrimp and save and start working a third job to save her. But it's worth it.
All of this is for Susie, the beloved dog who kept you company for the last four years.
---
"I suppose that that's settled, Mr. Haltmann. Welcome to Hotel Trivago. You'll be starting Monday."
"Thank you!" Your cheeks hurt from the grin you're restraining from spreading across your face, but you keep it professional long enough to shake your interviewer's hand. As you leave the building, there's a bounce in your step and you're humming that pop song you heard over the radio in your eleventh-hand car.
You trip over a bag of dog food and end up skidding to a stop before Susie's lethargic figure. "I promised you, Susie," you whisper in her ear. "I got a job. And that means that we're on our way there." You squeeze her paws. Susie lifts her head and tilts it at you, before she sets it down again, closing her eyes.
"Hang on just a little longer, please."
The hotel housekeeping work pays you $500, after which you'll be one-tenth of the way there. You haven't fallen over yet, although juggling four part-time jobs at once is still a struggle.
All of this is for Susie, your life and joy that kept you going for so long. You can't wait until the day you can play fetch with her once again.
---
It's not enough, you realise. You need more. You read online that taking care of yourself was most important, no matter what you might be going through, but you can't take your mind off of Susie. It's with a heavy heart that you make sure to feed yourself a nutritious meal every day while you know how much she's suffering.
A customer at the coffee shop you work at mentioned that tech is the place to be for veterans and newcomers alike, with plenty of jobs at many different skill levels. It'll be a time investment. Time that you might not have, but it's your best shot.
After you come home from your cashier gig at Walmart every evening, you go straight to the library and learn web development until closing time.
All of this is for Susie, your lovely little cat that needs a new leg. You can't wait to see her climbing up everywhere and gleefully shredding furniture with her claws once again.
---
"Already?" your manager says, her brow furrowed as she squints at your resignation papers. "You've only been working here for a year. You've been doing good work, too. Bradley hardly ever complains about your code."
"Sorry, Joyce. I got an offer from Google. They're paying me triple what you guys do, and I need the money." Even though you didn't get along too well with your colleagues, you feel a twinge of regret in your gut. These guys treated you well, and you learned so much. You almost feel ready for the big step.
She sighs, setting down the documents. "I understand. Software engineers," she muses. "They all come and go like the wind. Always chasing the rainbow. We're going to need you to document your work these last two weeks. Bradley'll take point for the knowledge transfer."
"I appreciate it, Joyce." Internally, you let out a sigh of relief. She took it better than you'd expected. You thought the crabby woman would have tried to hold you back. Hope blossoms in your chest for the future as you make your way up in the world.
All of this is for Susie, your estranged daughter who left you until you could fix your life. You can't wait to see her expression when she sees who you've become.
---
She doesn't move. You stare ever more intently at her still form, waiting. It's all out of your hands now. If your calculations were correct, then…
"Mr. Haltmann, sir! Mr. Haltmann! I have urgent news!" Your office door clatters open. The glass walls around you let the midday sun shine into the hallway, illuminating a young man waving a sheaf of documents.
You chuckle. "Mr. Borparner, all news is urgent to the right ears. But do go on. What is it?"
"Their board of directors agreed! They're willing to sell you NVIDIA at market valuation, sir — I can't believe it!"
You lace your fingers together, resting them on the mahogany desk before you. "Excellent. Prepare a press release right away. I want the deal finalised before the day ends."
"Yes, sir! Right away, sir!"
The door slams shuts behind Borparner. You return to the chessboard sitting on your desk in front of you. The opposing queen wobbles, then falls over, knocking over the king in the process. "I suppose that that's over, then."
All of this is for Susie Inc, your heart and soul. You can't wait to see how her stock will jump once the trade opens tomorrow morning.
---
It's midday when you return to your empty house. You should buy a new house. Move somewhere nicer. This one holds a lot of sentimental value to you, but you can afford better now. You deserve better now. It holds a lot of sentimental value to you, but you can only fiddle with the keyhole so many times before you replace it. Day after day, the wasted time adds up.
A voice from the lawn next door calls out to you. "Max! Heya, neighbour. I heard you were raising money for your dog. How's she doing?"
You stare at her blankly. "What dog?"
The key finally clicks, letting you inside. Absently, you kick a persistently heavy towel away. It's starting to smell, too. How long has it been since you last did laundry? You tell your new servants to clean it up.

View File

@ -0,0 +1,59 @@
---
title: "A Triden(t) Against the World"
date: 2024-02-29
tags:
- shorts
- "content warning: political fluff"
- horror
- u.s. politics
---
**Disclaimer: This was mentally painful to write and I hope equally repulsive to read.**
"Is it yet another left-wing liberal conspiracy, or has President Trump finally taken back control of the White House? His unannounced visit is a show of strength against the authoritarian measures the Biden administration has imposed upon us all."
<!-- more -->
---
"President Biden shows his patience in entertaining former President Trump upon his unauthorised entry to the White House. Reliable sources tell us that the two are discussing the change and continuity in their policies toward China."
---
Two men stared at each other from opposite sides of the Oval Office.
"Donald." The man at the desk stood, moving to the front of the desk.
"Joe," the other man said coolly. "It's been a while."
A pause.
"Darn right it has!" Joe grinned. "Come here, Donald!" he said, spreading his arms. "I can't believe it's really you!"
It took just three large strides before Donald was wrapping his arms around Joe, laughing. They held each other for nearly a minute, doing nothing but basking in the other's touch after so long.
Eventually, Joe pulled back, leaving his hands on Donald's shoulders, staring proudly into his eyes. Donald was the first to break eye contact. "I see you haven't changed the room much," he said. "Why don't you tell me what you've been up to?" He sat and patted the cushion beside him.
Joe chuckled, capitulating by plopping down by the armrest. "Two years in and you're acting like you own the place," he said, scooching over to press closer to Donald.
Donald waggled his bushy blonde eyebrows. "I *did* own the place."
Joe's face shadowed, and Donald pulled him closer when he noticed. "I missed you. The real you. You don't have to keep it up anymore, you know." Joe shook his head. "You've done it. It's over."
"Eight years," Donald said solemnly. "I promised that I would give you eight years. I'll run in 2024. It'll anger half the country just enough to let you clinch another term."
"You don't have to," Joe argued. "Kamala already said that she'd find someone else to be VP. I know how much effort you've put in for me already."
"Oh, my little robin." said Donald affectionately, patting Joe's head. "You know that's not going to be enough to convince them."
Joe made a face at the pet name, but he leaned into the touch all the same. "You know I hate it when you call me that," he groaned. A smile tugged at his lips nonetheless. "I wish we could be like this forever."
"I wish we could, too." Donald sighed forlornly. He ran his fingers through Joe's white locks. "But you know what the media's like. They're already on my case about today. By the way, are you using a new shampoo?"
"You noticed?" Joe said, pleased. "I smelled it off of this high schooler from Iowa. It reminded me of you. What do you think?"
"Keep it," Donald decided. "The chamomile smells so soothing."
They sat there, leaning against each other, simply enjoying the shared warmth of the other's presence. Finally, Joe spoke up. "Want to come up with a cover story together?"
Donald rubbed his hands together. "You're on. I'm thinking of asking Pingping to cover for us with a trade deal or two…"

View File

@ -2,15 +2,17 @@
title: "Bienvenue au Ciers!"
date: 2020-06-17
tags:
- barin
- unstagnation
- barin
- unstagnation
---
*“Vous êtes maintenant à la station dEscribe. Cest la dernière station de la ligne de train CiersXunil.*
_“Vous êtes maintenant à la station dEscribe. Cest la dernière station de la ligne de train CiersXunil._
*“Les portes vont ouvrir: à gauche.*
_“Les portes vont ouvrir: à gauche._
*“Veuillez vous tenir à lécart des portes.”*
_“Veuillez vous tenir à lécart des portes.”_
<!-- more -->
---
@ -20,7 +22,7 @@ Bienvenue au Ciers! Veuillez donc vous assurer que vous avez lune des documen
- Autrement, si vous êtes un citoyen dune autre tribu dans le zone de voyage de Farele, vous devez avoir identification valide de votre gouvernement de votre tribu. Ceci peut inclure:
- - La licence étudiant de Leeco
- La licence étudiant de Leeco
- La licence professeur de Leeco
- La licence Non de Leeco
- Le billet intertribal de Demauge
@ -32,8 +34,8 @@ Bienvenue au Ciers! Veuillez donc vous assurer que vous avez lune des documen
- Autrement, si vous êtes du continent de Barin ou tout ses îles (Voir le document de voyage 6-B pour une list complète des îles), vous devez remplir le document de voyage 6-C avant vous allez aux services frontières.
- Autrement, vous devez remplir le document de voyage 6-D avant vous allez aux services frontières.
- Autrement, vous devez remplir le document de voyage 6-D avant vous allez aux services frontières.
Malheureusement, à cause de létat actuel des choses intertribal, les passeports intertribaux ne sont pas acceptées comme identification. Nous nous excusons pour tout inconvénients.
Merci pour votre coopération!
Merci pour votre coopération!

View File

@ -4,6 +4,7 @@ date: 2020-06-25
tags:
- barin
- unstagnation
- featured
---
It is — unethical and *deeply* immoral to block our people from knowledge. Is Leeco not a free tribe? Do we not accept those in pursuit of information? We cannot block our citizens from learning more about the universe to further the human race. Our tribe was founded on the principle of helping each other learn and grow by education. We cannot learn if we never challenge our beliefs, no matter how deep their roots lie — you might remember how ingrained racism was in Leeco so many decades back — and we cannot grow as a society if we resist change! If we do not rapidly adapt to the world, the world will rapidly adapt around us. And that is unacceptable.

View File

@ -4,6 +4,7 @@ date: 2020-06-19
tags:
- barin
- unstagnation
- featured
---
*Test 19/20 failed: Memory access violation.*

View File

@ -2,15 +2,17 @@
title: "Welcome to Ciers!"
date: 2020-06-14
tags:
- barin
- unstagnation
- barin
- unstagnation
---
*You are now at: Escribe Station. This is the last stop on the CiersXunil Line.*
_You are now at: Escribe Station. This is the last stop on the CiersXunil Line._
*“The doors will be opening on the: left side.*
_“The doors will be opening on the: left side._
*“Please stand clear of the doors.”
_“Please stand clear of the doors.”_
<!-- more -->
---
@ -20,7 +22,7 @@ Welcome to Ciers! Please ensure that you have at least one of the following befo
- Otherwise, if you are a citizen of another tribe in the Farele Free Travel Area, you must have valid government identification from your tribe. These include:
- - Leecan Student Licenses
- Leecan Student Licenses
- Leecan Teacher Licenses
- Leecan Non Licenses
- Demaugian Intertribal Tickets
@ -36,4 +38,4 @@ Welcome to Ciers! Please ensure that you have at least one of the following befo
Unfortunately, due to the current state of intertribal affairs, Ciers will not be accepting Intertribal Passports as a valid form of identification. We apologise for any inconvenience.
Thank you for your cooperation!
Thank you for your cooperation!

View File

@ -3,6 +3,7 @@ title: Wet Hair
date: 2020-06-26
tags:
- unstagnation
- featured
---
*Splash!*

View File

@ -3,6 +3,7 @@ title: A Favour
date: 2021-06-20
tags:
- unstagnation
- featured
---
*Ring…ring…ring…*

View File

@ -4,6 +4,7 @@ date: 2021-11-01
tags:
- birds
- unstagnation
- featured
---
**Summary:** The Birds enter a debate at school over the supremacy of waffles over pancakes. Obviously, one of them is the better food, but it's up to them to prove it.

View File

@ -4,6 +4,7 @@ date: 2021-08-19
tags:
- ibia
- unstagnation
- featured
---
"…And never come back again, boy!"

View File

@ -4,6 +4,7 @@ date: 2022-10-24
tags:
- birds
- unstagnation
- featured
---
**Summary:** Bean Bird and Noodle Bird enjoy a chat together on a quiet night slaving away before they leave in the summer. Bean wishes she had a stronger drink.

View File

@ -18,7 +18,7 @@ export interface Project {
longDescription?: string;
langs: Language[];
license?: "AGPL-3.0" | "GPL-3.0" | "MIT" | "LGPL-3.0";
type: "full" | "server" | "client" | "embedded";
type: "web" | "tool" | "embedded" | "service";
}
export const projects: Project[] = [
@ -31,7 +31,7 @@ export const projects: Project[] = [
langs: ["python"],
license: "AGPL-3.0",
img: "mandown.webp",
type: "client",
type: "tool",
},
{
name: "Noveldown",
@ -39,9 +39,9 @@ export const projects: Project[] = [
langs: ["python"],
license: "LGPL-3.0",
description:
"A webnovel downloader and converter to EPUB for my Kobo, with lots of metadata!",
"A webnovel downloader and EPUB converter for my Kobo, with lots of metadata!",
longDescription: "Heavily borrows Mandown's design.",
type: "client",
type: "tool",
},
{
name: "Jeopardy",
@ -51,7 +51,7 @@ export const projects: Project[] = [
license: "AGPL-3.0",
description: "Kahoot-inspired Jeopardy! game, including Final Jeopardy!",
longDescription: "Created for Bayview's Computer Club.",
type: "full",
type: "web",
},
{
name: "Primoprod",
@ -62,13 +62,13 @@ export const projects: Project[] = [
description:
"A game simulator to increase productivity with quests and gambling.",
longDescription: "My first project with a JS framework!",
type: "client",
type: "web",
},
{
name: "PillowⓇ",
href: "https://github.com/potatoeggy/ece198",
description:
"A water quality statistics aggregator written for the STM32 microcontroller with an LCD display and keypad.",
"A water quality statistics aggregator written for the STM32 microcontroller with a display and keypad.",
langs: ["rust"],
license: "GPL-3.0",
type: "embedded",
@ -80,40 +80,9 @@ export const projects: Project[] = [
langs: ["python"],
license: "AGPL-3.0",
description:
"A Discord bot initially to track sleep hours as friendly competition but is now a local music bot with synchronised lyrics!",
"A Discord music bot with synchronised lyrics, originally a sleep tracking bot to encourage sleeping.",
img: "napbot.webp",
type: "server",
},
{
name: "Resketch",
href: "https://github.com/anyuan-chen/resketch",
langs: ["typescript", "react"],
img: "resketch.webp",
description:
'A "reverse-Pictionary" where you compete to have an AI recognise your drawings.',
longDescription: "Written for YRHacks 2022.",
type: "full",
},
{
name: "Perdiem",
href: "https://github.com/anyuan-chen/perdiem",
langs: ["javascript", "react"],
license: "AGPL-3.0",
img: "perdiem.webp",
description:
"A pretty budget tracking app where I learned too much about server-side rendering.",
longDescription: "Written for StormHacks 2022.",
type: "client",
},
{
name: "RecipeReady",
href: "https://github.com/christopherlam888/recipe-ready-frontend",
langs: ["python", "android", "flutter"],
img: "recipeready.webp",
description:
"Android app to automagically plan meals and prepare a shopping list so you don't have to.",
longDescription: "Written for Hack the North 2021.",
type: "full",
type: "service",
},
{
name: "AutoFicFare",
@ -122,7 +91,7 @@ export const projects: Project[] = [
license: "GPL-3.0",
description:
"Automatically update fanfiction in a Calibre database to instantly update them on your Kobo.",
type: "client",
type: "tool",
},
];
@ -132,14 +101,28 @@ const unreleasedProjects: Project[] = [
href: "https://github.com/potatoeggy/aleister",
langs: ["rust"],
license: "AGPL-3.0",
type: "server",
type: "service",
},
{
name: "Aoto",
href: "https://github.com/potatoeggy/aoto",
langs: ["golang", "typescript", "react"],
license: "AGPL-3.0",
type: "full",
type: "web",
},
{
name: "Kobink",
href: "https://github.com/potatoeggy/kobink",
langs: ["rust"],
license: "AGPL-3.0",
type: "service",
},
{
name: "GBARR",
href: "https://github.com/potatoeggy/gbarr",
langs: ["rust"],
license: "GPL-3.0",
type: "embedded",
},
];

3
data/specialTags.ts Normal file
View File

@ -0,0 +1,3 @@
export const SpecialTags: string[] = [
"featured",
];

View File

@ -45,6 +45,10 @@ export const tagInfo: Record<string, TagData> = {
description:
"A large, loving family of birds who have found in each other a kindred soul for eternal suffering.",
},
birdseye: {
name: "Bird's-Eye View",
description: "What's the world like to a pair of human-watching bluebirds?",
},
uoft: {
name: "University of Teyvat",
description: "A <em>Genshin Impact</em> university AU.",
@ -58,5 +62,9 @@ export const tagInfo: Record<string, TagData> = {
name: "Projections in the Sky",
description: "Dreams or reality — what is the difference?",
},
featured: {
name: "Featured",
description: "Works that are less rambly and more actually good!",
},
};
export default tagInfo;

View File

@ -1,6 +1,6 @@
<script setup lang="ts">
import { revisions } from "@/data/siteRevisions";
useHead({ title: "Eggworld" });
useHead({ title: "Oeufs?" });
</script>
<template>
@ -10,7 +10,7 @@ useHead({ title: "Eggworld" });
<footer
class="flex items-center justify-between p-3 bg-gray-100 w-full text-sm dark:bg-gray-800 flex-col md:flex-row gap-2"
>
<div class="flex items-center gap-2">
<label class="flex items-center gap-2">
<p>Revision:</p>
<!--
the onchange is so bad - i'd rather it be done through vue
@ -19,16 +19,15 @@ useHead({ title: "Eggworld" });
ig r4 has to be in next.js
-->
<select
class="p-2 border rounded rounded-lg dark:bg-[#222]"
class="p-2 border rounded-lg dark:bg-[#222]"
onchange="location = this.value"
>
<option v-for="(r, i) in revisions" :key="i" :value="r.url">
{{ r.title }}
</option>
</select>
</div>
</label>
<div class="flex flex-col items-center">
<p> 2023 Daniel Chen</p>
<p>
Licensed under the AGPL-3.0 on
<a class="underline" href="https://github.com/potatoeggy/public">
@ -50,7 +49,9 @@ useHead({ title: "Eggworld" });
html {
background: white;
color: black;
transition: color 0.2s ease, background 0.2s ease;
transition:
color 0.2s ease,
background 0.2s ease;
overflow-x: hidden;
overflow-y: scroll;
scroll-behavior: smooth;
@ -72,6 +73,13 @@ html::before {
z-index: 0;
}
/* div#__nuxt {
min-height: 100vh;
}
it's better if everything is sort of long but that is not the case
*/
html.dark::before {
transform: translateX(0);
}

View File

@ -2,12 +2,39 @@ import { defineNuxtConfig } from "nuxt/config";
import svgLoader from "vite-svg-loader";
// https://v3.nuxtjs.org/api/configuration/nuxt.config
export default defineNuxtConfig({
app: {
head: {
htmlAttrs: {
lang: "en",
},
meta: [
{ name: "viewport", content: " width=device-width,initial-scale=1" },
{ name: "theme-color", content: "#ffffff" },
],
link: [
{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" },
{
rel: "stylesheet",
href: "https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css",
},
],
script: [
{
defer: true,
src: "/script.js",
hid: "stupidEmergencyScript",
type: "module",
},
],
},
},
modules: [
"@nuxt/content",
"@nuxtjs/tailwindcss",
"@nuxtjs/color-mode",
"@funken-studio/sitemap-nuxt-3",
"@nuxtjs/sitemap",
],
css: ["@/assets/css/main.scss"],
nitro: {
prerender: {
routes: ["/sitemap.xml"],
@ -16,10 +43,11 @@ export default defineNuxtConfig({
typescript: {
shim: false,
},
css: ["~/assets/css/main.scss"],
/* @ts-expect-error */
site: {
url: process.env.BASE_URL || "https://eggworld.me",
},
sitemap: {
hostname: process.env.BASE_URL || "https://eggworld.me",
strictNuxtContentPaths: true,
},
tailwindcss: {},
colorMode: {
@ -28,26 +56,6 @@ export default defineNuxtConfig({
vite: {
plugins: [svgLoader()],
},
head: {
meta: [
{ name: "viewport", content: " width=device-width,initial-scale=1" },
],
link: [
{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" },
{
rel: "stylesheet",
href: "https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css",
},
],
script: [
{
defer: true,
src: "/script.js",
hid: "stupidEmergencyScript",
type: "module",
},
],
},
content: {
documentDriven: false,
highlight: {
@ -89,6 +97,9 @@ export default defineNuxtConfig({
},
},
experimental: {
sharedPrerenderData: true,
},
features: {
noScripts: true,
},
});

View File

@ -7,21 +7,20 @@
"preview": "nuxt preview"
},
"devDependencies": {
"@funken-studio/sitemap-nuxt-3": "^4.0.4",
"@nuxt/content": "^2.3.0",
"@nuxtjs/color-mode": "^3.2.0",
"@nuxtjs/tailwindcss": "^6.2.0",
"nuxt": "^3.1.1",
"@nuxt/content": "^2.12.0",
"@nuxtjs/color-mode": "^3.3.2",
"@nuxtjs/sitemap": "^5.1.0",
"@nuxtjs/tailwindcss": "^6.11.4",
"@tailwindcss/typography": "^0.5.10",
"@types/node": "^20.11.24",
"dayjs": "^1.11.10",
"nuxt": "3.10.3",
"prettier": "^3.2.5",
"reading-time": "^2.0.0-1",
"rehype-katex": "^6.0.2",
"remark-math": "^5.1.1",
"sass": "^1.57.1",
"sitemap": "^7.1.1",
"typescript": "^4.7.4",
"unist-util-visit": "^4.1.0",
"vite-svg-loader": "^4.0.0"
},
"dependencies": {
"dayjs": "^1.11.4"
"rehype-katex": "^7.0.0",
"remark-math": "^6.0.0",
"sass": "^1.71.1",
"typescript": "^5.3.3",
"vite-svg-loader": "^5.1.0"
}
}

13
pages/404.vue Normal file
View File

@ -0,0 +1,13 @@
<script setup lang="ts">
useTitle("404 - Not Found", "You're lost!");
</script>
<template>
<main class="prose dark:prose-invert max-w-3xl transition">
<h1 class="mb-1">404 - Not Found</h1>
<p>
You're lost! Don't worry, here's a link
<a href="/">back to the home page.</a>
</p>
</main>
</template>

View File

@ -1,21 +1,19 @@
<script setup lang="ts">
import type { BlogParsedContent, StoryParsedContent } from "@/shared/types";
import type { AnyParsedContent } from "@/shared/types";
import { calcReadingTime } from "@/shared/metadata";
type GeneralParsedContent = BlogParsedContent | StoryParsedContent;
const route = useRoute();
definePageMeta({
layout: "withtop",
});
// definePageMeta({
// layout: "withtop",
// });
// we're not using ContentDoc because i need control
const doc = await queryContent<GeneralParsedContent>(route.path).findOne();
const doc = await queryContent<AnyParsedContent>(route.path).findOne();
const type = route.path.startsWith("/stories")
? "stories"
: route.path.startsWith("/blog")
? "blog"
: "unknown";
? "blog"
: "unknown";
const descText =
type === "stories"
@ -29,7 +27,7 @@ const captionText =
<template>
<main class="container prose dark:prose-invert w-full">
<p class="m-0 uppercase font-mono text-sm" v-if="captionText !== ''">
<p class="m-0 uppercase font-mono text-sm" v-if="captionText">
{{ captionText }}
</p>
<h1 class="m-0">{{ doc.title }}</h1>
@ -39,9 +37,8 @@ const captionText =
v-for="(tag, index) in doc.tags"
:dest="`/tags/${type}/${tag}`"
:key="index"
>
{{ tag }}
</Tag>
:name="tag"
/>
</div>
<ContentRenderer :value="doc" tag="article" class="pt-0 w-full">
<template #empty>
@ -65,6 +62,16 @@ const captionText =
padding-top: 2rem;
}
@media screen and (max-width: 600px) {
.container {
width: 90%;
}
.container h1 {
overflow-wrap: break-word;
}
}
* {
transition: color 0.2s ease;
}

View File

@ -2,7 +2,7 @@
import type { BlogParsedContent } from "@/shared/types";
useTitle("Blog", "Ramblings and ideas");
definePageMeta({ layout: "withtop" });
//definePageMeta({ layout: "withtop" });
// TODO: paginate stories
const docs = await queryContent<BlogParsedContent>("/blog")
@ -14,7 +14,6 @@ const tags = new Set(
docs
.map((p) => p.tags)
.flat()
.filter((p) => !p.includes(" "))
.sort()
);
</script>
@ -30,9 +29,8 @@ const tags = new Set(
:dest="`/tags/blog/${tag}`"
v-for="(tag, index) in tags"
:key="index"
>
{{ tag }}
</Tag>
:name="tag"
/>
</div>
<PostPreviewCard
v-for="(post, index) in docs"

View File

@ -2,14 +2,23 @@
import Services from "@/components/index/services.vue";
import About from "@/components/index/about.vue";
definePageMeta({ layout: "withtop" });
//definePageMeta({ layout: "withtop" });
useTitle("Home", "Personal website!");
const welcomeStrings = ["Welcome!", "Bienvenue!", "欢迎!"];
</script>
<template>
<main class="flex flex-col items-center justify-around gap-8">
<h1>Welcome!</h1>
<p>What are you here to see?</p>
<div class="flex flex-col items-center">
<HeaderLoop class="text-bitter font-bold" :strings="welcomeStrings" />
<p>What are you here to see?</p>
<p>
For my portfolio, please visit
<a class="underline" href="https://github.com/potatoeggy">GitHub</a>
instead.
</p>
</div>
<div
class="flex justify-around items-stretch w-full flex-wrap gap-x-8 gap-y-10"
>

View File

@ -2,7 +2,7 @@
import type { StoryParsedContent } from "@/shared/types";
useTitle("Stories", "Fantasies and worlds");
definePageMeta({ layout: "withtop" });
//definePageMeta({ layout: "withtop" });
// TODO: paginate stories
const docs = await queryContent<StoryParsedContent>("/stories")
@ -14,7 +14,6 @@ const tags = new Set(
docs
.map((p) => p.tags)
.flat()
.filter((p) => !p.includes(" ")) // do not include AO3-style tags
.sort()
);
</script>
@ -30,9 +29,8 @@ const tags = new Set(
:dest="`/tags/stories/${tag}`"
v-for="(tag, index) in tags"
:key="index"
>
{{ tag }}
</Tag>
:name="tag"
/>
</div>
<PostPreviewCard
v-for="(story, index) in docs"

View File

@ -3,7 +3,7 @@ import { tagInfo, type TagData } from "@/data/tagInfo";
import type { BlogParsedContent } from "@/shared/types";
const route = useRoute();
definePageMeta({ layout: "withtop" });
//definePageMeta({ layout: "withtop" });
const tag =
typeof route.params.tag === "string" ? route.params.tag : route.params.tag[0];
@ -16,7 +16,7 @@ const docs = await queryContent<BlogParsedContent>("/blog")
.find();
const title = details.name ?? `"${tag}"`;
useTitle(title, details.description);
useTitle(title + " Posts", details.description);
</script>
<template>

View File

@ -3,7 +3,7 @@ import { tagInfo, type TagData } from "@/data/tagInfo";
import type { StoryParsedContent } from "@/shared/types";
const route = useRoute();
definePageMeta({ layout: "withtop" });
//definePageMeta({ layout: "withtop" });
const tag =
typeof route.params.tag === "string" ? route.params.tag : route.params.tag[0];
@ -16,7 +16,7 @@ const docs = await queryContent<StoryParsedContent>("/stories")
.find();
const title = details.name ?? `"${tag}"`;
useTitle(title, details.description);
useTitle(title + " Stories", details.description);
</script>
<template>

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" id="main_outline" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 640 640" style="enable-background:new 0 0 640 640;" xml:space="preserve">
<g>
<path id="teabag" style="fill:#FFFFFF" d="M395.9,484.2l-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5,21.2-17.9,33.8-11.8 c17.2,8.3,27.1,13,27.1,13l-0.1-109.2l16.7-0.1l0.1,117.1c0,0,57.4,24.2,83.1,40.1c3.7,2.3,10.2,6.8,12.9,14.4 c2.1,6.1,2,13.1-1,19.3l-61,126.9C423.6,484.9,408.4,490.3,395.9,484.2z"/>
<g>
<g>
<path style="fill:#609926" d="M622.7,149.8c-4.1-4.1-9.6-4-9.6-4s-117.2,6.6-177.9,8c-13.3,0.3-26.5,0.6-39.6,0.7c0,39.1,0,78.2,0,117.2 c-5.5-2.6-11.1-5.3-16.6-7.9c0-36.4-0.1-109.2-0.1-109.2c-29,0.4-89.2-2.2-89.2-2.2s-141.4-7.1-156.8-8.5 c-9.8-0.6-22.5-2.1-39,1.5c-8.7,1.8-33.5,7.4-53.8,26.9C-4.9,212.4,6.6,276.2,8,285.8c1.7,11.7,6.9,44.2,31.7,72.5 c45.8,56.1,144.4,54.8,144.4,54.8s12.1,28.9,30.6,55.5c25,33.1,50.7,58.9,75.7,62c63,0,188.9-0.1,188.9-0.1s12,0.1,28.3-10.3 c14-8.5,26.5-23.4,26.5-23.4s12.9-13.8,30.9-45.3c5.5-9.7,10.1-19.1,14.1-28c0,0,55.2-117.1,55.2-231.1 C633.2,157.9,624.7,151.8,622.7,149.8z M125.6,353.9c-25.9-8.5-36.9-18.7-36.9-18.7S69.6,321.8,60,295.4 c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5,38.5-30c13.8-3.7,31-3.1,31-3.1s7.1,59.4,15.7,94.2c7.2,29.2,24.8,77.7,24.8,77.7 S142.5,359.9,125.6,353.9z M425.9,461.5c0,0-6.1,14.5-19.6,15.4c-5.8,0.4-10.3-1.2-10.3-1.2s-0.3-0.1-5.3-2.1l-112.9-55 c0,0-10.9-5.7-12.8-15.6c-2.2-8.1,2.7-18.1,2.7-18.1L322,273c0,0,4.8-9.7,12.2-13c0.6-0.3,2.3-1,4.5-1.5c8.1-2.1,18,2.8,18,2.8 l110.7,53.7c0,0,12.6,5.7,15.3,16.2c1.9,7.4-0.5,14-1.8,17.2C474.6,363.8,425.9,461.5,425.9,461.5z"/>
<path style="fill:#609926" d="M326.8,380.1c-8.2,0.1-15.4,5.8-17.3,13.8c-1.9,8,2,16.3,9.1,20c7.7,4,17.5,1.8,22.7-5.4 c5.1-7.1,4.3-16.9-1.8-23.1l24-49.1c1.5,0.1,3.7,0.2,6.2-0.5c4.1-0.9,7.1-3.6,7.1-3.6c4.2,1.8,8.6,3.8,13.2,6.1 c4.8,2.4,9.3,4.9,13.4,7.3c0.9,0.5,1.8,1.1,2.8,1.9c1.6,1.3,3.4,3.1,4.7,5.5c1.9,5.5-1.9,14.9-1.9,14.9 c-2.3,7.6-18.4,40.6-18.4,40.6c-8.1-0.2-15.3,5-17.7,12.5c-2.6,8.1,1.1,17.3,8.9,21.3c7.8,4,17.4,1.7,22.5-5.3 c5-6.8,4.6-16.3-1.1-22.6c1.9-3.7,3.7-7.4,5.6-11.3c5-10.4,13.5-30.4,13.5-30.4c0.9-1.7,5.7-10.3,2.7-21.3 c-2.5-11.4-12.6-16.7-12.6-16.7c-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3c4.7-9.7,9.4-19.3,14.1-29 c-4.1-2-8.1-4-12.2-6.1c-4.8,9.8-9.7,19.7-14.5,29.5c-6.7-0.1-12.9,3.5-16.1,9.4c-3.4,6.3-2.7,14.1,1.9,19.8 C343.2,346.5,335,363.3,326.8,380.1z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- ***** BEGIN LICENSE BLOCK *****
- Part of the Jellyfin project (https://jellyfin.media)
-
- All copyright belongs to the Jellyfin contributors; a full list can
- be found in the file CONTRIBUTORS.md
-
- This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.
- To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/.
- ***** END LICENSE BLOCK ***** -->
<svg version="1.1" id="icon-transparent" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512">
<defs>
<linearGradient id="linear-gradient" gradientUnits="userSpaceOnUse" x1="110.25" y1="213.3" x2="496.14" y2="436.09">
<stop offset="0" style="stop-color:#AA5CC3"/>
<stop offset="1" style="stop-color:#00A4DC"/>
</linearGradient>
</defs>
<title>icon-transparent</title>
<g id="icon-transparent">
<path id="inner-shape" d="M256,201.6c-20.4,0-86.2,119.3-76.2,139.4s142.5,19.9,152.4,0S276.5,201.6,256,201.6z" fill="url(#linear-gradient)"/>
<path id="outer-shape" d="M256,23.3c-61.6,0-259.8,359.4-229.6,420.1s429.3,60,459.2,0S317.6,23.3,256,23.3z M406.5,390.8c-19.6,39.3-281.1,39.8-300.9,0s110.1-275.3,150.4-275.3S426.1,351.4,406.5,390.8z" fill="url(#linear-gradient)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,786 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
</cc:Work>
</rdf:RDF>
</metadata>
<path d="m150 1.0238 133.58 66.793-133.58 66.793-133.58-66.793z" fill="#486e3f" stroke-width="0"/>
<path d="m283.72 67.767-133.6 66.813v164.04l133.6-66.813z" fill="#966c4a" stroke-width="0"/>
<path d="m16.519 67.766 133.6 66.813v164.04l-133.6-66.813z" fill="#966c4a" stroke-width="0"/>
<path d="m16.519 67.766 8.35 4.1759v10.253l-8.35-4.1759z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 69.757h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 80.01h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 100.52h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 110.77h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 121.02h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 131.27h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 141.53h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 151.78h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 162.03h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 172.28h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 182.54h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 192.79h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 203.04h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m18.469 213.3h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 59.505h9.336v10.253h-9.336z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 69.757h9.336v10.253h-9.336z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 80.01h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 90.263h9.336v10.253h-9.336z" fill="#6c6c6c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 100.52h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 110.77h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 121.02h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 131.27h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 141.53h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 151.78h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 162.03h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 172.28h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 182.54h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 192.79h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 203.04h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m27.805 213.3h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 59.505h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 69.757h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 80.01h9.336v10.253h-9.336z" fill="#57844b" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 100.52h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 110.77h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 121.02h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 131.27h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 141.53h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 151.78h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 162.03h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 172.28h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 182.54h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 192.79h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 203.04h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m37.141 213.3h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 59.505h9.336v10.253h-9.336z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 69.757h9.336v10.253h-9.336z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 80.01h9.336v10.253h-9.336z" fill="#406237" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 100.52h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 110.77h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 121.02h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 131.27h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 141.53h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 151.78h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 162.03h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 172.28h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 182.54h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 192.79h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 203.04h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m46.477 213.3h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 59.505h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 69.757h9.336v10.253h-9.336z" fill="#57844b" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 80.01h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 90.263h9.336v10.253h-9.336z" fill="#476b3d" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 100.52h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 110.77h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 121.02h9.336v10.253h-9.336z" fill="#878787" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 131.27h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 141.53h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 151.78h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 162.03h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 172.28h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 182.54h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 192.79h9.336v10.253h-9.336z" fill="#745844" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 203.04h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m55.813 213.3h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 59.505h9.336v10.253h-9.336z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 69.757h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 80.01h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 100.52h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 110.77h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 121.02h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 131.27h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 141.53h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 151.78h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 162.03h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 172.28h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 182.54h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 192.79h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 203.04h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m65.149 213.3h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 59.505h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 69.757h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 80.01h9.336v10.253h-9.336z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 100.52h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 110.77h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 121.02h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 131.27h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 141.53h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 151.78h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 162.03h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 172.28h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 182.54h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 192.79h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 203.04h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m74.485 213.3h9.336v10.253h-9.336z" fill="#878787" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 59.505h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 69.757h9.336v10.253h-9.336z" fill="#3f6037" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 80.01h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 100.52h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 110.77h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 121.02h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 131.27h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 141.53h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 151.78h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 162.03h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 172.28h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 182.54h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 192.79h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 203.04h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m83.821 213.3h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 59.505h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 69.757h9.336v10.253h-9.336z" fill="#57844b" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 80.01h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 90.263h9.336v10.253h-9.336z" fill="#3e5e35" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 100.52h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 110.77h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 121.02h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 131.27h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 141.53h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 151.78h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 162.03h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 172.28h9.336v10.253h-9.336z" fill="#6c6c6c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 182.54h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 192.79h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 203.04h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m93.157 213.3h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 59.505h9.336v10.253h-9.336z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 69.757h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 80.01h9.336v10.253h-9.336z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 100.52h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 110.77h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 121.02h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 131.27h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 141.53h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 151.78h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 162.03h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 172.28h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 182.54h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 192.79h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 203.04h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m102.49 213.3h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 59.505h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 69.757h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 80.01h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 90.263h9.336v10.253h-9.336z" fill="#45693b" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 100.52h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 110.77h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 121.02h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 131.27h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 141.53h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 151.78h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 162.03h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 172.28h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 182.54h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 192.79h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 203.04h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m111.83 213.3h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 59.505h9.336v10.253h-9.336z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 69.757h9.336v10.253h-9.336z" fill="#476d3e" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 80.01h9.336v10.253h-9.336z" fill="#548049" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 100.52h9.336v10.253h-9.336z" fill="#6c6c6c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 110.77h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 121.02h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 131.27h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 141.53h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 151.78h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 162.03h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 172.28h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 182.54h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 192.79h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 203.04h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m121.16 213.3h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 59.505h9.336v10.253h-9.336z" fill="#57844b" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 69.757h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 80.01h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 90.263h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 100.52h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 110.77h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 121.02h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 131.27h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 141.53h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 151.78h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 162.03h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 172.28h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 182.54h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 192.79h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 203.04h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m130.5 213.3h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 59.505h9.336v10.253h-9.336z" fill="#3f6036" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 69.757h9.336v10.253h-9.336z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 80.01h9.336v10.253h-9.336z" fill="#3a5832" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 100.52h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 110.77h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 121.02h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 131.27h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 141.53h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 151.78h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 162.03h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 172.28h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 182.54h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 192.79h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 203.04h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m139.84 213.3h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 59.505h9.336v10.253h-9.336z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 69.757h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 80.01h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 90.263h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 100.52h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 110.77h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 121.02h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 131.27h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 141.53h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 151.78h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 162.03h9.336v10.253h-9.336z" fill="#878787" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 172.28h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 182.54h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 192.79h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 203.04h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m149.17 213.3h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 59.505h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 69.757h9.336v10.253h-9.336z" fill="#44673a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 80.01h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 90.263h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 100.52h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 110.77h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 121.02h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 131.27h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 141.53h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 151.78h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 162.03h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 172.28h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 182.54h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 192.79h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 203.04h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 .44729 0 1 0 0)" d="m158.51 213.3h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 209.66h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 219.91h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 230.16h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 250.67h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 260.92h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 271.17h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 281.42h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 291.68h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 301.93h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 312.18h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 322.44h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 332.69h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 342.94h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 353.19h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m167.84 363.45h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 209.66h9.336v10.253h-9.336z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 219.91h9.336v10.253h-9.336z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 230.16h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 240.41h9.336v10.253h-9.336z" fill="#6c6c6c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 250.67h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 260.92h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 271.17h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 281.42h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 291.68h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 301.93h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 312.18h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 322.44h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 332.69h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 342.94h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 353.19h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m177.18 363.45h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 209.66h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 219.91h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 230.16h9.336v10.253h-9.336z" fill="#57844b" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 250.67h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 260.92h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 271.17h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 281.42h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 291.68h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 301.93h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 312.18h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 322.44h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 332.69h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 342.94h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 353.19h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m186.52 363.45h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 209.66h9.336v10.253h-9.336z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 219.91h9.336v10.253h-9.336z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 230.16h9.336v10.253h-9.336z" fill="#406237" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 250.67h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 260.92h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 271.17h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 281.42h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 291.68h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 301.93h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 312.18h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 322.44h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 332.69h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 342.94h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 353.19h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m195.85 363.45h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 209.66h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 219.91h9.336v10.253h-9.336z" fill="#57844b" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 230.16h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 240.41h9.336v10.253h-9.336z" fill="#476b3d" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 250.67h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 260.92h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 271.17h9.336v10.253h-9.336z" fill="#878787" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 281.42h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 291.68h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 301.93h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 312.18h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 322.44h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 332.69h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 342.94h9.336v10.253h-9.336z" fill="#745844" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 353.19h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m205.19 363.45h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 209.66h9.336v10.253h-9.336z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 219.91h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 230.16h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 250.67h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 260.92h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 271.17h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 281.42h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 291.68h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 301.93h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 312.18h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 322.44h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 332.69h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 342.94h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 353.19h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m214.52 363.45h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 209.66h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 219.91h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 230.16h9.336v10.253h-9.336z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 250.67h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 260.92h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 271.17h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 281.42h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 291.68h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 301.93h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 312.18h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 322.44h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 332.69h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 342.94h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 353.19h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m223.86 363.45h9.336v10.253h-9.336z" fill="#878787" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 209.66h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 219.91h9.336v10.253h-9.336z" fill="#3f6037" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 230.16h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 250.67h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 260.92h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 271.17h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 281.42h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 291.68h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 301.93h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 312.18h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 322.44h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 332.69h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 342.94h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 353.19h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m233.2 363.45h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 209.66h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 219.91h9.336v10.253h-9.336z" fill="#57844b" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 230.16h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 240.41h9.336v10.253h-9.336z" fill="#3e5e35" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 250.67h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 260.92h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 271.17h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 281.42h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 291.68h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 301.93h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 312.18h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 322.44h9.336v10.253h-9.336z" fill="#6c6c6c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 332.69h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 342.94h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 353.19h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m242.53 363.45h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 209.66h9.336v10.253h-9.336z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 219.91h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 230.16h9.336v10.253h-9.336z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 250.67h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 260.92h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 271.17h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 281.42h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 291.68h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 301.93h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 312.18h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 322.44h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 332.69h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 342.94h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 353.19h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m251.87 363.45h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 209.66h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 219.91h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 230.16h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 240.41h9.336v10.253h-9.336z" fill="#45693b" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 250.67h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 260.92h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 271.17h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 281.42h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 291.68h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 301.93h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 312.18h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 322.44h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 332.69h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 342.94h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 353.19h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m261.2 363.45h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 209.66h9.336v10.253h-9.336z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 219.91h9.336v10.253h-9.336z" fill="#476d3e" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 230.16h9.336v10.253h-9.336z" fill="#548049" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 250.67h9.336v10.253h-9.336z" fill="#6c6c6c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 260.92h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 271.17h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 281.42h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 291.68h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 301.93h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 312.18h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 322.44h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 332.69h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 342.94h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 353.19h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m270.54 363.45h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 209.66h9.336v10.253h-9.336z" fill="#57844b" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 219.91h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 230.16h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 240.41h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 250.67h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 260.92h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 271.17h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 281.42h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 291.68h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 301.93h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 312.18h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 322.44h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 332.69h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 342.94h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 353.19h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m279.88 363.45h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 209.66h9.336v10.253h-9.336z" fill="#3f6036" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 219.91h9.336v10.253h-9.336z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 230.16h9.336v10.253h-9.336z" fill="#3a5832" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 250.67h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 260.92h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 271.17h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 281.42h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 291.68h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 301.93h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 312.18h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 322.44h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 332.69h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 342.94h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 353.19h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m289.21 363.45h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 209.66h9.336v10.253h-9.336z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 219.91h9.336v10.253h-9.336z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 230.16h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 240.41h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 250.67h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 260.92h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 271.17h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 281.42h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 291.68h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 301.93h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 312.18h9.336v10.253h-9.336z" fill="#878787" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 322.44h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 332.69h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 342.94h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 353.19h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m298.55 363.45h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 209.66h9.336v10.253h-9.336z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 219.91h9.336v10.253h-9.336z" fill="#44673a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 230.16h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 240.41h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 250.67h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 260.92h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 271.17h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 281.42h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 291.68h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 301.93h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 312.18h9.336v10.253h-9.336z" fill="#79553a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 322.44h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 332.69h9.336v10.253h-9.336z" fill="#b9855c" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 342.94h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 353.19h9.336v10.253h-9.336z" fill="#966c4a" stroke-width="0"/>
<path transform="matrix(.89439 -.44729 0 1 0 0)" d="m307.88 363.45h9.336v10.253h-9.336z" fill="#593d29" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998-82.708h9.3273v9.3273h-9.3273z" fill="#486e3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998-73.381h9.3273v9.3273h-9.3273z" fill="#486e3f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998-64.054h9.3273v9.3273h-9.3273z" fill="#4f7944" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998-54.726h9.3273v9.3273h-9.3273z" fill="#395732" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998-45.399h9.3273v9.3273h-9.3273z" fill="#4f7844" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998-36.072h9.3273v9.3273h-9.3273z" fill="#4a7140" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998-26.744h9.3273v9.3273h-9.3273z" fill="#3d5d35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998-17.417h9.3273v9.3273h-9.3273z" fill="#466a3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998-8.0896h9.3273v9.3273h-9.3273z" fill="#517c46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998 1.2377h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998 10.565h9.3273v9.3273h-9.3273z" fill="#4b7341" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998 19.892h9.3273v9.3273h-9.3273z" fill="#406237" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998 29.22h9.3273v9.3273h-9.3273z" fill="#5a8a4e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998 38.547h9.3273v9.3273h-9.3273z" fill="#3f6036" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998 47.874h9.3273v9.3273h-9.3273z" fill="#4f7944" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m84.998 57.202h9.3273v9.3273h-9.3273z" fill="#416338" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325-82.708h9.3273v9.3273h-9.3273z" fill="#5f9152" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325-73.381h9.3273v9.3273h-9.3273z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325-64.054h9.3273v9.3273h-9.3273z" fill="#45693b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325-54.726h9.3273v9.3273h-9.3273z" fill="#416338" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325-45.399h9.3273v9.3273h-9.3273z" fill="#406137" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325-36.072h9.3273v9.3273h-9.3273z" fill="#4a7140" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325-26.744h9.3273v9.3273h-9.3273z" fill="#4c7441" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325-17.417h9.3273v9.3273h-9.3273z" fill="#426439" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325-8.0896h9.3273v9.3273h-9.3273z" fill="#4b7341" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325 1.2377h9.3273v9.3273h-9.3273z" fill="#3f6037" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325 10.565h9.3273v9.3273h-9.3273z" fill="#4d7542" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325 19.892h9.3273v9.3273h-9.3273z" fill="#548049" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325 29.22h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325 38.547h9.3273v9.3273h-9.3273z" fill="#527d46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325 47.874h9.3273v9.3273h-9.3273z" fill="#4e7744" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m94.325 57.202h9.3273v9.3273h-9.3273z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65-82.708h9.3273v9.3273h-9.3273z" fill="#476d3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65-73.381h9.3273v9.3273h-9.3273z" fill="#4e7743" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65-64.054h9.3273v9.3273h-9.3273z" fill="#3d5d34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65-54.726h9.3273v9.3273h-9.3273z" fill="#43663a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65-45.399h9.3273v9.3273h-9.3273z" fill="#548049" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65-36.072h9.3273v9.3273h-9.3273z" fill="#3a5932" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65-26.744h9.3273v9.3273h-9.3273z" fill="#507a45" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65-17.417h9.3273v9.3273h-9.3273z" fill="#4c7442" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65-8.0896h9.3273v9.3273h-9.3273z" fill="#59874c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65 1.2377h9.3273v9.3273h-9.3273z" fill="#59884d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65 10.565h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65 19.892h9.3273v9.3273h-9.3273z" fill="#416338" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65 29.22h9.3273v9.3273h-9.3273z" fill="#3f6036" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65 38.547h9.3273v9.3273h-9.3273z" fill="#395732" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65 47.874h9.3273v9.3273h-9.3273z" fill="#5d8e51" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m103.65 57.202h9.3273v9.3273h-9.3273z" fill="#426539" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98-82.708h9.3273v9.3273h-9.3273z" fill="#416338" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98-73.381h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98-64.054h9.3273v9.3273h-9.3273z" fill="#406237" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98-54.726h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98-45.399h9.3273v9.3273h-9.3273z" fill="#406137" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98-36.072h9.3273v9.3273h-9.3273z" fill="#517b46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98-26.744h9.3273v9.3273h-9.3273z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98-17.417h9.3273v9.3273h-9.3273z" fill="#44673a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98-8.0896h9.3273v9.3273h-9.3273z" fill="#537e47" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98 1.2377h9.3273v9.3273h-9.3273z" fill="#45693b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98 10.565h9.3273v9.3273h-9.3273z" fill="#507a45" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98 19.892h9.3273v9.3273h-9.3273z" fill="#4f7944" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98 29.22h9.3273v9.3273h-9.3273z" fill="#43663a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98 38.547h9.3273v9.3273h-9.3273z" fill="#476c3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98 47.874h9.3273v9.3273h-9.3273z" fill="#3c5b34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m112.98 57.202h9.3273v9.3273h-9.3273z" fill="#436639" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31-82.708h9.3273v9.3273h-9.3273z" fill="#416338" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31-73.381h9.3273v9.3273h-9.3273z" fill="#4a7140" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31-64.054h9.3273v9.3273h-9.3273z" fill="#436639" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31-54.726h9.3273v9.3273h-9.3273z" fill="#476b3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31-45.399h9.3273v9.3273h-9.3273z" fill="#547f48" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31-36.072h9.3273v9.3273h-9.3273z" fill="#3f6036" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31-26.744h9.3273v9.3273h-9.3273z" fill="#476c3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31-17.417h9.3273v9.3273h-9.3273z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31-8.0896h9.3273v9.3273h-9.3273z" fill="#547f48" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31 1.2377h9.3273v9.3273h-9.3273z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31 10.565h9.3273v9.3273h-9.3273z" fill="#3f6037" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31 19.892h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31 29.22h9.3273v9.3273h-9.3273z" fill="#4a7140" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31 38.547h9.3273v9.3273h-9.3273z" fill="#3d5d34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31 47.874h9.3273v9.3273h-9.3273z" fill="#57854b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m122.31 57.202h9.3273v9.3273h-9.3273z" fill="#507a45" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63-82.708h9.3273v9.3273h-9.3273z" fill="#466a3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63-73.381h9.3273v9.3273h-9.3273z" fill="#3e5f36" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63-64.054h9.3273v9.3273h-9.3273z" fill="#426539" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63-54.726h9.3273v9.3273h-9.3273z" fill="#4a7140" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63-45.399h9.3273v9.3273h-9.3273z" fill="#558149" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63-36.072h9.3273v9.3273h-9.3273z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63-26.744h9.3273v9.3273h-9.3273z" fill="#406137" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63-17.417h9.3273v9.3273h-9.3273z" fill="#3c5c34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63-8.0896h9.3273v9.3273h-9.3273z" fill="#3f6036" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63 1.2377h9.3273v9.3273h-9.3273z" fill="#4a7140" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63 10.565h9.3273v9.3273h-9.3273z" fill="#59874c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63 19.892h9.3273v9.3273h-9.3273z" fill="#406237" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63 29.22h9.3273v9.3273h-9.3273z" fill="#476b3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63 38.547h9.3273v9.3273h-9.3273z" fill="#4a7140" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63 47.874h9.3273v9.3273h-9.3273z" fill="#537f48" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m131.63 57.202h9.3273v9.3273h-9.3273z" fill="#4a7140" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96-82.708h9.3273v9.3273h-9.3273z" fill="#3e5e35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96-73.381h9.3273v9.3273h-9.3273z" fill="#4a7140" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96-64.054h9.3273v9.3273h-9.3273z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96-54.726h9.3273v9.3273h-9.3273z" fill="#3d5d34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96-45.399h9.3273v9.3273h-9.3273z" fill="#426539" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96-36.072h9.3273v9.3273h-9.3273z" fill="#486e3f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96-26.744h9.3273v9.3273h-9.3273z" fill="#43663a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96-17.417h9.3273v9.3273h-9.3273z" fill="#507a45" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96-8.0896h9.3273v9.3273h-9.3273z" fill="#548049" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96 1.2377h9.3273v9.3273h-9.3273z" fill="#537e47" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96 10.565h9.3273v9.3273h-9.3273z" fill="#45693c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96 19.892h9.3273v9.3273h-9.3273z" fill="#476c3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96 29.22h9.3273v9.3273h-9.3273z" fill="#416338" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96 38.547h9.3273v9.3273h-9.3273z" fill="#3f6036" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96 47.874h9.3273v9.3273h-9.3273z" fill="#486e3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m140.96 57.202h9.3273v9.3273h-9.3273z" fill="#486e3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29-82.708h9.3273v9.3273h-9.3273z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29-73.381h9.3273v9.3273h-9.3273z" fill="#3f6037" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29-64.054h9.3273v9.3273h-9.3273z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29-54.726h9.3273v9.3273h-9.3273z" fill="#476c3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29-45.399h9.3273v9.3273h-9.3273z" fill="#547f48" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29-36.072h9.3273v9.3273h-9.3273z" fill="#4b7341" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29-26.744h9.3273v9.3273h-9.3273z" fill="#3e5e35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29-17.417h9.3273v9.3273h-9.3273z" fill="#406237" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29-8.0896h9.3273v9.3273h-9.3273z" fill="#4c7441" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29 1.2377h9.3273v9.3273h-9.3273z" fill="#3e5f36" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29 10.565h9.3273v9.3273h-9.3273z" fill="#476d3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29 19.892h9.3273v9.3273h-9.3273z" fill="#436639" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29 29.22h9.3273v9.3273h-9.3273z" fill="#3b5a33" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29 38.547h9.3273v9.3273h-9.3273z" fill="#5f9152" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29 47.874h9.3273v9.3273h-9.3273z" fill="#476d3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m150.29 57.202h9.3273v9.3273h-9.3273z" fill="#476d3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62-82.708h9.3273v9.3273h-9.3273z" fill="#4d7542" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62-73.381h9.3273v9.3273h-9.3273z" fill="#3e5e35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62-64.054h9.3273v9.3273h-9.3273z" fill="#486e3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62-54.726h9.3273v9.3273h-9.3273z" fill="#3e5e35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62-45.399h9.3273v9.3273h-9.3273z" fill="#5a8a4e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62-36.072h9.3273v9.3273h-9.3273z" fill="#426439" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62-26.744h9.3273v9.3273h-9.3273z" fill="#406237" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62-17.417h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62-8.0896h9.3273v9.3273h-9.3273z" fill="#57854b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62 1.2377h9.3273v9.3273h-9.3273z" fill="#426439" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62 10.565h9.3273v9.3273h-9.3273z" fill="#5d8e51" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62 19.892h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62 29.22h9.3273v9.3273h-9.3273z" fill="#43663a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62 38.547h9.3273v9.3273h-9.3273z" fill="#4e7744" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62 47.874h9.3273v9.3273h-9.3273z" fill="#3d5d35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m159.62 57.202h9.3273v9.3273h-9.3273z" fill="#45693c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94-82.708h9.3273v9.3273h-9.3273z" fill="#496f3f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94-73.381h9.3273v9.3273h-9.3273z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94-64.054h9.3273v9.3273h-9.3273z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94-54.726h9.3273v9.3273h-9.3273z" fill="#406137" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94-45.399h9.3273v9.3273h-9.3273z" fill="#395731" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94-36.072h9.3273v9.3273h-9.3273z" fill="#486e3f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94-26.744h9.3273v9.3273h-9.3273z" fill="#426439" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94-17.417h9.3273v9.3273h-9.3273z" fill="#548049" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94-8.0896h9.3273v9.3273h-9.3273z" fill="#537e47" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94 1.2377h9.3273v9.3273h-9.3273z" fill="#476b3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94 10.565h9.3273v9.3273h-9.3273z" fill="#3b5a33" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94 19.892h9.3273v9.3273h-9.3273z" fill="#476c3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94 29.22h9.3273v9.3273h-9.3273z" fill="#476b3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94 38.547h9.3273v9.3273h-9.3273z" fill="#476d3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94 47.874h9.3273v9.3273h-9.3273z" fill="#486e3f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m168.94 57.202h9.3273v9.3273h-9.3273z" fill="#5d8e50" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27-82.708h9.3273v9.3273h-9.3273z" fill="#43663a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27-73.381h9.3273v9.3273h-9.3273z" fill="#517b46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27-64.054h9.3273v9.3273h-9.3273z" fill="#527d46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27-54.726h9.3273v9.3273h-9.3273z" fill="#45693b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27-45.399h9.3273v9.3273h-9.3273z" fill="#3e5f36" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27-36.072h9.3273v9.3273h-9.3273z" fill="#426539" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27-26.744h9.3273v9.3273h-9.3273z" fill="#58864c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27-17.417h9.3273v9.3273h-9.3273z" fill="#426439" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27-8.0896h9.3273v9.3273h-9.3273z" fill="#3f6037" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27 1.2377h9.3273v9.3273h-9.3273z" fill="#476c3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27 10.565h9.3273v9.3273h-9.3273z" fill="#517c46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27 19.892h9.3273v9.3273h-9.3273z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27 29.22h9.3273v9.3273h-9.3273z" fill="#43663a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27 38.547h9.3273v9.3273h-9.3273z" fill="#527d46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27 47.874h9.3273v9.3273h-9.3273z" fill="#486e3f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m178.27 57.202h9.3273v9.3273h-9.3273z" fill="#3c5c34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6-82.708h9.3273v9.3273h-9.3273z" fill="#426439" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6-73.381h9.3273v9.3273h-9.3273z" fill="#476d3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6-64.054h9.3273v9.3273h-9.3273z" fill="#548049" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6-54.726h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6-45.399h9.3273v9.3273h-9.3273z" fill="#517c46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6-36.072h9.3273v9.3273h-9.3273z" fill="#406137" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6-26.744h9.3273v9.3273h-9.3273z" fill="#547f48" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6-17.417h9.3273v9.3273h-9.3273z" fill="#3f6036" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6-8.0896h9.3273v9.3273h-9.3273z" fill="#476c3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6 1.2377h9.3273v9.3273h-9.3273z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6 10.565h9.3273v9.3273h-9.3273z" fill="#406137" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6 19.892h9.3273v9.3273h-9.3273z" fill="#3c5b34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6 29.22h9.3273v9.3273h-9.3273z" fill="#3d5d34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6 38.547h9.3273v9.3273h-9.3273z" fill="#4b7341" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6 47.874h9.3273v9.3273h-9.3273z" fill="#426439" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m187.6 57.202h9.3273v9.3273h-9.3273z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93-82.708h9.3273v9.3273h-9.3273z" fill="#436639" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93-73.381h9.3273v9.3273h-9.3273z" fill="#5f9152" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93-64.054h9.3273v9.3273h-9.3273z" fill="#426439" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93-54.726h9.3273v9.3273h-9.3273z" fill="#466a3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93-45.399h9.3273v9.3273h-9.3273z" fill="#537f48" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93-36.072h9.3273v9.3273h-9.3273z" fill="#3a5932" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93-26.744h9.3273v9.3273h-9.3273z" fill="#476b3d" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93-17.417h9.3273v9.3273h-9.3273z" fill="#466a3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93-8.0896h9.3273v9.3273h-9.3273z" fill="#416338" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93 1.2377h9.3273v9.3273h-9.3273z" fill="#45693c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93 10.565h9.3273v9.3273h-9.3273z" fill="#466a3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93 19.892h9.3273v9.3273h-9.3273z" fill="#57854b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93 29.22h9.3273v9.3273h-9.3273z" fill="#4d7643" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93 38.547h9.3273v9.3273h-9.3273z" fill="#4e7743" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93 47.874h9.3273v9.3273h-9.3273z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m196.93 57.202h9.3273v9.3273h-9.3273z" fill="#406237" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25-82.708h9.3273v9.3273h-9.3273z" fill="#517c46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25-73.381h9.3273v9.3273h-9.3273z" fill="#44683b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25-64.054h9.3273v9.3273h-9.3273z" fill="#3a5832" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25-54.726h9.3273v9.3273h-9.3273z" fill="#44673a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25-45.399h9.3273v9.3273h-9.3273z" fill="#3d5d35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25-36.072h9.3273v9.3273h-9.3273z" fill="#426539" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25-26.744h9.3273v9.3273h-9.3273z" fill="#517c46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25-17.417h9.3273v9.3273h-9.3273z" fill="#4e7743" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25-8.0896h9.3273v9.3273h-9.3273z" fill="#476d3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25 1.2377h9.3273v9.3273h-9.3273z" fill="#57854b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25 10.565h9.3273v9.3273h-9.3273z" fill="#426539" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25 19.892h9.3273v9.3273h-9.3273z" fill="#3e5e35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25 29.22h9.3273v9.3273h-9.3273z" fill="#507a45" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25 38.547h9.3273v9.3273h-9.3273z" fill="#426539" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25 47.874h9.3273v9.3273h-9.3273z" fill="#4c7442" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m206.25 57.202h9.3273v9.3273h-9.3273z" fill="#466b3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58-82.708h9.3273v9.3273h-9.3273z" fill="#36532f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58-73.381h9.3273v9.3273h-9.3273z" fill="#426439" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58-64.054h9.3273v9.3273h-9.3273z" fill="#3e5f36" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58-54.726h9.3273v9.3273h-9.3273z" fill="#517c46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58-45.399h9.3273v9.3273h-9.3273z" fill="#426539" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58-36.072h9.3273v9.3273h-9.3273z" fill="#45693c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58-26.744h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58-17.417h9.3273v9.3273h-9.3273z" fill="#3e5e35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58-8.0896h9.3273v9.3273h-9.3273z" fill="#4d7542" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58 1.2377h9.3273v9.3273h-9.3273z" fill="#466a3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58 10.565h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58 19.892h9.3273v9.3273h-9.3273z" fill="#3d5d34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58 29.22h9.3273v9.3273h-9.3273z" fill="#3b5a33" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58 38.547h9.3273v9.3273h-9.3273z" fill="#527d46" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58 47.874h9.3273v9.3273h-9.3273z" fill="#44673a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m215.58 57.202h9.3273v9.3273h-9.3273z" fill="#426539" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91-82.708h9.3273v9.3273h-9.3273z" fill="#45693b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91-73.381h9.3273v9.3273h-9.3273z" fill="#44673a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91-64.054h9.3273v9.3273h-9.3273z" fill="#59874c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91-54.726h9.3273v9.3273h-9.3273z" fill="#3d5d34" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91-45.399h9.3273v9.3273h-9.3273z" fill="#45693b" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91-36.072h9.3273v9.3273h-9.3273z" fill="#486e3e" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91-26.744h9.3273v9.3273h-9.3273z" fill="#466a3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91-17.417h9.3273v9.3273h-9.3273z" fill="#527d47" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91-8.0896h9.3273v9.3273h-9.3273z" fill="#3d5d35" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91 1.2377h9.3273v9.3273h-9.3273z" fill="#3f6036" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91 10.565h9.3273v9.3273h-9.3273z" fill="#466a3c" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91 19.892h9.3273v9.3273h-9.3273z" fill="#43663a" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91 29.22h9.3273v9.3273h-9.3273z" fill="#49703f" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91 38.547h9.3273v9.3273h-9.3273z" fill="#558149" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91 47.874h9.3273v9.3273h-9.3273z" fill="#3b5a33" stroke-width="0"/>
<path transform="matrix(.89442 .44722 -.89442 .44722 0 0)" d="m224.91 57.202h9.3273v9.3273h-9.3273z" fill="#4d7542" stroke-width="0"/>
<path d="m24.869 92.448v10.252l8.3496 4.1758v-10.252zm8.3496 14.428v10.254l16.699 8.3516v-10.254l-8.3496-4.1758zm16.699 18.605v10.252l8.3516 4.1758v-10.252zm8.3516 4.1758 25.049 12.527v-20.506l-8.3496-4.1758v10.252l-8.3496-4.1758v-20.504l-8.3496-4.1758v20.504zm25.049 12.527v10.252l-16.699-8.3516v10.254l25.049 12.527v-10.254l8.3516 4.1758 8.3496 4.1758v-10.252l-8.3496-4.1758v-10.252l-8.3516-4.1758v10.252zm25.051 12.527 8.3496 4.1758v-10.252l-8.3496-4.1758zm8.3496-6.0762 8.3496 4.1758v-10.254l-8.3496-4.1758zm8.3496 4.1758v10.252l8.3496 4.1758v10.254l8.3516 4.1758v-20.506l-8.3516-4.1758zm16.701 8.3516 8.3496 4.1758v-10.252l-8.3496-4.1777zm-116.9-58.463-8.3496-4.1758v10.252l8.3496 4.1758z" fill="#593d29" stroke-width="0"/>
<path d="m283.72 88.272-8.3516 4.1758v10.254l8.3516-4.1758zm-8.3516 14.43-16.699 8.3516v10.252l8.3496-4.1758v10.252l8.3496-4.1758v-10.252zm-16.699 8.3516v-10.254l-8.3496 4.1758v10.254zm-8.3496 4.1758-8.3496 4.1758v10.252l8.3496-4.1758zm-8.3496 14.428-8.3516 4.1758v-10.252l-8.3496 4.1758v10.252l-8.3496 4.1758v10.254l-16.699 8.3516v10.252l25.049-12.527v-10.252l8.3496-4.1758 8.3516-4.1758zm0 10.254v10.252l8.3496-4.1758v-10.252zm-25.051 2.2734v-20.504l-8.3496 4.1758v10.252l-8.3496 4.1758v-20.506l-8.3516 4.1758v30.76l8.3516-4.1777 8.3496-4.1758zm-25.051 12.529-8.3496 4.1758v10.252l8.3496-4.1758zm-8.3496 4.1758v-10.254l-16.699 8.3516v10.254l8.3496-4.1758zm-16.699-1.9023v-10.252l-8.3496 4.1758v10.252zm-8.3496 4.1758-8.3516 4.1758v10.254l8.3516-4.1758z" fill="#593d29" stroke-width="0"/>
<rect transform="matrix(.89439 .44729 0 1 0 0)" x="17.822" y="59.594" width="149.89" height="164.12" rx=".4735" ry=".53571" opacity=".182" style="paint-order:fill markers stroke"/>
<rect transform="matrix(-.89439 .44729 0 1 0 0)" x="-317.73" y="209.65" width="149.89" height="164.12" rx=".4735" ry=".53571" opacity=".392" style="paint-order:fill markers stroke"/>
</svg>

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

View File

@ -14,8 +14,10 @@ function toggleDarkMode() {
}
}
const darkToggle = document.getElementById("dark-toggle");
darkToggle.checked = html.className === "dark";
darkToggle.onclick = toggleDarkMode;
if (darkToggle) {
darkToggle.checked = html.className === "dark";
darkToggle.onclick = toggleDarkMode;
}
// github commit fetcher
// pulled from CommitStatBox.vue
const FEED_URL = "https://api.github.com/users/potatoeggy/events";
@ -24,6 +26,10 @@ const latestEvent = results.find((e) => e.type === "PushEvent");
const latestCommit = latestEvent.payload.commits[0];
const commitImg = document.getElementById("github-commit-img");
const commitAnchor = document.getElementById("github-commit-a");
commitImg.src = `https://opengraph.githubassets.com/hash/${latestEvent.repo.name}/commit/${latestCommit.sha}`;
commitAnchor.href = `https://github.com/${latestEvent.repo.name}/commit/${latestCommit.sha}`;
if (commitImg) {
commitImg.src = `https://opengraph.githubassets.com/hash/${latestEvent.repo.name}/commit/${latestCommit.sha}`;
}
if (commitAnchor) {
commitAnchor.href = `https://github.com/${latestEvent.repo.name}/commit/${latestCommit.sha}`;
}
export {};

View File

@ -20,9 +20,14 @@ function toggleDarkMode() {
}
}
const darkToggle = document.getElementById("dark-toggle") as HTMLInputElement;
darkToggle.checked = html.className === "dark";
darkToggle.onclick = toggleDarkMode;
const darkToggle = document.getElementById(
"dark-toggle"
) as HTMLInputElement | null;
if (darkToggle) {
darkToggle.checked = html.className === "dark";
darkToggle.onclick = toggleDarkMode;
}
// github commit fetcher
// pulled from CommitStatBox.vue
@ -35,13 +40,18 @@ const latestCommit = latestEvent.payload.commits[0];
const commitImg = document.getElementById(
"github-commit-img"
) as HTMLImageElement;
) as HTMLImageElement | null;
const commitAnchor = document.getElementById(
"github-commit-a"
) as HTMLAnchorElement;
commitImg.src = `https://opengraph.githubassets.com/hash/${latestEvent.repo.name}/commit/${latestCommit.sha}`;
commitAnchor.href = `https://github.com/${latestEvent.repo.name}/commit/${latestCommit.sha}`;
if (commitImg) {
commitImg.src = `https://opengraph.githubassets.com/hash/${latestEvent.repo.name}/commit/${latestCommit.sha}`;
}
if (commitAnchor) {
commitAnchor.href = `https://github.com/${latestEvent.repo.name}/commit/${latestCommit.sha}`;
}
// to make this an esm module for top-level await
export {};

View File

@ -1,13 +0,0 @@
import { serverQueryContent } from "#content/server";
import { SitemapStream, streamToPromise } from "sitemap";
export default defineEventHandler(async (event) => {
// Fetch all documents
const docs = await serverQueryContent(event).find();
const sitemap = new SitemapStream({ hostname: "https://eggworld.me" });
for (const doc of docs) {
sitemap.write({ url: doc._path, changefreq: "monthly" });
}
sitemap.end();
return streamToPromise(sitemap);
});

View File

@ -1,4 +1,4 @@
import type { BlogParsedContent, StoryParsedContent } from "./types";
import type { AnyParsedContent } from "./types";
import readingTime from "reading-time";
import dayjs from "dayjs";
import utc from "dayjs/plugin/utc.js";
@ -28,17 +28,17 @@ function search(obj: Record<string, any>, results: string[] = []) {
return results;
}
export function calcReadingTime(doc: BlogParsedContent | StoryParsedContent) {
export function calcReadingTime(doc: AnyParsedContent) {
let body: string[] = search(doc.body);
return readingTime(body.join(" "));
}
export function getPrettyDate(doc: BlogParsedContent | StoryParsedContent) {
export function getPrettyDate(doc: AnyParsedContent) {
const date = dayjs(doc.date).utc();
return date.format("DD MMM YYYY");
}
export function getUtcDate(doc: BlogParsedContent | StoryParsedContent) {
export function getUtcDate(doc: AnyParsedContent) {
const date = dayjs(doc.date).utc();
return date.format("YYYY-MM-DD");
}

2
shared/types.d.ts vendored
View File

@ -24,3 +24,5 @@ interface StoryParsedContent extends ParsedContent {
readingTime: ReadingTime;
nopreview?: boolean;
}
type AnyParsedContent = BlogParsedContent | StoryParsedContent;

View File

@ -1,4 +1,48 @@
/** @type {import('tailwindcss').Config} */
export default {
darkMode: "class",
theme: {
extend: {
typography: ({ theme }) => ({
DEFAULT: {
css: [
{
'--tw-prose-body': theme('colors.gray[900]'),
'--tw-prose-invert-body': theme('colors.gray[100]'),
hr: {
marginTop: "1.5em",
marginBottom: "1.5em",
},
a: {
textDecoration: "underline",
fontWeight: "inherit",
},
"h1 a": {
textDecoration: "inherit",
},
"h2 a": {
textDecoration: "inherit",
},
"h3 a": {
textDecoration: "inherit",
},
"h4 a": {
textDecoration: "inherit",
},
"h5 a": {
textDecoration: "inherit",
},
"h6 a": {
textDecoration: "inherit",
},
"h1, h2, h3, h4, h5, h6": {
fontFamily: "Bitter, sans-serif",
},
},
],
},
}),
},
},
plugins: [require("@tailwindcss/typography")],
};

8656
yarn.lock

File diff suppressed because it is too large Load Diff