From 828559a6a129dd6a619bb7f5db3b3b82d7244952 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 25 Apr 2023 11:18:03 +0200 Subject: [PATCH 001/111] fix: Upload script is working again --- scripts/upload-media.pl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/upload-media.pl b/scripts/upload-media.pl index bc33462..98e88ee 100755 --- a/scripts/upload-media.pl +++ b/scripts/upload-media.pl @@ -9,8 +9,8 @@ my $main_bucket = "badhouseplants-minio:/badhouseplants-net-main"; # -- I'm doing all of it because I can't undestand # -- how not to send 300Mb to the buildah context # -------------------------------------------------- -chomp($git_branch); -chomp($git_commit_sha); +chop($git_branch); +chop($git_commit_sha); print `cp -r . /tmp/$git_commit_sha` or die; @@ -19,9 +19,9 @@ print `git -C /tmp/$git_commit_sha lfs pull` or die; print "Creating a new hashed dir in the common bucket\n"; -print `rclone copy -P /tmp/$git_commit_sha/static "$common_bucket/$git_commit_sha"` or die; +print `rclone copy /tmp/$git_commit_sha/static "$common_bucket/$git_commit_sha"` or die; if ( $git_branch eq $main_branch) { print "Syncing to the production bucket\n"; - print `rclone sync -P "$common_bucket/$git_commit_sha" "$main_bucket/"` or die; + print `rclone sync "$common_bucket/$git_commit_sha" "$main_bucket/"` or die; } -- 2.45.2 From 71b9ab544bbe7445237c3153e1ffc019d8c52716 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 25 Apr 2023 09:52:51 +0200 Subject: [PATCH 002/111] release: Oveleane - Trace --- content/music/index.md | 2 +- content/posts/oveleane-trace/index.md | 23 +++++++++++++++++++ layouts/partials/comments.html | 3 --- ...ind.jpg => Oveleane-Four_Steps_Behind.jpg} | 0 static/music/Oveleane-Trace.png | 3 +++ 5 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 content/posts/oveleane-trace/index.md rename static/music/{Oveleane - Four Steps Behind.jpg => Oveleane-Four_Steps_Behind.jpg} (100%) create mode 100644 static/music/Oveleane-Trace.png diff --git a/content/music/index.md b/content/music/index.md index 8e9632b..b4e5f2a 100644 --- a/content/music/index.md +++ b/content/music/index.md @@ -79,7 +79,7 @@ Everything that's created by me, can be found on my [funkwhale instance](https:/ #### Four Steps Behind ->![Cover](/music/Oveleane%20-%20Four%20Steps%20Behind.jpg) +>![Cover](/music/Oveleane-Four_Steps_Behind.jpg) >Release Date: 2022-12-05 > >Genre: Electronic diff --git a/content/posts/oveleane-trace/index.md b/content/posts/oveleane-trace/index.md new file mode 100644 index 0000000..6872989 --- /dev/null +++ b/content/posts/oveleane-trace/index.md @@ -0,0 +1,23 @@ +--- +title: "Oveleane - Trace" +date: 2023-04-26T06:00:00+02:00 +draft: false +ShowToc: true +cover: + image: "/music/Oveleane-Trace.png" + caption: "Oveleane - Trace" + relative: false + responsiveImages: false +--- + +>Release Date: 2022-06-08 +> +>Genre: House, Electronic Music, Trance + +[Spotify](https://open.spotify.com/album/0nex56kDAF3e6bUXUHfN9m?si=VLL7VxiVT3GC9UqxSaYVWg) - [Apple Music](https://music.apple.com/us/album/1679303733) - [Deezer](https://www.deezer.com/de/album/422414177) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/14/) + +{{< rawhtml >}} + +{{< /rawhtml >}} + + diff --git a/layouts/partials/comments.html b/layouts/partials/comments.html index 3404e56..a43970b 100644 --- a/layouts/partials/comments.html +++ b/layouts/partials/comments.html @@ -1,7 +1,4 @@
-
-

Comments are in the beta testing stage.

-
+ +{{- if (not site.Params.disableScrollToTop) }} + +{{- end }} + +{{- if (not site.Params.disableThemeToggle) }} + +{{- end }} + +{{- if (and (eq .Kind "page") (ne .Layout "archives") (ne .Layout "search") (.Param "ShowCodeCopyButtons")) }} + +{{- end }} diff --git a/src/themes/papermod/layouts/partials/head.html b/src/themes/papermod/layouts/partials/head.html new file mode 100644 index 0000000..35257fc --- /dev/null +++ b/src/themes/papermod/layouts/partials/head.html @@ -0,0 +1,170 @@ + + + +{{- if hugo.IsProduction | or (eq site.Params.env "production") | and (ne .Params.robotsNoIndex true) }} + +{{- else }} + +{{- end }} + +{{- /* Title */}} +{{ if .IsHome }}{{ else }}{{ if .Title }}{{ .Title }} | {{ end }}{{ end }}{{ site.Title }} + +{{- /* Meta */}} +{{- if .IsHome }} +{{ with site.Params.keywords -}}{{ end }} +{{- else }} + +{{- end }} + + + +{{- if site.Params.analytics.google.SiteVerificationTag }} + +{{- end }} +{{- if site.Params.analytics.yandex.SiteVerificationTag }} + +{{- end }} +{{- if site.Params.analytics.bing.SiteVerificationTag }} + +{{- end }} +{{- if site.Params.analytics.naver.SiteVerificationTag }} + +{{- end }} + +{{- /* Styles */}} + +{{- /* includes */}} +{{- $includes := slice }} +{{- $includes = $includes | append (" " | resources.FromString "assets/css/includes-blank.css")}} + +{{- if not (eq site.Params.assets.disableScrollBarStyle true) }} + {{- $ScrollStyle := (resources.Get "css/includes/scroll-bar.css") }} + {{- $includes = (append $ScrollStyle $includes) }} +{{- end }} + +{{- $includes_all := $includes | resources.Concat "assets/css/includes.css" }} + +{{- $theme_vars := (resources.Get "css/core/theme-vars.css") }} +{{- $reset := (resources.Get "css/core/reset.css") }} +{{- $media := (resources.Get "css/core/zmedia.css") }} +{{- $license_css := (resources.Get "css/core/license.css") }} +{{- $common := (resources.Match "css/common/*.css") | resources.Concat "assets/css/common.css" }} + +{{- /* include `an-old-hope` if hljs is on */}} +{{- $isHLJSdisabled := (site.Params.assets.disableHLJS | default false) }} +{{- $hljs := (cond ($isHLJSdisabled) (".chroma { background-color: unset !important;}" | resources.FromString "assets/css/hljs-blank.css") (resources.Get "css/hljs/an-old-hope.min.css")) }} + +{{- /* order is important */}} +{{- $core := (slice $theme_vars $reset $common $hljs $includes_all $media) | resources.Concat "assets/css/core.css" | resources.Minify }} +{{- $extended := (resources.Match "css/extended/*.css") | resources.Concat "assets/css/extended.css" | resources.Minify }} + +{{- /* bundle all required css */}} +{{- /* Add extended css after theme style */ -}} +{{- $stylesheet := (slice $license_css $core $extended) | resources.Concat "assets/css/stylesheet.css" }} + +{{- if not site.Params.assets.disableFingerprinting }} +{{- $stylesheet := $stylesheet | fingerprint }} + +{{- else }} + +{{- end }} + +{{- /* Search */}} +{{- if (eq .Layout `search`) -}} + +{{- $fastsearch := resources.Get "js/fastsearch.js" | js.Build (dict "params" (dict "fuseOpts" site.Params.fuseOpts)) | resources.Minify }} +{{- $fusejs := resources.Get "js/fuse.basic.min.js" }} +{{- $license_js := resources.Get "js/license.js" }} +{{- if not site.Params.assets.disableFingerprinting }} +{{- $search := (slice $fusejs $license_js $fastsearch ) | resources.Concat "assets/js/search.js" | fingerprint }} + +{{- else }} +{{- $search := (slice $fusejs $fastsearch ) | resources.Concat "assets/js/search.js" }} + +{{- end }} +{{- end -}} + +{{- /* Highlight.js */}} +{{- $isHLJSdisabled := (site.Params.assets.disableHLJS | default .Params.disableHLJS ) }} +{{- if (and (eq .Kind "page") (ne .Layout "archives") (ne .Layout "search") (not $isHLJSdisabled)) }} +{{- if not site.Params.assets.disableFingerprinting }} +{{- $highlight := slice (resources.Get "js/highlight.min.js") | resources.Concat "assets/js/highlight.js" | fingerprint }} + +{{- else }} +{{- $highlight := slice (resources.Get "js/highlight.min.js") | resources.Concat "assets/js/highlight.js" }} + +{{- end }} +{{- end }} + +{{- /* Favicons */}} + + + + + + + + +{{- /* RSS */}} +{{ range .AlternativeOutputFormats -}} + +{{ end -}} +{{- range .AllTranslations -}} + +{{ end -}} + + + +{{- partial "extend_head.html" . -}} + +{{- /* Misc */}} +{{- if hugo.IsProduction | or (eq site.Params.env "production") }} +{{- template "_internal/google_analytics.html" . }} +{{- template "partials/templates/opengraph.html" . }} +{{- template "partials/templates/twitter_cards.html" . }} +{{- template "partials/templates/schema_json.html" . }} +{{- end -}} diff --git a/src/themes/papermod/layouts/partials/header.html b/src/themes/papermod/layouts/partials/header.html new file mode 100644 index 0000000..4a7291e --- /dev/null +++ b/src/themes/papermod/layouts/partials/header.html @@ -0,0 +1,149 @@ +{{- /* theme-toggle is enabled */}} +{{- if (not site.Params.disableThemeToggle) }} +{{- /* theme is light */}} +{{- if (eq site.Params.defaultTheme "light") }} + +{{- /* theme is dark */}} +{{- else if (eq site.Params.defaultTheme "dark") }} + +{{- else }} +{{- /* theme is auto */}} + +{{- end }} +{{- /* theme-toggle is disabled and theme is auto */}} +{{- else if (and (ne site.Params.defaultTheme "light") (ne site.Params.defaultTheme "dark"))}} + +{{- end }} + +
+ +
diff --git a/src/themes/papermod/layouts/partials/home_info.html b/src/themes/papermod/layouts/partials/home_info.html new file mode 100644 index 0000000..efae956 --- /dev/null +++ b/src/themes/papermod/layouts/partials/home_info.html @@ -0,0 +1,13 @@ +{{- with site.Params.homeInfoParams }} +
+
+

{{ .Title | markdownify }}

+
+
+ {{ .Content | markdownify }} +
+
+ {{ partial "social_icons.html" site.Params.socialIcons }} +
+
+{{- end -}} diff --git a/src/themes/papermod/layouts/partials/index_profile.html b/src/themes/papermod/layouts/partials/index_profile.html new file mode 100644 index 0000000..d9ddbda --- /dev/null +++ b/src/themes/papermod/layouts/partials/index_profile.html @@ -0,0 +1,58 @@ +
+ {{- with site.Params.profileMode }} +
+ {{- if .imageUrl -}} + {{- $img := "" }} + {{- if not (urls.Parse .imageUrl).IsAbs }} + {{- $img = resources.Get .imageUrl }} + {{- end }} + {{- if $img }} + {{- $processableFormats := (slice "jpg" "jpeg" "png" "tif" "bmp" "gif") -}} + {{- if hugo.IsExtended -}} + {{- $processableFormats = $processableFormats | append "webp" -}} + {{- end -}} + {{- $prod := (hugo.IsProduction | or (eq site.Params.env "production")) }} + {{- if and (in $processableFormats $img.MediaType.SubType) (eq $prod true)}} + {{- if (not (and (not .imageHeight) (not .imageWidth))) }} + {{- $img = $img.Resize (printf "%dx%d" .imageWidth .imageHeight) }} + {{- else if .imageHeight }} + {{- $img = $img.Resize (printf "x%d" .imageHeight) }} + {{ else if .imageWidth }} + {{- $img = $img.Resize (printf "%dx" .imageWidth) }} + {{ else }} + {{- $img = $img.Resize "150x150" }} + {{- end }} + {{- end }} + {{ .imageTitle | default + {{- else }} + {{ .imageTitle | default + {{- end }} + {{- end }} +

{{ .title | default site.Title | markdownify }}

+ {{ .subtitle | markdownify }} + {{- partial "social_icons.html" site.Params.socialIcons -}} + + {{- with .buttons }} + + {{- end }} +
+ {{- end}} +
diff --git a/src/themes/papermod/layouts/partials/post_canonical.html b/src/themes/papermod/layouts/partials/post_canonical.html new file mode 100644 index 0000000..abfc1e3 --- /dev/null +++ b/src/themes/papermod/layouts/partials/post_canonical.html @@ -0,0 +1,9 @@ +{{ if and (.Params.canonicalURL) (.Params.ShowCanonicalLink ) -}} +{{ $url := urls.Parse .Params.canonicalURL }} + +{{- if or .Params.author site.Params.author (.Param "ShowReadingTime") (not .Date.IsZero) .IsTranslated (or .Params.editPost.URL site.Params.editPost.URL) }} | {{- end -}} + + {{- (site.Params.CanonicalLinkText | default .Params.CanonicalLinkText) | default "Originally published at" -}} +  {{ $url.Host }} + +{{- end }} diff --git a/src/themes/papermod/layouts/partials/post_meta.html b/src/themes/papermod/layouts/partials/post_meta.html new file mode 100644 index 0000000..15b8b1b --- /dev/null +++ b/src/themes/papermod/layouts/partials/post_meta.html @@ -0,0 +1,21 @@ +{{- $scratch := newScratch }} + +{{- if not .Date.IsZero -}} +{{- $scratch.Add "meta" (slice (printf "%s" (.Date) (.Date | time.Format (default "January 2, 2006" site.Params.DateFormat)))) }} +{{- end }} + +{{- if (.Param "ShowReadingTime") -}} +{{- $scratch.Add "meta" (slice (i18n "read_time" .ReadingTime | default (printf "%d min" .ReadingTime))) }} +{{- end }} + +{{- if (.Param "ShowWordCount") -}} +{{- $scratch.Add "meta" (slice (i18n "words" .WordCount | default (printf "%d words" .WordCount))) }} +{{- end }} + +{{- with (partial "author.html" .) }} +{{- $scratch.Add "meta" (slice .) }} +{{- end }} + +{{- with ($scratch.Get "meta") }} +{{- delimit . " · " -}} +{{- end -}} diff --git a/src/themes/papermod/layouts/partials/post_nav_links.html b/src/themes/papermod/layouts/partials/post_nav_links.html new file mode 100644 index 0000000..b988641 --- /dev/null +++ b/src/themes/papermod/layouts/partials/post_nav_links.html @@ -0,0 +1,19 @@ +{{- $pages := where site.RegularPages "Type" "in" site.Params.mainSections }} +{{- if and (gt (len $pages) 1) (in $pages . ) }} + +{{- end }} diff --git a/src/themes/papermod/layouts/partials/share_icons.html b/src/themes/papermod/layouts/partials/share_icons.html new file mode 100644 index 0000000..59ed050 --- /dev/null +++ b/src/themes/papermod/layouts/partials/share_icons.html @@ -0,0 +1,71 @@ +{{- $pageurl := .Permalink }} +{{- $title := .Title }} + +{{- $.Scratch.Set "tags" ""}} + +{{- with .Params.Tags }} +{{- $hashtags := newScratch}} +{{- range . }}{{ $hashtags.Add "tags" (slice (replaceRE "(\\s)" "" . ))}}{{end}} +{{- $.Scratch.Set "tags" (delimit ($hashtags.Get "tags") ",") }} +{{- end -}} + +{{- $custom := false }} +{{- $ShareButtons := (.Param "ShareButtons")}} +{{- with $ShareButtons }}{{ $custom = true }}{{ end }} + + \ No newline at end of file diff --git a/src/themes/papermod/layouts/partials/social_icons.html b/src/themes/papermod/layouts/partials/social_icons.html new file mode 100644 index 0000000..3f8d6a3 --- /dev/null +++ b/src/themes/papermod/layouts/partials/social_icons.html @@ -0,0 +1,7 @@ + diff --git a/src/themes/papermod/layouts/partials/svg.html b/src/themes/papermod/layouts/partials/svg.html new file mode 100644 index 0000000..49f5389 --- /dev/null +++ b/src/themes/papermod/layouts/partials/svg.html @@ -0,0 +1,649 @@ +{{- $icon_name := ( trim .name " " | lower )}} +{{- if (eq $icon_name "123rf") -}} + + + + +{{- else if (eq $icon_name "adobestock") -}} + + + + +{{- else if (eq $icon_name "anilist") -}} + + + +{{- else if (eq $icon_name "applemusic") -}} + + + +{{- else if (eq $icon_name "applepodcasts") -}} + + + +{{- else if (eq $icon_name "behance") -}} + + + +{{- else if (eq $icon_name "bilibili") -}} + + + + + + + +{{- else if (eq $icon_name "bitcoin") -}} + + + +{{- else if (eq $icon_name "buymeacoffee") -}} + + + + + + + + + + + + + + + + +{{- else if (eq $icon_name "codepen") -}} + + + + + + + +{{- else if (eq $icon_name "cryptohack") -}} + + + + + + +{{- else if (eq $icon_name "ctftime") -}} + + + + + + +{{- else if (eq $icon_name "cv") -}} + + + + + + +{{- else if (eq $icon_name "dev") -}} + + + +{{- else if (eq $icon_name "deviantart") -}} + + + +{{- else if (eq $icon_name "deezer") -}} + + + +{{- else if (eq $icon_name "discogs") -}} + + + +{{- else if (eq $icon_name "discord") -}} + + + + +{{- else if (eq $icon_name "dreamstime") -}} + + + +{{- else if (eq $icon_name "dribbble") -}} + + + + + +{{- else if (eq $icon_name "email") -}} + + + + +{{- else if (eq $icon_name "facebook") -}} + + + +{{- else if (eq $icon_name "flickr") -}} + + + +{{- else if (eq $icon_name "freepik") -}} + + + + + + +{{- else if (eq $icon_name "gitea") -}} + + + +{{- else if (eq $icon_name "github") -}} + + + + +{{- else if (eq $icon_name "gitlab") -}} + + + + +{{- else if (eq $icon_name "goodreads") -}} + + + +{{- else if (eq $icon_name "googlepodcasts") -}} + + + +{{- else if (eq $icon_name "googlescholar") -}} + + + +{{- else if (eq $icon_name "gurushots") -}} + + + + + + + + + + + + +{{- else if (eq $icon_name "hackerone") -}} + + + +{{- else if (eq $icon_name "hackerrank") -}} + + + + + + +{{- else if (eq $icon_name "hackthebox") -}} + + + + + + +{{- else if (eq $icon_name "instagram") -}} + + + + + +{{- else if (eq $icon_name "itchio") -}} + + + +{{- else if (eq $icon_name "kaggle") -}} + + + +{{- else if (eq $icon_name "kakaotalk") -}} + + + + + + + +{{- else if (eq $icon_name "keybase") -}} + + + +{{- else if (eq $icon_name "kofi") -}} + + + +{{- else if (eq $icon_name "komoot") -}} + + + +{{- else if (eq $icon_name "lastfm") -}} + + + +{{- else if (eq $icon_name "letterboxd") -}} + + + +{{- else if (eq $icon_name "liberapay") -}} + + + + + + +{{- else if (eq $icon_name "lichess" ) -}} + + + +{{- else if (eq $icon_name "linkedin") -}} + + + + + +{{- else if (eq $icon_name "mastodon") -}} + + + + +{{- else if (eq $icon_name "matrix") -}} + + + +{{- else if (eq $icon_name "medium") -}} + + + + + +{{- else if (eq $icon_name "microblog") -}} + + + + + + +{{- else if (eq $icon_name "mixcloud") -}} + + + +{{- else if (eq $icon_name "monero") -}} + + + +{{- else if (eq $icon_name "nuget") -}} + + + + + + + + +{{- else if (eq $icon_name "orcid") -}} + + + +{{- else if (eq $icon_name "osu!") -}} + + + + + + +{{- else if (eq $icon_name "overcast") -}} + + + +{{- else if (eq $icon_name "patreon") -}} + + + +{{- else if (eq $icon_name "paypal") -}} + + + +{{- else if (eq $icon_name "peertube") -}} + + + +{{- else if or (eq $icon_name "pgpkey") (eq $icon_name "key") -}} + + + + +{{- else if (eq $icon_name "phone") -}} + + + + + +{{- else if (eq $icon_name "pocketcasts") -}} + + + +{{- else if (eq $icon_name "polywork") -}} + +{{- else if (eq $icon_name "qq") -}} + + + + +{{- else if (eq $icon_name "reddit") -}} + + + +{{- else if (eq $icon_name "researchgate") -}} + + + +{{- else if (eq $icon_name "rss") -}} + + + + + +{{- else if (eq $icon_name "serverfault") -}} + + + +{{- else if (eq $icon_name "sessionmessenger") -}} + + + + +{{- else if (eq $icon_name "soundcloud") -}} + + + +{{- else if (eq $icon_name "shutterstock") -}} + + + + +{{- else if (eq $icon_name "sketchfab") -}} + + + +{{- else if (eq $icon_name "slack") -}} + + + + + + + +{{- else if (eq $icon_name "snapchat") -}} + + + +{{- else if (eq $icon_name "sourcehut") -}} + + + + +{{- else if (eq $icon_name "spotify") -}} + + + +{{- else if (eq $icon_name "stackoverflow") -}} + + + +{{- else if (eq $icon_name "steam") -}} + + + + + + + + + +{{- else if (eq $icon_name "strava") -}} + + + +{{- else if (eq $icon_name "telegram") -}} + + + +{{- else if (eq $icon_name "threema") -}} + + + +{{- else if (eq $icon_name "tiktok") -}} + + + +{{- else if (eq $icon_name "twitch") -}} + + + +{{- else if (eq $icon_name "twitter") -}} + + + + +{{- else if (eq $icon_name "unsplash") -}} + + + + +{{- else if (eq $icon_name "vimeo") -}} + + + +{{- else if (eq $icon_name "xda") -}} + + + +{{- else if (eq $icon_name "xing") -}} + + + + +{{- else if (eq $icon_name "xmpp") -}} + + + + +{{- else if (eq $icon_name "ycombinator") -}} + + + +{{- else if (eq $icon_name "youtube") -}} + + + + + +{{- else if $icon_name -}} + + + + +{{- end -}} diff --git a/src/themes/papermod/layouts/partials/templates/opengraph.html b/src/themes/papermod/layouts/partials/templates/opengraph.html new file mode 100644 index 0000000..9e8df14 --- /dev/null +++ b/src/themes/papermod/layouts/partials/templates/opengraph.html @@ -0,0 +1,52 @@ + + + + +{{- if .Params.cover.image -}} +{{- if (ne .Params.cover.relative true) }} + +{{- else}} + +{{- end}} +{{- else }} + +{{- with $.Params.images -}} +{{- range first 6 . }}{{ end -}} +{{- else -}} +{{- $images := $.Resources.ByType "image" -}} +{{- $featured := $images.GetMatch "*feature*" -}} +{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}} +{{- with $featured -}} + +{{- else -}} +{{- with site.Params.images }}{{ end -}} +{{- end -}} +{{- end -}} +{{- end }} + +{{- if .IsPage }} +{{- $iso8601 := "2006-01-02T15:04:05-07:00" -}} + +{{ with .PublishDate }}{{ end }} +{{ with .Lastmod }}{{ end }} +{{- end -}} + +{{- with .Params.audio }}{{ end }} +{{- with .Params.locale }}{{ end }} +{{- with site.Params.title }}{{ end }} +{{- with .Params.videos }}{{- range . }} + +{{ end }}{{ end }} + +{{- /* If it is part of a series, link to related articles */}} +{{- $permalink := .Permalink }} +{{- $siteSeries := site.Taxonomies.series }} +{{ with .Params.series }}{{- range $name := . }} + {{- $series := index $siteSeries ($name | urlize) }} + {{- range $page := first 6 $series.Pages }} + {{- if ne $page.Permalink $permalink }}{{ end }} + {{- end }} +{{ end }}{{ end }} + +{{- /* Facebook Page Admin ID for Domain Insights */}} +{{- with site.Social.facebook_admin }}{{ end }} diff --git a/src/themes/papermod/layouts/partials/templates/schema_json.html b/src/themes/papermod/layouts/partials/templates/schema_json.html new file mode 100644 index 0000000..74abbb5 --- /dev/null +++ b/src/themes/papermod/layouts/partials/templates/schema_json.html @@ -0,0 +1,119 @@ +{{ if .IsHome }} + +{{- else if (or .IsPage .IsSection) }} +{{/* BreadcrumbList */}} +{{- $url := replace .Parent.Permalink ( printf "%s" site.BaseURL) "" }} +{{- $lang_url := strings.TrimPrefix ( printf "%s/" .Lang) $url }} +{{- $bc_list := (split $lang_url "/")}} + +{{- $scratch := newScratch }} + +{{- if .IsPage }} + +{{- end }}{{/* .IsPage end */}} + +{{- end -}} diff --git a/src/themes/papermod/layouts/partials/templates/twitter_cards.html b/src/themes/papermod/layouts/partials/templates/twitter_cards.html new file mode 100644 index 0000000..bd46e37 --- /dev/null +++ b/src/themes/papermod/layouts/partials/templates/twitter_cards.html @@ -0,0 +1,33 @@ +{{- if .Params.cover.image -}} + +{{- if (ne $.Params.cover.relative true) }} + +{{- else }} + +{{- end}} +{{- else }} +{{- with $.Params.images -}} + + +{{ else -}} +{{- $images := $.Resources.ByType "image" -}} +{{- $featured := $images.GetMatch "*feature*" -}} +{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}} +{{- with $featured -}} + + +{{- else -}} +{{- with site.Params.images -}} + + +{{ else -}} + +{{- end -}} +{{- end -}} +{{- end }} +{{- end }} + + +{{ with site.Social.twitter -}} + +{{ end -}} diff --git a/src/themes/papermod/layouts/partials/toc.html b/src/themes/papermod/layouts/partials/toc.html new file mode 100644 index 0000000..d9b8b23 --- /dev/null +++ b/src/themes/papermod/layouts/partials/toc.html @@ -0,0 +1,97 @@ +{{- $headers := findRE "(.|\n])+?" .Content -}} +{{- $has_headers := ge (len $headers) 1 -}} +{{- if $has_headers -}} +
+
+ + {{- i18n "toc" | default "Table of Contents" }} + + +
+ {{- if (.Param "UseHugoToc") }} + {{- .TableOfContents -}} + {{- else }} + {{- $largest := 6 -}} + {{- range $headers -}} + {{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}} + {{- $headerLevel := len (seq $headerLevel) -}} + {{- if lt $headerLevel $largest -}} + {{- $largest = $headerLevel -}} + {{- end -}} + {{- end -}} + + {{- $firstHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers 0) 1) 0)) -}} + + {{- $.Scratch.Set "bareul" slice -}} +
    + {{- range seq (sub $firstHeaderLevel $largest) -}} +
      + {{- $.Scratch.Add "bareul" (sub (add $largest .) 1) -}} + {{- end -}} + {{- range $i, $header := $headers -}} + {{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}} + {{- $headerLevel := len (seq $headerLevel) -}} + + {{/* get id="xyz" */}} + {{- $id := index (findRE "(id=\"(.*?)\")" $header 9) 0 }} + + {{- /* strip id="" to leave xyz, no way to get regex capturing groups in hugo */ -}} + {{- $cleanedID := replace (replace $id "id=\"" "") "\"" "" }} + {{- $header := replaceRE "((.|\n])+?)" "$1" $header -}} + + {{- if ne $i 0 -}} + {{- $prevHeaderLevel := index (findRE "[1-6]" (index $headers (sub $i 1)) 1) 0 -}} + {{- $prevHeaderLevel := len (seq $prevHeaderLevel) -}} + {{- if gt $headerLevel $prevHeaderLevel -}} + {{- range seq $prevHeaderLevel (sub $headerLevel 1) -}} +
        + {{/* the first should not be recorded */}} + {{- if ne $prevHeaderLevel . -}} + {{- $.Scratch.Add "bareul" . -}} + {{- end -}} + {{- end -}} + {{- else -}} + + {{- if lt $headerLevel $prevHeaderLevel -}} + {{- range seq (sub $prevHeaderLevel 1) -1 $headerLevel -}} + {{- if in ($.Scratch.Get "bareul") . -}} +
      + {{/* manually do pop item */}} + {{- $tmp := $.Scratch.Get "bareul" -}} + {{- $.Scratch.Delete "bareul" -}} + {{- $.Scratch.Set "bareul" slice}} + {{- range seq (sub (len $tmp) 1) -}} + {{- $.Scratch.Add "bareul" (index $tmp (sub . 1)) -}} + {{- end -}} + {{- else -}} +
    + + {{- end -}} + {{- end -}} + {{- end -}} + {{- end }} +
  • + {{- $header | safeHTML -}} + {{- else }} +
  • + {{- $header | safeHTML -}} + {{- end -}} + {{- end -}} + + {{- $firstHeaderLevel := $largest }} + {{- $lastHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers (sub (len $headers) 1)) 1) 0)) }} +
  • + {{- range seq (sub $lastHeaderLevel $firstHeaderLevel) -}} + {{- if in ($.Scratch.Get "bareul") (add . $firstHeaderLevel) }} +
+ {{- else }} + + + {{- end -}} + {{- end }} + + {{- end }} +
+
+
+{{- end }} diff --git a/src/themes/papermod/layouts/partials/translation_list.html b/src/themes/papermod/layouts/partials/translation_list.html new file mode 100644 index 0000000..0028251 --- /dev/null +++ b/src/themes/papermod/layouts/partials/translation_list.html @@ -0,0 +1,19 @@ +{{- if .IsTranslated -}} +{{- if (ne .Layout "search") }} +{{- if or .Params.author site.Params.author (.Param "ShowReadingTime") (not .Date.IsZero) }} | {{- end -}} +{{- end }} +{{- i18n "translations" | default "Translations" }}: + +{{- end -}} diff --git a/src/themes/papermod/layouts/robots.txt b/src/themes/papermod/layouts/robots.txt new file mode 100644 index 0000000..f26f508 --- /dev/null +++ b/src/themes/papermod/layouts/robots.txt @@ -0,0 +1,7 @@ +User-agent: * +{{- if hugo.IsProduction | or (eq site.Params.env "production") }} +Disallow: +{{- else }} +Disallow: / +{{- end }} +Sitemap: {{ "sitemap.xml" | absURL }} diff --git a/src/themes/papermod/layouts/shortcodes/collapse.html b/src/themes/papermod/layouts/shortcodes/collapse.html new file mode 100644 index 0000000..17d8d3b --- /dev/null +++ b/src/themes/papermod/layouts/shortcodes/collapse.html @@ -0,0 +1,8 @@ +{{ if .Get "summary" }} +{{ else }} +{{ warnf "missing value for param 'summary': %s" .Position }} +{{ end }} +

+ {{ .Get "summary" | markdownify }} + {{ .Inner | markdownify }} +

diff --git a/src/themes/papermod/layouts/shortcodes/figure.html b/src/themes/papermod/layouts/shortcodes/figure.html new file mode 100644 index 0000000..8c93eff --- /dev/null +++ b/src/themes/papermod/layouts/shortcodes/figure.html @@ -0,0 +1,31 @@ + + {{- if .Get "link" -}} + + {{- end }} + {{ with .Get + {{- if .Get "link" }}{{ end -}} + {{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}} +
+ {{ with (.Get "title") -}} + {{ . }} + {{- end -}} + {{- if or (.Get "caption") (.Get "attr") -}}

+ {{- .Get "caption" | markdownify -}} + {{- with .Get "attrlink" }} + + {{- end -}} + {{- .Get "attr" | markdownify -}} + {{- if .Get "attrlink" }}{{ end }}

+ {{- end }} +
+ {{- end }} + diff --git a/src/themes/papermod/layouts/shortcodes/inTextImg.html b/src/themes/papermod/layouts/shortcodes/inTextImg.html new file mode 100644 index 0000000..0239fd6 --- /dev/null +++ b/src/themes/papermod/layouts/shortcodes/inTextImg.html @@ -0,0 +1,5 @@ +{{- $Img := (.Get "url") }} +{{- $height := (.Get "height") }} +{{- $alt := (.Get "alt") }} + +{{$alt}} diff --git a/src/themes/papermod/layouts/shortcodes/ltr.html b/src/themes/papermod/layouts/shortcodes/ltr.html new file mode 100644 index 0000000..4ad7682 --- /dev/null +++ b/src/themes/papermod/layouts/shortcodes/ltr.html @@ -0,0 +1,15 @@ +{{ $.Scratch.Set "md" false }} + +{{ if .IsNamedParams }} +{{ $.Scratch.Set "md" (.Get "md") }} +{{ else }} +{{ $.Scratch.Set "md" (.Get 0) }} +{{ end }} + +
+ {{ if eq ($.Scratch.Get "md") false }} + {{ .Inner }} + {{ else }} + {{ .Inner | markdownify }} + {{ end }} +
diff --git a/src/themes/papermod/layouts/shortcodes/rawhtml.html b/src/themes/papermod/layouts/shortcodes/rawhtml.html new file mode 100644 index 0000000..9350c13 --- /dev/null +++ b/src/themes/papermod/layouts/shortcodes/rawhtml.html @@ -0,0 +1,2 @@ + +{{- .Inner -}} \ No newline at end of file diff --git a/src/themes/papermod/layouts/shortcodes/rtl.html b/src/themes/papermod/layouts/shortcodes/rtl.html new file mode 100644 index 0000000..a69b8ce --- /dev/null +++ b/src/themes/papermod/layouts/shortcodes/rtl.html @@ -0,0 +1,15 @@ +{{ $.Scratch.Set "md" false }} + +{{ if .IsNamedParams }} +{{ $.Scratch.Set "md" (.Get "md") }} +{{ else }} +{{ $.Scratch.Set "md" (.Get 0) }} +{{ end }} + +
+ {{ if eq ($.Scratch.Get "md") false }} + {{ .Inner }} + {{ else }} + {{ .Inner | markdownify }} + {{ end }} +
diff --git a/src/themes/papermod/theme.toml b/src/themes/papermod/theme.toml new file mode 100644 index 0000000..b49887d --- /dev/null +++ b/src/themes/papermod/theme.toml @@ -0,0 +1,51 @@ +# theme.toml template for a Hugo theme +# See https://github.com/gohugoio/hugoThemes#themetoml for an example + +name = "PaperMod" +license = "MIT" +licenselink = "https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE" +description = "A fast, clean, responsive Hugo theme" +homepage = "https://adityatelange.github.io/hugo-PaperMod/" +tags = [ + "responsive", + "simple", + "clean", + "light", + "dark", + "blog", + "minimalist", + "highlight.js", + "search" +] +features = [ + "responsive", + "single-column", + "blog", + "cover-image", + "table-of-contents", + "opengraph", + "highlight.js", + "favicon", + "archive", + "share-icons", + "cover", + "multilingual", + "social-icons", + "minified-assets", + "theme-toggle", + "menu-location-indicator", + "scroll-to-top", + "search" +] +min_version = "0.83.0" + +[author] + name = "Aditya Telange" + homepage = "https://github.com/adityatelange/" + +# If porting an existing theme +[original] + name = "Paper" + author = "nanxiaobei" + homepage = "https://github.com/nanxiaobei" + repo = "https://github.com/nanxiaobei/hugo-paper/" diff --git a/themes/papermod b/themes/papermod deleted file mode 160000 index d3d90be..0000000 --- a/themes/papermod +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d3d90be8a4ea04433d95d02a1dc07b0014c5b8b8 -- 2.45.2 From 6e84d4b6d88752d4e0f165f04cc28ee967581a2e Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Mon, 8 May 2023 14:51:30 +0200 Subject: [PATCH 015/111] Update spellchecker config --- .spelling | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.spelling b/.spelling index 71a2e64..9512b7c 100644 --- a/.spelling +++ b/.spelling @@ -129,7 +129,7 @@ XT Ruina VCV LFO - - themes/papermod/README.md + - src/themes/papermod/README.md PaperMod hugo-paper og -- 2.45.2 From 86b0b54f56b2359c9324c4a408e6ac4497cb9fc6 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 10 May 2023 13:38:22 +0200 Subject: [PATCH 016/111] feat: Add an admin email to Remark42 --- kube/values-main.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kube/values-main.yaml b/kube/values-main.yaml index 1d90eba..63ffd5f 100644 --- a/kube/values-main.yaml +++ b/kube/values-main.yaml @@ -10,6 +10,8 @@ remark42: settings: secret: $ARGO_REMARK_SECRET + admin: + sharedEmail: allanger@zohomail.com oauth: github: enabled: true -- 2.45.2 From 9abe51223b237fca4cebbbf1ec1eebfb4b02198a Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 13:20:42 +0200 Subject: [PATCH 017/111] Add the 'Support' button --- src/config.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/config.yaml b/src/config.yaml index 653cbe9..bba4efb 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -46,6 +46,8 @@ params: url: "https://git.badhouseplants.net/badhouseplants/badhouseplants-net" - name: My Music url: "https://funkwhale.badhouseplants.net/library/artists" + - name: Support + url: "https://liberapay.com/allanger/donate" socialIcons: - name: "telegram" url: "https://t.me/allanger" -- 2.45.2 From 1748e2ad5f9019e7ed52e84fc6ee3fc81bac25fc Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 13:23:00 +0200 Subject: [PATCH 018/111] Add hugo_build.lock to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index dc982c8..de40ffb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ src/node_modules src/public src/resources +.hugo_build.lock -- 2.45.2 From c081879d0960036df0382362ed7da6776795389c Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 13:23:46 +0200 Subject: [PATCH 019/111] Remove the papermod theme from repo --- .../.github/ISSUE_TEMPLATE/bug_report.md | 50 -- .../.github/ISSUE_TEMPLATE/config.yml | 5 - .../.github/ISSUE_TEMPLATE/new-blank-issue.md | 7 - .../papermod/.github/PULL_REQUEST_TEMPLATE.md | 44 -- src/themes/papermod/.github/stale.yml | 17 - .../papermod/.github/workflows/gh-pages.yml | 80 --- src/themes/papermod/LICENSE | 22 - src/themes/papermod/README.md | 96 --- src/themes/papermod/assets/css/common/404.css | 11 - .../papermod/assets/css/common/archive.css | 44 -- .../papermod/assets/css/common/footer.css | 60 -- .../papermod/assets/css/common/header.css | 93 --- .../papermod/assets/css/common/main.css | 68 -- .../papermod/assets/css/common/post-entry.css | 104 --- .../assets/css/common/post-single.css | 403 ----------- .../assets/css/common/profile-mode.css | 42 -- .../papermod/assets/css/common/search.css | 45 -- .../papermod/assets/css/common/terms.css | 18 - .../papermod/assets/css/core/license.css | 6 - src/themes/papermod/assets/css/core/reset.css | 116 ---- .../papermod/assets/css/core/theme-vars.css | 38 - .../papermod/assets/css/core/zmedia.css | 49 -- .../papermod/assets/css/extended/blank.css | 5 - .../assets/css/hljs/an-old-hope.min.css | 63 -- .../assets/css/includes/scroll-bar.css | 63 -- src/themes/papermod/assets/js/fastsearch.js | 147 ---- .../papermod/assets/js/fuse.basic.min.js | 9 - .../papermod/assets/js/highlight.min.js | 44 -- src/themes/papermod/assets/js/license.js | 6 - src/themes/papermod/go.mod | 3 - src/themes/papermod/i18n/ar.yaml | 22 - src/themes/papermod/i18n/bg.yaml | 16 - src/themes/papermod/i18n/bn.yaml | 33 - src/themes/papermod/i18n/ca.yaml | 19 - src/themes/papermod/i18n/ckb.yaml | 25 - src/themes/papermod/i18n/da.yaml | 28 - src/themes/papermod/i18n/de.yaml | 33 - src/themes/papermod/i18n/en.yaml | 33 - src/themes/papermod/i18n/eo.yaml | 25 - src/themes/papermod/i18n/es.yaml | 33 - src/themes/papermod/i18n/fa.yaml | 28 - src/themes/papermod/i18n/fr.yaml | 33 - src/themes/papermod/i18n/he.yaml | 33 - src/themes/papermod/i18n/hi.yaml | 19 - src/themes/papermod/i18n/hr.yaml | 33 - src/themes/papermod/i18n/hu.yaml | 16 - src/themes/papermod/i18n/id.yaml | 33 - src/themes/papermod/i18n/it.yaml | 27 - src/themes/papermod/i18n/ja.yaml | 33 - src/themes/papermod/i18n/ko.yaml | 33 - src/themes/papermod/i18n/ku.yaml | 25 - src/themes/papermod/i18n/mn.yaml | 25 - src/themes/papermod/i18n/ms.yaml | 28 - src/themes/papermod/i18n/nl.yaml | 33 - src/themes/papermod/i18n/pl.yaml | 28 - src/themes/papermod/i18n/pt.yaml | 21 - src/themes/papermod/i18n/ru.yaml | 39 -- src/themes/papermod/i18n/sv.yaml | 28 - src/themes/papermod/i18n/tr.yaml | 33 - src/themes/papermod/i18n/uk.yaml | 25 - src/themes/papermod/i18n/uz.yaml | 20 - src/themes/papermod/i18n/vi.yaml | 25 - src/themes/papermod/i18n/zh-tw.yaml | 33 - src/themes/papermod/i18n/zh.yaml | 33 - src/themes/papermod/images/screenshot.png | Bin 141511 -> 0 bytes src/themes/papermod/images/tn.png | Bin 15898 -> 0 bytes src/themes/papermod/layouts/404.html | 3 - .../_default/_markup/render-image.html | 1 - .../papermod/layouts/_default/archives.html | 49 -- .../papermod/layouts/_default/baseof.html | 23 - .../papermod/layouts/_default/index.json | 7 - .../papermod/layouts/_default/list.html | 112 --- src/themes/papermod/layouts/_default/rss.xml | 50 -- .../papermod/layouts/_default/search.html | 29 - .../papermod/layouts/_default/single.html | 58 -- .../papermod/layouts/_default/terms.html | 27 - .../layouts/partials/anchored_headings.html | 2 - .../papermod/layouts/partials/author.html | 9 - .../layouts/partials/breadcrumbs.html | 19 - .../papermod/layouts/partials/comments.html | 3 - .../papermod/layouts/partials/cover.html | 40 -- .../papermod/layouts/partials/edit_post.html | 8 - .../layouts/partials/extend_footer.html | 3 - .../layouts/partials/extend_head.html | 4 - .../papermod/layouts/partials/footer.html | 135 ---- .../papermod/layouts/partials/head.html | 170 ----- .../papermod/layouts/partials/header.html | 149 ---- .../papermod/layouts/partials/home_info.html | 13 - .../layouts/partials/index_profile.html | 58 -- .../layouts/partials/post_canonical.html | 9 - .../papermod/layouts/partials/post_meta.html | 21 - .../layouts/partials/post_nav_links.html | 19 - .../layouts/partials/share_icons.html | 71 -- .../layouts/partials/social_icons.html | 7 - src/themes/papermod/layouts/partials/svg.html | 649 ------------------ .../layouts/partials/templates/opengraph.html | 52 -- .../partials/templates/schema_json.html | 119 ---- .../partials/templates/twitter_cards.html | 33 - src/themes/papermod/layouts/partials/toc.html | 97 --- .../layouts/partials/translation_list.html | 19 - src/themes/papermod/layouts/robots.txt | 7 - .../papermod/layouts/shortcodes/collapse.html | 8 - .../papermod/layouts/shortcodes/figure.html | 31 - .../layouts/shortcodes/inTextImg.html | 5 - .../papermod/layouts/shortcodes/ltr.html | 15 - .../papermod/layouts/shortcodes/rawhtml.html | 2 - .../papermod/layouts/shortcodes/rtl.html | 15 - src/themes/papermod/theme.toml | 51 -- 108 files changed, 4911 deletions(-) delete mode 100644 src/themes/papermod/.github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 src/themes/papermod/.github/ISSUE_TEMPLATE/config.yml delete mode 100644 src/themes/papermod/.github/ISSUE_TEMPLATE/new-blank-issue.md delete mode 100644 src/themes/papermod/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 src/themes/papermod/.github/stale.yml delete mode 100644 src/themes/papermod/.github/workflows/gh-pages.yml delete mode 100644 src/themes/papermod/LICENSE delete mode 100644 src/themes/papermod/README.md delete mode 100644 src/themes/papermod/assets/css/common/404.css delete mode 100644 src/themes/papermod/assets/css/common/archive.css delete mode 100644 src/themes/papermod/assets/css/common/footer.css delete mode 100644 src/themes/papermod/assets/css/common/header.css delete mode 100644 src/themes/papermod/assets/css/common/main.css delete mode 100644 src/themes/papermod/assets/css/common/post-entry.css delete mode 100644 src/themes/papermod/assets/css/common/post-single.css delete mode 100644 src/themes/papermod/assets/css/common/profile-mode.css delete mode 100644 src/themes/papermod/assets/css/common/search.css delete mode 100644 src/themes/papermod/assets/css/common/terms.css delete mode 100644 src/themes/papermod/assets/css/core/license.css delete mode 100644 src/themes/papermod/assets/css/core/reset.css delete mode 100644 src/themes/papermod/assets/css/core/theme-vars.css delete mode 100644 src/themes/papermod/assets/css/core/zmedia.css delete mode 100644 src/themes/papermod/assets/css/extended/blank.css delete mode 100644 src/themes/papermod/assets/css/hljs/an-old-hope.min.css delete mode 100644 src/themes/papermod/assets/css/includes/scroll-bar.css delete mode 100644 src/themes/papermod/assets/js/fastsearch.js delete mode 100644 src/themes/papermod/assets/js/fuse.basic.min.js delete mode 100644 src/themes/papermod/assets/js/highlight.min.js delete mode 100644 src/themes/papermod/assets/js/license.js delete mode 100644 src/themes/papermod/go.mod delete mode 100644 src/themes/papermod/i18n/ar.yaml delete mode 100644 src/themes/papermod/i18n/bg.yaml delete mode 100644 src/themes/papermod/i18n/bn.yaml delete mode 100644 src/themes/papermod/i18n/ca.yaml delete mode 100644 src/themes/papermod/i18n/ckb.yaml delete mode 100644 src/themes/papermod/i18n/da.yaml delete mode 100644 src/themes/papermod/i18n/de.yaml delete mode 100644 src/themes/papermod/i18n/en.yaml delete mode 100644 src/themes/papermod/i18n/eo.yaml delete mode 100644 src/themes/papermod/i18n/es.yaml delete mode 100644 src/themes/papermod/i18n/fa.yaml delete mode 100644 src/themes/papermod/i18n/fr.yaml delete mode 100644 src/themes/papermod/i18n/he.yaml delete mode 100644 src/themes/papermod/i18n/hi.yaml delete mode 100644 src/themes/papermod/i18n/hr.yaml delete mode 100644 src/themes/papermod/i18n/hu.yaml delete mode 100644 src/themes/papermod/i18n/id.yaml delete mode 100644 src/themes/papermod/i18n/it.yaml delete mode 100644 src/themes/papermod/i18n/ja.yaml delete mode 100644 src/themes/papermod/i18n/ko.yaml delete mode 100644 src/themes/papermod/i18n/ku.yaml delete mode 100644 src/themes/papermod/i18n/mn.yaml delete mode 100644 src/themes/papermod/i18n/ms.yaml delete mode 100644 src/themes/papermod/i18n/nl.yaml delete mode 100644 src/themes/papermod/i18n/pl.yaml delete mode 100644 src/themes/papermod/i18n/pt.yaml delete mode 100644 src/themes/papermod/i18n/ru.yaml delete mode 100644 src/themes/papermod/i18n/sv.yaml delete mode 100644 src/themes/papermod/i18n/tr.yaml delete mode 100644 src/themes/papermod/i18n/uk.yaml delete mode 100644 src/themes/papermod/i18n/uz.yaml delete mode 100644 src/themes/papermod/i18n/vi.yaml delete mode 100644 src/themes/papermod/i18n/zh-tw.yaml delete mode 100644 src/themes/papermod/i18n/zh.yaml delete mode 100644 src/themes/papermod/images/screenshot.png delete mode 100644 src/themes/papermod/images/tn.png delete mode 100644 src/themes/papermod/layouts/404.html delete mode 100644 src/themes/papermod/layouts/_default/_markup/render-image.html delete mode 100644 src/themes/papermod/layouts/_default/archives.html delete mode 100644 src/themes/papermod/layouts/_default/baseof.html delete mode 100644 src/themes/papermod/layouts/_default/index.json delete mode 100644 src/themes/papermod/layouts/_default/list.html delete mode 100644 src/themes/papermod/layouts/_default/rss.xml delete mode 100644 src/themes/papermod/layouts/_default/search.html delete mode 100644 src/themes/papermod/layouts/_default/single.html delete mode 100644 src/themes/papermod/layouts/_default/terms.html delete mode 100644 src/themes/papermod/layouts/partials/anchored_headings.html delete mode 100644 src/themes/papermod/layouts/partials/author.html delete mode 100644 src/themes/papermod/layouts/partials/breadcrumbs.html delete mode 100644 src/themes/papermod/layouts/partials/comments.html delete mode 100644 src/themes/papermod/layouts/partials/cover.html delete mode 100644 src/themes/papermod/layouts/partials/edit_post.html delete mode 100644 src/themes/papermod/layouts/partials/extend_footer.html delete mode 100644 src/themes/papermod/layouts/partials/extend_head.html delete mode 100644 src/themes/papermod/layouts/partials/footer.html delete mode 100644 src/themes/papermod/layouts/partials/head.html delete mode 100644 src/themes/papermod/layouts/partials/header.html delete mode 100644 src/themes/papermod/layouts/partials/home_info.html delete mode 100644 src/themes/papermod/layouts/partials/index_profile.html delete mode 100644 src/themes/papermod/layouts/partials/post_canonical.html delete mode 100644 src/themes/papermod/layouts/partials/post_meta.html delete mode 100644 src/themes/papermod/layouts/partials/post_nav_links.html delete mode 100644 src/themes/papermod/layouts/partials/share_icons.html delete mode 100644 src/themes/papermod/layouts/partials/social_icons.html delete mode 100644 src/themes/papermod/layouts/partials/svg.html delete mode 100644 src/themes/papermod/layouts/partials/templates/opengraph.html delete mode 100644 src/themes/papermod/layouts/partials/templates/schema_json.html delete mode 100644 src/themes/papermod/layouts/partials/templates/twitter_cards.html delete mode 100644 src/themes/papermod/layouts/partials/toc.html delete mode 100644 src/themes/papermod/layouts/partials/translation_list.html delete mode 100644 src/themes/papermod/layouts/robots.txt delete mode 100644 src/themes/papermod/layouts/shortcodes/collapse.html delete mode 100644 src/themes/papermod/layouts/shortcodes/figure.html delete mode 100644 src/themes/papermod/layouts/shortcodes/inTextImg.html delete mode 100644 src/themes/papermod/layouts/shortcodes/ltr.html delete mode 100644 src/themes/papermod/layouts/shortcodes/rawhtml.html delete mode 100644 src/themes/papermod/layouts/shortcodes/rtl.html delete mode 100644 src/themes/papermod/theme.toml diff --git a/src/themes/papermod/.github/ISSUE_TEMPLATE/bug_report.md b/src/themes/papermod/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 3e6cf7e..0000000 --- a/src/themes/papermod/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: "[BUG]" -labels: bug -assignees: '' - ---- - - - -**Describe the bug** - - - - Device/Os: [e.g. Android 10] - - Type: [e.g. Desktop/Mobile] - - Browser and version [e.g. Chrome 86.0]: - - Hugo Version [ >=0.83.0 expected]: - - Theme Version [e.g. v4.0, master, or commit-id ]: - -**Steps to reproduce the behavior:** - - -**Expected behavior**: - - -**Repo/Source where this issue can be reproduced**: - - -**Screenshots** - - -**Additional context** - diff --git a/src/themes/papermod/.github/ISSUE_TEMPLATE/config.yml b/src/themes/papermod/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 1a4dd9b..0000000 --- a/src/themes/papermod/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,5 +0,0 @@ -blank_issues_enabled: false -contact_links: - - name: PaperMod Discussions - url: https://github.com/adityatelange/hugo-PaperMod/discussions - about: Please ask and answer questions/doubts here, do not open an issue for questions. diff --git a/src/themes/papermod/.github/ISSUE_TEMPLATE/new-blank-issue.md b/src/themes/papermod/.github/ISSUE_TEMPLATE/new-blank-issue.md deleted file mode 100644 index dbc48f1..0000000 --- a/src/themes/papermod/.github/ISSUE_TEMPLATE/new-blank-issue.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: New Blank Issue -about: Anything other than bug report -title: "" -labels: "" -assignees: "" ---- diff --git a/src/themes/papermod/.github/PULL_REQUEST_TEMPLATE.md b/src/themes/papermod/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 00b856c..0000000 --- a/src/themes/papermod/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,44 +0,0 @@ - - - -**What does this PR change? What problem does it solve?** - - - - -**Was the change discussed in an issue or in the Discussions before?** - - - - -## PR Checklist - -- [ ] This change adds/updates translations and I have used the [template present here](https://github.com/adityatelange/hugo-PaperMod/wiki/Translations#want-to-add-your-language-). -- [ ] I have enabled [maintainer edits for this PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork). -- [ ] I have verified that the code works as described/as intended. -- [ ] This change adds a Social Icon which has a permissive license to use it. -- [ ] This change **does not** include any CDN resources/links. -- [ ] This change **does not** include any unrelated scripts such as bash and python scripts. -- [ ] This change updates the overridden internal templates from HUGO's repository. diff --git a/src/themes/papermod/.github/stale.yml b/src/themes/papermod/.github/stale.yml deleted file mode 100644 index 7b5f571..0000000 --- a/src/themes/papermod/.github/stale.yml +++ /dev/null @@ -1,17 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 7 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 3 -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - keep -# Label to use when marking an issue as stale -staleLabel: stale -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false diff --git a/src/themes/papermod/.github/workflows/gh-pages.yml b/src/themes/papermod/.github/workflows/gh-pages.yml deleted file mode 100644 index 305a6de..0000000 --- a/src/themes/papermod/.github/workflows/gh-pages.yml +++ /dev/null @@ -1,80 +0,0 @@ -name: Deploy Hugo PaperMod Demo to Pages - -on: - push: - paths-ignore: - - "images/**" - - "LICENSE" - - "README.md" - branches: - - master - - exampleSite - workflow_dispatch: - # manual run - inputs: - hugoVersion: - description: "Hugo Version" - required: false - default: "0.83.0" - -# Allow one concurrent deployment -concurrency: - group: "pages" - cancel-in-progress: true - -# Default to bash -defaults: - run: - shell: bash - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -jobs: - # Build job - build: - runs-on: ubuntu-latest - env: - HUGO_VERSION: "0.83.0" - steps: - - name: Check version - if: ${{ github.event.inputs.hugoVersion }} - run: export HUGO_VERSION="${{ github.event.inputs.hugoVersion }}" - - name: Install Hugo CLI - run: | - wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.deb \ - && sudo dpkg -i ${{ runner.temp }}/hugo.deb - - name: Checkout - uses: actions/checkout@v3 - with: - ref: exampleSite - - name: Setup Pages - id: pages - uses: actions/configure-pages@v1 - - name: Get Theme - run: git submodule update --init --recursive - - name: Update theme to Latest commit - run: git submodule update --remote --merge - - name: Build with Hugo - run: | - hugo \ - --buildDrafts --gc --verbose \ - --baseURL ${{ steps.pages.outputs.base_url }} - - name: Upload artifact - uses: actions/upload-pages-artifact@v1 - with: - path: ./public - # Deployment job - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v1 diff --git a/src/themes/papermod/LICENSE b/src/themes/papermod/LICENSE deleted file mode 100644 index 1580f7f..0000000 --- a/src/themes/papermod/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2020 nanxiaobei and adityatelange -Copyright (c) 2021-2022 adityatelange - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/themes/papermod/README.md b/src/themes/papermod/README.md deleted file mode 100644 index 286617a..0000000 --- a/src/themes/papermod/README.md +++ /dev/null @@ -1,96 +0,0 @@ -

Hugo PaperMod | Demo

- -

☄️ Fast | ☁️ Fluent | 🌙 Smooth | 📱 Responsive

-
- -> Hugo PaperMod is a theme based on [hugo-paper](https://github.com/nanxiaobei/hugo-paper). -> The goal of this project is to add more features and customization to the og theme. - -The [demo](https://adityatelange.github.io/hugo-PaperMod/) includes a lot of documentation about Installation, Features with a few more stuff. Make sure you visit it, to get an awesome hands-on experience and get to know about the features ... - -**ExampleSite** can be found here: [exampleSite](https://github.com/adityatelange/hugo-PaperMod/tree/exampleSite). Demo is built up with [exampleSite](https://github.com/adityatelange/hugo-PaperMod/tree/exampleSite) as source. - -[![Minimum Hugo Version](https://img.shields.io/static/v1?label=min-HUGO-version&message=0.83.0&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.83.0) -[![Build GH-Pages](https://github.com/adityatelange/hugo-PaperMod/workflows/Build%20GH-Pages/badge.svg)](https://github.com/adityatelange/hugo-PaperMod/deployments/activity_log?environment=github-pages) -[![GitHub](https://img.shields.io/github/license/adityatelange/hugo-PaperMod)](https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE) -[![hugo-papermod](https://img.shields.io/badge/Hugo--Themes-@PaperMod-blue)](https://themes.gohugo.io/themes/hugo-papermod/) -[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=adityatelange_hugo-PaperMod&metric=alert_status)](https://sonarcloud.io/dashboard?id=adityatelange_hugo-PaperMod) -![code-size](https://img.shields.io/github/languages/code-size/adityatelange/hugo-PaperMod) -[![Discord](https://img.shields.io/discord/971046860317921340?label=Discord)](https://discord.gg/ahpmTvhVmp) - ---- - -

- Mockup image -

- ---- - -## Features/Mods 💥 - -- Uses Hugo's asset generator with pipelining, fingerprinting, bundling and minification by default. -- 3 Modes: - - [Regular Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#regular-mode-default-mode) - - [Home-Info Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#home-info-mode) - - [Profile Mode.](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#profile-mode) -- Table of Content Generation (newer implementation). -- Archive of posts. -- Social Icons (home-info and profile-mode) -- Social-Media Share buttons on posts. -- Menu location indicator. -- Multilingual support. (with language selector) -- Taxonomies -- Cover image for each post (with Responsive image support). -- Light/Dark theme (automatic theme switch a/c to browser theme and theme-switch button). -- SEO Friendly. -- Multiple Author support. -- Search Page with Fuse.js -- Other Posts suggestion below a post -- Breadcrumb Navigation -- Code Block Copy buttons -- No webpack, nodejs and other dependencies are required to edit the theme. - -Read Wiki For More Details => **[PaperMod - Features](https://github.com/adityatelange/hugo-PaperMod/wiki/Features)** - ---- - -## Install/Update 📥 - -Read Wiki For More Details => **[PaperMod - Installation](https://github.com/adityatelange/hugo-PaperMod/wiki/Installation)** - ---- - -## Social-Icons/Share-Icons 🖼️ - -Read Wiki For More Details => **[PaperMod-Icons](https://github.com/adityatelange/hugo-PaperMod/wiki/Icons)** - ---- - -## FAQs / How To's Guide 🙋 - -Read Wiki For More Details => **[PaperMod-FAQs](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs)** - ---- - -## Release Changelog 📃 - -Release ChangeLog has info about stuff added: **[Releases](https://github.com/adityatelange/hugo-PaperMod/releases)** - ---- - -## [Pagespeed Insights (100% ?)](https://pagespeed.web.dev/report?url=https://adityatelange.github.io/hugo-PaperMod/) 👀 - ---- - -## Special Thanks 🌟 - -- [**Highlight.js**](https://github.com/highlightjs/highlight.js) -- [**Fuse.js**](https://github.com/krisk/fuse) -- [**Feather Icons**](https://github.com/feathericons/feather) -- [**Simple Icons**](https://github.com/simple-icons/simple-icons) -- **All Contributors and Supporters** - -## Stargazers over time 📈 - -[![Stargazers over time](https://starchart.cc/adityatelange/hugo-PaperMod.svg)](https://starchart.cc/adityatelange/hugo-PaperMod) - diff --git a/src/themes/papermod/assets/css/common/404.css b/src/themes/papermod/assets/css/common/404.css deleted file mode 100644 index 8a23430..0000000 --- a/src/themes/papermod/assets/css/common/404.css +++ /dev/null @@ -1,11 +0,0 @@ -.not-found { - position: absolute; - left: 0; - right: 0; - display: flex; - align-items: center; - justify-content: center; - height: 80%; - font-size: 160px; - font-weight: 700; -} diff --git a/src/themes/papermod/assets/css/common/archive.css b/src/themes/papermod/assets/css/common/archive.css deleted file mode 100644 index 7e7e245..0000000 --- a/src/themes/papermod/assets/css/common/archive.css +++ /dev/null @@ -1,44 +0,0 @@ -.archive-posts { - width: 100%; - font-size: 16px; -} - -.archive-year { - margin-top: 40px; -} - -.archive-year:not(:last-of-type) { - border-bottom: 2px solid var(--border); -} - -.archive-month { - display: flex; - align-items: flex-start; - padding: 10px 0; -} - -.archive-month-header { - margin: 25px 0; - width: 200px; -} - -.archive-month:not(:last-of-type) { - border-bottom: 1px solid var(--border); -} - -.archive-entry { - position: relative; - padding: 5px; - margin: 10px 0; -} - -.archive-entry-title { - margin: 5px 0; - font-weight: 400; -} - -.archive-count, -.archive-meta { - color: var(--secondary); - font-size: 14px; -} diff --git a/src/themes/papermod/assets/css/common/footer.css b/src/themes/papermod/assets/css/common/footer.css deleted file mode 100644 index 5addb1e..0000000 --- a/src/themes/papermod/assets/css/common/footer.css +++ /dev/null @@ -1,60 +0,0 @@ -.footer, -.top-link { - font-size: 12px; - color: var(--secondary); -} - -.footer { - max-width: calc(var(--main-width) + var(--gap) * 2); - margin: auto; - padding: calc((var(--footer-height) - var(--gap)) / 2) var(--gap); - text-align: center; - line-height: 24px; -} - -.footer span { - margin-inline-start: 1px; - margin-inline-end: 1px; -} - -.footer span:last-child { - white-space: nowrap; -} - -.footer a { - color: inherit; - border-bottom: 1px solid var(--secondary); -} - -.footer a:hover { - border-bottom: 1px solid var(--primary); -} - -.top-link { - visibility: hidden; - position: fixed; - bottom: 60px; - right: 30px; - z-index: 99; - background: var(--tertiary); - width: 42px; - height: 42px; - padding: 12px; - border-radius: 64px; - transition: visibility 0.5s, opacity 0.8s linear; -} - -.top-link, -.top-link svg { - filter: drop-shadow(0px 0px 0px var(--theme)); -} - -.footer a:hover, -.top-link:hover { - color: var(--primary); -} - -.top-link:focus, -#theme-toggle:focus { - outline: 0; -} diff --git a/src/themes/papermod/assets/css/common/header.css b/src/themes/papermod/assets/css/common/header.css deleted file mode 100644 index 64894da..0000000 --- a/src/themes/papermod/assets/css/common/header.css +++ /dev/null @@ -1,93 +0,0 @@ -.nav { - display: flex; - flex-wrap: wrap; - justify-content: space-between; - max-width: calc(var(--nav-width) + var(--gap) * 2); - margin-inline-start: auto; - margin-inline-end: auto; - line-height: var(--header-height); -} - -.nav a { - display: block; -} - -.logo, -#menu { - display: flex; - margin: auto var(--gap); -} - -.logo { - flex-wrap: inherit; -} - -.logo a { - font-size: 24px; - font-weight: 700; -} - -.logo a img, .logo a svg { - display: inline; - vertical-align: middle; - pointer-events: none; - transform: translate(0, -10%); - border-radius: 6px; - margin-inline-end: 8px; -} - -button#theme-toggle { - font-size: 26px; - margin: auto 4px; -} - -body.dark #moon { - vertical-align: middle; - display: none; -} - -body:not(.dark) #sun { - display: none; -} - -#menu { - list-style: none; - word-break: keep-all; - overflow-x: auto; - white-space: nowrap; -} - -#menu li + li { - margin-inline-start: var(--gap); -} - -#menu a { - font-size: 16px; -} - -#menu .active { - font-weight: 500; - border-bottom: 2px solid currentColor; -} - -.lang-switch li, -.lang-switch ul, -.logo-switches { - display: inline-flex; - margin: auto 4px; -} - -.lang-switch { - display: flex; - flex-wrap: inherit; -} - -.lang-switch a { - margin: auto 3px; - font-size: 16px; - font-weight: 500; -} - -.logo-switches { - flex-wrap: inherit; -} diff --git a/src/themes/papermod/assets/css/common/main.css b/src/themes/papermod/assets/css/common/main.css deleted file mode 100644 index 50022ac..0000000 --- a/src/themes/papermod/assets/css/common/main.css +++ /dev/null @@ -1,68 +0,0 @@ -.main { - position: relative; - min-height: calc(100vh - var(--header-height) - var(--footer-height)); - max-width: calc(var(--main-width) + var(--gap) * 2); - margin: auto; - padding: var(--gap); -} - -.page-header h1 { - font-size: 40px; -} - -.pagination { - display: flex; -} - -.pagination a { - color: var(--theme); - font-size: 13px; - line-height: 36px; - background: var(--primary); - border-radius: calc(36px / 2); - padding: 0 16px; -} - -.pagination .next { - margin-inline-start: auto; -} - -.social-icons { - padding: 12px 0; -} - -.social-icons a:not(:last-of-type) { - margin-inline-end: 12px; -} - -.social-icons a svg { - height: 26px; - width: 26px; -} - -code { - direction: ltr; -} - -div.highlight, -pre { - position: relative; -} - -.copy-code { - display: none; - position: absolute; - top: 4px; - right: 4px; - color: rgba(255, 255, 255, 0.8); - background: rgba(78, 78, 78, 0.8); - border-radius: var(--radius); - padding: 0 5px; - font-size: 14px; - user-select: none; -} - -div.highlight:hover .copy-code, -pre:hover .copy-code { - display: block; -} diff --git a/src/themes/papermod/assets/css/common/post-entry.css b/src/themes/papermod/assets/css/common/post-entry.css deleted file mode 100644 index 885aa2a..0000000 --- a/src/themes/papermod/assets/css/common/post-entry.css +++ /dev/null @@ -1,104 +0,0 @@ -.first-entry { - position: relative; - display: flex; - flex-direction: column; - justify-content: center; - min-height: 320px; - margin: var(--gap) 0 calc(var(--gap) * 2) 0; -} - -.first-entry .entry-header { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 3; -} - -.first-entry .entry-header h1 { - font-size: 34px; - line-height: 1.3; -} - -.first-entry .entry-content { - margin: 14px 0; - font-size: 16px; - -webkit-line-clamp: 3; -} - -.first-entry .entry-footer { - font-size: 14px; -} - -.home-info .entry-content { - -webkit-line-clamp: unset; -} - -.post-entry { - position: relative; - margin-bottom: var(--gap); - padding: var(--gap); - background: var(--entry); - border-radius: var(--radius); - transition: transform 0.1s; - border: 1px solid var(--border); -} - -.post-entry:active { - transform: scale(0.96); -} - -.tag-entry .entry-cover { - display: none; -} - -.entry-header h2 { - font-size: 24px; - line-height: 1.3; -} - -.entry-content { - margin: 8px 0; - color: var(--secondary); - font-size: 14px; - line-height: 1.6; - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} - -.entry-footer { - color: var(--secondary); - font-size: 13px; -} - -.entry-link { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; -} - -.entry-cover, -.entry-isdraft { - font-size: 14px; - color: var(--secondary); -} - -.entry-cover { - margin-bottom: var(--gap); - text-align: center; -} - -.entry-cover img { - border-radius: var(--radius); - pointer-events: none; - width: 100%; - height: auto; -} - -.entry-cover a { - color: var(--secondary); - box-shadow: 0 1px 0 var(--primary); -} diff --git a/src/themes/papermod/assets/css/common/post-single.css b/src/themes/papermod/assets/css/common/post-single.css deleted file mode 100644 index ba6e5a2..0000000 --- a/src/themes/papermod/assets/css/common/post-single.css +++ /dev/null @@ -1,403 +0,0 @@ -.page-header, -.post-header { - margin: 24px auto var(--content-gap) auto; -} - -.post-title { - margin-bottom: 2px; - font-size: 40px; -} - -.post-description { - margin-top: 10px; - margin-bottom: 5px; -} - -.post-meta, -.breadcrumbs { - color: var(--secondary); - font-size: 14px; - display: flex; - flex-wrap: wrap; -} - -.post-meta .i18n_list li { - display: inline-flex; - list-style: none; - margin: auto 3px; - box-shadow: 0 1px 0 var(--secondary); -} - -.breadcrumbs a { - font-size: 16px; -} - -.post-content { - color: var(--content); -} - -.post-content h3, -.post-content h4, -.post-content h5, -.post-content h6 { - margin: 24px 0 16px; -} - -.post-content h1 { - margin: 40px auto 32px; - font-size: 40px; -} - -.post-content h2 { - margin: 32px auto 24px; - font-size: 32px; -} - -.post-content h3 { - font-size: 24px; -} - -.post-content h4 { - font-size: 16px; -} - -.post-content h5 { - font-size: 14px; -} - -.post-content h6 { - font-size: 12px; -} - -.post-content a, -.toc a:hover { - box-shadow: 0 1px 0; - box-decoration-break: clone; - -webkit-box-decoration-break: clone; -} - -.post-content a code { - margin: auto 0; - border-radius: 0; - box-shadow: 0 -1px 0 var(--primary) inset; -} - -.post-content del { - text-decoration: none; - background: linear-gradient(to right, var(--primary) 100%, transparent 0) 0 50%/1px 1px repeat-x; -} - -.post-content dl, -.post-content ol, -.post-content p, -.post-content figure, -.post-content ul { - margin-bottom: var(--content-gap); -} - -.post-content ol, -.post-content ul { - padding-inline-start: 20px; -} - -.post-content li { - margin-top: 5px; -} - -.post-content li p { - margin-bottom: 0; -} - -.post-content dl { - display: flex; - flex-wrap: wrap; - margin: 0; -} - -.post-content dt { - width: 25%; - font-weight: 700; -} - -.post-content dd { - width: 75%; - margin-inline-start: 0; - padding-inline-start: 10px; -} - -.post-content dd ~ dd, -.post-content dt ~ dt { - margin-top: 10px; -} - -.post-content table { - margin-bottom: 32px; -} - -.post-content table th, -.post-content table:not(.highlighttable, .highlight table, .gist .highlight) td { - min-width: 80px; - padding: 12px 8px; - line-height: 1.5; - border-bottom: 1px solid var(--border); -} - -.post-content table th { - font-size: 14px; - text-align: start; -} - -.post-content table:not(.highlighttable) td code:only-child { - margin: auto 0; -} - -.post-content .highlight table { - border-radius: var(--radius); -} - -.post-content .highlight:not(table) { - margin: 10px auto; - background: var(--hljs-bg) !important; - border-radius: var(--radius); - direction: ltr; -} - -.post-content li > .highlight { - margin-inline-end: 0; -} - -.post-content ul pre { - margin-inline-start: calc(var(--gap) * -2); -} - -.post-content .highlight pre { - margin: 0; -} - -.post-content .highlighttable { - table-layout: fixed; -} - -.post-content .highlighttable td:first-child { - width: 40px; -} - -.post-content .highlighttable td .linenodiv { - padding-inline-end: 0 !important; -} - -.post-content .highlighttable td .highlight, -.post-content .highlighttable td .linenodiv pre { - margin-bottom: 0; -} - -.post-content code { - margin: auto 4px; - padding: 4px 6px; - font-size: 0.78em; - line-height: 1.5; - background: var(--code-bg); - border-radius: 2px; -} - -.post-content pre code { - display: block; - margin: auto 0; - padding: 10px; - color: rgb(213, 213, 214); - background: var(--hljs-bg) !important; - border-radius: var(--radius); - overflow-x: auto; - word-break: break-all; -} - -.post-content blockquote { - margin: 20px 0; - padding: 0 14px; - border-inline-start: 3px solid var(--primary); -} - -.post-content hr { - margin: 30px 0; - height: 2px; - background: var(--tertiary); - border: 0; -} - -.post-content iframe { - max-width: 100%; -} - -.post-content img { - border-radius: 4px; - margin: 1rem 0; -} - -.post-content img[src*="#center"] { - margin: 1rem auto; -} - -.post-content figure.align-center { - text-align: center; -} - -.post-content figure > figcaption { - color: var(--primary); - font-size: 16px; - font-weight: bold; - margin: 8px 0 16px; -} - -.post-content figure > figcaption > p { - color: var(--secondary); - font-size: 14px; - font-weight: normal; -} - -.toc { - margin: 0 2px 40px 2px; - border: 1px solid var(--border); - background: var(--code-bg); - border-radius: var(--radius); - padding: 0.4em; -} - -.dark .toc { - background: var(--entry); -} - -.toc details summary { - cursor: zoom-in; - margin-inline-start: 20px; -} - -.toc details[open] summary { - cursor: zoom-out; -} - -.toc .details { - display: inline; - font-weight: 500; -} - -.toc .inner { - margin: 0 20px; - padding: 10px 20px; -} - -.toc li ul { - margin-inline-start: var(--gap); -} - -.toc summary:focus { - outline: 0; -} - -.post-footer { - margin-top: 56px; -} - -.post-tags li { - display: inline-block; - margin-inline-end: 3px; - margin-bottom: 5px; -} - -.post-tags a, -.share-buttons, -.paginav { - border-radius: var(--radius); - background: var(--code-bg); - border: 1px solid var(--border); -} - -.post-tags a { - display: block; - padding-inline-start: 14px; - padding-inline-end: 14px; - color: var(--secondary); - font-size: 14px; - line-height: 34px; - background: var(--code-bg); -} - -.post-tags a:hover, -.paginav a:hover { - background: var(--border); -} - -.share-buttons { - margin: 14px 0; - padding-inline-start: var(--radius); - display: flex; - justify-content: center; - overflow-x: auto; -} - -.share-buttons a { - margin-top: 10px; -} - -.share-buttons a:not(:last-of-type) { - margin-inline-end: 12px; -} - -h1:hover .anchor, -h2:hover .anchor, -h3:hover .anchor, -h4:hover .anchor, -h5:hover .anchor, -h6:hover .anchor { - display: inline-flex; - color: var(--secondary); - margin-inline-start: 8px; - font-weight: 500; - user-select: none; -} - -.paginav { - margin: 10px 0; - display: flex; - line-height: 30px; - border-radius: var(--radius); -} - -.paginav a { - padding-inline-start: 14px; - padding-inline-end: 14px; - border-radius: var(--radius); -} - -.paginav .title { - letter-spacing: 1px; - text-transform: uppercase; - font-size: small; - color: var(--secondary); -} - -.paginav .prev, -.paginav .next { - width: 50%; -} - -.paginav span:hover:not(.title) { - box-shadow: 0 1px 0; -} - -.paginav .next { - margin-inline-start: auto; - text-align: right; -} - -[dir="rtl"] .paginav .next { - text-align: left; -} - -h1>a>svg { - display: inline; -} - -img.in-text { - display: inline; - margin: auto; -} \ No newline at end of file diff --git a/src/themes/papermod/assets/css/common/profile-mode.css b/src/themes/papermod/assets/css/common/profile-mode.css deleted file mode 100644 index 58f2819..0000000 --- a/src/themes/papermod/assets/css/common/profile-mode.css +++ /dev/null @@ -1,42 +0,0 @@ -.buttons, -.main .profile { - display: flex; - justify-content: center; -} - -.main .profile { - align-items: center; - min-height: calc(100vh - var(--header-height) - var(--footer-height) - (var(--gap) * 2)); - text-align: center; -} - -.profile .profile_inner h1 { - padding: 12px 0; -} - -.profile img { - display: inline-table; - border-radius: 50%; -} - -.buttons { - flex-wrap: wrap; - max-width: 400px; - margin: 0 auto; -} - -.button { - background: var(--tertiary); - border-radius: var(--radius); - margin: 8px; - padding: 6px; - transition: transform 0.1s; -} - -.button-inner { - padding: 0 8px; -} - -.button:active { - transform: scale(0.96); -} diff --git a/src/themes/papermod/assets/css/common/search.css b/src/themes/papermod/assets/css/common/search.css deleted file mode 100644 index 38d5b6b..0000000 --- a/src/themes/papermod/assets/css/common/search.css +++ /dev/null @@ -1,45 +0,0 @@ -#searchbox input { - padding: 4px 10px; - width: 100%; - color: var(--primary); - font-weight: bold; - border: 2px solid var(--tertiary); - border-radius: var(--radius); -} - -#searchbox input:focus { - border-color: var(--secondary); -} - -#searchResults li { - list-style: none; - border-radius: var(--radius); - padding: 10px; - margin: 10px 0; - position: relative; - font-weight: 500; -} - -#searchResults { - margin: 10px 0; - width: 100%; -} - -#searchResults li:active { - transition: transform 0.1s; - transform: scale(0.98); -} - -#searchResults a { - position: absolute; - width: 100%; - height: 100%; - top: 0px; - left: 0px; - outline: none; -} - -#searchResults .focus { - transform: scale(0.98); - border: 2px solid var(--tertiary); -} diff --git a/src/themes/papermod/assets/css/common/terms.css b/src/themes/papermod/assets/css/common/terms.css deleted file mode 100644 index 244614b..0000000 --- a/src/themes/papermod/assets/css/common/terms.css +++ /dev/null @@ -1,18 +0,0 @@ -.terms-tags li { - display: inline-block; - margin: 10px; - font-weight: 500; -} - -.terms-tags a { - display: block; - padding: 3px 10px; - background: var(--tertiary); - border-radius: 6px; - transition: transform 0.1s; -} - -.terms-tags a:active { - background: var(--tertiary); - transform: scale(0.96); -} diff --git a/src/themes/papermod/assets/css/core/license.css b/src/themes/papermod/assets/css/core/license.css deleted file mode 100644 index 8e81d22..0000000 --- a/src/themes/papermod/assets/css/core/license.css +++ /dev/null @@ -1,6 +0,0 @@ -/* - PaperMod v6 - License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE - Copyright (c) 2020 nanxiaobei and adityatelange - Copyright (c) 2021-2022 adityatelange -*/ diff --git a/src/themes/papermod/assets/css/core/reset.css b/src/themes/papermod/assets/css/core/reset.css deleted file mode 100644 index f509cf6..0000000 --- a/src/themes/papermod/assets/css/core/reset.css +++ /dev/null @@ -1,116 +0,0 @@ -*, -::after, -::before { - box-sizing: border-box; -} - -html { - -webkit-tap-highlight-color: transparent; - overflow-y: scroll; -} - -a, -button, -body, -h1, -h2, -h3, -h4, -h5, -h6 { - color: var(--primary); -} - -body { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - font-size: 18px; - line-height: 1.6; - word-break: break-word; - background: var(--theme); -} - -article, -aside, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -table { - display: block; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} - -h1, -h2, -h3, -h4, -h5, -h6, -p { - margin-top: 0; - margin-bottom: 0; -} - -ul { - padding: 0; -} - -a { - text-decoration: none; -} - -body, -figure, -ul { - margin: 0; -} - -table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - overflow-x: auto; - word-break: keep-all; -} - -button, -input, -textarea { - padding: 0; - font: inherit; - background: 0 0; - border: 0; -} - -input, -textarea { - outline: 0; -} - -button, -input[type=button], -input[type=submit] { - cursor: pointer; -} - -input:-webkit-autofill, -textarea:-webkit-autofill { - box-shadow: 0 0 0 50px var(--theme) inset; -} - -img { - display: block; - max-width: 100%; -} diff --git a/src/themes/papermod/assets/css/core/theme-vars.css b/src/themes/papermod/assets/css/core/theme-vars.css deleted file mode 100644 index fd0c5ee..0000000 --- a/src/themes/papermod/assets/css/core/theme-vars.css +++ /dev/null @@ -1,38 +0,0 @@ -:root { - --gap: 24px; - --content-gap: 20px; - --nav-width: 1024px; - --main-width: 720px; - --header-height: 60px; - --footer-height: 60px; - --radius: 8px; - --theme: rgb(255, 255, 255); - --entry: rgb(255, 255, 255); - --primary: rgb(30, 30, 30); - --secondary: rgb(108, 108, 108); - --tertiary: rgb(214, 214, 214); - --content: rgb(31, 31, 31); - --hljs-bg: rgb(28, 29, 33); - --code-bg: rgb(245, 245, 245); - --border: rgb(238, 238, 238); -} - -.dark { - --theme: rgb(29, 30, 32); - --entry: rgb(46, 46, 51); - --primary: rgb(218, 218, 219); - --secondary: rgb(155, 156, 157); - --tertiary: rgb(65, 66, 68); - --content: rgb(196, 196, 197); - --hljs-bg: rgb(46, 46, 51); - --code-bg: rgb(55, 56, 62); - --border: rgb(51, 51, 51); -} - -.list { - background: var(--code-bg); -} - -.dark.list { - background: var(--theme); -} diff --git a/src/themes/papermod/assets/css/core/zmedia.css b/src/themes/papermod/assets/css/core/zmedia.css deleted file mode 100644 index 210d486..0000000 --- a/src/themes/papermod/assets/css/core/zmedia.css +++ /dev/null @@ -1,49 +0,0 @@ -@media screen and (max-width: 768px) { - /* theme-vars */ - :root { - --gap: 14px; - } - - /* profile-mode */ - .profile img { - transform: scale(0.85); - } - - /* post-entry */ - .first-entry { - min-height: 260px; - } - - /* archive */ - .archive-month { - flex-direction: column; - } - - .archive-year { - margin-top: 20px; - } - - /* footer */ - .footer { - padding: calc((var(--footer-height) - var(--gap) - 10px) / 2) var(--gap); - } -} - -/* footer */ -@media screen and (max-width: 900px) { - .list .top-link { - transform: translateY(-5rem); - } -} - -@media (prefers-reduced-motion) { - /* terms; profile-mode; post-single; post-entry; post-entry; search; search */ - .terms-tags a:active, - .button:active, - .post-entry:active, - .top-link, - #searchResults .focus, - #searchResults li:active { - transform: none; - } -} diff --git a/src/themes/papermod/assets/css/extended/blank.css b/src/themes/papermod/assets/css/extended/blank.css deleted file mode 100644 index a577295..0000000 --- a/src/themes/papermod/assets/css/extended/blank.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -This is just a placeholder blank stylesheet so as to support adding custom styles budled with theme's default styles - -Read https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#bundling-custom-css-with-themes-assets for more info -*/ diff --git a/src/themes/papermod/assets/css/hljs/an-old-hope.min.css b/src/themes/papermod/assets/css/hljs/an-old-hope.min.css deleted file mode 100644 index b5dabdf..0000000 --- a/src/themes/papermod/assets/css/hljs/an-old-hope.min.css +++ /dev/null @@ -1,63 +0,0 @@ -.hljs-comment, -.hljs-quote { - color: #b6b18b; -} - -.hljs-deletion, -.hljs-name, -.hljs-regexp, -.hljs-selector-class, -.hljs-selector-id, -.hljs-tag, -.hljs-template-variable, -.hljs-variable { - color: #eb3c54; -} - -.hljs-built_in, -.hljs-builtin-name, -.hljs-link, -.hljs-literal, -.hljs-meta, -.hljs-number, -.hljs-params, -.hljs-type { - color: #e7ce56; -} - -.hljs-attribute { - color: #ee7c2b; -} - -.hljs-addition, -.hljs-bullet, -.hljs-string, -.hljs-symbol { - color: #4fb4d7; -} - -.hljs-section, -.hljs-title { - color: #78bb65; -} - -.hljs-keyword, -.hljs-selector-tag { - color: #b45ea4; -} - -.hljs { - display: block; - overflow-x: auto; - background: #1c1d21; - color: #c0c5ce; - padding: .5em; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: 700; -} diff --git a/src/themes/papermod/assets/css/includes/scroll-bar.css b/src/themes/papermod/assets/css/includes/scroll-bar.css deleted file mode 100644 index 47405de..0000000 --- a/src/themes/papermod/assets/css/includes/scroll-bar.css +++ /dev/null @@ -1,63 +0,0 @@ -/* from reset */ -::-webkit-scrollbar-track { - background: 0 0; -} - -.list:not(.dark)::-webkit-scrollbar-track { - background: var(--code-bg); -} - -::-webkit-scrollbar-thumb { - background: var(--tertiary); - border: 5px solid var(--theme); - border-radius: var(--radius); -} - -.list:not(.dark)::-webkit-scrollbar-thumb { - border: 5px solid var(--code-bg); -} - -::-webkit-scrollbar-thumb:hover { - background: var(--secondary); -} - -::-webkit-scrollbar:not(.highlighttable, .highlight table, .gist .highlight) { - background: var(--theme); -} - -/* from post-single */ -.post-content .highlighttable td .highlight pre code::-webkit-scrollbar { - display: none; -} - -.post-content :not(table) ::-webkit-scrollbar-thumb { - border: 2px solid var(--hljs-bg); - background: rgb(113, 113, 117); -} - -.post-content :not(table) ::-webkit-scrollbar-thumb:hover { - background: rgb(163, 163, 165); -} - -.gist table::-webkit-scrollbar-thumb { - border: 2px solid rgb(255, 255, 255); - background: rgb(173, 173, 173); -} - -.gist table::-webkit-scrollbar-thumb:hover { - background: rgb(112, 112, 112); -} - -.post-content table::-webkit-scrollbar-thumb { - border-width: 2px; -} - -/* from zmedia */ -@media screen and (min-width: 768px) { - - /* reset */ - ::-webkit-scrollbar { - width: 19px; - height: 11px; - } -} \ No newline at end of file diff --git a/src/themes/papermod/assets/js/fastsearch.js b/src/themes/papermod/assets/js/fastsearch.js deleted file mode 100644 index 06ebcfb..0000000 --- a/src/themes/papermod/assets/js/fastsearch.js +++ /dev/null @@ -1,147 +0,0 @@ -import * as params from '@params'; - -let fuse; // holds our search engine -let resList = document.getElementById('searchResults'); -let sInput = document.getElementById('searchInput'); -let first, last, current_elem = null -let resultsAvailable = false; - -// load our search index -window.onload = function () { - let xhr = new XMLHttpRequest(); - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - if (xhr.status === 200) { - let data = JSON.parse(xhr.responseText); - if (data) { - // fuse.js options; check fuse.js website for details - let options = { - distance: 100, - threshold: 0.4, - ignoreLocation: true, - keys: [ - 'title', - 'permalink', - 'summary', - 'content' - ] - }; - if (params.fuseOpts) { - options = { - isCaseSensitive: params.fuseOpts.iscasesensitive ?? false, - includeScore: params.fuseOpts.includescore ?? false, - includeMatches: params.fuseOpts.includematches ?? false, - minMatchCharLength: params.fuseOpts.minmatchcharlength ?? 1, - shouldSort: params.fuseOpts.shouldsort ?? true, - findAllMatches: params.fuseOpts.findallmatches ?? false, - keys: params.fuseOpts.keys ?? ['title', 'permalink', 'summary', 'content'], - location: params.fuseOpts.location ?? 0, - threshold: params.fuseOpts.threshold ?? 0.4, - distance: params.fuseOpts.distance ?? 100, - ignoreLocation: params.fuseOpts.ignorelocation ?? true - } - } - fuse = new Fuse(data, options); // build the index from the json file - } - } else { - console.log(xhr.responseText); - } - } - }; - xhr.open('GET', "../index.json"); - xhr.send(); -} - -function activeToggle(ae) { - document.querySelectorAll('.focus').forEach(function (element) { - // rm focus class - element.classList.remove("focus") - }); - if (ae) { - ae.focus() - document.activeElement = current_elem = ae; - ae.parentElement.classList.add("focus") - } else { - document.activeElement.parentElement.classList.add("focus") - } -} - -function reset() { - resultsAvailable = false; - resList.innerHTML = sInput.value = ''; // clear inputbox and searchResults - sInput.focus(); // shift focus to input box -} - -// execute search as each character is typed -sInput.onkeyup = function (e) { - // run a search query (for "term") every time a letter is typed - // in the search box - if (fuse) { - const results = fuse.search(this.value.trim()); // the actual query being run using fuse.js - if (results.length !== 0) { - // build our html if result exists - let resultSet = ''; // our results bucket - - for (let item in results) { - resultSet += `
  • ${results[item].item.title} »
    ` + - `
  • ` - } - - resList.innerHTML = resultSet; - resultsAvailable = true; - first = resList.firstChild; - last = resList.lastChild; - } else { - resultsAvailable = false; - resList.innerHTML = ''; - } - } -} - -sInput.addEventListener('search', function (e) { - // clicked on x - if (!this.value) reset() -}) - -// kb bindings -document.onkeydown = function (e) { - let key = e.key; - let ae = document.activeElement; - - let inbox = document.getElementById("searchbox").contains(ae) - - if (ae === sInput) { - let elements = document.getElementsByClassName('focus'); - while (elements.length > 0) { - elements[0].classList.remove('focus'); - } - } else if (current_elem) ae = current_elem; - - if (key === "Escape") { - reset() - } else if (!resultsAvailable || !inbox) { - return - } else if (key === "ArrowDown") { - e.preventDefault(); - if (ae == sInput) { - // if the currently focused element is the search input, focus the of first
  • - activeToggle(resList.firstChild.lastChild); - } else if (ae.parentElement != last) { - // if the currently focused element's parent is last, do nothing - // otherwise select the next search result - activeToggle(ae.parentElement.nextSibling.lastChild); - } - } else if (key === "ArrowUp") { - e.preventDefault(); - if (ae.parentElement == first) { - // if the currently focused element is first item, go to input box - activeToggle(sInput); - } else if (ae != sInput) { - // if the currently focused element is input box, do nothing - // otherwise select the previous search result - activeToggle(ae.parentElement.previousSibling.lastChild); - } - } else if (key === "ArrowRight") { - ae.click(); // click on active link - } -} diff --git a/src/themes/papermod/assets/js/fuse.basic.min.js b/src/themes/papermod/assets/js/fuse.basic.min.js deleted file mode 100644 index 89477c6..0000000 --- a/src/themes/papermod/assets/js/fuse.basic.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io) - * - * Copyright (c) 2022 Kiro Risk (http://kiro.me) - * All Rights Reserved. Apache Software License 2.0 - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ -var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(_).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),a=parseFloat(Math.round(o*r)/r);return n.set(i,a),a},clear:function(){n.clear()}}}var O=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?L.getFn:n,o=t.fieldNormWeight,a=void 0===o?L.fieldNormWeight:o;r(this,e),this.norm=S(a,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,u(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();u(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?L.getFn:r,o=n.fieldNormWeight,a=void 0===o?L.fieldNormWeight:o,c=new O({getFn:i,fieldNormWeight:a});return c.setKeys(e.map(k)),c.setSources(t),c.create(),c}function j(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,a=t.expectedLocation,c=void 0===a?0:a,s=t.distance,h=void 0===s?L.distance:s,u=t.ignoreLocation,l=void 0===u?L.ignoreLocation:u,d=r/e.length;if(l)return d;var f=Math.abs(c-o);return h?d+f/h:f?1:d}function E(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:L.minMatchCharLength,n=[],r=-1,i=-1,o=0,a=e.length;o=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var I=32;function F(e){for(var t={},n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,a=void 0===o?L.location:o,c=i.threshold,s=void 0===c?L.threshold:c,h=i.distance,u=void 0===h?L.distance:h,l=i.includeMatches,d=void 0===l?L.includeMatches:l,f=i.findAllMatches,v=void 0===f?L.findAllMatches:f,g=i.minMatchCharLength,y=void 0===g?L.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?L.isCaseSensitive:p,b=i.ignoreLocation,k=void 0===b?L.ignoreLocation:b;if(r(this,e),this.options={location:a,threshold:s,distance:u,includeMatches:d,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:k},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var M=function(e,t){n.chunks.push({pattern:e,alphabet:F(e),startIndex:t})},w=this.pattern.length;if(w>I){for(var x=0,_=w%I,S=w-_;x3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?L.location:i,a=r.distance,c=void 0===a?L.distance:a,s=r.threshold,h=void 0===s?L.threshold:s,u=r.findAllMatches,l=void 0===u?L.findAllMatches:u,d=r.minMatchCharLength,f=void 0===d?L.minMatchCharLength:d,v=r.includeMatches,g=void 0===v?L.includeMatches:v,y=r.ignoreLocation,m=void 0===y?L.ignoreLocation:y;if(t.length>I)throw new Error(p(I));for(var b,k=t.length,M=e.length,w=Math.max(0,Math.min(o,M)),x=h,_=w,S=f>1||g,O=S?Array(M):[];(b=e.indexOf(t,_))>-1;){var A=j(t,{currentLocation:b,expectedLocation:w,distance:c,ignoreLocation:m});if(x=Math.min(A,x),_=b+k,S)for(var F=0;F=T;R-=1){var U=R-1,B=n[e.charAt(U)];if(S&&(O[U]=+!!B),J[R]=(J[R+1]<<1|1)&B,$&&(J[R]|=(C[R+1]|C[R])<<1|1|C[R+1]),J[R]&W&&(N=j(t,{errors:$,currentLocation:U,expectedLocation:w,distance:c,ignoreLocation:m}))<=x){if(x=N,(_=U)<=w)break;T=Math.max(1,2*w-_)}}if(j(t,{errors:$+1,currentLocation:w,expectedLocation:w,distance:c,ignoreLocation:m})>x)break;C=J}var V={isMatch:_>=0,score:Math.max(.001,N)};if(S){var q=E(O,f);q.length?g&&(V.indices=q):V.isMatch=!1}return V}(e,n,i,{location:a+o,distance:s,threshold:h,findAllMatches:u,minMatchCharLength:l,includeMatches:r,ignoreLocation:d}),m=y.isMatch,b=y.score,k=y.indices;m&&(g=!0),v+=b,m&&k&&(f=[].concat(c(f),c(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=f),y}}]),e}(),N=[];function P(e,t){for(var n=0,r=N.length;n-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function D(e,t){t.score=e.score}function K(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?L.includeMatches:r,o=n.includeScore,a=void 0===o?L.includeScore:o,c=[];return i&&c.push($),a&&c.push(D),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return c.length&&c.forEach((function(t){t(e,r)})),r}))}var T=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;if(r(this,e),this.options=t(t({},L),i),this.options.useExtendedSearch)throw new Error(y);this._keyStore=new b(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof O))throw new Error("Incorrect 'index' type");this._myIndex=t||A(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){f(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,a=i.includeScore,c=i.shouldSort,s=i.sortFn,h=i.ignoreFieldNorm,d=u(e)?u(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return W(d,{ignoreFieldNorm:h}),c&&d.sort(s),l(r)&&r>-1&&(d=d.slice(0,r)),K(d,this._docs,{includeMatches:o,includeScore:a})}},{key:"_searchStringList",value:function(e){var t=P(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(f(n)){var a=t.searchIn(n),c=a.isMatch,s=a.score,h=a.indices;c&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:h}]})}})),r}},{key:"_searchLogical",value:function(e){throw new Error("Logical search is not available")}},{key:"_searchObjectList",value:function(e){var t=this,n=P(e,this.options),r=this._myIndex,i=r.keys,o=r.records,a=[];return o.forEach((function(e){var r=e.$,o=e.i;if(f(r)){var s=[];i.forEach((function(e,i){s.push.apply(s,c(t._findMatches({key:e,value:r[i],searcher:n})))})),s.length&&a.push({idx:o,item:r,matches:s})}})),a}},{key:"_findMatches",value:function(e){var t=e.key,n=e.value,r=e.searcher;if(!f(n))return[];var i=[];if(h(n))n.forEach((function(e){var n=e.v,o=e.i,a=e.n;if(f(n)){var c=r.searchIn(n),s=c.isMatch,h=c.score,u=c.indices;s&&i.push({score:h,key:t,value:n,idx:o,norm:a,indices:u})}}));else{var o=n.v,a=n.n,c=r.searchIn(o),s=c.isMatch,u=c.score,l=c.indices;s&&i.push({score:u,key:t,value:o,norm:a,indices:l})}return i}}]),e}();return T.version="6.6.2",T.createIndex=A,T.parseIndex=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?L.getFn:n,i=t.fieldNormWeight,o=void 0===i?L.fieldNormWeight:i,a=e.keys,c=e.records,s=new O({getFn:r,fieldNormWeight:o});return s.setKeys(a),s.setIndexRecords(c),s},T.config=L,T},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t(); \ No newline at end of file diff --git a/src/themes/papermod/assets/js/highlight.min.js b/src/themes/papermod/assets/js/highlight.min.js deleted file mode 100644 index 93a6f86..0000000 --- a/src/themes/papermod/assets/js/highlight.min.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - Highlight.js 10.2.1 (32fb9a1d) - License: BSD-3-Clause - Copyright (c) 2006-2020, Ivan Sagalaev -*/ -var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""}function g(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var d=l();if(s+=t(r.substring(i,d[0].offset)),i=d[0].offset,d===e){o.reverse().forEach(u);do{g(d.splice(0,1)[0]),d=l()}while(d===e&&d.length&&d[0].offset===i);o.reverse().forEach(c)}else"start"===d[0].event?o.push(d[0].node):o.pop(),g(d.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function g(e){return e?"string"==typeof e?e:e.source:null}const d="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},m={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},b=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(m),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=b("//","$"),x=b("/\\*","\\*/"),E=b("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:d,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>g(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:m,COMMENT:b,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:d,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),w="of and for in not or if then".split(" ");function N(e,n){return n?+n:function(e){return w.includes(e.toLowerCase())}(e)?0:1}const y={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!hljs.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,t(this.code);let e;return this.autoDetect?(e=hljs.highlightAuto(this.code),this.detectedLanguage=e.language):(e=hljs.highlight(this.language,this.code,this.ignoreIllegals),this.detectectLanguage=this.language),e.value},autoDetect(){return!(this.language&&(e=this.autodetect,!e&&""!==e));var e},ignoreIllegals:()=>!0},render(e){return e("pre",{},[e("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}},R={install(e){e.component("highlightjs",y)}},k=t,M=r,{nodeStream:O,mergeStreams:L}=i,A=Symbol("nomatch");return function(t){var a=[],i=Object.create(null),s=Object.create(null),o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,d="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function m(e,n,t,r){var a={code:n,language:e};j("before:highlight",a);var i=a.result?a.result:b(a.language,a.code,t,r);return i.code=a.code,j("after:highlight",i),i}function b(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=R.subLanguage?function(){if(""!==L){var e=null;if("string"==typeof R.subLanguage){if(!i[R.subLanguage])return void O.addText(L);e=b(R.subLanguage,L,!0,M[R.subLanguage]),M[R.subLanguage]=e.top}else e=v(L,R.subLanguage.length?R.subLanguage:null);R.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!R.keywords)return void O.addText(L);let e=0;R.keywordPatternRe.lastIndex=0;let n=R.keywordPatternRe.exec(L),t="";for(;n;){t+=L.substring(e,n.index);const r=c(R,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=R.keywordPatternRe.lastIndex,n=R.keywordPatternRe.exec(L)}t+=L.substr(e),O.addText(t)}(),L=""}function h(e){return e.className&&O.openNode(e.className),R=Object.create(e,{parent:{value:R}})}function p(e){return 0===R.matcher.regexIndex?(L+=e[0],1):(S=!0,0)}var m={};function x(t,r){var i=r&&r[0];if(L+=t,null==i)return u(),0;if("begin"===m.type&&"end"===r.type&&m.index===r.index&&""===i){if(L+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=m.rule,n}return 1}if(m=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?L+=t:(r.excludeBegin&&(L+=t),u(),r.returnBegin||r.excludeBegin||(L=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(R.className||"")+'"');throw e.mode=R,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(R,e,r);if(!a)return A;var i=R;i.skip?L+=t:(i.returnEnd||i.excludeEnd||(L+=t),u(),i.excludeEnd&&(L=t));do{R.className&&O.closeNode(),R.skip||R.subLanguage||(I+=R.relevance),R=R.parent}while(R!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==A)return s}if("illegal"===r.type&&""===i)return 1;if(j>1e5&&j>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return L+=i,i.length}var E=y(e);if(!E)throw console.error(d.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(g(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;let t=n.exec(e);if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)}return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&this.considerAll()),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,N(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=g(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),w="",R=s||_,M={},O=new f.__emitter(f);!function(){for(var e=[],n=R;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var L="",I=0,T=0,j=0,S=!1;try{for(R.matcher.considerAll();;){j++,S?S=!1:R.matcher.considerAll(),R.matcher.lastIndex=T;const e=R.matcher.exec(o);if(!e)break;const n=x(o.substring(T,e.index),e);T=e.index+n}return x(o.substr(T)),O.closeAllNodes(),O.finalize(),w=O.toHTML(),{relevance:I,value:w,language:e,illegal:!1,emitter:O,top:R}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(T-100,T+100),mode:n.mode},sofar:w,relevance:0,value:k(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:k(o),emitter:O,language:e,top:R,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:k(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(y).filter(T).forEach((function(n){var a=b(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"
    ":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=y(t[1]);return r||(console.warn(d.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||y(e))}(e);if(p(t))return;j("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"):n=e;const r=n.textContent,a=t?m(t,r,!0):v(r),i=O(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=L(i,O(e),r)}a.value=x(a.value),j("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const w=()=>{if(!w.called){w.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function y(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function I(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function T(e){var n=y(e);return n&&!n.disableAutodetect}function j(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:m,highlightAuto:v,fixMarkup:function(e){return console.warn("fixMarkup is deprecated and will be removed entirely in v11.0"),console.warn("Please see https://github.com/highlightjs/highlight.js/issues/2534"),x(e)},highlightBlock:E,configure:function(e){f=M(f,e)},initHighlighting:w,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",w,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&I(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:y,registerAliases:I,requireLanguage:function(e){var n=y(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:T,inherit:M,addPlugin:function(e){o.push(e)},vuePlugin:R}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.2.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); -hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}()); -hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}()); -hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}()); -hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.requireLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}()); -hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}()); -hljs.registerLanguage("cpp",function(){"use strict";return function(e){var i=e.requireLanguage("c-like").rawDefinition();return i.disableAutodetect=!1,i.name="C++",i.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],i}}()); -hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in init int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}()); -hljs.registerLanguage("css",function(){"use strict";return function(e){var n={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{name:"CSS",case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,n]}]}}}()); -hljs.registerLanguage("diff",function(){"use strict";return function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}}()); -hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:"e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}()); -hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface enum",end:/[{;=]/,excludeEnd:!0,keywords:"class interface enum",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}()); -hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*$)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:""},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}()); -hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}()); -hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}()); -hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}()); -hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}()); -hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[c],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}()); -hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}()); -hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}()); -hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}()); -hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}()); -hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},n=e.inherit(e.APOS_STRING_MODE,{illegal:null}),i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(a)}),o=e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*(\w+)\n/,end:/[ \t]*(\w+)\b/,contains:e.QUOTE_STRING_MODE.contains.concat(a)}),l={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[e.inherit(n,{begin:"b'",end:"'"}),e.inherit(i,{begin:'b"',end:'"'}),i,n,o]},s={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},c={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:c,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:c,contains:["self",r,e.C_BLOCK_COMMENT_MODE,l,s]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},l,s]}}}()); -hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}()); -hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}()); -hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}()); -hljs.registerLanguage("python",function(){"use strict";return function(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}()); -hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}()); -hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}()); -hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:""}]}}}()); -hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}()); -hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}()); -hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}()); -hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}()); -hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}()); -hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}()); \ No newline at end of file diff --git a/src/themes/papermod/assets/js/license.js b/src/themes/papermod/assets/js/license.js deleted file mode 100644 index 8e81d22..0000000 --- a/src/themes/papermod/assets/js/license.js +++ /dev/null @@ -1,6 +0,0 @@ -/* - PaperMod v6 - License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE - Copyright (c) 2020 nanxiaobei and adityatelange - Copyright (c) 2021-2022 adityatelange -*/ diff --git a/src/themes/papermod/go.mod b/src/themes/papermod/go.mod deleted file mode 100644 index af95855..0000000 --- a/src/themes/papermod/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/adityatelange/hugo-PaperMod - -go 1.12 diff --git a/src/themes/papermod/i18n/ar.yaml b/src/themes/papermod/i18n/ar.yaml deleted file mode 100644 index 11f50a2..0000000 --- a/src/themes/papermod/i18n/ar.yaml +++ /dev/null @@ -1,22 +0,0 @@ -- id: prev_page - translation: "الصفحة السابقة" - -- id: next_page - translation: "الصفحة التالية" - -- id: read_time - translation: - one: "دقيقة واحدة" - two: "دقيقتان" - few: "بضع ثوان" - zero: "الآن" - other: "دقائق {{ .Count }}" - -- id: toc - translation: "فهرس المحتوى" - -- id: translations - translation: "ترجمات أخرى" - -- id: home - translation: "الصفحة الرئيسية" diff --git a/src/themes/papermod/i18n/bg.yaml b/src/themes/papermod/i18n/bg.yaml deleted file mode 100644 index 1e314af..0000000 --- a/src/themes/papermod/i18n/bg.yaml +++ /dev/null @@ -1,16 +0,0 @@ -- id: prev_page - translation: "Предишна страница" - -- id: next_page - translation: "Следваща страница" - -- id: read_time - translation: - one : "1 мин" - other: "{{ .Count }} мин" - -- id: toc - translation: "Съдържание" - -- id: translations - translation: "Преводи" diff --git a/src/themes/papermod/i18n/bn.yaml b/src/themes/papermod/i18n/bn.yaml deleted file mode 100644 index f42780f..0000000 --- a/src/themes/papermod/i18n/bn.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "পূর্ববর্তী" - -- id: next_page - translation: "পরবর্তী" - -- id: read_time - translation: - one : "১ মিনিট" - other: "{{ .Count }} মিনিট" - -- id: words - translation: - one : "১ টি শব্দ" - other: "{{ .Count }} টি শব্দ" - -- id: toc - translation: "সূচিপত্র" - -- id: translations - translation: "অনুবাদসমূহ" - -- id: home - translation: "হোম" - -- id: edit_post - translation: "সম্পাদনা করুন" - -- id: code_copy - translation: "কপি করুন" - -- id: code_copied - translation: "কপি হয়েছে!" diff --git a/src/themes/papermod/i18n/ca.yaml b/src/themes/papermod/i18n/ca.yaml deleted file mode 100644 index 15713e1..0000000 --- a/src/themes/papermod/i18n/ca.yaml +++ /dev/null @@ -1,19 +0,0 @@ -- id: prev_page - translation: "Pàgina anterior" - -- id: next_page - translation: "Pàgina següent" - -- id: read_time - translation: - one : "1 min" - other: "{{ .Count }} min" - -- id: toc - translation: "Taula de Continguts" - -- id: translations - translation: "Traduccions" - -- id: home - translation: "Inici" diff --git a/src/themes/papermod/i18n/ckb.yaml b/src/themes/papermod/i18n/ckb.yaml deleted file mode 100644 index 25789d1..0000000 --- a/src/themes/papermod/i18n/ckb.yaml +++ /dev/null @@ -1,25 +0,0 @@ -- id: prev_page - translation: "پەڕەی پێشتر" - -- id: next_page - translation: "پەڕەی دواتر" - -- id: read_time - translation: - one : "1 خولەک" - other: "{{ .Count }} خولەک" - -- id: toc - translation: "پێڕست" - -- id: translations - translation: "وەرگێڕانەکان" - -- id: home - translation: "ماڵەوە" - -- id: code_copy - translation: "لەبەری بگرەوە" - -- id: code_copied - translation: "لەبەر گیرایەوە!" diff --git a/src/themes/papermod/i18n/da.yaml b/src/themes/papermod/i18n/da.yaml deleted file mode 100644 index 03b0abe..0000000 --- a/src/themes/papermod/i18n/da.yaml +++ /dev/null @@ -1,28 +0,0 @@ -- id: prev_page - translation: "Forrige Side" - -- id: next_page - translation: "Næste Side" - -- id: read_time - translation: - one: "1 min" - other: "{{ .Count }} min" - -- id: toc - translation: "Indholdsfortegnelse" - -- id: translations - translation: "Oversættelser" - -- id: home - translation: "Start" - -- id: edit_post - translation: "Rediger" - -- id: code_copy - translation: "kopier" - -- id: code_copied - translation: "kopieret!" diff --git a/src/themes/papermod/i18n/de.yaml b/src/themes/papermod/i18n/de.yaml deleted file mode 100644 index f64aad9..0000000 --- a/src/themes/papermod/i18n/de.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "Vorherige" - -- id: next_page - translation: "Nächste" - -- id: read_time - translation: - one: "1 Minute" - other: "{{ .Count }} Minuten" - -- id: words - translation: - one : "Wort" - other: "{{ .Count }} Wörter" - -- id: toc - translation: "Inhaltsverzeichnis" - -- id: translations - translation: "Übersetzungen" - -- id: home - translation: "Home" - -- id: edit_post - translation: "Bearbeiten" - -- id: code_copy - translation: "Kopieren" - -- id: code_copied - translation: "Kopiert!" diff --git a/src/themes/papermod/i18n/en.yaml b/src/themes/papermod/i18n/en.yaml deleted file mode 100644 index 3a1e215..0000000 --- a/src/themes/papermod/i18n/en.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "Prev" - -- id: next_page - translation: "Next" - -- id: read_time - translation: - one : "1 min" - other: "{{ .Count }} min" - -- id: words - translation: - one : "word" - other: "{{ .Count }} words" - -- id: toc - translation: "Table of Contents" - -- id: translations - translation: "Translations" - -- id: home - translation: "Home" - -- id: edit_post - translation: "Edit" - -- id: code_copy - translation: "copy" - -- id: code_copied - translation: "copied!" diff --git a/src/themes/papermod/i18n/eo.yaml b/src/themes/papermod/i18n/eo.yaml deleted file mode 100644 index de5d744..0000000 --- a/src/themes/papermod/i18n/eo.yaml +++ /dev/null @@ -1,25 +0,0 @@ -- id: prev_page - translation: "antaŭa paĝo" - -- id: next_page - translation: "sekva paĝo" - -- id: read_time - translation: - one : "1 min" - other: "{{ .Count }} min" - -- id: toc - translation: "Enhavo" - -- id: translations - translation: "tradukoj" - -- id: home - translation: "ĉefpaĝo" - -- id: code_copy - translation: "kopii" - -- id: code_copied - translation: "kopiite!" diff --git a/src/themes/papermod/i18n/es.yaml b/src/themes/papermod/i18n/es.yaml deleted file mode 100644 index 52a559c..0000000 --- a/src/themes/papermod/i18n/es.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "Anterior" - -- id: next_page - translation: "Siguiente" - -- id: read_time - translation: - one : "1 min" - other: "{{ .Count }} min" - -- id: words - translation: - one : "palabra" - other: "{{ .Count }} palabras" - -- id: toc - translation: "Tabla de Contenidos" - -- id: translations - translation: "Traducciones" - -- id: home - translation: "Inicio" - -- id: edit_post - translation: "Editar" - -- id: code_copy - translation: "copiar" - -- id: code_copied - translation: "¡copiado!" diff --git a/src/themes/papermod/i18n/fa.yaml b/src/themes/papermod/i18n/fa.yaml deleted file mode 100644 index 3fd5927..0000000 --- a/src/themes/papermod/i18n/fa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -- id: prev_page - translation: "صفحه قبلی" - -- id: next_page - translation: "صفحه بعدی" - -- id: read_time - translation: - one: "۱ دقیقه" - other: "{{ .Count }} دقیقه" - -- id: toc - translation: "فهرست مطالب" - -- id: translations - translation: "ترجمه ها" - -- id: home - translation: "خانه" - -- id: edit_post - translation: "ویرایش" - -- id: code_copy - translation: "کپی" - -- id: code_copied - translation: "کپی شد!" \ No newline at end of file diff --git a/src/themes/papermod/i18n/fr.yaml b/src/themes/papermod/i18n/fr.yaml deleted file mode 100644 index b074c10..0000000 --- a/src/themes/papermod/i18n/fr.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "Page précédente" - -- id: next_page - translation: "Page suivante" - -- id: read_time - translation: - one : "1 min" - other: "{{ .Count }} min" - -- id: words - translation: - one : "mot" - other: "{{ .Count }} mots" - -- id: toc - translation: "Table des matières" - -- id: translations - translation: "Traductions" - -- id: home - translation: "Accueil" - -- id: edit_post - translation: "Modifier" - -- id: code_copy - translation: "Copier" - -- id: code_copied - translation: "Copié !" diff --git a/src/themes/papermod/i18n/he.yaml b/src/themes/papermod/i18n/he.yaml deleted file mode 100644 index 3912fb8..0000000 --- a/src/themes/papermod/i18n/he.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "קודם" - -- id: next_page - translation: "הבא" - -- id: read_time - translation: - one : "דקה אחת" - other: "דקות {{ .Count }}" - -- id: words - translation: - one : "word" - other: "מילים {{ .Count }} " - -- id: toc - translation: "תוכן העניינים" - -- id: translations - translation: "תרגומים" - -- id: home - translation: "בית" - -- id: edit_post - translation: "ערוך" - -- id: code_copy - translation: "העתק" - -- id: code_copied - translation: "!הועתק" diff --git a/src/themes/papermod/i18n/hi.yaml b/src/themes/papermod/i18n/hi.yaml deleted file mode 100644 index 681efdc..0000000 --- a/src/themes/papermod/i18n/hi.yaml +++ /dev/null @@ -1,19 +0,0 @@ -- id: prev_page - translation: "पिछला" - -- id: next_page - translation: "अगला" - -- id: read_time - translation: - one : "एक मिनट" - other: "{{ .Count }} मिनट" - -- id: edit_post - translation: "सुधारें" - -- id: toc - translation: "विषय - सूची" - -- id: translations - translation: "अनुवाद" diff --git a/src/themes/papermod/i18n/hr.yaml b/src/themes/papermod/i18n/hr.yaml deleted file mode 100644 index 2f2d228..0000000 --- a/src/themes/papermod/i18n/hr.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "Prethodna stranica" - -- id: next_page - translation: "Sljedeća stranica" - -- id: read_time - translation: - one : "1 minuta" - other: "{{ .Count }} minute" - -- id: words - translation: - one : "riječ" - other: "{{ .Count }} riječi" - -- id: toc - translation: "Tablica Sadržaja" - -- id: translations - translation: "Prijevodi" - -- id: home - translation: "Početna stranica" - -- id: edit_post - translation: "Promjeni" - -- id: code_copy - translation: "kopiraj" - -- id: code_copied - translation: "kopirano!" diff --git a/src/themes/papermod/i18n/hu.yaml b/src/themes/papermod/i18n/hu.yaml deleted file mode 100644 index a039dda..0000000 --- a/src/themes/papermod/i18n/hu.yaml +++ /dev/null @@ -1,16 +0,0 @@ -- id: prev_page - translation: "Előző oldal" - -- id: next_page - translation: "Következő oldal" - -- id: read_time - translation: - one: "1 perc" - other: "{{ .Count }} perc" - -- id: toc - translation: "Tartalomjegyzék" - -- id: translations - translation: "Fordítások" diff --git a/src/themes/papermod/i18n/id.yaml b/src/themes/papermod/i18n/id.yaml deleted file mode 100644 index 93d34f5..0000000 --- a/src/themes/papermod/i18n/id.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "Sebelumnya" - -- id: next_page - translation: "Selanjutnya" - -- id: read_time - translation: - one : "1 menit" - other: "{{ .Count }} menit" - -- id: words - translation: - one : "kata" - other: "{{ .Count }} kata" - -- id: toc - translation: "Daftar isi" - -- id: translations - translation: "Terjemahan" - -- id: home - translation: "Beranda" - -- id: edit_post - translation: "Sunting" - -- id: code_copy - translation: "salin" - -- id: code_copied - translation: "disalin!" \ No newline at end of file diff --git a/src/themes/papermod/i18n/it.yaml b/src/themes/papermod/i18n/it.yaml deleted file mode 100644 index ef41db4..0000000 --- a/src/themes/papermod/i18n/it.yaml +++ /dev/null @@ -1,27 +0,0 @@ -- id: prev_page - translation: "Pag Prec" - -- id: next_page - translation: "Pag Succ" - -- id: read_time - translation: - one: "1 minuto" - other: "{{ .Count }} minuti" - -- id: words - translation: - one : "parola" - other: "{{ .Count }} parole" - -- id: toc - translation: "Tabella dei Contenuti" - -- id: translations - translation: "Traduzioni" - -- id: code_copy - translation: "copia" - -- id: code_copied - translation: "copiato!" diff --git a/src/themes/papermod/i18n/ja.yaml b/src/themes/papermod/i18n/ja.yaml deleted file mode 100644 index bc7bf37..0000000 --- a/src/themes/papermod/i18n/ja.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "前のページ" - -- id: next_page - translation: "次のページ" - -- id: read_time - translation: - one : "1 分" - other: "{{ .Count }} 分" - -- id: words - translation: - one: "文字" - other: "{{ .Count }} 文字" - -- id: toc - translation: "目次" - -- id: translations - translation: "言語" - -- id: home - translation: "ホーム" - -- id: edit_post - translation: "編集" - -- id: code_copy - translation: "コピー" - -- id: code_copied - translation: "コピーされました!" diff --git a/src/themes/papermod/i18n/ko.yaml b/src/themes/papermod/i18n/ko.yaml deleted file mode 100644 index 777dd93..0000000 --- a/src/themes/papermod/i18n/ko.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "이전 페이지" - -- id: next_page - translation: "다음 페이지" - -- id: read_time - translation: - one : "1 분" - other: "{{ .Count }} 분" - -- id: words - translation: - one : "단어" - other: "{{ .Count }} 단어" - -- id: toc - translation: "목차" - -- id: translations - translation: "번역" - -- id: home - translation: "홈" - -- id: edit_post - translation: "편집" - -- id: code_copy - translation: "복사" - -- id: code_copied - translation: "복사 완료!" diff --git a/src/themes/papermod/i18n/ku.yaml b/src/themes/papermod/i18n/ku.yaml deleted file mode 100644 index d1d30a5..0000000 --- a/src/themes/papermod/i18n/ku.yaml +++ /dev/null @@ -1,25 +0,0 @@ -- id: prev_page - translation: "Rûpela Paş" - -- id: next_page - translation: "Rûpela Pêş" - -- id: read_time - translation: - one : "1 xulek" - other: "{{ .Count }} xulek" - -- id: toc - translation: "Pêrist" - -- id: translations - translation: "Wergeran" - -- id: home - translation: "Xanî" - -- id: code_copy - translation: "Jê bigire" - -- id: code_copied - translation: "Hat jêgirtin!" diff --git a/src/themes/papermod/i18n/mn.yaml b/src/themes/papermod/i18n/mn.yaml deleted file mode 100644 index dbce2ce..0000000 --- a/src/themes/papermod/i18n/mn.yaml +++ /dev/null @@ -1,25 +0,0 @@ -- id: prev_page - translation: "Ѳмнѳх" - -- id: next_page - translation: "Дараах" - -- id: read_time - translation: - one : "1 МИН" - other: "{{ .Count }} МИН" - -- id: toc - translation: "Агуулга" - -- id: translations - translation: "Орчуулга" - -- id: home - translation: "Нүүр" - -- id: code_copy - translation: "хуулах" - -- id: code_copied - translation: "хуулсан!" diff --git a/src/themes/papermod/i18n/ms.yaml b/src/themes/papermod/i18n/ms.yaml deleted file mode 100644 index d8a9eff..0000000 --- a/src/themes/papermod/i18n/ms.yaml +++ /dev/null @@ -1,28 +0,0 @@ -- id: prev_page - translation: "Halaman Sebelumnya" - -- id: next_page - translation: "Halaman Seterusnya" - -- id: read_time - translation: - one: "1 minit" - other: "{{ .Count }} minit" - -- id: toc - translation: "Isi Kandungan" - -- id: translations - translation: "Terjemahan" - -- id: home - translation: "Home" - -- id: edit_post - translation: "Sunting" - -- id: code_copy - translation: "Salin" - -- id: code_copied - translation: "Disalin!" diff --git a/src/themes/papermod/i18n/nl.yaml b/src/themes/papermod/i18n/nl.yaml deleted file mode 100644 index e9d06fa..0000000 --- a/src/themes/papermod/i18n/nl.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "Vorige" - -- id: next_page - translation: "Volgende" - -- id: read_time - translation: - one: "1 min" - other: "{{ .Count }} min" - -- id: words - translation: - one : "woord" - other: "{{ .Count }} woorden" - -- id: toc - translation: "Inhoudsopgave" - -- id: translations - translation: "Vertalingen" - -- id: home - translation: "Startpagina" - -- id: edit_post - translation: "Bewerk" - -- id: code_copy - translation: "kopieer" - -- id: code_copied - translation: "gekopieerd!" diff --git a/src/themes/papermod/i18n/pl.yaml b/src/themes/papermod/i18n/pl.yaml deleted file mode 100644 index fdf6b0c..0000000 --- a/src/themes/papermod/i18n/pl.yaml +++ /dev/null @@ -1,28 +0,0 @@ -- id: prev_page - translation: "Poprzednia strona" - -- id: next_page - translation: "Następna strona" - -- id: read_time - translation: - one: "1 min" - other: "{{ .Count }} min" - -- id: toc - translation: "Spis treści" - -- id: translations - translation: "Tłumaczenia" - -- id: home - translation: "Strona Główna" - -- id: edit_post - translation: "Edytuj" - -- id: code_copy - translation: "Kopiuj" - -- id: code_copied - translation: "Skopiowano!" diff --git a/src/themes/papermod/i18n/pt.yaml b/src/themes/papermod/i18n/pt.yaml deleted file mode 100644 index f449de9..0000000 --- a/src/themes/papermod/i18n/pt.yaml +++ /dev/null @@ -1,21 +0,0 @@ -- id: prev_page - translation: "Página Anterior" - -- id: next_page - translation: "Próxima Página" - -- id: read_time - translation: - one: "1 minuto" - other: "{{ .Count }} minutos" - -- id: words - translation: - one : "palavra" - other: "{{ .Count }} palavras" - -- id: toc - translation: "Conteúdo" - -- id: translations - translation: "Traduções" diff --git a/src/themes/papermod/i18n/ru.yaml b/src/themes/papermod/i18n/ru.yaml deleted file mode 100644 index a5dbb5c..0000000 --- a/src/themes/papermod/i18n/ru.yaml +++ /dev/null @@ -1,39 +0,0 @@ -- id: prev_page - translation: "Предыдущая" - -- id: next_page - translation: "Следующая" - -- id: read_time - translation: - zero: "0 минут" - one: "1 минута" - few: "{{ .Count }} минуты" - many: "{{ .Count }} минут" - other: "{{ .Count }} минута" - -- id: words - translation: - zero: "0 слов" - one: "1 слово" - few: "{{ .Count }} слова" - many: "{{ .Count }} слов" - other: "{{ .Count }} слово" - -- id: toc - translation: "Оглавление" - -- id: translations - translation: "Переводы" - -- id: home - translation: "Главная" - -- id: edit_post - translation: "Редактировать" - -- id: code_copy - translation: "копировать" - -- id: code_copied - translation: "скопировано!" \ No newline at end of file diff --git a/src/themes/papermod/i18n/sv.yaml b/src/themes/papermod/i18n/sv.yaml deleted file mode 100644 index 65ce422..0000000 --- a/src/themes/papermod/i18n/sv.yaml +++ /dev/null @@ -1,28 +0,0 @@ -- id: prev_page - translation: "Förra Sidan" - -- id: next_page - translation: "Nästa Sida" - -- id: read_time - translation: - one: "1 min" - other: "{{ .Count }} min" - -- id: toc - translation: "Innehållsförteckning" - -- id: translations - translation: "Översättningar" - -- id: home - translation: "Hem" - -- id: edit_post - translation: "Redigera" - -- id: code_copy - translation: "kopiera" - -- id: code_copied - translation: "kopierad!" diff --git a/src/themes/papermod/i18n/tr.yaml b/src/themes/papermod/i18n/tr.yaml deleted file mode 100644 index d11ef21..0000000 --- a/src/themes/papermod/i18n/tr.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "Önceki" - -- id: next_page - translation: "Sonraki" - -- id: read_time - translation: - one : "1 dk" - other: "{{ .Count }} dk" - -- id: words - translation: - one : "kelime" - other: "{{ .Count }} kelime" - -- id: toc - translation: "İçindekiler" - -- id: translations - translation: "Çeviriler" - -- id: home - translation: "Anasayfa" - -- id: edit_post - translation: "Düzenle" - -- id: code_copy - translation: "Kopyala" - -- id: code_copied - translation: "Kopyalandı!" diff --git a/src/themes/papermod/i18n/uk.yaml b/src/themes/papermod/i18n/uk.yaml deleted file mode 100644 index 41be964..0000000 --- a/src/themes/papermod/i18n/uk.yaml +++ /dev/null @@ -1,25 +0,0 @@ -- id: prev_page - translation: "Попередня" - -- id: next_page - translation: "Наступна" - -- id: read_time - translation: - one : "1 хвилина" - other: "{{ .Count }} хвилин" - -- id: toc - translation: "Зміст" - -- id: translations - translation: "Переклади" - -- id: home - translation: "Головна" - -- id: code_copy - translation: "копіювати" - -- id: code_copied - translation: "скопійовано!" \ No newline at end of file diff --git a/src/themes/papermod/i18n/uz.yaml b/src/themes/papermod/i18n/uz.yaml deleted file mode 100644 index c9f2375..0000000 --- a/src/themes/papermod/i18n/uz.yaml +++ /dev/null @@ -1,20 +0,0 @@ -- id: prev_page - translation: "Oldingi sahifa" - -- id: next_page - translation: "Keyingi sahifa" - -- id: read_time - translation: - one : "Bir daqiqa" - other: "{{ .Count }} daqiqa" - -- id: toc - translation: "Mundarija" - -- id: translations - translation: "Tarjimalar" - -- id: home - translation: "Bosh sahifa" - diff --git a/src/themes/papermod/i18n/vi.yaml b/src/themes/papermod/i18n/vi.yaml deleted file mode 100644 index a3832ed..0000000 --- a/src/themes/papermod/i18n/vi.yaml +++ /dev/null @@ -1,25 +0,0 @@ -- id: prev_page - translation: "Trang trước" - -- id: next_page - translation: "Trang tiếp theo" - -- id: read_time - translation: - one : "1 phút" - other: "{{ .Count }} phút" - -- id: toc - translation: "Mục lục" - -- id: translations - translation: "Bản dịch" - -- id: home - translation: "Trang chủ" - -- id: code_copy - translation: "Sao chép" - -- id: code_copied - translation: "Đã sao chép!" diff --git a/src/themes/papermod/i18n/zh-tw.yaml b/src/themes/papermod/i18n/zh-tw.yaml deleted file mode 100644 index 48b84d2..0000000 --- a/src/themes/papermod/i18n/zh-tw.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "上一頁" - -- id: next_page - translation: "下一頁" - -- id: read_time - translation: - one : "1 分鐘" - other: "{{ .Count }} 分鐘" - -- id: words - translation: - one: "字" - other: "{{ .Count }} 字" - -- id: toc - translation: "目錄" - -- id: translations - translation: "語言" - -- id: home - translation: "首頁" - -- id: edit_post - translation: "編輯" - -- id: code_copy - translation: "複製" - -- id: code_copied - translation: "已複製!" diff --git a/src/themes/papermod/i18n/zh.yaml b/src/themes/papermod/i18n/zh.yaml deleted file mode 100644 index 0280425..0000000 --- a/src/themes/papermod/i18n/zh.yaml +++ /dev/null @@ -1,33 +0,0 @@ -- id: prev_page - translation: "上一页" - -- id: next_page - translation: "下一页" - -- id: read_time - translation: - one : "1 分钟" - other: "{{ .Count }} 分钟" - -- id: words - translation: - one: "字" - other: "{{ .Count }} 字" - -- id: toc - translation: "目录" - -- id: translations - translation: "语言" - -- id: home - translation: "主页" - -- id: edit_post - translation: "编辑" - -- id: code_copy - translation: "复制" - -- id: code_copied - translation: "已复制!" diff --git a/src/themes/papermod/images/screenshot.png b/src/themes/papermod/images/screenshot.png deleted file mode 100644 index a37c485abef2bfce648503d110b7b580da91325c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141511 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 - -{{- $pages := where site.RegularPages "Type" "in" site.Params.mainSections }} - -{{- if site.Params.ShowAllPagesInArchive }} -{{- $pages = site.RegularPages }} -{{- end }} - -{{- range $pages.GroupByPublishDate "2006" }} -{{- if ne .Key "0001" }} - -{{- end }} -{{- end }} - -{{- end }}{{/* end main */}} diff --git a/src/themes/papermod/layouts/_default/baseof.html b/src/themes/papermod/layouts/_default/baseof.html deleted file mode 100644 index 3d13f07..0000000 --- a/src/themes/papermod/layouts/_default/baseof.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - {{- partial "head.html" . }} - - - - {{- partialCached "header.html" . .Page -}} -
    - {{- block "main" . }}{{ end }} -
    - {{ partialCached "footer.html" . .Layout .Kind (.Param "hideFooter") (.Param "ShowCodeCopyButtons") -}} - - - diff --git a/src/themes/papermod/layouts/_default/index.json b/src/themes/papermod/layouts/_default/index.json deleted file mode 100644 index feeb437..0000000 --- a/src/themes/papermod/layouts/_default/index.json +++ /dev/null @@ -1,7 +0,0 @@ -{{- $.Scratch.Add "index" slice -}} -{{- range site.RegularPages -}} - {{- if and (not .Params.searchHidden) (ne .Layout `archives`) (ne .Layout `search`) }} - {{- $.Scratch.Add "index" (dict "title" .Title "content" .Plain "permalink" .Permalink "summary" .Summary) -}} - {{- end }} -{{- end -}} -{{- $.Scratch.Get "index" | jsonify -}} diff --git a/src/themes/papermod/layouts/_default/list.html b/src/themes/papermod/layouts/_default/list.html deleted file mode 100644 index 3a6f316..0000000 --- a/src/themes/papermod/layouts/_default/list.html +++ /dev/null @@ -1,112 +0,0 @@ -{{- define "main" }} - -{{- if (and site.Params.profileMode.enabled .IsHome) }} -{{- partial "index_profile.html" . }} -{{- else }} {{/* if not profileMode */}} - -{{- if not .IsHome | and .Title }} - -{{- end }} - -{{- if .Content }} -
    - {{- if not (.Param "disableAnchoredHeadings") }} - {{- partial "anchored_headings.html" .Content -}} - {{- else }}{{ .Content }}{{ end }} -
    -{{- end }} - -{{- $pages := union .RegularPages .Sections }} - -{{- if .IsHome }} -{{- $pages = where site.RegularPages "Type" "in" site.Params.mainSections }} -{{- $pages = where $pages "Params.hiddenInHomeList" "!=" "true" }} -{{- end }} - -{{- $paginator := .Paginate $pages }} - -{{- if and .IsHome site.Params.homeInfoParams (eq $paginator.PageNumber 1) }} -{{- partial "home_info.html" . }} -{{- end }} - -{{- $term := .Data.Term }} -{{- range $index, $page := $paginator.Pages }} - -{{- $class := "post-entry" }} - -{{- $user_preferred := or site.Params.disableSpecial1stPost site.Params.homeInfoParams }} -{{- if (and $.IsHome (eq $paginator.PageNumber 1) (eq $index 0) (not $user_preferred)) }} -{{- $class = "first-entry" }} -{{- else if $term }} -{{- $class = "post-entry tag-entry" }} -{{- end }} - -
    - {{- $isHidden := (site.Params.cover.hidden | default site.Params.cover.hiddenInList) }} - {{- partial "cover.html" (dict "cxt" . "IsHome" true "isHidden" $isHidden) }} -
    -

    - {{- .Title }} - {{- if .Draft }}  [draft]{{- end }} -

    -
    - {{- if (ne (.Param "hideSummary") true) }} -
    -

    {{ .Summary | plainify | htmlUnescape }}{{ if .Truncated }}...{{ end }}

    -
    - {{- end }} - {{- if not (.Param "hideMeta") }} -
    - {{- partial "post_meta.html" . -}} -
    - {{- end }} - -
    -{{- end }} - -{{- if gt $paginator.TotalPages 1 }} - -{{- end }} - -{{- end }}{{/* end profileMode */}} - -{{- end }}{{- /* end main */ -}} diff --git a/src/themes/papermod/layouts/_default/rss.xml b/src/themes/papermod/layouts/_default/rss.xml deleted file mode 100644 index 134d50d..0000000 --- a/src/themes/papermod/layouts/_default/rss.xml +++ /dev/null @@ -1,50 +0,0 @@ -{{- $pctx := . -}} -{{- if .IsHome -}}{{ $pctx = site }}{{- end -}} -{{- $pages := slice -}} -{{- if or $.IsHome $.IsSection -}} -{{- $pages = $pctx.RegularPages -}} -{{- else -}} -{{- $pages = $pctx.Pages -}} -{{- end -}} -{{- $limit := site.Config.Services.RSS.Limit -}} -{{- if ge $limit 1 -}} -{{- $pages = $pages | first $limit -}} -{{- end -}} -{{- printf "" | safeHTML }} - - - {{ if eq .Title site.Title }}{{ site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ site.Title }}{{ end }} - {{ .Permalink }} - Recent content {{ if ne .Title site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ site.Title }} - {{- with site.Params.images }} - - {{ index . 0 | absURL }} - {{ index . 0 | absURL }} - - {{- end }} - Hugo -- gohugo.io{{ with site.LanguageCode }} - {{.}}{{end}}{{ with site.Author.email }} - {{.}}{{ with site.Author.name }} ({{.}}){{end}}{{end}}{{ with site.Author.email }} - {{.}}{{ with site.Author.name }} ({{.}}){{end}}{{end}}{{ with site.Copyright }} - {{.}}{{end}}{{ if not .Date.IsZero }} - {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}{{ end }} - {{- with .OutputFormats.Get "RSS" -}} - {{ printf "" .Permalink .MediaType | safeHTML }} - {{- end -}} - {{ range $pages }} - {{- if and (ne .Layout `search`) (ne .Layout `archives`) }} - - {{ .Title }} - {{ .Permalink }} - {{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }} - {{ with site.Author.email }}{{.}}{{ with site.Author.name }} ({{.}}){{end}}{{end}} - {{ .Permalink }} - {{ with .Description | html }}{{ . }}{{ else }}{{ .Summary | html }}{{ end -}} - {{- if site.Params.ShowFullTextinRSS }} - {{ (printf "" .Content) | safeHTML }} - {{- end }} - - {{- end }} - {{ end }} - - diff --git a/src/themes/papermod/layouts/_default/search.html b/src/themes/papermod/layouts/_default/search.html deleted file mode 100644 index 2349587..0000000 --- a/src/themes/papermod/layouts/_default/search.html +++ /dev/null @@ -1,29 +0,0 @@ -{{- define "main" }} - - - - - -{{- end }}{{/* end main */}} diff --git a/src/themes/papermod/layouts/_default/single.html b/src/themes/papermod/layouts/_default/single.html deleted file mode 100644 index b749725..0000000 --- a/src/themes/papermod/layouts/_default/single.html +++ /dev/null @@ -1,58 +0,0 @@ -{{- define "main" }} - -
    -
    - {{ partial "breadcrumbs.html" . }} -

    - {{ .Title }} - {{- if .Draft }}  [draft]{{- end }} -

    - {{- if .Description }} -
    - {{ .Description }} -
    - {{- end }} - {{- if not (.Param "hideMeta") }} - - {{- end }} -
    - {{- $isHidden := .Params.cover.hidden | default site.Params.cover.hiddenInSingle | default site.Params.cover.hidden }} - {{- partial "cover.html" (dict "cxt" . "IsHome" false "isHidden" $isHidden) }} - {{- if (.Param "ShowToc") }} - {{- partial "toc.html" . }} - {{- end }} - - {{- if .Content }} -
    - {{- if not (.Param "disableAnchoredHeadings") }} - {{- partial "anchored_headings.html" .Content -}} - {{- else }}{{ .Content }}{{ end }} -
    - {{- end }} - -
    - {{- $tags := .Language.Params.Taxonomies.tag | default "tags" }} - - {{- if (.Param "ShowPostNavLinks") }} - {{- partial "post_nav_links.html" . }} - {{- end }} - {{- if (and site.Params.ShowShareButtons (ne .Params.disableShare true)) }} - {{- partial "share_icons.html" . -}} - {{- end }} -
    - - {{- if (.Param "comments") }} - {{- partial "comments.html" . }} - {{- end }} -
    - -{{- end }}{{/* end main */}} diff --git a/src/themes/papermod/layouts/_default/terms.html b/src/themes/papermod/layouts/_default/terms.html deleted file mode 100644 index 6fd2654..0000000 --- a/src/themes/papermod/layouts/_default/terms.html +++ /dev/null @@ -1,27 +0,0 @@ -{{- define "main" }} - -{{- if .Title }} - -{{- end }} - -
      - {{- $type := .Type }} - {{- range $key, $value := .Data.Terms.Alphabetical }} - {{- $name := .Name }} - {{- $count := .Count }} - {{- with site.GetPage (printf "/%s/%s" $type $name) }} -
    • - {{ .Name }} {{ $count }} -
    • - {{- end }} - {{- end }} -
    - -{{- end }}{{/* end main */ -}} diff --git a/src/themes/papermod/layouts/partials/anchored_headings.html b/src/themes/papermod/layouts/partials/anchored_headings.html deleted file mode 100644 index 377af89..0000000 --- a/src/themes/papermod/layouts/partials/anchored_headings.html +++ /dev/null @@ -1,2 +0,0 @@ -{{- /* formats .Content headings by adding an anchor */ -}} -{{ . | replaceRE "()" "${1}${3}" | safeHTML }} diff --git a/src/themes/papermod/layouts/partials/author.html b/src/themes/papermod/layouts/partials/author.html deleted file mode 100644 index 8f2758f..0000000 --- a/src/themes/papermod/layouts/partials/author.html +++ /dev/null @@ -1,9 +0,0 @@ -{{- if or .Params.author site.Params.author }} -{{- $author := (.Params.author | default site.Params.author) }} -{{- $author_type := (printf "%T" $author) }} -{{- if (or (eq $author_type "[]string") (eq $author_type "[]interface {}")) }} -{{- (delimit $author ", " ) }} -{{- else }} -{{- $author }} -{{- end }} -{{- end -}} diff --git a/src/themes/papermod/layouts/partials/breadcrumbs.html b/src/themes/papermod/layouts/partials/breadcrumbs.html deleted file mode 100644 index 7e8257b..0000000 --- a/src/themes/papermod/layouts/partials/breadcrumbs.html +++ /dev/null @@ -1,19 +0,0 @@ -{{- if (.Param "ShowBreadCrumbs") -}} - -{{- end -}} diff --git a/src/themes/papermod/layouts/partials/comments.html b/src/themes/papermod/layouts/partials/comments.html deleted file mode 100644 index 918451a..0000000 --- a/src/themes/papermod/layouts/partials/comments.html +++ /dev/null @@ -1,3 +0,0 @@ -{{- /* Comments area start */ -}} -{{- /* to add comments read => https://gohugo.io/content-management/comments/ */ -}} -{{- /* Comments area end */ -}} diff --git a/src/themes/papermod/layouts/partials/cover.html b/src/themes/papermod/layouts/partials/cover.html deleted file mode 100644 index 5c5f2fb..0000000 --- a/src/themes/papermod/layouts/partials/cover.html +++ /dev/null @@ -1,40 +0,0 @@ -{{- with .cxt}} {{/* Apply proper context from dict */}} -{{- if (and .Params.cover.image (not $.isHidden)) }} -{{- $alt := (.Params.cover.alt | default .Params.cover.caption | plainify) }} -
    - {{- $responsiveImages := (.Params.cover.responsiveImages | default site.Params.cover.responsiveImages) | default true }} - {{- $addLink := (and site.Params.cover.linkFullImages (not $.IsHome)) }} - {{- $cover := (.Resources.ByType "image").GetMatch (printf "*%s*" (.Params.cover.image)) }} - {{- if $cover -}}{{/* i.e it is present in page bundle */}} - {{- if $addLink }}{{ end -}} - {{- $sizes := (slice "360" "480" "720" "1080" "1500") }} - {{- $processableFormats := (slice "jpg" "jpeg" "png" "tif" "bmp" "gif") -}} - {{- if hugo.IsExtended -}} - {{- $processableFormats = $processableFormats | append "webp" -}} - {{- end -}} - {{- $prod := (hugo.IsProduction | or (eq site.Params.env "production")) }} - {{- if (and (in $processableFormats $cover.MediaType.SubType) ($responsiveImages) (eq $prod true)) }} - {{ $alt }} - {{- else }}{{/* Unprocessable image or responsive images disabled */}} - {{ $alt }} - {{- end }} - {{- else }}{{/* For absolute urls and external links, no img processing here */}} - {{- if $addLink }}{{ end -}} - {{ $alt }} - {{- end }} - {{- if $addLink }}{{ end -}} - {{/* Display Caption */}} - {{- if not $.IsHome }} - {{ with .Params.cover.caption }}

    {{ . | markdownify }}

    {{- end }} - {{- end }} -
    -{{- end }}{{/* End image */}} -{{- end -}}{{/* End context */ -}} diff --git a/src/themes/papermod/layouts/partials/edit_post.html b/src/themes/papermod/layouts/partials/edit_post.html deleted file mode 100644 index efa4c70..0000000 --- a/src/themes/papermod/layouts/partials/edit_post.html +++ /dev/null @@ -1,8 +0,0 @@ -{{- if or .Params.editPost.URL site.Params.editPost.URL -}} -{{- $fileUrlPath := path.Join .File.Path }} - -{{- if or .Params.author site.Params.author (.Param "ShowReadingTime") (not .Date.IsZero) .IsTranslated }} | {{- end -}} - - {{- .Params.editPost.Text | default (site.Params.editPost.Text | default (i18n "edit_post" | default "Edit")) -}} - -{{- end }} diff --git a/src/themes/papermod/layouts/partials/extend_footer.html b/src/themes/papermod/layouts/partials/extend_footer.html deleted file mode 100644 index 0519748..0000000 --- a/src/themes/papermod/layouts/partials/extend_footer.html +++ /dev/null @@ -1,3 +0,0 @@ -{{- /* Footer custom content area start */ -}} -{{- /* Insert any custom code web-analytics, resources, etc. here */ -}} -{{- /* Footer custom content area end */ -}} diff --git a/src/themes/papermod/layouts/partials/extend_head.html b/src/themes/papermod/layouts/partials/extend_head.html deleted file mode 100644 index 150cbef..0000000 --- a/src/themes/papermod/layouts/partials/extend_head.html +++ /dev/null @@ -1,4 +0,0 @@ -{{- /* Head custom content area start */ -}} -{{- /* Insert any custom code (web-analytics, resources, etc.) - it will appear in the section of every page. */ -}} -{{- /* Can be overwritten by partial with the same name in the global layouts. */ -}} -{{- /* Head custom content area end */ -}} diff --git a/src/themes/papermod/layouts/partials/footer.html b/src/themes/papermod/layouts/partials/footer.html deleted file mode 100644 index 52668eb..0000000 --- a/src/themes/papermod/layouts/partials/footer.html +++ /dev/null @@ -1,135 +0,0 @@ -{{- if not (.Param "hideFooter") }} -
    - {{- if site.Copyright }} - {{ site.Copyright | markdownify }} - {{- else }} - © {{ now.Year }} {{ site.Title }} - {{- end }} - - Powered by - Hugo & - PaperMod - -
    -{{- end }} - -{{- if (not site.Params.disableScrollToTop) }} - - - - - -{{- end }} - -{{- partial "extend_footer.html" . }} - - - -{{- if (not site.Params.disableScrollToTop) }} - -{{- end }} - -{{- if (not site.Params.disableThemeToggle) }} - -{{- end }} - -{{- if (and (eq .Kind "page") (ne .Layout "archives") (ne .Layout "search") (.Param "ShowCodeCopyButtons")) }} - -{{- end }} diff --git a/src/themes/papermod/layouts/partials/head.html b/src/themes/papermod/layouts/partials/head.html deleted file mode 100644 index 35257fc..0000000 --- a/src/themes/papermod/layouts/partials/head.html +++ /dev/null @@ -1,170 +0,0 @@ - - - -{{- if hugo.IsProduction | or (eq site.Params.env "production") | and (ne .Params.robotsNoIndex true) }} - -{{- else }} - -{{- end }} - -{{- /* Title */}} -{{ if .IsHome }}{{ else }}{{ if .Title }}{{ .Title }} | {{ end }}{{ end }}{{ site.Title }} - -{{- /* Meta */}} -{{- if .IsHome }} -{{ with site.Params.keywords -}}{{ end }} -{{- else }} - -{{- end }} - - - -{{- if site.Params.analytics.google.SiteVerificationTag }} - -{{- end }} -{{- if site.Params.analytics.yandex.SiteVerificationTag }} - -{{- end }} -{{- if site.Params.analytics.bing.SiteVerificationTag }} - -{{- end }} -{{- if site.Params.analytics.naver.SiteVerificationTag }} - -{{- end }} - -{{- /* Styles */}} - -{{- /* includes */}} -{{- $includes := slice }} -{{- $includes = $includes | append (" " | resources.FromString "assets/css/includes-blank.css")}} - -{{- if not (eq site.Params.assets.disableScrollBarStyle true) }} - {{- $ScrollStyle := (resources.Get "css/includes/scroll-bar.css") }} - {{- $includes = (append $ScrollStyle $includes) }} -{{- end }} - -{{- $includes_all := $includes | resources.Concat "assets/css/includes.css" }} - -{{- $theme_vars := (resources.Get "css/core/theme-vars.css") }} -{{- $reset := (resources.Get "css/core/reset.css") }} -{{- $media := (resources.Get "css/core/zmedia.css") }} -{{- $license_css := (resources.Get "css/core/license.css") }} -{{- $common := (resources.Match "css/common/*.css") | resources.Concat "assets/css/common.css" }} - -{{- /* include `an-old-hope` if hljs is on */}} -{{- $isHLJSdisabled := (site.Params.assets.disableHLJS | default false) }} -{{- $hljs := (cond ($isHLJSdisabled) (".chroma { background-color: unset !important;}" | resources.FromString "assets/css/hljs-blank.css") (resources.Get "css/hljs/an-old-hope.min.css")) }} - -{{- /* order is important */}} -{{- $core := (slice $theme_vars $reset $common $hljs $includes_all $media) | resources.Concat "assets/css/core.css" | resources.Minify }} -{{- $extended := (resources.Match "css/extended/*.css") | resources.Concat "assets/css/extended.css" | resources.Minify }} - -{{- /* bundle all required css */}} -{{- /* Add extended css after theme style */ -}} -{{- $stylesheet := (slice $license_css $core $extended) | resources.Concat "assets/css/stylesheet.css" }} - -{{- if not site.Params.assets.disableFingerprinting }} -{{- $stylesheet := $stylesheet | fingerprint }} - -{{- else }} - -{{- end }} - -{{- /* Search */}} -{{- if (eq .Layout `search`) -}} - -{{- $fastsearch := resources.Get "js/fastsearch.js" | js.Build (dict "params" (dict "fuseOpts" site.Params.fuseOpts)) | resources.Minify }} -{{- $fusejs := resources.Get "js/fuse.basic.min.js" }} -{{- $license_js := resources.Get "js/license.js" }} -{{- if not site.Params.assets.disableFingerprinting }} -{{- $search := (slice $fusejs $license_js $fastsearch ) | resources.Concat "assets/js/search.js" | fingerprint }} - -{{- else }} -{{- $search := (slice $fusejs $fastsearch ) | resources.Concat "assets/js/search.js" }} - -{{- end }} -{{- end -}} - -{{- /* Highlight.js */}} -{{- $isHLJSdisabled := (site.Params.assets.disableHLJS | default .Params.disableHLJS ) }} -{{- if (and (eq .Kind "page") (ne .Layout "archives") (ne .Layout "search") (not $isHLJSdisabled)) }} -{{- if not site.Params.assets.disableFingerprinting }} -{{- $highlight := slice (resources.Get "js/highlight.min.js") | resources.Concat "assets/js/highlight.js" | fingerprint }} - -{{- else }} -{{- $highlight := slice (resources.Get "js/highlight.min.js") | resources.Concat "assets/js/highlight.js" }} - -{{- end }} -{{- end }} - -{{- /* Favicons */}} - - - - - - - - -{{- /* RSS */}} -{{ range .AlternativeOutputFormats -}} - -{{ end -}} -{{- range .AllTranslations -}} - -{{ end -}} - - - -{{- partial "extend_head.html" . -}} - -{{- /* Misc */}} -{{- if hugo.IsProduction | or (eq site.Params.env "production") }} -{{- template "_internal/google_analytics.html" . }} -{{- template "partials/templates/opengraph.html" . }} -{{- template "partials/templates/twitter_cards.html" . }} -{{- template "partials/templates/schema_json.html" . }} -{{- end -}} diff --git a/src/themes/papermod/layouts/partials/header.html b/src/themes/papermod/layouts/partials/header.html deleted file mode 100644 index 4a7291e..0000000 --- a/src/themes/papermod/layouts/partials/header.html +++ /dev/null @@ -1,149 +0,0 @@ -{{- /* theme-toggle is enabled */}} -{{- if (not site.Params.disableThemeToggle) }} -{{- /* theme is light */}} -{{- if (eq site.Params.defaultTheme "light") }} - -{{- /* theme is dark */}} -{{- else if (eq site.Params.defaultTheme "dark") }} - -{{- else }} -{{- /* theme is auto */}} - -{{- end }} -{{- /* theme-toggle is disabled and theme is auto */}} -{{- else if (and (ne site.Params.defaultTheme "light") (ne site.Params.defaultTheme "dark"))}} - -{{- end }} - -
    - -
    diff --git a/src/themes/papermod/layouts/partials/home_info.html b/src/themes/papermod/layouts/partials/home_info.html deleted file mode 100644 index efae956..0000000 --- a/src/themes/papermod/layouts/partials/home_info.html +++ /dev/null @@ -1,13 +0,0 @@ -{{- with site.Params.homeInfoParams }} -
    -
    -

    {{ .Title | markdownify }}

    -
    -
    - {{ .Content | markdownify }} -
    -
    - {{ partial "social_icons.html" site.Params.socialIcons }} -
    -
    -{{- end -}} diff --git a/src/themes/papermod/layouts/partials/index_profile.html b/src/themes/papermod/layouts/partials/index_profile.html deleted file mode 100644 index d9ddbda..0000000 --- a/src/themes/papermod/layouts/partials/index_profile.html +++ /dev/null @@ -1,58 +0,0 @@ -
    - {{- with site.Params.profileMode }} -
    - {{- if .imageUrl -}} - {{- $img := "" }} - {{- if not (urls.Parse .imageUrl).IsAbs }} - {{- $img = resources.Get .imageUrl }} - {{- end }} - {{- if $img }} - {{- $processableFormats := (slice "jpg" "jpeg" "png" "tif" "bmp" "gif") -}} - {{- if hugo.IsExtended -}} - {{- $processableFormats = $processableFormats | append "webp" -}} - {{- end -}} - {{- $prod := (hugo.IsProduction | or (eq site.Params.env "production")) }} - {{- if and (in $processableFormats $img.MediaType.SubType) (eq $prod true)}} - {{- if (not (and (not .imageHeight) (not .imageWidth))) }} - {{- $img = $img.Resize (printf "%dx%d" .imageWidth .imageHeight) }} - {{- else if .imageHeight }} - {{- $img = $img.Resize (printf "x%d" .imageHeight) }} - {{ else if .imageWidth }} - {{- $img = $img.Resize (printf "%dx" .imageWidth) }} - {{ else }} - {{- $img = $img.Resize "150x150" }} - {{- end }} - {{- end }} - {{ .imageTitle | default - {{- else }} - {{ .imageTitle | default - {{- end }} - {{- end }} -

    {{ .title | default site.Title | markdownify }}

    - {{ .subtitle | markdownify }} - {{- partial "social_icons.html" site.Params.socialIcons -}} - - {{- with .buttons }} - - {{- end }} -
    - {{- end}} -
    diff --git a/src/themes/papermod/layouts/partials/post_canonical.html b/src/themes/papermod/layouts/partials/post_canonical.html deleted file mode 100644 index abfc1e3..0000000 --- a/src/themes/papermod/layouts/partials/post_canonical.html +++ /dev/null @@ -1,9 +0,0 @@ -{{ if and (.Params.canonicalURL) (.Params.ShowCanonicalLink ) -}} -{{ $url := urls.Parse .Params.canonicalURL }} - -{{- if or .Params.author site.Params.author (.Param "ShowReadingTime") (not .Date.IsZero) .IsTranslated (or .Params.editPost.URL site.Params.editPost.URL) }} | {{- end -}} - - {{- (site.Params.CanonicalLinkText | default .Params.CanonicalLinkText) | default "Originally published at" -}} -  {{ $url.Host }} - -{{- end }} diff --git a/src/themes/papermod/layouts/partials/post_meta.html b/src/themes/papermod/layouts/partials/post_meta.html deleted file mode 100644 index 15b8b1b..0000000 --- a/src/themes/papermod/layouts/partials/post_meta.html +++ /dev/null @@ -1,21 +0,0 @@ -{{- $scratch := newScratch }} - -{{- if not .Date.IsZero -}} -{{- $scratch.Add "meta" (slice (printf "%s" (.Date) (.Date | time.Format (default "January 2, 2006" site.Params.DateFormat)))) }} -{{- end }} - -{{- if (.Param "ShowReadingTime") -}} -{{- $scratch.Add "meta" (slice (i18n "read_time" .ReadingTime | default (printf "%d min" .ReadingTime))) }} -{{- end }} - -{{- if (.Param "ShowWordCount") -}} -{{- $scratch.Add "meta" (slice (i18n "words" .WordCount | default (printf "%d words" .WordCount))) }} -{{- end }} - -{{- with (partial "author.html" .) }} -{{- $scratch.Add "meta" (slice .) }} -{{- end }} - -{{- with ($scratch.Get "meta") }} -{{- delimit . " · " -}} -{{- end -}} diff --git a/src/themes/papermod/layouts/partials/post_nav_links.html b/src/themes/papermod/layouts/partials/post_nav_links.html deleted file mode 100644 index b988641..0000000 --- a/src/themes/papermod/layouts/partials/post_nav_links.html +++ /dev/null @@ -1,19 +0,0 @@ -{{- $pages := where site.RegularPages "Type" "in" site.Params.mainSections }} -{{- if and (gt (len $pages) 1) (in $pages . ) }} - -{{- end }} diff --git a/src/themes/papermod/layouts/partials/share_icons.html b/src/themes/papermod/layouts/partials/share_icons.html deleted file mode 100644 index 59ed050..0000000 --- a/src/themes/papermod/layouts/partials/share_icons.html +++ /dev/null @@ -1,71 +0,0 @@ -{{- $pageurl := .Permalink }} -{{- $title := .Title }} - -{{- $.Scratch.Set "tags" ""}} - -{{- with .Params.Tags }} -{{- $hashtags := newScratch}} -{{- range . }}{{ $hashtags.Add "tags" (slice (replaceRE "(\\s)" "" . ))}}{{end}} -{{- $.Scratch.Set "tags" (delimit ($hashtags.Get "tags") ",") }} -{{- end -}} - -{{- $custom := false }} -{{- $ShareButtons := (.Param "ShareButtons")}} -{{- with $ShareButtons }}{{ $custom = true }}{{ end }} - - \ No newline at end of file diff --git a/src/themes/papermod/layouts/partials/social_icons.html b/src/themes/papermod/layouts/partials/social_icons.html deleted file mode 100644 index 3f8d6a3..0000000 --- a/src/themes/papermod/layouts/partials/social_icons.html +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/src/themes/papermod/layouts/partials/svg.html b/src/themes/papermod/layouts/partials/svg.html deleted file mode 100644 index 49f5389..0000000 --- a/src/themes/papermod/layouts/partials/svg.html +++ /dev/null @@ -1,649 +0,0 @@ -{{- $icon_name := ( trim .name " " | lower )}} -{{- if (eq $icon_name "123rf") -}} - - - - -{{- else if (eq $icon_name "adobestock") -}} - - - - -{{- else if (eq $icon_name "anilist") -}} - - - -{{- else if (eq $icon_name "applemusic") -}} - - - -{{- else if (eq $icon_name "applepodcasts") -}} - - - -{{- else if (eq $icon_name "behance") -}} - - - -{{- else if (eq $icon_name "bilibili") -}} - - - - - - - -{{- else if (eq $icon_name "bitcoin") -}} - - - -{{- else if (eq $icon_name "buymeacoffee") -}} - - - - - - - - - - - - - - - - -{{- else if (eq $icon_name "codepen") -}} - - - - - - - -{{- else if (eq $icon_name "cryptohack") -}} - - - - - - -{{- else if (eq $icon_name "ctftime") -}} - - - - - - -{{- else if (eq $icon_name "cv") -}} - - - - - - -{{- else if (eq $icon_name "dev") -}} - - - -{{- else if (eq $icon_name "deviantart") -}} - - - -{{- else if (eq $icon_name "deezer") -}} - - - -{{- else if (eq $icon_name "discogs") -}} - - - -{{- else if (eq $icon_name "discord") -}} - - - - -{{- else if (eq $icon_name "dreamstime") -}} - - - -{{- else if (eq $icon_name "dribbble") -}} - - - - - -{{- else if (eq $icon_name "email") -}} - - - - -{{- else if (eq $icon_name "facebook") -}} - - - -{{- else if (eq $icon_name "flickr") -}} - - - -{{- else if (eq $icon_name "freepik") -}} - - - - - - -{{- else if (eq $icon_name "gitea") -}} - - - -{{- else if (eq $icon_name "github") -}} - - - - -{{- else if (eq $icon_name "gitlab") -}} - - - - -{{- else if (eq $icon_name "goodreads") -}} - - - -{{- else if (eq $icon_name "googlepodcasts") -}} - - - -{{- else if (eq $icon_name "googlescholar") -}} - - - -{{- else if (eq $icon_name "gurushots") -}} - - - - - - - - - - - - -{{- else if (eq $icon_name "hackerone") -}} - - - -{{- else if (eq $icon_name "hackerrank") -}} - - - - - - -{{- else if (eq $icon_name "hackthebox") -}} - - - - - - -{{- else if (eq $icon_name "instagram") -}} - - - - - -{{- else if (eq $icon_name "itchio") -}} - - - -{{- else if (eq $icon_name "kaggle") -}} - - - -{{- else if (eq $icon_name "kakaotalk") -}} - - - - - - - -{{- else if (eq $icon_name "keybase") -}} - - - -{{- else if (eq $icon_name "kofi") -}} - - - -{{- else if (eq $icon_name "komoot") -}} - - - -{{- else if (eq $icon_name "lastfm") -}} - - - -{{- else if (eq $icon_name "letterboxd") -}} - - - -{{- else if (eq $icon_name "liberapay") -}} - - - - - - -{{- else if (eq $icon_name "lichess" ) -}} - - - -{{- else if (eq $icon_name "linkedin") -}} - - - - - -{{- else if (eq $icon_name "mastodon") -}} - - - - -{{- else if (eq $icon_name "matrix") -}} - - - -{{- else if (eq $icon_name "medium") -}} - - - - - -{{- else if (eq $icon_name "microblog") -}} - - - - - - -{{- else if (eq $icon_name "mixcloud") -}} - - - -{{- else if (eq $icon_name "monero") -}} - - - -{{- else if (eq $icon_name "nuget") -}} - - - - - - - - -{{- else if (eq $icon_name "orcid") -}} - - - -{{- else if (eq $icon_name "osu!") -}} - - - - - - -{{- else if (eq $icon_name "overcast") -}} - - - -{{- else if (eq $icon_name "patreon") -}} - - - -{{- else if (eq $icon_name "paypal") -}} - - - -{{- else if (eq $icon_name "peertube") -}} - - - -{{- else if or (eq $icon_name "pgpkey") (eq $icon_name "key") -}} - - - - -{{- else if (eq $icon_name "phone") -}} - - - - - -{{- else if (eq $icon_name "pocketcasts") -}} - - - -{{- else if (eq $icon_name "polywork") -}} - -{{- else if (eq $icon_name "qq") -}} - - - - -{{- else if (eq $icon_name "reddit") -}} - - - -{{- else if (eq $icon_name "researchgate") -}} - - - -{{- else if (eq $icon_name "rss") -}} - - - - - -{{- else if (eq $icon_name "serverfault") -}} - - - -{{- else if (eq $icon_name "sessionmessenger") -}} - - - - -{{- else if (eq $icon_name "soundcloud") -}} - - - -{{- else if (eq $icon_name "shutterstock") -}} - - - - -{{- else if (eq $icon_name "sketchfab") -}} - - - -{{- else if (eq $icon_name "slack") -}} - - - - - - - -{{- else if (eq $icon_name "snapchat") -}} - - - -{{- else if (eq $icon_name "sourcehut") -}} - - - - -{{- else if (eq $icon_name "spotify") -}} - - - -{{- else if (eq $icon_name "stackoverflow") -}} - - - -{{- else if (eq $icon_name "steam") -}} - - - - - - - - - -{{- else if (eq $icon_name "strava") -}} - - - -{{- else if (eq $icon_name "telegram") -}} - - - -{{- else if (eq $icon_name "threema") -}} - - - -{{- else if (eq $icon_name "tiktok") -}} - - - -{{- else if (eq $icon_name "twitch") -}} - - - -{{- else if (eq $icon_name "twitter") -}} - - - - -{{- else if (eq $icon_name "unsplash") -}} - - - - -{{- else if (eq $icon_name "vimeo") -}} - - - -{{- else if (eq $icon_name "xda") -}} - - - -{{- else if (eq $icon_name "xing") -}} - - - - -{{- else if (eq $icon_name "xmpp") -}} - - - - -{{- else if (eq $icon_name "ycombinator") -}} - - - -{{- else if (eq $icon_name "youtube") -}} - - - - - -{{- else if $icon_name -}} - - - - -{{- end -}} diff --git a/src/themes/papermod/layouts/partials/templates/opengraph.html b/src/themes/papermod/layouts/partials/templates/opengraph.html deleted file mode 100644 index 9e8df14..0000000 --- a/src/themes/papermod/layouts/partials/templates/opengraph.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - -{{- if .Params.cover.image -}} -{{- if (ne .Params.cover.relative true) }} - -{{- else}} - -{{- end}} -{{- else }} - -{{- with $.Params.images -}} -{{- range first 6 . }}{{ end -}} -{{- else -}} -{{- $images := $.Resources.ByType "image" -}} -{{- $featured := $images.GetMatch "*feature*" -}} -{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}} -{{- with $featured -}} - -{{- else -}} -{{- with site.Params.images }}{{ end -}} -{{- end -}} -{{- end -}} -{{- end }} - -{{- if .IsPage }} -{{- $iso8601 := "2006-01-02T15:04:05-07:00" -}} - -{{ with .PublishDate }}{{ end }} -{{ with .Lastmod }}{{ end }} -{{- end -}} - -{{- with .Params.audio }}{{ end }} -{{- with .Params.locale }}{{ end }} -{{- with site.Params.title }}{{ end }} -{{- with .Params.videos }}{{- range . }} - -{{ end }}{{ end }} - -{{- /* If it is part of a series, link to related articles */}} -{{- $permalink := .Permalink }} -{{- $siteSeries := site.Taxonomies.series }} -{{ with .Params.series }}{{- range $name := . }} - {{- $series := index $siteSeries ($name | urlize) }} - {{- range $page := first 6 $series.Pages }} - {{- if ne $page.Permalink $permalink }}{{ end }} - {{- end }} -{{ end }}{{ end }} - -{{- /* Facebook Page Admin ID for Domain Insights */}} -{{- with site.Social.facebook_admin }}{{ end }} diff --git a/src/themes/papermod/layouts/partials/templates/schema_json.html b/src/themes/papermod/layouts/partials/templates/schema_json.html deleted file mode 100644 index 74abbb5..0000000 --- a/src/themes/papermod/layouts/partials/templates/schema_json.html +++ /dev/null @@ -1,119 +0,0 @@ -{{ if .IsHome }} - -{{- else if (or .IsPage .IsSection) }} -{{/* BreadcrumbList */}} -{{- $url := replace .Parent.Permalink ( printf "%s" site.BaseURL) "" }} -{{- $lang_url := strings.TrimPrefix ( printf "%s/" .Lang) $url }} -{{- $bc_list := (split $lang_url "/")}} - -{{- $scratch := newScratch }} - -{{- if .IsPage }} - -{{- end }}{{/* .IsPage end */}} - -{{- end -}} diff --git a/src/themes/papermod/layouts/partials/templates/twitter_cards.html b/src/themes/papermod/layouts/partials/templates/twitter_cards.html deleted file mode 100644 index bd46e37..0000000 --- a/src/themes/papermod/layouts/partials/templates/twitter_cards.html +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Params.cover.image -}} - -{{- if (ne $.Params.cover.relative true) }} - -{{- else }} - -{{- end}} -{{- else }} -{{- with $.Params.images -}} - - -{{ else -}} -{{- $images := $.Resources.ByType "image" -}} -{{- $featured := $images.GetMatch "*feature*" -}} -{{- if not $featured }}{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}{{ end -}} -{{- with $featured -}} - - -{{- else -}} -{{- with site.Params.images -}} - - -{{ else -}} - -{{- end -}} -{{- end -}} -{{- end }} -{{- end }} - - -{{ with site.Social.twitter -}} - -{{ end -}} diff --git a/src/themes/papermod/layouts/partials/toc.html b/src/themes/papermod/layouts/partials/toc.html deleted file mode 100644 index d9b8b23..0000000 --- a/src/themes/papermod/layouts/partials/toc.html +++ /dev/null @@ -1,97 +0,0 @@ -{{- $headers := findRE "(.|\n])+?
    " .Content -}} -{{- $has_headers := ge (len $headers) 1 -}} -{{- if $has_headers -}} -
    -
    - - {{- i18n "toc" | default "Table of Contents" }} - - -
    - {{- if (.Param "UseHugoToc") }} - {{- .TableOfContents -}} - {{- else }} - {{- $largest := 6 -}} - {{- range $headers -}} - {{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}} - {{- $headerLevel := len (seq $headerLevel) -}} - {{- if lt $headerLevel $largest -}} - {{- $largest = $headerLevel -}} - {{- end -}} - {{- end -}} - - {{- $firstHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers 0) 1) 0)) -}} - - {{- $.Scratch.Set "bareul" slice -}} -
      - {{- range seq (sub $firstHeaderLevel $largest) -}} -
        - {{- $.Scratch.Add "bareul" (sub (add $largest .) 1) -}} - {{- end -}} - {{- range $i, $header := $headers -}} - {{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}} - {{- $headerLevel := len (seq $headerLevel) -}} - - {{/* get id="xyz" */}} - {{- $id := index (findRE "(id=\"(.*?)\")" $header 9) 0 }} - - {{- /* strip id="" to leave xyz, no way to get regex capturing groups in hugo */ -}} - {{- $cleanedID := replace (replace $id "id=\"" "") "\"" "" }} - {{- $header := replaceRE "((.|\n])+?)" "$1" $header -}} - - {{- if ne $i 0 -}} - {{- $prevHeaderLevel := index (findRE "[1-6]" (index $headers (sub $i 1)) 1) 0 -}} - {{- $prevHeaderLevel := len (seq $prevHeaderLevel) -}} - {{- if gt $headerLevel $prevHeaderLevel -}} - {{- range seq $prevHeaderLevel (sub $headerLevel 1) -}} -
          - {{/* the first should not be recorded */}} - {{- if ne $prevHeaderLevel . -}} - {{- $.Scratch.Add "bareul" . -}} - {{- end -}} - {{- end -}} - {{- else -}} - - {{- if lt $headerLevel $prevHeaderLevel -}} - {{- range seq (sub $prevHeaderLevel 1) -1 $headerLevel -}} - {{- if in ($.Scratch.Get "bareul") . -}} -
        - {{/* manually do pop item */}} - {{- $tmp := $.Scratch.Get "bareul" -}} - {{- $.Scratch.Delete "bareul" -}} - {{- $.Scratch.Set "bareul" slice}} - {{- range seq (sub (len $tmp) 1) -}} - {{- $.Scratch.Add "bareul" (index $tmp (sub . 1)) -}} - {{- end -}} - {{- else -}} -
      - - {{- end -}} - {{- end -}} - {{- end -}} - {{- end }} -
    • - {{- $header | safeHTML -}} - {{- else }} -
    • - {{- $header | safeHTML -}} - {{- end -}} - {{- end -}} - - {{- $firstHeaderLevel := $largest }} - {{- $lastHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers (sub (len $headers) 1)) 1) 0)) }} -
    • - {{- range seq (sub $lastHeaderLevel $firstHeaderLevel) -}} - {{- if in ($.Scratch.Get "bareul") (add . $firstHeaderLevel) }} -
    - {{- else }} - -

    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 SaWs{<2jwqAA`-!=U&yzL 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%0AE_#}$`j!6qjR9< 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 -{{- end }}{{/* end main */ -}} diff --git a/src/themes/papermod/layouts/_default/_markup/render-image.html b/src/themes/papermod/layouts/_default/_markup/render-image.html deleted file mode 100644 index 1acb87d..0000000 --- a/src/themes/papermod/layouts/_default/_markup/render-image.html +++ /dev/null @@ -1 +0,0 @@ -{{ .Text }} diff --git a/src/themes/papermod/layouts/_default/archives.html b/src/themes/papermod/layouts/_default/archives.html deleted file mode 100644 index e400e2c..0000000 --- a/src/themes/papermod/layouts/_default/archives.html +++ /dev/null @@ -1,49 +0,0 @@ -{{- define "main" }} - -

  • - {{- end -}} - {{- end }} - - {{- end }} - - - -{{- end }} diff --git a/src/themes/papermod/layouts/partials/translation_list.html b/src/themes/papermod/layouts/partials/translation_list.html deleted file mode 100644 index 0028251..0000000 --- a/src/themes/papermod/layouts/partials/translation_list.html +++ /dev/null @@ -1,19 +0,0 @@ -{{- if .IsTranslated -}} -{{- if (ne .Layout "search") }} -{{- if or .Params.author site.Params.author (.Param "ShowReadingTime") (not .Date.IsZero) }} | {{- end -}} -{{- end }} -{{- i18n "translations" | default "Translations" }}: - -{{- end -}} diff --git a/src/themes/papermod/layouts/robots.txt b/src/themes/papermod/layouts/robots.txt deleted file mode 100644 index f26f508..0000000 --- a/src/themes/papermod/layouts/robots.txt +++ /dev/null @@ -1,7 +0,0 @@ -User-agent: * -{{- if hugo.IsProduction | or (eq site.Params.env "production") }} -Disallow: -{{- else }} -Disallow: / -{{- end }} -Sitemap: {{ "sitemap.xml" | absURL }} diff --git a/src/themes/papermod/layouts/shortcodes/collapse.html b/src/themes/papermod/layouts/shortcodes/collapse.html deleted file mode 100644 index 17d8d3b..0000000 --- a/src/themes/papermod/layouts/shortcodes/collapse.html +++ /dev/null @@ -1,8 +0,0 @@ -{{ if .Get "summary" }} -{{ else }} -{{ warnf "missing value for param 'summary': %s" .Position }} -{{ end }} -

    - {{ .Get "summary" | markdownify }} - {{ .Inner | markdownify }} -

    diff --git a/src/themes/papermod/layouts/shortcodes/figure.html b/src/themes/papermod/layouts/shortcodes/figure.html deleted file mode 100644 index 8c93eff..0000000 --- a/src/themes/papermod/layouts/shortcodes/figure.html +++ /dev/null @@ -1,31 +0,0 @@ - - {{- if .Get "link" -}} - - {{- end }} - {{ with .Get - {{- if .Get "link" }}{{ end -}} - {{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}} -
    - {{ with (.Get "title") -}} - {{ . }} - {{- end -}} - {{- if or (.Get "caption") (.Get "attr") -}}

    - {{- .Get "caption" | markdownify -}} - {{- with .Get "attrlink" }} - - {{- end -}} - {{- .Get "attr" | markdownify -}} - {{- if .Get "attrlink" }}{{ end }}

    - {{- end }} -
    - {{- end }} - diff --git a/src/themes/papermod/layouts/shortcodes/inTextImg.html b/src/themes/papermod/layouts/shortcodes/inTextImg.html deleted file mode 100644 index 0239fd6..0000000 --- a/src/themes/papermod/layouts/shortcodes/inTextImg.html +++ /dev/null @@ -1,5 +0,0 @@ -{{- $Img := (.Get "url") }} -{{- $height := (.Get "height") }} -{{- $alt := (.Get "alt") }} - -{{$alt}} diff --git a/src/themes/papermod/layouts/shortcodes/ltr.html b/src/themes/papermod/layouts/shortcodes/ltr.html deleted file mode 100644 index 4ad7682..0000000 --- a/src/themes/papermod/layouts/shortcodes/ltr.html +++ /dev/null @@ -1,15 +0,0 @@ -{{ $.Scratch.Set "md" false }} - -{{ if .IsNamedParams }} -{{ $.Scratch.Set "md" (.Get "md") }} -{{ else }} -{{ $.Scratch.Set "md" (.Get 0) }} -{{ end }} - -
    - {{ if eq ($.Scratch.Get "md") false }} - {{ .Inner }} - {{ else }} - {{ .Inner | markdownify }} - {{ end }} -
    diff --git a/src/themes/papermod/layouts/shortcodes/rawhtml.html b/src/themes/papermod/layouts/shortcodes/rawhtml.html deleted file mode 100644 index 9350c13..0000000 --- a/src/themes/papermod/layouts/shortcodes/rawhtml.html +++ /dev/null @@ -1,2 +0,0 @@ - -{{- .Inner -}} \ No newline at end of file diff --git a/src/themes/papermod/layouts/shortcodes/rtl.html b/src/themes/papermod/layouts/shortcodes/rtl.html deleted file mode 100644 index a69b8ce..0000000 --- a/src/themes/papermod/layouts/shortcodes/rtl.html +++ /dev/null @@ -1,15 +0,0 @@ -{{ $.Scratch.Set "md" false }} - -{{ if .IsNamedParams }} -{{ $.Scratch.Set "md" (.Get "md") }} -{{ else }} -{{ $.Scratch.Set "md" (.Get 0) }} -{{ end }} - -
    - {{ if eq ($.Scratch.Get "md") false }} - {{ .Inner }} - {{ else }} - {{ .Inner | markdownify }} - {{ end }} -
    diff --git a/src/themes/papermod/theme.toml b/src/themes/papermod/theme.toml deleted file mode 100644 index b49887d..0000000 --- a/src/themes/papermod/theme.toml +++ /dev/null @@ -1,51 +0,0 @@ -# theme.toml template for a Hugo theme -# See https://github.com/gohugoio/hugoThemes#themetoml for an example - -name = "PaperMod" -license = "MIT" -licenselink = "https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE" -description = "A fast, clean, responsive Hugo theme" -homepage = "https://adityatelange.github.io/hugo-PaperMod/" -tags = [ - "responsive", - "simple", - "clean", - "light", - "dark", - "blog", - "minimalist", - "highlight.js", - "search" -] -features = [ - "responsive", - "single-column", - "blog", - "cover-image", - "table-of-contents", - "opengraph", - "highlight.js", - "favicon", - "archive", - "share-icons", - "cover", - "multilingual", - "social-icons", - "minified-assets", - "theme-toggle", - "menu-location-indicator", - "scroll-to-top", - "search" -] -min_version = "0.83.0" - -[author] - name = "Aditya Telange" - homepage = "https://github.com/adityatelange/" - -# If porting an existing theme -[original] - name = "Paper" - author = "nanxiaobei" - homepage = "https://github.com/nanxiaobei" - repo = "https://github.com/nanxiaobei/hugo-paper/" -- 2.45.2 From 792601fbb01c4cbcd8807bfaae22508039dce593 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 13:24:23 +0200 Subject: [PATCH 020/111] Add papermod as git submodule again --- .gitmodules | 2 +- src/themes/papermod | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 160000 src/themes/papermod diff --git a/.gitmodules b/.gitmodules index ffb1ebf..7b50d0c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "themes/papermod"] +[submodule "src/themes/papermod"] path = src/themes/papermod url = https://github.com/adityatelange/hugo-PaperMod.git diff --git a/src/themes/papermod b/src/themes/papermod new file mode 160000 index 0000000..bacb763 --- /dev/null +++ b/src/themes/papermod @@ -0,0 +1 @@ +Subproject commit bacb763071d9852bb719675e6c4452fc5650a193 -- 2.45.2 From efcdc46c24e2268abe8f7d3158814735d918e7a6 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 10 May 2023 16:53:17 +0200 Subject: [PATCH 021/111] refactor: Renambe `Dockerfile` to `Containerfile` I'm not user docker for building, hence it makes more sense to have a `Containerfile` --- Dockerfile => Containerfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Dockerfile => Containerfile (100%) diff --git a/Dockerfile b/Containerfile similarity index 100% rename from Dockerfile rename to Containerfile -- 2.45.2 From 4ca35fd637044f1e35d9cde74aa5a84e618fe84d Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 10 May 2023 13:03:19 +0200 Subject: [PATCH 022/111] feat: Start using a better theme --- .gitmodules | 6 ++++++ src/.hugo_build.lock | 0 src/config.yaml | 2 +- src/themes/hugo-profile | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 src/.hugo_build.lock create mode 160000 src/themes/hugo-profile diff --git a/.gitmodules b/.gitmodules index 7b50d0c..40106d1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,9 @@ [submodule "src/themes/papermod"] path = src/themes/papermod url = https://github.com/adityatelange/hugo-PaperMod.git +[submodule "src/themes/hugo-blog-awesome"] + path = src/themes/hugo-blog-awesome + url = https://github.com/hugo-sid/hugo-blog-awesome.git +[submodule "src/themes/hugo-profile"] + path = src/themes/hugo-profile + url = https://github.com/gurusabarish/hugo-profile.git diff --git a/src/.hugo_build.lock b/src/.hugo_build.lock new file mode 100644 index 0000000..e69de29 diff --git a/src/config.yaml b/src/config.yaml index bba4efb..0dab668 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -1,7 +1,7 @@ --- languageCode: 'en-us' title: 'Bad Houseplants' -theme: 'papermod' +theme: 'hugo-profile' menu: main: - name: Posts diff --git a/src/themes/hugo-profile b/src/themes/hugo-profile new file mode 160000 index 0000000..828be0d --- /dev/null +++ b/src/themes/hugo-profile @@ -0,0 +1 @@ +Subproject commit 828be0d1c04213ace8279d2d3f9f4410b2db0c51 -- 2.45.2 From ca8d28d6c28166373d68363bf71cf5e664648e36 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 13:35:52 +0200 Subject: [PATCH 023/111] Fix the PaperMod version --- .gitmodules | 8 ++------ src/themes/hugo-profile | 1 - 2 files changed, 2 insertions(+), 7 deletions(-) delete mode 160000 src/themes/hugo-profile diff --git a/.gitmodules b/.gitmodules index 40106d1..256f30f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,5 @@ [submodule "src/themes/papermod"] path = src/themes/papermod url = https://github.com/adityatelange/hugo-PaperMod.git -[submodule "src/themes/hugo-blog-awesome"] - path = src/themes/hugo-blog-awesome - url = https://github.com/hugo-sid/hugo-blog-awesome.git -[submodule "src/themes/hugo-profile"] - path = src/themes/hugo-profile - url = https://github.com/gurusabarish/hugo-profile.git + branch = v7.0 + diff --git a/src/themes/hugo-profile b/src/themes/hugo-profile deleted file mode 160000 index 828be0d..0000000 --- a/src/themes/hugo-profile +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 828be0d1c04213ace8279d2d3f9f4410b2db0c51 -- 2.45.2 From 68dea24cf26d813896206a41b74cb602cdc47894 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 13:37:18 +0200 Subject: [PATCH 024/111] Use the PaperMod theme again --- src/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.yaml b/src/config.yaml index 0dab668..bba4efb 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -1,7 +1,7 @@ --- languageCode: 'en-us' title: 'Bad Houseplants' -theme: 'hugo-profile' +theme: 'papermod' menu: main: - name: Posts -- 2.45.2 From a02f98af92abdf60354af60b6752c8e763f0b4f8 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 10 May 2023 17:08:45 +0200 Subject: [PATCH 025/111] Get submodule after switching to a branch --- .drone.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index abc2946..08dd62b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -41,8 +41,9 @@ steps: environment: GIT_LFS_SKIP_SMUDGE: 1 commands: - - git clone $DRONE_REMOTE_URL --recurse-submodules . + - git clone $DRONE_REMOTE_URL . - git checkout $DRONE_BRANCH + - git submodule update --init --recursive - name: Test a build image: git.badhouseplants.net/badhouseplants/hugo-builder -- 2.45.2 From e6238ab77cebe653dedfaa873dd1a9ccbccf6ad9 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 16:18:07 +0200 Subject: [PATCH 026/111] Make spell-checker only check the `content` dir --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 08dd62b..d4cfad6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -193,4 +193,4 @@ steps: image: node commands: - npm i markdown-spellcheck -g - - mdspell "src/**/*.md" -n -r + - mdspell "src/content/**/*.md" -n -r -- 2.45.2 From 7597cb244eadab3bc0a4954b469cc62a3659bad5 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 16:20:36 +0200 Subject: [PATCH 027/111] Remove the 'Trace by Oveleane' announce --- src/content/posts/oveleane-trace/index.md | 23 ----------------------- src/static/music/Oveleane-Trace.png | 3 --- 2 files changed, 26 deletions(-) delete mode 100644 src/content/posts/oveleane-trace/index.md delete mode 100644 src/static/music/Oveleane-Trace.png diff --git a/src/content/posts/oveleane-trace/index.md b/src/content/posts/oveleane-trace/index.md deleted file mode 100644 index 6872989..0000000 --- a/src/content/posts/oveleane-trace/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Oveleane - Trace" -date: 2023-04-26T06:00:00+02:00 -draft: false -ShowToc: true -cover: - image: "/music/Oveleane-Trace.png" - caption: "Oveleane - Trace" - relative: false - responsiveImages: false ---- - ->Release Date: 2022-06-08 -> ->Genre: House, Electronic Music, Trance - -[Spotify](https://open.spotify.com/album/0nex56kDAF3e6bUXUHfN9m?si=VLL7VxiVT3GC9UqxSaYVWg) - [Apple Music](https://music.apple.com/us/album/1679303733) - [Deezer](https://www.deezer.com/de/album/422414177) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/14/) - -{{< rawhtml >}} - -{{< /rawhtml >}} - - diff --git a/src/static/music/Oveleane-Trace.png b/src/static/music/Oveleane-Trace.png deleted file mode 100644 index 1f227c5..0000000 --- a/src/static/music/Oveleane-Trace.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e946e1c9f687afc3cbfd19fded47316ad97ce7a00a2c23b8c533fe6cf5d33553 -size 13036141 -- 2.45.2 From 643cd7907da9ed6d6a775f074543db12a4268a46 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 16:20:46 +0200 Subject: [PATCH 028/111] Remove obsolete drafts about DevOps --- .../index.md | 53 ------------------- .../posts/design-a-scalable-system/index.md | 26 --------- .../design-a-scalable-system/chain-1.png | 3 -- 3 files changed, 82 deletions(-) delete mode 100644 src/content/posts/argocd-dynamic-environment-per-branch-part-2/index.md delete mode 100644 src/content/posts/design-a-scalable-system/index.md delete mode 100644 src/static/posts/design-a-scalable-system/chain-1.png diff --git a/src/content/posts/argocd-dynamic-environment-per-branch-part-2/index.md b/src/content/posts/argocd-dynamic-environment-per-branch-part-2/index.md deleted file mode 100644 index bf2e9e0..0000000 --- a/src/content/posts/argocd-dynamic-environment-per-branch-part-2/index.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Argocd Dynamic Environment per Branch Part 2" -date: 2023-03-29T17:31:20+02:00 -draft: true -ShowToc: true -cover: - image: "cover.png" - caption: "Argocd Dynamic Environment per Branch Part 2" - relative: false - responsiveImages: false ---- - -So it's been a while since the last post. And I'd like to continue the topic, because I've updated some things. But at the same time I'd like to talk about the setup that I've got and why I think it is good. - -First, I'd like to show how I fixed the Minio issue from the previous post. - ->I’m using Minio as a storage for pictures, and currently all pictures (and other files) are stored in one folder regardless of the environment. - -I've started using `git lfs` for media data. But I still want to have small docker images so I've decided to add some logic around pushing media files to `Minio`. So I've added a Drone job: -```YAML - - name: Sync pictures from lfs to Minio - image: rclone/rclone:latest - when: - branch: - exclude: - - main - environment: - RCLONE_CONFIG_CONTENT: - from_secret: RCLONE_CONFIG_CONTENT_PRIVATE - RCLONE_CONFIG: /tmp/rclone.conf - commands: - - echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG - - apk update - - apk add git make - - make upload_static - - - name: Sync pictures to the main Minio bucket - image: rclone/rclone:latest - when: - branch: - - main - environment: - RCLONE_CONFIG_CONTENT: - from_secret: RCLONE_CONFIG_CONTENT_PRIVATE - RCLONE_CONFIG: /tmp/rclone.conf - commands: - - echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG - - apk update - - apk add git make - - make sync_static_with_main -``` - - diff --git a/src/content/posts/design-a-scalable-system/index.md b/src/content/posts/design-a-scalable-system/index.md deleted file mode 100644 index 3a67698..0000000 --- a/src/content/posts/design-a-scalable-system/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: "Design a Scalable System" -date: 2023-03-06T21:18:23+01:00 -draft: true -ShowToc: true -cover: - image: "cover.png" - caption: "Design a Scalable System" - relative: false - responsiveImages: false ---- - -Well, after I've posted my argo serie, I've found out that I couldn't really make myself understood. So now I want to talk more not about the way of implementation, but rather about the consequences of different implementations. And maybe I will e able to finally make a point about why I don't like Terraform and why I think that ArgoCD is mostly misused by almost any SRE team I know. - -But first I'll try to describe how I see myself as a part of a team, the team as a part of a bigger team, and all the teams across different companies as links in the bigger chain. - -This is how I used to see development teams before: - -![Chain](/posts/design-a-scalable-system/chain-1.png) - -The whole team is using something as a service, for example `AWS`, the whole team is working together and producing something that is passed to a customer. But apparently this approach is only applicable to small teams, and I think it's working just fine. But there is a problem. Teams tend to grow without an understanding that they are growing, hence they keep acting like they're small but in the same time they don't change the workflow, and brick-by-brick they are building something that eventually is something unscalable at first and later unmaintainable. - -Example of an evolution like this: - -Let's take a regular Java(backend) + JS(frontend) web application - diff --git a/src/static/posts/design-a-scalable-system/chain-1.png b/src/static/posts/design-a-scalable-system/chain-1.png deleted file mode 100644 index 3626644..0000000 --- a/src/static/posts/design-a-scalable-system/chain-1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b40b2f6cbe93c8269c72561565ae70a4907c48591bc4b181cfc6fc8f544faee8 -size 4564014 -- 2.45.2 From 3916ee2a23f58a663bd3efa473027350206f9746 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 16:31:56 +0200 Subject: [PATCH 029/111] Remove extra text from the Home page --- src/config.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/config.yaml b/src/config.yaml index bba4efb..7bf6930 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -33,11 +33,7 @@ params: profileMode: enabled: true title: "Bad Houseplants" - subtitle: | - ... by allanger.\ - I'm looking for projects to work on for my sound engineering portfolio.\ - Currently, I can mix you tracks for free. Just shoot me a message and we'll figure it out.\ - Oi! + subtitle: ... by allanger. imageUrl: "main-logo.png" imageWidth: 150 imageHeight: 150 -- 2.45.2 From 83fe25f4a46279c4e8c6409607edb24bd012362d Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 16:32:11 +0200 Subject: [PATCH 030/111] Update the About page --- src/content/about/_index.md | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/content/about/_index.md b/src/content/about/_index.md index 97c9ac6..d7614e7 100644 --- a/src/content/about/_index.md +++ b/src/content/about/_index.md @@ -4,24 +4,11 @@ date: 2023-01-24T09:26:52+01:00 draft: false --- +Oi! +I'm allanger and currently I'm working as full time SRE, but recently I've found out that I'd like to spend more time doing things related to music and sound. So I'm currently looking for project to add to my protfolio. So if you want somebody do a decent (I hope) mix for you without asking for any money, just let shoot me a message. -It was supposed to be just yet another web page with musical releases reviews, but after trying to write something like that, I've found out that I'm not good at it. So I've decided to start a blog where I can write anything that comes to my mind. +I'm not a pro mixing engineer of course, but it's what I'm aiming for. - - +Also, I'm a beatmaker, you can find my bets on this site, just go to the [Beats section]({{< ref "beats" >}}). I'm not leasing them, I want one beat to be used one time by one artist. And again, I'm not a well-known beatmaker, so you can just let me know if you like anything, and we'll figure it out. > The last build is [![Build Status](https://drone.badhouseplants.net/api/badges/badhouseplants/badhouseplants-net/status.svg?ref=refs/heads/{{< param GitBranch >}})](https://drone.badhouseplants.net/badhouseplants/badhouseplants-net) - -### What is Bad Houseplants? - -> **allanger** -> -> *Actually, I'm not sure yet. I wanted it to be something about music, but I found out that musical industry is not very welcoming, and I don't know what exactly I > can do there. Creating music is somehow an intimate process to me, so I can't share a lot about it. The whole distributing thing is a black-box, and I wouldn't like to be a part of it, until anything is changed. I wanted to do musical reviews, but there are tons of guys who already do it a way better than I can. So I've given up on music here. I still hope that one day I'll open a recording studio under this name, but I'm not sure when it's even going to be possible. The second thing that I can talk about is IT. I think it can be interesting, but I don't want to kind of stigmatized as an IT blogger. And then I've decided that I would like to write something about indie culture, about DIY philosophy and all this punk related stuff. So let's say that is a blog about indie* - -### Wanna join? - -If you want to publish anything here, I don't mind. But for doing that you need to have at least basic `git` knowledge because this blog is written as code. You can check the [source code](https://git.badhouseplants.net/badhouseplants/badhouseplants-net) to understand if you're ready or not. I'm hosting my own `Gitea` instance, so you will have to request an account ([just email me](mailto:allanger@zohomail.com) or find me on [telegram](https://t.me/allanger)), when you got one, you're ready to start writing. If you have any questions about how to start, I'm always open for a conversation. - -Thanks, - -Oi! -- 2.45.2 From 88fe02e604980cfd848b2bd3957799f4b6b41416 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 16:32:54 +0200 Subject: [PATCH 031/111] fix: Get rid of typos --- .spelling | 1 + src/content/about/_index.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.spelling b/.spelling index 9512b7c..4876012 100644 --- a/.spelling +++ b/.spelling @@ -129,6 +129,7 @@ XT Ruina VCV LFO +beatmaker - src/themes/papermod/README.md PaperMod hugo-paper diff --git a/src/content/about/_index.md b/src/content/about/_index.md index d7614e7..f70ea11 100644 --- a/src/content/about/_index.md +++ b/src/content/about/_index.md @@ -5,7 +5,7 @@ draft: false --- Oi! -I'm allanger and currently I'm working as full time SRE, but recently I've found out that I'd like to spend more time doing things related to music and sound. So I'm currently looking for project to add to my protfolio. So if you want somebody do a decent (I hope) mix for you without asking for any money, just let shoot me a message. +I'm allanger and currently I'm working as full time SRE, but recently I've found out that I'd like to spend more time doing things related to music and sound. So I'm currently looking for project to add to my portfolio. So if you want somebody do a decent (I hope) mix for you without asking for any money, just let shoot me a message. I'm not a pro mixing engineer of course, but it's what I'm aiming for. -- 2.45.2 From 32e7e20a3b437378038019f5020bb0b2adf02f29 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 16:50:49 +0200 Subject: [PATCH 032/111] Add info about GitCommit to the About page --- kube/values-main.yaml | 2 ++ kube/values-preview.yaml | 1 + src/config.yaml | 1 + src/content/about/_index.md | 5 ++++- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/kube/values-main.yaml b/kube/values-main.yaml index 63ffd5f..c270a08 100644 --- a/kube/values-main.yaml +++ b/kube/values-main.yaml @@ -2,6 +2,8 @@ hugo: image: tag: $ARGO_APP_IMAGE_TAG + env: + HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG istio: annotations: link.argocd.argoproj.io/env: https://badhouseplants.net/ diff --git a/kube/values-preview.yaml b/kube/values-preview.yaml index 46b774d..f97ac67 100644 --- a/kube/values-preview.yaml +++ b/kube/values-preview.yaml @@ -19,6 +19,7 @@ env: HUGO_PARAMS_GITBRANCH: $ARGO_APP_BRANCH HUGO_PARAMS_REMARK42URL: https://remark42-$ARGO_APP_HOSTNAME + HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG remark42: istio: hosts: diff --git a/src/config.yaml b/src/config.yaml index 7bf6930..a02345a 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -23,6 +23,7 @@ taxonomies: tag: tags params: GitBranch: main + GitCommit: unknown Remark42ID: remark Remark42URL: https://remark42.badhouseplants.net ShowBreadCrumbs: true diff --git a/src/content/about/_index.md b/src/content/about/_index.md index f70ea11..e9f3b93 100644 --- a/src/content/about/_index.md +++ b/src/content/about/_index.md @@ -11,4 +11,7 @@ I'm not a pro mixing engineer of course, but it's what I'm aiming for. Also, I'm a beatmaker, you can find my bets on this site, just go to the [Beats section]({{< ref "beats" >}}). I'm not leasing them, I want one beat to be used one time by one artist. And again, I'm not a well-known beatmaker, so you can just let me know if you like anything, and we'll figure it out. -> The last build is [![Build Status](https://drone.badhouseplants.net/api/badges/badhouseplants/badhouseplants-net/status.svg?ref=refs/heads/{{< param GitBranch >}})](https://drone.badhouseplants.net/badhouseplants/badhouseplants-net) +--- +### Information about the build +Build from the commit [{{< param GitCommit >}}](https://git.badhouseplants.net/badhouseplants/badhouseplants-net/commit/{{< param GitCommit >}}) +[![Build Status](https://drone.badhouseplants.net/api/badges/badhouseplants/badhouseplants-net/status.svg?ref=refs/heads/{{< param GitBranch >}})](https://drone.badhouseplants.net/badhouseplants/badhouseplants-net) -- 2.45.2 From f16c18f0e83548f196b0c6f5553fd93cff576636 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 12 May 2023 16:51:38 +0200 Subject: [PATCH 033/111] fix: Get rid of a small typo --- src/content/about/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/about/_index.md b/src/content/about/_index.md index e9f3b93..62e9b11 100644 --- a/src/content/about/_index.md +++ b/src/content/about/_index.md @@ -13,5 +13,5 @@ Also, I'm a beatmaker, you can find my bets on this site, just go to the [Beats --- ### Information about the build -Build from the commit [{{< param GitCommit >}}](https://git.badhouseplants.net/badhouseplants/badhouseplants-net/commit/{{< param GitCommit >}}) +Built from the commit [{{< param GitCommit >}}](https://git.badhouseplants.net/badhouseplants/badhouseplants-net/commit/{{< param GitCommit >}}) [![Build Status](https://drone.badhouseplants.net/api/badges/badhouseplants/badhouseplants-net/status.svg?ref=refs/heads/{{< param GitBranch >}})](https://drone.badhouseplants.net/badhouseplants/badhouseplants-net) -- 2.45.2 From b2e9cb0d7d603598581cf4fef95c4b07e5136297 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Mon, 15 May 2023 11:25:55 +0200 Subject: [PATCH 034/111] build: Get rid of `ApplicationSets` --- .drone.yml | 70 ++++--------------------------------- README.md | 4 +++ chart/values.yaml | 2 +- kube/application.yaml | 44 ++++------------------- kube/values-main.yaml | 56 +++++++++++++++--------------- kube/values-preview.yaml | 60 ++++++++++++++++---------------- scripts/deploy-app.pl | 75 +++++++++++++++++++++++++++++++--------- 7 files changed, 136 insertions(+), 175 deletions(-) diff --git a/.drone.yml b/.drone.yml index d4cfad6..52346d8 100644 --- a/.drone.yml +++ b/.drone.yml @@ -75,7 +75,7 @@ steps: - echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG - ./scripts/upload-media.pl - - name: Deploy a preview ApplicationSet + - name: Deploy the application image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a when: branch: @@ -85,77 +85,21 @@ steps: - Build and push the docker image - Sync pictures from lfs to Minio environment: - KUBECONFIG_CONTENT: - from_secret: KUBECONFIG_CONTENT - commands: - - mkdir $HOME/.kube - - echo $KUBECONFIG_CONTENT | base64 -d > $HOME/.kube/config - - export ARGO_APP_CHART_VERSION=`cat chart/Chart.yaml | yq '.version'` - - export ARGO_APP_BRANCH=$DRONE_BRANCH - - export ARGO_APP_HOSTNAME="${DRONE_BRANCH}-dev.badhouseplants.net" - - export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA - - export ARGO_REMARK42_SECRET=$(openssl rand -hex 12) - - kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml - - yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml - - yq -i "del(.metadata.generation)" /tmp/appset.yaml - - yq -i "del(.metadata.uid)" /tmp/appset.yaml - - yq -i "del(.status)" /tmp/appset.yaml - - yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml - - envsubst < ./kube/template.yaml > /tmp/elements.yaml - - yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml - - kubectl apply -f /tmp/appset.yaml - - - name: Deploy a main ApplicationSet - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a - when: - branch: - - main - depends_on: - - Build and push the docker image - - Sync pictures from lfs to Minio - environment: - KUBECONFIG_CONTENT: - from_secret: KUBECONFIG_CONTENT + ARGOCD_SERVER: + from_secret: ARGOCD_SERVER + ARGOCD_AUTH_TOKEN: + from_secret: ARGOCD_AUTH_TOKEN ARGO_GITHUB_OAUTH_KEY: from_secret: GITHUB_OAUTH_KEY ARGO_GOOGLE_OAUTH_KEY: from_secret: GOOGLE_OAUTH_KEY commands: - - mkdir $HOME/.kube - - echo $KUBECONFIG_CONTENT | base64 -d > $HOME/.kube/config - - export ARGO_APP_CHART_VERSION=`cat chart/Chart.yaml | yq '.version'` - - export ARGO_APP_BRANCH=$DRONE_BRANCH - - export ARGO_APP_IMAGE_TAG=$DRONE_COMMIT_SHA - - kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml - - yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml - - yq -i "del(.metadata.generation)" /tmp/appset.yaml - - yq -i "del(.metadata.uid)" /tmp/appset.yaml - - yq -i "del(.status)" /tmp/appset.yaml - - yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml - - yq -i "del(.spec.generators[].list.elements[] | select(.commit_sha == \"$ARGO_APP_IMAGE_TAG\"))" /tmp/appset.yaml - - yq -i '. *= load("./kube/applicationset.yaml")' /tmp/appset.yaml - - envsubst < ./kube/main.yaml > /tmp/elements.yaml - - yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml - - kubectl apply -f /tmp/appset.yaml - - - name: Sync application - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a - depends_on: - - Deploy a main ApplicationSet - - Deploy a preview ApplicationSet - environment: - ARGOCD_SERVER: - from_secret: ARGOCD_SERVER - ARGOCD_AUTH_TOKEN: - from_secret: ARGOCD_AUTH_TOKEN - commands: - - argocd app sync -l app=badhouseplants -l branch=$DRONE_BRANCH - - argocd app wait -l app=badhouseplants -l branch=$DRONE_BRANCH + - ./scripts/deploy-app.pl - name: Cleanup everything image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a depends_on: - - Sync application + - Deploy the application environment: RCLONE_CONFIG_CONTENT: from_secret: RCLONE_CONFIG_CONTENT_PRIVATE diff --git a/README.md b/README.md index b10608b..7ca4a73 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ # Badhouseplants NET +## About +- To be done ## Static content Storing static content in the repo is painful, because there are massive. That's why for storing them I'm using a S3 bucket that is publicly available for downstream operations + + diff --git a/chart/values.yaml b/chart/values.yaml index dadc637..354c240 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -5,7 +5,7 @@ namespace: labels: istio-injection: enabled enabled: true - name: badhouseplants-application + name: badhouseplants-main nginx: container: diff --git a/kube/application.yaml b/kube/application.yaml index aca1874..810570c 100644 --- a/kube/application.yaml +++ b/kube/application.yaml @@ -2,51 +2,21 @@ apiVersion: argoproj.io/v1alpha1 kind: Application metadata: labels: - application: $APPLICATON - branch: $GIT_BRANCH - commit_sha: $GIT_COMMIT_SHA - name: $APPLICATON-$GIT_BRANCH + application: badhouseplants + branch: $ARGO_APP_BRANCH + commit_sha: $ARGO_APP_IMAGE_TAG + name: badhouseplants-$ARGO_APP_BRANCH namespace: argo-system spec: destination: - namespace: $APPLICATON-$GIT_BRANCH + namespace: badhouseplants-$ARGO_APP_BRANCH server: https://kubernetes.default.svc project: default source: chart: badhouseplants-net - targetRevision: $HELM_CHART_VERSION + targetRevision: $ARGO_APP_CHART_VERSION helm: valueFiles: - values.yaml - values: | - namespace: - name: badhouseplants-create-wubs-in-vital - labels: - istio-injection: disabled - istio: - hosts: - - create-wubs-in-vital-dev.badhouseplants.net - annotations: - link.argocd.argoproj.io/env: https://create-wubs-in-vital-dev.badhouseplants.net/ - link.argocd.argoproj.io/remark42: https://remark42-create-wubs-in-vital-dev.badhouseplants.net/web - link.argocd.argoproj.io/build: DRONE_BUILD_LINK - hugo: - image: - tag: ee4efc6107541657f405a3dd9b7ee238d0e69e7b - baseURL: https://create-wubs-in-vital-dev.badhouseplants.net/ - buildDrafts: true - env: - HUGO_PARAMS_GITBRANCH: create-wubs-in-vital - HUGO_PARAMS_REMARK42URL: https://remark42-create-wubs-in-vital-dev.badhouseplants.net - remark42: - istio: - hosts: - - remark42-create-wubs-in-vital-dev.badhouseplants.net - settings: - url: https://remark42-create-wubs-in-vital-dev.badhouseplants.net/ - auth: - anonymous: true - secretKey: b8a41781b2c1ba2ecf49e4e7 - rclone: - command: "rclone copy -P badhouseplants-public:/badhouseplants-net/ee4efc6107541657f405a3dd9b7ee238d0e69e7b /static" + values: __DUMMY__ repoURL: https://git.badhouseplants.net/api/packages/badhouseplants/helm diff --git a/kube/values-main.yaml b/kube/values-main.yaml index c270a08..286feee 100644 --- a/kube/values-main.yaml +++ b/kube/values-main.yaml @@ -1,28 +1,28 @@ -- value: | - hugo: - image: - tag: $ARGO_APP_IMAGE_TAG - env: - HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG - istio: - annotations: - link.argocd.argoproj.io/env: https://badhouseplants.net/ - link.argocd.argoproj.io/build: $DRONE_BUILD_LINK - link.argocd.argoproj.io/remark42: https://remark42.badhouseplants.net/web - remark42: - settings: - secret: $ARGO_REMARK_SECRET - admin: - sharedEmail: allanger@zohomail.com - oauth: - github: - enabled: true - key: 1fb3d33a62b074bc0ea0 - secret: $ARGO_GITHUB_OAUTH_KEY - google: - enabled: true - key: 966815964055-m9t7leuj1arqimqu2pvbs1k10cg54gcg.apps.googleusercontent.com - secret: $ARGO_GOOGLE_OAUTH_KEY - storage: - requestedSize: 300Mi - +--- +values: | + hugo: + image: + tag: $ARGO_APP_IMAGE_TAG + env: + HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG + istio: + annotations: + link.argocd.argoproj.io/env: https://badhouseplants.net/ + link.argocd.argoproj.io/build: $DRONE_BUILD_LINK + link.argocd.argoproj.io/remark42: https://remark42.badhouseplants.net/web + remark42: + settings: + secret: $ARGO_REMARK_SECRET + admin: + sharedEmail: allanger@zohomail.com + oauth: + github: + enabled: true + key: 1fb3d33a62b074bc0ea0 + secret: $ARGO_GITHUB_OAUTH_KEY + google: + enabled: true + key: 966815964055-m9t7leuj1arqimqu2pvbs1k10cg54gcg.apps.googleusercontent.com + secret: $ARGO_GOOGLE_OAUTH_KEY + storage: + requestedSize: 300Mi diff --git a/kube/values-preview.yaml b/kube/values-preview.yaml index f97ac67..bbce5b9 100644 --- a/kube/values-preview.yaml +++ b/kube/values-preview.yaml @@ -1,33 +1,33 @@ --- -- value: | - namespace: - name: badhouseplants-$ARGO_APP_BRANCH - labels: - istio-injection: disabled +values: | + namespace: + name: badhouseplants-$ARGO_APP_BRANCH + labels: + istio-injection: disabled + istio: + hosts: + - $ARGO_APP_HOSTNAME + annotations: + link.argocd.argoproj.io/env: https://$ARGO_APP_HOSTNAME/ + link.argocd.argoproj.io/remark42: https://remark42-$ARGO_APP_HOSTNAME/web + link.argocd.argoproj.io/build: $DRONE_BUILD_LINK + hugo: + image: + tag: $ARGO_APP_IMAGE_TAG + baseURL: https://$ARGO_APP_HOSTNAME/ + buildDrafts: true + env: + HUGO_PARAMS_GITBRANCH: $ARGO_APP_BRANCH + HUGO_PARAMS_REMARK42URL: https://remark42-$ARGO_APP_HOSTNAME + HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG + remark42: istio: hosts: - - $ARGO_APP_HOSTNAME - annotations: - link.argocd.argoproj.io/env: https://$ARGO_APP_HOSTNAME/ - link.argocd.argoproj.io/remark42: https://remark42-$ARGO_APP_HOSTNAME/web - link.argocd.argoproj.io/build: $DRONE_BUILD_LINK - hugo: - image: - tag: $ARGO_APP_IMAGE_TAG - baseURL: https://$ARGO_APP_HOSTNAME/ - buildDrafts: true - env: - HUGO_PARAMS_GITBRANCH: $ARGO_APP_BRANCH - HUGO_PARAMS_REMARK42URL: https://remark42-$ARGO_APP_HOSTNAME - HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG - remark42: - istio: - hosts: - - remark42-$ARGO_APP_HOSTNAME - settings: - url: https://remark42-$ARGO_APP_HOSTNAME/ - auth: - anonymous: true - secretKey: $ARGO_REMARK42_SECRET - rclone: - command: "rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static" + - remark42-$ARGO_APP_HOSTNAME + settings: + url: https://remark42-$ARGO_APP_HOSTNAME/ + auth: + anonymous: true + secretKey: $ARGO_REMARK_SECRET + rclone: + command: 'rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static' diff --git a/scripts/deploy-app.pl b/scripts/deploy-app.pl index ee6cc98..831a5dc 100755 --- a/scripts/deploy-app.pl +++ b/scripts/deploy-app.pl @@ -2,26 +2,69 @@ use strict; use warnings; -my $chart_version = `cat chart/Chart.yaml | yq '.version'` or die; +my $chart_version = `cat chart/Chart.yaml | yq '.version'` or die $1; chomp($chart_version); my $git_branch = `git rev-parse --abbrev-ref HEAD`; chomp($git_branch); my $git_commit_sha = `git rev-parse HEAD`; chomp($git_commit_sha); -my $main_branch = "main"; -print -print $chart_version; - # - kubectl get -f ./kube/applicationset.yaml -o yaml > /tmp/appset.yaml - # - yq -i "del(.metadata.resourceVersion)" /tmp/appset.yaml - # - yq -i "del(.metadata.generation)" /tmp/appset.yaml - # - yq -i "del(.metadata.uid)" /tmp/appset.yaml - # - yq -i "del(.status)" /tmp/appset.yaml - # - yq -i "del(.spec.generators[].list.elements[] | select(.branch == \"$ARGO_APP_BRANCH\"))" /tmp/appset.yaml - # - yq -i "del(.spec.generators[].list.elements[] | select(.commit_sha == \"$ARGO_APP_IMAGE_TAG\"))" /tmp/appset.yaml - # - yq -i '. *= load("./kube/applicationset.yaml")' /tmp/appset.yaml - # - envsubst < ./kube/main.yaml > /tmp/elements.yaml - # - yq -i '.spec.generators[].list.elements += load("/tmp/elements.yaml")' /tmp/appset.yaml - # - kubectl apply -f /tmp/appset.yaml -# \ No newline at end of file +my $main_branch = "main"; +my $values = ""; +my $remark_secret = `openssl rand -hex 12`; +chomp($remark_secret); + +$ENV{'ARGO_APP_CHART_VERSION'} = $chart_version; +$ENV{'ARGO_APP_BRANCH'} = $git_branch; +$ENV{'ARGO_APP_HOSTNAME'} = "$git_branch-dev.badhouseplants.net"; +$ENV{'ARGO_APP_IMAGE_TAG'} = $git_commit_sha; +$ENV{'ARGO_REMARK_SECRET'} = $remark_secret; + +# ---------------------------------- +# -- Fill the Application manifest +# -- with correct values +# ---------------------------------- +if ($git_branch eq $main_branch) { + print "Using the main values file\n"; + print `envsubst < ./kube/values-main.yaml > /tmp/values.yaml` or die $!; +} else { + print "Using the preview values file\n"; + print `envsubst < ./kube/values-preview.yaml > /tmp/values.yaml` or die $!; +} +print `yq -i '.values' /tmp/values.yaml` or die $!; +print `envsubst < ./kube/application.yaml > /tmp/application.yaml` or die $!; +print `yq -i '.spec.source.helm.values = load_str("/tmp/values.yaml")' /tmp/application.yaml` or die $!; + +if(!defined $ENV{DEPLOY_SCRIPT_DEBUG}){ + print `kubectl apply -f /tmp/application.yaml` or die $!; + print `argocd app sync -l application=badhouseplants -l branch=$git_branch` or die $!; + print `argocd app wait -l application=badhouseplants -l branch=$git_branch` or die $!; +} +# ---------------------------------- +# -- Remove all `Applications` for +# -- branches that do not exists +# ---------------------------------- +my @all_applications = `argocd app list -l application=badhouseplants -o yaml | yq '.[].metadata.name'` or die $!; +chomp(@all_applications); +foreach my $app (@all_applications) { + $app =~ s/badhouseplants-//; +} + +my @all_branches = `git branch --format='%(refname:short)' -r` or die $!; +chomp(@all_branches); +foreach my $branch (@all_branches) { + $branch =~ s/origin\///; +} + +foreach my $app (@all_applications) { + if ( !grep( /^$app$/, @all_branches ) ) { + if ($app ne "application") { + print "$app should be removed\n"; + if(!defined $ENV{DEPLOY_SCRIPT_DEBUG}){ + print `argocd app delete --yes badhouseplants-$app` or die $!; + } + } + } +} + -- 2.45.2 From a9aeb44e057895546d42f272a2cd6649221e55bf Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 16 May 2023 12:21:20 +0200 Subject: [PATCH 035/111] Deploy on the main branch too --- .drone.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 52346d8..ff5d4a0 100644 --- a/.drone.yml +++ b/.drone.yml @@ -77,10 +77,6 @@ steps: - name: Deploy the application image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a - when: - branch: - exclude: - - main depends_on: - Build and push the docker image - Sync pictures from lfs to Minio -- 2.45.2 From e9dad4adab3a18e242ec4127be0eb370e38517c7 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 16 May 2023 12:24:41 +0200 Subject: [PATCH 036/111] Update the chart version --- chart/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 409a1d4..104db0b 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: badhouseplants-net description: A Helm chart for Kubernetes type: application -version: 0.6.0 +version: 0.7.0 appVersion: "4.20.0" dependencies: - name: remark42 -- 2.45.2 From 0f7c3becc8cc8aaa9a3a248b2c013e6a3ed1727d Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 16 May 2023 12:51:35 +0200 Subject: [PATCH 037/111] allanger - Four Steps Begind is added --- src/config.yaml | 4 +- src/content/music/_index.md | 0 src/content/music/four-steps-behind.md | 25 +++++ src/content/music/index.md | 95 ------------------- .../music/allanger-Four_Steps_Behind.jpg | 3 + 5 files changed, 30 insertions(+), 97 deletions(-) create mode 100644 src/content/music/_index.md create mode 100644 src/content/music/four-steps-behind.md delete mode 100644 src/content/music/index.md create mode 100644 src/static/music/allanger-Four_Steps_Behind.jpg diff --git a/src/config.yaml b/src/config.yaml index a02345a..ee9334d 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -39,12 +39,12 @@ params: imageWidth: 150 imageHeight: 150 buttons: - - name: Source - url: "https://git.badhouseplants.net/badhouseplants/badhouseplants-net" - name: My Music url: "https://funkwhale.badhouseplants.net/library/artists" - name: Support url: "https://liberapay.com/allanger/donate" + - name: Source + url: "https://git.badhouseplants.net/badhouseplants/badhouseplants-net" socialIcons: - name: "telegram" url: "https://t.me/allanger" diff --git a/src/content/music/_index.md b/src/content/music/_index.md new file mode 100644 index 0000000..e69de29 diff --git a/src/content/music/four-steps-behind.md b/src/content/music/four-steps-behind.md new file mode 100644 index 0000000..5f82707 --- /dev/null +++ b/src/content/music/four-steps-behind.md @@ -0,0 +1,25 @@ +--- +title: "allanger - Four Steps Behind" +date: 2023-05-15T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "/music/allanger-Four_Steps_Behind.jpg" + caption: "Four Steps Behind" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - house + - edm +--- +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/four-steps-behind) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/16/) + +--- +{{< rawhtml >}} + +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Four%20Steps%20Behind.zip)* diff --git a/src/content/music/index.md b/src/content/music/index.md deleted file mode 100644 index bd8b420..0000000 --- a/src/content/music/index.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: "Music" -date: 2023-01-31T13:52:43+01:00 -draft: false -ShowToc: true - ---- -Everything that's created by me, can be found on my [funkwhale instance](https://funkwhale.badhouseplants.net). But I'm only uploading `lossy` there. I was trying to upload lossless, but then it either doesn't really work with my Android App, or it's hard to manage. And it needs a way more disk that way. So if you want to listen to lossless, go to my [Bandcamp](https://allanger.bandcamp.com/). *A lot of tracks are still not there, but they will be there soon*. I also have a [SoundCloud account](https://soundcloud.com/allanger) and I try to publish everything there. - - ---- - -### allanger - -[Spotify](https://open.spotify.com/artist/1VPAs75xrhaXhCIIHsgF02) - [Apple Music](https://music.apple.com/us/artist/allanger/1617855325) - [Deezer](https://www.deezer.com/us/artist/117780712) - [SoundCloud](https://soundcloud.com/allanger) - [Bandcamp](https://allanger.bandcamp.com/) - [Funkwhale](https://funkwhale.badhouseplants.net/library/artists/3/) - - -#### Out of Law ->![Cover](/music/allanger-Out_of_Law.png) ->Release Date: 2022-06-08 -> ->Genre: Alternative -> ->Sub Genre: Punk - -[Spotify](spotify:album:4RACKNtJqPXZOB6UsmwxKp) - [Apple Music](https://music.apple.com/us/album/1625562031) - [Deezer](https://www.deezer.com/us/album/321014447) - [SoundCloud](https://soundcloud.com/allanger/out-of-law) - [Bandcamp](https://allanger.bandcamp.com/album/out-of-law) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/5/) - -{{< rawhtml >}} - -{{< /rawhtml >}} - -#### Wasted Time ->![Cover](/music/allanger-Waster_Time.png) ->Release Date: 2022-05-17 -> ->Genre: Punk/Rock -> ->Sub Genre: Prog-Rock/Art Rock - -[Spotify](spotify:album:2zOW72GHTTKIZAbwjmxili) - [Apple Music](https://music.apple.com/us/album/1617855666) - [Deezer](https://www.deezer.com/us/album/308544627) - [SoundCloud](https://soundcloud.com/allanger/wasted-time?si=59896836701c48b6a07f7af96043faaf&utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing) - [Bandcamp](https://allanger.bandcamp.com/album/wasted-time) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/4/) - -{{< rawhtml >}} - -{{< /rawhtml >}} - -#### Let Me Kill -> In this song, I'm using samples from a YouTube video, and so I'm not sure that I can distribute on all platforms. That's why it exists only on SoundCloud, Funkwhale, and Bandcamp ->![Cover](/music/allanger-Let_Me_Kill.png) ->Release Date: 2021-10-15 -> ->Genre: Trap - -[SoundCloud](https://soundcloud.com/allanger/let-me-kill) - [Bandcamp](https://allanger.bandcamp.com/track/let-me-kill) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/7/) - -{{< rawhtml >}} - -{{< /rawhtml >}} - -#### Anymore -> In this song, I'm using samples from a YouTube video, and so I'm not sure that I can distribute on all platforms. That's why it exists only on SoundCloud and Funkwhale ->![Cover](/music/allanger-Anymore.jpg) ->Release Date: 2018-12-26 -> ->Genre: Indie -> ->Sub Genre: Lo-Fi Indie - - -[SoundCloud](https://soundcloud.com/allanger/anymore) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/11/) -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Oveleane - -> It's another project made by me, I just thought that that electronic stuff won't fit well in the allanger's profile, and so decided to separate them. But it's still allanger, you know... - -[Spotify](https://open.spotify.com/artist/2PKE1XvwP82LCacM5q6rCx?si=hJyJWcEgR4mZLkjbCso45A) - [Apple Music](https://music.apple.com/us/artist/oveleane/1654951021) - [Deezer](https://www.deezer.com/us/artist/190392997) - - -#### Four Steps Behind ->![Cover](/music/Oveleane-Four_Steps_Behind.jpg) ->Release Date: 2022-12-05 -> ->Genre: Electronic -> ->Sub Genre: IDM/Experimental - -[Spotify](https://open.spotify.com/album/1RjB1xLoD2JXmWuBjGegCN?si=fIsGrOfoQRaeKu9f-Oh0dw) - [Apple Music](https://music.apple.com/us/album/1654953305) - [Deezer](https://www.deezer.com/us/album/377293977) - [Funkwhale](https://funkwhale.badhouseplants.net/library/albums/1/) - -{{< rawhtml >}} - -{{< /rawhtml >}} - - diff --git a/src/static/music/allanger-Four_Steps_Behind.jpg b/src/static/music/allanger-Four_Steps_Behind.jpg new file mode 100644 index 0000000..fbf98a9 --- /dev/null +++ b/src/static/music/allanger-Four_Steps_Behind.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2def9a412cba612ccf55cc39deeb82f971418ad27119c93d63844c7c25bc0748 +size 2045790 -- 2.45.2 From e9c8932766fbc7cdd1bde917800e35df17f16346 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 16 May 2023 16:44:19 +0200 Subject: [PATCH 038/111] Remove beats that are alaready taken --- src/content/beats/_index.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index 6c6b683..606ed56 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -21,11 +21,6 @@ draft: false {{< /rawhtml >}} -### Ark -{{< rawhtml >}} - -{{< /rawhtml >}} - ### Silk Road {{< rawhtml >}} @@ -61,11 +56,6 @@ draft: false {{< /rawhtml >}} -### Vicious Shine -{{< rawhtml >}} - -{{< /rawhtml >}} - ### Body Drop {{< rawhtml >}} -- 2.45.2 From 23b1aa6143deeef6676d30fb57d42ef5153f385a Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 16 May 2023 20:48:39 +0200 Subject: [PATCH 039/111] Release: allanger - Anymore --- src/content/music/allanger-anymore.md | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/content/music/allanger-anymore.md diff --git a/src/content/music/allanger-anymore.md b/src/content/music/allanger-anymore.md new file mode 100644 index 0000000..28d44b1 --- /dev/null +++ b/src/content/music/allanger-anymore.md @@ -0,0 +1,28 @@ +--- +title: "Allanger Anymore" +date: 2018-12-26T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "/music/allanger-Anymore.jpg" + caption: "Allanger Anymore" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - alternative +--- + +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/anymore) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/20/) + +--- +{{< rawhtml >}} + +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Anymore.zip)* + + -- 2.45.2 From f569e96f7ea9b121e137a196cfb07125aaf17710 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 16 May 2023 20:51:22 +0200 Subject: [PATCH 040/111] fix: Set the correct name to the page --- src/content/music/allanger-anymore.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/music/allanger-anymore.md b/src/content/music/allanger-anymore.md index 28d44b1..8a9a4e0 100644 --- a/src/content/music/allanger-anymore.md +++ b/src/content/music/allanger-anymore.md @@ -1,11 +1,11 @@ --- -title: "Allanger Anymore" +title: "allanger - Anymore" date: 2018-12-26T00:00:00+02:00 draft: false ShowToc: false cover: image: "/music/allanger-Anymore.jpg" - caption: "Allanger Anymore" + caption: "Anymore" relative: false responsiveImages: false hideSummary: true -- 2.45.2 From 04e400c1ba214fe3264b6829805f60800933f3d7 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 21 May 2023 11:52:24 +0200 Subject: [PATCH 041/111] build: Migrate to Docker runners --- .drone.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.drone.yml b/.drone.yml index ff5d4a0..b7ef83d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,7 +3,7 @@ # -- Update the helm chart # ---------------------------------------------- kind: pipeline -type: kubernetes +type: docker name: Publish the helm chart trigger: @@ -26,7 +26,7 @@ steps: # -- Build the site and push it to the registry # ---------------------------------------------- kind: pipeline -type: kubernetes +type: docker name: Build badhouseplants.net trigger: @@ -111,7 +111,7 @@ steps: - ./scripts/cleanup.pl --- kind: pipeline -type: kubernetes +type: docker name: Spell-Checker trigger: -- 2.45.2 From 0b1dadc55721dbfd674226a9c6c541a51458f5e2 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 21 May 2023 17:08:05 +0200 Subject: [PATCH 042/111] release: allanger - Let me Kill --- src/content/music/allanger-anymore.md | 2 -- ...ehind.md => allanger-four-steps-behind.md} | 0 src/content/music/allanger-let-me-kill.md | 27 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) rename src/content/music/{four-steps-behind.md => allanger-four-steps-behind.md} (100%) create mode 100644 src/content/music/allanger-let-me-kill.md diff --git a/src/content/music/allanger-anymore.md b/src/content/music/allanger-anymore.md index 8a9a4e0..86b6557 100644 --- a/src/content/music/allanger-anymore.md +++ b/src/content/music/allanger-anymore.md @@ -24,5 +24,3 @@ tags: {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Anymore.zip)* - - diff --git a/src/content/music/four-steps-behind.md b/src/content/music/allanger-four-steps-behind.md similarity index 100% rename from src/content/music/four-steps-behind.md rename to src/content/music/allanger-four-steps-behind.md diff --git a/src/content/music/allanger-let-me-kill.md b/src/content/music/allanger-let-me-kill.md new file mode 100644 index 0000000..acf1ef8 --- /dev/null +++ b/src/content/music/allanger-let-me-kill.md @@ -0,0 +1,27 @@ +--- +title: "allanger - Let Me Kill" +date: 2021-10-15T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "music/allanger-Let_Me_Kill.png" + caption: "Let Me Kill" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - trap + - spoken-word +--- + +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/let-me-kill) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/21/) + +--- +{{< rawhtml >}} + +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Let%20Me%20Kill.zip)* -- 2.45.2 From 38d271958b3ebb97be7554834b5963a93c08826b Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 21 May 2023 17:21:22 +0200 Subject: [PATCH 043/111] release: allanger - Wasted Time --- src/content/music/allanger-wasted-time.md | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/content/music/allanger-wasted-time.md diff --git a/src/content/music/allanger-wasted-time.md b/src/content/music/allanger-wasted-time.md new file mode 100644 index 0000000..65939c1 --- /dev/null +++ b/src/content/music/allanger-wasted-time.md @@ -0,0 +1,26 @@ +--- +title: "allanger - Wasted Time" +date: 2021-09-23T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "/src/static/music/allanger-Waster_Time.png" + caption: "Wasted Time" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - punk +--- + +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/wasted-time) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/19/) + +--- +{{< rawhtml >}} + +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Wasted%20Time.zip)* -- 2.45.2 From 26c8f97789aa2dbe66b3adc864a920e8bf0b01c2 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 21 May 2023 17:38:20 +0200 Subject: [PATCH 044/111] build: Use argocd app apply instead of kubectl --- scripts/deploy-app.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy-app.pl b/scripts/deploy-app.pl index 831a5dc..f61a561 100755 --- a/scripts/deploy-app.pl +++ b/scripts/deploy-app.pl @@ -37,7 +37,7 @@ print `envsubst < ./kube/application.yaml > /tmp/application.yaml` or die $!; print `yq -i '.spec.source.helm.values = load_str("/tmp/values.yaml")' /tmp/application.yaml` or die $!; if(!defined $ENV{DEPLOY_SCRIPT_DEBUG}){ - print `kubectl apply -f /tmp/application.yaml` or die $!; + print `argocd app create -f /tmp/application.yaml --upsert` or die $!; print `argocd app sync -l application=badhouseplants -l branch=$git_branch` or die $!; print `argocd app wait -l application=badhouseplants -l branch=$git_branch` or die $!; } -- 2.45.2 From 5036bf28fbcb8a86dd0f5692ec52b5023dcc1ffa Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 21 May 2023 17:48:09 +0200 Subject: [PATCH 045/111] release: allanger - Out Of Law --- src/content/music/allanger-out-of-law.md | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/content/music/allanger-out-of-law.md diff --git a/src/content/music/allanger-out-of-law.md b/src/content/music/allanger-out-of-law.md new file mode 100644 index 0000000..086ecd2 --- /dev/null +++ b/src/content/music/allanger-out-of-law.md @@ -0,0 +1,26 @@ +--- +title: "allanger - Out Of Law" +date: 2022-01-23T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "/src/static/music/allanger-Out_of_Law.png" + caption: "Out Of Law" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - punk +--- + +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/out-of-law) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/18/) + +--- +{{< rawhtml >}} +Ç +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Out%20Of%20Law.zip)* -- 2.45.2 From 042f905bbbc8c9343a6b4cbcf8e324ad41ec53c5 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 21 May 2023 17:56:46 +0200 Subject: [PATCH 046/111] build: Move to a separate project --- kube/application.yaml | 2 +- kube/project.yaml | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 kube/project.yaml diff --git a/kube/application.yaml b/kube/application.yaml index 810570c..bb48690 100644 --- a/kube/application.yaml +++ b/kube/application.yaml @@ -11,7 +11,7 @@ spec: destination: namespace: badhouseplants-$ARGO_APP_BRANCH server: https://kubernetes.default.svc - project: default + project: badhouseplants source: chart: badhouseplants-net targetRevision: $ARGO_APP_CHART_VERSION diff --git a/kube/project.yaml b/kube/project.yaml new file mode 100644 index 0000000..fcb23c4 --- /dev/null +++ b/kube/project.yaml @@ -0,0 +1,34 @@ +apiVersion: argoproj.io/v1alpha1 +kind: AppProject +metadata: + name: badhouseplants + namespace: argo-system + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + description: BadHouseplants Blog + sourceRepos: + - '*' + + destinations: + - namespace: badhouseplants-* + server: https://kubernetes.default.svc + name: in-cluster + + # Deny all cluster-scoped resources from being created, except for Namespace + clusterResourceWhitelist: + - group: '' + kind: Namespace + + # Allow all namespaced-scoped resources to be created, except for ResourceQuota, LimitRange, NetworkPolicy + namespaceResourceBlacklist: + - group: '' + kind: ResourceQuota + - group: '' + kind: LimitRange + - group: '' + kind: NetworkPolicy + + # Enables namespace orphaned resource monitoring. + orphanedResources: + warn: false \ No newline at end of file -- 2.45.2 From 1ce93a3a9f97ecc2ec2150619acddb67a22a2f65 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Mon, 22 May 2023 13:17:26 +0200 Subject: [PATCH 047/111] fix: Lately added release pages are correct --- src/content/music/allanger-out-of-law.md | 4 ++-- src/content/music/allanger-wasted-time.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/music/allanger-out-of-law.md b/src/content/music/allanger-out-of-law.md index 086ecd2..53ea069 100644 --- a/src/content/music/allanger-out-of-law.md +++ b/src/content/music/allanger-out-of-law.md @@ -4,7 +4,7 @@ date: 2022-01-23T00:00:00+02:00 draft: false ShowToc: false cover: - image: "/src/static/music/allanger-Out_of_Law.png" + image: "music/allanger-Out_of_Law.png" caption: "Out Of Law" relative: false responsiveImages: false @@ -20,7 +20,7 @@ tags: --- {{< rawhtml >}} -Ç + {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Out%20Of%20Law.zip)* diff --git a/src/content/music/allanger-wasted-time.md b/src/content/music/allanger-wasted-time.md index 65939c1..6d1c47a 100644 --- a/src/content/music/allanger-wasted-time.md +++ b/src/content/music/allanger-wasted-time.md @@ -4,7 +4,7 @@ date: 2021-09-23T00:00:00+02:00 draft: false ShowToc: false cover: - image: "/src/static/music/allanger-Waster_Time.png" + image: "music/allanger-Waster_Time.png" caption: "Wasted Time" relative: false responsiveImages: false -- 2.45.2 From 52c3416c990d805cd0cccbe7cbc5398d044d6f69 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 23 May 2023 11:00:14 +0200 Subject: [PATCH 048/111] release: allanger - Desesitized --- src/content/music/allanger-desensitized.md | 27 ++++++++++++++++++++++ src/static/music/allanger-Desensitized.png | 3 +++ 2 files changed, 30 insertions(+) create mode 100644 src/content/music/allanger-desensitized.md create mode 100755 src/static/music/allanger-Desensitized.png diff --git a/src/content/music/allanger-desensitized.md b/src/content/music/allanger-desensitized.md new file mode 100644 index 0000000..0d1090b --- /dev/null +++ b/src/content/music/allanger-desensitized.md @@ -0,0 +1,27 @@ +--- +title: "allanger - Desensitized" +date: 2022-02-06T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "music/allanger-Desensitized.png" + caption: "Desensitized" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - edm + - electronic +--- + +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/desensitized) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/22/) + +--- +{{< rawhtml >}} + +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Desensitized.zip)* diff --git a/src/static/music/allanger-Desensitized.png b/src/static/music/allanger-Desensitized.png new file mode 100755 index 0000000..bdc2a0d --- /dev/null +++ b/src/static/music/allanger-Desensitized.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:293efeb5270f812ce115b6de8df01139e9a4eca1405611bce1b9c0a2104164f8 +size 13919204 -- 2.45.2 From 21801ef3742a7139ed29d2bb8eb520fec005e763 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 23 May 2023 11:24:44 +0200 Subject: [PATCH 049/111] release: allanger - Not Alone --- src/content/music/allanger-not-alone.md | 27 +++++++++++++++++++ .../music/Oveleane-Four_Steps_Behind.jpg | 3 --- src/static/music/allanger-Not_Alone.png | 3 +++ 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 src/content/music/allanger-not-alone.md delete mode 100644 src/static/music/Oveleane-Four_Steps_Behind.jpg create mode 100644 src/static/music/allanger-Not_Alone.png diff --git a/src/content/music/allanger-not-alone.md b/src/content/music/allanger-not-alone.md new file mode 100644 index 0000000..c03bc76 --- /dev/null +++ b/src/content/music/allanger-not-alone.md @@ -0,0 +1,27 @@ +--- +title: "allanger - Not Alone" +date: 2022-02-06T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "music/allanger-Not_Alone.png" + caption: "Not Alone" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - edm + - electronic +--- + +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/not-alone) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/23/) + +--- +{{< rawhtml >}} + +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Not%20Alone.zip)* diff --git a/src/static/music/Oveleane-Four_Steps_Behind.jpg b/src/static/music/Oveleane-Four_Steps_Behind.jpg deleted file mode 100644 index bc4b45c..0000000 --- a/src/static/music/Oveleane-Four_Steps_Behind.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fe51ea848995e26db8c88552ac057e286c66cc8e117280fac7149c4e42dd0e2 -size 2049438 diff --git a/src/static/music/allanger-Not_Alone.png b/src/static/music/allanger-Not_Alone.png new file mode 100644 index 0000000..3c8c207 --- /dev/null +++ b/src/static/music/allanger-Not_Alone.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb4daf5db317c1729021449f763feebd1928eb980e523700732232234546e502 +size 9276169 -- 2.45.2 From 688d94584db426a74d3ca0be82a2f99635b83970 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 23 May 2023 11:27:20 +0200 Subject: [PATCH 050/111] fix: Set the correct release date for \*Not Alone\* --- src/content/music/allanger-not-alone.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/music/allanger-not-alone.md b/src/content/music/allanger-not-alone.md index c03bc76..2fa3227 100644 --- a/src/content/music/allanger-not-alone.md +++ b/src/content/music/allanger-not-alone.md @@ -1,6 +1,6 @@ --- title: "allanger - Not Alone" -date: 2022-02-06T00:00:00+02:00 +date: 2022-02-10T00:00:00+02:00 draft: false ShowToc: false cover: -- 2.45.2 From 704f4b037aeb9aaea42ef927e180319aec988385 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 23 May 2023 17:53:26 +0200 Subject: [PATCH 051/111] chore: Update the builder version --- .drone.yml | 8 ++++---- scripts/build-container.pl | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.drone.yml b/.drone.yml index b7ef83d..58a29c6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -53,7 +53,7 @@ steps: - hugo -s ./src - name: Build and push the docker image - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:7d9add5c1ff2d510ff32ebabebf4da5086006498 privileged: true depends_on: - Test a build @@ -64,7 +64,7 @@ steps: - ./scripts/build-container.pl - name: Sync pictures from lfs to Minio - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:7d9add5c1ff2d510ff32ebabebf4da5086006498 depends_on: - Test a build environment: @@ -76,7 +76,7 @@ steps: - ./scripts/upload-media.pl - name: Deploy the application - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:7d9add5c1ff2d510ff32ebabebf4da5086006498 depends_on: - Build and push the docker image - Sync pictures from lfs to Minio @@ -93,7 +93,7 @@ steps: - ./scripts/deploy-app.pl - name: Cleanup everything - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:80ffd53372652576fa3c36a56b351b448a025c6a + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:7d9add5c1ff2d510ff32ebabebf4da5086006498 depends_on: - Deploy the application environment: diff --git a/scripts/build-container.pl b/scripts/build-container.pl index 9cf6765..2f39479 100755 --- a/scripts/build-container.pl +++ b/scripts/build-container.pl @@ -17,16 +17,16 @@ my $image_name = $ENV{'DRONE_REPO'} || "badhouseplants/badhouseplants-net"; my $tag = "$container_registry/$image_name:$git_commit_sha"; my $username = $ENV{'DRONE_USERNAME'} || "allanger"; my $password = $ENV{'GITEA_TOKEN'} || "YOU NOT AUTHORIZED, PAL"; -print `buildah login --username $username --password $password $container_registry` or die; -print `buildah build -t $tag .` or die; -print `buildah push $tag` or die; +print `buildah login --username $username --password $password $container_registry` or die $!; +print `buildah build -t $tag .` or die $!; +print `buildah push $tag` or die $!; # ------------------------------------------------- -# -- Push the lates if the branch is main +# -- Push the latest if the branch is main # ------------------------------------------------- if ( $git_branch eq $main_branch) { my $latest_tag = "$container_registry/$image_name:latest"; - print `buildah tag $tag $latest_tag` or die; - print `buildah push $latest_tag` or die; + print `buildah tag $tag $latest_tag` or die $!; + print `buildah push $latest_tag` or die $!; } print "Thanks!\n"; -- 2.45.2 From 6d7dc165875e7a0f0f88a4e2d3da59481e777b23 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 30 May 2023 10:51:33 +0200 Subject: [PATCH 052/111] Use a custom built image as a hugo builder --- Containerfile | 2 +- chart/Chart.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Containerfile b/Containerfile index c0556ea..a263167 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-builder +FROM git.badhouseplants.net/badhouseplants/hugo-container:451ffcefe9803644a65172b04e34392564ce8743 WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 104db0b..4ce8eb3 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: badhouseplants-net description: A Helm chart for Kubernetes type: application -version: 0.7.0 +version: 0.7.1 appVersion: "4.20.0" dependencies: - name: remark42 -- 2.45.2 From 6031309d1ce3472120c6f8eeb0fa36ddbc775556 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 30 May 2023 11:25:25 +0200 Subject: [PATCH 053/111] Upgrade the builder version --- .drone.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 58a29c6..9206a46 100644 --- a/.drone.yml +++ b/.drone.yml @@ -53,7 +53,7 @@ steps: - hugo -s ./src - name: Build and push the docker image - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:7d9add5c1ff2d510ff32ebabebf4da5086006498 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532 privileged: true depends_on: - Test a build @@ -64,7 +64,7 @@ steps: - ./scripts/build-container.pl - name: Sync pictures from lfs to Minio - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:7d9add5c1ff2d510ff32ebabebf4da5086006498 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532 depends_on: - Test a build environment: @@ -76,7 +76,7 @@ steps: - ./scripts/upload-media.pl - name: Deploy the application - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:7d9add5c1ff2d510ff32ebabebf4da5086006498 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532 depends_on: - Build and push the docker image - Sync pictures from lfs to Minio @@ -93,7 +93,7 @@ steps: - ./scripts/deploy-app.pl - name: Cleanup everything - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:7d9add5c1ff2d510ff32ebabebf4da5086006498 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532 depends_on: - Deploy the application environment: -- 2.45.2 From 012021bd936fa5fa1f6239174b89fd65c08d7e2b Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 30 May 2023 15:55:51 +0200 Subject: [PATCH 054/111] release: allanger - Await --- src/content/music/allanger-await.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/content/music/allanger-await.md diff --git a/src/content/music/allanger-await.md b/src/content/music/allanger-await.md new file mode 100644 index 0000000..b2a36a6 --- /dev/null +++ b/src/content/music/allanger-await.md @@ -0,0 +1,28 @@ +--- +title: "allanger - Await" +date: 2022-07-01T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "/music/allanger-Await.jpg" + caption: "Await" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - alternative + - hiphop + - rap +--- + +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/await) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/26/) + +--- +{{< rawhtml >}} + +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Await.zip)* -- 2.45.2 From 64fd4b50d9445ac7ba6c6a74d4d7ad0fde189d7b Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 30 May 2023 15:56:49 +0200 Subject: [PATCH 055/111] release: allanger - Await --- src/static/music/allanger-Await.jpg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/static/music/allanger-Await.jpg diff --git a/src/static/music/allanger-Await.jpg b/src/static/music/allanger-Await.jpg new file mode 100644 index 0000000..ca40a44 --- /dev/null +++ b/src/static/music/allanger-Await.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:045b360f443946471fefff417f4d09f26b8a5ec10a163efe05770589d88eed8c +size 1907777 -- 2.45.2 From 7b86516192d81f17da604c32eb84247f3f6376f4 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 30 May 2023 16:07:59 +0200 Subject: [PATCH 056/111] release: allanger - Under My Pillow --- .../music/allanger-four-steps-behind copy.md | 25 +++++++++++++++++++ src/static/music/allanger-Under_My_Pillow.png | 3 +++ 2 files changed, 28 insertions(+) create mode 100644 src/content/music/allanger-four-steps-behind copy.md create mode 100644 src/static/music/allanger-Under_My_Pillow.png diff --git a/src/content/music/allanger-four-steps-behind copy.md b/src/content/music/allanger-four-steps-behind copy.md new file mode 100644 index 0000000..81a3175 --- /dev/null +++ b/src/content/music/allanger-four-steps-behind copy.md @@ -0,0 +1,25 @@ +--- +title: "allanger - Under My Pillow" +date: 2023-05-15T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "/music/allanger-Under_My_Pillow.png" + caption: "Under My Pillow" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - rap + - hiphop +--- +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/under-my-pillow) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/27/) + +--- +{{< rawhtml >}} +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Under%20My%20Pillow.zip)* diff --git a/src/static/music/allanger-Under_My_Pillow.png b/src/static/music/allanger-Under_My_Pillow.png new file mode 100644 index 0000000..7e1acfc --- /dev/null +++ b/src/static/music/allanger-Under_My_Pillow.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c794c1a5e3e2072505e452fe51a53b0a001c6cc4e2d7b241b592fd89c939d027 +size 11667637 -- 2.45.2 From 0b5eb9da8fc79b8fd9cfd31a59ad6a18c15325b8 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 30 May 2023 16:18:10 +0200 Subject: [PATCH 057/111] release: allanger - Trace --- src/content/music/allanger-trace.md | 26 ++++++++++++++++++++++++++ src/static/music/allanger-Trace.png | 3 +++ 2 files changed, 29 insertions(+) create mode 100644 src/content/music/allanger-trace.md create mode 100644 src/static/music/allanger-Trace.png diff --git a/src/content/music/allanger-trace.md b/src/content/music/allanger-trace.md new file mode 100644 index 0000000..6548b42 --- /dev/null +++ b/src/content/music/allanger-trace.md @@ -0,0 +1,26 @@ +--- +title: "allanger - Trace" +date: 2023-05-30T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "music/allanger-Trace.png" + caption: "Trace" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - edm + - electronic +--- + +[OPEN ON BANDCAMP](https://allanger.bandcamp.com/album/trace) -- [OPEN ON FUNKWHALE](https://funkwhale.badhouseplants.net/library/albums/17/) + +--- +{{< rawhtml >}} +{{< /rawhtml >}} + +*If you want to download lossless audio for free [follow this link]https://s3.badhouseplants.net/allanger-music/allanger%20-%20Trace.zip)* diff --git a/src/static/music/allanger-Trace.png b/src/static/music/allanger-Trace.png new file mode 100644 index 0000000..1f227c5 --- /dev/null +++ b/src/static/music/allanger-Trace.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e946e1c9f687afc3cbfd19fded47316ad97ce7a00a2c23b8c533fe6cf5d33553 +size 13036141 -- 2.45.2 From 253d22592a534026cc24a5b309f2c948ecf45919 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 30 May 2023 16:40:47 +0200 Subject: [PATCH 058/111] fix: Get rid of a small typo --- src/content/music/allanger-trace.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/music/allanger-trace.md b/src/content/music/allanger-trace.md index 6548b42..a12a2db 100644 --- a/src/content/music/allanger-trace.md +++ b/src/content/music/allanger-trace.md @@ -23,4 +23,4 @@ tags: {{< rawhtml >}} {{< /rawhtml >}} -*If you want to download lossless audio for free [follow this link]https://s3.badhouseplants.net/allanger-music/allanger%20-%20Trace.zip)* +*If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Trace.zip)* -- 2.45.2 From 9e42f3afd1f02bea00b4c04e6e3fd917a24a5aee Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 2 Jun 2023 12:02:24 +0200 Subject: [PATCH 059/111] Fix embed funkwhale playlists --- src/content/beats/_index.md | 28 +++++++++---------- src/content/music/allanger-anymore.md | 2 +- src/content/music/allanger-await.md | 2 +- src/content/music/allanger-desensitized.md | 2 +- .../music/allanger-four-steps-behind copy.md | 2 +- .../music/allanger-four-steps-behind.md | 2 +- src/content/music/allanger-let-me-kill.md | 2 +- src/content/music/allanger-not-alone.md | 2 +- src/content/music/allanger-out-of-law.md | 2 +- src/content/music/allanger-trace.md | 2 +- src/content/music/allanger-wasted-time.md | 2 +- 11 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index 606ed56..d3a1642 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -8,71 +8,71 @@ draft: false --- ### Easy Money {{< rawhtml >}} - + {{< /rawhtml >}} ### Monk {{< rawhtml >}} - + {{< /rawhtml >}} ### Phantom Limb {{< rawhtml >}} - + {{< /rawhtml >}} ### Silk Road {{< rawhtml >}} - + {{< /rawhtml >}} ### Tremor {{< rawhtml >}} - + {{< /rawhtml >}} ### Silver Grenade {{< rawhtml >}} - + {{< /rawhtml >}} ### Spinal Cord {{< rawhtml >}} - + {{< /rawhtml >}} ### Empty Cubicles {{< rawhtml >}} - + {{< /rawhtml >}} ### Petrol {{< rawhtml >}} - + {{< /rawhtml >}} ### PSY {{< rawhtml >}} - + {{< /rawhtml >}} ### Body Drop {{< rawhtml >}} - + {{< /rawhtml >}} ### Broken Piano {{< rawhtml >}} - + {{< /rawhtml >}} ### Dead Wings {{< rawhtml >}} - + {{< /rawhtml >}} ### Trapped {{< rawhtml >}} - + {{< /rawhtml >}} diff --git a/src/content/music/allanger-anymore.md b/src/content/music/allanger-anymore.md index 86b6557..6740326 100644 --- a/src/content/music/allanger-anymore.md +++ b/src/content/music/allanger-anymore.md @@ -20,7 +20,7 @@ tags: --- {{< rawhtml >}} - + {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Anymore.zip)* diff --git a/src/content/music/allanger-await.md b/src/content/music/allanger-await.md index b2a36a6..11ad224 100644 --- a/src/content/music/allanger-await.md +++ b/src/content/music/allanger-await.md @@ -22,7 +22,7 @@ tags: --- {{< rawhtml >}} - + {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Await.zip)* diff --git a/src/content/music/allanger-desensitized.md b/src/content/music/allanger-desensitized.md index 0d1090b..e3f5abb 100644 --- a/src/content/music/allanger-desensitized.md +++ b/src/content/music/allanger-desensitized.md @@ -21,7 +21,7 @@ tags: --- {{< rawhtml >}} - + {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Desensitized.zip)* diff --git a/src/content/music/allanger-four-steps-behind copy.md b/src/content/music/allanger-four-steps-behind copy.md index 81a3175..285138b 100644 --- a/src/content/music/allanger-four-steps-behind copy.md +++ b/src/content/music/allanger-four-steps-behind copy.md @@ -20,6 +20,6 @@ tags: --- {{< rawhtml >}} -{{< /rawhtml >}} +{{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Under%20My%20Pillow.zip)* diff --git a/src/content/music/allanger-four-steps-behind.md b/src/content/music/allanger-four-steps-behind.md index 5f82707..b0ca05f 100644 --- a/src/content/music/allanger-four-steps-behind.md +++ b/src/content/music/allanger-four-steps-behind.md @@ -19,7 +19,7 @@ tags: --- {{< rawhtml >}} - + {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Four%20Steps%20Behind.zip)* diff --git a/src/content/music/allanger-let-me-kill.md b/src/content/music/allanger-let-me-kill.md index acf1ef8..01a21d3 100644 --- a/src/content/music/allanger-let-me-kill.md +++ b/src/content/music/allanger-let-me-kill.md @@ -21,7 +21,7 @@ tags: --- {{< rawhtml >}} - + {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Let%20Me%20Kill.zip)* diff --git a/src/content/music/allanger-not-alone.md b/src/content/music/allanger-not-alone.md index 2fa3227..43101bf 100644 --- a/src/content/music/allanger-not-alone.md +++ b/src/content/music/allanger-not-alone.md @@ -21,7 +21,7 @@ tags: --- {{< rawhtml >}} - + {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Not%20Alone.zip)* diff --git a/src/content/music/allanger-out-of-law.md b/src/content/music/allanger-out-of-law.md index 53ea069..9f38145 100644 --- a/src/content/music/allanger-out-of-law.md +++ b/src/content/music/allanger-out-of-law.md @@ -20,7 +20,7 @@ tags: --- {{< rawhtml >}} - + {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Out%20Of%20Law.zip)* diff --git a/src/content/music/allanger-trace.md b/src/content/music/allanger-trace.md index a12a2db..157832e 100644 --- a/src/content/music/allanger-trace.md +++ b/src/content/music/allanger-trace.md @@ -21,6 +21,6 @@ tags: --- {{< rawhtml >}} -{{< /rawhtml >}} +{{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Trace.zip)* diff --git a/src/content/music/allanger-wasted-time.md b/src/content/music/allanger-wasted-time.md index 6d1c47a..a15306c 100644 --- a/src/content/music/allanger-wasted-time.md +++ b/src/content/music/allanger-wasted-time.md @@ -20,7 +20,7 @@ tags: --- {{< rawhtml >}} - + {{< /rawhtml >}} *If you want to download lossless audio for free [follow this link](https://s3.badhouseplants.net/allanger-music/allanger%20-%20Wasted%20Time.zip)* -- 2.45.2 From 91eb4014907ba8631ed62d7e1e91611201f11639 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Mon, 5 Jun 2023 09:53:34 +0200 Subject: [PATCH 060/111] chore: Upgrade the hugo to 0.112.7 --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index a263167..3998a55 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:451ffcefe9803644a65172b04e34392564ce8743 +FROM git.badhouseplants.net/badhouseplants/hugo-container:efb6a013ff951feddb7ffe30c073676f2d726da1 WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] -- 2.45.2 From df9971ab4d6f3d1eec21e63a05b68e9bb73fd333 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 23 Jun 2023 16:12:33 +0200 Subject: [PATCH 061/111] Update the `beats` section --- src/content/beats/_index.md | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index d3a1642..37dd7af 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -8,71 +8,74 @@ draft: false --- ### Easy Money {{< rawhtml >}} - + {{< /rawhtml >}} ### Monk +#### Not available anymore, but I can do a similar one you you'd like {{< rawhtml >}} - + {{< /rawhtml >}} ### Phantom Limb {{< rawhtml >}} - + {{< /rawhtml >}} ### Silk Road {{< rawhtml >}} - + {{< /rawhtml >}} ### Tremor {{< rawhtml >}} - + {{< /rawhtml >}} ### Silver Grenade {{< rawhtml >}} - + {{< /rawhtml >}} ### Spinal Cord {{< rawhtml >}} - + {{< /rawhtml >}} ### Empty Cubicles {{< rawhtml >}} - + {{< /rawhtml >}} ### Petrol +#### Not available anymore, but I can do a similar one you you'd like {{< rawhtml >}} - + {{< /rawhtml >}} ### PSY {{< rawhtml >}} - + {{< /rawhtml >}} ### Body Drop +#### Not available anymore, but I can do a similar one you you'd like {{< rawhtml >}} - + {{< /rawhtml >}} ### Broken Piano {{< rawhtml >}} - + {{< /rawhtml >}} ### Dead Wings {{< rawhtml >}} - + {{< /rawhtml >}} ### Trapped {{< rawhtml >}} - + {{< /rawhtml >}} -- 2.45.2 From 465720c398663d5623701d09073460b8ffaa03fe Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 23 Jun 2023 16:20:50 +0200 Subject: [PATCH 062/111] Update the `beats` section once again --- src/content/beats/_index.md | 46 +++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index 37dd7af..f05a1c1 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -8,74 +8,86 @@ draft: false --- ### Easy Money {{< rawhtml >}} - + {{< /rawhtml >}} ### Monk -#### Not available anymore, but I can do a similar one you you'd like +#### Not available anymore, but I can do a similar one if you'd like {{< rawhtml >}} - + +{{< /rawhtml >}} + +### Ark +#### Not available anymore, but I can do a similar one if you'd like +{{< rawhtml >}} + {{< /rawhtml >}} ### Phantom Limb {{< rawhtml >}} - + {{< /rawhtml >}} ### Silk Road {{< rawhtml >}} - + {{< /rawhtml >}} ### Tremor {{< rawhtml >}} - + {{< /rawhtml >}} ### Silver Grenade {{< rawhtml >}} - + {{< /rawhtml >}} ### Spinal Cord {{< rawhtml >}} - + {{< /rawhtml >}} ### Empty Cubicles {{< rawhtml >}} - + +{{< /rawhtml >}} + +### Vicious Shine +#### Not available anymore, but I can do a similar one if you'd like +{{< rawhtml >}} + {{< /rawhtml >}} ### Petrol -#### Not available anymore, but I can do a similar one you you'd like +#### Not available anymore, but I can do a similar one if you'd like {{< rawhtml >}} - + {{< /rawhtml >}} ### PSY {{< rawhtml >}} - + {{< /rawhtml >}} ### Body Drop -#### Not available anymore, but I can do a similar one you you'd like +#### Not available anymore, but I can do a similar one if you'd like {{< rawhtml >}} - + {{< /rawhtml >}} ### Broken Piano {{< rawhtml >}} - + {{< /rawhtml >}} ### Dead Wings {{< rawhtml >}} - + {{< /rawhtml >}} ### Trapped {{< rawhtml >}} - + {{< /rawhtml >}} -- 2.45.2 From 0c413206372d78243dfb8d4350fd6048da391d26 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 23 Jun 2023 17:36:30 +0200 Subject: [PATCH 063/111] feat: Enable autoplay on the video widget --- src/layouts/shortcodes/video.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/shortcodes/video.html b/src/layouts/shortcodes/video.html index f26c3e5..3876006 100644 --- a/src/layouts/shortcodes/video.html +++ b/src/layouts/shortcodes/video.html @@ -13,7 +13,7 @@ var player = new Clappr.Player({ source: {{ .Get 0 }}, - mute: true, + mute: false, height: 360, width: 640 }); -- 2.45.2 From d34243f43d3b382618d7b49d7800768301dd2d23 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 23 Jun 2023 17:36:46 +0200 Subject: [PATCH 064/111] feat: Add a widget for playing audio files --- src/layouts/shortcodes/audio.html | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/layouts/shortcodes/audio.html diff --git a/src/layouts/shortcodes/audio.html b/src/layouts/shortcodes/audio.html new file mode 100644 index 0000000..ccaf315 --- /dev/null +++ b/src/layouts/shortcodes/audio.html @@ -0,0 +1,6 @@ +
    + +
    \ No newline at end of file -- 2.45.2 From bbfa15e45eaf8f3b890bf3182d8d386e9d62d5e6 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 23 Jun 2023 17:37:15 +0200 Subject: [PATCH 065/111] post: How to create a kick drum in Vital --- .spelling | 2 + .../posts/creating-a-sample-pack-kick.md | 83 +++++++++++++++++++ .../Kick_final_result.mp3 | 3 + .../creating-a-sample-pack-kick/Kick_v1.mp3 | 3 + .../creating-a-sample-pack-kick/Kick_v2.mkv | 3 + .../creating-a-sample-pack-kick/Kick_v2.mp4 | 3 + .../creating-a-sample-pack-kick/Kick_v3.mkv | 3 + .../creating-a-sample-pack-kick/Kick_v3.mp4 | 3 + .../creating-a-sample-pack-kick/Kick_v4.mkv | 3 + .../creating-a-sample-pack-kick/Kick_v4.mp4 | 3 + .../creating-a-sample-pack-kick/cover.png | 3 + .../disable_note_track.png | 3 + .../init_vital.png | 3 + .../kick_basic_shape.png | 3 + .../kick_lfo_1.png | 3 + .../kick_lfo_2.png | 3 + .../unison_phase.png | 3 + 17 files changed, 130 insertions(+) create mode 100644 src/content/posts/creating-a-sample-pack-kick.md create mode 100644 src/static/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 create mode 100644 src/static/posts/creating-a-sample-pack-kick/Kick_v1.mp3 create mode 100644 src/static/posts/creating-a-sample-pack-kick/Kick_v2.mkv create mode 100644 src/static/posts/creating-a-sample-pack-kick/Kick_v2.mp4 create mode 100644 src/static/posts/creating-a-sample-pack-kick/Kick_v3.mkv create mode 100644 src/static/posts/creating-a-sample-pack-kick/Kick_v3.mp4 create mode 100644 src/static/posts/creating-a-sample-pack-kick/Kick_v4.mkv create mode 100644 src/static/posts/creating-a-sample-pack-kick/Kick_v4.mp4 create mode 100644 src/static/posts/creating-a-sample-pack-kick/cover.png create mode 100644 src/static/posts/creating-a-sample-pack-kick/disable_note_track.png create mode 100644 src/static/posts/creating-a-sample-pack-kick/init_vital.png create mode 100644 src/static/posts/creating-a-sample-pack-kick/kick_basic_shape.png create mode 100644 src/static/posts/creating-a-sample-pack-kick/kick_lfo_1.png create mode 100644 src/static/posts/creating-a-sample-pack-kick/kick_lfo_2.png create mode 100644 src/static/posts/creating-a-sample-pack-kick/unison_phase.png diff --git a/.spelling b/.spelling index 4876012..e03b411 100644 --- a/.spelling +++ b/.spelling @@ -130,6 +130,8 @@ Ruina VCV LFO beatmaker +wavetables +OSC - src/themes/papermod/README.md PaperMod hugo-paper diff --git a/src/content/posts/creating-a-sample-pack-kick.md b/src/content/posts/creating-a-sample-pack-kick.md new file mode 100644 index 0000000..d229519 --- /dev/null +++ b/src/content/posts/creating-a-sample-pack-kick.md @@ -0,0 +1,83 @@ +--- +title: "Creating a Sample Pack: Kick" +date: 2023-05-24T16:59:03+02:00 +draft: false +ShowToc: true +cover: + image: "/posts/creating-a-sample-pack-kick/cover.png" + caption: "Creating a Sample Pack: Kick" + relative: false + responsiveImages: false +--- + +>Oi! +>I've decided to turn that blog more into the musical direction, because I've got enough of IT related stuff on my work. So most probably, I'll be posting about sound design, sound engineering and music more. + +## Intro + +I want to make a series of articles about sound design. I'll be learning as well during this process, and here I'll just post my findings. If you happen to read it and find mistakes, feel free to send me your thoughts. + +I consider this cycle ready, when I have enough of samples, that I can create a beat or a song. After everything is done, I'll publish the sample pack, so anybody can download it for free. And the example of a track will be on my [funkwhale instance](https://funkwhale.badhouseplants.net/library) + +## Let's go + +I've decided to start with a drum kit. And the first element that I'm going to create is a **kick drum**. I'll be using Vital as a sound design instrument, if you don't know what it is you should check it out here: . + + +First, we need to understand, what the kick actually is. What are components of that sound. I can identify three components of it: +- Click (that is produced by a pedal) +- Body (sound from inside a drum) +- Metal (vibrations of metal components of a drum kit) *This is optional, I'd say* + +Let's open Vital + +![Empty Vital](/posts/creating-a-sample-pack-kick/init_vital.png) + +First of all, let's get rid of all non-persistent stuff (Things that are different on each key press) + +![Unison and Phase](/posts/creating-a-sample-pack-kick/unison_phase.png) + +*And we will do the same for all wavetables for kick and snare* + +Now let's set wave types to `basic shapes` + +![Basic Shape](/posts/creating-a-sample-pack-kick/kick_basic_shape.png) + +Doesn't sound like a kick yet, but the main trick, as I think, is to map the pitch of that OSC to an LFO, that looks like that, and set the base value to something around **-12**. +![LFO 1](/posts/creating-a-sample-pack-kick/kick_lfo_1.png) + +You can play around a bit and find a perfect spot that will make your kick awesome, but let's listen to what I've got now. I'll use one of defaults `Logic Pro` drum kits and replace a kick with the one I'm creating. Later I'll be replacing other drums as well, and in the end we will have a full drum kit. + +Also, we don't need to change a pitch depending on which key is pressed, so let's disable the `Note Track` for all OSC in the `Advanced` tab +![Note Track disabled](/posts/creating-a-sample-pack-kick/disable_note_track.png) + +*Also, after disabling the note tracking, I've set the pitch base value to -14, so it sounds like a kick* + +Now, let's listen: + +{{< audio "/posts/creating-a-sample-pack-kick/Kick_v1.mp3" >}} + +Kick already sounds like a kick, but a lame one, doesn't it. Let's play a bit. + +First, let's add a second LFO to control the volume level of the kick, it should be a short hit, so I'm adding a LFO like that and mapping it to the `level` of the first `OSD` + +![LFO 2](/posts/creating-a-sample-pack-kick/kick_basic_shape.png) + +And then enabling the `Filter 1` and mapping this LFO to the `Filter` as well, + + +It looks and sounds like that + +{{< video "/posts/creating-a-sample-pack-kick/Kick_v2.mp4" "video-1">}} + +With that filter setup I think, click sounds better. To make it even sharper, let's add some `White Noise` and an additional `LFO` for it. + +{{< video "/posts/creating-a-sample-pack-kick/Kick_v3.mp4" "video-2">}} + +And now let's add some effects. I've added a little bit of `EQ`, a `Distortion` which drive is mapped to a new `LFO`, and a `Compressor`, so now it looks like that: +{{< video "/posts/creating-a-sample-pack-kick/Kick_v4.mp4" "video-3">}} + +The last step would be to add some more effects, but outside the `Vital` synth already. *And I'd like to change the pattern, because this one is driving me nuts*. So I've added a bit of additional `EQ`, `Distorition`, and `Compression`, and now it sounds like that. ` + + +{{< audio "/posts/creating-a-sample-pack-kick/Kick_final_result.mp3" >}} diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 b/src/static/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 new file mode 100644 index 0000000..76b061d --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e0e778f9654025adba40dffc4cf78393b688ee865e61526b9ad8d6cc5191bb0 +size 805533 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v1.mp3 b/src/static/posts/creating-a-sample-pack-kick/Kick_v1.mp3 new file mode 100644 index 0000000..d476df9 --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/Kick_v1.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:633d66327aa655eb6c586ee83d71feae841344534029321498cefa16aef5fd84 +size 165533 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mkv b/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mkv new file mode 100644 index 0000000..2c84b69 --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mkv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74fd914e1b849336aca27c466843cf7e9a163fe8925a8167965e6fcba3f8e14a +size 604978 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mp4 b/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mp4 new file mode 100644 index 0000000..7bd8601 --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee2e5c700e18277b70253df905fbaabf07bfa656d79f342bc3d0340f45d7b219 +size 311020 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mkv b/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mkv new file mode 100644 index 0000000..283c4fa --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mkv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13d153f7d249431b295112bd93f21b2e52035e5c349a60ffb3852bc0ea200ce1 +size 528621 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mp4 b/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mp4 new file mode 100644 index 0000000..b74a286 --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:488311a0e6ea869a20cb12ef34ac9fcae983819e0e6144442f6809d30d3bcecf +size 292423 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mkv b/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mkv new file mode 100644 index 0000000..296ecf9 --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mkv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fcf4d901648cef69b7106a8275d07de35fec4ac1cefdfe288ec67af7a4ecb5f +size 674171 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mp4 b/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mp4 new file mode 100644 index 0000000..eb6947f --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7281dc2f93cfba5731b2bd0d38c6530ca84a33b05cf8a3ecacee583a073fb5be +size 376034 diff --git a/src/static/posts/creating-a-sample-pack-kick/cover.png b/src/static/posts/creating-a-sample-pack-kick/cover.png new file mode 100644 index 0000000..8fb0642 --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/cover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d84081625a6b9cfb6a76948d076e02e00b626a1e288bca30d3f41879b09bf93d +size 1008850 diff --git a/src/static/posts/creating-a-sample-pack-kick/disable_note_track.png b/src/static/posts/creating-a-sample-pack-kick/disable_note_track.png new file mode 100644 index 0000000..e12bb6b --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/disable_note_track.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d0f5650d0c4bc5d563bf340841d10c67631d5983d938a8e52847f5013ce7862 +size 974202 diff --git a/src/static/posts/creating-a-sample-pack-kick/init_vital.png b/src/static/posts/creating-a-sample-pack-kick/init_vital.png new file mode 100644 index 0000000..dcb3ccc --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/init_vital.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34532e0757db49204f854208fd09620dded5810262bd909b29df8ec985ee9496 +size 1242149 diff --git a/src/static/posts/creating-a-sample-pack-kick/kick_basic_shape.png b/src/static/posts/creating-a-sample-pack-kick/kick_basic_shape.png new file mode 100644 index 0000000..9a7a21d --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/kick_basic_shape.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eef68ec724e4467228eb20b04e9d62f89423925978e13ca2106d95ae86f0cb49 +size 94083 diff --git a/src/static/posts/creating-a-sample-pack-kick/kick_lfo_1.png b/src/static/posts/creating-a-sample-pack-kick/kick_lfo_1.png new file mode 100644 index 0000000..60a3704 --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/kick_lfo_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a77078e09ad68001c5a5d05c0f41df49ab71958a8a1788cef84b3f0a1d943ca6 +size 133623 diff --git a/src/static/posts/creating-a-sample-pack-kick/kick_lfo_2.png b/src/static/posts/creating-a-sample-pack-kick/kick_lfo_2.png new file mode 100644 index 0000000..98bdae7 --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/kick_lfo_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab3b4fec7d092259b524e5b57e03d9ad35a01a87caccfe5d5a6b2dae3094bdd2 +size 133904 diff --git a/src/static/posts/creating-a-sample-pack-kick/unison_phase.png b/src/static/posts/creating-a-sample-pack-kick/unison_phase.png new file mode 100644 index 0000000..b8e3fd1 --- /dev/null +++ b/src/static/posts/creating-a-sample-pack-kick/unison_phase.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:386fc8feea661abf218679d1d925994df5cbc7af2a3ee370a5c8eca206725812 +size 90664 -- 2.45.2 From 58c3c039c9b6b4bbf26d3cb96b820d84bf035498 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 23 Jun 2023 17:55:48 +0200 Subject: [PATCH 066/111] build: ArgoCD is pruning resource when syncing now Issue: https://git.badhouseplants.net/badhouseplants/badhouseplants-net/issues/31 --- scripts/deploy-app.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy-app.pl b/scripts/deploy-app.pl index f61a561..b99b458 100755 --- a/scripts/deploy-app.pl +++ b/scripts/deploy-app.pl @@ -38,7 +38,7 @@ print `yq -i '.spec.source.helm.values = load_str("/tmp/values.yaml")' /tmp/appl if(!defined $ENV{DEPLOY_SCRIPT_DEBUG}){ print `argocd app create -f /tmp/application.yaml --upsert` or die $!; - print `argocd app sync -l application=badhouseplants -l branch=$git_branch` or die $!; + print `argocd app sync --prune -l application=badhouseplants -l branch=$git_branch` or die $!; print `argocd app wait -l application=badhouseplants -l branch=$git_branch` or die $!; } # ---------------------------------- -- 2.45.2 From 8e67748005cbf471f87c8f066a3e34af4765b45a Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 25 Jun 2023 10:01:56 +0200 Subject: [PATCH 067/111] chore: Upgrade the hugo to 0.114.1 --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 3998a55..61eee55 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:efb6a013ff951feddb7ffe30c073676f2d726da1 +FROM git.badhouseplants.net/badhouseplants/hugo-container:27e7df91778eb88a9dca99ef1108ba0fe295590f WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] -- 2.45.2 From 01cd5ed1921df902a3c72ed0eda568b591d1b817 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 25 Jun 2023 17:42:51 +0200 Subject: [PATCH 068/111] refactor: Remove the lock file from the repo --- .gitignore | 2 +- .hugo_build.lock | 0 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 .hugo_build.lock diff --git a/.gitignore b/.gitignore index de40ffb..9a9d677 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ src/node_modules src/public src/resources -.hugo_build.lock +#.hugo_build.lock diff --git a/.hugo_build.lock b/.hugo_build.lock deleted file mode 100644 index e69de29..0000000 -- 2.45.2 From 6778dca75a0070961cd00a734d366057ce1c1572 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 25 Jun 2023 17:43:25 +0200 Subject: [PATCH 069/111] refactor: The lock file is back to the gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9a9d677..de40ffb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ src/node_modules src/public src/resources -#.hugo_build.lock +.hugo_build.lock -- 2.45.2 From 8790f2982b2041b418e7485b3fe5edb8d2cc2802 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 5 Jul 2023 14:45:10 +0200 Subject: [PATCH 070/111] chore: Upgrade the hugo to 0.115.1 --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 61eee55..fc82812 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:27e7df91778eb88a9dca99ef1108ba0fe295590f +FROM git.badhouseplants.net/badhouseplants/hugo-container:72cc5a4925ed1cabd9099a26c05e3a09389bf15b WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] -- 2.45.2 From 05ca3d26e99460c520067162964fd4217a612aa2 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 5 Jul 2023 14:59:48 +0200 Subject: [PATCH 071/111] fix: Fix the grammar on the beats page --- src/content/beats/_index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index f05a1c1..9233fb3 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -12,13 +12,13 @@ draft: false {{< /rawhtml >}} ### Monk -#### Not available anymore, but I can do a similar one if you'd like +#### Not available anymore, but I can make a similar one if you'd like {{< rawhtml >}} {{< /rawhtml >}} ### Ark -#### Not available anymore, but I can do a similar one if you'd like +#### Not available anymore, but I can make a similar one if you'd like {{< rawhtml >}} {{< /rawhtml >}} @@ -54,13 +54,13 @@ draft: false {{< /rawhtml >}} ### Vicious Shine -#### Not available anymore, but I can do a similar one if you'd like +#### Not available anymore, but I can make a similar one if you'd like {{< rawhtml >}} {{< /rawhtml >}} ### Petrol -#### Not available anymore, but I can do a similar one if you'd like +#### Not available anymore, but I can make a similar one if you'd like {{< rawhtml >}} {{< /rawhtml >}} @@ -71,7 +71,7 @@ draft: false {{< /rawhtml >}} ### Body Drop -#### Not available anymore, but I can do a similar one if you'd like +#### Not available anymore, but I can make a similar one if you'd like {{< rawhtml >}} {{< /rawhtml >}} -- 2.45.2 From d45adae56a2111d1e862b788710dafb09939a73b Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 9 Jul 2023 23:25:57 +0200 Subject: [PATCH 072/111] chore: Upgrade hugo to 0.115.2 --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index fc82812..9fa7cdc 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:72cc5a4925ed1cabd9099a26c05e3a09389bf15b +FROM git.badhouseplants.net/badhouseplants/hugo-container:7390da0aea7c2eea3501201288279bf1392a01a9 WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] -- 2.45.2 From 77eba4d32b68462f40e680b4853121b805c4b58b Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 16 Jul 2023 21:18:50 +0200 Subject: [PATCH 073/111] Update a hugo version --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 9fa7cdc..fc34552 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:7390da0aea7c2eea3501201288279bf1392a01a9 +FROM git.badhouseplants.net/badhouseplants/hugo-container:cdc17b3954a8ac5bca8e98b4148859a9326b05c6 WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] -- 2.45.2 From c6e4023787df4ed1bbaef3d5858365d52fd531a0 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 23 Jul 2023 14:04:31 +0200 Subject: [PATCH 074/111] Old beats are released --- src/content/beats/_index.md | 14 ++++++++ src/content/posts/new-beats-are-out.md | 33 +++++++++++++++++++ .../posts/some-old-beats-are-out/Cover.png | 3 ++ 3 files changed, 50 insertions(+) create mode 100644 src/content/posts/new-beats-are-out.md create mode 100644 src/static/posts/some-old-beats-are-out/Cover.png diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index 9233fb3..b01550b 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -91,3 +91,17 @@ draft: false {{< /rawhtml >}} +### Dusted +{{< rawhtml >}} + +{{< /rawhtml >}} + +### Fallen Folk +{{< rawhtml >}} + +{{< /rawhtml >}} + +### Pillows +{{< rawhtml >}} + +{{< /rawhtml >}} diff --git a/src/content/posts/new-beats-are-out.md b/src/content/posts/new-beats-are-out.md new file mode 100644 index 0000000..74e0488 --- /dev/null +++ b/src/content/posts/new-beats-are-out.md @@ -0,0 +1,33 @@ +--- +title: "Some old beats are out" +date: 2023-07-23T13:46:29+02:00 +draft: false +ShowToc: true +cover: + image: "/posts/some-old-beats-are-out/Cover.png" + caption: "Some old beats are out" + relative: false + responsiveImages: false +tags: + - Music + - Beats +--- + +I've released some of my old beats that we pending for quite a time. You can check them out on my [Funkwhale](https://funkwhale.badhouseplants.net/channels/allanger_beats) + +If you happen to like anything, just let me know, we will figure it out + +### Dusted +{{< rawhtml >}} + +{{< /rawhtml >}} + +### Fallen Folk +{{< rawhtml >}} + +{{< /rawhtml >}} + +### Pillows +{{< rawhtml >}} + +{{< /rawhtml >}} diff --git a/src/static/posts/some-old-beats-are-out/Cover.png b/src/static/posts/some-old-beats-are-out/Cover.png new file mode 100644 index 0000000..07293c6 --- /dev/null +++ b/src/static/posts/some-old-beats-are-out/Cover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:716c31ed52cda78bf3b355f4ce262d0efb8e1170e00343ed6bdb405b001d4bd7 +size 2721809 -- 2.45.2 From 6e8faff745f50863303fd2bcef1c840354db5440 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 23 Jul 2023 14:46:10 +0200 Subject: [PATCH 075/111] rename the page about released beats --- src/content/posts/some-old-beats-are-out.md | 33 +++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/content/posts/some-old-beats-are-out.md diff --git a/src/content/posts/some-old-beats-are-out.md b/src/content/posts/some-old-beats-are-out.md new file mode 100644 index 0000000..74e0488 --- /dev/null +++ b/src/content/posts/some-old-beats-are-out.md @@ -0,0 +1,33 @@ +--- +title: "Some old beats are out" +date: 2023-07-23T13:46:29+02:00 +draft: false +ShowToc: true +cover: + image: "/posts/some-old-beats-are-out/Cover.png" + caption: "Some old beats are out" + relative: false + responsiveImages: false +tags: + - Music + - Beats +--- + +I've released some of my old beats that we pending for quite a time. You can check them out on my [Funkwhale](https://funkwhale.badhouseplants.net/channels/allanger_beats) + +If you happen to like anything, just let me know, we will figure it out + +### Dusted +{{< rawhtml >}} + +{{< /rawhtml >}} + +### Fallen Folk +{{< rawhtml >}} + +{{< /rawhtml >}} + +### Pillows +{{< rawhtml >}} + +{{< /rawhtml >}} -- 2.45.2 From bc56fca613ede133caf4f16bf4e46760e3838f3f Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 23 Jul 2023 15:00:19 +0200 Subject: [PATCH 076/111] remove an obsolete page --- src/content/posts/new-beats-are-out.md | 33 -------------------------- 1 file changed, 33 deletions(-) delete mode 100644 src/content/posts/new-beats-are-out.md diff --git a/src/content/posts/new-beats-are-out.md b/src/content/posts/new-beats-are-out.md deleted file mode 100644 index 74e0488..0000000 --- a/src/content/posts/new-beats-are-out.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: "Some old beats are out" -date: 2023-07-23T13:46:29+02:00 -draft: false -ShowToc: true -cover: - image: "/posts/some-old-beats-are-out/Cover.png" - caption: "Some old beats are out" - relative: false - responsiveImages: false -tags: - - Music - - Beats ---- - -I've released some of my old beats that we pending for quite a time. You can check them out on my [Funkwhale](https://funkwhale.badhouseplants.net/channels/allanger_beats) - -If you happen to like anything, just let me know, we will figure it out - -### Dusted -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Fallen Folk -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Pillows -{{< rawhtml >}} - -{{< /rawhtml >}} -- 2.45.2 From 8a4bd102d22440f1921bfd76c8fa89a2b25b5a51 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Thu, 20 Jul 2023 11:36:33 +0200 Subject: [PATCH 077/111] chore(hugo): Upgrade the version of Hugo --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index fc34552..d3867f5 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:cdc17b3954a8ac5bca8e98b4148859a9326b05c6 +FROM git.badhouseplants.net/badhouseplants/hugo-container:a515792cac44902d50a0bd9ff93349b75f1168f0 WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] -- 2.45.2 From 498f1a3865fc6dc390d383d860468b79b409117e Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 23 Jul 2023 20:24:46 +0200 Subject: [PATCH 078/111] Add one more old beat --- src/content/beats/_index.md | 5 +++++ src/content/posts/some-old-beats-are-out.md | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index b01550b..c0d2dbf 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -105,3 +105,8 @@ draft: false {{< rawhtml >}} {{< /rawhtml >}} + +### Swipe +{{< rawhtml >}} + +{{< /rawhtml >}} diff --git a/src/content/posts/some-old-beats-are-out.md b/src/content/posts/some-old-beats-are-out.md index 74e0488..549e2cf 100644 --- a/src/content/posts/some-old-beats-are-out.md +++ b/src/content/posts/some-old-beats-are-out.md @@ -31,3 +31,8 @@ If you happen to like anything, just let me know, we will figure it out {{< rawhtml >}} {{< /rawhtml >}} + +### Swipe +{{< rawhtml >}} + +{{< /rawhtml >}} -- 2.45.2 From accc397f291a6264a89851300ce71582ed4e38b0 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Mon, 7 Aug 2023 10:09:40 +0200 Subject: [PATCH 079/111] chore: Upgrade hugo and builder --- .drone.yml | 8 ++++---- Containerfile | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.drone.yml b/.drone.yml index 9206a46..18c8163 100644 --- a/.drone.yml +++ b/.drone.yml @@ -53,7 +53,7 @@ steps: - hugo -s ./src - name: Build and push the docker image - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 privileged: true depends_on: - Test a build @@ -64,7 +64,7 @@ steps: - ./scripts/build-container.pl - name: Sync pictures from lfs to Minio - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 depends_on: - Test a build environment: @@ -76,7 +76,7 @@ steps: - ./scripts/upload-media.pl - name: Deploy the application - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 depends_on: - Build and push the docker image - Sync pictures from lfs to Minio @@ -93,7 +93,7 @@ steps: - ./scripts/deploy-app.pl - name: Cleanup everything - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:896dc589d44bfa3560ee8d0469d5ee6fc4559532 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 depends_on: - Deploy the application environment: diff --git a/Containerfile b/Containerfile index d3867f5..f0f44dd 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:a515792cac44902d50a0bd9ff93349b75f1168f0 +FROM git.badhouseplants.net/badhouseplants/hugo-container:bad3393cdb76043a255347641d4157f1fae2b813 WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] -- 2.45.2 From d389af97eca899b225023a83b32b56f3d95694cf Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sat, 12 Aug 2023 18:06:14 +0200 Subject: [PATCH 080/111] Remove some social networks from main page --- src/config.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/config.yaml b/src/config.yaml index ee9334d..657a761 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -46,16 +46,10 @@ params: - name: Source url: "https://git.badhouseplants.net/badhouseplants/badhouseplants-net" socialIcons: - - name: "telegram" - url: "https://t.me/allanger" - - name: "twitter" - url: "https://twitter.com/_allanger" - name: "mastodon" url: "https://mastodon.social/@allanger" - name: github url: 'https://github.com/allanger' - - name: instagram - url: "https://instagram.com/_allanger" - name: email url: 'mailto:allanger@zohomail.com' ShowShareButtons: true -- 2.45.2 From 245ff53cc16eb7251b05338e0a13f61e402f627f Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Mon, 14 Aug 2023 10:47:52 +0200 Subject: [PATCH 081/111] The site shouldn't be allanger centered I want to start having a public library of music and hence I need to stop centering badhouseplants.net around allanger only --- .drone.yml | 18 +++--------------- src/content/music/allanger/_index.md | 19 +++++++++++++++++++ .../music/{ => allanger}/allanger-anymore.md | 0 .../music/{ => allanger}/allanger-await.md | 0 .../{ => allanger}/allanger-desensitized.md | 0 .../allanger-four-steps-behind copy.md | 0 .../allanger-four-steps-behind.md | 0 .../{ => allanger}/allanger-let-me-kill.md | 0 .../{ => allanger}/allanger-not-alone.md | 0 .../{ => allanger}/allanger-out-of-law.md | 0 .../music/{ => allanger}/allanger-trace.md | 0 .../{ => allanger}/allanger-wasted-time.md | 0 src/static/music/allanger.png | 3 +++ 13 files changed, 25 insertions(+), 15 deletions(-) create mode 100644 src/content/music/allanger/_index.md rename src/content/music/{ => allanger}/allanger-anymore.md (100%) rename src/content/music/{ => allanger}/allanger-await.md (100%) rename src/content/music/{ => allanger}/allanger-desensitized.md (100%) rename src/content/music/{ => allanger}/allanger-four-steps-behind copy.md (100%) rename src/content/music/{ => allanger}/allanger-four-steps-behind.md (100%) rename src/content/music/{ => allanger}/allanger-let-me-kill.md (100%) rename src/content/music/{ => allanger}/allanger-not-alone.md (100%) rename src/content/music/{ => allanger}/allanger-out-of-law.md (100%) rename src/content/music/{ => allanger}/allanger-trace.md (100%) rename src/content/music/{ => allanger}/allanger-wasted-time.md (100%) create mode 100644 src/static/music/allanger.png diff --git a/.drone.yml b/.drone.yml index 18c8163..f0dea8a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,15 +1,12 @@ ---- # ---------------------------------------------- # -- Update the helm chart # ---------------------------------------------- kind: pipeline type: docker name: Publish the helm chart - trigger: event: - push - steps: - name: Publish the Helm chart image: alpine/helm @@ -28,13 +25,11 @@ steps: kind: pipeline type: docker name: Build badhouseplants.net - trigger: event: - push clone: disable: true - steps: - name: clone image: alpine/git @@ -44,25 +39,23 @@ steps: - git clone $DRONE_REMOTE_URL . - git checkout $DRONE_BRANCH - git submodule update --init --recursive - - name: Test a build image: git.badhouseplants.net/badhouseplants/hugo-builder depends_on: - clone commands: - hugo -s ./src - - name: Build and push the docker image image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 privileged: true depends_on: - Test a build environment: + BUILDER_COMMIT: 2449b73b13a62ae916c6703778d096e5290157b3 GITEA_TOKEN: from_secret: GITEA_TOKEN commands: - ./scripts/build-container.pl - - name: Sync pictures from lfs to Minio image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 depends_on: @@ -74,7 +67,6 @@ steps: commands: - echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG - ./scripts/upload-media.pl - - name: Deploy the application image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 depends_on: @@ -91,7 +83,6 @@ steps: from_secret: GOOGLE_OAUTH_KEY commands: - ./scripts/deploy-app.pl - - name: Cleanup everything image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 depends_on: @@ -113,13 +104,11 @@ steps: kind: pipeline type: docker name: Spell-Checker - trigger: event: - push clone: disable: true - steps: - name: clone image: alpine/git @@ -128,9 +117,8 @@ steps: commands: - git clone $DRONE_REMOTE_URL --recurse-submodules . - git checkout $DRONE_BRANCH - - name: Spell-Checker image: node - commands: + commands: - npm i markdown-spellcheck -g - - mdspell "src/content/**/*.md" -n -r + - mdspell "src/content/**/*.md" -n -r diff --git a/src/content/music/allanger/_index.md b/src/content/music/allanger/_index.md new file mode 100644 index 0000000..232db6f --- /dev/null +++ b/src/content/music/allanger/_index.md @@ -0,0 +1,19 @@ +--- +title: "allanger" +date: 2018-12-26T00:00:00+02:00 +draft: false +ShowToc: false +cover: + image: "/music/allanger.png" + caption: "allanger" + relative: false + responsiveImages: false +hideSummary: true +tags: + - music + - release + - indie + - alternative +--- + +I'm allanger, the owner of Bad Houseplants. diff --git a/src/content/music/allanger-anymore.md b/src/content/music/allanger/allanger-anymore.md similarity index 100% rename from src/content/music/allanger-anymore.md rename to src/content/music/allanger/allanger-anymore.md diff --git a/src/content/music/allanger-await.md b/src/content/music/allanger/allanger-await.md similarity index 100% rename from src/content/music/allanger-await.md rename to src/content/music/allanger/allanger-await.md diff --git a/src/content/music/allanger-desensitized.md b/src/content/music/allanger/allanger-desensitized.md similarity index 100% rename from src/content/music/allanger-desensitized.md rename to src/content/music/allanger/allanger-desensitized.md diff --git a/src/content/music/allanger-four-steps-behind copy.md b/src/content/music/allanger/allanger-four-steps-behind copy.md similarity index 100% rename from src/content/music/allanger-four-steps-behind copy.md rename to src/content/music/allanger/allanger-four-steps-behind copy.md diff --git a/src/content/music/allanger-four-steps-behind.md b/src/content/music/allanger/allanger-four-steps-behind.md similarity index 100% rename from src/content/music/allanger-four-steps-behind.md rename to src/content/music/allanger/allanger-four-steps-behind.md diff --git a/src/content/music/allanger-let-me-kill.md b/src/content/music/allanger/allanger-let-me-kill.md similarity index 100% rename from src/content/music/allanger-let-me-kill.md rename to src/content/music/allanger/allanger-let-me-kill.md diff --git a/src/content/music/allanger-not-alone.md b/src/content/music/allanger/allanger-not-alone.md similarity index 100% rename from src/content/music/allanger-not-alone.md rename to src/content/music/allanger/allanger-not-alone.md diff --git a/src/content/music/allanger-out-of-law.md b/src/content/music/allanger/allanger-out-of-law.md similarity index 100% rename from src/content/music/allanger-out-of-law.md rename to src/content/music/allanger/allanger-out-of-law.md diff --git a/src/content/music/allanger-trace.md b/src/content/music/allanger/allanger-trace.md similarity index 100% rename from src/content/music/allanger-trace.md rename to src/content/music/allanger/allanger-trace.md diff --git a/src/content/music/allanger-wasted-time.md b/src/content/music/allanger/allanger-wasted-time.md similarity index 100% rename from src/content/music/allanger-wasted-time.md rename to src/content/music/allanger/allanger-wasted-time.md diff --git a/src/static/music/allanger.png b/src/static/music/allanger.png new file mode 100644 index 0000000..58857e9 --- /dev/null +++ b/src/static/music/allanger.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50db4edd406a153c57ed389e39b6d557af10752ffbdb8d0e07f847da268a0a79 +size 819858 -- 2.45.2 From e8d9f2d1586c877fd2a5907cb49b55157db24b2a Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 22 Sep 2023 13:42:14 +0200 Subject: [PATCH 082/111] site: Kid Robotik - I'm SO Sorry --- .spelling | 4 ++++ src/content/posts/kid-robotik-im-so-sorry.md | 22 +++++++++++++++++++ .../posts/kid-robotik-im-so-sorry/cover.jpg | 3 +++ 3 files changed, 29 insertions(+) create mode 100644 src/content/posts/kid-robotik-im-so-sorry.md create mode 100644 src/static/posts/kid-robotik-im-so-sorry/cover.jpg diff --git a/.spelling b/.spelling index e03b411..bb7b039 100644 --- a/.spelling +++ b/.spelling @@ -132,6 +132,10 @@ LFO beatmaker wavetables OSC +YOUTUBE +Twelve50TV +Robotik +McRoy - src/themes/papermod/README.md PaperMod hugo-paper diff --git a/src/content/posts/kid-robotik-im-so-sorry.md b/src/content/posts/kid-robotik-im-so-sorry.md new file mode 100644 index 0000000..be664af --- /dev/null +++ b/src/content/posts/kid-robotik-im-so-sorry.md @@ -0,0 +1,22 @@ +--- +title: "Kid Robotik - I'm SO Sorry" +date: 2023-09-22T13:05:28+02:00 +draft: false +ShowToc: true +cover: + image: "/posts/kid-robotik-im-so-sorry/cover.jpg" + caption: "Kid Robotik - I'm SO Sorry" + relative: true + responsiveImages: true +--- + +[OPEN ON SPOTIFY](https://open.spotify.com/album/6TTnfWZQyoZ8O1GuK8TtXf?si=cNchuEmfTAy52Z6jstnG2A) -- [OPEN ON DEEZER](https://deezer.page.link/D3M4JVdDYhmxXUUZ7) -- [OPEN ON YOUTUBE](https://youtube.com/playlist?list=OLAK5uy_l3BFAqPxAOkkzb-SByHbbvgBkdk3_idjg&si=bBo6cQE8jGWjLnsI) + +It's not easy to find this album, to be honest. I think that I would never have listened to it unless I started trying to understand the Glaswegian accent. *I haven't succeeded really still*. While searching for artists from Scotland, I've bumped onto this YouTube channel: [Twelve50TV](https://www.youtube.com/@Twelve50TV). There are many rappers that I actually like, but they don't tend to publish their music on mainstream streaming platforms (read Spotify). So I couldn't really listen to them during my daily routine. + +One of my favourites was that video: [Kid Robotik - War](https://youtu.be/LToW8CdBGOQ?si=-MgdWM1FvzGqKhnM). And this guy has his albums published on Spotify. I was listening to this song mostly because of other rappers performing on it: **Sherlock** and **McRoy**. And since this album is **Kid Robotik's** one, I wasn't trying to listen to it at all. I'm not saying that I didn't like his part there, but it didn't seem outstanding to me at all. Though, not so long ago I was bored by all the music I was listening to, and I've decided to check out the album finally. And after first listen I could already say that this guy, Kid Robotik is indeed one of favourite rappers. *Even though I still can't understand about 80% of what they're saying on that album, I freaking like beats, flow, voice and mixing.* And I think that it should gain a way more streams, than it has. + +I can't even pick songs that I like the most, because they're all great in my opinion. + +--- +I want to build a completely non-profit independent public music library based on Funkwhale application, you can find it here: https://funkwhale.badhouseplants.net. At the moment of writing this post, I only have my music released there, but I hope that one day it will change. And I would really like to have this album there. So if you are Kid Robotik or someone who know him, please let me know if you'd be interested. diff --git a/src/static/posts/kid-robotik-im-so-sorry/cover.jpg b/src/static/posts/kid-robotik-im-so-sorry/cover.jpg new file mode 100644 index 0000000..3daa0d3 --- /dev/null +++ b/src/static/posts/kid-robotik-im-so-sorry/cover.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:350ddc2e0f355d62ce7304ddbfc7002ce0ee42097b9277f3a2ca758a609b2a70 +size 102988 -- 2.45.2 From 22648c2cf039bc7c64fc8eb8d1574cdca6466db1 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 29 Sep 2023 15:29:21 +0200 Subject: [PATCH 083/111] site: Update the beats page --- src/content/beats/_index.md | 159 ++++++++++++++++-------------------- 1 file changed, 71 insertions(+), 88 deletions(-) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index c0d2dbf..f824dbc 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -2,111 +2,94 @@ title: Beats date: 2023-01-24T09:26:52+01:00 draft: false ---- ->I don't lease my beats. If you happen to like anything, just shout me a message and we will come to an agreement. And if you decide to use any of my beats you'll be the only one using it (legally). --- -### Easy Money +--- +### That's Rich +#### by allanger + +[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/36) + +> I'm poor though, huh + +Mainstream beats for dope rap about your luxury lifestyle, mate + {{< rawhtml >}} - + {{< /rawhtml >}} -### Monk -#### Not available anymore, but I can make a similar one if you'd like +--- + +### Why So Serious? +#### by allanger + +[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/38) + +> Don't be so suicidal, brah + +Depressive and horror beats to show them all what's real suffering out there + {{< rawhtml >}} - + {{< /rawhtml >}} -### Ark -#### Not available anymore, but I can make a similar one if you'd like +--- + +### Coke Queue +#### by allanger + +[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/39) + +> Aw, shite, I've meant line + +Need a track that will be screaming out of your lowrider? Check it out then + {{< rawhtml >}} - + {{< /rawhtml >}} -### Phantom Limb +--- + +### MDMA +#### by allanger + +[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/35) + +> Nah, I'm not using + +An album for four-on-the-floor or just clubby kinds of beats. If you want your track to be fitting in Berlin, this one is your choice. + {{< rawhtml >}} - + {{< /rawhtml >}} -### Silk Road +--- + +### Punk's Not Dead +#### by allanger + +[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/34) + +> Unless it's MGK + +Here I'll be uploading alternative beats that might not work for any track, but rather for something special. + {{< rawhtml >}} - + {{< /rawhtml >}} -### Tremor +--- + +### Trash Can +#### by allanger + +[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/33) + +>It doesn't mean that beats are shitty, it just me not liking them too much + +To this album, I will upload beats that I don't like, they all can be yours without any efforts of yours. + {{< rawhtml >}} - + {{< /rawhtml >}} -### Silver Grenade -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Spinal Cord -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Empty Cubicles -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Vicious Shine -#### Not available anymore, but I can make a similar one if you'd like -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Petrol -#### Not available anymore, but I can make a similar one if you'd like -{{< rawhtml >}} - -{{< /rawhtml >}} - -### PSY -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Body Drop -#### Not available anymore, but I can make a similar one if you'd like -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Broken Piano -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Dead Wings -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Trapped -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Dusted -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Fallen Folk -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Pillows -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Swipe -{{< rawhtml >}} - -{{< /rawhtml >}} -- 2.45.2 From 0bfc9c42a418d812cd4c76ce421b1487f25546a9 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 29 Sep 2023 15:33:11 +0200 Subject: [PATCH 084/111] fix: Fix typos --- .spelling | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.spelling b/.spelling index bb7b039..f08a391 100644 --- a/.spelling +++ b/.spelling @@ -136,6 +136,14 @@ YOUTUBE Twelve50TV Robotik McRoy +brah +aw +shite +lowrider +mdma +nah +clubby +MGK - src/themes/papermod/README.md PaperMod hugo-paper -- 2.45.2 From 319e012f0d2e02d372494eaa5ead1b11e0bb26b4 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 29 Sep 2023 10:10:32 +0200 Subject: [PATCH 085/111] chore: Upgrade HUGO version --- .drone.yml | 2 +- Containerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index f0dea8a..ef655bf 100644 --- a/.drone.yml +++ b/.drone.yml @@ -40,7 +40,7 @@ steps: - git checkout $DRONE_BRANCH - git submodule update --init --recursive - name: Test a build - image: git.badhouseplants.net/badhouseplants/hugo-builder + image: git.badhouseplants.net/badhouseplants/hugo-container depends_on: - clone commands: diff --git a/Containerfile b/Containerfile index f0f44dd..7173409 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:bad3393cdb76043a255347641d4157f1fae2b813 +FROM git.badhouseplants.net/badhouseplants/hugo-container:df0ab0c6f98e1921f451eb444aa5e7cb03d1f27b WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] -- 2.45.2 From 9edc6ce454bc48b76a239806fce86fd6f6b4191a Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 29 Sep 2023 15:51:07 +0200 Subject: [PATCH 086/111] site: Add Boys Don't Cry beats album --- src/content/beats/_index.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index f824dbc..619b08e 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -80,6 +80,20 @@ Here I'll be uploading alternative beats that might not work for any track, but --- +### Boys Don't Cry +#### by allanger + +[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/37) + +> ... do they? + +Looking for something sad and not really of a hiphop kind? This is the place + +{{< rawhtml >}} + +{{< /rawhtml >}} + +--- ### Trash Can #### by allanger -- 2.45.2 From f6078382848ea755f37a28178979ecb3c192deb6 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 29 Sep 2023 15:54:22 +0200 Subject: [PATCH 087/111] site: Update typos library --- src/content/beats/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index 619b08e..d492bb7 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -87,7 +87,7 @@ Here I'll be uploading alternative beats that might not work for any track, but > ... do they? -Looking for something sad and not really of a hiphop kind? This is the place +Looking for something sad and not really of a hip-hop kind? This is the place {{< rawhtml >}} -- 2.45.2 From 674a6d36367503fc4f7c7ed736f219657576ee0c Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 3 Oct 2023 20:58:07 +0200 Subject: [PATCH 088/111] beats: Add new allanger_beats album --- src/content/beats/_index.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index d492bb7..4a5e263 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -50,6 +50,21 @@ Need a track that will be screaming out of your lowrider? Check it out then --- +### Meta Irony's Bastard +#### by allanger + +[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/40) + +> Aw, shite, I've meant line + +Need a track that will be screaming out of your lowrider? Check it out then + +{{< rawhtml >}} + +{{< /rawhtml >}} + +--- + ### MDMA #### by allanger -- 2.45.2 From 1bad4f7bcaa85fc4701299bb2088b0f83afe775c Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 3 Oct 2023 21:05:08 +0200 Subject: [PATCH 089/111] beats: Add new allanger_beats album --- src/content/beats/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md index 4a5e263..a217fca 100644 --- a/src/content/beats/_index.md +++ b/src/content/beats/_index.md @@ -55,9 +55,9 @@ Need a track that will be screaming out of your lowrider? Check it out then [Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/40) -> Aw, shite, I've meant line +> Or just an unwanted child -Need a track that will be screaming out of your lowrider? Check it out then +Your track is supposed to make no freaking sense? Pick it up {{< rawhtml >}} -- 2.45.2 From 11fa15ee6cd0ea044d56901996c9191a2d6e7355 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 13 Oct 2023 11:44:57 +0200 Subject: [PATCH 090/111] Put I'm so sorry to drafts --- src/content/posts/kid-robotik-im-so-sorry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/posts/kid-robotik-im-so-sorry.md b/src/content/posts/kid-robotik-im-so-sorry.md index be664af..3e42509 100644 --- a/src/content/posts/kid-robotik-im-so-sorry.md +++ b/src/content/posts/kid-robotik-im-so-sorry.md @@ -1,7 +1,7 @@ --- title: "Kid Robotik - I'm SO Sorry" date: 2023-09-22T13:05:28+02:00 -draft: false +draft: true ShowToc: true cover: image: "/posts/kid-robotik-im-so-sorry/cover.jpg" -- 2.45.2 From 5b279bc5efdca2d60ed4b2cd75fc5ec97d2c4c11 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 17 Oct 2023 08:47:22 +0200 Subject: [PATCH 091/111] Fix links to beats --- src/content/posts/some-old-beats-are-out.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/posts/some-old-beats-are-out.md b/src/content/posts/some-old-beats-are-out.md index 549e2cf..69e0865 100644 --- a/src/content/posts/some-old-beats-are-out.md +++ b/src/content/posts/some-old-beats-are-out.md @@ -19,20 +19,20 @@ If you happen to like anything, just let me know, we will figure it out ### Dusted {{< rawhtml >}} - + {{< /rawhtml >}} ### Fallen Folk {{< rawhtml >}} - + {{< /rawhtml >}} ### Pillows {{< rawhtml >}} - + {{< /rawhtml >}} ### Swipe {{< rawhtml >}} - + {{< /rawhtml >}} -- 2.45.2 From d831774f5d920c1b8f80c63749bd76017953b290 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 26 Jan 2024 17:05:35 +0100 Subject: [PATCH 092/111] Trigger Drone -- 2.45.2 From fef3008333a8a1ff40d74d01328e7d97fa14118e Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 26 Jan 2024 17:08:31 +0100 Subject: [PATCH 093/111] Update the builder version --- .drone.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index ef655bf..31a1485 100644 --- a/.drone.yml +++ b/.drone.yml @@ -46,7 +46,7 @@ steps: commands: - hugo -s ./src - name: Build and push the docker image - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:555262114ea81f6f286010474527f419b56d33a3 privileged: true depends_on: - Test a build @@ -57,7 +57,7 @@ steps: commands: - ./scripts/build-container.pl - name: Sync pictures from lfs to Minio - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:555262114ea81f6f286010474527f419b56d33a3 depends_on: - Test a build environment: -- 2.45.2 From 1537e51426f60ef124053d3554711401ac1eb96e Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 26 Jan 2024 17:10:33 +0100 Subject: [PATCH 094/111] Update the builder version --- .drone.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 31a1485..ad284b6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -68,7 +68,7 @@ steps: - echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG - ./scripts/upload-media.pl - name: Deploy the application - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:555262114ea81f6f286010474527f419b56d33a3 depends_on: - Build and push the docker image - Sync pictures from lfs to Minio @@ -84,7 +84,7 @@ steps: commands: - ./scripts/deploy-app.pl - name: Cleanup everything - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:2449b73b13a62ae916c6703778d096e5290157b3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:555262114ea81f6f286010474527f419b56d33a3 depends_on: - Deploy the application environment: -- 2.45.2 From a0a415cd21131eb8a1ab3ec9bec5d9e772b6b844 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 26 Jan 2024 17:20:11 +0100 Subject: [PATCH 095/111] Trigger Drone -- 2.45.2 From bc97979a4b32c03adf9422b08ad2e7cdd479bef2 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 31 Jan 2024 19:49:00 +0100 Subject: [PATCH 096/111] Update paper theme --- src/themes/papermod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/themes/papermod b/src/themes/papermod index bacb763..d6cd6d9 160000 --- a/src/themes/papermod +++ b/src/themes/papermod @@ -1 +1 @@ -Subproject commit bacb763071d9852bb719675e6c4452fc5650a193 +Subproject commit d6cd6d91757c6966a6573c21c0311ba5d957263f -- 2.45.2 From b23b1fe81ee6aa4bd68805cef393cecd7e17c6ea Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sun, 4 Feb 2024 09:11:47 +0100 Subject: [PATCH 097/111] Update hugo and builder --- .drone.yml | 8 ++++---- Containerfile | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.drone.yml b/.drone.yml index ad284b6..d1d081f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -46,7 +46,7 @@ steps: commands: - hugo -s ./src - name: Build and push the docker image - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:555262114ea81f6f286010474527f419b56d33a3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9fabf0ce6eab3a9a9da15b2791e8282afc05ee0b privileged: true depends_on: - Test a build @@ -57,7 +57,7 @@ steps: commands: - ./scripts/build-container.pl - name: Sync pictures from lfs to Minio - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:555262114ea81f6f286010474527f419b56d33a3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9fabf0ce6eab3a9a9da15b2791e8282afc05ee0b depends_on: - Test a build environment: @@ -68,7 +68,7 @@ steps: - echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG - ./scripts/upload-media.pl - name: Deploy the application - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:555262114ea81f6f286010474527f419b56d33a3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9fabf0ce6eab3a9a9da15b2791e8282afc05ee0b depends_on: - Build and push the docker image - Sync pictures from lfs to Minio @@ -84,7 +84,7 @@ steps: commands: - ./scripts/deploy-app.pl - name: Cleanup everything - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:555262114ea81f6f286010474527f419b56d33a3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9fabf0ce6eab3a9a9da15b2791e8282afc05ee0b depends_on: - Deploy the application environment: diff --git a/Containerfile b/Containerfile index 7173409..ecc3f34 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:df0ab0c6f98e1921f451eb444aa5e7cb03d1f27b +FROM git.badhouseplants.net/badhouseplants/hugo-container:dd6475f3c99b450d334d3377f3c1a1474a341ba7 WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] -- 2.45.2 From 69454d8fd141b3f663790f523093eb76fb92372d Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 6 Feb 2024 16:58:00 +0100 Subject: [PATCH 098/111] Update paper theme --- src/themes/papermod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/themes/papermod b/src/themes/papermod index d6cd6d9..25e5b4d 160000 --- a/src/themes/papermod +++ b/src/themes/papermod @@ -1 +1 @@ -Subproject commit d6cd6d91757c6966a6573c21c0311ba5d957263f +Subproject commit 25e5b4d2982aacfee9a1194d2738db284c2ac380 -- 2.45.2 From b98dc56fb380e169a0482e60b09808645e92e3b9 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Fri, 19 Apr 2024 17:08:34 +0200 Subject: [PATCH 099/111] Update everything --- .drone.yml | 8 ++++---- .gitmodules | 2 +- Containerfile | 2 +- src/themes/papermod | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.drone.yml b/.drone.yml index d1d081f..19e9f23 100644 --- a/.drone.yml +++ b/.drone.yml @@ -46,7 +46,7 @@ steps: commands: - hugo -s ./src - name: Build and push the docker image - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9fabf0ce6eab3a9a9da15b2791e8282afc05ee0b + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 privileged: true depends_on: - Test a build @@ -57,7 +57,7 @@ steps: commands: - ./scripts/build-container.pl - name: Sync pictures from lfs to Minio - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9fabf0ce6eab3a9a9da15b2791e8282afc05ee0b + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 depends_on: - Test a build environment: @@ -68,7 +68,7 @@ steps: - echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG - ./scripts/upload-media.pl - name: Deploy the application - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9fabf0ce6eab3a9a9da15b2791e8282afc05ee0b + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 depends_on: - Build and push the docker image - Sync pictures from lfs to Minio @@ -84,7 +84,7 @@ steps: commands: - ./scripts/deploy-app.pl - name: Cleanup everything - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9fabf0ce6eab3a9a9da15b2791e8282afc05ee0b + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 depends_on: - Deploy the application environment: diff --git a/.gitmodules b/.gitmodules index 256f30f..8e4b3e7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,5 +1,5 @@ [submodule "src/themes/papermod"] path = src/themes/papermod url = https://github.com/adityatelange/hugo-PaperMod.git - branch = v7.0 + branch = master diff --git a/Containerfile b/Containerfile index ecc3f34..9979a54 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM git.badhouseplants.net/badhouseplants/hugo-container:dd6475f3c99b450d334d3377f3c1a1474a341ba7 +FROM git.badhouseplants.net/badhouseplants/hugo-container:43fd807fea2238853f48f95a435081d88857bb79 WORKDIR /src COPY ./src /src ENTRYPOINT ["hugo"] diff --git a/src/themes/papermod b/src/themes/papermod index 25e5b4d..aa7905e 160000 --- a/src/themes/papermod +++ b/src/themes/papermod @@ -1 +1 @@ -Subproject commit 25e5b4d2982aacfee9a1194d2738db284c2ac380 +Subproject commit aa7905eaca435f15aa9cb0efc4b15459049f58c5 -- 2.45.2 From b2b29a6f0f4c4254045935c5245537be83174770 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 13 Feb 2024 15:33:11 +0100 Subject: [PATCH 100/111] Migrate to the stack theme --- .drone.yml | 3 +- .gitattributes | 4 + .gitmodules | 8 +- .spelling | 3 + chart/Chart.yaml | 3 +- chart/templates/deployment.yaml | 10 +- chart/templates/namespace.yaml | 16 - chart/templates/nginx-config-cm.yaml | 2 +- chart/templates/rclone-config-sec.yaml | 2 +- chart/values.yaml | 19 +- kube/application.yaml | 2 +- kube/values-main.yaml | 2 +- kube/values-preview.yaml | 8 +- scripts/deploy-app.pl | 5 + scripts/upload-media.pl | 2 +- src/.hugo_build.lock | 0 src/archetypes/categories.md | 7 + src/archetypes/default.md | 15 +- src/archetypes/tags.md | 5 + .../main-logo.png => assets/avatar.png} | 0 src/assets/icons/beats.svg | 3 + src/assets/jsconfig.json | 3 + .../cover.png | 0 .../drone-pipeline.png | 0 .../argocd-vs-helmfile/app-of-apps-main.png | 0 .../applicationset-test.png | 0 .../argocd-vs-helmfile/cover-applications.png | 0 .../cover-applicationset.png | 0 .../posts/argocd-vs-helmfile/diff-in-ui.png | 0 .../argocd-vs-helmfile/goldilocks-ui.png | 0 .../posts/argocd-vs-helmfile/update-in-ui.png | 0 .../Kick_final_result.mp3 | 0 .../creating-a-sample-pack-kick/Kick_v1.mp3 | 0 .../creating-a-sample-pack-kick/Kick_v2.mkv | 0 .../creating-a-sample-pack-kick/Kick_v2.mp4 | 0 .../creating-a-sample-pack-kick/Kick_v3.mkv | 0 .../creating-a-sample-pack-kick/Kick_v3.mp4 | 0 .../creating-a-sample-pack-kick/Kick_v4.mkv | 0 .../creating-a-sample-pack-kick/Kick_v4.mp4 | 0 .../creating-a-sample-pack-kick/cover.png | 0 .../disable_note_track.png | 0 .../init_vital.png | 0 .../kick_basic_shape.png | 0 .../kick_lfo_1.png | 0 .../kick_lfo_2.png | 0 .../unison_phase.png | 0 .../3-clusters-and-gitea.png | 0 .../3-clusters.png | 0 .../cover.png | 0 src/config.yaml | 68 ----- src/content/_index.md | 8 + src/content/about/_index.md | 17 -- src/content/authors/allanger/_index.md | 37 --- src/content/beats/_index.md | 124 -------- src/content/categories/Kubernetes/_index.md | 9 + .../categories/Kubernetes/kubernetes.png | Bin 0 -> 166592 bytes src/content/page/about/index.md | 22 ++ src/content/page/archives/index.md | 11 + src/content/page/links/drone.png | Bin 0 -> 29022 bytes src/content/page/links/gitea.png | Bin 0 -> 43679 bytes src/content/page/links/index.md | 20 ++ src/content/page/links/ts-logo-128.jpg | Bin 0 -> 2071 bytes src/content/page/search/index.md | 13 + ...-dynamic-environment-per-branch-part-1.md} | 21 +- .../argocd-vs-helmfile-application.md} | 21 +- .../argocd-vs-helmfile-applicationset.md} | 21 +- .../allanger/argocd-vs-helmfile-helmfile.md} | 18 +- .../do-we-need-continuous-reconciliation.md | 56 ++++ .../dont-use-argocd-for-infrastructure.md} | 22 +- src/content/posts/.spelling | 45 --- src/content/posts/_index.md | 0 .../posts/creating-a-sample-pack-kick.md | 83 ----- src/content/posts/kid-robotik-im-so-sorry.md | 22 -- src/content/posts/some-old-beats-are-out.md | 38 --- src/content/posts/vst-on-linux-1/index.md | 287 ------------------ src/content/posts/vst-on-linux-2/index.md | 138 --------- src/content/posts/vst-on-linux-3/index.md | 198 ------------ src/content/search.md | 8 - src/hugo.yaml | 45 +++ src/layouts/_default/_markup/render-link.html | 1 - src/static/about/logo.png | 3 - src/static/android-chrome-192x192.png | 3 - src/static/android-chrome-512x512.png | 3 - src/static/apple-touch-icon.png | 3 - src/static/favicon-16x16.png | 3 - src/static/favicon-32x32.png | 3 - src/static/favicon.ico | 3 - src/static/music/allanger-Anymore.jpg | 3 - src/static/music/allanger-Await.jpg | 3 - src/static/music/allanger-Desensitized.png | 3 - .../music/allanger-Four_Steps_Behind.jpg | 3 - src/static/music/allanger-Let_Me_Kill.png | 3 - src/static/music/allanger-Not_Alone.png | 3 - src/static/music/allanger-Out_of_Law.png | 3 - src/static/music/allanger-Trace.png | 3 - src/static/music/allanger-Under_My_Pillow.png | 3 - src/static/music/allanger-Waster_Time.png | 3 - src/static/music/allanger.png | 3 - .../posts/kid-robotik-im-so-sorry/cover.jpg | 3 - .../posts/some-old-beats-are-out/Cover.png | 3 - .../posts/vst-on-linux-1/camel-crush.png | 3 - src/static/posts/vst-on-linux-1/cover.png | 3 - .../posts/vst-on-linux-1/glitchmachines.png | 3 - .../vst-on-linux-1/glitchmaker-carla.gif | 3 - .../vst-on-linux-1/glitchmakesrs-glitch.gif | 3 - src/static/posts/vst-on-linux-1/ott-xfer.png | 3 - src/static/posts/vst-on-linux-1/snap-heap.png | 3 - .../posts/vst-on-linux-1/tal-chorus.png | 3 - src/static/posts/vst-on-linux-1/valhalla.png | 3 - src/static/posts/vst-on-linux-1/wider.png | 3 - src/static/posts/vst-on-linux-2/cardinal.png | 3 - src/static/posts/vst-on-linux-2/cover.png | 3 - .../posts/vst-on-linux-2/deelay-glitch.gif | 3 - src/static/posts/vst-on-linux-2/deelay.png | 3 - src/static/posts/vst-on-linux-2/fire.png | 3 - src/static/posts/vst-on-linux-2/gatelab.png | 3 - .../vst-on-linux-2/noise-engineering.png | 3 - src/static/posts/vst-on-linux-2/panflow.png | 3 - .../posts/vst-on-linux-2/paulxstretch.png | 3 - .../posts/vst-on-linux-2/runia-plugin.png | 3 - .../posts/vst-on-linux-2/sirt-plugin.png | 3 - src/static/posts/vst-on-linux-2/surge.png | 3 - .../posts/vst-on-linux-2/virt-vereor.png | 3 - src/static/posts/vst-on-linux-3/cover.png | 3 - .../vst-on-linux-3/eventide-pendulate.mp4 | 3 - .../posts/vst-on-linux-3/labs-example.mp4 | 3 - .../vst-on-linux-3/mdrummer-example-lfo.mp4 | 3 - .../posts/vst-on-linux-3/mdrummer-example.mp4 | 3 - .../vst-on-linux-3/mdrummer-lfo-carla.png | 3 - src/static/posts/vst-on-linux-3/mdrummer.png | 3 - .../vst-on-linux-3/mguitar-architect.mp4 | 3 - .../posts/vst-on-linux-3/mpower-synth.mp4 | 3 - .../posts/vst-on-linux-3/native-access.png | 3 - src/static/posts/vst-on-linux-3/protoverb.mp4 | 3 - .../posts/vst-on-linux-3/space-piano.mp4 | 3 - .../vst-on-linux-3/spitfire-labs-app.png | 3 - src/static/posts/vst-on-linux-3/tyrell.mp4 | 3 - src/static/posts/vst-on-linux-3/vallhalla.mp4 | 3 - src/static/posts/vst-on-linux-3/vcv-rack.mp4 | 3 - src/static/posts/vst-on-linux-3/vital.mp4 | 3 - .../vst-on-linux-3/vst-on-linix-3-cover.png | 3 - src/themes/papermod | 1 - src/themes/stack | 1 + 143 files changed, 297 insertions(+), 1363 deletions(-) delete mode 100644 chart/templates/namespace.yaml delete mode 100644 src/.hugo_build.lock create mode 100644 src/archetypes/categories.md create mode 100644 src/archetypes/tags.md rename src/{static/main-logo.png => assets/avatar.png} (100%) create mode 100644 src/assets/icons/beats.svg create mode 100644 src/assets/jsconfig.json rename src/{static => assets}/posts/argocd-dynamic-environment-per-branch-part-1/cover.png (100%) rename src/{static => assets}/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png (100%) rename src/{static => assets}/posts/argocd-vs-helmfile/app-of-apps-main.png (100%) rename src/{static => assets}/posts/argocd-vs-helmfile/applicationset-test.png (100%) rename src/{static => assets}/posts/argocd-vs-helmfile/cover-applications.png (100%) rename src/{static => assets}/posts/argocd-vs-helmfile/cover-applicationset.png (100%) rename src/{static => assets}/posts/argocd-vs-helmfile/diff-in-ui.png (100%) rename src/{static => assets}/posts/argocd-vs-helmfile/goldilocks-ui.png (100%) rename src/{static => assets}/posts/argocd-vs-helmfile/update-in-ui.png (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/Kick_v1.mp3 (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/Kick_v2.mkv (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/Kick_v2.mp4 (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/Kick_v3.mkv (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/Kick_v3.mp4 (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/Kick_v4.mkv (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/Kick_v4.mp4 (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/cover.png (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/disable_note_track.png (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/init_vital.png (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/kick_basic_shape.png (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/kick_lfo_1.png (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/kick_lfo_2.png (100%) rename src/{static => assets}/posts/creating-a-sample-pack-kick/unison_phase.png (100%) rename src/{static => assets}/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png (100%) rename src/{static => assets}/posts/dont-use-argocd-for-infrastructure/3-clusters.png (100%) rename src/{static => assets}/posts/dont-use-argocd-for-infrastructure/cover.png (100%) delete mode 100644 src/config.yaml create mode 100644 src/content/_index.md delete mode 100644 src/content/about/_index.md delete mode 100644 src/content/authors/allanger/_index.md delete mode 100644 src/content/beats/_index.md create mode 100644 src/content/categories/Kubernetes/_index.md create mode 100644 src/content/categories/Kubernetes/kubernetes.png create mode 100644 src/content/page/about/index.md create mode 100644 src/content/page/archives/index.md create mode 100644 src/content/page/links/drone.png create mode 100644 src/content/page/links/gitea.png create mode 100644 src/content/page/links/index.md create mode 100644 src/content/page/links/ts-logo-128.jpg create mode 100644 src/content/page/search/index.md rename src/content/{posts/argocd-dynamic-environment-per-branch-part-1/index.md => post/allanger/argocd-dynamic-environment-per-branch-part-1.md} (98%) rename src/content/{posts/argocd-vs-helmfile-application/index.md => post/allanger/argocd-vs-helmfile-application.md} (98%) rename src/content/{posts/argocd-vs-helmfile-applicationset/index.md => post/allanger/argocd-vs-helmfile-applicationset.md} (97%) rename src/content/{posts/argocd-vs-helmfile-helmfile/index.md => post/allanger/argocd-vs-helmfile-helmfile.md} (99%) create mode 100644 src/content/post/allanger/do-we-need-continuous-reconciliation.md rename src/content/{posts/dont-use-argocd-for-infrastructure/index.md => post/allanger/dont-use-argocd-for-infrastructure.md} (98%) delete mode 100644 src/content/posts/.spelling delete mode 100644 src/content/posts/_index.md delete mode 100644 src/content/posts/creating-a-sample-pack-kick.md delete mode 100644 src/content/posts/kid-robotik-im-so-sorry.md delete mode 100644 src/content/posts/some-old-beats-are-out.md delete mode 100644 src/content/posts/vst-on-linux-1/index.md delete mode 100644 src/content/posts/vst-on-linux-2/index.md delete mode 100644 src/content/posts/vst-on-linux-3/index.md delete mode 100644 src/content/search.md create mode 100644 src/hugo.yaml delete mode 100644 src/layouts/_default/_markup/render-link.html delete mode 100644 src/static/about/logo.png delete mode 100644 src/static/android-chrome-192x192.png delete mode 100644 src/static/android-chrome-512x512.png delete mode 100644 src/static/apple-touch-icon.png delete mode 100644 src/static/favicon-16x16.png delete mode 100644 src/static/favicon-32x32.png delete mode 100644 src/static/favicon.ico delete mode 100644 src/static/music/allanger-Anymore.jpg delete mode 100644 src/static/music/allanger-Await.jpg delete mode 100755 src/static/music/allanger-Desensitized.png delete mode 100644 src/static/music/allanger-Four_Steps_Behind.jpg delete mode 100644 src/static/music/allanger-Let_Me_Kill.png delete mode 100644 src/static/music/allanger-Not_Alone.png delete mode 100644 src/static/music/allanger-Out_of_Law.png delete mode 100644 src/static/music/allanger-Trace.png delete mode 100644 src/static/music/allanger-Under_My_Pillow.png delete mode 100644 src/static/music/allanger-Waster_Time.png delete mode 100644 src/static/music/allanger.png delete mode 100644 src/static/posts/kid-robotik-im-so-sorry/cover.jpg delete mode 100644 src/static/posts/some-old-beats-are-out/Cover.png delete mode 100644 src/static/posts/vst-on-linux-1/camel-crush.png delete mode 100644 src/static/posts/vst-on-linux-1/cover.png delete mode 100644 src/static/posts/vst-on-linux-1/glitchmachines.png delete mode 100644 src/static/posts/vst-on-linux-1/glitchmaker-carla.gif delete mode 100644 src/static/posts/vst-on-linux-1/glitchmakesrs-glitch.gif delete mode 100644 src/static/posts/vst-on-linux-1/ott-xfer.png delete mode 100644 src/static/posts/vst-on-linux-1/snap-heap.png delete mode 100644 src/static/posts/vst-on-linux-1/tal-chorus.png delete mode 100644 src/static/posts/vst-on-linux-1/valhalla.png delete mode 100644 src/static/posts/vst-on-linux-1/wider.png delete mode 100644 src/static/posts/vst-on-linux-2/cardinal.png delete mode 100644 src/static/posts/vst-on-linux-2/cover.png delete mode 100644 src/static/posts/vst-on-linux-2/deelay-glitch.gif delete mode 100644 src/static/posts/vst-on-linux-2/deelay.png delete mode 100644 src/static/posts/vst-on-linux-2/fire.png delete mode 100644 src/static/posts/vst-on-linux-2/gatelab.png delete mode 100644 src/static/posts/vst-on-linux-2/noise-engineering.png delete mode 100644 src/static/posts/vst-on-linux-2/panflow.png delete mode 100644 src/static/posts/vst-on-linux-2/paulxstretch.png delete mode 100644 src/static/posts/vst-on-linux-2/runia-plugin.png delete mode 100644 src/static/posts/vst-on-linux-2/sirt-plugin.png delete mode 100644 src/static/posts/vst-on-linux-2/surge.png delete mode 100644 src/static/posts/vst-on-linux-2/virt-vereor.png delete mode 100644 src/static/posts/vst-on-linux-3/cover.png delete mode 100644 src/static/posts/vst-on-linux-3/eventide-pendulate.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/labs-example.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/mdrummer-example-lfo.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/mdrummer-example.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/mdrummer-lfo-carla.png delete mode 100644 src/static/posts/vst-on-linux-3/mdrummer.png delete mode 100644 src/static/posts/vst-on-linux-3/mguitar-architect.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/mpower-synth.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/native-access.png delete mode 100644 src/static/posts/vst-on-linux-3/protoverb.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/space-piano.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/spitfire-labs-app.png delete mode 100644 src/static/posts/vst-on-linux-3/tyrell.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/vallhalla.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/vcv-rack.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/vital.mp4 delete mode 100644 src/static/posts/vst-on-linux-3/vst-on-linix-3-cover.png delete mode 160000 src/themes/papermod create mode 160000 src/themes/stack diff --git a/.drone.yml b/.drone.yml index 19e9f23..237c634 100644 --- a/.drone.yml +++ b/.drone.yml @@ -34,7 +34,7 @@ steps: - name: clone image: alpine/git environment: - GIT_LFS_SKIP_SMUDGE: 1 + GIT_LFS_SKIP_SMUDGE: 0 commands: - git clone $DRONE_REMOTE_URL . - git checkout $DRONE_BRANCH @@ -55,6 +55,7 @@ steps: GITEA_TOKEN: from_secret: GITEA_TOKEN commands: + - rm -rf $DRONE_WORKSPACE/src/assets/ - ./scripts/build-container.pl - name: Sync pictures from lfs to Minio image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 diff --git a/.gitattributes b/.gitattributes index c2b8e77..41cb5bc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,6 @@ src/static/** filter=lfs diff=lfs merge=lfs -text src/static/**/* filter=lfs diff=lfs merge=lfs -text +src/assets/**/* filter=lfs diff=lfs merge=lfs -text +src/assets/** filter=lfs diff=lfs merge=lfs -text +src-bak/static/** filter=lfs diff=lfs merge=lfs -text +src-bak/static/**/* filter=lfs diff=lfs merge=lfs -text diff --git a/.gitmodules b/.gitmodules index 8e4b3e7..6c34b41 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,5 +1,3 @@ -[submodule "src/themes/papermod"] - path = src/themes/papermod - url = https://github.com/adityatelange/hugo-PaperMod.git - branch = master - +[submodule "src/themes/stack"] + path = src/themes/stack + url = https://github.com/CaiJimmy/hugo-theme-stack.git diff --git a/.spelling b/.spelling index f08a391..6cb1d43 100644 --- a/.spelling +++ b/.spelling @@ -144,6 +144,7 @@ mdma nah clubby MGK +params - src/themes/papermod/README.md PaperMod hugo-paper @@ -156,3 +157,5 @@ webpack nodejs Pagespeed Highlight.js +2023-02-25T14 +argocd-dynamic-environment-per-branch-part-1 diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 4ce8eb3..7ee79a2 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -2,11 +2,10 @@ apiVersion: v2 name: badhouseplants-net description: A Helm chart for Kubernetes type: application -version: 0.7.1 +version: 0.8.5 appVersion: "4.20.0" dependencies: - name: remark42 version: 0.5.5 repository: https://groundhog2k.github.io/helm-charts/ condition: remark42.enabled - diff --git a/chart/templates/deployment.yaml b/chart/templates/deployment.yaml index cdafb77..1a0aacc 100644 --- a/chart/templates/deployment.yaml +++ b/chart/templates/deployment.yaml @@ -41,7 +41,7 @@ spec: mountPath: "/tmp" readOnly: true - name: {{ .Values.volumes.rclone.name }} - mountPath: /static + mountPath: /assets readOnly: false resources: {{- toYaml .Values.rclone.container.resources | nindent 12 }} @@ -59,8 +59,8 @@ spec: {{- end }} volumeMounts: - name: {{ .Values.volumes.rclone.name }} - mountPath: /src/static - readOnly: true + mountPath: /src/assets + readOnly: false - name: {{ .Values.volumes.public.name }} mountPath: /src/public readOnly: false @@ -88,7 +88,7 @@ spec: volumes: - name: rclone-config secret: - secretName: rclone-config + secretName: rclone-config-{{ .Release.Name }} - name: {{ .Values.volumes.rclone.name }} emptyDir: sizeLimit: {{ .Values.volumes.rclone.sizeLimit }} @@ -97,5 +97,5 @@ spec: sizeLimit: {{ .Values.volumes.public.sizeLimit }} - name: nginx-config configMap: - name: nginx-config + name: nginx-config-{{ .Release.Name }} diff --git a/chart/templates/namespace.yaml b/chart/templates/namespace.yaml deleted file mode 100644 index a16fa00..0000000 --- a/chart/templates/namespace.yaml +++ /dev/null @@ -1,16 +0,0 @@ -{{- if .Values.istio.enabled -}} -apiVersion: v1 -kind: Namespace -metadata: - name: {{ .Values.namespace.name }} - labels: - {{- include "badhouseplants-net.labels" . | nindent 4 }} - {{- range $key, $value := .Values.namespace.labels}} - {{ $key }}: {{ $value }} - {{- end }} - {{- with .Values.namespace.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} - -{{- end }} \ No newline at end of file diff --git a/chart/templates/nginx-config-cm.yaml b/chart/templates/nginx-config-cm.yaml index e8e1d38..bcaab33 100644 --- a/chart/templates/nginx-config-cm.yaml +++ b/chart/templates/nginx-config-cm.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: nginx-config + name: nginx-config-{{ .Release.Name }} labels: {{- include "badhouseplants-net.labels" . | nindent 4 }} data: diff --git a/chart/templates/rclone-config-sec.yaml b/chart/templates/rclone-config-sec.yaml index 8e20719..bd529a7 100644 --- a/chart/templates/rclone-config-sec.yaml +++ b/chart/templates/rclone-config-sec.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Secret metadata: - name: rclone-config + name: rclone-config-{{ .Release.Name }} labels: {{- include "badhouseplants-net.labels" . | nindent 4 }} type: generic diff --git a/chart/values.yaml b/chart/values.yaml index 354c240..3671d73 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -1,12 +1,5 @@ replicaCount: 1 -namespace: - annotations: {} - labels: - istio-injection: enabled - enabled: true - name: badhouseplants-main - nginx: container: name: nginx @@ -17,7 +10,7 @@ nginx: tag: latest rclone: - command: "rclone copy -P badhouseplants-public:/badhouseplants-net-main /static" + command: "rclone copy -P badhouseplants-public:/badhouseplants-net-main /assets" container: name: rclone resources: {} @@ -37,7 +30,7 @@ hugo: container: name: badhouseplants-net resources: {} - image: + image: repository: git.badhouseplants.net/badhouseplants/badhouseplants-net pullPolicy: Always tag: latest @@ -56,17 +49,17 @@ istio: volumes: # ---------------------------------------------- - # -- An emptydir volume where hugo should + # -- An emptydir volume where hugo should # -- put the static content # ---------------------------------------------- public: name: public-content - sizeLimit: 1Gi + sizeLimit: 1Gi # ---------------------------------------------- - # -- An emptydir volume where rclone should + # -- An emptydir volume where rclone should # -- download pictures # ---------------------------------------------- - rclone: + rclone: name: s3-data sizeLimit: 1Gi diff --git a/kube/application.yaml b/kube/application.yaml index bb48690..6441ed5 100644 --- a/kube/application.yaml +++ b/kube/application.yaml @@ -9,7 +9,7 @@ metadata: namespace: argo-system spec: destination: - namespace: badhouseplants-$ARGO_APP_BRANCH + namespace: badhouseplants-$ARGO_APP_NAMESPACE server: https://kubernetes.default.svc project: badhouseplants source: diff --git a/kube/values-main.yaml b/kube/values-main.yaml index 286feee..7555fdb 100644 --- a/kube/values-main.yaml +++ b/kube/values-main.yaml @@ -14,7 +14,7 @@ values: | settings: secret: $ARGO_REMARK_SECRET admin: - sharedEmail: allanger@zohomail.com + sharedEmail: allanger@badhouseplants.net oauth: github: enabled: true diff --git a/kube/values-preview.yaml b/kube/values-preview.yaml index bbce5b9..c4a721d 100644 --- a/kube/values-preview.yaml +++ b/kube/values-preview.yaml @@ -1,9 +1,5 @@ --- values: | - namespace: - name: badhouseplants-$ARGO_APP_BRANCH - labels: - istio-injection: disabled istio: hosts: - $ARGO_APP_HOSTNAME @@ -18,7 +14,7 @@ values: | buildDrafts: true env: HUGO_PARAMS_GITBRANCH: $ARGO_APP_BRANCH - HUGO_PARAMS_REMARK42URL: https://remark42-$ARGO_APP_HOSTNAME + HUGO_PARAMS_COMMENTS_REMARK42_HOST: https://remark42-$ARGO_APP_HOSTNAME HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG remark42: istio: @@ -30,4 +26,4 @@ values: | anonymous: true secretKey: $ARGO_REMARK_SECRET rclone: - command: 'rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static' + command: 'rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /assets' diff --git a/scripts/deploy-app.pl b/scripts/deploy-app.pl index b99b458..4a6602b 100755 --- a/scripts/deploy-app.pl +++ b/scripts/deploy-app.pl @@ -17,6 +17,11 @@ chomp($remark_secret); $ENV{'ARGO_APP_CHART_VERSION'} = $chart_version; $ENV{'ARGO_APP_BRANCH'} = $git_branch; +if ($git_branch eq $main_branch) { + $ENV{'ARGO_APP_NAMESPACE'} = $git_branch; +} else { + $ENV{'ARGO_APP_NAMESPACE'} = "preview" +} $ENV{'ARGO_APP_HOSTNAME'} = "$git_branch-dev.badhouseplants.net"; $ENV{'ARGO_APP_IMAGE_TAG'} = $git_commit_sha; $ENV{'ARGO_REMARK_SECRET'} = $remark_secret; diff --git a/scripts/upload-media.pl b/scripts/upload-media.pl index 13eb20d..71ae760 100755 --- a/scripts/upload-media.pl +++ b/scripts/upload-media.pl @@ -19,7 +19,7 @@ print `git -C /tmp/$git_commit_sha lfs pull` or die; print "Creating a new hashed dir in the common bucket\n"; -print `rclone copy /tmp/$git_commit_sha/src/static "$common_bucket/$git_commit_sha"` or die; +print `rclone copy /tmp/$git_commit_sha/src/assets "$common_bucket/$git_commit_sha"` or die; if ($git_branch eq $main_branch) { print "Syncing to the production bucket\n"; diff --git a/src/.hugo_build.lock b/src/.hugo_build.lock deleted file mode 100644 index e69de29..0000000 diff --git a/src/archetypes/categories.md b/src/archetypes/categories.md new file mode 100644 index 0000000..bde898d --- /dev/null +++ b/src/archetypes/categories.md @@ -0,0 +1,7 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +image: +style: + background: "#2a9d8f" + color: "#fff" +--- diff --git a/src/archetypes/default.md b/src/archetypes/default.md index d669718..0556d3a 100644 --- a/src/archetypes/default.md +++ b/src/archetypes/default.md @@ -1,12 +1,11 @@ --- title: "{{ replace .Name "-" " " | title }}" +description: date: {{ .Date }} +image: +math: +license: +hidden: false +comments: true draft: true -ShowToc: true -cover: - image: "cover.png" - caption: "{{ replace .Name "-" " " | title }}" - relative: false - responsiveImages: false ---- - +--- \ No newline at end of file diff --git a/src/archetypes/tags.md b/src/archetypes/tags.md new file mode 100644 index 0000000..bc2eb0c --- /dev/null +++ b/src/archetypes/tags.md @@ -0,0 +1,5 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +description: +image: +--- diff --git a/src/static/main-logo.png b/src/assets/avatar.png similarity index 100% rename from src/static/main-logo.png rename to src/assets/avatar.png diff --git a/src/assets/icons/beats.svg b/src/assets/icons/beats.svg new file mode 100644 index 0000000..d725db2 --- /dev/null +++ b/src/assets/icons/beats.svg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11f41a9605317d89fb8ffc5f6e29a1b7db29e954a9d12ce98280c6d561548a75 +size 1253 diff --git a/src/assets/jsconfig.json b/src/assets/jsconfig.json new file mode 100644 index 0000000..fc0f90a --- /dev/null +++ b/src/assets/jsconfig.json @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e16de0174ab4983fd8a83f2174362003b1f65973247eea4ff4d67143b8d8639c +size 109 diff --git a/src/static/posts/argocd-dynamic-environment-per-branch-part-1/cover.png b/src/assets/posts/argocd-dynamic-environment-per-branch-part-1/cover.png similarity index 100% rename from src/static/posts/argocd-dynamic-environment-per-branch-part-1/cover.png rename to src/assets/posts/argocd-dynamic-environment-per-branch-part-1/cover.png diff --git a/src/static/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png b/src/assets/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png similarity index 100% rename from src/static/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png rename to src/assets/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png diff --git a/src/static/posts/argocd-vs-helmfile/app-of-apps-main.png b/src/assets/posts/argocd-vs-helmfile/app-of-apps-main.png similarity index 100% rename from src/static/posts/argocd-vs-helmfile/app-of-apps-main.png rename to src/assets/posts/argocd-vs-helmfile/app-of-apps-main.png diff --git a/src/static/posts/argocd-vs-helmfile/applicationset-test.png b/src/assets/posts/argocd-vs-helmfile/applicationset-test.png similarity index 100% rename from src/static/posts/argocd-vs-helmfile/applicationset-test.png rename to src/assets/posts/argocd-vs-helmfile/applicationset-test.png diff --git a/src/static/posts/argocd-vs-helmfile/cover-applications.png b/src/assets/posts/argocd-vs-helmfile/cover-applications.png similarity index 100% rename from src/static/posts/argocd-vs-helmfile/cover-applications.png rename to src/assets/posts/argocd-vs-helmfile/cover-applications.png diff --git a/src/static/posts/argocd-vs-helmfile/cover-applicationset.png b/src/assets/posts/argocd-vs-helmfile/cover-applicationset.png similarity index 100% rename from src/static/posts/argocd-vs-helmfile/cover-applicationset.png rename to src/assets/posts/argocd-vs-helmfile/cover-applicationset.png diff --git a/src/static/posts/argocd-vs-helmfile/diff-in-ui.png b/src/assets/posts/argocd-vs-helmfile/diff-in-ui.png similarity index 100% rename from src/static/posts/argocd-vs-helmfile/diff-in-ui.png rename to src/assets/posts/argocd-vs-helmfile/diff-in-ui.png diff --git a/src/static/posts/argocd-vs-helmfile/goldilocks-ui.png b/src/assets/posts/argocd-vs-helmfile/goldilocks-ui.png similarity index 100% rename from src/static/posts/argocd-vs-helmfile/goldilocks-ui.png rename to src/assets/posts/argocd-vs-helmfile/goldilocks-ui.png diff --git a/src/static/posts/argocd-vs-helmfile/update-in-ui.png b/src/assets/posts/argocd-vs-helmfile/update-in-ui.png similarity index 100% rename from src/static/posts/argocd-vs-helmfile/update-in-ui.png rename to src/assets/posts/argocd-vs-helmfile/update-in-ui.png diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 b/src/assets/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 rename to src/assets/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v1.mp3 b/src/assets/posts/creating-a-sample-pack-kick/Kick_v1.mp3 similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/Kick_v1.mp3 rename to src/assets/posts/creating-a-sample-pack-kick/Kick_v1.mp3 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mkv b/src/assets/posts/creating-a-sample-pack-kick/Kick_v2.mkv similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/Kick_v2.mkv rename to src/assets/posts/creating-a-sample-pack-kick/Kick_v2.mkv diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mp4 b/src/assets/posts/creating-a-sample-pack-kick/Kick_v2.mp4 similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/Kick_v2.mp4 rename to src/assets/posts/creating-a-sample-pack-kick/Kick_v2.mp4 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mkv b/src/assets/posts/creating-a-sample-pack-kick/Kick_v3.mkv similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/Kick_v3.mkv rename to src/assets/posts/creating-a-sample-pack-kick/Kick_v3.mkv diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mp4 b/src/assets/posts/creating-a-sample-pack-kick/Kick_v3.mp4 similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/Kick_v3.mp4 rename to src/assets/posts/creating-a-sample-pack-kick/Kick_v3.mp4 diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mkv b/src/assets/posts/creating-a-sample-pack-kick/Kick_v4.mkv similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/Kick_v4.mkv rename to src/assets/posts/creating-a-sample-pack-kick/Kick_v4.mkv diff --git a/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mp4 b/src/assets/posts/creating-a-sample-pack-kick/Kick_v4.mp4 similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/Kick_v4.mp4 rename to src/assets/posts/creating-a-sample-pack-kick/Kick_v4.mp4 diff --git a/src/static/posts/creating-a-sample-pack-kick/cover.png b/src/assets/posts/creating-a-sample-pack-kick/cover.png similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/cover.png rename to src/assets/posts/creating-a-sample-pack-kick/cover.png diff --git a/src/static/posts/creating-a-sample-pack-kick/disable_note_track.png b/src/assets/posts/creating-a-sample-pack-kick/disable_note_track.png similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/disable_note_track.png rename to src/assets/posts/creating-a-sample-pack-kick/disable_note_track.png diff --git a/src/static/posts/creating-a-sample-pack-kick/init_vital.png b/src/assets/posts/creating-a-sample-pack-kick/init_vital.png similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/init_vital.png rename to src/assets/posts/creating-a-sample-pack-kick/init_vital.png diff --git a/src/static/posts/creating-a-sample-pack-kick/kick_basic_shape.png b/src/assets/posts/creating-a-sample-pack-kick/kick_basic_shape.png similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/kick_basic_shape.png rename to src/assets/posts/creating-a-sample-pack-kick/kick_basic_shape.png diff --git a/src/static/posts/creating-a-sample-pack-kick/kick_lfo_1.png b/src/assets/posts/creating-a-sample-pack-kick/kick_lfo_1.png similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/kick_lfo_1.png rename to src/assets/posts/creating-a-sample-pack-kick/kick_lfo_1.png diff --git a/src/static/posts/creating-a-sample-pack-kick/kick_lfo_2.png b/src/assets/posts/creating-a-sample-pack-kick/kick_lfo_2.png similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/kick_lfo_2.png rename to src/assets/posts/creating-a-sample-pack-kick/kick_lfo_2.png diff --git a/src/static/posts/creating-a-sample-pack-kick/unison_phase.png b/src/assets/posts/creating-a-sample-pack-kick/unison_phase.png similarity index 100% rename from src/static/posts/creating-a-sample-pack-kick/unison_phase.png rename to src/assets/posts/creating-a-sample-pack-kick/unison_phase.png diff --git a/src/static/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png b/src/assets/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png similarity index 100% rename from src/static/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png rename to src/assets/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png diff --git a/src/static/posts/dont-use-argocd-for-infrastructure/3-clusters.png b/src/assets/posts/dont-use-argocd-for-infrastructure/3-clusters.png similarity index 100% rename from src/static/posts/dont-use-argocd-for-infrastructure/3-clusters.png rename to src/assets/posts/dont-use-argocd-for-infrastructure/3-clusters.png diff --git a/src/static/posts/dont-use-argocd-for-infrastructure/cover.png b/src/assets/posts/dont-use-argocd-for-infrastructure/cover.png similarity index 100% rename from src/static/posts/dont-use-argocd-for-infrastructure/cover.png rename to src/assets/posts/dont-use-argocd-for-infrastructure/cover.png diff --git a/src/config.yaml b/src/config.yaml deleted file mode 100644 index 657a761..0000000 --- a/src/config.yaml +++ /dev/null @@ -1,68 +0,0 @@ ---- -languageCode: 'en-us' -title: 'Bad Houseplants' -theme: 'papermod' -menu: - main: - - name: Posts - url: /posts - weight: 10 - - name: Music - url: /music - weight: 11 - - name: Beats - url: /beats - weight: 12 - - name: About - url: /about - weight: 13 - - name: Search - url: /search - weight: 14 -taxonomies: - tag: tags -params: - GitBranch: main - GitCommit: unknown - Remark42ID: remark - Remark42URL: https://remark42.badhouseplants.net - ShowBreadCrumbs: true - ShowReadingTime: true - ShowPostNavLinks: true - ShowCodeCopyButtons: true - comments: true - profileMode: - enabled: true - title: "Bad Houseplants" - subtitle: ... by allanger. - imageUrl: "main-logo.png" - imageWidth: 150 - imageHeight: 150 - buttons: - - name: My Music - url: "https://funkwhale.badhouseplants.net/library/artists" - - name: Support - url: "https://liberapay.com/allanger/donate" - - name: Source - url: "https://git.badhouseplants.net/badhouseplants/badhouseplants-net" - socialIcons: - - name: "mastodon" - url: "https://mastodon.social/@allanger" - - name: github - url: 'https://github.com/allanger' - - name: email - url: 'mailto:allanger@zohomail.com' - ShowShareButtons: true - ShareButtons: ["telegram", "twitter", "reddit", "linkedin"] - env: production - title: Bad Houseplants - description: "...by allanger" - keywords: [Blog, Portfolio] - author: allanger - DateFormat: "January 2, 2006" - defaultTheme: auto -outputs: - home: - - HTML - - RSS - - JSON diff --git a/src/content/_index.md b/src/content/_index.md new file mode 100644 index 0000000..530dfe8 --- /dev/null +++ b/src/content/_index.md @@ -0,0 +1,8 @@ +--- +menu: + main: + name: Home + weight: -100 + params: + icon: home +--- \ No newline at end of file diff --git a/src/content/about/_index.md b/src/content/about/_index.md deleted file mode 100644 index 62e9b11..0000000 --- a/src/content/about/_index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: About -date: 2023-01-24T09:26:52+01:00 -draft: false ---- - -Oi! -I'm allanger and currently I'm working as full time SRE, but recently I've found out that I'd like to spend more time doing things related to music and sound. So I'm currently looking for project to add to my portfolio. So if you want somebody do a decent (I hope) mix for you without asking for any money, just let shoot me a message. - -I'm not a pro mixing engineer of course, but it's what I'm aiming for. - -Also, I'm a beatmaker, you can find my bets on this site, just go to the [Beats section]({{< ref "beats" >}}). I'm not leasing them, I want one beat to be used one time by one artist. And again, I'm not a well-known beatmaker, so you can just let me know if you like anything, and we'll figure it out. - ---- -### Information about the build -Built from the commit [{{< param GitCommit >}}](https://git.badhouseplants.net/badhouseplants/badhouseplants-net/commit/{{< param GitCommit >}}) -[![Build Status](https://drone.badhouseplants.net/api/badges/badhouseplants/badhouseplants-net/status.svg?ref=refs/heads/{{< param GitBranch >}})](https://drone.badhouseplants.net/badhouseplants/badhouseplants-net) diff --git a/src/content/authors/allanger/_index.md b/src/content/authors/allanger/_index.md deleted file mode 100644 index e47e06a..0000000 --- a/src/content/authors/allanger/_index.md +++ /dev/null @@ -1,37 +0,0 @@ -> If you're hiring, you can [download my CV here](https://s3.badhouseplants.net/public-download/n.rodionov.pdf) - -
  • download my CV here - - -I'm a musician and a geek, who works full time as a DevOps engineer, whatever it means. Thanks to my job, I know how to run self-hosted services pretty well, and that's helping me achieve my goal of bringing the indie culture everywhere I can. I'm trying to separate myself from global companies as a user as much as it's possible in my daily life. - -Also, I'm a Linux lover, what doesn't really correlate with my will to make music. I hope that one day we will see that developers will see that Linux is a real OS that can be used as a daily driver. And building software for Linux is important just like building for MacOS and Windows. I hope that we will be able to use not only open source solutions working on Linux, but also closed-source proprietary ones. - -### Music, Beats and Arrangements - -## Music - -> I always thought I was a musician -[Check out what I've got](https://funkwhale.badhouseplants.net) - -You can find everything I consider ready enough to be shown on my [FunkWhale](https://funkwhale.badhouseplants.net/library) instance. Also, my music can be found on many streaming services, and yes, I know that it's not a very independent way of doing things, but it's one of many exceptions 🙃. - -All of my beats are waiting for somebody to do something with them. I'm giving them all for donation, so if you happen to like any, just shoot me a message. I can re-arrange and remix them as much as possible. I can mix your tracks, and I really will to do that, it doesn't matter what kind of music it is, I'm ready to work with everything, if I like it *(at least a little bit)*. - -## IT - -> I'm a DevOps after all -[Visit my gitea](https://git.badhouseplants.net) -For I'm a DevOps I'm working a lot with Kubernetes, Containers, Linux, etc. And that's the root of my intention to move to Linux completely. - -I hope I will do my contribution to the world of Linux music production too. I'm hosting my own Gitea instance. There you will be able to find all my code (or almost all of my code). - -If you made it to here, you might think that it's the point of all of this existing. Self-hosted blog, a music streaming service, and git. **This guy is just a fucking geek! ** - -And yes, you're partially right. The main reason it exists is that I'm trying to follow and promote `indie/punk` culture, that is not only applies to arts. And that's going to be covered in my posts, I hope. - ---- - -### If you're still here, - -I'm looking for people with the same mindset as me, to make music or to code together, or anything. So I would be happy to get connections on [Mastodon](https://mastodon.social/@allanger) diff --git a/src/content/beats/_index.md b/src/content/beats/_index.md deleted file mode 100644 index a217fca..0000000 --- a/src/content/beats/_index.md +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: Beats -date: 2023-01-24T09:26:52+01:00 -draft: false - ---- ---- -### That's Rich -#### by allanger - -[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/36) - -> I'm poor though, huh - -Mainstream beats for dope rap about your luxury lifestyle, mate - -{{< rawhtml >}} - -{{< /rawhtml >}} - ---- - -### Why So Serious? -#### by allanger - -[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/38) - -> Don't be so suicidal, brah - -Depressive and horror beats to show them all what's real suffering out there - -{{< rawhtml >}} - -{{< /rawhtml >}} - ---- - -### Coke Queue -#### by allanger - -[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/39) - -> Aw, shite, I've meant line - -Need a track that will be screaming out of your lowrider? Check it out then - -{{< rawhtml >}} - -{{< /rawhtml >}} - ---- - -### Meta Irony's Bastard -#### by allanger - -[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/40) - -> Or just an unwanted child - -Your track is supposed to make no freaking sense? Pick it up - -{{< rawhtml >}} - -{{< /rawhtml >}} - ---- - -### MDMA -#### by allanger - -[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/35) - -> Nah, I'm not using - -An album for four-on-the-floor or just clubby kinds of beats. If you want your track to be fitting in Berlin, this one is your choice. - -{{< rawhtml >}} - -{{< /rawhtml >}} - ---- - -### Punk's Not Dead -#### by allanger - -[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/34) - -> Unless it's MGK - -Here I'll be uploading alternative beats that might not work for any track, but rather for something special. - -{{< rawhtml >}} - -{{< /rawhtml >}} - ---- - -### Boys Don't Cry -#### by allanger - -[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/37) - -> ... do they? - -Looking for something sad and not really of a hip-hop kind? This is the place - -{{< rawhtml >}} - -{{< /rawhtml >}} - ---- -### Trash Can -#### by allanger - -[Listen on Funkwhale](https://funkwhale.badhouseplants.net/library/albums/33) - ->It doesn't mean that beats are shitty, it just me not liking them too much - -To this album, I will upload beats that I don't like, they all can be yours without any efforts of yours. - -{{< rawhtml >}} - -{{< /rawhtml >}} - diff --git a/src/content/categories/Kubernetes/_index.md b/src/content/categories/Kubernetes/_index.md new file mode 100644 index 0000000..8ea9993 --- /dev/null +++ b/src/content/categories/Kubernetes/_index.md @@ -0,0 +1,9 @@ +--- +title: "Kubernetes" +description: "Content related to Kubernetes" +slug: "k8s" +image: "kubernetes.png" +style: + background: "#2a9d8f" + color: "#fff" +--- diff --git a/src/content/categories/Kubernetes/kubernetes.png b/src/content/categories/Kubernetes/kubernetes.png new file mode 100644 index 0000000000000000000000000000000000000000..6b769519989f6f04f981566e27e872156af35e44 GIT binary patch literal 166592 zcmd>mhhNjz_xA@;(W=mDRgl$IKoNl`vX?DY3_}VC$Pl7TnabWot@5n`marlqs0>96 zC=iexO9j~*WTPzE%djEOxpC9qfAF-gmX~;Q@408b&$#*PkJG9LRp*gS0o_>0XK)K!1S80g=7g%87EC5Hd~*E62&W2-*oZnyK3J^@AZ zJkFL{hOTohx`)cQvz@rAdNNh7F8a94K|cjI z(Q`)a))di-?&Xwo9JP*ZSrG#FE>J!HtP=S1Pu<_xC0u%XhB!tav$4xoy@|WiI-1v> zT9{^9SQW!HvAn$OH?u4VwEh3{&#uH%=&}l71}1C01@-!Ux#p7U+>+{Hd07JL#**sl z71MZGA-v9LXL!|eJ;Ov!XXI`CQoxy+v$nE-TbSYf9tg3im&fUkbf4U(m1TRwHo?)U zdFgoT3tkR~qJbycbQTb-^@aE7ki^Lh{#cWf`KFzR=~*X*A2vk~3Ca${uZ<=OFWf#8 zrVwr+BdJ2w&X%+->N-R(s^es1ns zm|f=R6H;u)W7%{8Yr#7bE{uQaKEk;Y)M@Ezqltp~(y+-{U097tMAf6St9}yqo4uwO zoK{-w*i`UXXh_iTNM+der2ZO`v$Y6?(bJ+?IZ4;ufIbn({Dg*i@zJyL^JATBGpIB3q*WTJv-J?YT~OUe$)k+GrHc+0S~<*))(07R zv)wRwILM1PO)IlsQjO;i*O7AfkaWtmE4jIP6_(Kc#WDFcEp?W=Fh8(XtC~PE{nd(k z7w;&xpH0fXXdtU>0M-$wEt$s9XED(0*VUCDWm5NO;I8E2rV|TWwZcg;`SQlC-PH3h z_dBCa7d~v7;99y{evd1!P2rIggC>jIUlgttQU}8*R-^4c%GnoAAsS`mm_oSp=O>*g zDoQqu=odI4vwgoXeH%rGF%>sz&?$}-hlh))KQbDro3rEpu(dl!QV-)v*rIwrBE0xf z(ssu#*BNOhu_fkAVgnydHoO_iE*&veFXs-cGWhdylbW+nLe|>Ugr>-vDf9Sa%;TpH zeCLHTrzR4IxMBNjuKeaoGIHx0(qi8M^Kq2-6kert_of$3E7ALKN@_E!i6%KVlP_-f zOb_dF90VsxJ0{l%KaR(6KMC&cDj7OJ?@Af4|CMl|ssDbHy-m&N^EY<m@;elrZ_7bz2o+k7cfwDc zUXAB$$S!&L7`rfML!GFD8yZiFl#f&N`~2oRU1toCT@oID5Y%u@f&H?uWtN+lu$L~$ z>n82JUYNZ4h);Is)0KcnNS!StkXIr!6u5THMeqg>E;TuyC!Ib)7<^QIH>p2bG$ztd zSXl1|SR-_eX>q$Is;C_`_OAV+DFY7#cyH2z+?_<}37>5a`ArQ0rZx*{^t8X3wM|IV zaxRiMSS2-(k54=2yHXxsVE!~{7@huStdbx)zJRii(_8Q2K%uZ#(mvei>eEE~cN4bV z&aF3gFEj6>@IgP7Hrpk5%ug-i{XA@Cjlb`;9@B7k;gWrN9>sAneAST25OgTk!?YUR~kcPVz0?N8tSfYeWBA5;E3p^a=4@tFr_{U0`!`jEV% zf1#akH?~u1v&~K`oHrM_(GP2TPcb=q>8yTQSMDW8^RXS0^a_E>A6Y^gPN}W_mfECT zFtoILz7pN)4bv(2{{5c9rBvkJx+V}MAgliaA(l#-*-H(7L5VrNmW8xRglCGiO~2LW%|A*tAt&noKzO`5yKufOilnm}2<$Cmn%yZySvPKDAAv1#K1=~s>7;JHVX9}_ z9o4_v7He!`6&y(5Dv!4>vTRdA_psteHzu}OJeBhH;E0cpP7Qm%bwkzn90zh!nq@Pl zYCG4|uN$0J&*9MRS>gUG+Et0U zE7#cjE6YQN)3%w$G`j8oqS>WP)$+#He?XD59Z?8QXBzz7-=;01wu7G5m#St9Zv@=DH8Gvc?v= z58){x^_8~O$4QGfF$GF`lTlA5y>!3>k65(IWRZrs_4`Q~YJ!xwh@c&*N^fItT~mLJ zj&pUSreaPCTIcs+or>QoM^R$rO!fzh#6n)T7>$%t)P2^}H>;~dgdq;UM7mDcH*753 zX{?^6Hj;XG7%SCXJt?|4MM_eP&;MvJ|$(zYk2QXEacw=^L1SMV$)ja9u8-x|MwHx&D|b6-96FIvfM{4$P_BR zx8=BT8<^Rhh61b69kslXXptgQ-!z^{q`iK2Z}j+RFuw4CP~~nG8#^}Lk@zITo}7W? z-94eOlwkXTO`$I7zMl10{1VdBQve0ve;^Jg1|?@H#as1VGj=qZ<3RpRqkdQeXeO3Z zZ3)X;ld@X`nQ;))u%ig%!4?<5I% zB)6pIbU$B7Z-On!JWNyDH8ysO-+S$>`B;O_3>$v%;09b~^GA7B7KMjDhIl~x_Xr|_ z{8QmxWzUmxmAgN9POM69zC}mbdnqKYw%gn8Vg(ZZ8k4J~ZHB8VL)oNMQtV{srsFzA zG5zgFkFKOt=fp}rMmi@G_gnzBxKVdR|E8N5j-3frBmtf-KijQ>@B)t<(=b(@ zeu;xl>J157uw4X!B>($u70Z)=&Xv){r^c8Uk9)yPakAJ=Ow_s~EmD5LG_LCFtUZW4 z`rNItyeAxp>>XxGNa4CfcR}C3H8q3ni6)UvfYuC`O!OczSEY(yOmcuByE;6ksaNzUdR{jGeUK2;mpuPXGGu zYy8E1jSu1FPnQo@a_Zqc6 z-)CVZu}Gd8E4l@f(EkrsA>Ikt4%$w>ztqy%)g0~8a6Kt9l~i!*2h1usT2XTGOoH8e zl^E%`jB@}z3CYYn&MJ02t|1zZ5pkmybMl=;UkdUgF7@iii9@k(iXPI!N{viMJ z<-9njQM8ua7=k$9I-lXz5g8J3^pCJBB%X&`z%A;NI_xTZa=M?6A&nvq*B~j8v)98K zEO0=C+A_~f;B-JtjS)!maO1IFZF9O6Hls5-Gsyz8Ke7<_8vv*&mo%25cP1l0*Tr-q zjiu_X4rXojHfdU-dxeJ2Y{W{n@Dmp!^4`4XRg5pBw=}@7FtU&}7tk>0KG^PHEhRS- z+2pKEVn2Zq-iG%V>8G@ceS)FCAW#{99_VP-{Q_%dw_zF?(f>*I#$TOK0dF?`k&M^4XqrjCF~pAWhlU_hXM$R+(j`XhOSczxVM{dv zwU9L>-$gO**ywV0XVzPJWT3iCv_w8LWV$%@fOYw#nVD|7Mux@@7PJv8tf-Qv(%IT-%l>|J78&0&t*^(0?)VL1|!BB z6d98=Z$}+ap1Z3lF7pToz0~w@JGxRr{Ugz?UcF<^OY8wV@`Me zj1GRpbyx@-?Fv3+PX0dPL2ykeeaX`D)GP4O!qlX-w%GQ_9 zO|>T$iIjhL0wdy&l5~pe><3ooAt>=9oE#T|v}DTVONuWv8s?qx3lu+)keZz7gWORL zp|EDb5QQ%qqv=~=5~Z}md}WjT36;qM0U|)@lsQ^=yv8(tHc`Lqoh8-kr*dC7+Z`nm zUu=$mGL+2MZF`m9uRJS#os?vuNy@zmHv6iDwDh7{`u&QR&SP-NIC|FI?IO35LTdlx#G-aDFj)Nmk@aN` zqTH;?_3LOzyz@keBgsm|Jj=e_w=%;IsG(Ic)ks2Lw2-wVRd+T-K)jU|BkQTTCk>VY z{&q7fUi7++lt_Y}stnX-ezHpma-so9Qa`m#H%v=1@1$~;SD$dlCKil%hY7;0{`c8^ zCPaF)^zQ{UwIIwEwsa>%-;2SlR{>%pGYx|fE#G&OcUvBNRyVmx#5Tj^2dIGRoYXan z7pG3E#yFjw69pa-q612z;8MvCT{gRm^QE$x8R({~Ig`K-1tvxG&qdF4Q=|{)8>4NR zP>c|5DEV~tPaWe?l1X$wCs<8LyMa-#iC-;Uk#YM+xJ@DQi?n0)9>Y^E#^!WNQhzXh z5WEns2+UGA*Qzr4Q+cJG8RWBaGsXSiEt&^EQ&%tN7q|m~oA&Raaz%=cbZk+=P-afI zQ8aM%xN$%LXiB^GH6xwz&uKfk04ok$xL1=#q^4C0avzu3JE;Bwy?%ln!-G|}<;sVrDsq`OdVZV=Dwr;Cw| zd{Lms$xMKwk@TYdU6-P-KV{&YAl>pRIKge}i)FMXgu;j^xNizKutU=NQW@D7={)W) zRIThP^eNwz6zL)8bp>uD@z45XFRToiywHmZs{Gy>hoHjy$wi|0+i0ndh;V?mI#*}j zaK94@p1YV}M5yi)z=QQ9it^qw^Sc$0;FKL*Q9g zvcWK|lzux&`faVA`q?&PCsEX=>9r}o06bN-{}$k2muyDn)%LY2o5roY_K+&$z4nvujDAfSf%zc)ZD(RI{D8eeEeg*BxdSrt+ zJP}%SR$HY-YF0AzLCvk?k$kKu>yavkyZcSfN3%!qh4#c{(6U2IIDt~BULHfLLMLBz zw8O9V4sv_1DG2MK9hrE+DmW^wqbMVx-Xz{gOrs$MatsOe^=Ti?9yw)NkjFY?gOSVs z>p^MT8Ee~Mm#?7BWD$5&DM_z`lHAd=a*hk_s;9kmK)I}b+3U}OkuU4-*k1TJYocE37zLz8rtljZm;yD~TOgG(sh05@ER`{_ zJeEXX)Zq>Q$ZpxwzzW=3r08#ejl;g=h~-O(aZi8<9x9+vV@m1rMDB2ZI@l-8l_}J$ zb?62otUx-~ z<9+DfG-&xLDAK~8=R_{mH+sDHoog{x*9Ez@GqvAg;EB3>!E?Q`G>wmO5o`Z-(UD}g zmp@?Uz$E8kbMRnwQaxt`0bKGj0ghf}N7#~Wk1h*#&tZMpjPN*@yd9&3k9_SyvBuIG z0qLkvR&J>t=k`7T7&tv-$>a^x_w3u#Pgl#63QXXJTb#vn4a(XN~xU$ANz9j|Bz zk|$HwC4NEDNS{ipA72?i5Z-PS)lU*AI|Pcba#nNVuwbiwTa!x+h%$)TB@1b9v-5~+ z8sRK_(z0FPPC6*Zld!=7P1^O5JSPKJ%!^54AVYp}ZNokrBVF zpK7hOQz7*jbP;<0SEQ!~#J?FC4VV(7hUX+jZVPioXY=GP6_QHnx90d(7I@>8=tS6* zhaJ($ZrGFerrXF_PseOLUjQyzv##ktyMO8aKEMdgU!zovOjutvtNj;z9r2;I`Xp^? zq-mxmF%E5y%T*D_$(;<$H+d-qWs>x0~4pY{49?kSIT;eBc(3BLl*X-o5-XWYak| zBPWfK-I9iBz|OisBfO(l!gj}8|28Xdv{pzwM8lETD_ytBMqacwH$j~v5f%Aw=1?gqgAL~js5Un-wMe*UId&U(Prsb9V zMpyu7S@nA;!T(8LK+QaSn3yQU5z%jc&T>MP;n>)40N@W<)?_0aM*jJ8zoXd}2vxYw z^qr>-MwjxXo_PNLJ)p{|-5ih^+kL2$n%Q|7;Qj7^v0;H0PLxH9Prj2K)}Wk&Ah++^ z!VLuReuCO+=2yv{hB9(ojjuk7vS}twK>QC7J3%45KD=e9(cbq`B{Xe+g_AG7*F3!e z(&C);l^dwp+dwAKY+EoH2X$BkXU?*-qLc@H#J4EI{m2r~DK9Y}rN%SWzfccH>;5u{URHeEzr<=<9VJ{Q0r>vO9 zgRe_Bu-{3q2jQKa^^f`2mbs%Qp|DACMu<)$YaO_Ol|C6Qz7Lx1&-qN2>2C+Xf_sKe z7CO}vou6;yaysv6ld~RaFO!?8K?txIdoc>7#Tcq!M?yCM2hn8Y{d(7AZylZVP!pXz z?VR@u5SnQO;Isb8K;eA1=ZqgX&meJRa+fo{h?Cinf~Cs$0kfn~=ADWzzwAK-F!5qY zLuHGDv7COzam~$YOq2>EAm8*FLQtwn`$2A~Auvt?I%P7#QG#xNp~HESMFr_9U)p@k ziXrX1+-%19!|?i+fuw#-{2;m!tzOtHJ&7LrsiWS=3OKO{j|ZP?W18o?= zuDii5M3>;D%&dKCI)K^H4!5rFM}aagizEnBYNbCxP(|>GtJSAAU<4^SrbtJxwhGbD z;q_6uopua$)HS^(Teu^;pgn=(M*bw$Xr-&{NKRe}5>5S}K+<$;!+Pp@jJd$;T+kQRY*WgD`G2HO~h= zYG^&M0jeU_SIubKSBiiDmsq#*ki9u0uOm_h{t>u~obGYbe+p+3*AcP%zeYBfVP)^d z@o)QlxUSrvK`3@#=lihi@A1>lC7*i_Jb>wt$I(#v7TG{7_pz%!pc~z4U-%}s1gxVG zp)Z`@r)1y7jimG|982g#7MJ*?=|C0(<0NM1{HJOIp5P!8eIDcH?{sd=2!O(_&9amD zPVkN+K_c#l-^tZ^n``>nF`*4cOI%knt3!=&Vz$frt`y2wb;IO!q57>`YtZx&C)P

    ^?`u*4r(kt<(HfhXj=Goe zX9LAi)&o$XFvQo3OD#L*TcDQ#I8_C)wbV}Df z^%^+IT@D0sGV6sxr#@6~D&@nxL%>%8-pa6-KN?2|lg05nCfTt(i7R*S;imx3852Qp)A+4Yqh&^p5=0khL7{I4@EF7`ko z!LtK6-}}E<6b{cSF62df>yg4xa}8rR_!@rFLQ$KTz49|iZ4f9!mW~Bo`({jnsDhN3 zhx8>D3Nb+{^ossdGmE2lT-%7zB!;;?d$aUY`$!*qQn0H=7RgsxxK*^>XR6P`cd3aL zOt5yU5Zvbw-E^gwYxuB1V&pB7E0YB1D=UOY?+C8XxQGT{z*(;xMz?wx+pO&BD3W`q ze6dIbHpLw7TNv0n@;HQ?o2SRb&p-MJqbUc#gy*TRrfndt$86LkeQak^PPV=alyXwA z%>M}^f@)M*eH4*VWxm=-=|-`w()UQSA!})zXKTBl$4gw&ES2nwe$)g*bq@0E4CrPj-2iWaJM3Xe*qEanl ze@Mlyr2fH)nieXvf6D_^!{_)7SmP-s6jJ5Ys7^;sY7Cb)2dP4KG>lWMzP|ahEQkZt zndmP4G1(u<*R5WS=>714{`y-;PKyd(8K$ znT?DScjo1x4tGHI9P)QW;pT4#%xuI#OX`HyPiMeV8}YBZeaC$enZk4HnoxSYJ9Nys>MH*Z-qOmx zWh2>3PpvxAp82jZx})TavU@PtbB#I5ahE!J&8%?vU*4-Q&Ir>;#LL;Xgm-#LgMN6^ z`1g7zImBQY4fW2ti?~GkM4D4#~dn1jy*G({lLVss&jR`Vx;Pv=j0~X@0;m6S}3~o{!2@=RhK=jo6Y4MU30I#(yq4r;sO3+7_RR>BZa-HaL=F04OvxEjbQ97C4Fvj3s!X| zeR1zL=jp{;85TEo@cBP!Rx8ReKbGF}R78t!>R&)|%sRV*hnO zADJ(YY~x-Ocas140DtQd5ypzoe5>z>_XyFlCltPY`lV!znP zhruDpyYg0g#A{M(jsMQ=3R#oqa~SkcTDUYf;k5Vy5~ie&3Dd<7b94lu%L6c{Vctxe z+ok3}QFp#bGKUahmAY4KvSNo_)Zp_IJC2aDY-d_~Wd6?SocSLo`2dUbP`+)Ehz9IIv{;!|08ehQWVIlv4?4c^3m(LR4eCs@dGFdVbY%-Ha_9 zSl8z!hnTRi5ZZ@7mo7iR!KwXaqPG3TrfwHP%*LpDv@D+(&R%CMm;1hFto{kqC_7k_ zVk%!<*%9L;JAPRfBcBEPHXVD_rDe4@B|B_wDhj zD3Q3>+#k@HsXVH@_z1|*azd4{RM?{XHieVKN^}P(bUfzq*ON~$T;AneK0WO7YtHw9 zg!x_71rrJRN3-&UfdmO|G(H`%6gY2E{1%3%Y*axsSy523>5zQifzQno5`liNr#mQX zs8%ukPoCn}x_s=-Q4Ifp?%8<7aX`}Fe+yrj!yWDad`6?6Yo|PU9%il@Yt@xQ58s3b zyn@J8m8$$yLW}Rw1wi_F(fyT4+1(uv)9`Rrw8ezaGHH>>(V0s4h%w&K$qgWQ#$+IH2s`9-bvTHrBGt+WsfC+4r< z{wR2<6|Y~`_$RDvsu*&&bc`}ztv@8__3~E1^&QXxF7~w47S2r!aqB8Z8(63F8vXno z)^{Hs5rw?|FmqYlGLsg)bo5u)q81^pTZ0{ULIQ_)8bftRMpSUd8@H*I3s#e)=h^L- ze@oC-x-{>m*b}*lxPKu1PwdhHG;-1dI_$hXb_6I&njPK@<>9cJ#;v7V*4E`W`&J8~ z4vlZQYviBaTqW(Z9OyV&Xz^TYCl>O~M4SZ+wEgrxCqZij@y4hMR9Q-UjLz|)n8{hU9_bOG`U?H^ z0t$6M8XZdyJslHxxv}k_SG`L5(5(6V5F)%@ z#Ex0496$eZEAQ~g!QX-shT{8SZ0UIZ!SdXc#S2c1Z<+#JSlrEBikR|Hko2U?v&_s~ z_bk4GC*g;+H)8h+5$xJFxKAgUB?J5`_lu3TOK5qDP8b* z3-Mou?W>_)9d$+<>NR!SqCAos!}v;@I~^5SuyzBl%PEUhyEr(CbJ7Dm`yLdsDf^c_ z)Ka{+4MT-G{HHoLmtCRKOKVmj-1zd6_}w%X~G6mEXA*Q;~g zYxi%vMdb3Y=4-0Qf4`aF?h>()u*X>P>3EW$mmLL0^y7xMVK_}NuYbwPD6JvL9V~Yt znJ7lHj(USoV;h_E){xWHh7a4G!f?yXPJK?myKJ4xmZlk>Bc8x}{lVHJ-keUsI*F|a%48Zfj#q0Gj+>K% zIsHCLX34H&5QT}dV0H~QCUx>p$3M@f{j`m?UAa*m!%5I7x%sJ*Ly6le)84?$<0}A|GfmrsiQ)8sPCIsy>ej*m-%R zOmj*DG_rB68arPQq0{hYd=H>4&Hd#gCljdNdW^ceDfAKOS208kF{?cZY(%aL1MPRW z4M~-D|6x~nwEQUQ4v9$*m6;_7@bbn%ZjRH9=S>-j&u+!!{A=zUTipxq%nvIR~7v)4c@GE{Q%0{q|i$DjH zQ_!Igd-BJ20EBz35LA3}dLu+o!@;Da$Xefd*^ZvZ4rN~lF0QqvLF1Zz z5t|50Fdaj-`lP~(HZJxbCb+7UPIBz3%R<7zGIbS2%ggNM%O~HB@^^o3n2c_~`2kkc z*!4N9HK%OTU0LP^MCD@Vzv34D77xB9vt!nFr1V-su*Z9Fpq-zGKQ`T4&Aqs}Zm`BA zf4u6XYB#Ap?;sV`p@;_*gNm1w8Qk#M&cBd1bu;Uh#<{wvrur{TI++w1?_u_o>XN^t zp<+cFuqj<%Wtg4#EBkrN6Mm7TfabjWTF1EQC1xF2zA=Zfaj=4W)yx8aikF$D-*spO zE9{PeZYTK|a+r6i1-TxCj=j;80!BA<{S)9LP%XO0`w0rq#x*eq8K7ujJbYTTxK(>5 zzi_qWOT#4t(@+Fm5N`Th^v}Q1^C3k<1qr+0#G>ScCZ{a878<)TzDBcpFZlE9@FsYJdw-}l?5(;yO#sP% zqo3W4+v#1@07g-$I*BJ0)~lLNvb1WIb=YKDP5J|F#zNGbG#4|w*T&7#Ejv^r505W) zA{4rZ_!rbEaaX={5UA`Qy6JuAZ^z8`rL{e7%kLqBT&Djp)3F5~n13T}VwAt=t7+&> zgbPTIh@W1$1WT2*2;4zb^bJoR2<9s_PTdC&!ExOcvvwn;2llv|Q6V;#mfEysEk;@{ zyRvYa0So)yeV(FlFeSh3c?LD8Al3OiS>q&l z`8O*koAr+E6x-$*a1Dzii9dn`lTVf8$D}k%*G@Ot3hqyUGcb*N(S2biUCr-&D<8Y5 z#M`Sk|az2v%YCv^Ki0fm;wZKS4Ffy-@NFv}#pa!P`&>mI+sesgb_yThyP zi6E(uoNb-=S>%=j1J;t5*=+r`4@CD2`!oYwGp$HMb%U3nPKK2Tlj&o%Lb5UQ9jZy>tQz3bLD znzpz)ozDh9bR#G#f0#dv>kwe^v<3bu_jQW!o4OKu-i?l48Pt=6cO9_0K8(!> zFZU-W+cJChOyRgbFd-|R6dMyQ4hW*F@sL}|u)MdD&nV@kc?IVGo5}_vKXZ5hg5-mNkgU zxKU;k1-@(5E11Bdzuix*E zQkK!$O~}sNz-mSL+*`5BOcNG_A!mrgi)Hugd3Y#y8uk8_QDajL(^m)cN)9FIe&r@V zmu$DOR-HV_L3`5padOtK<=L&9Q9nVNthst==xm$<;XRHo?zQza^e(d8E|5~~<~!Hm z;$OzdEm+X>7@hf=3Trr~u?HpV+WfUX(=>R~2+m$If? z;L=~-=WIeRPl;UVPUBNvRPELr5*l8>=>|#Ku?Ou_BxdOwU zE|awEFa5JkmMpW(*XBUbr>23t;OS#;BI?PRqurk&_Ve4nI7-DUEhVYygOUX!MAT0 zP{8%r9fkPf`VM8+4ntOsB8^>yWbklSf1)}>`o7n5@k{PI7%Je&1d0>CgP7jcG8tm= zuZUPk#jCR!llN}Gww}QPsm9c44+J@_nrU^Z0xVWHPj4j-k9}_Gxi`ZAZ)cJk&>R-P zv#&C4RZ>0wCa3DVP(@A9SQssKcC=k{MnK{7Yf7~rQ^c6m}>$BNec(zk$`xGz1NF4^nDcB5E7bNutTrv3|B7Q9c>5c&8*yURxL(nVor zGtes2D9msFNe)$8i!7^Ak6`GLk;mC?#cJy)&2|mh2WXiwrjpAl!}ynLlK1lbxEXad zi5Jf|=e-#cq>Do48Ez2={$XmrvZu}Ahe~DBYp2HA%x1^$YlCk5gxAqZEiZlPwl?6m zTEcylq}+yvtMjn&w4Yh(YMAgfC!nKDy?hlQ9;X6mqgIcADLgO^{b~GwV(t_ zjGr!u&U@zG$`4RrN1RvN{O!<_%GPSL^_3Sve}DhSeSl&KRFGa0$}W2 zMb{+voAVi5dTy&J)f4as$VkTZ|3(S4Gf**2u34X(^}bTbcz7o+iT5|28wcj7GaMY= zzr!mPo-0Vlc?F9*Kt+9021cr-#X5f3hSLKZ33GfZwX~E|2)V|Tw9f2Hlx1S71ICWs z{Mq%-`h85DSm4hIp@0ME6JX;Vz^_7+orK40mK$-xXl%LAme3I}(j~bn<5S8 zDfB5;COu0wFyRRawW{u36$NqjzKak@)vY}DIja(25ejQH#&$V=hOr*aIfBEG5MiaQ z9yiJ|tOKf_ZM(%8Xj7|n4NR5ON$?{eZ8y?Ue$IR>b@RFu?mp<$)=cKO$-ezjEkQ*| zLd=<S~ z8{-sbjvtQmo9gC|u1dO@lfuq`r!Sv=-JQGzs9)1xyBre%;?#)qK5bj{I^XeKjoxVX zYBV3s6P~4nw5M-xsnJ{Q=vF|9srpD6i~?^0?9iIi`LD7Cls$_We*>eSmoMUFDLfzo zK{UXtg;saySK>5`B=JOKF7dBK9B}7w5)+m_z+_-@X<-j{`Pt0xE^jG~F5k6m^c#G< z$xAPFaH9K)Lx6W_j7RK2HZ*TY+&|MGt^B$XavUw=iz~OAV(%kLDU*);;9^d41YW51 zN8Gnz4F)B;d$-zY9#ZHfk!w`loxQKtEH_-@G`+ldZC0PcZPZiWwxADzUf={oEwXn{ zfK62xAA3DVK|5GRd-)Mbw?0Tm0}^rq7R)MHc*GLedjF=3@GnWTsqX7JEXc2x0nbuk zz+iuZWWvM%KMC9%L@%sevwU0FQotM}^=q-}{N5oy(e4A^;+pS7`7y}dYYzP4<%~Fz zE|f%xbFP=*%(&`TXPNHZ#;F)4hL-g~==+3;D)6pNA))As!w?wrr20*9sNd8L@_9WF z{wMRb$33g%{crPwqpFUQ?8)x_3&2jHc$wH{;2$-~Xnzp@dMLxT5WcZl{6 zaVJuRZjU=`g_|{&9Z~ikDX9y9EP8dLEHNGe&x%&@%yLhBK5{jJ^xCl4M@Syx9Aox_ zv{Sp^as>qqgSTjGDpq&!^FyH`5%VY2v;HmMHJs;A{M7pV{JEt5os#Id_Guf5%$B|V+Uy0MXIZ(5XTtLF1VA`jes`$ zpl+X*y!&QR8_)nIIf+s(8h6!z~>UT-6lGv`Ym1Z;s@rWh!7JMk~_Hsjq z@-cFMvCy4|pygE>913H}YmFD1qwn6%{u2(n^LVg8XY^d5U7(r3X7tTHxNR#HlK}ya z5ZbK6;Mo=O`Vy_sB~5Odxq0j1(H4!9G3{`%Dt#^Wgtc+QQN9&TQGz?po5IC0O068iyAE4IBu8sh; zo{pcl!+M=-eyl3|YPO*pte~q*KJP8gHKDG$S{(MCc|ao)>dKRA36dOR$Gm}SZI4@? zOpf;W>uye6PQaBcB;DXjL}2b>3&Y7a!~n!$m99FU{rdvfGJA`CK%y|{TGa(fdUYZA zhkvG6to9Vw;Z&Hzc2wTX5%D za(#(b`|9s#vZHsX*`!e(w<7d2Vd5 zWk7?Rj!%QW8s;gr%+9H}@_Ox>B!{vilbX~a$eW8gbF4gzenf>C+OcQw>Rmi4Iwk^$ zWq+x1JGY!+o=^?OL^JFZ>?rFewXT(G=;vG<93py^rL(PF`2gn?v!>~IhM zYf8&j(|z*D2B4o^Z*jaRFsImnjm#Iscdxqe?F`!xHG1(kl6f=QubEXoCZ+pQr~sFP zkSGVJ1jeo+O22EJ#=VrIc6?dFn<(W$$m$yu5Z8kn$nbC|cUQg8P7M^`;%QFE#FURvA=_TdG453o?S&9mI8mCc5*!{ zjFm9Q(h5&+1woxs$a@H)WyjCF;+q7pfrV(`{n}#BmHD6AY6GQ$x*KR-HGU8& z56@p+K1LVyv}8_^?%p;GfDfo9m}Wl?SjcfB&RM+29BfXTkA=a@6z1lyxYyJsU^DnOsb`M^-t7>iOC!OTRys;A zH`;q4w~I>~lr{>kEf|!fs(fbyqiuDYO_v7QeAH%sfSx;XI;*mJttndJnHG3of=S_9 zp94G239)9efq^x@VFcTdkGv7lxkGT52-lg!A=|<^!g^n zC}%Z5q&!^&T`Q+c>zK9QwPa9o+P`E2U8iss^m--tZTzqyEdtwp#c&g{DP(hLhIYQ2!Jkt?5%oAc?faJp{IUC zVX%^A@g%7hVK`hPTyfd%WSP}`7(08ACzA!2Z8Hk;kIb+O5=OvAeiWv7tLWs10|`PE z-K&%!N$Yt{hT^i3KNO5$XPs{EmLwJNGaHg&=vw0nJOtjG++>FImwd`+E~g=SfJ4r6 z437$Agn!(mW7-5*HDC~sYylOup{QsM!~u;g#pQzbH=%{7fJFNj_%ff?k!`dUy*I>_ z+j@*^H6#FYaP=o+B;B%=hd(^dKAbeI%JpQT_#c5;b+)iaPSqY!0=YWq{uxzst;SPYZH<2*+zCl@E>dv^mrY5l^2lgkk=+EX^7 zStPOmD*1^^MlrdREO)ENsouVMj30S&OsIL=oI=6syd|+5a?P;B=7?0%Vf3Pk+?4t1 zaM6%5gjJ|DL7PZlo!9r}07s4P1|j%6JJ-Df9*}(% z*;M7$j&DZapMm2lw&8_ukvjVx{w6G~W~5$)d2aH_6enZ&euqYlQ3D1U$;Z)K>H`;_Kr;;^AKIU}L}!;wK-GCnKjH8;mp>%)? zz2>BC9OmX+s)kYnxIPpydd=B^0h`OYnfxE)9dj4utxc_e8Sc+6fylXGK z!+=s%tcGbLywUdLMYU1dMj3NL$4t{o9&&}@{43Ve=K>J?!rK3hbsh4sB>n|xde^w=Q&%uu=of=_`;GWd*nS zHWr5`mP7!}_x#v}_s&tc;>0%wiK_;1s`}X#HBe7nLBY#~7m8z4Hle3zPFU(J{c%v}MyrF8!fQKIQ>+$+hT6*@t zg=`M+2DkY%7N=%fyfHzhckgbvnIGsO-$T|Q_^Kh!1JEoYoLI9>cr&a)qp2;FD~DbTlopNIG&`vR=5Qh zQmnI+ws0_MjSUIOJ%iv_ZXb|aLRu8_V=ii08AYxvbSF+JcI7+|jNHe?_nRTZ$_l&g zqK?>H@(Yv9)v7K=|BIf#SxN)Ll!LCd#I`uWP%k?B^qwk*#3PkjYqth>D?^TPd|CMA zu7A(Rg6utg#hO=)nMXHfX6>KNLmn#Wmiz}2-%0yhK6S6aRG|@2dSWqZA0lZ`x+X3@ zH`Dk1QybGebgg{&U3!AT!-W+x2s!t>=I9a z*LT2RmEe`=EjYenHCla&DE}#-r$ctUzou&ZP-aodTh!%^>0<*UvQehK;oB7iL+3JT zg44E;BHSBaSxXnMx_pagS$>}&##VXPnHGly42m z&oEw-HU+Pgw$1*DE^<24^MMSHsKN2xgW+fRe+R0Kp&9Hop1Q}%(c_1{cvp|efoXkN$mw-w`=$OMzTPdA zeXpkE`q`zm+m2GtdoGkzHC?$Ec_ zJ8!09Z?)z_RW1d}CKqn65=I`bR`I?rBmwsvntq&*?L7$k5$ccWrOLyv6ybipQ*LE2 zffTY>JGk(YcX5jQwr1cNq)whM5yvfv`}_XKq56s$H{GX0wnbXB>9m%yH^T(y>{=@y z^S)wx0_GPSL@bH>!TYQBq8|B?@?jLEb;qO3j!H8sZw)2qH`< zgYl2!#s_z#KWBbxhU&e{gaK5lAUi9TdGzxZX9}qAk?H17+vK9YR+2l522j2S*F$!e zJjrn>(Pa0P{n{fUC*X|ah80=C7%|i6z9>)1%TS|?d!drW&km-q(yw1YB*4S&kiY9$ z7kYt5$sOm5LQUoelMMX}UX;|MwXJLI{}fD^aVep-kNU$UHfM|O-GIg;d6Lohy@e$j zpeXUUU~)bLDSkxA$sf#l4jb0Jnk=@}?!NqD=Mhi^;YPjL?{@c2K}bDs)L?SSog~Y= z{~HS9JbvwEh3uVHhbdg#o*I$GU>L4rO;?o4768|L=8>RjI=d=7s$thnJ%dt0EcxH| z=3ALdv0jEUwU_;WsfurWC0=adD7E(D^6=PGUsxe@*XNH*8%+eSl$?1oh7O+^>@f*% zUAeVrsL-SB|4Vg@uJhcsq5iw3Zg6LfY$JV&NxsYd?=N|p2wy2#$-)2>6BKKln{py1io|M-#_14vzBWO z-gD1AXP>>F{p@Go;S=laW1wVmxgZd8}z3l%(yT)q9J{11pe@G#2&iIVeAWVLv0-GlMASw+7 zdKAIY<|8E=_4^ZC@8eDK-%}3@se;3=9cslCCja*lyQM3+&;>x=|zwfkk~_|x;DxqY~D-ZQhi56Dm}On+anP7am~U@FCz`~7=|ck~6x99HVLX}cy< z68}>HwziGx_R1fhm}!B4^z8K*BV>?fT~2*{*rM{h3-I?;W)AH*ao{B;Qv+kUk7lx>umw5-dmb@Lrhyj>4Oo zvivf(PA2c$QnG;`I`>zQe=av-WNx9cxBU7dO~2)@E!O+3NunWd+2zgUQd69a2 zF9@9wL_O{)q%?KHgs7rcAnYNpv;D#Vuond7k)f!mbX^^_o3t2rx#FmQ%^xB2bouq< zx*76jr4sM|NV_kW^qYk4TLWG{Vt`Z|Wt{UCBsz`lvG+|ST)8WG9e?kJ zOPd?aRBR?1ijd7_6vHeU)YEoVI*lI2+o1_nO*eiRp-*~Un+WV2(hj&UC*S83Or^6m zz1jDVO7v6hM@Kce(6i6j(?TQ!6gYx`Xw+;*9?3)E94T$MjP)2w&Zeq??g4V{JlqaL zi|sON*9Frm%6PQmjX`CG>y7*WSLzR{?*9R&6t<-Z-B>B*Mg+%VJhF|3G$uZVxtw#$ zLBU4nkc)S_+7^S`!fdAgA`yof=RSO2RULtt2Bxd$@Lea->j)G*dh`c%UH}gcL1%x= zA{FtD9A{+nSmIF5f2cjl*t%F7v^(V{0ce`YPR8H1O^Ow z6v#QM*4w%DPrhn36Y|xk24}4Tg!*g_v3q%hOKE|5Yyg|oKx0Q#6solx3$ZY zxGH_kE}Z3N?!2~^s|`(_$Ew6J{i>fRZvz`kPZM5Wh6YX#xjExQD5z_PwW?#DKl|{1 z8{s$~M)Y`x6{~nCpX|0an z1B5&xui)XQWVvAUqYv|=gZ(l-iHd|M$I^0!CR-X()%doj@zUlNGvR(u18r0+539L2 ztn!)vGp|UrzuCeTQ+f{(L1e(*x6+0DPT0zY{@b0fF7hMl#h@}Py@6XoHbL6*&TJk~ zV2mx5YX9|(0&E4fZlt=-1BM0LY*~JdRRu*`Yh%0pXUBnl7_~5w{S||&NaM4I7#IYyYy5cS98T9~p@fwuj&qxGO?ECn zabXMNHcgyQimea4Dh!`%PQDGuL1=r=r~Oj{=ObFSKxpoFpPalF_%eS>Aw05~f^MP; zTTX+XT-#?kac%ypXZEnL7r~Yl{F@brVYi}aG9qZvXRi*~5Raqq-%;5d&CU&FEp167 zO}60zL=ZGF66-yhN+T~|9E6_tK@tiYXbj-AOes`hg15#c(|dU)c@nWNCSLW5@n6g> z{Fms!gpxcU!t++@hxT)m)bu}3YUk?%|6X-03Vitlu7LtG8EkrEjR-=rn8I$rcCPE$ zjXA56WdC}Y2>)5c+;wVdh99xd$6n+q|1TyAzrU~K0mA73!KN7%mUqGrV zzUIK~jyo^!_HQu$bxyXSsNh`?+Mosf=4|mquo%)W-+{q#G~H5}V&MZ8#w!Z8>8shT zlM{Apd{vX}za39siQBILk9(&E<#5t)0;K^ z`cw1D@W^kbJoN-caGgrot>fr-jV5>v6f}_H&^FP_cZJP7N*3Z~wZX;{YnGq4`_KLi zZ_@U{`yxHUPFDTA)Sb7h`#6(XgocL zNrFwK`cMNS$b}w(>QW!mv7a+^F0C$I`?6zIYj?6a)!{-V2d)Ct`O@TSt-0_IxkTt% zX21-}o0w~Ks%Ha=O-S}7CGg7xNe>nsos@-D)V_rk_%AR~K*2nBg-EbXD>O{0Bo=Br z?G%!E#Y|`Qrx?-}S7^tr+pXYo73Rpd@r|uybawvM9&q*d?`zAOXdc-6 zm5F&pL+4i64v0KH*MpdLrr-qF64r&~E4cS1xvMNnUZ%un#YAbmM03GLv>KTW7#fXD z)&`kC3%fcTlJo%zPSZPUgo$f)VT8L&1oj-WEn#GWklp%qNGQVe)cAT z*@uooBbhIIgyT<8Qm%U%xK=za@y(=~ zYq5(oFtTMQ;wMEl)MIFW)qQ^uUi*Bf&d!}km&M-s_i#9!KTDzg>KAsSe2o9*F!E+o z`Q0|+oDf)hLg+mjMKf@t9$L&IuHax*<92mi$4A4u0!|$3g%b!!T1(P}jjmZJe|W0# zJ?yfC8y5o|

    lGKd5Q!H->>r!`j8BXomQiBAhH`U$;Ql&Wp>WyegTh0DwbmN`;sg zjh7#tYg=w_$;=Q;41c4iefXKXE4q&K+LdHdG6_fRjrh1fPuq?WftJmYq)9 z?Mw(@G|GuAbloCkLb#*vF5wtA{Q1Z{iJ3@@F9Z&qB}xMEDAGNFeCu4>jOUKQS@t6;^^M-hqfIV zcY_wsICX-3M&1C(@+w+|4O*9bUsqtfFy*)TuyH#14cKC-BX7mfK%T(v9AL!;XVg(6(+5Ei6WlOWf(8uBoG- zXzi*}UW3BX45XwSX^|?Ytz^fvIw$cX( zPbxX!lQD&WI5L2xWHo|MN_e6H-YEl=umZ$VY1 z73t;RLwu&XU6*46qYJm|XYH%zruV?>b|4p$LHVRf?y|Flx$pYlYou$T4XBHjzt_&1b&Rcvt&qH#x z!T+rbae20^W<>Zb@1Az~HYzMec&Bkz$98|{?jJ$0nMXIXOkA{eHu@4;xbTD~?1NGZ zc3%{O4|n9{Y^taC*+$MqpJ2}L53zPITu&QiBtLva%a*T5i1Ky+{^_TT$CH6)C7WpX zns7ILWrNDlnVq&2P}li4pZZF^TRR@Kd`F(|>2L>$mQr8O6)-!;z5s3_Y}}(Qmd=eC zTb~11>w6a^FR?*@p~_r9Bm`j()mi&6B|5VrW(rJ8TN+JTzDY%`-JN(c`xQgABgf8# z5)!rGY*Fue4EyZRQ3f=9f!x3E9&2Q^e6M|q!iP^$nWVfE7j3hi`H}`62cn@Xa6BzKXY5t+|P-V$oA9_4=KMnE1iBSQK~jo{PRU*}Zq z%Dr>Z?X&&fsQrn=4=_P(N3cQapDn>I(tgrI+7< ze*}ZhfK(8Cd=BIcoGyJI_{pr6Kg;{2Z(A-(IAzO+GTP5eM$JO9Xf_`G zH>q4AA8Fe5XXev`7$C|Ed_9364)w0>GO3O24}MSEcE?>!r_Jw^fSVrf4bL{}b0h5^ z=dx)#0;?LHS@{mehUf%b)n)&jsyZmgY0Y{n8iNslcPv9%JG4~yWqvS`Rhvuo?vHQ{ zykZ>d1}iJcMN^@ro`RCp$)C~&#wqxxNEjWb_`Ab@6Y7Z^5NMpQsw22IRX5<*`_0!6 zyhhL$p`y$e#o(ispi$Y?RJ2ETFkw^cH)MSbd}`R%!U`h~SnvJEicB1zNfJIG&zg89b3NG+}Y3&TzdY`jUUr3#V&L-DPm zkuqnsH1p#{g~O&H03-hCuA~`&94j=_0lP2D+n_E#i!I;oN<8;v6g_a~s-wogPJ=Ux zEd+iBV);`V6%wiZckt#tR`p7UD|^~qiiE#-d?^6m;GO*#jC+yks4R@FCZUDze6bL= zYOFiKeAeQmz}OFa-kL`a1PuAdU8k}b86tlDdCdDNcfr>`ZNJ>h(_ED(AC0`w&#Ai& z`Vs`D7VJO}UFj!O+lz%O58A8Q`D--+r&HD%51*^bm15~nNv*zl|I};}uBPR?yauVR zuYl`kaP%Kjj0CK@4K{Fp=nczn!RY&EN|!&9G#LSn## zHGAA0cDKX2q?wDj6>lZKPRBWKy9p9{@>yWM*3*||3$Qx+T;jXK5*H2{I^$g_(|_Ez z8lP~lJcUsB@^D%mhVuZJ^%kbP1A$KybnyTz!0>jMZ#K=;4;@5*ZzNjR0e=1XV%?A~ z2!HHG9y1v}`i-kJJdUY2K;GgQjq_|pe+xfRd zti{HT=U4&Ivb}Osv6S7z#=fFA;M~2K4l00Dj(hC-Qd-pID$mJ$$J6JHSl^r zn=Xi_P(khZsn{H1LXF0efIUBv;$fI7|NaY7(UA#jCPcpIt$&fe%N#|AhZM6t$;HN> z^~DyR$u#7Mn`KlLUd$!Z1vRU|5V|_2@i{QXNPRP8@LCZI0U_T2Fqs5L7f#2?sc@dQ z76Z<#?SD{yhk|^h?-KG|a7zLkX+tt_d>7{`Dj=OxADfIAxAUIg$ZZ1mqiN>`V5bYg;PL{Pmt%#dhUit_9$0t<+G&xUKh}HHqZW23EvGOXQ3(a;qmS+x-Lz_a zhlkx*LniY+ow%Lvcg`gb5{B7pt2ho?(Vq^Sx zM-HnkcNYVkjAya^;ul6XX}PO;cW3r88|%wIMd3WMsSes1W{{6Yq=Y3Y>%VYht@1aG zv`e}b7RPV*MvI&#ckYdoT0xjZC=ypeDQ>@cti3^Dyenrz9%I6b8b=;x69x~7jC`ha zKaZ1v7$0N^NZ;b=IUmB7z43ATCwiAqK6wyG9a;BDjWnioC(xfI4TzW-U476XlurBB zhf$~Fk|(~KGJ+ZW@a_>(lj&Q4%~mJ5y4YJX6^1FOPEIB<5*4vRd~r(S=i_&NpF5|S zjGG-4(uFI_bLd_{BBQTI!;u^9Dzk>M*;<4(DP2^wO85paYu zGGfK916aw?{?6`Gx$m2fIy=U?K4gHOhY-mIh4d-Xh{Jog{jV!EZymK&Z`GvRsA+*y zflow0(e`7zv6*JaXvT){7#NrX_s+j|(-Wqs*N{kWD?`ZDlbfQ**^A`Yy1;h;GRtgW z4$!|LA@;GWRwnoEK-8}P?sW4YIf|bfqy|a5OCNtGrRi+w$S1CG(q~cnh8}jZMKK`E zYsG)=pBOd|=)&*m zsjq8lPRH9}y8JO9JoJ<}1M^>u3b63-tE5^?HzR!1M^mq-jupzinL&_aRpcOH+E!9z zQ|plbj5X}Ue!D5HhC(3Y-uhK7a@})!tNOff!+|#us*?sBi$$nz6Q4=2! zlHpLa9YrUXyvF7rtH{QW*-+-BibbLlF+l=;4n4X`HC2?(3i;i}U;Pll+Yk-WSz%H| z*fm=5u&a_mUFt};-2pu(p~eB$!Uv}#(j$N&aGc*E3a+atv&C2Fx(!{A@D%~q>^-UD zIJ&@9=D$#te#r>(z9nHLCI^S_x4QwCqSM9J+0=MXl^zPpEfAIlj}-^9Sx%a=D*PC0 z<==JX`z?4oz*O~rT#-V1o_lY8hPup#tC107bi96t<-hoYIG)a(YQTgEu|D!pKGN;4 zbv4*-j^pQ+;1+=3`%a|C+mW_`i;y*o!`qJ8m|pZT1&2+IY#;21EUzHG{N$T*N1KR? z%`efZv*b-x&shOi(@o17j(5wP3B1jv~4M0$C>Hebs)5UfV3)`?C)KK)xhXwmmi{`HlUAx5S&MCvFz zJoQqk$meMOF_rngUXRv$a4@&cLh=fp%*^8SS!o?^L?Nc z%2?x_JxEpJ$VMtCY*%NM(3SWT7i~TEut3*wHvDhP+gp-XOUk#7&f|gz*r9U)nbmI9 zjVOKJk9~vh81(c8Z+UNJG=V}5I9r}-W0UXXCw9eBj|S@TN9k)lbC z0zBN4mM+CmR_j8l%hr?ig&rU~dFP~AJ!v@J}w8Jo4t@2N2B#^S!Y$5$F^BU=tvMo85l@%0fSUsb7@{9Jq56`ZOG}p2z4UuEQ0LU+wbJ#fn zJhT#ER~`SAnhPaLh7Dn--D_~)^}K|X*BVUej&qeuPaO^ z1bpOmM5;jNl51-WCA+r>4@CVZA1VK5OvzNPA~Ra|!qi@%M}}Nnaac&Sm~LQRlH$LI z8L!p5a3$1cXDdp7XE9*5qL5a4eR%J@jugB}WbUbUB#MC!w``+4U=R(GWm;Ys7h`H)AM7LDRJ~HL| zI(R~VbAiWBd!BMDA%Su6%fc*4KMB`y0JA`?Su06K1u8`xCFzqk_GHhRR$=CG1lEw$SidheyOK9Q@jnm!f*;-+w$<6uL?!Sw!^^|6m z1p~_4dIq3J4@;X;(c_Xa@iJAbyt^!T`Rc|c-ZP?)+fHUoHE4;o1%{u31E^o}W^JO* zG>_*}&NS`j-e}uxHu?8;JPYI57pn&U>VSCxus)Y~W5ROb**=Q6=6(laBb6C+t7AdH@}^o}?~c zQCW}bb7w`h3pxqE8&hJFmBG2dxA1!$2kOW}KhjH#iXNvr-6aDz!&`dv2}81NlNHVX zAd)+YS|n`z2o!$_)*n@#iAKpLMN|es;7TU zlDMG<_wyCS#;ZDl5E>+X%GWt$4;m4&_~2Drf?e{`^COxVx^;zyS5QyszPR8!|Ma}h zRYO`)pCNw7#eTF-hrF*uD?WzRUG=unZ>7M-P!Amn3V|H|U*ReX}h*eXO&uCda_aCJ1ovX7lz(sp==-cV(L48-1P|7WF#Gc4Q|QZ1(F zx?kdN1%i6LT1&2BWzw0ZgY57-QUJeY3Cm(KE(TC_2UngscJ6YV{`oE0AKZ1Vz6z8% zL`NM3GjEFux!qn7LjGrLKiM_4$+J5hm@}^8>KbRhow#i&! zywqHlC|Jui*7(L=2O=g7;9WkY6g^YzrW8!qB!r~r-?+wG@xP{6FZYoo>f!Vi8~jcA zw3!7P$`b+N0nG8`%a^uPptM)2mZ0*7654b0Se)7~odv|{cba+tHBd+Zu3Q~C}r(bS^-nQ}DbRQ|Dey@jISy96x_(79X z(l6)X=hn*nid|^uG_PZ$=8v4Q+$JE&aeLh_u2H6~+-Onh(x_ITxkyNlJBi+nJJ2=6jPj zvfA%K6f6O_nWO|N`z02y&!uw$J)%9k9r6D65kb7kx0Kl>mj}>MfJ^DKh^S-1qQz3M zqMYkn+P6}yE8ikk{uClX5mR}HZNvkN&wG>+iCMyJ;o+~kMWbIFmT-m7F(PWO2pe2~ z-!ISMq{0VpNq``!`SM_IBAz_ANA;GaoG?|GkNY88AltY?G_vcxi>X= z^;!?o=(6B^S$eS(Y=pn2!OTp}bYI)vFVi@>ZN@wLFTN5#Ksp}YQdqJ5;)_SRje;Jn z+&v^Tf6vU{gKHeua{}ukl)sk%!x!;?qFwVZwV+xN!+Vv1y*G>%IO~g*ohH!KtW*4$ z3%pes>fl-zgmoz3C>P56#_&54<%(FhT5Zvo_e+<45sxn%@XZ3)CuxVGLm$sQDD4&G zW~A?CrqZ~EsMCCT-+=HZ7Y!dMCglUHE=O^c3~J*(u%)_`SrtI6t6+^%?gNjG68+xx zbB1b`NvuBn46ppX_YS|K!C*j#_CX9YyVbfmUQgRsZ`~-RI*#X9Zl4K6pFmb@Nj6?a z2Ouq2TNZgI?-xUaY0kSXii(x5@IF0Dtk8J+89+ttR{#qVM`6LyvvK3co##D*fM1&* ztG2G)xGN5$UF-;ufZb9cT#v--`C}-Ya{D7jA~;*WNTxOQdS4*s;hCQOD>H0Y$LA!n zE{De)!jlKOgNvQBO4Of-N|K}LE8GJzkYWJvgRiQ0v`*$q31?Bdj4Y#O(#aI-zS*C8 zXHQq=-#>B21aR;^eGU8Fa5a4ejhqiwx_X0{x6x}JQ%t>WAMpP9dzQ*{10bX4B4B0O zm}Q?6+@pWqlL9si_+4lJ9Oj7qc;}AJ4%ypKSMvCri*DEw$m)$QJ=TX+ z1V~u1A*&xh`vZLVzxN7*#H1T3Ssj$RN?1N&|K8aCgMl-m_ISokJzWGR7 zNYqBY5AmSQv)vvho}!ZZ#5+>-{UbM!HRT2fD&2v)vgIbxmlO0%S~Eu-aG^cx$;1w1 zL*pN>q|6uPoC%e4pAjU|`5hXR#1lF8b52ubVfPsbZomzW`oRR0eo;*e|EVCw^%9Cb zw$GR%9V~8|{Tzno-RPAvR#iPOGfaFd?Bvl=6@Ja&Fx9~(sJpL^0J?LS|68vQ%o9k| znigW|o`(r6<6PTk_bVus2=m##O3MK^sOx&npl6nVzne=x>vYVfcv%pXQR4me{cNTr zGCx00BVp-B%!>VEsE)2gT{48bx@`Tx2bZYlCn%oRSsIGyo~$c^k{RqIzcqnJ2!fYL z5?-P&VsLHKg=RV#2GPJv!2mg8YlyAyaN9jZyV}u)-QS}!!I1nmqUYlHWzb*OXhe-= z`yIrx(=lNx{#&8fOi)#VlGRX!w)gGcm*6q3PCq%}7ak#g)?HK3P8^Pv%^EVI$J`P> z2LY|8L}gF|F89yp=@&kHQD~ZsHJ!{O#Zt{~gNB2#aMr5Bvb9Y(Zg(54C$M3silC*| zDjKS}IyT)rErK2eOI@g@nF=^N{}zh{shqRNV&V`7EYFc*q7f1b z(3kbgHK}B`q40ZtZA%4XrNuyVZEGAl^GZaD(7PJ|6hRZu)b&6~!27q3BW;6OwkP>^-eCcQ z#Zz@tvjoDaZy$de3Z*8GdJ$kgLKn;IJnSOCs`WTTM&4duz2vR-gQVu5v4Z z3u-&~M1`-}aILsT0hm>Z@v7M$I-l`q z=X>;7pgmLz2pFVeqm&?#<-rXeo*OyvvqEO=pq!tiJ;8}5-?kpz*u0V*j#XPFK_4nr z8T7V79isl7HL+rSWttd9{dXQ1`Eb{~0j)cD<6=%)MBp-L;fT(VZ!)L1pSypkfsQ*bCoGXQ6e4MA`%pB6q(a^b zTJ~G+wWr+Ou5WTsk;7dZ4c@F(l8=m>JBQ;8x6*mjSHAAuL|AiK!VUyV@8odypr8*R zzwmtaNjTVCTjoPk23E$lP9%echp}n{>n+NyEuy%6=9S|F0It?ceydhFOouc{y~>EeN#H@gxNVgdAxt0tBc5+k@5mufdlmVrR5 z2P#pnBA;rxl`w^#hG|W{VaQ`v2xlS8fr1nzAMbLSVfqYaG-dkvFs>X-FyhHy{48J} z&7k<+GAN%~!|j;>)lJek&itU~qCVbj>N9+UY2Kp6iq<+N9$y}5Ajr(IgmC%PJNowE zS-qaj0^^w3G95q2cJNu}w?C^<>#q$D&{2cJ?#80~Wm(1J4jJ%LQP9;N2`Wl z8&uT0`PHU^nGh|2QmYYk9X;l@%>bgEy7wVB#-*p1s`?RA9i#iCKr^@Etr|y=x0W9% zfe!=Gb)=S@2~4GJ=C$;Y4VeaRo3vnL}sG=Um4 zAj)tDXx-qd?~fzRJ0fqam0^qqc)y~N4s{At}GT?1Xt~A9qT|jgdJ(zw4)wF-h z9H2S%fpfH9?aG_SJ={E59S)yE*+@K!UF1CbrH0Q=dw4}y^+b)nntiuWSmDaY zdOq~#tGsg?E<^JQR~ZnRq(rA5{{`~W6$~P%1JH?0ho?HO!c(<+HO_`gHs1*tPbO?criIdM5sevgM+PwaejO`JTw=mD}YC*Y&#f@&^Z1ZeoKCCF?x zH|1toxG?^$tlVR(Lv(x;YFE0l@Olsz66{`i{a2N|;8D)rYcGO#eGx{pEsJeoJcLl- z>y4I(O_4-8R@_!>1wxOMa<4RkRG~yB2=#(>_495VGlpxsi8jl#kn!`@pMT=Op-o>C za&pCWN9JeQs=}osabo$76C8i#nu(Q<3~Au?lE>lKzjf2dIUDd{I_4_s6F z%#DMb5`qro*ntRI`C|kY2wJ0|`5HMUJVB7u`4WSDJTQ))*@MdTH=@pccHTSUm(}~{-)_}b znggO-ARsGDBi}j!3aLO_Ps@z#7P`&XblcPJT2(s8G3s=;-v=?_T{o41T2~Uqk4pfH zI>R&FOC>W?n_qh=S26w_i^L=L@zCUPWMX`G#ak)umxA~^MoLA(&JW&%Vl~Sb8x8)QR9Rl~9sU(Hw6WHcrqcQlvlj6Z z8l^qG@eT)^kC1ch8{b?i*bM?%SUH7-O4!rQ2D~_$^=WRIs>uX5*SV3yE$m{njL83r zTgzN!d>DkeU<3B5vNGBIp$W4JmigM;ql(68wso>9|8=ScO%t*)(l2Bxh$(1d8l+Y* zl(cS|K@XhW-As)C&>_c31=gBG>5y#xtn01;hvG+c?E_Q6l@%J`uV>_O1p+s#&HHKB z$1?BC01zL*_wD}3ZtUXamNVz(+B{#IMB*<#_NrP9Y<5y%Qe5gUQCP#qUQyLR4_DJp zcgXY_=W*r~vr=)>i9b@(-#}?@(w*LIKIi7(9v;;B0bT60m=nuNiNFIl_g9ZF4#p@6 z1~`~1062eg&h)+-nypYd$}A@T4`LQk(OzaLa=WwLjgI=uEf1>DQzBUyq`01+v62g2 zy4sWEfw%!ySLgBC!=5@DhfanLH|zNFuUqRY6KmRD8YMUy^;a(XY%uQQVBx{VK`FZz z!q)z>3^Eq?!k#9@WFURdTAL||CO&jK8@?j%l^Pd-21{neSXs*p#p8YMjg^jGf4C& zM{A$28-Qb<PmTxzr{ULcuCeGgKLy|r4~lkE|Ui$}s3 z_IppixOoDJUG_cm=G=v=Qs*an?SCi%$G*=J*?3kJtw?ahP9sE0_-6wT#k!PgC_?J< z&mhipvgfl*EjHlBL9&=d_=j_SBV=#Z+5dM%I1DaoBx4Do;JzbL%x?d$pADE0qWRP4 z=DqwyDNEob`&}M?WRN8ISupcKU@ui6;S>V7Pa$h1sNv`krzM(eUfAH~HpdzJ6)Rw~h0S3bqy|F1Z?vRw=p=`Hi+~0c zxqGY#cnTDIDM>o>4gz3v*h8lW_3m=xv1{CgE{0P=o%Dnp9L^}M`yWWYIC=*X^4J8; zJ=PWx=Z_NNXrAxg$6sxqOA)L7?zyu~4)U2C6D9g8j@|20iIXo`;y-a{2HeV+XiLlo z!TF=|_I}$>&i-|(*U!uJ-0dvT`PZZF({!Ra(1HQ94?t%n3k8>h<@sJX)%GvJ_2SPT zN;J<84?oSEu=*sNH8}WfsWfwgPO;sx5o)%^TN7u`au0~eNu+v6L3H6Xj_mt&4+=i$ zeP#xFSS~JR-h8*Fd+4v@vpmB~sIk+r*7DDfPI&p}k4|EE#h44t3uUdGMu6@~JkZNT z?o4L3{N>@M0hi8p9Xmzk&)(n)M>aBn#z;1i&mgda31L`V4~l>Sies%So%}#LZt($X@tape!slIIFNDs3|&=U?BRA)?2t*1On`cL zGw!Z{cJh90QrY=5>LW4}7Q^U+=c^yZ)ypc0ke2uCiRbIZTy z>z0?YRghN!aHGbV&IzB9er~Cd~GB-;{%j`tGKlv-iK0IH!>#mJif; zl_xv9A7-htn{W3O0xkLVwQgF7k5(nkE-i%O96Y=gx09I5gqtj3sL1v#DWtA#Olbd) z3Yu&v>{sWdzc|mm$iFYQN$^Yu2#f%s6qJfOe!RNCWrVJq3Nth|n16r%@nk^jWB}-6 z*?KQS)T?d#TEyaXP(-SUt@6Tg<4lg^3{eRIO0 zj`KdDuB>>F?Z-F258w*A!d%<;-XB*wbadQAsCVa!2TO$WW6-7ZOMk}3|F3yxg!X=(v7_-S zHL$$!KKN)*QF0k)U+v1iQ*bez#qqb!bu>l0IKaziFE>^$VK;7S98)sM@cAllYuY zJF5}3$2irt-DP-nRm_9N&IoHKesofP*fHo&EVMmgrVTYHgnJQh$$rQv^rF$*qM)J3 zukv(yT`%gtNjRP&l*|Mr$0l;amz$Ibxz**7wbT7LqXZlj(4aHGUz3V^Z5y?_)6QuT zl8Ou$l_dfJ^P!hod?8k#mQ^}+qO`4eM> z$ogi>AemZv^U2Ttl#p$^B*o06=UK(eG@&~f!<4LpY|gOu3~xB}!?r3~K3->sSS@fo zi*`ZUZ|_7^T5dGp&9Z2~_1Vx+_Db{TQO~cwP2|`h-LweK!!%|y8o&=Q?1AVFXW15i zOGUW-MN8wk&YJ5N(zB-ItYXX_@{W* z_VLaNeOMd`4n?L|Z!N+gH8&u(x8~aW!Y^qND8HHSR}pmpLG&B|RWrPYPQ@ckVfA*O z{cUG^)hzF0CkxUs6;?5mYXWU__HKyQSkpWpxl z^{**O@E*iUm_5my@+Fo>qW1Xlt54WzMQ!WVu|$+XPttgXHBcZU|F8^Pp9qg6^N2}S z1MgF(c~l0Jts%Z?I5!X6%&cIe8DeX90i%+@Aov;L~8i-+H1J_DtZOBtv1HI)j7n*77AE ziA`EUeA#50xut#w8ftaq8UUT#nO`)lDeCWK$)l`8fXYNe%kAAZ5YW#m6n%b*7w_Q$ zMFMAnmZ0WzA!v;q*;UJYhRy!5d1z&Y^PtBa^i<%tQPnLN&z0uk`mRNrH3J<%N9!qKP;(j%{ZXpa$iYykSc zy|lRaOUvE1KdBkq+Qt?osBc6G{N+kBHs|NgaUZzoS3}V>)VddC9M!gw>(q~L z)q|jD$bv`c(972iq;IKMu~JN+TD37GOeHnJJMujf(G`7_CqG?$!VDkAoKU~Y+#iS+ zmGH|8KvnM8^TsRZl*i0ZN^>$|$@?b_d|E*sGh?QPOO<}iPQeGL5lM$zb07JN0D{ug z>w`N7cFh8umXd(jy2^`Cvz+ClXXpHrr}3*6mJ^;vB94=HEpwrDrx7FW^c%v*vLB9# z5W^|l_5}9$&~k;~-Zp@&aJyqpqtSy|>{xVt!dFrFuA=-!a8kKkNj;nKQ*NV#BE259 zMBHxH`ZNdHOXU`G+HXAh1Z@0toS@p}F=n07r(R6=%yyEO90zt1Q=m5jwY($_Xy%=5 z_fJhH=b+Ut$@#8v6krNR;;ZMh+??Tj^wt#mW-w<#u$@x!Yk~1zXR1Zjw*9=Ewv9E~ z7l`x4u09FJ)K+xx(#Ud61W` zWf0GT*QRn1@h3+g-MM=%sX^O3)?KLpq^)Wc)a>h`sLDP)Q1_6XymLmy>v;GS^=&sC z*6KE(L6(VX-ajho+HFZ>uG!SGc?w`CEnBSE=2yyeYB*M>t+vP&?0L-%U zu1RnNvIHRFaZ2P;dalLsHJ)mTM(WbgP^Pn5q2;4eZO}NruJk`JmT6#p;SDn~ z)xU=XKIHi;s6|z8tqnP@3Tv1XLXsnIS52B8T~9MTfBJ(FEtyeb{fh{jKWNAV68}w$ z=`vVS3qlHLLLn(S|40nrebfQT^bEgTPKbO`oB#QH%_VorDJ?<}`?Eze!xDbt04lth z&UB%83G_(LX__MS6Pfn^Sd0i2f$j)3tof?6;Kq`&X?F)$0=8Z|2;QO>#my|?>&@+bd&zrPxBbt3n)AmUMn=iB;02;*q^DSE} zVbrWp!n5PJs@!Lsr8d3^duB_D`n2{xUXnljKdQbmtg1EYb`cUvDM*JXDc#Z_(vs2$ zh;#`k2$EY-P)a4GyQNb)1QexHkT8IaNGKo;cdqk&_qosg%kiwe)*Ca&7*i=9t<9mO z&|DWFaki>)WmLg$YML|S z&nmz*9i2SwI(xKBHoI%UnNx-s5GYl%_r4-o_v7j+=hO|&AF%jC^^6?3sth0!w5SXT zb;;GfZ(+uwHSu2GTHFpMc`Tm(VF6I)@JD}61LY39%>0Muz&L6=7AfQTn@q=J)xhvfW@qAiS9?to9 zygF(-pQeTwJcq)RRTwV~qt3mpoCzbS5oi%*vA{A4iYGu8Ad(5SU_)7zCx8eU~t z6!Uwf1FaB28v)%csI39pFXlbsvfEO|Z0VxpVRf4mS|z`UW=L29uqxNhPo$2Fc?{XZ(0fe>qPab0p&fkvYU*q@P z3)aTxk_d4~ZEVX;gB&i;&)rUMS2q4N8+Z+FDnZ{X@4NqpGHa0^Ha@(FU0Zw>ey}U= zwfrV}>e&-Q1CHL;^fQ`hNpqm_ohcZPTb129dv^(c(;8mx3>=9fQSw_1X|_D9P@sJ^ zHv9J|>x_lp@7lMpqfqbe#8Kj1)>8*b8?BKs&?W);eIHN2n@Uq%V@9k0a@>*q?s2K= zI>2{$omlXp+?-jHl4zTC_tlvsnX@PzbmDY zR%gt|Eec~7@DdPEN0lE4VC;IIJMo&XnvR3H()>lz07*merx%-B#5(Yb)i zwp3{a=yAm^7}X!;C>b9WMP1r_2khqlL;LG9uG9wJUvu|xF6IGWqPeOthu=k)WBIsK z=TjUYWr}9&$V4Uv7yl}&mZsI++gA-+e^hl#yp{}fJfdyh;90ib)s@xDd^>R$eQC#@ zqD1xZ*Z7FqvlvwA2DNbz6D8-u-gZ&e16&js08T(H^>cWnSd!d)cxk&q_J@>*>RD!8 zQ*gOU4^>|_zZrLu5M6N>cxd<@M_zokL%N%a)U(a2mL3 z{Ew8jPv6lMkPqCm0KkumN&T%-@%DOm=yV?lxKKa&H_KoA8t*u=%=2B(Lvx@wjvoxR;URCyRll1u_mO=Pii=4O)8uX_%ffdzt=o?)*J7t3aK2k2w)?I8y~NO3mx~IIhv_ z^d4*E&c}nzv=SMhW+;HN;n)V7sM}55apDQxP4Ss^W@4|OcBIaqw)?vlJDfDZrb3^7 zB9hM^@3b=L)6k}rCdhY)ImKC_NDH8*lc$^=4jdjw4{{*S^p4k`fU0=C;w0!7I_ z*PV`;3kd>3L&weNp-2tMRm~UOHUeXFKNly(<+(4}0Rj(W-W>KnZEcc0LtgmQr6w1` zn-vN2x}7i9vdwN0--0YW18R%0Uw@jhyybVEw<=>Na*bgfPZ;=Gu0a{PA0Pcd9uqcs ztFFe@&F7nvd#j;)@<_8gN6qr*=Zw9t*JxuH<6VnP?%U4j4^IT2nC+hSdgkh@pFKme z&->BA`*c_sG>bxyAK$_qX}>R3xcY&m|OGag3$TS66CQQ)+w-2irRCcS=w~rTjcQtrHHpi);N( z-}h$z#&WdOkE{4H3G6NnOT515d)cv4Xs-U6Y0Jdo$l7cJ+3~-+ z(kMrLtn9s)PygjD;4s4xb%CDx^89Qu^mK^uTR51779B+6OH2cTuxCJi4*M#CLDZ%? zbKt8)(R8l5Dy?t0lUkQ^K;xe{dM3HxQB@1zkD{PgkPq?7>U0T zgg}rTdKhD)Mlf#66D8FVmwY-9)qXnAfp z8#Kt=#^!%~u&|NBx(Ja`eUn_Xh@PmU^8O}U3Zb9LpC8@(a6`B??k}23z7|TX4j_Kwvj&-Sj>#7Z!LV{y`1klFn^7jVkZfIvd`4 zp*zHho`_sMoF^WYz->O(u`~Et_tJOqOlU)q{v9|BWjO)&> ze0xTBQT$Hw8z&9UwfLdtmJ7w2X16I{v5D2qfGP;;HmVaOHh(~q@<5uurN+7A$QbiDNGTf4bVJvg|?CFJZO4#LnY6d5`WelLklmkjvbrnI74W5;YZ#xV$H&T!s&wY5On zZe|4fEXq$9V~mdO4vB(F0NQATU_4RY#AkI7Jz0Hn>W1Cd44z7e`bUPI4Wx2x+md7-T`KPg{<5fmmJ#rrr z5^lP+b(P)C&N6}D>D6FPgC03*bgc$ZZ7Kba=iU!-Yg|Y-spz%MjZ&6KMo?VT1Fo|a5zi4~R8%&{h{Af}XiZ%A3Il-=y!kMSi znHrGLbd!6uWUpao7nPa3O+)TKJ1td|iVd{-puMK4w~0&wIlI)Y()(n#6b*t`#YWCx-GH7}{0rawfdrt% zn1lIBE=GMORXsJC(H{xa@kVFu_s2W;H!hqxVBqAz`phua+t=7k%LCN| z%c40!y%Sa-QmkzPEGMdOYZc+BE*pSZpe_pl!JP;tZeL8(m*}ynd#e+{53#C{e{_j? z`6%q~ofz9_2#J3fCs79trC(j+U(JWw<}8hdSTa6xG1a5elf<6xkEN4BvkX3uiT?;e zqrJ2SGYS~NRR?QZA&=h*G@ zuCi&B@5PRtBRQoPL@aE5prwON1aCb-pD`d=p#kM_lTRJByAy!v+Ns|n;93x&I$I%M z>a}K3hvFo30GgozWa~^<+7U*51<5;;At$F7=##b1BD&0T7J5S`G-IpvKp+qg}+12Mkc;CIdm$`K*v4_Pv@`zl6*ZE2&P z{ynub6V~G#D;l`%vSw1QP(;$E`8t|Cz}sz(=;mMV==lk9b?46N6 zJO|d~?R9 ztlQV0@P35?iK{H2w%eKAn)ubREbM%*Kvo7`BB^=@P(VQ*$|3v>P4Q0%8&ufTgtCm; zIs+28f_dmcS$%}y_$ZnhLL{NTxC*Aut~@LMg1sH*wTDo~-`_2DgsS44pzwn=p~+HKEmSHmA!*0j&g8K#*X4emf5hN?b2) zL)x`akScTm#%syzOIqX0$dLmbD6~Nr-K+iCPUE5HS>^@p$_m!lVnUrv7s9U`#vWe7 zfu-n2f%=QCLjsFFa@^(F*z00>=n+QNT9^(RI3BD@^n!tNBSLJCPe5$xpr35{njGDL zI5@HOyV4_TFCPLTbyf1xnW1H9bd)4(9IUwYOP%zohzUI;B8C4rki_mUKVo;FBe}Q@A-*hU>+^s4m6wCMXMErPloF9l<DzEF+1x`YN zO}%|$a*H50+YX>trGbfcgV(76=X0+2Jg8KuSkf3@kf|{sF{D3vNKI)8?u^8$eE{&wvWX{ zd_T!st&i*ulu!O}w;fOahM{WjaT%Nfy|!kucMX=oz8p%IHgmlq`Q917vEL0w%Awqu z=C2x|-IS#c1;5C6+zNFtJt%GywM+lWVIc0pXCJv~l3?otCC_Kd-;}jpBvPdZMaBhL zuyNW=t?J8PhqFQUMW~OcJ=7T%Xsv5aDj+BXK9vYRJw6-TaqF_8oR05c3Cqu&mUF+n zPjAtQ`RI<3-07N%29>6f!41dpKgMFkQHfWO_L<#4mD`yt`_GZ%4pGrChdaoE+sl@O zaZOm?xh!rs$&qr~r-V32s|kn0YKWn7T98fkg#K^L*;fno!y+VIx-za%)8bu_-G7o3 zvEe?B+PP*Wefl?5RGT8ngzYpgpQil2ftts@g$T^i&b%wG0xEdNp_J6y=XyP8K@0t2 zCP){)ccI_;G+*zm1!h^m8`*2F&4S870$LOD#xw%D9BcFgJPk6+Ac*vggo?+vx+JiI`3RfG3)%82E+>OC1fy0h%6ZLQ^o zAgoacS8egE%xC<~Q*T?QmQ73TLo40#0vbDFeB`RmwXbj9TqnVjgHF|8zhsWwx|%tZ zlnfFeA%ABq@hkh#%y7QX{40_RbzT61WOXe`IFimX=|0AiEHL3@bS%FJ|2r}Aq}4~U z<)rFT&JtO8GLBl5TV2_{W=eEZ)$2s?XHULFcW4e`X?}kgUcR5U@5T;_7f3vW&lXa@ zV+dN_)npDZ60$0=_x%J-V*R22z5gG+vFjOdMKHZ{zz@*py#WGN2>~6$kp2Ebn_X2! zx!L{XQo2Phhd#zsUhnfr8&^H0>TwkEL>OcL{KL{PR%Q-Tmr+F4(mipyl{Sa2z3&xVjONw}u4;gE zrZmgy&|{hjkiUGbfFSot9HjLX+J1j}fgD3Lk6>I?8~~Cq*16bo#sz)Lun^oYD z!b$+gRYh=oBGf32#Mqj85p2eIrG|zU-Ucid8eKvqqqvrjeRvyZvkvg2RR`GszAJP& z85s~GNA_|b$1asIE0bVdU~_cVn#yg|lNB!@n3t%=%Q1i9SnFB^aK)8NV^njcKOVbCxPuK_I9A)RYrj##@r5cwM{IB$je>yZ5YU9Fgg*> zwEplc^Lc`H?5XGctu((s$Eo~sS4%s_6L96${V?W0;hCtJl3J{fGHVVWa07v6pp#*O z+M^i*`ve<6!L)S>A_1}^@0Jrl@9{CoaGm*DnAJbgAM8G9ohYiiiM&T!{ET#u;#fWrT6Y|6_I!(=U*1KE}=9wDRzp z+c5W9-!Ox$lr3ckXMr9{Yp7=|II2_sB10p9+-XS)>XMJ89V)Prx~yQ8bQEHz#6}9q zK>NYLZiy*)(vUfGy*rj%x=YY2MeCr4X;$SRflh?KcLCgdhBBFDCwx;SiUNHVu?kSH zCyn>tu06hQRK*11`2gFa-|lq~#>Yjb?sx^MS^;t*u;*{m%xhezcm~R>e+NA5_=LLV z?My~ctCBihH#){9*q@EV>`;*=eXie~PEVwyUeE-Xjnq+$-|Qi@mwsb}#{siG9d?Fk zZ`F^_^b-*4+IzCLqz~xL?{CkN4h*~M1JN!L&^*8Y*;{PsHYH0kp6OHJ-@v9Vol ze@da~4R?sc&-Cjc3g5*G9eX^1x05a`i}BW9&kSwQn`t)g0c;8StY2k%GMq9=AZAA0^%(5`s-NQOnK3oFDT$C&HGk$ID47W9h=N1mmy%D z%KcFlu7A2N_`wbuG3<)OgI}48977I3^wFH8_Wry`>gUT!nBAVQrt&4)Uyt`DOa;h- zz-JwZT&qhQ@C$)Jt3eq~|4t2CP(@Y>L}9ROizKXa7b}ulm8nB(@Bp-kO z8TpyS*I*V-J(9b^FgC*ozW!BUx4_t)T42ID)j~ z0s6@8W!)+?MdSLnC~&dFo>I8J(RLcc6d61f-1IZ9OaXc=%w|J*|43H-GwW-7z8vhj zm_mb*^2aaGHgMV;qcnLx%&NHzlVNF2Uayt;!!l{Y?TGLN{m?$nP^cX+2Pv zZ!S}ZpI5x3Kpq|jYZW!f3ChK?nYNm3%_Yjqv*X2~;uE_HIxhd)hpnDTq2t6ufB>k- z>AOAb6Gb#MlP|%W!BqssbEIWuhkOexJ&G&8?}4|C0ibZed;jy>^U8E~xcIq%Oin0;G;TjOn*B?DHW>%N%CDg}cmUjFtalyBJx5Sh zsBF$EydvN>27H$IYqV#?&7jU8FPAc$MKdWPMSx|eZt@)bb4ViPi^#eHrG>1q&{Ci+ z!`LA~j2K-w4XM?9`(ryr8f(bRFANe5b52F&OwxTFLXg11tkPU1{<6uLPiOlsf*^_b z61~)JG_^%Qa7iH(t{=HFIrG;;dVTPW=eALF^N%vuF^iWDV`~57~Z}IZqMD+{{h)4W8}>l@0h=hV7o1=Bh`HjX0|# zU;#fwSfF_6PLQwQQ36lV5-r%HbcQe|fDJ0&a4~e@ zX?|h|N5SgQVUJe81W}OE32VW<)obrvKD%9uo>Fk)Bh%C>(>N>}!B!`i%8lhd zP!b@S0YMogVTrlJCGgtiAE^UH*v>%LMwblbFT`sxKFzN3USw*iWGlxDp3VHP-E*MM z>)Pl3I)uhFwF)`@zVq@gnmRzMq1aX$|4I17nB_?KuFwQL#F9j+D<`p%NmXF3y$~ja z$0ahHPLvJs&NAyJLC%tH7B{Y!CcZ=n5W@Z`V zGxEaQz{+#>7CCbYg6`E!=QAasb};wDQJfVN;Xk5z(_A+W*HsO1*&MxakopLoLp%viiP0^lw zdtr0!zWr-ZhE4^-(_muLPu*S2*^w!uk(cgn6BaLhE)eK)j0oK#80?Y#DBSIEF0Lc_ z)S+HtH6L2@c_Ez;AHz?f$U7W_OH(=IJPlSB0!QPUY4v_jSo753_wF(KO6Ay-$?LH~ z%Hh>Hu7&bYtPwjlCL5l0yKjggxq@WFS_YHUax}GAUFAR3MPEQIQ6PxjC+Ow0JddT` z9*EK;li)`bOwFq53d>|lnHSsu_zw}p<~}K44G1$7-l?m63HN^};Hp+Bm?5Cc5AvQR zkV-&$^g?jq5n8+C{XhYiHucYMik8r{Yktpuc>I7pDyNzMQR?GsT=^3lGL9ApLMB8X zw3El>fGJG3qYuqy1rxpa6Gk2|`FV!Onca%h8YT2KahRCki3Cl9xO#Q8i1Zw%rHX|U zcbfqIG1B)%>0IO3aQ6$&<^rB&bgG5aUbbKD!@o>~eTJ#pNV=V=KJWYGb8#tvASG+c zRor;X1-Rf24GCmw?*GRm=5L{Er?=|Ar!x?f^7oIW0#E(TklX z@%@_+ODW$4TqN_iBx+GYU>U!Kc7sHN!oI%?Y}o>FKZKCSN-0b7LmIRgO%rN5-}ph{ zxXAlsxN#!AulZZs4D02lJFW@(_WdOY|L?s#YSvm0rGAGG|A0@G0KN&r<$rGOW6^t_ zKOXOT>SBVtT&how0zw55n#!pc{$^4Ggd`0e{lObUdBKjiM6Td0;IPjOtGb{Tr~#9; z=U>ZHcbRBg^x=1`9*TaB6O96AxwsBe|Fw2N3-K>?;$L}Mk^Hd1n7c7>Y!Q(>%^iSg0z=T+iy)JNq#=m~!&~z_mlbq060&F1&c?tw`U?Gz!s{UO z*6SEl zk{_eA=Qh`jM}r;?ayv`+KEyEFh>s_u6U<&xwVcQVd-NIa9u@J(V#n%tYdM>CH_PKo z|AD;^&XyU1^sits$mm}HCZ)n4M9#8(f}$y)V{@+~i{k71ID1&8#&8?{%Mq9U5(41utMfA9Hcqd43fNtZU)W2SO3t{^xe+FV$vF_H#huk8XUc=+4V0D2~{D^vsQqVn=%}C=ZPS!OYxD_dS}X70N7t z||eX1d76w|NhbaItr>f zzN%2gC2VsV1Bqv^+3Szi?A(A=#gFDxwb_+7AmEhvd#3-01oq9ECz@I4$J52}7;(^` z!puNy19@TN&M;Z6mp%w}Bz~0iJLrEKv^T?HzlF;j7hO%dEA=UN6K6B#`p4m~F7&AK zaU+%@O!$?6l%IpCVwi<~`4X8p2~77AzCrkCo3ZX2_Pp}wo7uo%T%rYwZb8rm)791(e*aS^;yN__HRx&VEw^P z-aCMgZD=wiBL&mNJbhW9%vA0*?GWYEGn-f~D4r=q=L2rHork)d_g94`{q}Hjw(DG` zqCCiK^?$is=pTH$01&D8xV~yKpSy(1w@mfpw8=4?B--YvCRgBT2`C{k=41y$Y!0OJ zl6%Jvgb*Ie^a|2>K2Gm&W=i4J%}C{c!TcFPbc&$Yje5UeL&awo%11IcO!Kn<)_|&% zkhi79ee7e}e5&>;;>#-N_?SE&r1NOn`1}H!aLYvubg{FLXE(7dQEu#Mfe)%rsxl)4 z5hVR5M1I>O55G-q3%oA+k_&P=*-(#D61X=Mv9UNF4_Y$ER{(vLCW#8+r2$%j2;W08 z!lGgM%u(p~^USYs?*U{61R$OJXLz!H;Y+w}XMlqP_-rmT0EqCA1v|L1sulNpIUX<; zSAgIhF+wyC}A3C60dWbe!uk!oOrgv;HWb)lhjq6GtNX-6LI} zG>a0TUtDEgl2SRXaC34B-2Kq~A6@~fu%Rm2$@KwTig#jnzu&+x3r2uQtEK(Se~}Ed z2|&f4gJL`7*V7`F->-+pAC$yDuZSc3`k@Mo=o0G-MNl9#e@sKQ54H7|S&~QET}_H_So!*N6Mavmnd&3?L|`NyGel#PpDT@khUB`$gVc z!VR~1t_y1v5N3X*3-!Vd2!Z$yJ#epY4GoggAM-$$B<=1^|%+ zL?l6u#>H!o|2O&L`_$*?gdKNug)+o2e``>Ez-u{1z^0&DG*hM%B1J`JP?0)Xn2zz| zT*|xB7dR<3372tQ-*R&Xn=GnPqG3BRh|6q#5Osf&G*BJ7v+@D{nL#qI7t zGJ2|uA*bh(03|vr#+Z>o@*+^FV~_PCjDzWVW88;qad&0OkwU>bEbmLLu3y9q{l=U9 zOVapAA=Uh$^UbbRT9?Ovsn4Y(%ZX<;4Hl0Z*PlI4q-zgz|AK-vuG+MHUM7i)uM7!1 zI8LfXCx*QsQZ?mr2c_g?W&>p~`{y^zkoA75QQdviIp@1dd z9>pv6>iEX}47a(5C@#X}L)?6?m?<%D0*S(xw-Kl~oXgUL<4+_5_iM;E+}*^2}(bLgQ7Cl;r;!T?!kHTt=Th(L1b}h%7m*T$&|_4 zprn;>9Sl#vOrn~Yo*{w4z7KI|{+go-I$ppBmkJuZR$cNqC?P!QDBXYvqTgc|U?t6Z zs+88z)9H$SI794HT=HvujsQ`}t4O;nU~ZFB`Kwn&=m}oFMmQjU+CKrCf%7+=!@9uj za)81gO20?d9gDSu9htELMb{>+x_>8;axWBgp251nh=Ox3)mGmggW{SQRdUBT%-rz{ zP6>KwH6(*-DmT+wtn^=BYU4&QXBWU{NA;2+4BeU2XORU@ z5ax9PCPdQPgoQk@R8~Mgp#Qi{>T;egrt4Owz#odT`)~58&i#3W7uX@3ck7=zw#sId zUjIkz%SV=*Z>DpLM0PbVKm>_Pn^TZ+G<@lPyUJSE3wUdxR8!RG7H7^6!QGDk`He~j zV2HIpj96zMJS^oP+odELQoV4V`Mu%UPoh+Lqj*EB(9S(x2hZWt1S3=?);Bpo$Fqs= z`n0nx2DRu8G_@CH(QwAN-u`r1&#-*TWtZq!1 zNxr!hd}h{$kDGdFi@!S#-N)~;D1pD-Jq`_CANP?agohyqZG>IQw}VHNZY<3KHkB^{_0>=&+TLOcMN zwtFYmr63CoVxozg5A7F0diFx(M_j+JsD$n#m8iN|napdm2D;XOX96AAaU?tt{EfI9 zD7;9fb`se5U`XvhWc9&*s-rkr-8nDSGbPa}Qjaon%aY9dL+~?cbhmXC5AAcBV#zS+ zO~L8^(sKDFrO;@=lq1bRHwk#s1Ja^!%@OhkM|D=_v3TNC(jKm_lD6n6?~A^Ml*2Oi z`5WjHU)!3{`vWvSkS6<8R_y|!QWymc^Uoiw7Ru_Ql4r5!VbKnbO}(cbv~L(vQR2W% z*aBc@L!!Q5nosNbIO<>ySuJ1qX|MkMq6vaoJ_3aXnN&n>j*S+4R33UER1Y~9t9^CP zZGWik)-KM55i(O=^I!OjS9OYq-zdsGJ9?{%sDpl5TC>mf*Ow;Y2&6DV%;kFR;lfk} z1L?RSd;}aBh0z`Y$JlcL8lZSRNOvAp#{|aud7=tpkVy*NODkgg$fe5P-U9>QQ2D|C zVSSacFN`{u+)R7t9s`bmdGYgvBw2)lD@Ci|)TL06)P+-cH)-S@p|Ow;gGm@1ZNO^H zdfcxin-WsF)UFc#jFj#^QTCJfU2pkdM1#w9U7u9F5|k+!%0-PQ_j2&R34)-k1jU>7 z2z?mG=B`aLMe)16at;+aWb3~K#wn3;C#r$KVA!2;PZ-QEI`pG~HZBjudHp#y*}>-pd8&oGKq95y{4|QRJBDa=Eu_&fmi><( z3(_tE+uSP4nXQWnyU>2{{28eh3&R+wc8`CCGlJ`ias2S=BW+&z_xio&$2(#$BE~1f zqQoLU)S%mu_D&1Pzj!T>F;3zl&ApxgT@WW~B6=$^lUWSsj_=gxPJHnXuSbZuBc8Pe zX!N4c$qbfM{q|lZ**k%tkbER}zmSbulVm{?ochq@-NwI9olyya!A6jI16zpKMh!~z z^f-v6Ip@d<4#V?t3h@O3CButIyEGaZ10PLqhqGVJ^5+x*ckTm9b^3s(Yu&jIm6iY@RHD-z{;HV&^KE6 z5P0%pNLHXN%H2I9*v|3i|G9#@iL}Z$+G(Dv-rVQ%E99d7aTCxs)blS%LE*1C3;H~%EzWq@=!KqCwfhJ(~W0V`Xa2ulY;sg@Z{y2Z{Q zn^a+B+fxXY?46b=@#+U~|6jp{#JcFsapC!yfEoF|i3##iiE0&>1S#Bt+-%o29=&Vr zet3IRFfwNLFvo07nC~sy?v2b|RH}5~p&sOkzM$y!gK%-! z*kOgQWsLrRvn{Xl5#@`dB zd}+lHTXRtzMD5pU!g3AL?(B!0_Ra-{YUw99vB+-}53GEQO=>3*A&GsHs-R1J`8kfM z1)d_sMcOBqI!M1CG?r;n#Ao7iD6}&ww8vLmQoKJPNJ5#!SukL+6GZE+X#IV3)^PlE z-m}^2;qJJ@zyCHAc*9r2 z9BN#8o>tuT3dVKr6dw62o0BY;-f4p<2wv-1)D^FDXS{(wmGIocjD!2e1q6|o_ENw8 zW7;WPQnJB__kw5&MOO`yDW%@!ngG|Xw&UAfQcE5h07A5oPBqo#H9ZIR3=dpFz(`Av*9gg|t1CDGX7RC>x&`x55sE z8F7roe3vHoRrc>0Ar8w$J&k|#ZK)BPls7N#lq~s_XIy!w1;xhAk_Yl5Zzn{1T_Atw z%Ms$M8<1}`%sADJ<+W#be7+$|Cz@?9jydn4`t~LkbRHago(gjI;k+dNq7ugcqC~bU zfEHPBN5LyI?|(CxpFU{_C4}B_Jxot=np;2b*+9LSpAeUK#fZb}STaX6OZLVkB3>IV zKSzVx?vFDydieqmAGn$AoJ39w2MpqrJ8R8I9cEk`BtSOzQxiHD30s6lCEbFd@n3vjm}VNz=v^D z_>Qt>-%~TRF^u5&_x{3pM%EeZ=PSwE8ND@*HzWFY3@}zbUz{|T1Dlh;DF)f| zHdUq4R*2oy*{oa2IGVnOii9EyO*ql72jr^M`_)6GFd4Z&R3h?~y=Ntv%!IFKTq24z z`1~RJR~9RKcBC=|$*rEJUS02)r0!oMRPRDfR1ja$;caOb1Uh5Wvdh0h)!{a?#(uX&-%|N^_9Lq2%D$766ksw z*VO4EQm6@!Lu7+kCh4bJQZ#u4}~C$ElEZA31+V6+Z6JYYG%Mx>Rndgn2DGtx5gMqzeO;A$wa>`wry|LEnyNw6un3AR0vuz_cgedSUpAW0@K(@KJD<~dq%RAFd0 zAJTqX;Om!ta7$l!3tef>H9B)bfk>X4GZvS0;pL(wFXe5dO_$k+Cod>zscW)E_}sd3 z_RohWgYPe^oIbi4(R%dJKFX=GJLen`V3P7~&1bL@0l34I-}v?&o_X@i?dHTZpETJL zt3g-YO7h3^NV8EAcg!V?Za%&@^uwgfUXG`dULsH1Ht#v#?s>x$(a(ok%uM=E%bXN4L2nN% zA0>J~dgF~W_(Kev*^MkWCnznAdC)_`X?5gSJuRGSghQ`*Yh)zoL3ZP}uVnpi6dnlg z{g93zNHb^1@k$kw^o4=aBfC28lf#7hSPeYU&rRy++Ryfa6g;vZP&U1sRue@2q}|+F zJfz;wnbz2zTM{<;?sP*%{!51r0!KFM8OQ7XYKf^+`IO|Jh8EAHC#VbV+%rgEXSWGB z*~|~2>G6hjNfwdJwvF519#S*YPZ-!&6Z!AW#Y44sd{_4+&M$26NiFV}syMSlxMy{= zs+uyEoc{@L=s9fW$)nTUATRqcu<~T>Df+3~?k21$gDi8g&*=k?ZCN_K(e+Px$~h%P0TbfO&V$>82Z@tzk;erIlC9GqoA z$p4&@NM?`8?$>PLWmcsELf^jMAJ1C^uXC-*3uw^LXLg7c@TP6)XrbZK#l&pFW>R|z zUmh7qzgj&fUTZmP3+3X_rwQq+#+HIP&5e*BExr+FQ?f~xGHK8i{xos~l#~cf61@I? zqq8_lGKzAqzWCje3yJBenVNPmibU;)u+2$v6w`Z5@S80PoRi1E8A94w{-sckzM-D} zg10BHMXdSBL1kxDAbMo3X7!os(>ISKcx`TYa{RjIT2ksV_-jahBhld8yei`UO5H^2 zhZ3D0A;d?MqMuAvNcQ|cdu?)P>I4SX*ggbo4`!KANJVN5k8b)e?j9lQj3YeaoZM{j zU~r*2^-JQhB)96=p$}%GRF2s}WEK}D(ZjL*$GZEnOayY2^N&L_j9;AsQVaPqn{thzw#?=m5<*1R*V4REO4=Y zyL7O2`sI1S& z`xAHS3-PPhaDWarbZUP^u(%mLZ;H^fD|*xIv`WxhWNI*T{*Y~_<<_*Ax2u{^t2^@W zTj0*?W9&cpYQjk|ud?2hitQ&7L3F+fAj*GSmi-A2bABYX%4;g7p-j3!iBkGH{*z+$ z?#NDYNl{_AYlb5+RbJgiYf?MMbhUOS-|+;62jgG1#iFljbw`KNy)%+1_y>KW5!?!$ z9C+GmDpH0uIgZ>CZTHDa!aO2;!`G3fXT!KATx`XaXbd{SlY}fD7=`^yr`Hqi5g};* z@ce0{T(gdTCDGtTIH6Hy9^a>(-ecPC{)%ezh>A==n^e^y)NpqTVnvEas4+LQzM)9Yi3OG3wYle;f}{JmuUGN7#Y$xtco$VBtG+y^vK-Ff+aAMafuw8 zvt6B+pLi<}T$MDsPkX-9>0xu_q7>5|2k^|_Ex0XO|MSeg@;HT!OL2KRttse=4%)a= z217u@re1cN8TvAV=>C{FtD8&tTHlsGOe9+qlDm0nioHLz=bo>M{?!2vv4`3&)Bl-q zhq)9Z^W%rv^96{-I{FXi3Qc5Uf<1iG0=&xFhr&%!Q|8Dak-nPi=H!%zRc;+HPc z%8=sf-oc-8TEQQ^w=@IToLxkE9dpLhV(S@Me>$TzFG=Rof38(f3(TvIPJOstbt>&8 z&@xs(r!zIQuHlc?o+9KLWU`FV^^E0)e-6ZSpDBKhKBv zduxAL$&KU=^VRXT$|1kDPyFUbt|=SCgCE>3YiOr_JFOUB(WGxKbr0No>ErO%(Q<;N z*CKe4UtDz6qCOfoAgqo4Zf%mOP!AUyV9zk})WS~x<9@n_P#w&-1azrE5+raYVq zhrqi`wnPawpx;mfktvXLTKNzdgT8UG?^_X(4BGaa#T{DaJ9iCK&Y{tc7&rsd?K2DN zV7zaal)49&X%z%lyl9%JG!!ovR*Q7ntRpj}nj{}|oQx#4mg+(_a~-F!8M`{d`8bGg zLf1tasO*uJf6?NNLFd?DCR6{OknGapZPq}vPF{KwtLpI3(W_ePlCLIf@!d;B>>u9{ zxFc5;w<|8fGD#6uz9%SUW2!^mfnQEAeIv8h9;j(kh z3HM4K-MZYko~k$Pqa9bGgX~@By}Ml$a?9%)H1=Y6 zs>!)ANroXJ7x=88y7XY_Je^npZ9cO3vaTj?RPNPqcZQSU(n=AOA)W8m*OV_&h zn&X+P_8;*ogU>PDJfzcAdQW@2-}gNY+T4f8jN(L-kQUi201x}gUIl%)qzW1AQ}kjY zfjvVPOm$e`h8KYlE|Cy9nT)IPni_cu=f(p5i0h0-E-=Z{tFhT`=Rr`+qblLzRo#D4f+#nuIY(YL zesXJ7Q3v~tV^#(Jaf>%;RFJQqz>5+q+9Ped7rt>xxI2VvZC*V<6+^W z9X40ZRkp;&BK5@S(keEA@PX7aVavfT%dTF-*UX0u7e{^$-_{~VHmR>9lI@a4(wT&u zHUFm}7mQ#W<}~YuStGuuK5X z@*Vu;G@l}IM@pR{$W-=bHZrWWJ^ud;F01PtZn68+uwgyfii`YOB3sLx@o@PDgHhIp zg_hx(JifqxL!uB_%XG&>n*H;U#CcIH`8;jV9yk%-`KpGIuijrh8VRnVZ{NBST-Vx^ zt&={Vmna@*z+defe#aSvj68yFPNvOdspni{rLpBp-R@y{pX2(JP!AkTd_nCh9DJB( zEb(&T7oFGk`09aI|C*BfL59_%tyhiMe?zYz$S#!Zen5^aFsZDMm@dmQvA*beUzlqh zyk{T{hvP@=hBh~|^_9%maeZa?9&r`y%%1wDbt_B^7x4cY87+^$CKlQr9vTG&&J_T) z?G%ORd*Klka)dK)PD(bs*7s~BSFGOn{if{Xdf1Zo3og1JiqQ+xUyX-Njd!sB+Pob7 zM;ltd|B^3TGn^NEMjn+9p(xg;06qKce>RsU9=#uW^Ttym^BJcMRYJ`xw2oilI>_b2 zERi`7q?$N)ZLjY1@b>WdpZVV-vpUOSsRf%j9plM$UcVKcjyJc~QYpwXNj4;op1ING zO;M3Ys!d^eRBN&Fa$nvG@rfHJUaGilJUwPU?9et_s%pjGx^_CNBtX4$)EIL+bd7ZP zp8sHW!)0q`2un9AB0ptqs2u-(k%_~}J1lgLogKCAXELODOG%8)MdRSao(mo>zw5MG zk{x{|Z7albc3Z&+&r~~_wE+@!)7Z<6|K5_VNkg!L6SHJ1f6`fp-KL=Ohr*W5;Mx$* zmQAGfdB^B0Efb~_!!%w_{Y!tvPd5ge@^xlIE&f7-cuRZyR*j!&kPwld-cJb}Dk?(`|fz?R&Y=9OhOhH>yv5 z6jEz{K7+ru{>RulMVmaxA&IZM5lskZrLKoR-IFr}@&~WhW znfk8N)1d8M*1)yUAa8OHKa!3KFoc^=-UR*YMr|kuMaH>m?(nwfPxEXe{|{5|9gpSv zhL1m1$gb?nlD$_p*<_Q#LrAu=_ee#_C|QZ@$aw7a$cRu$Ms{YhGs?{Tp11es`}_X> ze7|1rZufKD*L9x9c^t=iUczx!)pmSn?*N1<(&FcqSI0NUEG|C<8{kRz8dKBVwL*>wa z7Rjxd|C`N`3Z5yn^xiSr3%gA+s&;-%8T;#_M7rP2h=!j>hqpv#JD@YpK=k!olh;OT z9g^ccuc#+H`Kzc_MmBFTv2#)p>~#%6|TC+wM*v5atvNs&|BR@l3m z#iroP?!ZT4+9+Y-(TOI4O=&WaDd<<#>W#$#U%D=b#;o4~lf`@yVK z$?BcrNr#T=F)waN$Pv8KlalOr$H_Wgv{Nvl^nHO0%Or3gbvYv*ZSi5S+LzRst9B*7 z>Bc>tm62!IEi?OD{Z*`#RCO|L4`J^nIl?#h{M69Wj!biysu`SDE|BtS;vH zetX9Aa@tdQW1CzGyElx7J$(Ct>R->n-|EI?`a7AE8mUG}y0Uzya8oGzyYeL)P|Fp( z)DeP1{~p5kFxk`fYd}219*0J%{Z_c=X{E|?5|IA}ZEpDP_c@_(xd=(5E*A{R)uau5 zo4B(a^2&t~BFSAH%_hn>ClhAXs8=4&PbJh%Cdc|dxH>1elS z--Ldq&2lunXjX8oAC7+_e_3|abk}9R|I6L3HU>UYloj|ENFEv)u6K{|httYfrSw+M z0mssp2N8XvR(%yaHPYXx1>8%WGfp!mu z-(;@Y7Lwrp3Db?HPjrnhI^IR{#fr)kp!~vl$sb5EM6i;5Ot9_x_Z0`V?bFKUsM{m{ zeC3%KC?sC2_*}Kq`hKGH0zy--;Lk$(Aij-~5U2*?p8h`C&V7V9n zMELkm>h)Fx6fFJPwHrv9*;KOSGPP)|D9_CiSnQ8@v+QG2w_n5NO(7zGuXv%b@7Qw| z0CR!NrR40$Gi}kaELTw|@t3jYsd7@+Dal&hb0aPJoVw>dbdC=M8r=1h58V`lmHCRZ zg+I2c1x8aK3dPEX9Wm~o=PCn>TND!9G;bGiPVzZacPRvKiTqc+$1fS!o#Ttk68`lJ z^X4YHzmL{uF!yHNPmQVlZWPlfgA*ytetuZ@6M{Ig_O3z?8I|(v?Hj|24s*Dug4($I z>K@8V%*Bi0R$Iec&6~-)ceeAK_pcg6L;wNd4Ftsg&Qn*dcK?om4<8NKR>g&j{Suhm z4l_L3O;V>ECLX)yApFva>?s*BR+eLZha`3__-$rSP(#sMQ{BTqeQ6Tg3I9+Gp9=1p zzf`a61fxsCFU6h?NO@ON#>Af-^>`|)t+B^LKzkaRe|o3vx^dFb)GV-xJD?8GA)i7Mka*@=beHu;M5^a` zCELaIvAWvJ0nczy%Xix?tH|9h%RP*3+CBJyJ=$%qYsx*}G?=$NL0#|lT{Y+WTC~{P z_MyLpwXovnW9 z6Sc+BUYzn5>J@X>vZkW!9KpqbWgWXjCLWgFs}Pjr%Ve`wzR~ARNIURbP@I=>p||wk zllfebM}K}#XUGha1%i~mN9GPB-K8gu$+L&tHQ8I5F)n4i+dOxI9xh$O!ODsC`)xfr zt@8>5O%Euq&EBpV7HW1zB=v34rtYD-8#MnIRd;WzDl`U;oDbDrf1U$-f8e{b77T9; zQk;FF7LCwhh2MVww{!D8rh4>c+oQ11+tE-SC$Ks>OpOX3{rXJ~d}y|DG>4E_66QGS z+xrUjTDhdnk5iSHqGAPwWZLRaF>L2V_BZ4;qZHxLO1RCuW4v-s+4gqFFl+SqTrLV# zkZen#Rh0PBo6K5hVezLG*}xoTy7nb6c7LlKja?rNk041CP_}i{Hkba>8{HJB^%@B9 zNM}1QQB%6<5*fInQh;aZg2`f=dxk-<#jLm3K&gOD>oh`zt&*iOCgpxQ<#E6c?)CPhq%_n?-2#J#eO@1e&6Fs zr23+tS~0L!@I9OJ=aFj;@hThI$M7}CL#YjG>LcS5Qtfdiuf@69pADu^c}|Ddg?RWx z&R>t!cX$>dmg2eH+36wuC*F-Z*ihsCwyW}T9;%-0rkeB}_p}uO*uHmO-*+Jv7Hg?{ zNEGh6RJazMi_8Elh|HO6cWhAmv%F#_SB_mQYW@cxFx^kHR$?1G(;Wk;HCyGrSG)(8 zR%MISKdsrq?G(2LJBK*3)t>DFF34OGPM2w}KULr%`$v{-tz6WV!8zT;{IgaTK>sOa!M{rS23ZH~Pim~NWlnk3> zQ@1*CY!*D(F_lR4-XcJo9R&bx>h6Vk$l3rC5y{l6cCzPq@f!C_eU z&~dww_pZ*_l?YFnt=LgWNr&^jb+#M#j_)c?9UWx~o*ZYKINp?dNZP_U*XaBE!TVkK z7OH*9c(?D;-H){h`Gg9?j@bKLU%E<75i|YIo1?L;>DQ0uX6MZ8oNwy`mCo8ciBhf+ z9k$VMoyt~woY<+H4UAZ$D6oYUayb_ctQ)Q~GtHkZOTSGIFJy$>6Ln>nVmACVPZ-%T zAiB8NHN3MVxoa1EaPR)brG{pf0sS|vk!ocJBhOR0NeSTCR3N$NBjv_Fb}IbWSpmc- zea_B{&wmsVwXJLZpkfY^N0 z6dKU*HjZLbM!C%c?HKH<+G#bOw=kTD`{$mA#Zvqf8E_~g4OAT|k%HQwtz?GGl9N9r zWUgF6naka6v!HkP0%Ni#%Y@*&At1YyhUFF)!!vdXm#2Q!^(SMN27A`N6^5p?n~Gro zAtL$&OK6sIj^l@Bopp5l?M()mVt(7DEs8rtHoPEfPsu~8a}ZaXH>-ogTvSoAWRlka zLAu!#ns}gjb*IyFnd#2>1QAdpz|tXSn*uOZrme}9mI5;fc@KsAKft<^yP*Uz6uQZg z&Ay{Cc>6>52nX75`511pJBfML{>S+VJU##EM;ZT;Xk>0;v~XibY}~7)?r6v5o0z0v zUXr(}u*DHAJX_4PGxGs;7v_zn5rV1S-Q)7JH5yJ7Xn5g95tGU7h-@+BJ(7c;vW}#P zpP@I=Mukb=tW!6BM@J2-0UPcx%-er2u(?UHXcMz!B>9-a;l8V*wmoxS?!B~L(Bl>k zreu!g9I>*u^Q+(T2XCj)(1)0Xp09{O_{;^C;X>Fs*NpqKACN6D9W5<|%O7dTQhBW5|>Se2Cv`GfFy z%D+d{A1)4ab6qRi$jZsGJC}6hYt(XtU~D%3AI9i=wLtsj+E7W@m6J^63_XtxkmR)D zaI{g^7*3za+7;9T2F34Oj4L4R+TDe%$Gm~Y#C~#ND_T?kjxrQa=>47~5bFbO`5;y@|tw6m*;c0>}hPcvk7wK2*am}z!~R%)*_eDSc5 z4;8~aw-W=mh@|}YLeaQSpWHS^bA|hdV;xP*BOJwjblC51efG^4v%O{;mnC0eWoVi< zgqi4!xIkv4@u*`+;rC*pd8F3|K?eJ;N0I74`Vh6U<$#!mm|o>K{m7pYG8Bm_9o=?) z*5C-sH-;ce_xrvME!^*xlK=2d*JEPJh zV=lP8wS$I)aaCBLm?dp8>(Y*<*m!g3zpp8=H(%+CbR;lbvcFzbqOIrTTp+;1d$+?2 zv2g&rFpd_!+$*l%M~hkRV`1qQ|J8g#L9s9(qtd6`Tm9B0c#Fvk>|X=z?-T94-#%qa zxtT@GRhWoERS)&uDav`3rP_;-Gf-!e9jy0IqtiFK1tt!zE42~O+<5@L1d~X~rHYqh z37TRZGPi;17Yu%{+08xaPj`#03*0zmO+GHp(TJ44k8>_5rd(82X^7?gNJcqSc zujAwA5r!cNq^&F(i7?y};2LW~M0+=+j4vXvezD`gli`!$9tttD1XBIm>;{W}FD9$TwD2{RXsN?<$+Gv5pzy|9vSFnXn*T zuLwnZ@XrZu;Ohp`oEH;Vj4#OH|5eV@f|O-0dgW35uQfJ~bZZ?=cL+k9YXHI6YupYwvP2y}6otl}Cm5?tlu98|3%8ZweT3N>ha@JHFtP zEgz;peXSD5j_9z!tKl3UJpwN>fG2__{~6YRfjc$yR;;=A4{6IUi)y8L^ckTAOw~Ka0wVn@ZeFUbGMn!`h1bP{U5_N~)lj z!?#~g;te{Ugs}7BKb$PyDV;#Mol>qlp_;V(>1$lgTPt6jr zXRGoOx%d-IVUjVl%|{J5XwL&7YZv8r>@m(Hj-^kjItFn zB^21_(8MPZ?a3s&z+djVnvqk}hw}3VJQJ9bA?@+WnS7Ipn?IwK)CQU7XXu`GX9?#K57qI_%;Cj%vQX zxfJREM$W3`t_+7Eu$a9lGx&5j|J+{Dnvyy~6+)`jru(rJ^_p<7joRZuXf0E@h!Q0# zELG%O;5(d;XLVcZ!0?39m+33(`z6d4PE>Ymt*&r#p0m&Aqdv5*(|Rw>Bu9O5w;|qR zw9Vc5FVu}y%7_IAjTnVmK|Tl#E>ulU8+Z#GgO^Y^r|LDe*)f-+=A6{+HqkNhK#!x+ z_Zpr2i2V~I6PU2`ipl7F`?VH@5%~G{eah2J&8VQ;~ea~B~+S{rs_SEdQvb^j0~%xX!>KmU%_E5F*1!xQV( zr7Wd$k*R-V=y|qv$fXu5)mAmIoUM<^V1Q2un6HjMQ?V`6{wm6Re~ZoWs7w8|SfHWG zQ?6!HKPx^PG3@A&%tE_Y%cOA0N}+?TUf$c#wvij=oJ>i5x6~yZXPBw->c)uuy8diM zyor+EED?Y#d7V{e=JB>2QyuHK1F31x{DwDQi$YT{%n-E8Esp$WAJWR{oco~EryTZG z;a|0T$4x6}<54V0J9u$-bx0{cGIN=sU~wvBT)Q?r{g)PY^XYrAt~lDZMXBB_AeiK0 z7ETqD&fVpUa-O;+Trz4gv=UtXql#(JWo2O39*NwDFVa!MWkwn3dEk@Q(`biZ99$8H zpHlR?i{VSX$-#PH=kJtb*!25*4TfgGk=+4VGmdbN(5`c^sMOSJToPMVpV2*@KA7QM zbuymPQB@Yr^vn0vY#ny}78bgsojy6Vbr1?*AG3x(L`NweDV9*%=t17T1kCXxADTDe zzw4_xygeh=1P;FGJPd$R|K((|fp%2VRLhjJu9=w-e>UQ_%6ea9&hl;97m$+K!l#TU zI_><8_SP2azhCM*j~SYez3s($@I0EH!?s3#=UW1Zd07^HeK~@(-kZu&a*c0uv&O$Q z_PA=Nid-q?_k6Y$h<+Enhq=*p4wh#9X$y zNAn%tGlGOjcT$&Rua*cAO%!wZ)@H)q11R?9CjvVYHOm$+7|SWg3jCX3Rf>LYHSv0I zUS8d5U!`)a|IjV0wm+e2AR!@EPN;-}PmjmSYx`Gf_F4!}X}%S|qpRtyHS#q^0FOJV zbjLqT7~a(x81)-o{usfJixs$?TNBOkxgXpclj4GJEk2l(^C6+WKcYfn%ebmMzZfda zL`gBzrx7t7HDhoCcdol@&6TRigeMF@C0_6URI@jM`eA!@eeuD|Js`+`;q^c0i{4tg5##h$`|O5K^b4~S!;4}VevEH-j3etpp@n;*AeP~a6x1Aj zKpNiuHh6#1fZd7vyrdQUvD$V#6 zt@`XDk5QAWE_Yt>H_M$34?~MS_eK~S>@@9>j733YNyG9GTl&F^D;$er=QRLB!gd%K zc3Zpz^Il3G*<}5+(e$NMRg~9fCyJQMFO8wqy2}joxf9#VGO<({6Fg_3h2_6f-_5ER z-UOHAA~e1oXRV`!xyHp*f*SsdB2L=P|2jpS&()(ET2uJ*o!aNwglvEmINAt}*qZ%u zmG355t$f;`=DId7l^rvKG4F2F7ditWpk(Pg2ek~gDCsWx5Eat zE`KN?LGYXe00k>=va8Z72Xgyum!w(?DuAQRZDNaL#VrIEO2&>3QjPjplwAF*kt|_| z1L5X&Nb=BGL)a15w7(dtN3f~rZ<9%ZnAe7HfCnE%52_4bh4kV3Z(0eFS6=#Ey7;RL zyS=Eb3Rkhrya#$kx|c==?vi5#oGDToZCOhzjE^Tn^I)3cGg^%t;`3EFf!*8@luFyZ z&j{>DTv~?Vg13d^Ow;BAPelDJ!2wI39ce8>*r9v#Xor)Daw9NxcKUJ;qhCMd0c&Ti zjHv~D%d422mm#;yY^hM2x?@$zFU&NNm5$`stp>2_5;%B)Q-~n0u)#F*Arm?*o#f%#cr=%>Vi{czg z|2%-6A+ff|%(3wmhwgb1rGd|6zGN%SAwxZ%#bF)dzEGp(4s8rN;bwym7j0_->X#{$ z8NR&?)$dL}HxmT|HoEDgb3P49bg@Ni^Gfyd91~5W{x0wBHwDV?dGU6oJ+ad8Wl<$>Nq;YJBQ$u`y4xFcwy-z zAx~ghTrx%Jbspw9r)R9lag*28^zT0fDLzYCw9if_SOE>5`0Y4K_e8h$cuUN*#ea~x zmb7n`Ei?5cfc$fu0Bd#V9FJSiOWd!G?=je#-et*l=Y}L_jQ%8%DtiU~IMA0~gDeq5 zt!-M=rbPnlL!i2drPvzKqEMNsU>fK}_YqJ19{OI|r`gg4T*$!fq(API^p_fKeGr#$ zH3LpWdcm#hdy*f#=GbIS(QM(W9t*;`4Dw@wq1e+ zJ2#A14Rbo^je2D09zmvL{@w6^+MeJYE{ZcZ2ebmi45#|eK?|j!a;rn zd%BF|jAyJ{0Bcc?RbP$=To$B&{X4{lmBTkS>Ms!QrhySsS5g*heVHY34Jdy~Z*$I4V~2zoz1Ngo2C+ zBfSX1H|ojcs1e>D_z_PLDp(Mh+aR^S-?P7+qhLsM5x@C8XOZEnKlghdx#TD(BQtdh z$S%RAv%MgwP5@3q+S#L%i=L@e1G;=6t>(_BHV}Ds0)4J77cHM>r_T=@Lqj|GlT%^=?fX z+VHo)yg+z6uM!4IsQgih05GhUZT@FjASg}h+J~xgqK8T%t@zHVg^|u*Eb(u=PKg88 z1el4WlP5szxt}i}yE<6@Yg!LpcgHuM`qAkE^F{IAG1{UOo4}(kSudniX@Suu-zWmS z+t6(c)4H~ht3v5`|MRl=EVXZQ;1XxDOi1K@xJb~V^zw;EI{{>>ajiR2+4R8%23V!;|5sa*1@nBzz;%}Bgp$hFkFjH}4zjq723t@67vaaFk zqFbHw%@cp+=72Nc&qSeO_)WdGM|fd8zf%5wBt0X+t68nk03N~QyA%)3pBki9AQTmP zqLXzG6~QW)4l|4hqPU6DgA~(7qmwu5=4U5C%HQV(dhE051}KFMWAs3rAYSm^|gaf zne?Be_y4$Bxb|rvAs>uRLlJ9dIVWKm+G2u34;J7gb~bv@5sF8PzwTPj$x)xCyR@nx zsRr-LaKFvXnB?<^P#B&0%CX2Yn&FQv9?Ez)*MO~^-NKbhtj+&420b}bSyNf87o4MA z>YX%Kb_}6{K@prL+98q!;KI|RBU@bXr6{`jwx7cR1l4}89DLM3n7dTantJrPpeuIg zNH`3J&Y}tm@#Z@R<84wXFJpL*mK@h=U5(R^kfV|O#@y5fhYp3pH|xpF*~F}V7d%#p ztW@*<{!nTgXu$iBta(l7$l@!h)p4NIoafW z^Bh&)rI#1Va97o)Mk#u$wnhk0;D{yoZvE{LQ4*`O867O_YJf817TNsOqcbQ}_y_Mi zoknV4`P`uJP+{$bnw?ua>)!Nl`74*7;W5C8bG}uE^Z;(q`iLFc)5Fm(bUYq-5-)s% zD*U5&o`P)rC8ERCgN?zJ1Mi9SwyGo8Wlg34&>*pL_N)&$r(gJI^Grbw-Ak$3^x%99 zU3VHCLaPnZx3PIOXDxnE-;uXlWsdK74iPkUvQh|hCz|cr^DR>8{q9D%m+N)V?(ReB z6WXI?CL3W`-94kMU&~O10a=?LaEAW-^vQ)T^Cm{3r1@Ng@#=S^-~MBZ6X<=W0!c|q8`I*g209-+7s(MR+0pl2Ka{FdHt6_ESqr1_5>*}5$< z*fST?H;MTXZog+matK0m>EF`0!1m5Bukv~P~>_I?D@ z(F_&M<8s@-s-~PlMF8Rx0mKv7pupP%M=ssNzm_?mT!U`JdRI1`^HJDSbubsZxWWc? z`vCoZu~ZKgghV!o5sN)4vv4P!$;2o=JCb#Y`M%imyhL7~G{EqOnWmEC;$MBidq3cP z{Vy2BIxR*J9gGNHW^Q=buKp+cZ4pgvZTm84Un;;Z>hn}Qr#pNAFMQLlRoPne8B!|g z5Pps8s^JPCit=b5jG?$+P2kg=*UZ>ECrMTqr;5C90O3{QrgWkv}+*(OLffwTz5GFuDcS{c=u)O!Ip&H!8 z$wyFe=@a1Hf)VY4`GUt~rsT6^(V6zcNeR3gd1n#xnD5uqS|hRE$;xXvVhMjH__y2M ztgV^S8OV}Aa2iJh47MyX`T*YrZS}uOR(Mw6;Q$zKkrU3r&eDjrj=YHWnavc~w^Ojr z!X#W)Dfc^MdMB5B#94zn`phrjJ@U) z<@TpIH{qcOQ}MKF>W<|5w<_na;miG9;2Z`33Mp6_;^?# z<&nI9NdAz^-QQ7T|GJNEkYiM+w|n`0-0ej?~TF>H#BTGL17SosrL8+@%MQ)t}~UfA%USutopQ)3JIs7d<{oJ z5H^H)7mbD7M$joxkJxmP&DjAUwbHS>V2B*<7gyE@)?>Ox&dIX`N@{{gqEt$orT-+GNvXoOv=Cd z3UQ?xsy(w;L2|l@npxF}a8bR{=Qh|8LWL14G9F4P2<4yM6V<0Qmea29W1B3%)w3MQMf}tBi~&6Rzy75M_}e~xnTA4%)j=4iJ%liRbi``i zavlndfJlf>@z6v|3>3IG+(Vr^jfOoofSB>(4H2m!34}WK0a<+e-_O0hrYZ@-!|b;x zWTfXIkpKC=fm|#b^C0Tmky2d92?X+K?ohwW>ccNkKg$ z%E4D_ApK3BmFr9e=8R|Bjqq9oo&%jcv5mm<8;Lk5hs*!P@;K(8EDgGiv>(jfMR9Hv z4_;`}@sC}CzFF9}W9lCDykj{dOB-CK(2WTI73qx8ND($;?I6Q=?Hc)qhjB{9daY3e zKo3XdcsfvO58odQ`y_b-UlkC7eyTXF39xTTjRx5SpdBGF0c%mc9{dICh(DtPE0N${ zPkRQXkFLDpv0$gaMJBVKq3%dedhej4bl-c9UpcJ+55?L7dkI{7O9dp@s&}>5SU0LT zhkGAi*4UxzVIV|h?(+@bcbF*3Afxi@IeaN`-6N0qbY;t26QaJ)v2jIlBpZ2cJVqF; zQaEC7l#u#_C>6Z@v!xfjfiGbA^cNGkdvyFDErKM-^dUR5u$IcL1&B1sP_Mp++uQ|1 zxYQ1BqfjQ|wzXyKY&3Y`KNEHA>b>qh)*Ctcg=gOM0pM!k ziWBPZ;cWoskP>h7h2L-(eE%2CMN5AhJXYS^cyaA>9^S1mkYBZTq7fl$Y{$Z{HNwYc zgV{$$_6ZLgQcF&WvMc9AD$>#Uc&&@V$67CjI9_+p%NgRz#i3N_E6ZzQQ%|0{`X3bE z$b;OJLnNt~bUh!DY`iirN4U)laHxy(6G~hgu61ylFxl=I4J)c< z$Tl14m2mf;WrW)vmVlf*!K{DRTW7vPx;L~MH#aErF^GptO?(uo@1%$6$V&sE@r>Ds zPC(%0$3*~&;;!`CFN9o~!+*X=j(UW$f?#rrjSmeCMo&@ro)Q$387G!;Ykq05wi~rj zk9;u-Vx-G@E{1)a=M8C;zOQ`h8N4Z7=Y}#46e91rsq$=~;{I@dvhPGT^%BvZC0Oed zx*E1$A5=1Yb?+w!i$8d9jP8N;@J8*Mpv0f%_-!OBT8}6xfy4Ws^gkZEPpp zuu}awrz-pc#Fwg`-zhd!K=8Ag-{0Qj<&(I?I(yp`JH2p(1t&7b1%mg(i>78jOol++ zf*3CHfK>=2*Vv*VT=sJ!X7#2BivzTnk0d|qnR}4TltI9)j`?~HA#uJJKefI_^yJt& zvRw-Q8xp;LT2b7u6@igUhFtXlcXbR9V>{^IMEDQ>E-a8Rd=l9qjcUA7J`ce}9#gl$ z9K|gAt37tx^K$J|z?LSA(e&I*3)?IgcIAy&@$vibt@kWHQ}}JNi+a`ra0O|E0B%cq z?Wda^$%S!tKL9>+&w^?nvQvwm{oz#$m$f9X^w&>0k8E%BM_QAbC_x-Z?S+^5_)CEZ z2(^i0zc;LuH~(Mo&ew!DN&Zk=1Tkf)YTc{I!rF-L!#3UUnKNpaU8*|wD3Or$g*p&x zsoeK4l1`cT0(`&jasFbjGysZR2^Mmj3?!aJHPDT;{eK&zf@uJGAstVHwG_)B=Kf(; zn?CBvk&=FeuVU2N50hFDl$`iNP0(U{%s76799H4u+%YXmF_C{lw2&yB88@r4Is0t- zNgoPi5%4*ok+6OKEi8cs7(nhFR#=%%NUP8}5XHT}IdK0C@eNA4OZ;z`Igp}Bs$yh# zn-U&rbNsn9=H=?mOMP2#Io=c3!#YsOj+M! zD1H&)kzF$N5>K&9qrY%orfw24S8&IiPyJ;;KOcMB>Wu{5X| zHIuzp-q@3*wE~dVf-mm%H*W&Fuq11pIWvB8aq1xRiF!<{1RCs)gLZdd>r?v3%eKx% z!s=JJgNy0m$|ac1(c=$(A>JuAYxs z3eDhi5K^y=WF`8cX4KiY3IPC(sT%(KeYht65sYh|rt0X$g$4(-C}%`sEbue<;O5k# zrkU-n6F8a(1JXQmKLSSlqi&lf@?tDUjr)aR_k)34vA66^P<27ji$8Xh(EJB2#7H4p z{mRe)f(s+OcUZl>o0e88a`}W4A|E=Wz&7yPAb`*q5-?o$4f>Si9`aqsLzPuRO`-?m za3K+JT~TS{O|T&ATVkV(enGQN_1}l``nyXC--$IrP%u%YnIB-B`xiF4h`+IG0rA;j z#aIiGE=3r>Zy~yQxTvz6({PQ+>J3zQ+rQZp$~5e&C?Q6*)tDfO9_I zOc;WsL}#tPV-(@g>tf`5^9kPZ@@MEE3U#j?@=lzqu!2@!A7E6lz+ir>%T}jmkVS=h zF1++7qun#WR}#5zCt=wgVo*4FuVwHU{AM%?BlaFCqrY;gB&sx|S*b-*e#={`2Naloc^o;%wN!7U=!Q z&-d;=H*q{;rOCFeAo(apji864@aEktpc-oX z!8Zq9^!$|*-xQ&+TA?)GL|&mJ((vo84)Y&{ki+`Tos8*7E^H!B+I*ziEh(4gG*YE; z1ML;T8idjJ@ZSCIAC8*rxIa1QKD9XXQ1C*6T{%2k5-}kl4SBJh^m@4Fn_JEt*NDQN zyH?#%LxP}*y~VTGV`jxZ<#eg+eL^@Co>x3eZc+kSC|90JaP_t`Fy#3m`RXT|8oCdq z*06vyz4Kz^sDpQYOayG%VIy#Ucy!K6QEOf3J@etsd6=M#D)`{{qwe7OwIhQqeS2gk z5ve%>OMZp&wv6nK zmcc_QB*-)6&q8&7rQ@rd|Mv?v1%j}=UwfC}v8&0AFMd*8*;gtnPYx%%t#0Aom3e$% z50nW^Sw{8xoigIQD+tt(etGM2E)lCBmS+-B1IlOVC;^%!lTen%6&5nTMJ-B9(^ zjT;qq23QmCAGT8IUYe5mgAdZZ)+<%(4}*dPp~K$U@DcK%77VxaeJ{ujP?;zIahoE^ zkqxJmu$eajQN>j#TXX{)m2V+tRxtEQ@!iHlL3`?_KC%;;TwqK(56DLdC>r&96_a$W zm4tk?QlP(1eEM4|!jk;bSAgekuIM3r!I`@{^Tx`QcQyq$x5LmNUT5p2O}ztU&zNU3 z5Eq4y^gi4>@=;8l64Rh-5de&-Nic8qpv;_b7>aGD*0ZlS3~dT#2^I0T%VE@k`z7Cd z$X5MPaK&<0Y2)V^m`8BQ8dzGSJ?&Q!$J{f%J9wz@tiVjL3>lP$cv>Y1g;DAAHGH9= z<2|D!>vYER>AQNkqZs#v03(5m` zb|sFS`wkHIfb&fCO07ST(P{qI>3Os~X}#tQBbqkR^I9v|FVZ{N0&-pRd_q5ux4ho) z_TjQpRf~CBq#%&Oew+gu(w-#iro&82K@2jslCB4 zfrE+v#p^xw`k%|l9CJ_WWQiSPBK(4IP=$f4fq(PUAV=!u2+aQ;Q0adf{aT%L8j`>I&?43abAVNpy=D@*?okwZl(W6dwo89JYM${X4?sxq0t+ zn$e)9(QW?fy9%bgNJnkZi|(6@=}(HS|MBBEl_rkZ%b#2*_~!{SnG1G+xHUa_^Du`mdqK%#P8Wyd{{&cxcb9TCQlK9fJ_e6R1yMmg$nU_p zmOS7)YJ*-0Bfyp3p0{chk}i>Ek`MVLnY?Bg|DjJCunKCq#KPTs*%!P0do2D7pC2Bo(4~7mN*7yYP94dI z67++j7nCzrhNNo}t3n`g&h-9ko*yB5m-SZ5qdb=j+2F_Fl7@U=?@X@q#8%apUZV`7 zy;2nG_1A79z*V$a6W;PY^zs*WVe4-YZ#++yOf=!ye0{okhMf?(^9pJDiSr4DGknaQ z-}lt)nUyn|)NMYw3v9Z@&=9KU6D>O3%Tcmj1H#lI^e?eM6NdMsXjuLQZGp!cIM1UQ zbS|D!Uaoa!H7EW8f^QgXWO8c?mXQOqCt*$n-)j=u+^(Ty??NN($S z6yl))(xnF(yp(6Al_v0_j}8TBgj3~DrF1h*av!%eZPIGxKIQH@wSHu@#z5;{&GUF+ z%grWcsk(mK(y~P|zdmS$^#=Ap_YeoA_7!nK9XKi|p_sP^QrX$?TfRO$-E^J80+BP$ zPbQu-+(IbIcxep)%_Ly7{G8qQu#{}>KP5j*J$N<$X!&>k(N)y#VKQjC9o9QY5H!3_ z=r;(4XKp{TunB1wgqMw;ITMzey_luOLvG~)PRi@_-Ae?Jz`&@#5J1vW6vbg`)sSU% z)K(>Z2K76&I-PoAla#3mB^c2e|`N(S?v#3N!c_%(%k5QW`W;Z+f-B> z)fPCo&d&C^Cikq7D@xHd+A8Sh{si-TmqWAc0{JLrr;mA$iNV2RLq)T7B%mH>+d_Lh zJ0_3zH*0{QZVV4=izh7l{wb_;K9L*=b-NDZ70ux*^?Z7fXZR zK?k&Ub$O&S++|j6AYsP66cB&<{M(;3SH`~dlR}yt2zParYD9(FQk~g|9G311uvXUW z5;bTIvv*l5S{zvSat@YUkCzOXejI)!_N-$cGu304vnmFmKushc`h>BfGLSAj&72gM zgIi*JF|K*1zR!s4$kZ7>WwHeR%4_F%dEn&IO}KQ?S;~a$9!kR&2yy=mEh922aTb2c zkljO@vB}|)wbNMW;@fh-8*RCSm^Kb!NH=QUq2R@xul;)xXJI^$c)Jct{92zf8C_E^ z$dL>`XbkzTlZV{kYY3PZr)j}y_H%R9Oh0nT&OVOtz+f6}H7J@|WPYvwio)DLPv&57 z&L-+xQFnrH@QVm{;{{|qV;;};#~HWOQYB&$l3k}84V<;Ct}DRQc_`ECTNVnP1So zVNVQyW$?8Y!&l+S&4$l8h$Uno0c{*YENsjo!){Wu@hGy@qxw0N?A0Q{78>JjGxy;2 zumZX6B{tcmWL*)z*r%=$9EnDRLOC&G*+YNnZOG}`!gQPZLhFPY!3&U)R=JJ31b z6b13OgndHI=Tn{}`Qkfqj>OTHYfR&t*WXa0rnbE@B=rtbnrc z13U_-5b(WV=6zq3-7$dXv;wwSr_mScSiUh+dQ}ROd2Gb#hfr<1GwsV5FcO4w2=*V6 zWtO{a7pp~~2QWv0dI4i$Yl5?u=! zoqjsxNNKS<-P!cntpBpzZ!gh;k6Wl7vQ9$X%}f>fQ~DjN8{`bV%IAEj_b}kL*q#QB0|MD zeW6yR7=$83ytzf~)H|b{lj^G4`fJ)gucF8sO%3~e`JcB-N;Wni^5W4-T;SknPlL_J zg$;~X$8JDX)@v67xj8^BR=^r=6zRxOOO4-~37q|bT!1t%{;|GjNQX6IIcqU1D*CiQ zD>3L!I%iW(JH8+L_`Y$c{^TIVu~2TL)vqUx)o@mIvAM6a&l&49 zEf(H;QqDYWO0CY*pVG72Q3VhQ8hNgfN6r;JMZe$~J*XP&#)!Q{&QFzj;OY5!eC~B# zScdDGr}57(IL1py_oqbt(Sei7z|C;>NF9F!|P?*2UVXI-AFB7LJ ziMQg#;}^B{&Do$W8N6%VElLt-bXU}CG&6iPE}R`r8t58U+E`VtLL^T+^PUJgtLD3< z-94k|3IUZacUzwZ5{vWv48iwS?+QF2IQ;5fllFyBO$$6#o|t75dj(bZ>Ukub?%dC& zz4S%ntY<6TMm0{Q({Uwut5FZc73vBe?ipwIjiz+98F& zSb32x}3#lQP`j$_PoY%zc@q%2HO;tx_ zRVhO5nu9^UMh$Rb3dIxU&B4~!jc0kX{sd}kJqIu|)XJB+Zzi!0B`nZ}3eVIF{8~P7 zC0QW7Ptfh2BDCxRGbgMXoAiQ}FUa2>e(b{Cy=2oeY`I=k@U^OYnBDqa&Qk*54_E6& zV1u4#9g~;{Ap~55$FaIR*|u_a=SJ%UqY|>hT-Up=Z9}3x6~Tq z$f)qASNwk@g?sNM+vPrGl7*oM-Y@*?gD3cG3R(}+i3)`_#Me9w;oO*ceu>wKDJV_k zv3W?cQ9m)}$^ilM_QE!)wDd|LGlsdHcs<&v0pd`1T{1l+iV8%5^OV^=%#8`^b_|n8JGF-P@s}iEpE&M(NXn zwYr>$(KSRO#U77fqd|`IegLfur$rR7SCopN)S4(uwjj757cKN(57V->i?c>VwUO1zvi&ChMgw<_RO2(Ig}Q!dJJ|oC zw@=*0xfZ}vYBecSoON;C?RTBVM+a$D4>&6o@A#6{g5mp#x)8#Ii@sl{5eN#pzP2Z! zdgww=*o=LBADt)GE%Q}*rk&x<4W!p@+rK$!q)rcVto=gmqj&hLf{}0==&D2}dCA`? z*T?&17CHbZly9T$=AOx(9DS{!uf;7Gx1bfL@*}#Gi6UFMZ{O$oVW=^*5buuJ1Rvre~wF`v}Io$PDF@%v82DyLk=wun;(ovvDC-mC*)i;QD;GeW1sp)1-&B=x&%*@L@VPeAkA? zNpq;D8XTW72_;WlEwH!befRtRU)mp>FRQ9NkiokdJc<632e&TY8MvMg$d5@%WSmtf z9Nzx9shVpVXO0+@ZOa^RMZ8r}o%tF8;k3f+57$%MfJ^clC3VD*7lOG)bP*5^5WkFA zE}M@#Ff>*7>Z82NEu|h`r-Jxtvc3ZtTZ5CR^nOtNiLFIb3M{(rP|Rg0wrFq~NNyfAA%3RcycRs$Y&q$QIaCXlS9Dy))R%9UEnh|L9&>+6j zsUsoG*{{zbyjLWhv*tAy?d$KNxSl9REg)srFJq7qzEI*Q5pxixf#n@G$Z?%Vx-2P zyN2A7j+3axe#kTZ#d@`*a4a0p&fa_NwPuVt=9oPk`VdFC#DD;; zgV?9ZlYpr!7=J&Lt~Dz06!3OLU)4pm)9>%N*xc@QY96kI=!QsSrd7tsHZVN2=;G)p zNLBkLwBrh~5O#kWjND{h%R#Ck>bjnIDCxKid4%K*&(VYJ_MKhbwby_&T?j=oBjXfMo! z_t(GKyj!W+71e&ZFE7aG@jrTRfpeSclzI8KMdGOd*43kqN(UMr=a%RjTqzCiUdI^) zy3_+}v4M`ShZmqKajM z>DT5gew{2gwUhVkHFr&*MAn=i6{tD@*f4p3FXX5Xn;Rl|=ujwy;Fa_(hU|*Y{xt2f`P3qg?D<}{Z;QX$}#Se z7`2}vFYHJs$w3XOnx*Z)#Xkp3oqNVJcX>P>f&YG`=L$&QoWcOo5ge^+0N!X@L9W=$} zflYY=i*!o2r+ zAYs1AH~a@5iZL|zUBzI{_h&7TJp8ezWB121b@%5w9I~0*TPISM!uP+`NB!e@88!TO zqWS+j(e=__EI|&T`1nyEkOv7aFK`{x4myZ($3};ir9g-vI;p&0THv0!BkNwgh;td) zeSLW&^_+UF9>&);-l3}5KO3yExv1mH{w|+b>O$e!Be*3r>*yYBimi9jfQm!1?io_r zzA{7gt2Mh>Cx&ZvtGD>aU0Ze!IE}Z1J%jj5)v{K9lK<-)}M;utBfGiUouM@EaBd4vQdxCBDnmE8h2%Szcu{-zWce=sRz*QS1>o9 zwNq%lRFBh2=YDaj`z2NtmD@F@oB1Ao6nSgB!X-X~h003(H4Rq#hJE@SYAPkMl?_1& zuM+>M^RR^u2*|~D*k1WM1bd*xmoE*fO0QoeN3qwUF6wds3V~Z7?8lx&JbnOew>NiW zyMO9qjg5=NzD=6%y0}tY17y?Jk-g2oITpg2-~a!HNW3Kxl)!J+FiyUf+rYq`anjM^ zy86ZEy|oONLR&Q)1mDw@!e@SLQlwK1HbT88>j!7+6y{?7Ta>4|ps%ir8qr{Q{uMRM zBvjd7a1AN~laHziaVyeb%`QzYm!5GnO};f^Wc*OBG17PqS%^Qpaq85pvB+Vc_6#(F zCZ<8BecM#L@@f~JNKL9oQLg>Dr#~kr?Y|%lx*0{c5|yKF=1eJqsx$N=o-f^GU#BQu z1%PB@^3Xz^jjI~dIy?0xuVDpyrsW5y9?Xg51nP?qw<|i5S z7lI&K3#E(UX*3~QaW{z^zZxly(_qqvap%v(D((bS8ASv=s@!YClV%JZdHYWB)JU?6 zI(mfeF3~}VR{)A@U#yIgU+5NeD?XKsjv=ED3lxO8?DpO!b_u&r=PEodTVnE@I;J5& zS*O8LZIVM?zJC81Qs{ea3RyZ?2!1`{5Hf%_#jKBkqP#|wV^PnM9`Ci1Y3{G0x|7RZ zEt7B7T25I)M>VQ>w!=VWIk@@6Bai51# zR6p+WbO&oo{# zvz}Nnq#W%P!6>M}j~J7o#)kZ2&_uCIKVp}Au6ATxW#~+6Erxbj0MqGHzWNg7KxES@ z9_pa^u5G}$%AE0jvBo_@crb|%H+!2k^WULy-T)4M@1M|h;4-7s?6jtGnXS5aKYYF% zEERS`rTu_7H$eh)<1d#&~0ji-SmoexD${$;hkNpsc4VqcEEa$b;)4JFX&w|Gu zY}6PD^BY)iw!mSDB}+yB${WYp;7IAX%U#b3O5b->*`{z9&fYS)f*6lbA8#=qn;8=( zvfIbRM6bwos+ZT6aj&!~iYpV;iUe(C9*uSd5?!I-9qmWsJ;T$1p%2j+*lHcrOKn#J z-P6)tL#G|F0_Z`LvFfSkW3ca&r!4gci%BRBq(W0A1IC4FHS(qY0&XxvclP?H zNt4ZY&=lDz%_?KuwI@6OFkIJwxeO#IcJV@79OjoiaTfYP@uSHt0>(1jgsyDbudzC# z)wz2wH7h@|YsXqzgb~yXZZaj?EF^mbM9$pPy+dKDyM&UL&>L1i^v_JB{<0p<_{%ey z_kh-n=d!T71?i8IGAhPZ?d7+hD|6 z>#?(w|KS^P$Ddg!x&XZbN=aCPd{NDnb3P*qic!HRlL z!dK}uD~^3X|FV;t4*(@Dsrn70ebU}8gJ(EX^{t9Es%0J4&&p7Kq=`-c@o9&J4KEW7 zy8c5BgI0$auJp&>P+_wjiz>grc+JofdeMbN0CtreTP4;t*05T*N%J*V#FSn;VTu6S zaZI536FQn!KVnzZZ*(_8AH@&aqhPa%x36}E;SAYO*0D0c%Un%X#QbW%mRAzNq2BXE z25cik0M(-le3Lp1Vq6pN#3JYjU4wHAvtnc=!=kvhS6|$kZyI?}VOswu+_)Y5I`GH@bWhA)vmG}9jW#!S%U=Aeg@BLVAaElWOK$VQ9YspLxT z{4xWThsf)LQb&gOpN^%Jji*FHJg_#@am6eooX=I$d81tbSYifXN?$%Q0w$4t5*-}T zUuTtoC<*ziCs6%;$rS+7p$;zERVAG52>OJHaO&YyfGK7VG-Z?or zpWAf_ad-AE>-skMjQrrUTc_=vur2UB;ohJ0@~y!-n~q{lA5v;~ESf?z4!$lOwl5!D zzS_531~UhK4)nXw3~qlIgd*{AmiB_=vis|mJ1_5|y1yx^ve^|jFRv{~T!G#pyUo1S zPEiXNXhFe!YW3<;sxchbBuEV04~WdBW55N76MluJ`mIV}C+t1yPFA`B`p*hO@#&{j zy!g9`F#7=nb6k$fUxVy5^9??0Mb#H?I)S9V#m^`S`|5L2H$g{c=-QAwsB$@fn*i|$ zr#pcMb?vaJ^-y|M&wM!xRwiO<1(B34&9Ql{CvfSQs^wsuVCrh& zg}P4>;Be>5-r7 zTdVdk|AquI5%y$)aWCQyUQh>nR1FC)uD}9#flQEP)LnQOu3zyyf{6z4gW(4iMRdw)~Aw1lcE?y?J`%58?Z|_ z#(7|*iw@YH(0~{m;L(cMGg5QS*qA(qCV|`6Hvei3 z%sARz_pc!dA?={mtrzqDu20isudUY+1@-ut18B0ZUx{xF_#K+3!l*V6O^EA3f6Qoc z=x5~!ze*0b{|VCz>kBZ8-U7$_h18n*?*-YfD;W<)98eQ`T&6~9KZfD5!V5KC!ku~s z7B{9M1K_+kc?yc3^|y_%c^RrhH9=CaKbaDSl&U~0+gIw|jfjY!fLF%9Q|4wPJN145 z1q%efLa&Gr7WWNoqSA%WVO~AzLI6)R=6)~z^8FMoUg1)1vPfs3OY7ece^PI1J{e(p zpO%PG${H)bqJzGfATdg(J9C6F#k`lRB5Yld**yUxeIS9%f?_*B&SN`Zg40QYS)xC1 zrF&X}WkB*fq*)nYpZ#}J|i*LjMrfho?+||^hkEJflzly zgUt(qk%a1}WN#CLODkZGN+&lNDNU!X2ZtPpr_^c;1T!bPp(@IST1Co~@zpL3D@`P=^i) zwX#0%s|`WMd{BHM*4+B7sMFH56t|AmHYI32@s%-)50Gc3-YyCPprVy-pZA)g!R zUj*CBoVnIuB3F&{7eO49H~n+7s~8c!yC0jMTV}L+tiSQ@3M47>U~^0r+x<^ zv5+yCeIN4<=Y_wut{a#C$zf< z{CA!Q)jM9a;NXV6NV=+wbktz_l!8qAA@(km)IaE$u59u%ev}Scxvy;h6IcH>Xp87n zN<9YY2Oz@M2q%rQ<1a%Ct^V!ZKl8VaNO&R6zSUTu5!F^*cCP}L*pMFa?^36{v(|hI z^?>%7ymnR~??hG3lnw=Z22_n+s8bC8}?QWu_nUGd&^FG6>vZZ1Bh%Nfy8mZy-YE*C1 zZe=i?${+ASV_k;Yu{@^UT7eu2mTRH8U{PZ$v#-w+w2t0$$ZX09IOvjM_H6wVA{F{w zC1uBdrOU#89i3qES3D}zug9iD?V%dcl*ykDQZB+m8S7f=)F4;%=KRL#7%Ou^rP2tr zlxmZie3DGZDu1X;8E80sNITX4K%gydGdMNlXCNQQ7HXrHSmZvYDmXC0yucV)I_&H8 z{bVWAqpj5y#7{H8&xkDW+i#+mb=8K3i!fyaa|g&5tAOx8T~8%kT+!dKGz&5~jEd!V z474CZe* zqdklYB?D2yV_JJN+th6CjMoTe-+aAT!|` zncOlg0yDvIiiwqA`ptf}{f^4*&>FD18l+YX;sEO1bXL=)|IDI&T>(Vq9^x#`xM|35 zk;$#qO1!|iZd4YOt$nlI^C+9v*eH>$BKtO;*mH;z?W{7ZE3@BH(Ljito}QEmywbD9 z$fRd}!Z{$zEQa~QIB3U)$QMFwzo3uFN9Zz#1Rc7WtBZDZoi6-ri~s^m##nW%dL>=E z8UPyQJ=$DU)%S~;O~qkqMZ$YqOSCXrnE2JK844pT<4`?nA6E%1YY!g_KC^*QYt!%B z1kV>LFF67=`CbV$^p4_e$T{X&SUdP*!OUy5S3hfq7*9gHTunT*yQ+z7p88B))s3suRV%#w;>d1ob@07 z5R(PR1}E@<)38E|>37)EKFj02Ts+;VAuuo!=Og_uVyhAQJoct#k5(Cd+ur61s8pdJ zCAPS}fPC7f%De=$@anxS6kt4w=G6sbH=;wep(*DZ=57Q;A+1EE z>71Zqv&L92-wgVP7oTU1O|s2ky36v|^7vUl1|3$*omskayF6YyCt8wLJ`g1WTMvP& zE=)gRp+|&vpULQ`s*;bI*lhm@0-`yvu%3Cbl|V?eHeKcXA~#3+OHe+xUoVlC5}cR7 zX~!pM@T@N~0&6%|oNRRd8*FW;c7Jur#`fdnJT%ZlS9&ephg+G682(!evQIKD!(tVg$ym`+wYhpikxwovy0R-YcE+%CbKa}$G=E;G8 z#m0^?InbJ`#0YQEep)z38hX;(6tL`Hjen?FAg_ojV?kP#D1WXt#|3GB>(@0~(y@b~ zB_At3yO>V^358X%Z*(jcVA#}FM7RE-bYqS|SFe(5uV z1%}}cBey^ZCne{1&q!wrOWjv!cCJbnZoxtPOZxO+^3cR-bD1u_N+Uqf_MeoY?{7E$ zDm(gLkw2W0K&wy=XOoNqqXUSO2 z-eUzr%w>f{6-uWSS)dUMqh(Q2RiI=5FM4AF0+<7rda=;g?w_OV-oHx4g}KDYLPfek znQg3G{adEF(2T$qAS?#975^JG>0o>|DiqZd2hB1%GW_QP1*a+O zxmxCmbrsVAb}1Xae5g{E{~&-d!5M*mkT=icL>Sy=25CM-v^(xg>mi^n?C&t0RgQ+38g1;K;6rp%(&E!aeJ{4v* zgO`60HClwfjOxi#{t7~oR|7wI9mOow>Yc(7n|D_Xpum}fc4$A*p-Am+PRIoK1@52% znrWbpUViEY(G#jSr#+5=$IMw8gaw_VaOsh`$Y2VI_5elsBWyYI$5+t&bN*K00FPG} zrLnklnxh5`FJKh6)ZHzBR-1gaMV~*eBUj|UrK}icUrpvlLz*kyp~FHd<$=9MB-1%Q zT)&G{g$iDNvR;Bz@QzkcjoL{(S-U%-8DN>F6RhR=)Q5mT> z`ugJbEi#UP+x~ZH*SGGo7&c5%Z5If<{#W>$F{t1n|7YmHPHTeBy zoMNaexr|~6%$_+Lh`b8pzpKE&)c1$G>tCpx8ajMch9vScMQ6d|-GGPTg)wZRupYTy z{=}KSld)wK+w)1`x+uh_J+_nA&Q@!flj<&lDdp7}%N5ltD0prH!wRPL{^H%fop2*I z;l>EOcQ~NVCVWMUNd;ah?EfO4KUEn?m)x<r~D^?iaHWkN6abjFN_!0Tzam0|Ws>P2Cw)(9h%PJ0up{1!5+&H}8WYJk+zSMwnua z5X{5m$^XF^cxwP<0bpdeSq#!HPW4-RN%hz-r?FmU*!ek8YGP;$TA(9;yQDKoP;KtF z8ol>fv&yizxB30VHEuxC5&=!XR~eY88E{&xaaT>W*-R=Aw+UcQM*8%7I+TqajlJfA zhoBcTTUA4VF_^Ql0`#mT~xp? zD5!u!$8>&SG=yS?@Zw3lQmgB=&Hhb-`D@9vlCS1Klw%fY&tUQi>Xq})Y%T;GP{1IH ziN%%qH2S78LLOpA1`1PZqAftXNkh4s4$>SnOJNvJs5_I(ZiiB(-qDU80zE7s&p-R? zq~RtUd3Ydm`mVoXb|)Az7;v9Ye-uVL^UC}+)04#XJ2rs{Fbsj?Fu&<8?oY}XR$!DF ze{J#e;%UrIZ2yF_1lnHtmRi;_+TV2X(iR<((azVYoW4Vu<}P}xVS`wxT@|l|qZVom z7PMT=Dv>zbpne{G^Q@sOy~>)OvG)%i)c7Tdqw~+&xI^ zvtWD;^OXTgouA?yfzGa{ptzW^9Bu|E9VgfM9!Gl z$kDjb1OYGpgIm$lQD#4;8|*+(lA9spkR#j%hKiy#byUDJJfxHeFaVDRDd&}&9&MIJ z!<=tkAf+OpAr>7C?fVJPU-Ky`6N3G(w+1)( zGyR>(jpZ5TyL<^f2QxSln3!wQ*vvAQo3f%(k_4ST4sITtF5Tu`rWfdrk3aK0yBXRu zeH!m#UeYvCk`&+Vi?LCx|?W zX?LCw0}*DYu+Fe4fkayND^h_wRKqgZlDxi; z#UkISJPD;DwDFHX;cG-2rHC=0piP)7lqkDX;>|wI2rTm-n{jsPQ zEZ1@3q5}#~RK0qZg_;L&ExZ813J5mc6pq{%8)3gS#3Z_cS6O64fQJOkfBE=A zfuOfHXNQuDn{9H@_!?4mo4_SHNR}>9zyAa2h`^3)zFL{5r?w2gNW$pL4u+V5SAJSM zUrs3kQmaO0wy(Z`tG7L|qvpE3_AnOyVR?PSs{k{7po*cUX!-LP7aA46P`-zk#Ms;q zCL$+7yz(-1r0NbSX96c}8WDw-)?uPd=1WX8#Ck}KDCosu30IK{Rk^0tag@5|%;-Gi zA#*u6IxR6Q*XdL%uN7Lr|GNdW17|3J({K$B8(D83k0ENQ>Ql;$uwRbQ&10N%OFX0uAw9jXqxa1-MPrbuo9 ziT&j2Zal#(fbvF1UwofHo2vlUHRRyv+cPCxdY&X_F}1+{pj@r$nIX+_)H3XZT%8%x zRe$%nx?UqMI189w?WGuje=im`1d>V^`Bd{ zR?>=3xo}gRLUi>aQbBo!wO)q2{5;tijVHmZEus4&$rpT03S78zKX*H=E#J> zu%>p`Zlt|@*yc~9N|YfQB1V_@Tov_KE=PT(=JMBW1YIJ*p-A?4`Y4aIX%6^A>K*rF zplPeqv9IWVNi zgR^@DWTJQrbLK%Z-e1ybD3WB_-_U-ph9970pr-8+%F+YurrZnr5PmpLq$~KEbMjg3 zyI0RGu2$yen}WSsNqINMRY7a5Ab7R5vI=xICtUuhu-rt3o_}B4uBxE#KV0g^_Wt|n zJphE3_w}t5S>PM-Rk@_{K4gYG7|GZ^&-eXP6S{5iAx`R-_$=w{_jMe`oXU%_cQdNR z*Xlq^Vk|7or!W;3HiGQ_zS77m!@iUK9z2;PvJ<%Jiu?-Nw~jsVTOm*Tn8uP$dq*7p~(Unya%sIZ4-$r@A@R zlJqT0q!Vi_))BRoE-ae+mCbQ~KtuJ?)8(%s&kgU0kXljqO2Um+erx~Q0mVEYx_vX)wr<(=74G!@AT2|Di)W}c}-@Zl+BN!R~dXlT8VU~_A6I@rCb{0Nt z>nRUi%*CqQQJN3YH@nEA@!39ORv;x)c1n7RjXE&n6*FSlaAIHm5*AXrA%h?GEVZOC zq(FH#kOm*Id<+INUqj%^RYWZF$l_N!nbc?Jw$0r0Jrfntx;!O)tEgM9v1d5}``J$t z$A-6Ai0G!_9wbeRfW764j#$c@FYI2V{&k&imh*i6JLZ*{y#K$i_0d+c1%o`~zf&Hr zqT93j86!jRdBnRE_qwd!^Ms$#->*A_I)CoV<#4xG-BJjTQi-C1{iBwB6~a&+4%4&g zy;irxi|{^S$NOkVSdUI#UoX7Zuv0~wECPjM#Sh%?{_cM7DffNuqf_$iDSBzsp0Kf^ zTB;y(UhL}v_t(V6@HO?1-cq5%4k#b#`@iR2bhc(Ein?%EF94Xlkug1ujTp$#DkWW2 zjvkd@`?$f)M>^%zg*%3mIc6KuzNDdPHv4n0GEa`mu2j+MceJ54*8<5b8H*X%m;{@b zkr)iK%Q=aEG)LMcCRA2tUNP{!g4-%-xx&@R=xM{exrIqV4=uzw>W7 zD;m*P`tCdym%R0WrFisb$2g@M;gv|>y7i_TMYjSotWa&tEvD60@@tkjj*m4hKerZj5<2RMAtudG+s3H7l_& zkfT=Nmf6yhDC$ttpDIi6?W-EL3#hLWwUN1REpz{5@wjMR)~o(|Y~{9J{X(x64r_Lq}Q~my3{@_0DP=d4b_MQw?mC|Fn1bqSd5P0k? zy>4sMR4J5=<`|x@GXI$M#<$McPu-I(+kcmMIe7fUVCE${LY~S$^!;U4prli) z1%GI9zHmGZ9%AWS(2$?6Ci5GrulB%fVaPx`>k3S8S@e2Rzx}E3+}&OyTlQ>_qO%Hn zzvGE&f&g>wL>8-fIsEz*rcHJj%6@w94UG!R#GNj?`n=y)c907s@689(vX||YlCNeB zg~vn!9Ey&%;sK!td87Ct8-w_`^rD2l2XTK(y`+>={S0NjLUD50mwzpyBmV3xvE%Q? zi{a~ExBqpnXqNHh#9$DH2kDaYe#7q$I%Hwj;)KN(tdnB{6oyJ!;0JonzR zP#S==za=SY8R+axVZCi<`UI(gHaox z)HFY3{5!81Xh!VfZe%K6ZkG1k4HeRiorAF9LaVtr!@HY>_|67waoby6(p$`$Qd>*b zsof8oD)TdL>CNX5QMhhj>GrqTZ+?|2csli3=RL=7GFVu82vx?DQQ_E8Poc*}HP`X( zq103IGfAJweWRkEWl+)CeLt?Rj#}o{cbp{*qLoT+Rg*`qMeBvDUXurF9Wmlws`rj` z%G>$ES#Fq6!?p@g%rmK~4}loVzofR#c27*^kmn@qWS%7-;o=3;*jG~oysC<6T%Je5vgLn9!joI|B%a8(;)z^6!0;|LN z4SDf6A?u?oY`T8aUH}34(I%Oam&{;6H^~(oq~K>>ut8#$Oi8qfA=8U^dEPO>Q7xok zu;p&H!001ux%zuQ1i`xKTRweXK+*g_HKIvt%ueaYL0@o`aI7L2o4Zx+`|C{%?AAXL zZI2iN&hF}+1!v8Y4uXT5jCDl0C&i?j;~z9M;mA3Cqv3?biR&dPsy`Ju`~D{s%H@)JSB>C?*9_1-8n5RH?UtT#Gerqbj)65%WM zdC>Ii>1}2GLFG#b4{ew9C}V*0_oQ4%0Sn!q-tK;JV;JHrjUT}pZ=%#~q8`IJR!)>9 zDsY~7a>xFlwE}CFOSB|TGj3kB3}Svy^K4O$#>OSOFz*Q5**V$;&)=k-@B}w-D5y%M zv~~nIKd#+;c@-;E=LX(#Iz*iP1NtV$cOXnlbA5v@xusA%lbF?=dDHWPhKop6gOyLs zc{Ec%^)@>O<9(pg1FP4i$U<_baf z{jI6ZbMPV8mcWDD=g-sZupmqN_i;^@{=#&_aXiJ5*F|3W)_t~OCHIbxWKSQC13#EUryc@CwIgA*bzyV-24)Vp2K~;5{3xD>@nK zpis+Rf(FQ9>Zf7J`wKklVcCSD%Bmj-t|7UMsXj`oqk`!4U~y5Ov9z+H;^ya$!D6ru zp;oJSS8x;ejYNdvKHD$=(PQk*j3P0?yKUW|dfz#II4JNX8)OzqhkK zJ*A;3dJJl3v0yQH2W*CjNpKG@r}&&FxRNQDet{NJb;$NQu#W=#Nm+Vz za$Z+-&zTd}m2)($1B0An?Gw&)9Y!h%^s*k`_`9T3W34B21%d|DCybVoNAS6hmf@K) zH|mkt#IplEkJBveAk7-Kh>kp8`KGZY!j*oz>#W3S)K(4SNlXW2?!3UF$Yvkc5U48`y1%Z`|M$oKlEgSdg5Enp94%>K?RVh< zriI)!!`pf3QPfce&VDik0W4q~F!eL#M8AHdGnb4Gx{nF206wkQ&?7MozWR@-q%~M2 zxNbs4FT+6vahkmjin80JFr`+!_a`@l-zYTET zQX887ex&(9a@0uj@89({#s+swIC^!yV<1yip_{@ohx`L)JV8F9EskzoP6p;d=!k2T z*3{~PNIME2g!n0+T>=%9p+0AmTf~ka4Sgu6sKHQ8sxLH`d7FuhH(2UlI0E0+IzdKPMSp1`O0uR_ z&~mW!o?YG;M0|L+KpA((d$YHomTe7{dxh6@c%L$l>O5p zS#GyTM^l!-0*C3`2)`ym`rlKRzIs^<;dL(W8ceo(t@wccqserB&iv@oU6O;L3M`R^ zj6#!m15(7FW?0x}slJI=W{|h7ACr9bRXQY!Mqfg$9e6DcOT)i0X3Tb7BE%(Q$OxyU zDgU48Ed5PN$J?TTWdi4{XF9|ZJXi_4j{ghG(!Ypa8{#@QDZK5ORr%h89vkn%xdP&;x-#UZl zMmI@OxkQ0uN50S#)Hi$n&5knAQJ*-OV?jelY-1vixBm8arOaMF9JwAt{RqvixC&)i zt2tK5fqpU6CqqNU$zGUeiVo!*SdAxbk>cV1dx_S1Jhp_m_-s$ZtXz0aO{8=Bs@Cti z=c{Em7v@;R#qsz#$n;LAS9<$MWM3_UoYB4%cT6UorrPyS!}D>s&^}GF1ke+*Q4mbH zCzuN>0N6n3op5r?Cj`!6stz~)w@gD*Eb0aFbNQ-OEV0>hw(2E?#jAM?671SS@2*AO zjl712_?n?Fm;Lq=wz6xQml9X=-^1REF3sqp%*r7ZrTQHU^<%1Hl?D z8qw_Uu0yKZry(9FeIhq2y0dpM*U&Sg@o#}x&8TWAo54}s}}aa3us zuQR2GzPMy-eNkb1wDzBCK#Xkkx^e~fCaNlDJ1>EQR;@D`Hzdu)Qz?=KAU$9%KenXA za&P9v(;$~w^`fo3e6>5w09D76Svou%X)pD=zNm7lT|g>+16kLVYa52}CsS7sREx%< zhtW{L0{9WPyo;rjKe6hhIBdEN-2gVo&ez#mY7_?7YqEmJLY-32hapY@V&bNBx^)!bz0PY~W6 zjLBCowp1^cPN~Xo)Zoex-LX<|Q!n7tsPY!qwrLP?`J-NyUX$E$T12uKGQ`d(sr?c{`}WZV?R4-F$^AAl;O_M2II_Bon8=iA;6eJAQ#14J%a-95`Y&=APfK z1B0?1lnP|OCGUNPQv>JZWicThZX;-h`ER+~7if9RQTXA}D`=5%mu_1XsU2kHTNuh| z#d%hw)Q_s8_Nu~UYbu-)9RNO*TBMZGc=C0L_2%~GJeyzC8wh^gdC6-*X6n~_A9E-O zX7T0{OPT7RlMnx}lrJb4E-IGfYp|9R3=T+|e1G%Xq~cr86a#xI<50rq*eraQdYQ^% zj`#VlBCUMPnuYhU3amTwm8)l_R@RO+<#Z}5vpQ^8bjH=EtrCr*0PF^LfS)cPg`)z~ywz>1pZ3 zArGvGVY#qvH#XZ6(=E^&wmv=yPBG9Jkt^r{xGlpu{PktTrO4vp>6EMf)Ac{Sg~f5b z=7zODb2R>phKeHxJq}sn)&3vDuUP)fdiN*c`q&q9%|(9|PR=1dTFNLB;~qVbIOSFs zE^u~DW0xqi9Z%ldZ|f;f(NP_Vsxm8@QdZ9vY|K_-486RXv~&Yij6#)O(C%O(oNDzW zDb!whxv6te6A9ba3Whei*0;%ESasT;c*>F2k!T%{B#VW1w@Gn+dqe)GS*o!)U&Etf%NSO7mgu6`!lKnr7C4@NmoqfnG_K(JCzur;|M<(=d7kmCq{ZOw z-~S3qL+ssVr0BU4AV2=#y*Mf${WH&=1rEpGW{i-(q$Ul_zEEHlMviT;S%IU3?22$x zV|^hU0#6SYZE(%ecc<%{yDYz~Hr|Z#+yY;URu-t@WP`n`@U1uRDcfYIfSf&*lHd}#O(TSr*cKJAX$!%S=A=A4=Ro*^t z7LZ&jjTVFF5?ul=r`u0TNSZG!CX;S=&2?VJRAvP;eyVt7EmxbMKjDTdt;xUe2&H9K zIy%>7Aoq+Zrl@E9g`WZJJ=7gLm}$#R#>B8s1%!VBcZWh1o=9QGgqAsAA-bbb`Aw0) z(*L#6oKUh|QE^|A{8Xo)!{<&QkEw}rrjDM(OGz}h+hi~KWFh^fOriP^5zT^1qxWmN zetGWJy&MskF-Ax=O4w=}O?8?Kyl0!6`kIaU`HRX7P5+{iR^L^oQ`oq?UJIpZZ*xc; zRD>U0s3C}J?0I9(Baek>`D!D0Vr?aM=CuxWGj@X~duQmwdB06g_GOs!A0Vy7wyRXR z+oeVhZ;fnUE=eza#h9_%6ub9%{|XHxj0X1oA417zSkMs8&wwF7_#{8Kz7z7Re)~m| z;AmwVQo2!R@VxJ)X1Jba#H2w>3^j+IPefKGnJ?nH7WXj{?*s8fyi{iuK$VMWfPzFC z_X9LV^PW{_IXER>omsQo)5S+3BsK|;t$W zTX1Zs=C%D4V-I?R9Yyoe1(DP5*u6TuAt4zuc5xkV`ta6OSaZBXg#cQ`j`->A_TKlv@j;NkbR?2 zP7qWfjbs|XC^g@!f3rUaj4<)haq`pN|S-qg^kDw zJgL~I;L8MF1_0(TU^~}^6J8^)`t0EcEGbQ;mYhInWDuI%&y$W~^iThN!Cu?Abb8=A z>~g46I*(;@huk!ddk(o46aW6vNvC!{z$O4LS79Oxq7$-fNja(=`FfEjjwyhsPdt&6 z^)y2nY)!Q^3rqcw*P*@_C3LXw{f!VycfeK+>+^Nt)DVPT8jt#)i^sQ|XEp{QOl3A( z!spqRUxp^GAPW>R`Qr)O`OVJiHL*nn*RLbuizTqx-2IyLozECVyq_HehK=7MvqxNy zaE7E;Qa_BX1$J0L8EqHKCi}cmz3h9QUgSLwCDaD9w34}7%wn@PQ|>4cML|9e#E6z- z*#=3TI!p|)_MW&x--|=vvrT)lmy6ka9$Qt<*tASuA! zI5{q|(!Y2fZUiG|B$IJCD1=n+RX1}q3~XN1jmPz_qf1iyQw8NF3tPj`$xSDJ_nk!`S(cBOED-ly&fFD z506`4OV}u`&MQmkn&w7?Od=c}p6&kCfFxuYMyMmXPSY7V-oyDiF_3C&@?TSX=57qz zeKLA{bWj$1?)fQ9K)TPEU*{$9W_Q}~y`0VS&!Mk05H?7GhZ{5SJvb{MAbOr2V*?xRU(L5T?L*;lr|rinOEf;kpoy1_h_0$v$R};MZM5qR%;k# z%3M9P|BItpdOa^)q9Jl}-tr4g>&NmBFe!5WZ7Ohfc+2z3CD$pi+fO91d3;QiE8K7j zGW*rpzJGDaa{tUkc$*A#OB+~H#)A*kebz@5@g5;l10-x`j-QCARwhOnCdaS&3}6+^ zFO$u7OJkIZ%y}ux8{QYlj>YVPd#Wk`+i+LwUsgCivz-rx5vUaP>Qq-3^3JNid`$&V z!41KS*YwMcXgr}|KI%TJ-^12>%S$7Y+g-Bu=+I|iH=LHYC<09FkH|cJs3wnR-TC_6 zOd?cQF=A*`xibBGoj|{fLYTE^Eq^uXmTSIH``^p0eC3{2aED(1?oi(Q0!P!3eyxSn z3aK8Cmtt_9+q=TsAp=n1SO6SEQG4|~9mrRq4Db0&0;~nA)m}m{@Q8k>)S(Hz-H_)0 zyTasB`D6=C?2J{j$k$CtL-SkG9nz^~2>U-r7Q0eV{2vcG@k8w1<5n)&PHY&bVx(E2 zp;MNgQQ+A63?VBNCoWFrFSyA})*-0#U?sux3 z9WiF?dO8r^6R{g=s?_!95mzn!>~a*`d7YJEoG*gp+AFcMJ9rZCuJm_bcjIuUBZCPd zC_HOc=;aK+)?i=%fmxxC9x{`;JT|_Jv?@DLTK)P0`rfvQ0~a!kL=0%x5+Z-T%?eCE z>+(6@Itym=LQPP3JABzmY;i)_g8W`AWkFhU~DAHKwE#J+=U2w zjcC(ga>Uw6UFbHD?oOu7lQ5)Hn_+2*sLd`<+Q`AGAcgfoTMI)`NTh zoH<}(kU&CSPRRqFiHv#@^2Y0zNl_(|yD1}CxBg~F_#>o*LhtsK`Pa?!8!xa5?!Fsd zzQ%>TLfNve3;WlSHP0OhkkT_piGoMn`Fd47KZH?l=p_R~)2=lt%7|f&`sRO<%B_Do zPGD_sGJu)(fL+&c7`wUZg;<&~LuNRLh*;`KDOW(GYbGz&ol7?v18~OA``rK=ep>7I ztY1BB^4y(9|AcUocBuJ5qGG629CA0TK5ySB^k-StH6u<+y0fDvMdaPzMG&KRG|NF@E!8F%rqMq$&SJs?1w4c_N%xPVCreF&Zs`a zZKV3nx5TSkch@34Yp3dEJWEIPI*I*19sNChf;!)L`t0yW@7dkKsj!T{V8QF1)CBjV za<{k;AhL4LQ<-P}7k}59eYd!ZB_gj2(IM+{Zk<341S-yXbhnqMadr-gMy$(d;>=Sh zX`w8euWk~;yW?-WBqicdc9DNug7tOv{j=vc@)h%#j*%$%sds~{DbC4K!rAhJ`~1SZ;kmbY zSsqjnuw)@S;vk&Uf#UF0h3(?B+pD)BXaAD_0{HnupI0LCJSe;Hs71w^bo#;yF5rqd zlThqFLmAGA3<^t+rbc6DQNmCkT0J{JODfoP^Mx|;RBI(G($g(gI}IueZ-zw@Hc?s- z>OehwS>-FHjF*08=o>tAG4PfU9IM^L)0Xe+{~zliM-C4xvQs$z7I}1M?RhpfibnnB z$`Y^|YFst$N@~?%7cG^bAZUZS%KQqLy3_j7ZEfx1sL&@clA%`QM#|iO2i){Sx%9U+6wl_-P8;p6N*v_O~!4q6$81IJA%FWfb-WD=lb9Td&W1>+t=`?cM@(>!KQ1D(P7 z5ek_6XLsJfMt_$)f2o+&Q}(G6S6vwXDNc|wHs&}1q>+t$8)r*xWVmp)NheP;M%n+& z3@cVtG`*hntw3sr29x=3F*)cEd76v>vGw}}Uo`+c1!TI$G$rBnH*n{FW)0sfZaw(h zS@Y%6h&~Y;%5W!YD0VnDy#Sd#=2}K^C@kb^=R83WlFpSJ^qdD(iIPFTfx zb#=M+-oZQ{c13e_8)ZXW4b4Ylvrtoc@z)1~-@|)* zLE*(oeUn1?QVmqkG6mKuV#l3$u}*Uo#@JX*PxU{)itsjG9n;@cB=x(uz}SIJ^#~cC`wjYJOxoIs~|oyN#ko5mGZBe^6o)MzuaOGu5^@Ai)?8 zSJLjj;Y*{jFJw%869x%1bp0^BK{_C42qBc3|}76DLA=7Eev^Mbzy{=)7Vg>;cGrg zwnfIJ#x&Fl9z}}pgl?fheQ8a;u1<{eN#x(L3#qFD|8fe_BMuiIP+ikPc;$>ZSXlOa z3U7gXkjA;Z1lL;LmCk^D+B4yJ@YiqmSm#phTk@#gYS1f!*1)I|yP zj3>JmryJV*y=g1HJa=<7+p*_vFf%I7u`T=s%*%l@BYqcV`6&YZ{NlRB29*t|S<#gH zgGirWkj>rI#nZ0<+gs4<-bWc!HX(4qY1A6b_fPXIBrk0Ag{5LW&NhEthBnK8!psv% zBY+S4^;G+EJa`>St|1E*!J01+(P1t!#IUi>N`(^Ypy5|zlC*35k&yRPPn44g?&V4F zUg244-8g0w3Hv9!2pSmJcy`!~w0)rDqC2ZWF21U99B9tJdPgM{sfFYL~=Z6rxgic>ewZQ zFOD1wjyetcv+{?%V)O0!T<@W`jXy(<;?dLY%dMKpT_I)?&fmyyXmI=DWc*;&BNv-s ztAso&6Jsj@Cpk3TF%bbBp{uGnQ0XA+A&`gWWdA*2j#gnjP=)c}!>s^dZqSg}{RkE3 z)D#?)NGRz#5d5gX1g!$dw(Kar@0{c4z>AD0<&`L3`xk#+*LiQnNa-ICpz2hrJFj5@ zLx8v}hyXnV#aE9{M)t*#`W2|(cocx>1H;!PUDrqJ7)>k>T8vdrl#k`%?-p!Q_F52O zjK}AgEr}ANCR?0?NfIuz%)!56zR47cna#k|gf$)k?XagBfWka-Vm3+mAgcMh`JRSb zN4<={(Z8YC`;&Pl&l{9oCv3I=|MXR?rb?yzbnBvt>Aa}TPv&M|{`r1O3Li}<PyMxwo9Vt2v7LRK^Q z8z*!j-(O4k_B_9Cy|KpwvspAPp!q|rFV%6IGWDt1CGEltxWh5fZZL>$>Eb}yWu3VY zvMuc}Uz#nrjX|88_{M*p>87s=^1AJ7QD|{cR%EI%E@L!hQd!) zD50)M&9ak2!OwfozhBdp3t4L*qC>@j%}jvaB&P2=B_XZX?`#o2)K(49RE=ILLA){_ zwyG+rqr!CiQ`nV(CI*65s-Bd@#S>`Lak5dLH&B`dIM`DbpzrTg`$pX)pPM~s1 zTlsZF5em2aKdN*h0pA+(=OLl#FDZPhL|>?Csk~SeKo!@!aU(hMZF-=6&F#Kki*eL= zJbXf>uL|xc=xE7ZojQL~`JosUV}&JC72f@&@IAiQXN__=Ou0o4Uu6hxQapy-sWW% zGE}jDFz<%|#SeJJ8QdQx*2c-Q>qYbp3{m5$pw2<@m;-+yDp;)Zx8!S#BLE`Wmc59R zp8-!zG(j|O(i*f?w0;iot5Q7t$$tGkJrfjRDuJ?WVP^Wm;ry0d1)%L=ep5kZ*#wUvvE zYUum&-Pm>0oq9EOCp2@OP>|5Tgel_*7Iz1R>#Vf61Z_!VIn(t7KHLhBp$mphXVFByoFC+BADt+<*F|&X9z@XF zlr!P_P7K6Y3Q)_K`bmCuc-(jHVC^hyv z>H|EZ^P{Dbu4X5{{H56gfbg6)Q(FwDtFvI>bFguvXObgz`<8KlKT!2$2{DHAjlyLE zQI!Wj`FHORwl4Na`KZ)JO@*XjqLtkh-DN^bT^QN2v`RXE7a$qHzmIb7=Z8`#`l|lU z=>C7%a=+H&n1Yy^uEzDgB^}*ZcC_zAL_B#@ze3yfbxF2#;27ZJ&hl4Dg^vMFH4@Lb z4GlOj*o%$ib9Zv_j|QQYA66n~t<)^E8i^`gVHJMrv^n(m#>Js-u0#I%>GpI!Qx4k( zGOt=xCA9@9jNrEfzs@Ay(N{dDxrtT|80frU=S8Js4NhZCdu@08W%c)ql&H#l)>b7- z8`+#EQN6E#lb{Vn*U{hCiJloSmFpC@Xcjart+Bmp;>!8m7KX54bdmiUAkI(~*?ZDX zVjU_jc6jur;b`|6EZ}YswOtx;q>@Qc{&t;Ck|Vd4a*+TYsqhvZKSzrkZ{_DdiV4fP z=bNG4XA9x^b;e(Qj>qip^}{%8@2AWI{PysJ>(_=a^WPG)+k9sb5t@2KzT-9)ZLLX$ z5)sNSLGYm8pf)pB$-TG~5>>G_02u7i1ub{_&93FS>(rmY1RmktPE{u-`_$>FAM!BG z=db3hocL@ES@@`|-jZi^TKV~3>=ly6Yva#6LP*)Eoj-L%>fs)Bw1+9H>s*tW3JM63 zIxmF%>Pw2;zIiY^X~_4oh_cAc9Dr2;DOqmxo-w>)?>nhR4|Yf%3GTX2PV}rOoohhhst} z@Q5#SNls8Iv8$*lORc4(-1|<512uUr-c9tN*=`dT#X)7W;;(9(A#f z(jUoht#TMKGmUaX5zqIUTYnulit}M(ZM}!i%SLVBf=0%SYGBP~{<|+CNg-;I@4ewy z_87{`QQ1BULB~hxz=MY*htYnUV)9&&pf6G=Gq2`oMN0C>AS%EBrrGt%9$c}z!0J}T&z7r$HO@&EK zB0nf6ax9oJG0^JWGQ9pXW1aiM4+mw-LVC8-d6369s(z65(s|)BzQgHV50z)Iz<>lzo2x15v4PH_r1*WXI`ni6O70- z6*#`mKTL-}qk&8Y5hgFNE3F2wnH_UClGuu+I0&AGiF zSVD=&@a<+=$Cai&=fb16o3bxQw>!E&eWjQ&;#Tsc;_WLbg#j zutOTmD{{+nEn$`i)id;jRM?#wan?@Dwg!%>#fxc*=F~$P;8Y7{W3LO^nG2vG0#4FT z|Lb+l0(b%pn#i^x#5a|&MTB?^-8a@D{&M*%Fg%sY2I391S#MY~hjxB+VVX9;Z>9WC zy`Mhl;+IYs*Cf={R2F{=8VsuPNjQVGcjIw@zg^9fk71@9`}L!h^Sz*1J#|yf6VD^| znSr)$d2iFMALNb(GlnCvg)1agD__jKO_D^UQZDcLIVhM-VA71y_vfmby!4YhXl|Xq z6kdm$-2BF0&hk1n06trOhYaMJA9{Yi)w*qXwlMdT;ZWigdQq0KQgC#mYv}$|&nj%~?ksT*K=co^1wBP+%d0sp+VuWs>}$tiO$l z2%w#BxQ@NJn^82w`5lmAelVf>{{w#hQ`Jk*9POpy()<8Lmni;FGM}iLkLf2?GV$-b zxTCKr?{IZcSs%aosQQ_9=&r{b3S!y{^?hOo&D;9$#zJLK<1B4fAQ5nDjR#C&QCskJ z3I@6uC^~=;Bk+!ccCOyOg{1vb!AjA^_tlN8ot5=N{BE+^<$-t?TG^l=+=T3vS;^%< zVu8|KH6;)ZC4;n>4iUs9omgK(?iap;)+;NtZ7tr+1g5`P0VL^&L_^+>WM4oa2NBjN zaE(Iej-8vZFB4nj;a=D^E7wbC+9Y1V;f@rR2>RT_#S#llv>|NgyOHwD=0}*@^)L@) zU9~oI&;~#&3*z^166?TY%NobKCV%LYk|&h>0aLBNnEkKtmG5A`Oq#W#NURu(3?oXQ z93m1VQ6_0D;+3*Z#S+EIWF^_*2~5L-!Q9dYFXtjA>$a~SrQGx$I%X0x$$V7*ZK^z` ztssI~ydEt1{NS$|F0}Mn5J9WiQ9!m!J;W%!P8XKd7XsSnfO)_{}BvA&!s z?^xsIZQ`X*Dd-wCW@z+ruOEqj{9!apfhyec$t9jg-@h0{b|;_&Do4}P_({T6Evug5 z@a-lj=~QF?F1m8BE?=wS zcfc$*o;R^tyQ8Q^au_iDm8c|I$rP2%U|WkYi!?mgLGs>G_6Rh!kQq3`7M!|%i8@;< zI8kvy_dYaS!WLllV&G%!eBojb{%VRPn?1h3rFI2YI~DgR<+1=J8k zCBc!`1z`~dD^UGrXNLmn{Np<+kk>_|<0bofZf$*u{nc$jqb>Fa5m{rWwteccr`;>G{mF`oq-ys3mV_XV0&UKI}U;xnOo0;_xxmk#q&6zA&Rf`l{M&g4T`FbNqrolzUDC8&h;bv zqMkF2f|h-y)2;Ll@koYU^N@Cxh2A7qahljc?bb+1tJh`0;uQ;0^c~drByeJ*IP}H3!yknd5Yn zmhJ0ma+D8(DjvO1^!l@6@)~2f`qsgFcIsPmDH;nwz}e|j+;uMn^>W^`t|eHHu(6X# z=@a`?_*;Nn{D^m2eC1o4l$x-#oGl?ryqC(gGF`Cs6>)1k5`muz$zn8xZsqSuLv`xf z`%L2lU!Zf!ivIo{X}R1HSf@-?GZqMO(0APfc^ zP&ff)c!i;Se0 zwd$uK9hB#4(pme(F{vsq=Dtna*JQZ}tC@Zi17n?>?vtnWFgW~@o*tlFL*W#H?ECIp zzhZg#k~6=gk*!nF~X4)?V9( zkf(lGA8DTtU4a5FR!!`SjZjm0zaFXA)Ifw#d?%+fd_0Zr}<# z>g}g+xpmjMJhQ-EnztVNwm!(cIl%y*)4<@-H?u*Z>#zo(NmybP&U9W87G6SLr)6{* z^#-2L7va2yI|T9}`D}|z^>_~mu+=SlrFlCP*-;H+5zn2@-z#Eb45#$fOJ@j?i_lJ7 z;lB2bFVW`?EI3`Cku=T5>bo)1pGNa&+4EV~??H${M59RKfa`n1GFUvHlk2TVn@GY9 z6gnFS3X%pT4eVWnLtHS{bS{G?Y^oImM;@D(b@Mug=i)xmS-9D#D6u)4By}LI3DsUuiQ#A8dy;~ zv~cc(Mp6f}jTrBu8XZwCBxdUkt$%j|*XfFGG2bOfsuHFt1&|}s`!d%E%B-vLm`6^@z>1lIjnJgu_0}*IZNXe zrN|?mPx*B3*1@slZ1rM)>FlE3q_M8dbon~>&5wm%jCmX0ZTD^|->36Bp8E6_cg2r) zkS*{lg%evJCMx3U^AObp+L$@p%h_?RVXX%wyW*2g`B59*>}rf#HBP-qoZV}aE%%>0p& zw@MNfVsVh;K?}k{!e}C`!ECJ#H&k&X_205V|0tw)$%?yBQZzk&RR!AG^ci|+?2*La z-9fK-hhd2H1tzI9M(m4AAh^7YpWNoP^CtZfFL0P=dtjIWMZgGq@+bgA zo8lsEi%&#@seWN~Jt3Vnz>lZVFOe*gf9<+V#NeuTSm2ec4B90S8ly zwvA4m>ZwXXvUf`}G=`p>iA<)T;jvI{EKdZxE~=OfQ7xpt-&9DBPIz@yo1VrPDvPsL ztyfL6Q2KbgE6Z)xTh%vg2b$D>Db3#?vaOFp*rqEdj>juS?!QaY3DMU|!X4vxua@3BLpeD<^vND-t?n@&(oRaL5ZXLTKidW68EZ)*#2@?P5E=h_f6=yJqyW# zxpcW!Q28H^kqW?TlS^=Rx@WH_1P`bQwgdnisxtc0P+X!)@U}8aLBS2`Lmk)?wt$a~ zphK>l-K)1|X0ms^e`drnbXm(fXycIBD$P}FCOa6hH3(cgk zpl=(Zg(=0KetY`?x}YK`qpvL9cW%23!z*J5)}{@l7KDi)02ygKtusupCSk&$;*wH! z7umTvLD6SD2_|h((|3+*c$Q$3O=~@XCW@!bk$)4mMWy4UDm+R{1sx zl8E{r-=W%RY^Y6=L4Uv6rGq#bL8}YH@0C`07N_C-cTXPw3X*k5jH(&bK07Y-Hr|zq zUIBNcD8b%h3Q4Ny^uUe6ku)s6VM81qyJz4Q8koerVrW?f)QqNUS7x95U{BaBH@AO) zAQ@^6M(J6!E+2APC6A0WvU-AE41Q?_%?_d$au2s5mFW>VF(&xd;`tY|Df(-R9D|SU zYp6rp;>EZ#f!7fi!ev+-d!ZCAgU-^M(jH+RJ6sO*SsrT8ls%q({9>J7G+pnj2H%9+ zreZxXgbMGhO8ZQvZ4fc%qll#2hyHiFcv&l<;jPzreCLqH7*Xt+9R{rgWu*_tI?)tb zn&;R7>{|}<3Tf$2L-j#BoiX2?ntBgU8V^^q^&h);3V-p@@eqlDn^pM_BuE^rSy?yime@Fx49e~BdoNH07;RTF77HD3>f!=w>tK+~?zAC5^h z<(Q#G62!O*DHnN(i_}Yxf7N@=q*ekcX6pF93BdU=0v{hrdEHYFd>96R(T$1>BM`yA zfA<5Vz|%$@hkc}foW@Qi@P0zI5Pgfg)bE6guhz5G2JA9|1r?P*H%g5)e^6)w8X?m5u-mR&U#Q zyV+{*vt7$TqffEopVN;vq)pHN&d$9Ez>E*Y_O-tZ5&6aa_;frp6^?OQS(u9YLNgvj z5pWS_CCj${8!>YFjk(A4RBrVh(B_w~+(Q&Ci)-|cG(FMwB9{eacSxSDH*L!2Jo#4^ z3866dR7qm82JuiD`175vWlv}p zf_jn9=ISMqo~~Ccn>l*XFnG_f?E;u8_5VmCxxYn{NszBhSL~tJ6F*_?2C69VUU`=o z(ZutgplEs~)l6A7F(~m0(c0TgwgnR6>XkpgXRqi3#s~b)>*kJx6)7+yN$R*ESsyG) z#B&{H$3~ori@e@jz@t;L5PGiRgUE9{E0gh(I2CCAn+yd#UR4PO5{clkZPY|BVF$l1 zG-vueri4p-OH^(rADH3S&0ty=WvcvK4_Nh)pr_p{Ed{Q#j$gDPisrF#)2`>IJ+$4U zXdDvMzNNjZHd0$l*Xe{h03oHG1=|_w9yqoOK`E$sF4Z5buZYMMhUYW&(f+sOKH53q zcVV=R+j+uiYC4db@c_sdso!k7R@PZtF+%2mmAJnEOajkjQ7QHHxz?E}D4&eiB3YS7 zuKw|$tTjn72PrbBaCGeRS3WN=BV>|_DQ!@_0h%TnIv^dC&TJ+(=Q{wxqjgcPY{@n} z!9vbt@NlLV{18apKE4kty;qtohp=erCRGy`B?(Q!3v;8(X!S91PK#f~0=i_5C{pyW+MTiP_gG0dP<&za6VXH~_Ef$3+=5(#I)N=P2s=vPUGgQhuVIBDil%Lc9Ew9~WMz6_wBZY~Qi z_JOYHyf(n8CH}vsDkSXmFNQmFOxNz!h7e?n&VBSGS$ks15T{N^u+z{Vx4$>v$>-N2iyCR$~^z- z#xCIC3|tfX9x;ZqM$RC`*SpB$Qj=>r61iRO2D!7Q%#<+t>H_iH^z#zC{UyQ&lE*DF zgFk`m08Rd*6BW9p&k|SbBm6iK3}P$%#o1moQ8UUV95m>VD;j=zCF@l}X9U0us)^Oe z%qwb-?9VOmL1F+#dtal$=w*IzZ}UI+l;*mA?SCc0c*pfy2~IK(3tOLJxP-zh1_<1k z@Y3-@0`>k{s^%6D{q{yo_is}QA;ugK4vY#EbxU~6=)?n8sp?OB|MNbt3YH)j_A{Ob zg_X^X7em(oo_*$hN1hSn3j}?Rff@DRp7-4Ghj)WIY6pw36r*A_rqocxaf@U%rb*Rx zY5FpAnjNOul0JuXhNSU{jB1vbtv|3$8jPd2ww_j}jwEe#t$cE@>koUjG*q*Z`@zB` zy~L3zO)hYQ4ycA)h_U0cZ}#hQnY{ooDrEoU=8XmRSfeE=b4S&8K!W3&un`co@c74_ z<}E9g8nK0sKuB;Y1+~QO%L`E?vM?jrgG`a&+#z>1%k9-k`PL`0rEJg?4&wX`R}~~R zABlRb>X#DpP7DT{*zkY-xDz8D8Gcam_3j4(TbH;M9X43kh|nY+Q09LGai#G*>EVH6 zO)D#y)T&)i(z^Y^tKg=H)saw80kkG{d3@c= zZFzoh-(>kZEB{%l;PO)4FM!m>6{XI(j?rdIQ0@VZdNu8$OvAOiZ|roxa9n*rzM)aW z=M|GYGaJ$0(}nn7|23k-haeB=7j!@NOo5CwHB*KSCPzsnI;|1YViNohZND$TnNpTY z7I{$meHfPa0Y^f}c3M3IlmdPU+b7OT!91)?yiAZGs-!=U$zNEe)eP=O%FMnRBrV(= z8uOXV>lJuUN=4JAu$vi3acK*OaE++e6&r|K>iI+`vZlR53C}{XIsMPDY zRJCBeFhcMBjc`~Qk5xa(0N?CFJncO@snp{F7%e}D%9Dr($;XsL6V(Niq#m^k_^EBB zK>uE_oSKwnN_C6wi>2N#d2D=Ko;OnNTKB@qIp&##@xhd7=Wb_SIdXILOQ(&bp*;)!*frnay0)|pm;RzmuVPqY`SgMUpbP6z|Na>Bi*bR0D9v3|jT0@x! zm$})daN*(}89U$o`1Faf+Jn4WHx^j+@`H?()cX#AnDY+D%AHN zf&3;}6Pd`x*K`ANJ1X>v#mhu*FWp8M^liJ_xn|}a|5g*LC=67gT>B3Mmb+>X$>FZ* z{xtn3C&cTs9d!O0aSv2O_BGpB&T)2qz-5?PqmDjVB5hgDJqNWJt5EUdF#cHc>^9Q1 zkHEDFejhKL&(~X4u~g!LMSpH zdF_Najjs4vUi!EAcG#tI_h!GR|NRc1t0-?1xNk}6c+%7(Yb#TD0Gt$KNj=wl*aNMs zOR0`QO=0S$(a_}9;c-iz1?(oN{RIWjrUP45k>jSv-NwFj`^&DZBTBYhGq-i~&vz7b z=!;I^0dz)q;VLp7gkYjp0POF9QgXko@cY99meUDZO!uqt&>mE`5?(48-Hn;KVV8tx zGyq@O@r=NG-u3I1a+3rTw)9gx1vfE|Tu+JwecW!XB(T3M`SR+0@9!!8iS-XQpV3}=k?zB+CuKKIx# z**l@PU$Q9lTaO8*p%dYJ$mqMi$6zUt6T(i~0L%GE`N6^mrt9E>W}11r6xOy+)UHOK zs6^Vfx0M15!U3U@XV!ubC=(SA&|~g{i^6LRyR=Ic8>UXrGJ(|O(sh&*qq`=1QdJK@Fh0<%`%ypz5q~g9|l@? z0#!>ASc07dOFwU-(S}}N6jZ^aFuoTVl>i*&-)Ionc|SEDBOU9bPyC#n0P=S3vvjtN zCFx$PXxSV?bRM*OPiOEmQc8?L7=xey4PmWtE!Dq^xSaZ3%bIrLX6a@JLAPgj9uN`9 zF_}BfojiimLld?mq3vroUjf{~JDE%>l7dAW0 zR4mxOL95LtXKiIy3oNRchME|ex{j*z;k*qZM-sbQ*i>MH3j6;J;xATt)$y7%+ouA+ z+M{JqC=~UtBaY>{>Y%5en4EV8;B|qPG!*BRw&c!@GbR{5o&5JDcK*&gOv9HTI{FYG z%J$y=a6Y#bNb4+Q4yE8?qSo-}ll(MRrP=h(_AiA|?8>L7?|eh2q;nagG(0n4nwRPG z8y_2m`uLmJuqtrQ$RhI_sJcHgogHj=tC}451GC;#JPkg494{!)V8o8;XFnQsu$Lgc zPySBjC`tM-r?ydvvA72+d(fGX0a3Hzg-#jRr3#+BuNVYKU5nlE9R>=ekSJJ01Yf>a zf9Vq7O~4~$zRS>ioB9~IbLN7HIc=HVrBTB!)rp2WpDp001# zDNzVn7Tbe01Tgg#8GU<1Y?88BLT>VYcc|ghKHCXJ7BC8z%5wYp+0vZRU5{`zkoKGo zMOCGb$X4LZ0Eg-LSUz^4xQMXsfq=Pyr7QXC;&o^OykDBd%GfpcIrOMMzBFlZ@a)C| z*-z_u(_B{tj(4otGM+qKIa^$|uyD>)EQj|L!BoVisV8P6?K%E5b##eY$^+tn8WdIk z+meWbMOkQyn$Xr$1Tt*HsMJrfbDombx7e{;a!`aCuuGh;lk(k_N)^qPfeuGAY)rQ} z!s$qG6?_#m0}?yqb6s*y5Gt?gOe2!jx#PK3AzEinWEsyEz`YuHi3%~EvXJu~Z(V-T zd4%P#lX7eR5}v3^u>BCEr`p;w>?dSMmD(!+t1C{u2|%rO0_-goI{QK}ozuMCRQJt6 zC%?$*8!ibKEZ4DmzIbWRBX-G8;MxV(;9TV9$|(yY#+SBHu0AdbgG44X_>Tghh}lxv zL7C5WVQa9E%S`1ztG`@3c96r}Rfjd1DY|GidUb*n<6^I%%rJXrRu*ua7>xz^Bz5n@ z^(Eq^ea4@r?-tQavgHKbfOS2+)@e8h^S{TxghPP=dv!40+U_PQNrElsX#{<72mp^x ze_l)YjpK$jY7OVnil%(9kNhAmcJYqH7O=JN(6>-TXfwpN%lj zxCZh*z;8EvGLxt6qGXQL0jCE^vBtZI^R3;@yDbCH%rLPrC(~i^&)XiGcToR)dT|zL z;%t$9;A>wt`5(%@de#GuO#U;I^oXzX=ad6*6F3}FIw5?yakP)LJU;u|dI~@ktcIpI zeU7vFQ169HYd?<$zO%?*yaZ3TrYb-m;zI=N%7AE7@th!wv#K40Tbu@uBHGKbCX<<$ zm%493WzleO(QB1i5TLfdrwg;M2gnMZ?$${t^@*f6U-xW-r*f+WqbW_(P|X-`Fd(6; zb-6m{BsH-8yd3b)T-nSq;fZ>8;0^Ek#7wHj2Pc}9-(FFdsVN6P@TQb=L?3Hx#cn@^`EwBG&~!e zFh8Q-t}aA#{t{%2&^$1rw-7are`CL<$8Dn*jBK5>Q#06BJ`0&L7lkK-r~zRjlDkY@zhX$jSrP6bUx!RIoZEGp+T8@ecl z&DDR8LRUw#w8691{w|oe{0n@exV_a{zLjN5{`Mk3c^f=b389^gcQks$shBH)-a=x` zt828RvIvoBrB{mp8@B)|`gm7n0&LG_s^xh{gOTVb4fFCKbY9=xWx@l2y-JBH@8R%s z)2~~7j|vV++h9SDf3j;{0sHJ7J>6|)vvgo&LyL5~Sw@x+CwNhXv}>-P3HQu%&uPS- zI;vBGF)-qfqVyN30t{)5F!ikt%YO`Hg3rhW24*24NWCz6w2i+@A)V{4f#}w$x?`>ZPIdR5i?{pO`dfrB*fmG%X_m% zDltfWK=`~ruMp`v;-B{~b*GVIV-l~!D;$<1FLl^Amw??!goJ}Q^I-YGR@%BoekS``gRrhvQ5WeRf?+V(+w2dn;2o5h42e7O9(yx#7a4rHT&PSft2(c#;bm9w37t#2=u{Z|HTur zc`W%wS z_cW%cBT&c+poWhUWt;Q9s^qV(%6eo8Ar%dLen)7LrY;0V=uf+O2Z3BD<}GB;)lY>G zReN3tediGY`XVy7^cxT0Y835}BgHL%5h$b_d~BMw7iDR&Qa5e~=6vw^L;pFKtMM~C zq!=`z(dK5wOEy7%d%?u&fN*$cmA^Y1HP)Lq!QCAKs8UZksNMMG#GIcQHKT}2OPm)z zj1;K-{^2|G4a{++r{lC!?zb^la?R4zUwr&RWV&jF0;52n5@xVO@OyQY4PN1n8jgCp zfqact_94sNu;I>y;qLAc$2FB;sA`LuwLE+U`WNRtlB}4?vTYHD@S%3$LoB)8cm^43^vThv~&U2wNy zS$;fc@rzQ?g-sSRgB`&L{VbI=Xzmk)!pH}+O_L;U&2*wiy9I$`k!v9#C42&*#s*HK>W5FtFf1 z=D_;Di!j!g##U5?ym>@Gl1Vet?JBV{ z1Rh6Vlc2??)aIWAL-^wXVmQ$ejGDFHeQl{48^jsW0{=o#OTc#twITh8_@ZE_vyPF+r{b6&)>zawCZarl17e&d8o@J5K$oC1Zn)wweCi-*UEScKfW*XM^lc* z`Kxm}OnEv#=KJ4ubC!Jo+EgYo!P&pMUG6Wm^`mp}DqE-!Hy#|Lh9wPCDVK-$BIR)L z-}C|F^|(Xje~&dcqGL;#(-uKrSlg>r;B@O2)VFp$QB~%{Lw)a+8-w14sEP{|f~6e+ z?n(>q32?r|urUo09b=F5{^fTxJ9N2{=#MZBZr`|u2&}Kj<03SY4-XVZw}I5^e8G>C z=nTu+mObTTef20;?xN0QaJK_B2l6v$V1%V2G;>{D-E0+jLqP;3OZMO)jgfSXp|{yCQi=Z855M8%fe|f8N?bW7_^~ zb!`S_-hBXup$s+e7@nO^=kGA98XX&pSULTcx=dF=nvt$i+bb#6!KP%Vonhk)0y9YA z@Km6Nf!U)D&LaKz2VfrVssao#Tn>{ogccrvsg<%*3nQt#XK6@2(4;&CwRyvK38i4W;`hB;=$+c+9Xl!XL&3n?a8beM%jQ@lp`g2cg=KTp zuWMZ^8gC&wjMMZ*dVAXfnj^%(2u4TyVBoP(+~`Z=xO0OyV_d6A=Xa1!V>N46rfdjE za=Gf+3Lb{`5g3kMb#>bLDdH!iay(tlNprW9hY2C3^h}*0z=vHFZ^e&^d$|MYfqoqP zjZc@L_HO>N|31D3s!qT6RnR*vd3GwMwIS5Kmb;}diY<&k=N5YSssy?}hgS*AL>Qjm zzRDwZR!rq5)AP6g@(UmaM94~IZi3B&?u`5-qz0bbgh_SzW{(R@jCxe9e|`BHocmtA-R`G4wlule2QCD8~^fp(KyEH!BSK4I#$>m+Ih)hp4c@WnWQ z1gu=VjMRdFQ>TMf6cg3>KDVJ9NHw7Pk0Ttf>vht;W;&$IxH3*!sFuf}62xhjxJs44 z!^$3bU4$rdfU~f{O-V_G7xxBkT}?@t@nquG^as%QXYQ<{$rj90a!aXMI=83j>LF-J^S7L7s{K zV8OyLUZ>T)^sYV)8?)A^N$_|(%WxzywEzcq54J$Bpck?Qh(1&-%I`l1NO;;dpVcer z1_WZ<)swOP7xUx}yqO~-7x80&Bq#%k^q#W>Id zIEJPzP`cD#xXMMc1mlz8E6`Zw?XT^S+rud`O=!vLtq&!n!>s|M-!8>#8k`vFb6Of9 zpHAVA#MBW!E7x}B-}LaO5Aj#lTnE%>YvttQ@&-8Vc+k7x>Seppmn+>T_v+SdutYhi zB1&Sdv~seQ`8DxM2t6kHbS4|IvKCQTU?W=U)Nq$tc;l?yBlp(e|!g( zEIjK3a>v4OH5M?03Zswe2RZv|zl4onaP*X*Vica8iEbOHlY8J?o|mgvMD3T%HvD>Q zRYZ=zzF8C!yrXB-$5azuMQv9XX>u6C^=vC;riiu&51*2(zl>VnNGoQMABw-1}O zAQqTc6UpT~*&i|#dGWpqIK9WytOijZN{)gOSRrIM$?3h7jT#RIhc+Iu(!=auB2Hw#x7=UtySPj7cgOf^i0qf)2M}2-R*D?2j6Q z_xu*d78(1&0`QCM>d#TYn@@5-(I0P)V`-9ux?J5&t0>AUGSBf!$;Nn+O#?^&5^$A}Is)SiChbX}ce6y#><5%#`fEYl@7PnC4}%lRipd zM!uw7ubx+A3N9>BTf|UAUz3H*Ey!y8-+?oaNmw~~%R%co5|Q4CCA10ld6Knt_Zex% zLE|ZT{z!v zGj`2;k#pJ1hie(94U!#IzQcKm?o|Ajuag4bu6r$iVo{-{W2BsO0)a2#jC9-9AhAY>p7}}s;h)^yHTz4_L`HynB@ni^=Uu)mB z^4zj}Jf6u_Gef2q;ZV^0#EPpNdy@=gxh!4*uw(f>R6z6NH#t!qoTN4Mz-NgWx_-1e z*sZm6wg1$Kah!LrTf&J6ISY!Sf4YS1$KyF-ua$?6^W>WXnLQ(94!#e}jVDEd6eGYPocxM!0g&h<3v$k#yn(8R`??4ep7 zu6}`ITxz+c3M2|Rr-?1$7xnL|zBA;I63(4!vn#u#V@tnfpD-Ce2}FRWD}U}&WW1!F z&g9S>aV^RypoH&ronv=0i)-C2-K41TStR|UDepON$LZ%A5NUB&q2vHf1T&dipxgL> zbzqy*?{56&CYR4;9(wPo;)vl}!W#TJqQ>aC1R9QsaX3Oth!cSNt;ENee(Q+6A9vzJ zdZq|7{T5IdKG7k$(DG}cW#gUqQMX`=+#Xdjy)fp^$ShF= zG490+xiauKB_pycQ%m@yb*27C2?3~$)f^P_j55?y7+&ch6#kVizQZPQ=2ST_-De^j z=K?bUhQyiNN~T@XI!#McFiVWHa71?cK`LwE_3FaJO}OSaH6RT=lAA#@B9?&e*4p~e zdoGk5zEQDK7KIEjF&vNHrt%+yV-~#MC^Hr-uDY|=tanKGZI!T^aIK6GQ(*e3(9CSu zJmlyjgQHjeov)Ap|MjhVNWgg?R4@4T6ix@n)F;K5k_vG%5!n->IJXxq`4S6-QYK8_XCQQh}qR z726^X1ITK%`*&mT2yp+Dzv6}CNpwWM{?{yykX-jpO#WflfA6K*UNe$92$lO1_4YfS ziQBg?^2{fMa!}+@<AJ$D%f7-+8In^lv$k;0|7D;080baJ1LTIIVDvl5;Gm%#@dnTCTyz(d5Vw%X z@La;9*$l>hJRYmW{L0>oSyw!Q2Uw|7;8(?qjgJNii=vk+LVFN7$w9lJ;0tqK^ei1q z$R#UaUNCNvfWVlmI#C6$ZU}(;Y;oBZ=INY*j*(&BZsB5UI3=M=da|t!D=vyt53%zD zTa%x#M(VXR4)&4cH@vZMt_!=owudZALq*-woH2dGUJ>mxOF>FLfP)| z#&%NUIzk|Tc-w86c>ZIFIK;)2SlHNmt+cY-T>8d)GeP8+$ZU9Yzxb~&=fl_#IN)0b zDYS_^E`M}FI-Bfszp4&O31eqlxd8I_PU8}NN{EovOFx=(O9vtehz_sd*KJ&BXBKcR zD!zG_C3(F3V$wM-n%VC+ zqcsE^8>T&jx~jG}srnH)L^m$>bSD4$@?!gK&X59+wQt}b9RB>hYp)=Tf`hS@6(UF` z#Z&pilx|bp>L54#&tvb^@iwtFvS%tg6}swV{yK)Z`w)xUhQ6uui5VCodW^hZgdGE* zp7yp#LQoIVSs{x0RxHSIYS z;9vd2e~!k%DOg&pQQKZ|k!HLU4u$KVIh8hi#vzVTA%HXIU1QbAxs@U{;QU4v99!?;BWc<=urguTnQAQDQ%;Uq$J z4%+F4Pw&KP=3fheGb90SWi|kiKIesj$m%WNuW;ny5(#vIE^a!`p; z1y3e*gOlbZzb2iEjO+i5CG9OVCe(T*_-9W;CeC%Pb3Wt! zd4JyLT;)KnD?qfYR;s*n#}3GKkn1B@sQZyCHqcpnz!8@f$Z>U9#Jc@-}iDu9h{t7aO_sMSwD2@93Z*1p}YlR z@4bq?snOOiDi{Cgi41BzE1sP?F*|d&f~UfZH%bwCzNTu=9TE6ClOq(v?AN(^BY0&0 zB6o&cXh1vo>wYls18}C6w$~^G$jG4EXV0GF`;ElDi&XT_JiocH7B}jifSPMLi+% z*@G?!vQ&Rl!GVSQhigdo(13BHf++kh$Yr2bZFKr!w&b&&?|Cv2Hv5ygYt|&EjB6Zv zWz{0}o8t@p<0D58A|0ZS5m2?X7+r@KfdMsYzNmXxFFiQ_K4G_m&}jW7Bezvw!~k?O z)uVi?ffD!DsZS|m3}0+%#e+E@+-Xs+7cz$2m3tDO5`dSQ7-L14!BHfT|A^4 zI%@D~gi1k>O7^csb7yZPq0ptSKhXI@H*$e%0nHe>f+k;dk^{NkbN>%i1d?};t{im= zsDfTk0~Q0E%Myo5Hn`VGA#=Cjzsa=I?JbXM#jaLMLC4e_{5G)thH~HpP5}c^^0n{D zjzE8D(Ok!w>-JdQsZ2@=O4eyyApMhf?^yiqZeTx0#met@{d+qkGXdt2l=(DQYu4loRw$s)7U zxh_!+?HC2mU5?T^dXFQ??|+W%tSvpQIDT>6r)|;oHBeYPh86>(e{`o>KlPCc(?B_$ zdI5`b^%cFanCZn-`L7Xqb5*NXXt;k+!uiJ!D6P8w7k<7IQZ!`6m#mjtDTA{ z0VA6FuHAJqN_;n~0EVfL#hkPtL!|!4B|*_lVy3H465S_TXRvrAuS3Y;73=*? z#@I@aJh~!9qI^iL0jFi^ehP=ba^Pbm_K2aCZ*X+#->3Isv3LZKMEjJkmuvErr~5+C z0~M7WrNhFBDJS9p+`r2V2JFfboXKxBv$)rbHYi&H+rKrOc9!%1*}h{?z+&$-UKfTH zYj!D|O{Q1|e?rrIz_IW5puC#7WHZxn7J6)tHq4+}-(XTKjIci7G$_f6S7(c#Usw4P z)Qpn%_*q)&`CX&ssiXe`Rh^xY$b1c$zfELSSC#>D+)y7Hwsb|{gb;f$Vdx=T2t$#{ zW}+t*&0x!P?<=ydsjBDDtX4M)mAsode*Z1{W7xr@jw2jVaD+$GvEAzIXY*^{V7tXa zXwTs@92$A2sQ#}`eF32zV4K)fqf@7Z^IXxY$En*P|JbGXB@dPb0K z!`@p;T3Z@i7F|xy{x;kaX^xf4w}$HdPGe<+)m$C+J&?{lkI(kT7(5Ey~*@BpRoxh8P)YRT2A)V;XVPovDr>6Tnb?YzW?)KBL;h!%~&fYw-5fYl@47 z>=DN_a}1pb`w-^`bLlUvLnE$2b6!DKoqG9i$Ch>XANAdrUpbYGUl0PVaUD+Rl%sn75>%xu)SCwQMm7Y_H~njkQ}JsV5gGaNAP@zn8MLHp%Hx zV^9u|W4%p)0%o?E*PGXYduJ3^@HyfT*HcezXPugR>EihsLt^hzLB z7R&T8V72VOj;PWYVd#=Rp3tB5ad{xcWa>xIs`E2x{M}TI$4X266W6>@|APxa6v%R}!#3ND_0ISA$G+Tz1U#-BO&{32`Wxl8gG0s=t57Q!i)6{K4%+d>aI(Uqjer5=gLwRDnhy>wSW->YRp-%aEVoRBk7i<7 zeq9+^>o_O>8|6SKI62Q{CXbJ)WLpbF3Uf2}Tb}cY^7rhEnt&cG*Y>rxvUdA|vl*Ru zj`3wmbDlm$;GUN@{~0;+4#VQ?*{tr1E*rmYA}k2>$FvS?kW*zT z6duu5ab=`?i32-)Fg~T~8f{vZ4cHdVbk!+DvyQ;TNMFD`>+#M=1Wc%LiI>N+U?1NU z@99;E@p(%#Yuav-Q|^(qRRUg*n@uMD3s0pmJomv}9^~)I@OzxnPo)}>$!f^1D0HTW zALR(WC+Fhf4RubvW?dlo6!#)%I!(H*zW-Z22riwJDgW1Ni5N=cVZSxk!LM|Tv&UZ2 zuLq~QBuVxEK^tlX^PuF!7#_^NVq#t$eLjC2sCRXqMWIC@N+ky_S7viQs%%niWoEa3 z;UXtOjqznk+E<`Z*3*`3LHdz(!n<*`F_BN&Qv*YGV70Mf-<-ehv+~-Fh(`z){{>Ia zd;6l$PvnZ=w~r(gnfOmzACDFf#XF>Uwo3wFqBK?ps~&qVI86K;1Z7o19HHfwXd?QF z6N^uHJ*4-i$2>N(@7iInHB^d8F?hEn;Gy-bai%(H*PQ&J|0X5^yhdPBc1&0fL1`xi zrQFs^)tD_#n@AcFDv9}z=4H`y&F@w7c}UqA-`+lcZ62PxBGmjNAW}nRXT(6UXq0$v zdCQfME~>V8>0YeY*~CCxD&tzkEg5*A_~`pCvB#f#Hjxj;O8WQX+{%E(dr5F05OJQ3noOwRx8Upz);fBY-$QD^*2QjfV> zZdBCYx-WQF#Q;Z7|DC`Q{AS=3qNfM2g9nW+86afJ+=^@LmlI9@yqcMvmbQ_1j_yHN z%0h|J{d6fX!zz*~W5MX|OMSD@Y>}&Cv5Q@8>4@ukVy;nKSN6E>f3GElt#;)%5mFvl z{>9GIRn!@t8&k*__V%c|-)lb0-B32(Ie z&M2Sr7W{N%HkYw=AVHhX_favn&;u>0GMGTdgGZ=ZyM=W$mb+%_)R~0nPp>XfFrM+k z^E#Rv55JPyC~p!TK3vC5f32}LGg@exn#>EHom{UzSWyx$xo_Q&`7xv{v)Q#HPtRfC zN8Fb#V1EV`h0_}%yE5XFk5WZ{!3*oSc?ET1->0D7?p$1tB z^%Jt?HOz#fqJ$6U)>?Hi@Qc)U9lFL9@l%^3Fs;sui^fOTTl;Kry*X{I+De6TWqHhi zt@+lgd)V2Eoho7xK>6UO@YIy1D-Su6$n_klW#u?)Qh6eKYikYbgKVtZi>z;tGQazc zWK7?6Iwav?+N)Xt_X>GNwpN&k2J5=R1hx>pm`!FWuf?MpwytfRF|^E=tAuK?o-Zt+ z*@|zqS!G>&p#rBikmDcYzo}J#oJ&n!kmMBA{>B3x$r^96iWvJZ@t&Ndwu>OsOEVay!Ric{{}x=S6CZ7^+LQK)*&1WbB3 zLn2U9v3pD7`#gnKsjQ2ym|8Q-L-r!4 zJ$;F-%fM?rb4`nr?>V;K^wNM-*)xNGot{!X#i7P{$b50<#c?Atx_HYz&aD%QYMnuK zt`;&Hsd($IJS!AeD4{pi(^I;xtkf7!TrV&*byTk6 zaax+d1mR-VU8I3pVRm>F(v@S@LgKgAL) z%D|>GA29uNKXA87!^rFnZ`iJ@1OeDJQv*iMd&mf(`YV{gGPv%<8J1=x0M-?sMxI;7 zk&6x^Bjhfc-M)aYcZ2Qe@I$Vt3<#c>fpYs_JxuTAspBExRcX6jbqBrhgofwwRKMoj z=_`+UV{elXRQIQ?lLsS}6dF*nc`@`XhCw(rbNsdEll=vO=t-2&oN+FJ*EllSQf|&m z8$6_HONkx)C|4{=EXd)@z~*OW3QzRsx_-5T z!nBrnV@zmm!V>0TFn4vW$X~9yBB6V|oIUp$2BSaS<3M%a9KG-ye`M+%8!d|+;p1*- zp?^I`PIGm=j(vr|%q?2@OoS7&69b#SX_4#mte*hDQQdfJwj}acK9G3X3I!jhG^wl6 zoX!&qsx*pL+2jk)DO;??BmJ9Jxkk&eqf-@OaG$2f%LBVjwKLiB!R}|MJt~JuxkvC2 zdoe1z0sVw=Pe**5>*YeEWwfN~>ZG}0*8F-Ncabv`ra1RL-@%V+@YqW%*A|w+g92?a z&q7UpjM1L`n%zAXpS7~G$QkbX^c?a6kYm(OMn2^Ls6PSn)PcvJFiJF&PJ5y|ghZtB zSFcX(#;*|}W>b!7C~IzOS*0dbD9tnV$sh^fY z*+)wvMD@5 zb1wtcKuS_U9ODzBb6~7w0)#!um>t#AHj88FYvUh|K9)7>3!ia*eBzwr1eYhTyp#q{ zxzTZFFdKNpO-lA;*!Tl5#y9U3NS`>gtQwNk+*T?q+p^{}!&xh{Umt|~tLYjZMUtaJ zNn9;qc{TS(ohzfN7Im`Fc>#F%5biM^>e9e488IWavoSp~mJfY#a59?WtJD5~pg~j1ORi*w2Rs zst2iX892%TEn`FG)p+wsd%L`lea*+W?My#34BHJEYX{gQbM0rAyDQ4~&!VMg5T$Ek zVZYqpCEH=6Np^cT(K7hjbx9LEWE)EnVN+3KtmES>|MW~7%X+@M0!c& z1Kvl*AMANJeoc{XW+pp5x;4r71B!rOM<#2i+EA|GuukB5DqF8ht<=XzaPsi zdj&7=tYt;%Yw!vZ(%vl(`&||^L1Ie$oKh{BZ>mVRE|@GFRgyPdsf4CYtGE~6*525V zPFdZqKWsC0@)?x!m_4f|LodT{#G?iLNDM(}^lY(>cC3x9CV=YxUg0yrLK~@bz+fa! zc1$CPHG}SCr%PQ-07hez@>kXM*G0#!WQ+U}pW22&?veV50Yyxn?W((+erlS`tO#kV zU5M&9?BFaDUb>P5ur0$beC5}!x#}&0kX?fC#y&gK?rKk~dr`t|yRMq*?gUblh}nsC2w(}!i=Rv{2;&D{plGGZI6w+UvdGWJQ?j#YVgQohe&<`s!dKP2dS&Zi;w{;LOn-m_itH z2N~50ZCT=>kGs)8p1R?XSxW85pMPaZ&B}!)j!UvQU?nM0!V@B+tpMfd$~V1;BN=i~ zsiI-yM2WSHD5RY`@1FC3k|Hg!EhONSN!gtQa6cM$=&h~5>}w}wCoS*D{$-KumT z54g>a6UMF`ch*L^?K0N1Pq=?6UevrZn7KINW9@GE3AQk`>JZ!If` z+@j^cCjzgX->aIc@N|u?@|u{&nmBWEy}XRbY^AIPR306HmgF^du}re{>7hR!g=x?7 z(&f|%N8EzK;=>~1!Yfw=Axx;&a$zs#>nofycP{{!Sa8A&+>Owz z>w9StB&g+ZTt4>R$Hl!zd=@a+bCdG-42AU04Ws!3nj5~_^@cx& zX39pcEey@8)#M}Xm^y3KQsZ_C9(eoq8_kwSWgEgFcqt*wK{(?8HIx+F=0i|nV&351 z#(6mAS9~n5r6N3oyfB$i1ghI9R{_HH$NhXeald}MXh7yEV<3%&+c8lKYu4{f~ z*{3#qqkWW`85;n69{ivXLm^v7GI#*Ld>w1|lI&mK8MS0I%@tsX^qfo^AQ#RuddIpc zvl&6gpD4}w7$oUy=GDf*=;_p#T5rPoe+`QVr#h^yf2rAtrmOmL3t0-QCjwU$ST~I2 zEOFROa;6-j*@Q~P@~;ct(xVyF3nFzoishrs6;*1~l4n2l8 z@@Xs%X5nWZ?0Fv&sddfXfD?}~oyNH=y6-9cBDu_EWar6M3Q`?x30CfBP8MW!!K4hLan8$fD}RmTU`Rfv$rdp z8`x2DfA1EQEg$k=+k9BiqO7%~hXS-`6Ew)_iB(dS5?^ z78c1iH2-D@7f|u=(N4e<6-nV^FT`DAaPQ-bR!#J9T0E5vUe4TpHEP$Dyji)#{32qB zg(GmvbBzBYPvJN)#SO&58z3BiApE}pO`o)uXJtB)G_7!xALrjfT_zi6tWF_6Q6Z?1 zmV(eu{g7a3d5XWvrFo42nygu;X`Jkzjgui&wRh?;C~peu{fsKT7VINllB`Yyu!mqC zWfJU>TZ35oNYAJ#^E+=VW!2Z&TeWN`l28tK5@p~7p*%&{#D z6=%$FeG5`gb(2GfWp-@XSA9A#qD>qmQ(A!|hnw$ema`#~X9O|h9| zL}m94Vb}rvi(q}Q{AD(j!yRp8d0>*KoAVbrXmV;=y=L;Q>o|?giC8$F+S>4xH9qsa z5%yNdJP3&Mxw#;vNk41BpXJDsOnY$JyKD9tL)=bDN;_W>5z`m_3i23rc*dX67YHF` zQ}&&Q?<;P3a$<58MpDjL2#8JGN6(ttHB0b4#6=Rv?>T`Y*k-ye(6&k8YZ8vlWz0urRMzQ74u-hb1 zZ*Z+IGL&8THkIRJWMpm8;l@domD9{M9hbKog>i(_AK}igyqOF?IbmcO2sN&O zw3K$k3iZZIe+p;EehK~mTAI>>l3vA0L;{w=CE9CG)$^tt6f=eA{r!gtT#hHDJYG2J z#{o+PxQ^3{X z>T1G-Y9AI9f1Zx)$+4n_h3I2#ZajfMg6du|i_NF}+fyU6IXw?_gO)!t63F*5pMInn z$hr-p-v_Iqg-d@u2Y>UP@!_i}BZACpAN`VtSK1>UH_i-{n!VzQf+OTE&MN^zmDUF+ zIH7%%>*|=BArF{o`UnlOPHf+i&Ty=lyc8ARf#N#nl3>)Z6E zMRO6pF+gJ;_ssPpW1RS$h3&d@6CefdLFugsYTzW|x>U*Ya7A${%co>>`|6ga4Hl@Y zZA`JN00=YXR3Gxu-T35t!j!N)9=Nduklsh|;xD=w(FbCBH5xQ9_%650kPVv0`gbGH zyLk{)56P}73%8x2r7;dimdVv;(y2J)T?|kNou~RqjUEBDxfiH1Yuqn#9(Ot zw9Fs4WZH9lfx;!%ZvNtXFN|_azhLh3gw%a?-<<?W>(~m!@yHTv)YveyoQaF|* zhNA{61E0G37%fIfv}Y(VNr;R@6_x_2y=324L~ ztD-`2MujslFM|_PEBV>N)B~xmMn@bC7+*nd;f}D?fWa*iT+7nv@HjgD{7DIZ($jwb zG0jAhr_)K68PxtE)jwb1vx%l5=g52aa7e=;qh@rPvg?Jfdl+#$-X>O)$7LkcHhkCs zTGD9(7|W-n*8wgw>OMke(?(Oib*O5O9d#b1SQtskwpnhy`;@5#8LT>G%A2iM@-LdT zVgvqcP)m86RKX0^nKowixO9|mmoYthY0C7AM%uUspo@-(Qy3PwK}%-jw40F8Ciir$ z?Fp? z7yZ#=7~?E%`Sj<#r)H(hdt~HI2ETo84(nW)hOdamE$7qGn9N-uIM= z(Opm(h{@JqE2E(uqTd){Q|OOl67k~vyAdeq}xzlky^i=#S?Bw)XHQwTOBC^MXHI=UnL5yt$N}7%D+%JmXl8FJq~Or zv{6!u%v{7Algi)sVA7%E2vQxQXRG73Jps*I;BJE<`h-ur+r@nh*Qph&C&sT7xNdSl z3eZdkkimf0<%0$9+B_;TzmSoJuTOzg()1%y$)=-LTj!(3KopLgXZA3ndVrtbDNhemvyh zb8~k&)*Ho2OWgn;FPe1L*CB+!snAE^I0NRBa){r!ccS1D0t~~zsDv$bN)Ta?(8CVe zkts=ejktPN(aFE)zzj7@PFLxjevqdla1N-@+7~{Sj33D8-V$3q_<$W&Y#~>A*13(2 z62P#n4OAVuSn>Rcs}6v{@(S{w^TqsPnk=0azMLg@W;h%LZz+wY(6L#G&fT(PK<4Cv8eJ z@L{(?M?tfK!bW|bUe@y=2&5)!6^?OkT;=QOv?Y+9ho(~;Bvk}S_-D!?{UG6se1=76 z(Rrc1bBKF5L3{i9y0i0G+owR3%JC(;H{)|1{CC>hwP#Y`zb9P_LN)=FyQgNclxm_w z%6p#h_&hu-MDPTuR`a8}CPWsI2W?+Gs9@H2heE~){$bGgT@!}t% zf+@bi^BT<~wkV;n4bKAtEaaMi5(Xv8Q8*x!+XQE5lI1DBo<-nPN`ePKh^4JY zg_8X(KCn2ipx8V&!Mqa*>O+TS4cR6Oa#YK%I#O#6*nVs z7Xwioe&vU&0D|<>YkHKc?|`BFIW55Bt?&uL9nSo52N8A+4N==P)S+3Jm&q0T)w^$g zw<<#7hL;4p+wi{KP7*JaVRK-8zKvzTwxb#jvOsH%Pl%ws3lIy)tNEsJt~7seg0)N5*n+{1@W&xFj2^^xlI8~8PNZw zJ|S8PMuJp8zaLKvp{%C?vK$Bw;nS3rWRJln3Yqltu}<8x;_RD;!u^JOciMwD?lm@Af^NFsQxFdz4c`M4>v|AH`Y5+X5>9Wc6qxzeENi6m zBmpYSc>Rt6XHCO3AI+gB6uoNBhZZ`RcRL9~_azzpoaJ&$GHfC(EqJ-%qNQOBC6L@j z`fJS{zvD>)7v}*JArE`)1ZWNAr%?4hu}RALDew)QpR_q1Z_=FJv!$_+vV;b8w~&0B z7JXD$+RNNFiFdc1wC1#te;2Mmm*S4%FjagGNzY?@!`&w_+8dpNboEZ(lx2AQx11j8 z+Nm#H+LAUUot4pG9TN=j_CJ0@S3x;Xw4sspoisOaeRoG;+$PNvScZ|tSU|vnbLfcL zgI1b&jrHn47Y(?EcIpt#xNgt%l-Sy^uCfB{9vsqdcPP;99J`&w~U0a2L6=Z zf)9dNQ<}_I|4P|fu8ee*C_bQSMxM-7Q+V;cxkshg{F1vgh}?P;)o=i){A@2Z-bJ_k zXa_c_$!#*rJxwar`WCDB0T>ciyV~dupUS4og=#E#SIy{ooik!Pn%E1p{jv%sYNC&s z2IS^N^&6l#e)qf!b5BhOaM4!+1;5LJL!rOv>7AJvo%x7HSI&kbWSBmcN~T{9*B6Bd z1-8;e2#5minDOZnHKrfolj{7V(FkH{Kf%NOpE+}xX)%2)w0?<4lDhIpsdu=o{kL<3 z)qSG(0^1}^?9uLFVP$)kmLqWMH=Q-35J8Yjf+LI))7bG}OI0)jV$7U_G;vYR<{Q85 zi|*I%f<;G>dGlKJx4zINDH?Q5MoChR%8ufDURy#2bU3hhO*^x!Uxi#JdXPOigJNKL z$5!arMfJz?GFQ~|%PPawnLxl~%ivHcvhK=kp2G{2E#PRPt(y;U?=V?LD3uXzb?k-cYqFPNhIwRS1&VkWjrPWCp1MdyL^ zz5p{i<~l=JPOP@#0g^HRszUE9H-I)m22n>CJy5FjNC7JKhPOfLCWG|0eaCFo|DYt& zx$Ye*Sy&dPb$OxuahcABF7)Qd&K)YRXU}y%|G=b*b~-A3RYitEyV1%>?R>;_7kxPm zxFjW1#SmHfe}l>G?7+kSn`<~9{nb)!p8S(oRPWAVG^Dl5lDhqp{8Oe-N-?lAEkXy{ znv;T4**kavxT0*>k|m|S-!%%W=`j4t>LE!&1qOy;{bRREl^{(QPh>tyNJ1eD(kXg%nZ?6N=_D!7hP?jqMTmU^HcVe--MsZmLF z0ZmDK+2-(;gv=+%LiXL6Hu$Vpf05UR`uY3-3mGZHl0vmX2$|1={f+MlKJM~Oz_Hx~ zp7t1%x0JHAwT0lJ!23YxaOfwDLDSVpozEBzoh;QHf?!z4mqb46u1K1sSk$YaEX<>{ z|CENik0iB4Ax4AxiF4lZVOx#W&S-*ehA)a%cg-kSm9gL!O8Fc>keCKQdTqG)sAp=( zS0lBKB{%b?M6d5p1NhTob`#%OxGHZV-nt@=&^Ln?@7cZF%2hlWB`CZ<7y-&zFz)7( zgiNloAj+Le87Vs;$p#Kh!u30Suy*5{6 z)T>A^-KM0~Ms=$JMhLHwF%dgEFY;`A`06X~(}FE}DVr9k@z3glPfE6Vs3}a39UQ2gH;dggAds>NH!S^)DNUWp9;5=xO22{C)Ohfk!V6`c610d0 z%!OjIAOP>(44R_MkVK{Yb@7p}&A>74J5)5VOE~ow@uYdbzr;hx4GA@w2U}`X`aEA9 zlJz{UBFY~}0#zXjvh!zDwSF3j%9L3gb`LF3cO}n^l`zaNdeegujf#(ElH@jh6tQqH zzyzOblWp!K_VYmd?#**m6{yfyDt>=TWzqc}M>VAGX=_UZLr(BS9~UwIvc(n6(*!`3 zgx6{PIEB*~vOg1^N%QRyKpf2({`>}ZC*XZ}F3nK<$k=~F`nunOZ=e-OFh00Lj9<#! za;2mT{`vXNH-lqIT@bF`?BC7YZ+{1Fas{|rX43fs{F3%H@cCeDK8m5&yDxa1Vo(Es zPvNBgj+f_OaE?ygGKaRvdjhbu<{GS%{S7jm@q&-tj+YVJJqudu}UHWm4Lld77fS0Hu?w(U}KmXXbI! z3d%P{Q1d{9q7rHVv|)|4UBMe%tFL65Q-S>>K@)#%cB)Wn{&NAtPkAjv4%#^N3v0^Z z*m)LpGpyuz6r_Pn7EQF&fd>w!-|NQ_+VUxn#(q!MF?T(J2Di)j>#)%y5_d=3ADBl9 zC&82J%$!5W7+%70y9g2B<2#3VPl#y?tJQ#Cz3ZQl<2Lp{Y=iHVpsiN{vEIeD?l(%` z5@}~O{lv$l=w36Gs2Fmf-P%zW0=W#dox+@>-4=GnLl%=!J9!wv>sENg&j`S6jTei) z#D6Iv_-0+4{_=2hsI6ces0hF;O-shfT?iv}T3!j|butuBiBDuCQ?=G>S31__o&jUB2Ho z^x?GRlK;cdv+eQ}19ahR(De(BHaC>c)rFz=jUk;?LO_KIzVD8L?AO#A9o4;IkTvXS zdm`iamc!-ecS@bVQs=248D9Oc&zUDz%d*?m{Z?rlLM4iEPqNrpMk8Ec3_01P1S;CR z6Mc$ml!o_ixwreb8^t&d)>alfQWpD+1%pe1#fZnsM;X$FNYCJd5sy+hJ-+8Q+BVaJ zOZnS}eTCvsQjGfpC6Z-MTp^ddT3PoFcLp6LHLaf=PpIN^M%9HL!9L8WZEgi#@4LJi z6EPvWM@8oT6w)$y`|4)7%=3Q}Yg1Ayq$vy0Q4r0;k|@#lVJ`|jb?IB-CISY51B-sk zRcqcipmT(Wmg2|!&NM0%PBPZIjwK`V44}z%b|9u6&h*hPOm)DZ^m{u&W=|-u2{aL# z;KWSJrT*JK&p+s>J*q%3c053Szj~ex9Z0v8{O18nJfuYx51{1LRZz^1hwvLHCXOWU zI}GT9;`n_mYRac9Ow$DKK?8l#NZPr$Y9YvfegEdbVO=UPRgIOz4sH^vY|!YOHG)ac zOpHepK*yH=#qn6N5}lVr)v`|rIpuN(;w8b;SHO4Sl3sDmsG(Mhd6vQYc6Q;g-EIgW zy-c!-5US6u_?MX@O8@WRF^Tz1%KbX~u~nPjNsv6}C^=3{YVxaYF3`p>F&UEJn1)Nw zsJ&=id=*jq*IsDy$(W}jK^PtJClm}>i>&O~+P%%`rY9egM|{w|B!M^^RajWW-+Hle zG_JIo{w-p-*^KcM@W#mZ#SH~Od>|`Jwbc3&*iQ9yU=SwR2B%DOI22DJO>!J@nJ0ld zPEEg`3#~^oYdtKR zxoZmc9RddF_9ppaO373p#)t^Qft>$~X+4Tm*FOXyiB*4KP_lHYG~3`&F~F2&CFgYm)!z>^3PV<~rcnFpA+bsU>t-|45m_Q(MLb#z^Cu;Z zvSy;mU!G0N2ln7*3S>7+CgY#Y?Jk7AG8KV6PdLu|fiGC$lnGn^sv$eIfq7(JyEr6D zs=6(gZ=l6+|K!w&tyg>go@etgXYPzDkHisQ`%f(W!vp1Z^J<#_MevT0%BHC7pm&X% ziJj}fqn`Eda_ZnW7*t>U(s=|0xa(26$=Ph@(SpA@qIrvmCnPo@D#@Tj{kyKX8tvA4 zn3)~M&o-HCl-5+TGIKd&!s8fWhT}kX2_&YeCt6}q*a7OXV@bCw!iLTzX&v}EQ26_7 z*Vu^ajJvBXa38owGKG@+BoYEiIW1>(+}X#7;-fVeagMsfG$WbqPwa)dpoCW;0}dRE(QwDx;1!AWhrkS(q6APg&1*t2mQF?e-?VKvK?m&o0Y^Z;pp5-e;c^Y*|)oxo0_4f;MHr-PYSiY`yRWo2o77ySj=<=q5Ow z$QZkLhz&erbK-!eME*ELE?5GCi$bHbhtx#Dz$v!4)%8}>sV#@b z0{l0ItiAupyh7>dN!pp(uK+p}m~@kR)}OG~pWlpHx|hK~q!>ra0AZhurIBZf9SFmZYCvgBraOFfTp)O&K+A+zi{T%rH`@ znDDP&tG%P=@HQw|&COJk4{aT7vIe_5=gkyTdTm&KF~5iIfc{rV=?N;7k|C1MJ(g;@ zgT9z#FDW<1)M;9ZVEaYwcFTv-ppj7D4m9rpcL75O+B-hlZvk_jMw0|kT|4+z5PY@K z3d`TRgOIm!)Ha{>EQ)j0LPq~~29UCE(^oAQXiVJ=(Z3lql&W!9Ccf3m)nm-4#_ldj za>=dvCX@?A-`YTd0aiQ7C7&=#>-&RB)V7gwhv=fdrw_{Z3bNoZdCL~i{gGPfjKcPk zjN&{v&lyFf>Hg=43bDHKo9xj?hz9s`h!RGrIIVuka~bilM^ZPE#ws$sd{3A8D(Kce z-GwCEL>hJHXDUQjI<3VY8t(myQ{T@~<7Wj~<#+XCMNQ|sV;~H{&E=F++gNf3V_vBA{WfmMMYGNEER-KHeiaZ`7Q0U8#YUNsc)N& zLaYnKOpBn)*<1mMYoTlMFal%q7>!OW8XDNd9++-Sa>TTBeXZSlNRkdQQ5?iR9HsBf z$+b%nT!6qejnXvkGy=CiSti^wIV#GX|~4v(jhw z8Y5?6ZNh07^r*tXT%^n-By%MOeQ$QbJS}^lswKFoYE>?_G2^^C;E(GzS$3xF9tk5S zZB|xl@7er!a?h`yAgnQ!lcDg?Zd3Ke4_gu7%k54%%YVHk$3FArh}JF^QE1uhR;>|r z#Sb#abwLd|oM8D7cjwu%BH#iY;#??N%!##ObR}_&zn$rrnI{tkqY@nG{u18UZikt? z8Z9-Y1G=OAK(!Y}gmRieCZ#jZf+3FEVZL*SGa=|)vfupk1#YG@)4Hrr@1jZZfp>W;P87ps)TG(Nt2Y% zLa#(Jr`+vvF&WaW4wauSjI%6+LW6j_`B8qR+J_nV9kq`$pu>TJ4BeFN^B6^Llk0(3 ze+>@qbCeg;SHGO(B|!Zfm4&$+Sdq_$Yy=;Ujk|<`dBBRN$$jV5=)M=tKgGdAQLGaT z$0xe)$MK)SON;q!K@v1&pgBAR9hfCXf8BN~iykc2c!WMT*BZoZ;N+QWf9Ky%b%Ej^ z@fr(Q!f(-_K-}@6&H+_4u^aS=tchK@n=qUn!mT5}uUsxaf9jMtJ%c2(h6k@k|Ar)O zw%Z34u^5#Co)~2la1KD?$<|yV$Gr;FDj@c_-7>s05naLPtjFg(QT&6A|=wy7L0P$m$c;iUC7dqkc)D=9^??yJa1nR)< zl;|N%jpC?)A?|5*SnbupE0z{8 z!hx3EFSTjV7vC9VlORZf2H0fkWYPmQflVZ(5cSsDm+hgY3L~&Rx zn0p~Rb=w7gPCGVwXrsisBWndvAUK;vA{h-$MhqP9^i;a-b8l|leGP47IN2t}AD4~- ztsGIdB^PFgxt)AAvRIcmu%@>glnd5WU@G^P)j38+_8fxeF>d5i^& zg2w^>IzFoF%1jq?Xs}5uDopH%{M2GP@L1*!w5-&6eqFD2oCHXrGOPeB*betZ{88Zp}|Mz(EyDIg@wayqoALs$?XoB?q6gbNT z$UPAK&s*xFnjQFV`RX3cjbk_YQ@#YzR>OSE<-}P9gBQOwFRWz2^WH8T5~rWWb9sAC zin(|L3+pk4%R=>{hi^3CGiZRj5X&B_Fb>s|@J4A$VlUsv#fnixxc+~7s^C}@9T-yCEBGXnxy z&P9HpDXS0|K+>(EIB&;Og+BE$V@xz)NcG9MjegX`@x?^g zzyXg9a7q_wtY<+>U9{_qd1RHR&Qi}xj%e%RAmhPQD?v$}>-nO&*_IC!$WjX0?T#+8 znW~2#-nrcw;%8uAgpeL@cy9!rC*KaT`ni{L9(+%>H0W`UIgSw3?zZ>IWs%!xGjqxS z6i>M(gasb2f2ZkF)7b$?F9Ns?F%FR8uJtKHC*fGP3|+yGVzi1!!131OQx(+nsHR-M z9AF^j;T5Y7WF&4UQdHl*j@zvYif`1S=SH`_=RXc;pzCDu#>0jfmL_n>$*7R6C}K3fokFBp$@p9v z9BRw9_Zhjkf+Ztq{4k;$|DvgGMt4#H#}GZ3!Y@(2dhp9hkfO}$#V_z1e+}cc%StaL za$go67d>x3fF{H4K~uWQBD3*Rps~6*jfnmZ*c@z<1_LV#(qjrnzng!h&&$KoeT2$J z*Y;a!EaV^~E!G?-+gP_tTt7pTRnhLO`U%K?`vpIQ~IGy|8~LQ2N0KV zs>TldB)(aErA}GL{$<2IJH%+oN@@&e9Q>{$8WAdro#GkngZ*GN_riV1JSc?9&ufY}#N;z}s zd&ZK>vDs-)4wl)F9;rYzCKinUfo1T55mwn-9qVOMphlCt!O;=5b;DUQ`TuJKW_hJd zaul?xg$=;n1^u9+7uANR4{0NFf_u(J&p9T|ZrTD*9 zrz3+QqKVCTl)NUtq!nV(lDU~E0I{01NVAUMJ}B}CdV)r>*V zJ_b&N0T6!ECeCq6L#g$)IeB?#nKr~0k^oG;1SbLZg2~f=);Ek>nO?8Ji5m@GTE;}~ z!HpH_7<7kV%!8t^p}kkuf0<%tyxOH5Tz`q*VfE10J~tv9vIH4 zN?oXfSI6dWrS_1~a#AS~rr1??5j=eXJ3*KE*2TYWEIf;Eo@+J_PnikG1w7~)u#e#b zmz@8D5UPzOlbm#jy*zxgy}iHjGRr1CJNj}r2`N|jM&w|#3+D}v0JRQDVmDEU13UI~ zODE-j3m1q0aV(};HbK}@r*k{ux%qdLjuU-{|%6&!JZOx1!d< zYBSqU6=&FeY~jqo2hhXluIT#~+4nc3+8*6$+wiz>6&`+{m7Ndn#l3VFKJE5H1{>?b zxg0C-+-Xpqf{G!?k8_nYLq22Wd8Oe$IAE56)B#tnT6%g6Zb7xkn_9Y%$Z=3AeoAtK$Jgxa zia9QYuD|=uCx=N^RTtL3KU@_ZD>Pyo6$a6rF-^z1$1X`@myZQ|0#Snt8A({0Q`otw z!1{N~|G7=+;}wfTB?T!^_$U-|K7dsR}a}Gm91koG=%%nf>&3aHaPUo3P z8ujcxrkGP0Ut$@SXxrI)Uf}+zPtq-~Ti(w+!)0H+L_m}>nEA@u%taL3qxpd-NY#*^ ztzL(Z*^v4V8R|NWMQKH+;L#4-2F2C0T=uYo;pylKIV1%8#DeJ`WM^>Q(fCm$VL)yS6WYf(E7g*!~&34|Q)Ae~b3HD-fUt`2crsEnV?NEl>|2Q4y2V zOTuHAvykk69j=2yIt>Aah&bk`nK6DuHYorOQE^|kP1gt(Ry_(Ek6%Gp9G1E zDC*{)(50hXwyWKnQa9hCMosw8qmexq&e>>B=jals&uq2`fnk~%xfQ5>cT$C1IB$U= z;()pOXV7u8I{n6qs6pS|zu$CGS?8-^Bon-9C(U3X<H4)=Z?FT%es>29iZ?^hfP`mFO^wf%a7Nq?uA$nLCi+;8#bi+}>6yvzReg4?H& zw>MF107+wxV>STwzeAvS`y0K!h(6>M%RmMcPn8S-I#`^-=Q!rfzZ^bnD&PgUTJ>z{W4Ao&M;cfA$BM!%)aZzvaeDQzAET49sPxdj}mTV~go*xGwrBU!q=LpN;maj+jHy z9a~lVUFwRwo9L%}|J|i7jau{L{{SK+=fLYaCDA5ix}m7iUlpGe2`EOz{JbEK2C^6z zr*c>fl;?J8D>Dy9=Ml5(;BZ9zHfk+=R6w+c_xB58q4I=LYhF*I5x$AnlijG_=?;7~ z%t!bKv;)iEeiQ=BJ4Isqh43Uy_Dtr3C>Pjl=Czacg{Pm~AG`VwA)^!b7GhTYH8xnx zSXKos5NyR3GLpb2NZM|=6G8V`((koyd<$THIc}T{|ABt$*vzNvbbo3)6z9}Yzd!j| zx&)2HPSp$i^yp-qm@F5;63)DY)9DSi)cpwrPnTOs^#4_pDG9`>$3R?n?C(^3h0a7% zb!|n-ulqd659sVODwR)gS-lDtzJF=$F&H{T&7ip#bwA|+a~KT%!EEcUuJX7Y0mh63 zY;wDAL}xdfyEYJwW2S$&z#=obk$0K>Mc=`fug%3*3tN4begm^4UVR2By{F_dE~7PP zjC!}vuWicED$0id!vHnD{>bifCI^8995|@&H^}M_9irRZ0h3ie)uf}7p(rbM`6C$C z<~p@t^!*c!|EQ*1sL)K(z5`naE}*US8QPs!*^@-JO3e>8pNoTBmm0{k)qIgaB#o8` zYxH{GX?5LjU{UkFNfZU#TI111EESO3;YZcH zm>&e=hmYiepEJ8lCBEZtLaqAAK^@n8uKop_5-IpFNb^BiUouRRpArG1DCz+vhAR5* z0j67&lU?vmK4fQu>5p5u24XhD%^9z$Y5DnGO{aNBSh($1HT~H4czLw#Kdk}cju1pL zR3W1PN&|CMSuQ<6R~zo|7HS-HiHg#eYDaVn=ih5POZ4Hwiyb5Fj+05pirviDU{?SK z_1M&uuO7m2=n9Es%+xA%_^j*O;&~O>9TIeMmK>L>l=yz7sO>ix;1RumJ_ViU0uM{% zQk8j4k12X&1pVm};7n=iMxvg0czT-?&2P zf3Zv;_65$9N>>dxbvV%itsa$SXvfI-Bv3I@@WKb+!%Ih`mx6U0=N+i%{x$^#R1A3T zUEmippgIS&^E`%yfj4$C2U|n<-m-@)YAI<=n)$z?={3njH@FjV5WtjA-6C_??hCHI z-b6k4@6LD6(+bn7t)<+{c_5BuOM+`+>86LTVz3i!2+a{h>yjgF&%}Qa1K8zuIu*uI zWj@M&2>POt`e$E@-(JubiK z3_X9Rxi_6QEai!dn5{9bH0h@*5>jCyFX@9G>}!4K>&!okZAlR3{Kn}wiB@Nqbop~{ znR7WXqEuNG)c5WIU_kH{6O|Es=Z z-Ts82=Ga^9W4$@s9jQjq%JAd`+!WB7V3+mWUYH_7zy0%n;18AGFr8Ee_c6k76gkgX zDeH$~_4mRigE{-Z9mf3OGDn>843ivvyppQ~*75)~K>Q*A!$AgjST7g;7G%cf@hgi$>D6&I_FB_ zh)xlk#bMJw{%%c_&T+zaKk@0bTo%JVqdIwAYqP)I{PY1@v!@ixda0@vHn24cKf=t} zW$^}&nR}0rnwM;>jQA_|i=~m+H}2{@qJWLS9=SrfPGlB8Lrj_q>GJA3SkPPn#{ZKq zMLF+Vzcq@IqfA#zvuJJT3}P7kc7U@VjZZg`NIoPn8DeqpEpdBJ zMVe55z>V^ay{9j}=Lpcl!M7z%?Nc~ucB?wsQcYUfsuf0PznMbl=oh9_>2;JQxIBmt z^0KRn_g{i`hqLT4HOY@Wc_62?_bg&ip-+ZW%lJ#Iu3lgTW2!tQy@aJxX#z&MrVa&U zrqCgaT?{Udsk-*g88%>lV1Gq)QyCY2M7mB+D)YVCw0?Y(b`=v__X=sZSsD7^b;Yvd z>k&wSz>$Nhkq?Y~bLcZ(s$3qR`#5Wp-*64dr zdPa}Y5OjJ!U(KALPJF9MhR%|1BP+wv1LT$^8~1y!J@Tp;tCt~x$!IfVXZ)?p`}pJg zLl!y($P_m^Kz;IiTSru0dbt1fV;f*dv>R96enOuRMJ_z@#2*Jh-l?FeqWP>RyFRXn z2KjN7x{9#fz-6b_vywmeca}^=v3SxzQD?l)Wgz5SMzC!hqxMnC@z_pJ;eV-@T}GtU}&-WgM>h!iPMOTqbbqot+E)NA=!FO7rCr}1&m*<+piCnvOW zz|w0%YnR5O9Ds0k#FkVVNVS`q@{|CydINl3xLe0bRmq7?&JTBgLtF)i z(QnyxoqrVbFcsV3K>qri2{dMBx+$KuogpzSzHM!~OM0EP}U#u%HOq4MT1>d#`#? zSZW2eJbwj^N;c_$;8cw21yG zZaIg&Ko+78M68JFJb*xNdFyL{TqD_Qr?3MFu~0Y_VnR;!B3ws57QM%j%Xm39xYYl| zr**(?Z64@-e~%)pB$0~yQJWvO=z6Tg#c7o%q*;cTVC zI=Q8E)iMRl3yhjlo%JKfmMN6!d6$$Ptv6){2NFj!g{rbO%5MjE~D z(R?T*%}k<0KJ3UOP9VoT)*lf4i|1-Rm$!>;{RGmb15Nz@*{60%FIe&!u^z=XmPkF5 z)$o|vrH&@2@(?#jz^U2dt%Ou3qI~gnb;5zeUEtIM66sRl^*s;K2e%YyliYM_P^HOS zwNNTO2Ix6E51V%lj}yS$n51ulfVJ=lP3L4X2H6-GR;Tb87uh-cw+$CQ?py5@!6Eb> zQbw_PowxF1Rv@g#QQx2hnCmlCkJ79fsH>ulC&zLm)BL?Oe+r^7AhHb?z(tYEY3cy5 zM5(sV(@D#~&WCcyfAg|pSwu_9DAd@rlQlAGZ;{}dFI^0+sohAWKRz5s6Q54cod}Tg zZeeK=Vh+!$KEP~@4fj(dnG`gH!g0ckvm=7O$-Np>zFKvHp!x1sPxoy*Z1?l5fV}K2 zD5w?Z7=zMsZ*{>j2o!hz)-9oV(bF}{#`WER4dg)Kbs9)ftjE^KmpEW=pulvqc&4Ac z2h%;b%6|)BqRF|XD+NHU^I$zgX_hAi7b=2p-`)DN%sahEYNCeh2i3_UeE+Zc+IipK zr$PS7X|=&iOw6uzA0%Tf63-KkZtY5zDjP=2)jeGuf^LWfh_)#bYSH?uYCWBC*-OC3 z3#?FsW+an2AYi`g$Mh}nPFo%FrS`;J^N>$G>wB3FJ+&_ca^BTb%NTGEa?ui%oQ{DMeq?|;su*FjXL_Y zD5WFK{K-)Qs-ybqKZ={&>$eV|HOmx34{)KCWMWf%gc4@I~%Y^oZpeN_e-iYPU)y|2Px ze4VW0fDir^J}P4;Pvxub&|QPjt=rm}IMAoj@ogMw+=~Yyqe!w8`0w~4 z$eGYourkq*e$Wj3+1FE3)Xr`$2QU#JFN`v-M?9RGz{v>RL&QR1H}C8yzUUZdogx3_ zRzztaOFl61(6i*4@1-GNWkOLtW>(I0V(<7H`N2u`UGlyCnko@U(?q5MXBR{4ZDHU3 z@nNDL>WI7|$R0_dGvfWp_VSgZ&z)l^x`SsDwBsOae#w)+sBNw5rq^*=VF(qZ)@DCI zrGT!271+gfe5|N|#yj`610YH~XwxF^wsf<0-eMiPMOgx!aZpO2bbtgpO7BU>HWWwh z7=BzQ3l|IB+I6z7P<|ff(qdJub+B7U3WBSG=sNSZxo*-p0mtYUWXQ?$E?UHx`|-zr z-(LG$%IGwBOT4)l17hEXpS1?^`srM^{hQo?l}97&=)NTLI*vQYfmc<+C^n z%?i~3lm>^ryH3DWP?(gtq_t44DQ1a6w?UNXYuwvjknH_xn4p&U3ol;=$k1Nhc>~3S zt^s;Up(%OBM*W3={6anaRcW7EQQr7ul7>VwHKNtNLJhCBGm~>?i2?4*v4c_$_KPzd zUjTb3aaD^MR1!_}?oo{YkRf_{BvTdvh$g<=_PlS*^`P~d_f>9BLv=a3w`nSysHrEr zJp9?Yr}gfAw-SmK>(rPm$pdRp4hG2_3-sdEk~vjS4k?G|pR};{HTCo|Vs>>0Z0e^0 zOIVx6Mx*Es%(J<8+cHErrNCjPs~q_goqX{chym9n*FJr*bZxRi4TTnV-kz@9SvvJq z%?Nx%uan>XKD0cv`ceFQf(iF_#P|V?rB039g$kn(`qcrgZ6i=;)wFpjhe?j;VHR%B zZsr8tnLsRAXbms{4YU<&*j~}rO0nV5fHImDa7q9ehRQo}NPOf%Xqm;24oya!<6J3pECH|9%XRnWjFUYw>}JD$%jI#hFJ~xo#f&09cv|$uuY2=QA^8{F6p;M>xPA(OPm6qt zP+cwu?mNk;Z5&9M1e8$2fM^&Xl=T=67y}s@03PSE?q-*^s=CC3f$1+4ZDr?vSA~)Z z&S@Zqpr~wWGDLTsvm<}6$9K)oHMX-zA5$0&N|Dl5ZGZk`F3wiBt5!o4TyhHOKI>pdzpY@w0Gu5GIvmTqmtM8D!t&{#;(@UyFAWdKoL zuI?pwhAAbKZQ48aSzjwTL&6);1ZY;P_OTa@HKv%3#e7+poHSV2L*yjRAo_;AY8uHS z@<`TH9D0(2$Csazpk!{Z|XJ4&F*rp|sP8OWMCwo7G-A)%5*8=K-yNTLeBabeK z{9Aaxw$cz1FbH+cy#^kMeSpH|r9<+ERERDCPq6M??L+Mj?jogI?_sNYz63%rludp$GcZ*k`+4 zYq8mxQRat>I(3gm7lf6BtZ5Kzqm^&2cG5qtUOI0Qc;vEk~4BdmeT6E@1ByJDxfqe-?8CI~gh>Z_KOw2LQR< zC{ZZSd`ld)B|>F=y__%16JR(8z%xL6Hs<)#L<+vSE0~}oa&g?rygQIF_R#nZ*txu% zO&Rt90k!@&{{W%*p5Yr1;`KYyWq|@3C8Mm>Q_I3SxIE(kn5u}+;NUQqVLR=O*Sr5f zjsJ;h)rR$o~3gExV z?(E#X=Sc3j4Ew>crLV{=m4wq2F@YK~OgScVw)mT#^%6(aauZtEI2D50QZDPXP7puL zXzg4H+J)^6L(?2?|KAs^)z#NG&Zmyg5Rn?IUndK zl)VQ3Yo}6O`1Zkz{MOHD_K*C!-y{06f_}_`qn!+HU8@t%59zTkKec^{3XOnk2u$Sk zUk~w)B|;8BcoHaWUV=|YScYhCziz3(Aj9WklON<*xq9fNJ^a4d?spb-a3l_P?6xGL zD}~A+oXmDVJIdq^IruSe`%ytf&Iz$1@KB&FF)xTRN2ubbS#)6%i+`cZ-;TIYN=2vu z)q6x6Mm#{>_hee$DHd=Upg(qBV?sY#kTXUrtR4$5bQygiO(pg5>ByRY;qdV^4%;(d z-_oUN)OyKB8K`21#-W`&Mg&MR)?=xq+Ovg7JYQMi8G4aV?#81*8~BYBk3k_h<#>x> zJwnN*N9M#SlNE!(^*Vj(P)~n&eEiru-l|LYT@fmUX z=xr1Yvc&m+@83bT1Xpu$=KcP+i1)*BloAEfuu(lNzk03vMMP7DNFIVa+N(5@n^gI` z*a!2u=3ya&Q~{F@e*K?YbqEpM(mOXW*k^x0$>N`mwDrh^R0ulOkAu-F0+fd>8wCte z%_{~bc!}qXa3>IykjlG?e~oCw2%%@DnO&Z0LZn&bCtUvm_Gv`4 z`29;o{$P4Mxi$Uw2UeU{2UA6-P!Vw0wP&o zkql*kgeh1dmwgwd=*6=E_=WyGF80GmLoMX_(Mdei{X6zjR z)$H*X1!yi~uWtOYHgS15ykg>`5$l0oj|2Z2zV>eX(L$$EC-m7IvdEiLtSs}rwAu}T z$}8D8VxpehSn2bup1!+6C$`*rduEgroxm4BX4c(&^FoItG@^3yd)C^r9xz!Yjd=Px z3I!cz0P{t`fFWAdOFV<%>03{CvYEFIY5}xh+94foZ&1_BxZN@&r`@|4G4$~TEQWyb zjWry2k@qu>DzNCh5Uvk?AZ$(b~6U2p)}_K86TmI&C@mI?^NT3czt4 z`<`V$Cr!9#$y&iJaHSlBbRy7W8@T+7*TZKZO0@P*fFr!^#_Njq6K~JW&iHhMiwt#! zYyY3@aySVb_NbdwN(hhYx2x_zj`*p_9&Pu=PeI#6G5z+{!RJHV2O~RYM;v%1;P|vZ zrSca6hG~8PedFfvc-NKA8Z8k$wLogX)4DA=d`qqml;PXk5%q8v3Tkn>;A~25aC7diEpUFTyU;`~*=+ znW=hZLPRnXaGj4i=aODt;I99ertbRyR*vLq=|ShUM;(^$O?WOfhXc}}Io#SN|1>Cn z6`CfD6w&0u2iqh{ntHAJzDsPhPA-#OSHUddCMPG}@*mFi@C|CiWov(oUQ%l=f#d?? zuFlzlX;5qN2txIXtRS3r2Gd}CcQq8$VY}$$r(jV3P;!OlCRv52wH8p35wkcqiBL8& z(;Jx=R6%Sp+0Tfz<%kVotg4O_&xErQemW9PP<=?q$Xt(tch=)tuCaq&C8KsQAXdjK zx4Ne7W4)yACBJ!a>nkqc?s!5f`hxmROTF*eg##uCH2An-cdIGCRb36YCb5bjon+`s zQL+yW_}Cio8u2JVkS|S|w08bf5}kYV@u!BXVER=rRy0QNe8*M4yGZ2N+V<)uhy7L; zu9Al4=h}-%_+@&4I5z!Dgzyls*&tLI=4#{Cr6S2-`loJy=GW+gZ@f)g=IKW-rw`W3 zL9=YqdzT;KYQ}mv|8R%~$2F@X@yYz@{;7EFGB)_5p$PzsQ?BXb=mRGHwiH*|x~^m}|G z|M6!0_zh_F89FIO)2;$sv9!xBOCaokf(kLa6*GkJXmwS*Wp|~c<9PiXu=TpXXhg4A zfY#lHhtS|7DYyiNj~NZlW4BNY}@UULpb0pt_w1Qof(ztH%$zFQOX%?$vm5!4{r!8 zZ^^v#2qyRKf3av>3+EWq9OSM@wp&}~CSO~)q6q)_L-U4KPHnI$`vGVj@IN6KHN%DH z8?ZHOIwW57(a>F--c7^Y2y=NIv_CJ|7_LRP zh%enK(So8wFzWa5_?a&T$RAbtH=^B7hR__y+!!zaFUVRa9_pxse}!TVCP^c&KtC^B z0d0S*AI4^`D$v<=O8*m zcWL1z1w?YLxVEYy=NI)|r1N@yCdMp!u>Dn4a7ESwm>2>MvG)es1N3*Fo*7c?DVK(X zL^8&6rlMHnIjutpH)PhetJ(vO)#~RF%15#Zk0a;I6v54IXJE{dV&-1e<#P+dFkDgS zeu1`vFv(ZjWkEX>m3@Qd+o=Y{V9+Wv?QiFL+!kR8u1W>pCY8g?+Orq)cBxt(Kima^ zb9jBNg`BhK;CvcOHfN?c%YAi9{xT2E4?4{d$T}Z4gp!vQa!pO z1Mr7rSVXDejx#4_f7wY$cu2L-S7m05>t}m;8$tUNO;VyQkJMe^G(< z3^78<*K}l*0~bnu{-qHVGDuenB{rCEBzy(JPt0zyle!-z+)kD3r>bxcY5vK*vkKrL zS+Mn$n zSUo)oMH8OdugvyjCgR=khtv7xChgp>ue@Gk5K1l}2l4ELgFI8){m)1#z1vgF%!`eY zS|_uwO6U|sp*wa9o9><6*muQwzelR!J}Ak;a~=6t%AHze{Bq!Gtyp8NPc0jl5iZ7i zYJ;@gX(c8Yc4P)8<}2d(@xL%EGl?`j=+2`JxAvzCu|uW--&CNQ#YSs-{wcJ!KFw&i z1hVXTuW^D0COODcfyW$oe-=*zu{jWH>4Yn_kWMNTprr$uD${oq76n=d6tqT#a8XY8 zF$?sFe$JxTb9QobehqMFm63pEuy3_ogzNBkIY>>KN_gBV`1!|x;#~7WvI4>rbO9f^@Lc@Tj8WHK;T1UHMqjU|IaFwlE^BVzc@D*qF{ z_kHN;8M69^rtAt?V=YevZQJzEA&$gVc9@xTKy#nJc4!Bo>mWDtOBw-wbZ&kCi<2Lr zOaU~S(ap^9`&))q@=)%v;bdeTSbuhty>AzAPDLLX z=2Uw3_UUYbk+I6YgyT$;Iu7=D{e-t+@V(v+5!{Irs&Exa`9v<$+J4ya zGW*{a64tglBPaJSR!%Hbh{_G|NcGw8U-OKA`t$T|1=C|=dYiJRIhp!mqmiFEM}q{L zQ#C=O@O$f@XpP!g6DtLva^1OD+D8>VDD ztxlizlIeaT`(m;d`7;@+J4WBM!RwSZUKf$~=;5`F8;#sI&miS-J>Fh7T}cl13@dn- zRae%}pFRn_2wMDPg2C(~Ua1!)^SC_`z3%pRp`0^hYuY&2(~WoiVF6F*=PV4^rP5@^ z4#X$7&S15ihFUIj^I2^@U_VdH+V(Pwp57+31UYJ!5>{jrDDwSKO(vP=a1BpS%}?9I zMfxQF5^^-A^7Zu-x&aR9=o#Aef>F7&KZnGKg@WLO$)1k#d5ZEj)+XY#BkImnS(M$r?nBI^6zsT0Jvgqjj8K!g$*z53v_IB+^2rvlyBHNPO zqn_|>(~2+2Z>GLXit)|$tS1OyV`4Vm9@KTwyg>A#v+5+fYS(e)i0{qSGcoOCV|o)# zep1YJyl{xwYeIwwHS~Mqv(x{swEze`nO$mqJ5pWu!CQ(NQUU?Mli2V+9J9uPAhA-lPUba zxQyaTb}6ifoDKTycl}K7qS&vqdPc@>`-_PiRxF5K7sJt!cTq)lX=({mqx(|vMWlD? zWHaU$zs5T>1^E(8Tf}WW5v-QmG+kPWUG>HHf$*kB6R$TD?J#;B@`28dYa<)?S&?9R z#P{ZG$>)4Q*_qJ_#KO1fbZXzB^(y^2?a|P2^2x_W00e`Jb~cWKXIeVwG{52XMBE9F#b@!EH}aStsa?Rf?+lWkuOE3YOFydr zdR<|1>I~vL*6AMFAk}@Yg3IrIpv2L*6f+AuLOnLnVZ(VEO@yd?RX4_FeH$A0u<71U zQbhO)LuG6nmZx;@ewU13ZY*)ofHxuVIo$cy=}N-y(3+Ydw7w^N7vak$b8w?(@ENFe z$$5|0tPbxoOmZxqbV^Bjntw*pROGOV#HmXvWSRc<)Pb@rbWtuJwzo$Ni_VZ!R1`n- zWj&d9Be{%|LOM$s_a%e8!8!~$_|5&BGZYUc*ePixIMs}bV3>Gbwl>a_En4lv!Omgn zP<%IcHZtT-Yh#r;Q~Py;?FVcIUF%KmS{o1(G zY@(eVrI#PzrZ^lmCBLQc|LU|{5bafYKLA0*a+u`Aw&I?d72Fns$vWPadVyFlvTk@m zxJlN;d3fq^aGvYz(vY*5L7)yP=`{H9tA4-Z-Z;@wev%3K)rFyT)Ri?;Nt3?FxuO=D@HNlrV^ww=t7L@2kk-=<0io`uA=t zC0-dwoQMh*L)vRiNWIb zGL8;HVmTV*2(h@PTZlb&bw$MYc12h+8L9pNk}c5#rt|+==AIobE+yk#;U;|!dD!G_ zek{N2Af@q@mWNYjKi=jp@;#Mo!LY$F$yf{LXESUHv@a%tk~ihM_rC}H!EwThY%Xyo zQpnLxRqL~*O$)DjTfho<*fdsW!z9~o2=naEpcY7R8Z}CfEcW_sxpMA%Q6a>kSzwZ! zrmW35`TekHB%2f6FW)zORVJx$oMgVNy4P?P;W|sRMnjP*JEFwuyPox%5c5Dq?P)^d z=*~gFOg~@qKRljD9G;J1lD2d=1H=VivBP;+QY$lOu?`A5sw+51Tx8Fr7%gs#Z;v`# zM|4scW>F?|IQo6*qkfqn|L=&9JNS10HRY!g5=@O5XPUpfmAKJ1rfchw9sMkV$#!^I zSp{kSzBMU$rN#8+MSd~n9tT;xZ2ahez9rAPcP`0fNPi3XYQk2bxWgkY{X<}#!Xr#lK)t<1E%9AP7(lV@!zYx4S}sfgTTNW;fk zIxn%vNl*(n@G!}KN8*GfHWPKxtZiJ6GWpB;%eM_9IEWBea+AkR*^nF7Q@u5;B3G!z zkuT}A4(4{+zwx7yIHPxGaPO5(ymK_}UNB%m9(OxY^ju1n-61A-Sg}ci5*YqWrfB=4 zhplWJR;dl_ZBDV2FhI(v;`Bn884~9UrqJx2R6miHc4otH@y5{qxPCWec}%~x(WEIG zL5RQn(LtARn@j;EKJJ&ej?r5yY@S0ghSBF9oJD`P^r7m0fpFipBJ!oV>BAVy}E2k(5k>AY$ThPDJ zo}9*w-fI=C2cL;EGOjll+PR>wsimIr9wS+i(P_7^rnjNYf>=SAO?icGWrnIb`2hh} z`H@^x_wUa)tVV0gE`_bGx6;C|GfxY9u2E6E54?5dBcd72bgX3O)&Wd4t1kHM_5%+6 zT2?g?W^XF0lv{zcMs*Klo-+&IIjF#Z<#PAt2XITQn@tM!+8geiNlCE%@%B}B1SVw% zBI;vFW9@w>);9boBs)~`mx*n~G7ZPnoM<}~b8@FnR^F7D|4zTC$s_dW0nP)K(HrV_ zwkHaweIDY)VPLj-)7?z=dz{jXZeqBO>+`BbWILR^r$#;$!^t#vVX9{>NLW@Xm znFWD6@zYL%#2wOY{3M9vwu_&G@iMPjk`^wr%vjU7Fx5km4Efkym)N0O7_KtZ20C_b z`-My$RHVPEw9a++m1&)Dc@S06XH78e-i(V6q^%# zTUX#k-hG2OGCbVB{xYiH7?!N~s-GDTo;R=k2spbzg~>J9c6J2>JJKmU)uMf&wKto0 z+&Mn`=%iu>WUYZjj^fP?7dlAizF%+Z}vOnY?xWV4)Pw zjD9Bx`t&ePZLQli*9&_r$Ic#m+*M-8y*J;~a*zJ;+bye9z&v1p4_a(n)PNXzxD`+> zMTC9MD-dD&aCqKCL?e*ac!}oqGtwq|1hHcK9Z;ctp*>}kK6Cb-+c+AV?sfEJ1!&UL z#`ww+U=K{TkOy+MN6itq8I?Mu=*i69esFU7)u)AG>y!Y$+RyBek$l-(eD!OX*W!z3 z@ea{!^(@D4Q|$9-rrLu#(L1?kBz@o9esmD0FPQIixAgRB_) zhwV2U$I4vp2H?)b;3FwUWHQn{u{&))1O8chHVk?7lSck)XPTeUum|?BzU45kmmbps6As(lj7)rVxhglaXBN7}0u75c?d^ap= z){8C-T5TK3D>y%qjHr{6qPpp1*qrUqactFhr`BQ}>#s9;XPkW)7|1l$F51p?IDQ-@ zcIQEBlW#wHCnD+d!+zIYY->3EqIxknkBZTf0lvMYn)h_^OQi|cGm^*PY!(Q5C{Pe? z&?ms=9RAV9n_9=zl^pYPMW!7F9X=|3#0syJ+_bm%&fPnClzvC9TY?fH@f@dVe&)_4 zx4=JCbbrtlxzG&u{by_E_I_Q!o*)a7`S^FE;@An+jdCq4k$Kh2jHz)@6y$dv#8xgR z2CMj4_gYu)v`pj5umFPgM*ho z5W57&-gS5TL|6YwtAoI_I6`hr6U;8^v%Zr~ilzt2y!o5<$*!T^YBWxY z1NaPI_*;o`=WD;qnbejwa37wESDW(K`q_&S8lUr4!(|rcINiW5y~ki{wPym{e4VSD zy42mhjag1sdA(jDaqpw1aF505(1T71I#}GvyN%~HokgMNjIA+o|Lz*r+;CmlRIa+A zMn>vpM->Js&TTxT_aeRLQ=UO@OXFo40q;G97E|FnE-Md~>H6><-g0c^?-@7p1-f+z z>Xex6U1wirnWOki$f4bkB|f zZR%^R1pRa7MuKw)-@Dz@rFYe95eh}zhpFJdM++UUa=$F_xyYZhk{8Vz>hCC;VDZei zklyAiL?KPAOaeDC#eUb>ggK7pSBLq3vf4|xLXGFdc6`G9r>fmO9E4guBS7f1v|~EL z@KwR{G#PXYsP{kvEw30I7_uVNu@EV7>rMhqW!3dXgqd8kVcgXpBBa^| zyu%xUG|M!sQ@oSZf!2bddrBCDue?D@Cei6rcMSaT%%+7K~Az7 z7d-Z;#Xt2MII|$_>0XV`3Dh!`&6m0r>vNXYhrhvp%DHJzjVUpN`Lr1Q!Ygi4YaN$4 z+{+s*P?`uk(|ZQua)Pv-_I@APx+)8@)6;8VTl4n?4ZKDzj=pB?9sp*SF9YB0UOR(P zDKENK-k%jfM0c+^oXm!G?2P+9!7rY4B)T`(7Z^gpP$ox&or6+buQV|Yt#LH74@B(a zGKkB9E>-PSm|Y_B^&Ci;wr}k2J;z59Mh26j-H#=fgX^m9x9*v38ZA{g8MAO44Hs71 zjiyUDV~=Bt?EFvp!4}_oEP_aqo47=-RLbQjtV*#32GDu2IsB4yYn#Kr zadZ_IVP6<%@|6EuUix@8#IF;6!r$$FJA+$AyNx;0zbtWhC0ZqLASWEE66j*hnPsc0 zXU!^?1*^CX*Q*)0o_rK?b@2M~ZeUn$_E`k2+Z{gowWHzHVZmh&Vx)KEosWi>_n*Wk zvK?^Q!%m{0P~>#Cf5-F+!wKJL ztBh56&Y#9#Osk&mOcNWw3>`L;Oi#Eli0@P)l(Lg$j#mN<$6A-tW}t+cXMkxqot(g%+ZWluV4 zn%peJik!5>pmJGWrFp6&4%yhGJt-PdAW)GBj@_Yt`Q#UZ^xK{!k~MjJtQXpjC3($E z!U=U$C2qg&t>j%eJ93M>n{Jf5K5c4D6L50a-i9AXUzc{%x6tluAJii(E z^LX}0P|<7ord+({528omYV}7fo6~MFJwY<(6&>d57kn5S-LeBpUek*1Xib#~5_Jq6 z%6Wt6M9M4T__vRKI5u$7-cj#*)Vg9718qtD+GCbIvYkWt{QK^K&k{jb;s#3l)OC3 z;7z`U{dTGBNQFQPuIWWn?Nq zN~y&D1IbBH;-g7QHxKZ<4 z{m8W`3hGRLfCGGK#KOKxx!dNjO__q7J`yKoJL(!@q3kn0t0McEf(-_MSf5K3FS1JZ~P9gAX5|BS21a z6xzr?TeJuPEb493Ta~O8B#A6soel?OYEug0U?`66)gh(E-AsE0nEaL_@k8_@5t%CbJvwZP@a>itMd3kRX39 z$0Sv)oJzA!ULrmJf6BY^e<;`ff2q^yR7agDQc|8XPRo!eS_m_z#?n}`W><<)A%jDN z>2yv_Q)n2J&?FNjX`#j5iELRysT@l(X~;4{w)lRoThH@-p6B)Y{srIrmtMKA`?@~Y z=lXo!pY^_HmO>Awsw*FRdvqWL9UgOe4H|Quc*P$u;nkk!+=9kH(8i||A9A`O(C;`4 zxIXwt2&5IGlV)t;B^K!6y57YxTyGUFs!?>%hV~Nk(vMQ?^)G`Cmgg&V8be7FuH1xm zwF3i`2>4x#l%euJze767%hX;^ zSn02AmFF$7gSIz>G9D<1-+yftZQmeO(&*PX7nvVEfCDwWYT`&F)x8=URH4jsvo@^QQ`NuWrqB0!F^@Bt};Saf%&{=L? z*XO3Rr3@MVf!uC_zj5(iONjP>8KqDe*AMVDe{H#``=T#XXMaKp_)HfYfk$$LG_E_# ztNHsK&El-K6NM|J!1+ZA&EJ%MsM~ikplgRIxF^7IuEDv~VU<YjW=A!wBW~(8?T%)^I1e@H7(@ywB*p-+6fjZnk?2pxN zb1CRLsUS(jRV2KIj!Ik2Oge$y>88uuDM;jc5nJj53N z_E(j6of#!NnxpiRc%EEN9UcjA+VCA}gd`|3$;W>G4I>qD%$Ffz0$0~#2gmCUA%Q&b zID^}^RkVtHMg&b(2<6;USdu0gPVBWy-?JHIKsbYLUe8WH;ny{WdqAPtH^#s+EjF|{ zK8OKXAdqMan?QsH;3(Dv=mtwgCpa-ibQQhAcP<7FJ$U zyf~7?o4^La4JgGNg(E&(gJcsN6d87DoR*q;HsEu_4D^g18-qv zV@u<>L`KY-B|u8FqC(ifZObk1mz~SLbN~+dxqSQR2hNn~&v=i5t1_hV;py9JgN$GW zNKd;Nj1bA;mRoj0j_NEC?nXSjFCzirdln#%Y0sso>EyDy_K;n?_s=*N@h@8gFl6&P z7Zo~-V#$`au*`?+^HI-Vr*B71CpA7MG=}D!pQ-yHW&a?e6~aCQKDao>^LM%ly)W>% zuywDD8vHO1b`LV-03w^>o|V$F!!9sjJuv`8r*d?InJKA# z7I=DgbBAwB>lzoQeuqZBXe@->{khtfp;Svs>k4eX;9_6mQ=6Mx{TTEr2V~)kq2BrJ zqwD_e++jn4%#t4&cfD9XlPkXm5>!Aadu$=)Rh85T32XfP+iFt2rM2zRJf`G={I?Nr z{dUF|Xpminvsw7=cH6Uc{X8@RJr3-=2R_a>pI?e|mE)awge?|Zeh-mMKdYuB zWidm&{|ge3HikAnrLOW8UM6?`v=uKU2w|1ReQjNxZ8L{$&;k6E-_?G|c)Pw?_RJGc z=mLQe3?G%qboeC_wgDudXiq=(Qf3UJ#zJQgUU`jgW)2Qgu~i}l>=wIPhuhI7?h*Q> zp0&=3awTv2-nD@Q7yyDnbGJ|C+I!WCNq*_@S^{9Gt|h~_w=n0k_FBYzbY=fiRL_ae zemgp);Ac$Nb0U;%$BOaTu-4@4W}u=AQ)x-02)i|uQt^kKAPv7SLS8LdWiE=W0$!ZX zy_^1ikyhE{EIV&hlcFEUN~+p&Mfzv_Pw3G4xF>NO|ws_oJ%Ad7}? zrqqvC9rUXzbS{tHBSpJE7_tZ@nwVABwvUP{{1Tzn96rC|3R&B+$fDar4|9>=(j&1H z+hcMteire4n~7<{HxPiI$OFJK^_&HKD1UR42|cUtVKEX$0^?>t&t`{sy)QFfvq9D` zgltoC_~3mBRyfH#ZCz0V^;!O*e_O?sM-erP>j^bkL95cL?-U1+z)@-5+r+ zDan>DiX_9E7}RMR)moeS2E>ox?O2DC;D|66;G(d9ZT4Bt9zt@N4iujiR94;2Kae0W zd{~OMNNc|+p1Ow;Wa*2D+{G)nV5}-yg&9o+H6?hOb{sFbV`en z{Wv@@kw1rR3;7+IaqmF?$0~{*APZd59=|ZeU4WTb7E~ZTC=f}P4&LMhWD=*K$w~50 zY7O#wY_||OB;)l5pb}7SIXSk6bk~N^njU9{VnXSvZ2%GzxzZ%;6qX&dx5A;?TyF%(@vZu)@TwcEa5+E6!*Roa#x_ixiHC~(nOv% zRe=Y|dU&3eymDi1Zec-?_wjV7VN-$09qZF1eVOD=M*`_A*0Z{%p3Qa%pfNu@!LpF% zlpUKhv%coY+{N#BBIMyvCC;7<(WZjuJB3rKgWvfSc6~HdO1Cp8#oty&P>{>KlJ8!5 zcqRCqU}Q^TKlV|+h>~gvyQFQ7QxJ|aqezg z5^Rqaj9t_{0FMJZ+39!xRhokpER?j;173OS8gGMKmpK?xl=5sOv$5-zQ&J4MD4Sr{ z*1@*v{vppp@T?~=Yx3Pr-Q;LHF0}2Oeu=3RK=;4eu&Qz~IGL}hu#r1g{#8T6_icFZ zLpN^=@wjF7=L&Qu0=VV2a3Zhj3fD*x-f#iP_KI`=2TS_~u4Q|2L)NH}(r7tpP+CA~1%o1SM*uye5kW1zoRJQed3I)`Eb95A|2?fAvF1Pari>SzJb+KK~Pj3@5ANSa(+-W!e_hVr=VJff4kct zxT&?kj>WrhX^JFSLL98RKE%5&en*=B3bRBdCow-yH9gFj^3-au+zFZr)C)_6#Y3zynA;KGXg2^>eNtrXkq?unNVy1OeL8kEiU4S<_}dCP;Q5qjiu*RT$B`jw(z}CsHc0omoYWG2`U$WCO2+7-L1C+?E!{Z+ZM|IYic`yWA4Vm^kSJn%y$bD$`9d#EASmrPqfBWK_p0rj2&W*o5G-B+ z{}qzZx`s!K`iEZbf(eY5B3fWl@RL_pl$FJ=I47WX0GFzAdHO_%whOd%TAu;D5-_$o zHAo5-#?Ny$G~oeEUCIIXM5FEvQs^Z_J;G-tj)^R^x1d`J2_?3tN0$^7!~ICUqyd{WkXXX^Sex zv%ZJFuL9Y#n0vWdVe3Br5SQ~B+HT?QGUM@OVY;hzcOjZLoChuPXhDEjSE!J#PbUk1K-I4R6M20 z^Plnn)pK-!RUV6_(BYY%chp_7Ns=Xn%?>$fo#YEbr7`Tj4=S-M)k3P3>L@nc5uQ7b zV5PKjxh#*)3+aPfH$G1RT2b-^^v$GlR zEDpzS_P#~b8Y?Sx~|MLxCRSH@)S$DrR#H7Ite=l8)~5YZRRWhZv3EU0Qg8 z-;j{Ti6(&6Vmrij0rx^>tMm0iUv0)&KQ$Mb56t&h|FgM|<)U=$H7Cfb68 zqY^5I<4suk=V`-Nr*B6^ivi>-L3?|w2g>S>r)?+$>?gvKlJk##dy=|Vt_lV~(Hix< zerCMWhoM!hPp~L4R6U*O=355Sy`{`nqfY(3%m9sW1#ghnu2%G2Z{4j!VP za3r4Zsiw5O#@1;8%81xA2QhzC)AKFwWOyCeO%KSx_+qhEYx-(-`uknbnYtPL7$jdh zvDMH!ns0uVvzg%H&CcFMQ5$C-|A^{$U?xg`_}|PSOwhQYe6AO{@DVmXEB-m;dU57w zSMmY;iA@;cp)Tx{1%;>&#$1vTN(|eU@``T|O#HQ)_jy%lenL1HP^JzjOg($nGI_rO z^97C~T#I+rMzl0HjzcH9U^4&%?Nr`K%r!+-VeldPkC}KE$7n^reTs@I<^%muPeGb@ zq@7oPCE->RxUPRnNe!E_!S+)I)jz^SJQ)d0pswV>CwSq$Td}k)OPog34}glJn2PU~ zZ|n&U?FvXHwqUN3Ug6n3+W}TTh9_9yRIF`Ud&yaAExDaAOC?qlnQi^Gfgp|k5cIIu z`F%bU-(N+srI$kV0GIhkoQ|Jie2kRDj1b%*H zmRT8HIP{kD$nHm&K@cb6w>JVK*RDkZt+fk~;JE5e-h*tPBIXURek1AU4EAFh1+p?ir-E+@TJ{HQTC>~&l|R&62@9eBO~C+J z|C|*?ZLhyStinLFBM^wwdUr^E&!XB`H)N5me~A6x(2jNlD}T-f>4bn2*%jl@ zzaf1hgKHY=-%_U@jM%Rr;z6n&?&jrkP1sEcmVQ-==<%87+B@}+5&;YIpjP)HY1m~T23d#Ki|l-k zyErnybdnCk1SoQyq0<{MF%H1-Z$rFwlY`RvF0v$9Vk-tQDa}Z|5Pb5mTjYr{Tav0&` zLqe0^<^eD|_2mt14(cc__^2AKlWt9UWf-MT5E-~$WDcnY+_FFDiZ?m+Fj7wK_&*Gx zm_C~#3%nj-7OH3WJ?bz7{XQXw&k21V34=hS@Ev8Qe!sGRwS z{|ZH#9HNFL;P$QJgU50nOgm&W+pWUY$;H~_buTd)hd;%i)C{=&BeW`lcY#tYU4y!F zN#naP1hD1bx?I|5_V{7%*k%g&jaVLZvWog^m*_`D1LqO4c1`5)&GP$(gpRrJFt)sR zT%ppNeV*S;WTvfcxN%|5BHu+)=u`U(De$b4@AO<{aYv;|$IoH~r^((D_xA6jz=JqT zi9S7??)UUoVT|)RD~P1UMO!T&dB>dYtX<$wLKKfoDlyn|6(WdGLp`iPNz2BpwP0di z5mO48oCOlp4`EM1tIQB~4LJ6MNwJw06i?c>q{06n#zs5t>@Iz+)UD6Od;z31h}xGs z`w9VCOb6FshsA#bzKKn(pI3x=`8;4dk*O?^axDIk(WljIrF6gqyRL2w%fHpbyHbLF zkU|Q7^FU<&q3Zfr^gO8nO6YJ+imz5yK9KXxJ0V#N%sllDQUM);kuBMj-P_Y)EouXUtlBE#+!nNKUP+ComO~p z14F=IEXz#s(*UIyVl=lrY?Ur6plz90igmG{;N=pKszVWN`m01La^9H8xq)9~A-KP6m`ukl=7pW8-+RutJ4= zU>{~9Q&p=o@%suIAmIu;^iIGcqpW{tr8AWgyguAXM8<@yo}UFIAA6ivgjtunJ31ZIz)UlV(dI z%*B+>elVafu>qAwG*!Hpt<6xtbo!Qo5-jK3Kx2K(s78LL)U|@3=EbT#bc> zw!2zOc;Bbj{+|6pj8Kjs)OEEv5@maU}2R21O5yR~|G2laff^KLK zcNkn}BJ-#jj}woE@$K2ry%>vkyYeM;N@iC08PE@6FctjTHRf_YGG!%^BKnaDOeQmE4p+`nu2(D1Z($)O02(KI?7XCUPmy0O=6PIys!ffAN;3U`-wp<5T@*9BoSVqimfak07R_%yhiTXv|Ni%)lv=d~@Vo|o{`Sai)g|Tz zw>UpEGr{|y^*J>)H@;AUwFjWMKvN2SSEX8a#8`ZpbeE9!j8p}?;Sqjal#%_9NYI9@ zA@hfaBLQuz<2r*_rJIQ3(Y7?33I7x|qzK*viu?)fCTdKc_GkbF3t1a%w*` z`_(`^O`eD9H{ig5xkD}F^D9?Kjs?;ch-|t-0c7)O^5Nq+OLqg>VwU2QlJSK{?5@OnmHomab>bD0e8~89GlVYK71zvx8py*`zKc8wlK{Y|62W@H z6UjEa`kl8koP(sXd}*G7I*cxr>>7(331F`D3#sY8`^RhUYRdv@MMl845|~TZ-}-y> z6Mtwc$*%wtK3FW2iD++mDM<(AG4(Iv0i3M+hUA^qq`L%8kNL(@I)8`ermY~$HEB?n zsyBI+t#x?v_a_q9=OjBqxJW$6W$0CQz#;}%_!6znApI65yqwcKT-x-jK1< zfqYDI&V>kudvrk)UgRR%0EE&DzA!A~ivymSveESCa3!D~$BZy(0xd6Wd zQQ-C>#+A$YVnDwNFIFPc_2pl<#T zRbFexG`JP(eB_3*>l+$a;C%>kqv_z|_5Ts)7_KKAzRL+NBIaRN@;gt3x{vANrqp%w zQGFHY5F&Rrw+()MJoikEOR_)IsNc$f6bST$0|u1Zp8TA@q4LKDZ7qqmFB*E6&}BWb zk3N-y=WB}A&Akun&U{od;{nVY)QnFq9ue&= z74kZ@u*h4?)lZwcq2TS?3$4}{6~NcRc_laMMyhAal+I4q6(l)>QXPF5nQ>Y{JYjvq zsXpjUgDE_!qYKEuri{I@X^HlVt~^I>Scp&KqTcwlf^g9!)SzF&PXx?h@K<1qR20Ma zm|@e;_rU82zaa=Coy0D&HGc>ne*Dgb`HHgyZ!n8TRYm!J;>K>0-M3{Hi zgn;>$bghL~^+&!=IVz@X-}YuSuR`*SGqn^mGjVSbRWvNAWJq4LY;w)BS%TO-5I>=e zy97QMh6mEYtkhY;c?+&a8l1&Yse(u__-+o!_(jDnCp+&-?RQ2k5;g+igQ(AO$hm&a!Lm-!ROZ?Jz4R^kh@AL!RMk$ znH|xf@EsEP1=FA%tt5PON;UaDOKe9j8zPtAlR0ir-)I32W5)vTI^G01^`Xp*?OOKs zge8P;We}l0N@SRU^@x9ODa_H)-+0b)<2i-8XwG795Vhr7E|U9ecmwB*+9PGcwCqAA z^RMKZ%0qmK1BCiH@mKD9hx=qI$n|-b>(`d+m-_J<{V1aDF3vTj14RsA%nch_uc&Yf7slcQmvakT~B202aHCY<&ne{GI!O< zshpgDh*DMcy?mlB%I(e3|0VkcQ~NkMRWoC*1$Abl=%mqc%O3=KX_fo~v@?gN?<-!@ zDmP;Alp0bv9GT54_L`(sM4NVvmVbDV@SEO|mc2Whvy5fSfcyWSu8f;AiV2N!N~VKt zIk4}w0s8v_4(<;)r0vc+1plBd>RU8a)wigsZ?)dMU0Xv#TT@F#U0qvU{Sj-w#eY2D d?R(J6*kG>iG_Aa;I{|6mi>CONE literal 0 HcmV?d00001 diff --git a/src/content/page/about/index.md b/src/content/page/about/index.md new file mode 100644 index 0000000..77de357 --- /dev/null +++ b/src/content/page/about/index.md @@ -0,0 +1,22 @@ +--- +title: About +description: What is Bad Houseplants? +date: '2019-02-28' +aliases: + - about-us + - about-hugo + - contact +license: CC BY-NC-ND +lastmod: '2020-10-09' +menu: + main: + weight: -90 + params: + icon: user +--- + +Hello there, + +I'm **allanger** and I'm a DevOps engineer. What does it mean? I prefer calling myself a modern system administrator. Here I will post about DevOps/Kubernetes/CI-CD/etc topics. + +> This page is not ready yet, I will update it one day diff --git a/src/content/page/archives/index.md b/src/content/page/archives/index.md new file mode 100644 index 0000000..2862deb --- /dev/null +++ b/src/content/page/archives/index.md @@ -0,0 +1,11 @@ +--- +title: "Archives" +date: 2019-05-28 +layout: "archives" +slug: "archives" +menu: + main: + weight: -70 + params: + icon: archives +--- diff --git a/src/content/page/links/drone.png b/src/content/page/links/drone.png new file mode 100644 index 0000000000000000000000000000000000000000..ab43a7c625808c613642727ce2999e68fa9b4b77 GIT binary patch literal 29022 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

  • dk!*cL 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 literal 0 HcmV?d00001 diff --git a/src/content/page/links/gitea.png b/src/content/page/links/gitea.png new file mode 100644 index 0000000000000000000000000000000000000000..bff7279023297a08cd9c4ec8c6896ed48d744213 GIT binary patch literal 43679 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 literal 0 HcmV?d00001 diff --git a/src/content/page/links/index.md b/src/content/page/links/index.md new file mode 100644 index 0000000..15d7a47 --- /dev/null +++ b/src/content/page/links/index.md @@ -0,0 +1,20 @@ +--- +title: Links +readingTime: false +links: + - title: Source Code + description: A souce code of this blog + website: https://git.badhouseplants.net/badhouseplants/badhouseplants-net + image: gitea.png + - title: Drone-CI + description: A project for building this blog in Drone-CI + website: https://drone.badhouseplants.net/badhouseplants/badhouseplants-net + image: drone.png +menu: + main: + weight: -50 + params: + icon: link + +comments: false +--- diff --git a/src/content/page/links/ts-logo-128.jpg b/src/content/page/links/ts-logo-128.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85e33236069a2534315630db8bfef9e02166c3e1 GIT binary patch literal 2071 zcmbuAX;2eL7RNgW;U1De7(pO`1XcoqLc+?S5N=_D5)K845RRZC9sz@0A!~=uGfH)i?XDNc9AgE|I&g@jp?$>>1c_=F>tEecef2a1Hx+V&VL}}`2Y0Fd3Y$JA~e3_Y87~_pC zOkBy9mSk5S=N-;Ip#cG*iN_N!UFwJYzXGyOfKmb}AO!|70#FnLhJwgMz*=4=1i-%4 z`d26-U~mN`Clgq92n>#Z%6@gNgYU+m`&8bRuXkSD_mn^_&U4-(Y{(TRLyRdNn!n&-crh3op1n6qz%!a$;D! z^7ZsSHJ!V6A;^N+Kfji`-2A)%lRXui6R;0cM&CQ$?;%IzfdmkkymeI-HN`($gFxkk z00O0mL~qs9`W|OQqWH(~P zUI%W>$iGN}P8;!ZFV}Jsj$Ra(&6PyXua@$BpX&!N#&>FaB~r zcQg?(b{rp5KCa~^d?Suu4SD`RqlFZ5GG@c%nF8uHYs1^O^&{4b ztQ*)wE55lj9M6Q;Y;IngbbXnwC#3nOYVir1^px;W>kwv?MSEA~*@i2smIhR`b(D^X z>u<9@X=YIC^FLZ6NAnv#c{q}*Y5b;JQXBe?LPEsa5MA{aCMS;fj9$^5g{haacT090 z0?>yvT3!_rY{*N1#Jr%p1(&1m-m?Z(P46=XudWQY(mPpRAFBHrtMENfx-^apUxi8> z`#x_Dty^U#5C8sI<8GC%U2sxc*LK~N0aJB^?$AgWnoZ7GcKhX_D+|%*a|~NkFF5kE zM;G@|&qBqGgF2p(Q2f)PT~*zjLv6Ey0FKMTIqPNWqFa?0VN zx*Ox!=r%)T!q>9~en;h2w?F}?-0KR8FopkoVsfhkI7-2At1pL#L~CKJNDW2|77p*^ zeC7{FLm_fU%VPsacs_}`e63NAu5gS zD1>HLw|1_arVh9{&v;hEwG|kMUoT>6fW_4GQXscoSO2WU%+K#-GOvD{Nu3E-CnNVT z9xRqe6tXc<4&B65h|?VyV87n6;1i08o@cDPSqV%7b>Ly#%U-r7+A?5LI4jH@FJ!a^ zw054L{SaZ_bEIP7n|AUbRuu5&E!^u>&R)1KJ=pxTZ@uGT-P^a8(5s!}5zxBu16O%_ z!!DIIE8&nVdqR`2@KNi@h*eU0%@zMJ2#4mLXPF>Hc~F}jrP&FX(q<2{4Skxz41i8l zk>lI^4IdPSfGhqrPX5GaxK#nEMe^mKjd%^3I4dV-28;FwJ^6rf1cbbuAMfHOG@iRf zz}z+>j}w)}w^Wm}=0X%Y+*kPX^}nH9$ zo!`+Gk}vYU_(>4W6GiiB3j5s%4Is@WL;pZpR+GYB_P@N*J4K}*92yf>1=qquUl($7 zDR;PO2QtqIM*IlY)nQhp>bp?fK%bH~CnMj!-4i0}7zlRG_q_jNsyMd9WJi!z&geeM zB7U)`$AL<}-{>}}) > And using `helmfile`, I will install `ArgoCD` to my clusters, of course, because it's an awesome tool, without any doubts. But don't manage your infrastructure with it, because it's a part of your infrastructure, and it's a service that you provide to other teams. And I'll talk about in one of the next posts. diff --git a/src/content/posts/argocd-vs-helmfile-application/index.md b/src/content/post/allanger/argocd-vs-helmfile-application.md similarity index 98% rename from src/content/posts/argocd-vs-helmfile-application/index.md rename to src/content/post/allanger/argocd-vs-helmfile-application.md index 9e985c9..eef42f2 100644 --- a/src/content/posts/argocd-vs-helmfile-application/index.md +++ b/src/content/post/allanger/argocd-vs-helmfile-application.md @@ -1,14 +1,13 @@ ---- -title: "ArgoCD vs Helmfile: Applications" -date: 2023-02-13T12:14:09+01:00 -draft: false -cover: - image: "/posts/argocd-vs-helmfile/cover-applications.png" - caption: "ArgoCD" - relative: false - responsiveImages: false -ShowToc: true ---- ++++ +title = "ArgoCD vs Helmfile: Applications" +date = 2023-02-13T12:14:09+01:00 +image = "/posts/argocd-vs-helmfile/cover-applications.png" +draft = false +categories = [ + "Kubernetes", + "CI-CD" +] ++++ > So as promised in [the previous ArgoCD post]({{< ref "dont-use-argocd-for-infrastructure" >}}), I'll try to show a simple example of Pull Requests for different kinds of setups. This is the first part. Putting everything in the same post seems kind of too much. diff --git a/src/content/posts/argocd-vs-helmfile-applicationset/index.md b/src/content/post/allanger/argocd-vs-helmfile-applicationset.md similarity index 97% rename from src/content/posts/argocd-vs-helmfile-applicationset/index.md rename to src/content/post/allanger/argocd-vs-helmfile-applicationset.md index 7c4b99f..1fef0be 100644 --- a/src/content/posts/argocd-vs-helmfile-applicationset/index.md +++ b/src/content/post/allanger/argocd-vs-helmfile-applicationset.md @@ -1,14 +1,13 @@ ---- -title: "ArgoCD vs Helmfile: ApplicationSet" -date: 2023-02-15T10:14:09+01:00 -draft: false -cover: - image: "/posts/argocd-vs-helmfile/cover-applicationset.png" - caption: "ArgoCD" - relative: false - responsiveImages: false -ShowToc: true ---- ++++ +title = 'ArgoCD vs Helmfile: ApplicationSet' +date = 2023-02-15T10:14:09+01:00 +image = "/posts/argocd-vs-helmfile/cover-applicationset.png" +draft = false +categories = [ + "Kubernetes", + "CI-CD" +] ++++ This is a second post about *"argocding"* your infrastructure. [First can be found here]({{< ref "argocd-vs-helmfile-application" >}}). diff --git a/src/content/posts/argocd-vs-helmfile-helmfile/index.md b/src/content/post/allanger/argocd-vs-helmfile-helmfile.md similarity index 99% rename from src/content/posts/argocd-vs-helmfile-helmfile/index.md rename to src/content/post/allanger/argocd-vs-helmfile-helmfile.md index d961535..ab2999d 100644 --- a/src/content/posts/argocd-vs-helmfile-helmfile/index.md +++ b/src/content/post/allanger/argocd-vs-helmfile-helmfile.md @@ -1,11 +1,13 @@ ---- -title: "Argocd vs Helmfile: Helmfile" -date: 2023-02-17T12:48:51+01:00 -draft: false -ShowToc: false ---- - -In two previous posts I've described how it's possible to install a couple of applications with [`Applications`]({{< ref "argocd-vs-helmfile-application" >}}) and [`ApplicationSets`]({{< ref "argocd-vs-helmfile-applicationset" >}}), and this one is the last in a row. And here I'm going to install the same applications (`VPA` and `Goldilocks`) with helmfile, and I will tell why I think that it's better than `ArgoCD` ++++ +title = "Argocd vs Helmfile: Helmfile" +date = 2023-02-17T12:48:51+01:00 +draft = false +categories = [ + "Kubernetes", + "CI-CD" +] ++++ +In two previous posts I've described how it's possible to install a couple of applications with [`Applications`]({{< relref "/post/allanger/argocd-vs-helmfile-application" >}}) and [`ApplicationSets`]({{< relref "/post/allanger/argocd-vs-helmfile-applicationset" >}}), and this one is the last in a row. And here I'm going to install the same applications (`VPA` and `Goldilocks`) with helmfile, and I will tell why I think that it's better than `ArgoCD` So let's start. Here you can find the [initial config](https://git.badhouseplants.net/allanger/helmfile-vs-argo/src/branch/helmfile-main). Let's see what we got here: diff --git a/src/content/post/allanger/do-we-need-continuous-reconciliation.md b/src/content/post/allanger/do-we-need-continuous-reconciliation.md new file mode 100644 index 0000000..ffdf03f --- /dev/null +++ b/src/content/post/allanger/do-we-need-continuous-reconciliation.md @@ -0,0 +1,56 @@ ++++ +title = 'Do we really need Continuous Reconciliation after all?' +date = 2024-02-13T15:04:44+01:00 +draft = true +categories = [ + "Kubernetes", + "CI-CD" +] ++++ + +> Well, alright, I guess it depends + +## Intro + +First, let's figure out what **continuous reconciliation** stands for. Considering this post's categories, I guess we're talking **Kubernetes** here. And **continuous reconciliation** means that resources deployed to kubernetes are not only synced once, when you run `kubectl apply`, but all the time. Basically, every 30s (or whatever reconciliation period you got) something is running `kubectl apply`. + +The idea behind that (as I see) is that you're always aware of what's deployed to you cluster, by looking at the code. Let's say, there is a git repo `k8s-deployments`, and it has all the resources that you want to have running in your cluster. + +> It made a lot of sense to when I heard for the first time, not I'm rather sceptical about it. + +As far as I understand, having all you resource described in a git repository and continuously reconciled is **GitOps**, not only that of course, it's just a part of it. At least that's what I've been told by some engineers. + +## GitOps + +I don't think that I'm the one to be talking about **GitOps** because everytime I was trying to bring my point on that, I've been told that I don't know what **GitOps** is. + +> To be honest, after many conversations with different people, I think that GitOps is just a buzzword for selling technologies and services, correct me if I wrong. + +I can't talk about others opinion, so I'll jsut try to express mine. I think that **GitOps** is when you have a desired state of your infrastucture written in code, and a mechanism to make your real infrastucture state correspond the desired one. + +Let's not lean towards Kubernetes itself, and let's imaging that you, as a SRE team, have to manage Kubernetes clusters. In your cluster you'll have to run an application that is being developed by the company you're working for, and some dependencies, that this application needs in order to run. + +> Also, I guess it is an opinion that many of SREs won't share. I guess that the SRE team shouldn't be integrated to development teams. In my opinion, SRE teams should provide ingfa-as-a-service to developes and help them use it. + +So, after all, you cluster will contain approximately this: +- Very base layer + - CNI plugin (E.G. Cilium) + - CoreDNS +- System layer + - Cert Manager + - Traefik +- Monitoring layer + - Kube Prometheus Stack + - Loki + - Promtail +- Application specific dependencies + - Zalando Postgres Operator + - Redis Operator +- Application layer + - Your application + +And as an addition, you might have a GitOps tool, currently, the most popular ones are **Flux** and **ArgoCD**, I guess I will compare them later, in this article let's just use **Flux**. + +First question that comes to my mind is, onto which layer one should put Flux? Flux depends on `CNI` and `CoreDNS`, so it should be deployed after them. So should it be the System layer? It sounds good, I guess, but do we want Flux to manage **Cert manager** and **Traefik**. Me - not, but the answer that I get the most is yes. So let's assume, we've decided to manage them with Flux. It means that we should add another layer between "Very base" and "System" ones, a **GitOps layer**. To us it means that after we get a bare new empty cluster, we need to install CNI, CoreDNS, and Flux, and only then we should deploy anything else with the Flux help. + +What does it mean for us, we need to diff --git a/src/content/posts/dont-use-argocd-for-infrastructure/index.md b/src/content/post/allanger/dont-use-argocd-for-infrastructure.md similarity index 98% rename from src/content/posts/dont-use-argocd-for-infrastructure/index.md rename to src/content/post/allanger/dont-use-argocd-for-infrastructure.md index 7037945..fbae692 100644 --- a/src/content/posts/dont-use-argocd-for-infrastructure/index.md +++ b/src/content/post/allanger/dont-use-argocd-for-infrastructure.md @@ -1,14 +1,14 @@ ---- -title: "Don't use ArgoCD for your infrastructure" -date: 2023-02-09T12:47:32+01:00 -draft: false -ShowToc: true -cover: - image: "/posts/dont-use-argocd-for-infrastructure/cover.png" - caption: "ArgoCD" - relative: false - responsiveImages: false ---- ++++ +title = "Don't use ArgoCD for your infrastructure" +date = 2023-02-09T12:47:32+01:00 +draft = false +image = '/posts/dont-use-argocd-for-infrastructure/cover.png' +categories = [ + "Kubernetes", + "CI-CD" +] ++++ + > Of course, it's just a clickbait title. Use whatever works for you. I will just describe why I wouldn't use `ArgoCD` for the infrastructure ## Prelude diff --git a/src/content/posts/.spelling b/src/content/posts/.spelling deleted file mode 100644 index 8085d6d..0000000 --- a/src/content/posts/.spelling +++ /dev/null @@ -1,45 +0,0 @@ -# markdown-spellcheck spelling configuration file -# Format - lines beginning # are comments -# global dictionary is at the start, file overrides afterwards -# one word per line, to define a file override use ' - filename' -# where filename is relative to this configuration file -WIP -envs -anymore -hostname -hostnames -Dockerfile -helmfile -k8s -env -dir -dev'n'stages -oi -minio -ArgoCD -setups -SRE -autoscaler -gitea -vendoring -cli -vpa -ok -cmp -config -GitOps -argo -argocding -cluster-1 -cluster-2 -cluster-3 -kubernetes -argocd -helmfiles -plugin -helmfile.yaml -cleanup -serie -backend -js -frontend diff --git a/src/content/posts/_index.md b/src/content/posts/_index.md deleted file mode 100644 index e69de29..0000000 diff --git a/src/content/posts/creating-a-sample-pack-kick.md b/src/content/posts/creating-a-sample-pack-kick.md deleted file mode 100644 index d229519..0000000 --- a/src/content/posts/creating-a-sample-pack-kick.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: "Creating a Sample Pack: Kick" -date: 2023-05-24T16:59:03+02:00 -draft: false -ShowToc: true -cover: - image: "/posts/creating-a-sample-pack-kick/cover.png" - caption: "Creating a Sample Pack: Kick" - relative: false - responsiveImages: false ---- - ->Oi! ->I've decided to turn that blog more into the musical direction, because I've got enough of IT related stuff on my work. So most probably, I'll be posting about sound design, sound engineering and music more. - -## Intro - -I want to make a series of articles about sound design. I'll be learning as well during this process, and here I'll just post my findings. If you happen to read it and find mistakes, feel free to send me your thoughts. - -I consider this cycle ready, when I have enough of samples, that I can create a beat or a song. After everything is done, I'll publish the sample pack, so anybody can download it for free. And the example of a track will be on my [funkwhale instance](https://funkwhale.badhouseplants.net/library) - -## Let's go - -I've decided to start with a drum kit. And the first element that I'm going to create is a **kick drum**. I'll be using Vital as a sound design instrument, if you don't know what it is you should check it out here: . - - -First, we need to understand, what the kick actually is. What are components of that sound. I can identify three components of it: -- Click (that is produced by a pedal) -- Body (sound from inside a drum) -- Metal (vibrations of metal components of a drum kit) *This is optional, I'd say* - -Let's open Vital - -![Empty Vital](/posts/creating-a-sample-pack-kick/init_vital.png) - -First of all, let's get rid of all non-persistent stuff (Things that are different on each key press) - -![Unison and Phase](/posts/creating-a-sample-pack-kick/unison_phase.png) - -*And we will do the same for all wavetables for kick and snare* - -Now let's set wave types to `basic shapes` - -![Basic Shape](/posts/creating-a-sample-pack-kick/kick_basic_shape.png) - -Doesn't sound like a kick yet, but the main trick, as I think, is to map the pitch of that OSC to an LFO, that looks like that, and set the base value to something around **-12**. -![LFO 1](/posts/creating-a-sample-pack-kick/kick_lfo_1.png) - -You can play around a bit and find a perfect spot that will make your kick awesome, but let's listen to what I've got now. I'll use one of defaults `Logic Pro` drum kits and replace a kick with the one I'm creating. Later I'll be replacing other drums as well, and in the end we will have a full drum kit. - -Also, we don't need to change a pitch depending on which key is pressed, so let's disable the `Note Track` for all OSC in the `Advanced` tab -![Note Track disabled](/posts/creating-a-sample-pack-kick/disable_note_track.png) - -*Also, after disabling the note tracking, I've set the pitch base value to -14, so it sounds like a kick* - -Now, let's listen: - -{{< audio "/posts/creating-a-sample-pack-kick/Kick_v1.mp3" >}} - -Kick already sounds like a kick, but a lame one, doesn't it. Let's play a bit. - -First, let's add a second LFO to control the volume level of the kick, it should be a short hit, so I'm adding a LFO like that and mapping it to the `level` of the first `OSD` - -![LFO 2](/posts/creating-a-sample-pack-kick/kick_basic_shape.png) - -And then enabling the `Filter 1` and mapping this LFO to the `Filter` as well, - - -It looks and sounds like that - -{{< video "/posts/creating-a-sample-pack-kick/Kick_v2.mp4" "video-1">}} - -With that filter setup I think, click sounds better. To make it even sharper, let's add some `White Noise` and an additional `LFO` for it. - -{{< video "/posts/creating-a-sample-pack-kick/Kick_v3.mp4" "video-2">}} - -And now let's add some effects. I've added a little bit of `EQ`, a `Distortion` which drive is mapped to a new `LFO`, and a `Compressor`, so now it looks like that: -{{< video "/posts/creating-a-sample-pack-kick/Kick_v4.mp4" "video-3">}} - -The last step would be to add some more effects, but outside the `Vital` synth already. *And I'd like to change the pattern, because this one is driving me nuts*. So I've added a bit of additional `EQ`, `Distorition`, and `Compression`, and now it sounds like that. ` - - -{{< audio "/posts/creating-a-sample-pack-kick/Kick_final_result.mp3" >}} diff --git a/src/content/posts/kid-robotik-im-so-sorry.md b/src/content/posts/kid-robotik-im-so-sorry.md deleted file mode 100644 index 3e42509..0000000 --- a/src/content/posts/kid-robotik-im-so-sorry.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Kid Robotik - I'm SO Sorry" -date: 2023-09-22T13:05:28+02:00 -draft: true -ShowToc: true -cover: - image: "/posts/kid-robotik-im-so-sorry/cover.jpg" - caption: "Kid Robotik - I'm SO Sorry" - relative: true - responsiveImages: true ---- - -[OPEN ON SPOTIFY](https://open.spotify.com/album/6TTnfWZQyoZ8O1GuK8TtXf?si=cNchuEmfTAy52Z6jstnG2A) -- [OPEN ON DEEZER](https://deezer.page.link/D3M4JVdDYhmxXUUZ7) -- [OPEN ON YOUTUBE](https://youtube.com/playlist?list=OLAK5uy_l3BFAqPxAOkkzb-SByHbbvgBkdk3_idjg&si=bBo6cQE8jGWjLnsI) - -It's not easy to find this album, to be honest. I think that I would never have listened to it unless I started trying to understand the Glaswegian accent. *I haven't succeeded really still*. While searching for artists from Scotland, I've bumped onto this YouTube channel: [Twelve50TV](https://www.youtube.com/@Twelve50TV). There are many rappers that I actually like, but they don't tend to publish their music on mainstream streaming platforms (read Spotify). So I couldn't really listen to them during my daily routine. - -One of my favourites was that video: [Kid Robotik - War](https://youtu.be/LToW8CdBGOQ?si=-MgdWM1FvzGqKhnM). And this guy has his albums published on Spotify. I was listening to this song mostly because of other rappers performing on it: **Sherlock** and **McRoy**. And since this album is **Kid Robotik's** one, I wasn't trying to listen to it at all. I'm not saying that I didn't like his part there, but it didn't seem outstanding to me at all. Though, not so long ago I was bored by all the music I was listening to, and I've decided to check out the album finally. And after first listen I could already say that this guy, Kid Robotik is indeed one of favourite rappers. *Even though I still can't understand about 80% of what they're saying on that album, I freaking like beats, flow, voice and mixing.* And I think that it should gain a way more streams, than it has. - -I can't even pick songs that I like the most, because they're all great in my opinion. - ---- -I want to build a completely non-profit independent public music library based on Funkwhale application, you can find it here: https://funkwhale.badhouseplants.net. At the moment of writing this post, I only have my music released there, but I hope that one day it will change. And I would really like to have this album there. So if you are Kid Robotik or someone who know him, please let me know if you'd be interested. diff --git a/src/content/posts/some-old-beats-are-out.md b/src/content/posts/some-old-beats-are-out.md deleted file mode 100644 index 69e0865..0000000 --- a/src/content/posts/some-old-beats-are-out.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: "Some old beats are out" -date: 2023-07-23T13:46:29+02:00 -draft: false -ShowToc: true -cover: - image: "/posts/some-old-beats-are-out/Cover.png" - caption: "Some old beats are out" - relative: false - responsiveImages: false -tags: - - Music - - Beats ---- - -I've released some of my old beats that we pending for quite a time. You can check them out on my [Funkwhale](https://funkwhale.badhouseplants.net/channels/allanger_beats) - -If you happen to like anything, just let me know, we will figure it out - -### Dusted -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Fallen Folk -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Pillows -{{< rawhtml >}} - -{{< /rawhtml >}} - -### Swipe -{{< rawhtml >}} - -{{< /rawhtml >}} diff --git a/src/content/posts/vst-on-linux-1/index.md b/src/content/posts/vst-on-linux-1/index.md deleted file mode 100644 index ce5eb47..0000000 --- a/src/content/posts/vst-on-linux-1/index.md +++ /dev/null @@ -1,287 +0,0 @@ ---- -title: "Vst on Linux 1" -date: 2023-01-24T15:47:50+01:00 -draft: false -ShowToc: true -cover: - image: "/posts/vst-on-linux-1/cover.png" - caption: "Vst on Linux" - relative: false - responsiveImages: false ---- - ->Best, but according to Output. Their article: *[https://output.com/blog/output-favorites-freebies](https://output.com/blog/output-favorites-freebies) - -This is kinda article where I'm looking for "BEST FREE VST" articles or videos, or whatever, trying to run them on Linux and checking how they perform. The first article I've found is one by **Output**, so be it. - ---- - -## 1. Arcade by Output 👎 - -Freaking unexpected, huh? But what choice do I have? **Walk the walk and talk the talk. **So let's start by pressing the "TRY IT FREE" button. - -First I need to enter my email, then I need to enter a bunch of information about myself and then: What a bummer, they want me to add a payment method. And even thought they won't charge me the first month, I'm not doing talking the talk. Sorry, let's go to the next one. - ---- - -## 2. OTT by Xfer 👍 - -This one you will find in any top, I believe. It can mean only one thing: it's really one of the best. So let's try. - -There is no Linux version of this plugin, so we will have to use the Windows one. How, you would ask me? I will have to install a couple of packages to my system before I'm ready. I'm starting by installing **wine**.   - -I am not going to describe the process of installing it, google `"$YOUR_LINUX_DISTRO_NAME install wine" ` after it's done you may want to create a new wine prefix in your system. - -What is wine prefix? Let's think of it as of a directory that contains Windows-related stuff. All plugins will be installed there alongside libraries that are required to make them work. - -Let's give this prefix a recognizable name, like `.wine_vst_plugins.` I'm opening the terminal, yes, I'll have to use it, but you shouldn't be scared of it, because terminal is our friend. Opening it and executing: - - $ WINEPREFIX="$PWD/.wine_vst_plugins/" winecfg - - -It will open a window when you can configure your wine prefix, but the main stuff is already done, so I just close it. - -To check if we're happy, I'm executing the following - - $ ls -la $HOME/.wine_vst_plugins - - total 3332 - drwxr-xr-x 1 allanger allanger 126 Oct 27 18:13 . - drwx------ 1 allanger root 1922 Oct 27 18:15 .. - drwxr-xr-x 1 allanger allanger 8 Oct 27 18:13 dosdevices - drwxr-xr-x 1 allanger allanger 110 Oct 27 18:13 drive_c - -rw-r--r-- 1 allanger allanger 3282847 Oct 27 18:13 system.reg - -rw-r--r-- 1 allanger allanger 12 Oct 27 18:13 .update-timestamp - -rw-r--r-- 1 allanger allanger 4130 Oct 27 18:13 userdef.reg - -rw-r--r-- 1 allanger allanger 113309 Oct 27 18:13 user.reg - - -If your output looks like mine, we're good to go. Let's install the second tool: [https://github.com/robbert-vdh/yabridge](https://github.com/robbert-vdh/yabridge). You will find all the instructions if you just scroll down a wee bit. After installing it you also must have a tool called **yabridgectl,** to check that it is right, just execute the following - - $ yabridgectl - - yabridgectl 4.0.2 - Robbert van der Helm - Optional utility to help set up yabridge - - USAGE: - yabridgectl - - OPTIONS: - -h, --help Print help information - -V, --version Print version information - - SUBCOMMANDS: - add Add a plugin install location - rm Remove a plugin install location - list List the plugin install locations - status Show the installation status for all plugins - sync Set up or update yabridge for all plugins - set Change the yabridge path (advanced) - blacklist Manage the indexing blacklist (advanced) - help Print this message or the help of the given subcommand(s) - - - -I hope you're seeing pretty much the same picture as I am. And it only means that we can go further. - -Now it's time to install the plugin itself. I'm downloading the **Windows** version and opening my terminal again - -Let's assume that you've downloaded it to the `~/Downloads` folder, and the file name is `Install_Xfer_OTT_135.exe` - - $ cd ~/Dowloads - $ WINEPREFIX="$PWD/.wine_vst_plugins/" wine ./Install_Xfer_OTT_135.exe - - -Why we're adding this `WINEPREFIX` thing every time when running `wine`? Because we're saying which wine prefix should be used by wine, since it's not a default path for the prefix. - -After installing this plugin, I will need to add it to **yabridge**. To do that, use **yabridgectl** - -Instead of what I'm putting after `/drive_c/`, provide a path that you've chosen during the installation - - $ yabridgectl add ~/.wine_vst_plugins/drive_c/Program\ Files/Common\ Files/VST - $ yabridgectl sync - - -And I'm opening a DAW, *I assume you already have one too, for here you are. But if you don't, and you don't know which to install, just install **Ardour.*** - -I'm opening it, adding a track and adding the **OTT** plugin to that track. - -![OTT Xfer](/posts/vst-on-linux-1/ott-xfer.png) - -It is working and I would even say it's running -The UI part is a wee bit buggy, but I don't think that it's a problem. - ---- - -## 3. Wider by Polyverse 👍 - -I'm entering my email again and receiving a download link. Downloading, unpacking, and installing - - $ WINEPREFIX="$PWD/.wine_vst_plugins/" wine ./InfectedMushroom-Wider-V1.1.3.exe - $ yabridgectl sync - - -![Wider](/posts/vst-on-linux-1/wider.png)Again, it's working flawlessly -So far so good, even the UI part is perfect. - ---- - -## 4. CamelCrusher by Camel Audio 👍 - -It can be downloaded even without email thingy. - - $ WINEPREFIX="$HOME/.wine_vst_plugins/" wine ./camelcrusher-win_mac\ \(www.mpcindia.co\)/CamelCrusherWin-1-0-1-x64.exe - $ yabridgectl sync - - - And when I'm trying to add it to Ardour, I'm getting an error - - [Info]: Scanning: /home/allanger/.vst/yabridge/CamelCrusher.so - 09:23:38 [error] - 09:23:38 [error] Error during initialization: - 09:23:38 [error] '/home/allanger/.vst/yabridge/CamelCrusher.dll' does not exist, make sure to rename 'libyabridge-vst2.so' to match a VST plugin .dll file. - 09:23:38 [error] - [ERROR]: ** ERROR** VSTFX : CamelCrusher could not be instantiated :( - - [WARNING]: Cannot get VST information from '/home/allanger/.vst/yabridge/CamelCrusher.so': instantiation failed. - Scan Failed. - - -And I can't actually understand what is the problem here. - -I don't give up so quickly. Let's try running it via [Carla](https://github.com/carla-simulator/carla). I won't describe how to install it, you can google it. - - -So after it's installed, I'm opening it as a standalone app first and trying to add my **CamelCrusher** there. And it's working. Then the next step is to add **Carla** as a **FX** plugin in **Ardour** and then add CamelCrusher there. -![CamelCrush](/posts/vst-on-linux-1/camel-crush.png)Working again, but not without Carla - ---- - -## 5. Fracture by Glitchmachines 👍 - -I love this plugin, and I'm using it a lot on my MacBook, so it would be nice to run it on **Linux** too. So let's go. But Glitchmachines can give us another great plugin for free, so I will try running both of them here. The other one is **Hysteresis**. So I'm downloading both of them. - -After receiving two links, I'm installing them - - $ WINEPREFIX="$HOME/.wine_vst_plugins/" wine Fracture_setup.exe - $ WINEPREFIX="$HOME/.wine_vst_plugins/" wine Hysteresis_setup.exe - $ yabridgectl sync - - -![Glitchmachines](/posts/vst-on-linux-1/glitchmachines.png) - -They are working but there is one UI glitch - -![Glitchmachine's making glitch](/posts/vst-on-linux-1/glitchmakesrs-glitch.gif) - -#### Maybe you won't notice it on your system - -Because we probably have different system configs, so maybe it's only possible to reproduce this bug with a set of configs and packages I'm using in my Linux. So if you don't face this issue, lucky you! - -It's not very annoying to me, but to avoid this kind of behaviour, I can wrap these plugins with **Carla.** -![Glitchmachines with Carla](/posts/vst-on-linux-1/glitchmaker-carla.gif) -It's working perfectly with Carla *(it's not that buggy in real life, only on the record)* - ---- - -## 6. FreqEcho by Valhalla DSP 👍 - -Valhalla's plugins, I think, are one of the most popular in the music world. I don't know a man who doesn't have all of their free plugins installed.  And I do have them installed already in my system, but I will go through the installation process again, just to describe it here. So let's download all of their free plugins - -- Valhalla Freq Echo -- Valhalla Space Modulator -- Valhalla Supermassive -```BASH -$ WINEPREFIX="$HOME/.wine_vst_plugins/" wine ValhallaFreqEchoWin_V1_2_0.exe -$ WINEPREFIX="$HOME/.wine_vst_plugins/" wine ValhallaSpaceModulatorWin_1_1_6v3.exe -$ WINEPREFIX="$HOME/.wine_vst_plugins/" wine ValhallaSupermassiveWin_V2_0_0.exe -$ yabridgectl sync -``` - -![Valhalla plugins](/posts/vst-on-linux-1/valhalla.png) -All of them run flawlessly - ---- - -## 7. Audio Treasure by Max For Cats 👎 - -As far as I could understand, it can be used only in **Ableton Live**, and since I'm not an Ableton user, and I don't want to run it with **Wine** *(cause there is no native Linux version)*, it's becoming the second plugin in the list, that is not working on - -## 8. Saturation Knob by Softube 👎 - -To get it, I must have a Softube account, (*but I already have it, because I used to download all them free plugins like nuts and create accounts everywhere 🤦)* - -So I'm downloading their App Center, that I'm going to use to install a plugin. *I do hate this approach of managing software, but I will cover it in another post one day. * - -So the process is very similar to a direct plugin installation. Install **Softube Central** to the same **Wine** prefix - - WINEPREFIX="$HOME/.wine_vst_plugins/" wine Softube\ Central\ Setup\ 1.7.1.exe - - -But after that, I've found out that their **Software Center** is written is **Electron-based** application, and I wasn't yet able to run stuff like this in **Wine**. Maybe later I will put more effort into that, but for now, I'm saying that it's not working. 😥 - -> #### Some kind of rhetorical question -> -> I don't understand why they and, for example, **Splice** can't release a Linux version of their application, it they already use Electron, that in my understanding is supposed for cross-platform development. - ---- - -## 9 and 10. Plugins by iZotope 👎 - -**iZotope** is like **Valhalla**, everybody knows it. But I remember having troubles with their plugins on **Linux**. But now I'm trying again, and I'm full of hope. - -Plugins: - -- iZotope Vinyl -- iZotope Ozone Imager V2 *(it's not in the Output list, but why not?)* -- iZotope Vocal Doubler - -One more plugin vendor that requires an account creation. But I do have one from those good old times. - -Well, since I remember that there was a problem with them, I'll start by trying only one. Let it be **Ozone Imager V2**. - - $ WINEPREFIX="$HOME/.wine_vst_plugins/" wine iZotope_Ozone_Imager_v2_1_0.exe - - -But unfortunately, when I'm opening these plugins, it asks for an authorization, and it doesn't work. It's described in the **yabridge README.md**,but I'm too dummy to read it there. - -#### There is a workaround - -I've heard that you can download cracked versions of these plugins and they won't require an auth, so they might work. But I'm not trying that, and you shouldn't too. - ---- - -## 11. TAL-Chorus-LX 👍👍👍 - -It's a piece of cake. This plugin has a native build for Linux, so I'm (since I'm using **Arch Linux**) just installing it using **yay**. And you may want to use another package manager, or download it from the official web page, it's presented there. -![NATIVE, YOU KNOW!](/posts/vst-on-linux-1/tal-chorus.png) - - ---- - -## 12. Snap Heap by Kilo Hearts 👎 - -I was trying to get it, but It didn't seem free. - -![Snap Heap](/posts/vst-on-linux-1/snap-heap.png) - ---- - -## 13. Signal Free VST by Output 👎 - -I'm sorry, but I'm not even trying. It still hurts since the first place in this top. - ---- - -## Some kind of conclusion - -First, you have seen only pictures here but haven't heard anything I've done with these plugins. And I know that it sucks, because we're talking about music. I'll record a track using these plugins later and show you how it's working. - -About those plugins that didn't work: I know that some of them are great, and it's sad that **iZotope** are not running on Linux, but there are alternatives that are Linux native. So for each failed one I will try to find an alternative, and later I will share my findings here. - -Thanks for reading - -Oi! - - diff --git a/src/content/posts/vst-on-linux-2/index.md b/src/content/posts/vst-on-linux-2/index.md deleted file mode 100644 index 7c32ad9..0000000 --- a/src/content/posts/vst-on-linux-2/index.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: "Vst on Linux 2" -date: 2023-01-31T19:32:34+01:00 -ShowToc: true -cover: - image: "/posts/vst-on-linux-2/cover.png" - caption: "VST on Linux" - relative: false - responsiveImages: false ---- - -Big ups, **Venus Theory!** -[Link to the video](https://www.youtube.com/watch?v=OCzf38fCqB4) - -## Prerequisite -All of them are covered in [the first post]({{< ref "vst-on-linux-1" >}} ) - -- You have Wine and Yabridge installed -- You have a Wine prefix configured (in my case, `$HOME/.wine_vst_plugins/`, so every time you see it, use your own wine prefix) - -## Deelay 👍 - -You can find it here: [https://sixthsample.com/deelay/](https://sixthsample.com/deelay/) - - -After receiving a link, I'm downloading a **Windows 64-bit** version and running -```BASH - -$ WINEPREFIX="$HOME/.wine_vst_plugins/" wine Deelay-1.0.3-Installer-64bit.exe -$ yabridgectl sync -``` - -![A running deelay](/posts/vst-on-linux-2/deelay.png) - -It's running, but the context menus UI glitch is present -Audio qualities of this plugin on Linux are prefect, but when you open any drop-down menu, plugin's window is getting hidden. - -![UI glitch](posts/vst-on-linux-2/deelay-glitch.gif) - -But it can be fixed with **Carla**. If I'm putting Carla to my FX chain and then adding **Deelay** to **Carla**, this problem is gone. - -## Surge XT 👍👍👍 - -This plugin has a native **Linux** version, and it's open-source, so just install it with your package manager or download from the official site. You won't even have to touch **yabridge** and **wine** this time - -[**Source code**](https://github.com/surge-synthesizer/surge) - -![Surge XT Linux native](/posts/vst-on-linux-2/surge.png) - -## Cardinal 👍👍👍 - -**You won't believe me!** - -But it's open-source too and has supports **Linux** out of the box. - -[**Source code**](https://github.com/DISTRHO/Cardinal) - -![Again native and open-source](/posts/vst-on-linux-2/cardinal.png) - -## Fire 👍👍👍 - -*It ... is ... open ... source ... too ... and ... supports ... **Linux*** - -[**Source code**](https://github.com/jerryuhoo/Fire) - -So I'm just installing it with a package manager and trying. -![A real fire](/static/posts/vst-on-linux-2/fire.png) - -## Ruina 👍 - -*And a couple of others* - -It would be too good, if this one had a Linux version. To get this plugin, you will have to create an account, and download their installer 👿 - -[https://noiseengineering.us/products/the-freequel-bundle-sinc-vereor-virt-vereor-ruina](https://noiseengineering.us/products/the-freequel-bundle-sinc-vereor-virt-vereor-ruina) - -After downloading an Installer, I'm installing it with **wine **to the same prefix I install all their other plugins - - $ WINEPREFIX="$HOME/.wine_vst_plugins/" wine Noise\ Engineering\ Products\ 09358.exe - -![The installer](/static/posts/vst-on-linux-2/noise-engineering.png) - -It will install plugins, we've only left to sync yabridge config. - - $ yabridgectl sync - -![Running Ruina ](/posts/vst-on-linux-2/runia-plugin.png) - -![Sinc Vereor](/posts/vst-on-linux-2/sirt-plugin.png) - -![Virt Vereor](/posts/vst-on-linux-2/virt-vereor.png) - -All of them are working flawlessly. One wouldn't even notice that they're not native - ---- - -## Gatelab 👍 / Filterstep 👎 / Panflow 👍 - -No **Linux** version again, so I'm gonna. And they want me to enter my email again. That's a shame, but let's do it anyway. If Venus Theory says they're good, I'm sure they really are. - - $ export WINEPREFIX="$HOME/.wine_vst_plugins/" - $ wine Audiomodern_Filterstep_1.1.2/WIN/Filterstep_64\ 1.1.2\ \(Win64\).exe - $ wine Audiomodern_Gatelab_1.1.3/WIN/Gatelab\ 1.1.3\ \(Win64\).exe - $ wine Audiomodern_Panflow_1.0.1/WIN/Panflow\ 1.0.1\ \(Win64\).exe - -I had to rerun Ardour multiple times in order to make these plugins work. **Panflow** is running fine - -![Panflow](/posts/vst-on-linux-2/panflow.png) - -Gatelab is working fine too - -![Gatelab](/posts/vst-on-linux-2/gatelab.png) - -But when I add **Filterstep**, Ardour stops responding. I'm sure it's possible to make it work too, so I will try doing that in one of the next articles. - -## PaulXStretch 👍👍👎 - -I was tired after **Audiomodern** plugins, because they were freezing my Ardour and I had to log out and log in again to my system, for Ardour wouldn't run again after that. - -But **PaulXStretch** has a native Linux version too, and it has given me a strength to finish with this top. - -So I'm just installing it with a package manager. - -But my expectations were too high. I couldn't add PaulXStretch as a plugin in my **DAW**, even **Carla** couldn't handle it. Only [Kushview Element](https://kushview.net/) could handle it outside a **DAW**, but I couldn't connect Ardour with Element using JACK yet (probably because I'm too dummy). But when running **Element** as a plugin inside an **Ardour**, when I add PaulXStretch, Ardour crashes. - -But on the official site of this plugin, there is nothing said about a plugin version of PaulXStretch for Linux. So you can use it as a standalone application. Just record whatever you want, stretch and render an audio file to import it to your **DAW**. -![PaulXStretch as a standalone application](/posts/vst-on-linux-2/paulxstretch.png) ---- - -Actually, I'm very happy to see that 4 of 9 plugins has a native Linux support. It means that developers see now that Linux can be used for music production. And it makes me feel that Linux is becoming more adopted by more and more guys who just want to make music without struggling with their systems. - ---- - -Thanks for reading - -Oi! - - diff --git a/src/content/posts/vst-on-linux-3/index.md b/src/content/posts/vst-on-linux-3/index.md deleted file mode 100644 index c30b1ec..0000000 --- a/src/content/posts/vst-on-linux-3/index.md +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: "Vst on Linux 3" -date: 2023-02-03T18:26:44+01:00 -draft: false -ShowToc: true -cover: - image: "/posts/vst-on-linux-1/cover.png" - caption: "Vst on Linux" - relative: false - responsiveImages: false -tags: ['music'] ---- - -I've been told that I should add descriptions to plugins I'm writing about here, and it sounds very reasonable. So now I will not only describe how to install a plugin but also add a small description to it. - -## Prerequisite - -All of them are covered in [the first post]({{< ref "vst-on-linux-1" >}}) - -- You have Wine and Yabridge installed -- You have a Wine prefix configured (in my case, `$HOME/.wine_vst_plugins/`, so every time you see it, use your own wine prefix) - -## Before we begin - -In the previous post, I was trying to run PaulXStretch on Linux, and using it as a plugin in a DAW didn't work out. I've tried to update the JUCE library in the source code, and now it's working. You can find the code here: [https://git.badhouseplants.net/badhouseplants/paulxstretch](https://git.badhouseplants.net/badhouseplants/paulxstretch) - -To build, refer to the official build doc or use the `/build_docker.sh` script - -## Melda Free Bundle 👍 - -You can find it here: - -It's not a one plugin, but a whole bunch of them. I used to have it on my Mac a long ago, but I hate this way of managing plugins, so I don't install them if I'm not sure, I need them. And I never felt this way about **Melda Free Bundle.** - -But now I'll try running it on **Linux**. I don't think I'll ever use it, even if it runs smoothly as hell. So I will create an additional temporary wine prefix to install it there. - - $ export WINEPREFIX="$HOME/.wine_vst_plugins_tmp" - $ wine maudioplugins_16_01_setup.exe - -Install Melda Free bundle -### MDrummer - -[MDrummer](https://www.meldaproduction.com/MDrummer) - -Let's start with the MDrummer plugin. I've tried to run it as a plugin in **Ardour**,but it killed it. So I've added it with a **Carla** as a wrapper - -I'm downloading several GBs of samples and other data to make it work. - -![MDrummer](/posts/vst-on-linux-3/mdrummer.png) -I'd say it's over-bloated. And UI is a wee bit laggy on Linux -Let's see what we can do with it - -{{< video "/posts/vst-on-linux-3/mdrummer-example.mp4" "video-1" >}} - -### MDrumReplacer -[MDrumReplacer](https://www.meldaproduction.com/MDrumReplacer) - -As I understand, this plugin is catching drum signals and replacing them with another sound. So I'll add it next to the **MDrummer** in the **Carla Rack**. -![Replacer](/posts/vst-on-linux-3/mdrummer-lfo-carla.png) - -I've also added LFO in the chain, to modify the pitch value of the **MDrumReplacer** with it, so it doesn't sound so boring (at least, to me). - -{{< video "/posts/vst-on-linux-3/mdrummer-example-lfo.mp4" "video-2" >}} - -### MPowerSynth - -It's just a synth. I don't like the interface, and I'm not gonna use it in the future, so I'm simply using a preset. - -{{< video "/posts/vst-on-linux-3/mpower-synth.mp4" "video-3" >}} - -It sounds a wee bet laggy, but it's just on a video - ---- - -*I'm sorry, I'm not trying all of them, because it's too much. Let's try another one and go further.* - -### MGuitarArchitect - -It's like a pedal board, as I see. I can add many effects here. Let's try adding it to the same **Carla Rack** that is used for the bass. - -{{< video "/posts/vst-on-linux-3/mguitar-architect.mp4" "video-4" >}} - ---- - -## u-he TyrellN6 👍 -[u-he TyrellN6 ](https://u-he.com/products/tyrelln6/) - -I think that almost every **u-he** plugins has a native **Linux** support, and **Tyrell** is not an exception. But you most probably won't be able to install it with a package manager, because it's available only on Amazona.de. So just follow the link on the official web-page and download the Linux version. - -This is a pretty minimalistic synth, that can help you produce a lot of cool sounds without spending tons of hours learning it. I definitely can recommend it, as I can recommend anything developed by **u-he** - -Unpack the archive and run the **./install.sh** script - - $ ./TyrellN6-3898/install.sh - -{{< video "/posts/vst-on-linux-3/tyrell.mp4" "video-5" >}} - -I can't tell anything bad about **u-he**, I love all their plugins, I love that they support Linux and I love that they together with **Bitwig** are working on the new plugin open-source format ([CLAP](https://github.com/free-audio/clap)). - -Tyrell is just a very cool free synth. What else can I say? - ---- - -## Valhalla Supermassive 👍 - -I've already covered Valhalla plugins in the [first post]({{< ref "vst-on-linux-1" >}}), so it doesn't make sense to repeat myself, instead of that, I'll add every free **Valhalla** plugin to the project and show you how it's working. - -{{< video "/posts/vst-on-linux-3/vallhalla.mp4" "video-6" >}} - - -## Spitfire Labs 👍 -[Spitfire Labs](https://labs.spitfireaudio.com/?sortBy=prod_products_labs_latest) - -I think, everybody knows what's that. But if you don't and you don't mind creating a Spitfire account, just try. - -I need to create an account for downloading that. *But I already have one, because I'm an active LABS user.* - - $ wine SpitfireAudio-Win-3.4.0.exe - $ yabridgectl sync - -You will have to install presets -![Spitfire App](/posts/vst-on-linux-3/spitfire-labs-app.png) - -{{< video "/posts/vst-on-linux-3/labs-example.mp4" "video-7" >}} - -## Infinite Space Piano 👍 - -[Space Piano](https://zaksound.com/infinite-space-piano/) - -This is a piano synth. I already have a lot of them, and as for me, this is yet another one. But is sounds pretty good, so you may like it. - -This time I really need to create an account, because it's the first time I hear about this one. - -There is no **Linux** version, I'm getting the **Windows** one. I've got a feeling that I'm not gonna use it in the future, so I'm installing it in the temporary prefix. - - $ export WINEPREFIX="$HOME/.wine_vst_plugins_tmp/" - $ wine Infinite\ Space\ Piano\ 2.exe - $ yabridgectl sync - -{{< video "/posts/vst-on-linux-3/space-piano.mp4" "video-8" >}} - -## ProjectSAM Free Orchestra 👎 -[Free Orchestra](https://projectsam.com/libraries/the-free-orchestra/) -![Free Orchestra](/posts/vst-on-linux-3/native-access.png) -Ok, let's try -I'm downloading **Native Access**, and it's not working. And this is the moment, I'm giving up on this plugin. - -## Eventide Pendulate👍 -[Eventide Pendulate](https://www.eventideaudio.com/plug-ins/pendulate/) - -Downloading a Windows version again. - - $ wine Pendulate-1.3.6-windows-installer.exe - $ yabridgectl sync - -{{< video "/posts/vst-on-linux-3/eventide-pendulate.mp4" "video-9" >}} - -Running just fine -As you see, this is a pretty interesting Synth, I have enough of synths for everything, but this one may join the ranks too. - -## VCV Rack 👍 -[VCV Rack](https://vcvrack.com/) - -VCV Rack is an open-source Eurorack modular synthesizer simulator - -I've already covered the Cardinal plugin [here]({{< ref "vst-on-linux-2" >}}). And this is basically the same thing. And so I will just show **Cardinal** instead of **VCV Rack**. But if you want VCV Rack, it's working on Linux just fine, but you can't use the free version as a plugin, that's why I'm showing Cardinal - -{{< video "/posts/vst-on-linux-3/vcv-rack.mp4" "video-10" >}} - -I didn't have enough time to learn it yet, so that's what I could do with it - -## U-He Protoverb 👍 -[U-He Protoverb](https://u-he.com/products/protoverb/) - -Protoverb is a reverb created by u-he. It has native Linux support - -Download the **Linux** version and install it by running a script. You can find everything [here](https://u-he.com/products/protoverb/) - -## PaulXStretch 👍 - -It's already covered in the previous article. But since then, one thing is changed. You could've seen it in the very beginning of the post, that I've updated JUCE library in the source code, and now it's running as a VST plugin. If you missed it, try reading the beginning one more time. - -I'm testing it currently, but you can help me with that. - -## Bonus: Vital 👍 -[Vital](https://vital.audio/) - -I think this is the best Synth ever made. It's open source and has Linux support. I use it in every project and if you don't, I recommend you to start doing that. - -{{< video "/posts/vst-on-linux-3/vital.mp4" "video-11" >}} - -The video is laggy again, but in reality it's fine. - ---- -If you like what I'm doing, you can follow my [twitter](https://twitter.com/_allanger) or [mastodon](https://mastodon.social/@allanger), since I'll be posing there all the updates - -Thanks -Oi! diff --git a/src/content/search.md b/src/content/search.md deleted file mode 100644 index 39ef5f9..0000000 --- a/src/content/search.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: "Search" # in any language you want -layout: "search" # is necessary -# url: "/archive" -# description: "Description for Search" -summary: "search" -placeholder: "placeholder text in search input box" ---- \ No newline at end of file diff --git a/src/hugo.yaml b/src/hugo.yaml new file mode 100644 index 0000000..74a3a83 --- /dev/null +++ b/src/hugo.yaml @@ -0,0 +1,45 @@ +languageCode: en-us +title: Bad Houseplants +theme: stack +favicon: /favicon.ico +Params: + GitBranch: main + GitCommit: unknown + mainSections: + - post + sidebar: + avatar: + enable: true + local: true + src: avatar.png + subtitle: PunkOps by allanger + comments: + enabled: true + provider: remark42 + remark42: + host: https://remark42.badhouseplants.net + site: remark + locale: en + widgets: + homepage: + - type: search + - type: archives + params: + limit: 5 + - type: categories + params: + limit: 10 + #- type: tag-cloud + # params: + # limit: 10 + page: + - type: toc +related: + includeNewer: true + threshold: 60 + toLower: false + indices: + - name: tags + weight: 100 + - name: categories + weight: 200 diff --git a/src/layouts/_default/_markup/render-link.html b/src/layouts/_default/_markup/render-link.html deleted file mode 100644 index f04b2e3..0000000 --- a/src/layouts/_default/_markup/render-link.html +++ /dev/null @@ -1 +0,0 @@ -{{ .Text | safeHTML }} diff --git a/src/static/about/logo.png b/src/static/about/logo.png deleted file mode 100644 index 7170a55..0000000 --- a/src/static/about/logo.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bebcfc710633a536ebe3124770dceb100760c108cb861f6e5971f37d867e38f7 -size 233283 diff --git a/src/static/android-chrome-192x192.png b/src/static/android-chrome-192x192.png deleted file mode 100644 index e785708..0000000 --- a/src/static/android-chrome-192x192.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b5da923b06b69780de08c3450e99793a266c615e535a1053c718d6ae9eb8cb35 -size 20377 diff --git a/src/static/android-chrome-512x512.png b/src/static/android-chrome-512x512.png deleted file mode 100644 index fb1798a..0000000 --- a/src/static/android-chrome-512x512.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:193f9db492edcc5a1202f85998675cc23dcf82a6666fcebe8a492c8c1dbe2673 -size 44441 diff --git a/src/static/apple-touch-icon.png b/src/static/apple-touch-icon.png deleted file mode 100644 index 91a62b9..0000000 --- a/src/static/apple-touch-icon.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:efe8ae3cd0bc31b15c9e0d8e622a3019b969f07cf1692194dcad54c133f03925 -size 18092 diff --git a/src/static/favicon-16x16.png b/src/static/favicon-16x16.png deleted file mode 100644 index 2c71d71..0000000 --- a/src/static/favicon-16x16.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:44436d4ce290289438e1f06101af312b83a535142b5a7cc8faa1e597a58d4c05 -size 585 diff --git a/src/static/favicon-32x32.png b/src/static/favicon-32x32.png deleted file mode 100644 index 7ad9d34..0000000 --- a/src/static/favicon-32x32.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:168891830d9dcfb9146a4f907a50cfddfb4b06c9245cf65fa6398ff89edf127d -size 1501 diff --git a/src/static/favicon.ico b/src/static/favicon.ico deleted file mode 100644 index c5d3be1..0000000 --- a/src/static/favicon.ico +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d872fe94954e47d14563d77ddba54f15aa62f5df0a76f3ead45764847e554154 -size 15406 diff --git a/src/static/music/allanger-Anymore.jpg b/src/static/music/allanger-Anymore.jpg deleted file mode 100644 index b61b87c..0000000 --- a/src/static/music/allanger-Anymore.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:03b9da09d850d01c9cb420c6b3a128c5395872f07461e4b0488f665bddfd9835 -size 1065466 diff --git a/src/static/music/allanger-Await.jpg b/src/static/music/allanger-Await.jpg deleted file mode 100644 index ca40a44..0000000 --- a/src/static/music/allanger-Await.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:045b360f443946471fefff417f4d09f26b8a5ec10a163efe05770589d88eed8c -size 1907777 diff --git a/src/static/music/allanger-Desensitized.png b/src/static/music/allanger-Desensitized.png deleted file mode 100755 index bdc2a0d..0000000 --- a/src/static/music/allanger-Desensitized.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:293efeb5270f812ce115b6de8df01139e9a4eca1405611bce1b9c0a2104164f8 -size 13919204 diff --git a/src/static/music/allanger-Four_Steps_Behind.jpg b/src/static/music/allanger-Four_Steps_Behind.jpg deleted file mode 100644 index fbf98a9..0000000 --- a/src/static/music/allanger-Four_Steps_Behind.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2def9a412cba612ccf55cc39deeb82f971418ad27119c93d63844c7c25bc0748 -size 2045790 diff --git a/src/static/music/allanger-Let_Me_Kill.png b/src/static/music/allanger-Let_Me_Kill.png deleted file mode 100644 index bca3626..0000000 --- a/src/static/music/allanger-Let_Me_Kill.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9c78774248cc5bddd94a3ed7f32680411e7ee2be64c0a2b0aed0ca2b03e2cc12 -size 9096807 diff --git a/src/static/music/allanger-Not_Alone.png b/src/static/music/allanger-Not_Alone.png deleted file mode 100644 index 3c8c207..0000000 --- a/src/static/music/allanger-Not_Alone.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eb4daf5db317c1729021449f763feebd1928eb980e523700732232234546e502 -size 9276169 diff --git a/src/static/music/allanger-Out_of_Law.png b/src/static/music/allanger-Out_of_Law.png deleted file mode 100644 index a212a6d..0000000 --- a/src/static/music/allanger-Out_of_Law.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ac867a2e557c98b6fee62d405a55718a0b40401547d9a52a0c582de94ae5a0e -size 14588816 diff --git a/src/static/music/allanger-Trace.png b/src/static/music/allanger-Trace.png deleted file mode 100644 index 1f227c5..0000000 --- a/src/static/music/allanger-Trace.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e946e1c9f687afc3cbfd19fded47316ad97ce7a00a2c23b8c533fe6cf5d33553 -size 13036141 diff --git a/src/static/music/allanger-Under_My_Pillow.png b/src/static/music/allanger-Under_My_Pillow.png deleted file mode 100644 index 7e1acfc..0000000 --- a/src/static/music/allanger-Under_My_Pillow.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c794c1a5e3e2072505e452fe51a53b0a001c6cc4e2d7b241b592fd89c939d027 -size 11667637 diff --git a/src/static/music/allanger-Waster_Time.png b/src/static/music/allanger-Waster_Time.png deleted file mode 100644 index 1e4f75e..0000000 --- a/src/static/music/allanger-Waster_Time.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b5e42ea91f87e4162b5031edc9b99f3cc0e41077c924a2c85a245cb2c81e2fb6 -size 6004369 diff --git a/src/static/music/allanger.png b/src/static/music/allanger.png deleted file mode 100644 index 58857e9..0000000 --- a/src/static/music/allanger.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:50db4edd406a153c57ed389e39b6d557af10752ffbdb8d0e07f847da268a0a79 -size 819858 diff --git a/src/static/posts/kid-robotik-im-so-sorry/cover.jpg b/src/static/posts/kid-robotik-im-so-sorry/cover.jpg deleted file mode 100644 index 3daa0d3..0000000 --- a/src/static/posts/kid-robotik-im-so-sorry/cover.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:350ddc2e0f355d62ce7304ddbfc7002ce0ee42097b9277f3a2ca758a609b2a70 -size 102988 diff --git a/src/static/posts/some-old-beats-are-out/Cover.png b/src/static/posts/some-old-beats-are-out/Cover.png deleted file mode 100644 index 07293c6..0000000 --- a/src/static/posts/some-old-beats-are-out/Cover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:716c31ed52cda78bf3b355f4ce262d0efb8e1170e00343ed6bdb405b001d4bd7 -size 2721809 diff --git a/src/static/posts/vst-on-linux-1/camel-crush.png b/src/static/posts/vst-on-linux-1/camel-crush.png deleted file mode 100644 index a28a527..0000000 --- a/src/static/posts/vst-on-linux-1/camel-crush.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:57c298cbc2c38423baadaeab60b48064ecc04a96486765c41e90c9d8dd937816 -size 842713 diff --git a/src/static/posts/vst-on-linux-1/cover.png b/src/static/posts/vst-on-linux-1/cover.png deleted file mode 100644 index 72fea0f..0000000 --- a/src/static/posts/vst-on-linux-1/cover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0032e505955f87a9285bce7f9df0d02a9508a79bcda45206512168150a3d8df4 -size 702566 diff --git a/src/static/posts/vst-on-linux-1/glitchmachines.png b/src/static/posts/vst-on-linux-1/glitchmachines.png deleted file mode 100644 index ecf53bb..0000000 --- a/src/static/posts/vst-on-linux-1/glitchmachines.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d23698e02dd5412beeba2edbae158464cf723a65f82849b5ba5e79b034197f40 -size 263703 diff --git a/src/static/posts/vst-on-linux-1/glitchmaker-carla.gif b/src/static/posts/vst-on-linux-1/glitchmaker-carla.gif deleted file mode 100644 index ab1fa0f..0000000 --- a/src/static/posts/vst-on-linux-1/glitchmaker-carla.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2d980570ae12bfb7564b87efbf1efad9040d1659325c888372bce32de3ebc91d -size 26935564 diff --git a/src/static/posts/vst-on-linux-1/glitchmakesrs-glitch.gif b/src/static/posts/vst-on-linux-1/glitchmakesrs-glitch.gif deleted file mode 100644 index 98e3395..0000000 --- a/src/static/posts/vst-on-linux-1/glitchmakesrs-glitch.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f47cf8172c4ed6f91f53dd6dd6c3c46be7f8153e2a3d5de25c5d455dec14fb46 -size 17660362 diff --git a/src/static/posts/vst-on-linux-1/ott-xfer.png b/src/static/posts/vst-on-linux-1/ott-xfer.png deleted file mode 100644 index 0cea332..0000000 --- a/src/static/posts/vst-on-linux-1/ott-xfer.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1f9725d7977d3c36f1655ddfbaf6e57e53854e41d44ed67da36ae021eb18371f -size 279992 diff --git a/src/static/posts/vst-on-linux-1/snap-heap.png b/src/static/posts/vst-on-linux-1/snap-heap.png deleted file mode 100644 index e094d5d..0000000 --- a/src/static/posts/vst-on-linux-1/snap-heap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:44e7397856bceac94354abcf0e9df23c820f9bc743da800b6e020a2a9c78c082 -size 601331 diff --git a/src/static/posts/vst-on-linux-1/tal-chorus.png b/src/static/posts/vst-on-linux-1/tal-chorus.png deleted file mode 100644 index 752d3e2..0000000 --- a/src/static/posts/vst-on-linux-1/tal-chorus.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d15294da4f84b2f11627ee69be01cdaf3298e18e62e142d4e668e50cc4aee050 -size 214950 diff --git a/src/static/posts/vst-on-linux-1/valhalla.png b/src/static/posts/vst-on-linux-1/valhalla.png deleted file mode 100644 index 69286ed..0000000 --- a/src/static/posts/vst-on-linux-1/valhalla.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:69e748529ae61f471a5b88858b2f2edfed84f79db03f2ddfc32ed0071496b3a6 -size 326068 diff --git a/src/static/posts/vst-on-linux-1/wider.png b/src/static/posts/vst-on-linux-1/wider.png deleted file mode 100644 index 735e803..0000000 --- a/src/static/posts/vst-on-linux-1/wider.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c8bbcad8a7c2e1a5d1c49022c4b7d30eb515b85cb9f37bbc0092204f64bbb898 -size 518231 diff --git a/src/static/posts/vst-on-linux-2/cardinal.png b/src/static/posts/vst-on-linux-2/cardinal.png deleted file mode 100644 index d552ca8..0000000 --- a/src/static/posts/vst-on-linux-2/cardinal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d8e2bdb61aaa10a0e15a550aca00a55d2f0a197c684d1a845b1c8a6c874ffb99 -size 424994 diff --git a/src/static/posts/vst-on-linux-2/cover.png b/src/static/posts/vst-on-linux-2/cover.png deleted file mode 100644 index 8860f70..0000000 --- a/src/static/posts/vst-on-linux-2/cover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1fd944493b86816af42b4ac495f138f60a6a4cbf20790073e8df19f21e8113c5 -size 518356 diff --git a/src/static/posts/vst-on-linux-2/deelay-glitch.gif b/src/static/posts/vst-on-linux-2/deelay-glitch.gif deleted file mode 100644 index 79b0fd4..0000000 --- a/src/static/posts/vst-on-linux-2/deelay-glitch.gif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ab3679098e5c7c19b6cabcd9b274a4ff5be9bd3880bfea24dc69c14a28291d4 -size 166217444 diff --git a/src/static/posts/vst-on-linux-2/deelay.png b/src/static/posts/vst-on-linux-2/deelay.png deleted file mode 100644 index c582999..0000000 --- a/src/static/posts/vst-on-linux-2/deelay.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d84b4accbdb7be7156730e024367cc57ee3c7b3c55b628ebe8b866baf9b0cf6d -size 437298 diff --git a/src/static/posts/vst-on-linux-2/fire.png b/src/static/posts/vst-on-linux-2/fire.png deleted file mode 100644 index feccbfa..0000000 --- a/src/static/posts/vst-on-linux-2/fire.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2d7cc2ea5c4515e101f09ee82b3294af580b95ac6d7a30c4f80ed7746c897179 -size 382513 diff --git a/src/static/posts/vst-on-linux-2/gatelab.png b/src/static/posts/vst-on-linux-2/gatelab.png deleted file mode 100644 index 711a6f6..0000000 --- a/src/static/posts/vst-on-linux-2/gatelab.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:162138d7c368b852bece411dd039482a15c596a2c33bfcf056afd7fdd847ffcf -size 320536 diff --git a/src/static/posts/vst-on-linux-2/noise-engineering.png b/src/static/posts/vst-on-linux-2/noise-engineering.png deleted file mode 100644 index 60cafae..0000000 --- a/src/static/posts/vst-on-linux-2/noise-engineering.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c9a3b2ea6b4396a918f6e1c25b51ed28b33093ac3c00d430cecf778551332631 -size 440546 diff --git a/src/static/posts/vst-on-linux-2/panflow.png b/src/static/posts/vst-on-linux-2/panflow.png deleted file mode 100644 index d95efd3..0000000 --- a/src/static/posts/vst-on-linux-2/panflow.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5bec35f61c11bfe87de3107baeb56e7a31a49328d397cbc00a1ec2b50ab9f6c4 -size 270835 diff --git a/src/static/posts/vst-on-linux-2/paulxstretch.png b/src/static/posts/vst-on-linux-2/paulxstretch.png deleted file mode 100644 index e053415..0000000 --- a/src/static/posts/vst-on-linux-2/paulxstretch.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b1818e1a95a280f004c7311a18812edab1e9436847e06ef5dd8402e5f09c645c -size 185558 diff --git a/src/static/posts/vst-on-linux-2/runia-plugin.png b/src/static/posts/vst-on-linux-2/runia-plugin.png deleted file mode 100644 index 51c9f99..0000000 --- a/src/static/posts/vst-on-linux-2/runia-plugin.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4fd23c468cade663d64694633d8486c49a590bc92b89169e4524bdcf0b9315ff -size 320187 diff --git a/src/static/posts/vst-on-linux-2/sirt-plugin.png b/src/static/posts/vst-on-linux-2/sirt-plugin.png deleted file mode 100644 index b704162..0000000 --- a/src/static/posts/vst-on-linux-2/sirt-plugin.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:162a4c1349fc74fd607932a2d084c6d1ae7702ad2d101d7eb52c9765d010a41b -size 396243 diff --git a/src/static/posts/vst-on-linux-2/surge.png b/src/static/posts/vst-on-linux-2/surge.png deleted file mode 100644 index 7bb4a75..0000000 --- a/src/static/posts/vst-on-linux-2/surge.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a18fbe266596c92803737fbf96d1aaeb6a5aff6cc30052ddedfdd988bfd4f2dd -size 532448 diff --git a/src/static/posts/vst-on-linux-2/virt-vereor.png b/src/static/posts/vst-on-linux-2/virt-vereor.png deleted file mode 100644 index b7c8e23..0000000 --- a/src/static/posts/vst-on-linux-2/virt-vereor.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dce9d0528a0807b19e6a65e198f2efabb1433e6d462f600419e08ef79011bd56 -size 424311 diff --git a/src/static/posts/vst-on-linux-3/cover.png b/src/static/posts/vst-on-linux-3/cover.png deleted file mode 100644 index d9c9685..0000000 --- a/src/static/posts/vst-on-linux-3/cover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:72dd103d0002b201fc869b7f029d996093c1192d051bdd10475b7abda5e4994d -size 1106123 diff --git a/src/static/posts/vst-on-linux-3/eventide-pendulate.mp4 b/src/static/posts/vst-on-linux-3/eventide-pendulate.mp4 deleted file mode 100644 index ed3234a..0000000 --- a/src/static/posts/vst-on-linux-3/eventide-pendulate.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aef76ca940fb050a6d26e75f27b9ec5effb87af8c10b5d8ba30152f1f42151a2 -size 6126500 diff --git a/src/static/posts/vst-on-linux-3/labs-example.mp4 b/src/static/posts/vst-on-linux-3/labs-example.mp4 deleted file mode 100644 index f732108..0000000 --- a/src/static/posts/vst-on-linux-3/labs-example.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:566decff07913546a463f35bb9c0e47945b0366c9294b1afbc4bf89c04bd5eea -size 6973433 diff --git a/src/static/posts/vst-on-linux-3/mdrummer-example-lfo.mp4 b/src/static/posts/vst-on-linux-3/mdrummer-example-lfo.mp4 deleted file mode 100644 index c0e74d2..0000000 --- a/src/static/posts/vst-on-linux-3/mdrummer-example-lfo.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0313445baf62290fa6a8fa55b9d36554e3de7195ae3b898612bae23c1df557a5 -size 7651823 diff --git a/src/static/posts/vst-on-linux-3/mdrummer-example.mp4 b/src/static/posts/vst-on-linux-3/mdrummer-example.mp4 deleted file mode 100644 index f297abe..0000000 --- a/src/static/posts/vst-on-linux-3/mdrummer-example.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73b29483feaf48cb9baf01946f9da926ac25d8367110958de00a5a8fce1bc996 -size 7935948 diff --git a/src/static/posts/vst-on-linux-3/mdrummer-lfo-carla.png b/src/static/posts/vst-on-linux-3/mdrummer-lfo-carla.png deleted file mode 100644 index ee89edd..0000000 --- a/src/static/posts/vst-on-linux-3/mdrummer-lfo-carla.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:af8e673858ef7bb279a89cf574ef29d56484f4258891e10716078072d001485b -size 321828 diff --git a/src/static/posts/vst-on-linux-3/mdrummer.png b/src/static/posts/vst-on-linux-3/mdrummer.png deleted file mode 100644 index 2c7e53d..0000000 --- a/src/static/posts/vst-on-linux-3/mdrummer.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e0874adf6e5bc5d15c5601f8a5dbdd710fd4e82d30e6e8e998cc5a7b3b989dcf -size 330065 diff --git a/src/static/posts/vst-on-linux-3/mguitar-architect.mp4 b/src/static/posts/vst-on-linux-3/mguitar-architect.mp4 deleted file mode 100644 index 56e7df6..0000000 --- a/src/static/posts/vst-on-linux-3/mguitar-architect.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bcaa8b6a4e3e5b7f97d870dcba891eb486e89f8c13c879332bf3cb0d9734419e -size 5060479 diff --git a/src/static/posts/vst-on-linux-3/mpower-synth.mp4 b/src/static/posts/vst-on-linux-3/mpower-synth.mp4 deleted file mode 100644 index e33bbdf..0000000 --- a/src/static/posts/vst-on-linux-3/mpower-synth.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7b8701ec9c674680f6ac84bd857aba76d11b22df6621cd1189efb28c326970e7 -size 3493304 diff --git a/src/static/posts/vst-on-linux-3/native-access.png b/src/static/posts/vst-on-linux-3/native-access.png deleted file mode 100644 index f202ba5..0000000 --- a/src/static/posts/vst-on-linux-3/native-access.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9247d5488be4c562b51b51db9eceb26afbfefd0c79d6802eaeeb39f5885bd4a7 -size 49413 diff --git a/src/static/posts/vst-on-linux-3/protoverb.mp4 b/src/static/posts/vst-on-linux-3/protoverb.mp4 deleted file mode 100644 index 45b0e55..0000000 --- a/src/static/posts/vst-on-linux-3/protoverb.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a63d449ec1896ee8856326c8b5c82372fd6e90e534320f1e1d00a97aa4033381 -size 7597907 diff --git a/src/static/posts/vst-on-linux-3/space-piano.mp4 b/src/static/posts/vst-on-linux-3/space-piano.mp4 deleted file mode 100644 index 52296f3..0000000 --- a/src/static/posts/vst-on-linux-3/space-piano.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce96dcd3663dea25dafe601e006fdd6484ea1fd0fd575f0c705a8f67618b1d54 -size 11211344 diff --git a/src/static/posts/vst-on-linux-3/spitfire-labs-app.png b/src/static/posts/vst-on-linux-3/spitfire-labs-app.png deleted file mode 100644 index 8c20b06..0000000 --- a/src/static/posts/vst-on-linux-3/spitfire-labs-app.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b180ddc8e021a57e3a5e9b5f8d6edbf951e34cfa73ca4d758262e8d9bbee36c4 -size 1309436 diff --git a/src/static/posts/vst-on-linux-3/tyrell.mp4 b/src/static/posts/vst-on-linux-3/tyrell.mp4 deleted file mode 100644 index ada8551..0000000 --- a/src/static/posts/vst-on-linux-3/tyrell.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4c36ee6105ac53f6f08dbff13fe4fe66258ac9d0dc2522c155be9793e5288155 -size 4176960 diff --git a/src/static/posts/vst-on-linux-3/vallhalla.mp4 b/src/static/posts/vst-on-linux-3/vallhalla.mp4 deleted file mode 100644 index 0988550..0000000 --- a/src/static/posts/vst-on-linux-3/vallhalla.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:140102721033c63e0bbe47526e371fbefd7c3b204aa0c525a03574bac7ccc3bd -size 15858934 diff --git a/src/static/posts/vst-on-linux-3/vcv-rack.mp4 b/src/static/posts/vst-on-linux-3/vcv-rack.mp4 deleted file mode 100644 index 77e3667..0000000 --- a/src/static/posts/vst-on-linux-3/vcv-rack.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:44da75a3ba194cc1f4dc808e047acc20abfc4103c61e6199bcf093891ff453de -size 6165846 diff --git a/src/static/posts/vst-on-linux-3/vital.mp4 b/src/static/posts/vst-on-linux-3/vital.mp4 deleted file mode 100644 index 5ff3a94..0000000 --- a/src/static/posts/vst-on-linux-3/vital.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:06d8edc10a5a0fd93b4eebd467bd5be640e8ffbf87bc8e9b3f8528e762812beb -size 6298246 diff --git a/src/static/posts/vst-on-linux-3/vst-on-linix-3-cover.png b/src/static/posts/vst-on-linux-3/vst-on-linix-3-cover.png deleted file mode 100644 index d9c9685..0000000 --- a/src/static/posts/vst-on-linux-3/vst-on-linix-3-cover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:72dd103d0002b201fc869b7f029d996093c1192d051bdd10475b7abda5e4994d -size 1106123 diff --git a/src/themes/papermod b/src/themes/papermod deleted file mode 160000 index aa7905e..0000000 --- a/src/themes/papermod +++ /dev/null @@ -1 +0,0 @@ -Subproject commit aa7905eaca435f15aa9cb0efc4b15459049f58c5 diff --git a/src/themes/stack b/src/themes/stack new file mode 160000 index 0000000..fddab05 --- /dev/null +++ b/src/themes/stack @@ -0,0 +1 @@ +Subproject commit fddab053628070668cd9c9eb0b96d9a6246fcc71 -- 2.45.2 From 8150937bea2ff9e45d7269ee8fb8759049f31ecb Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 14 May 2024 12:48:21 +0200 Subject: [PATCH 101/111] Fix images on the website --- .gitattributes | 4 ---- chart/Chart.yaml | 2 +- chart/templates/deployment.yaml | 4 ++-- chart/values.yaml | 2 +- kube/values-preview.yaml | 2 +- scripts/upload-media.pl | 2 +- src/assets/avatar.png | 3 --- src/assets/jsconfig.json | 3 --- src/hugo.yaml | 2 +- src/{assets => static}/icons/beats.svg | 0 .../argocd-dynamic-environment-per-branch-part-1/cover.png | 0 .../drone-pipeline.png | 0 .../posts/argocd-vs-helmfile/app-of-apps-main.png | 0 .../posts/argocd-vs-helmfile/applicationset-test.png | 0 .../posts/argocd-vs-helmfile/cover-applications.png | 0 .../posts/argocd-vs-helmfile/cover-applicationset.png | 0 .../posts/argocd-vs-helmfile/diff-in-ui.png | 0 .../posts/argocd-vs-helmfile/goldilocks-ui.png | 0 .../posts/argocd-vs-helmfile/update-in-ui.png | 0 .../posts/creating-a-sample-pack-kick/Kick_final_result.mp3 | 0 .../posts/creating-a-sample-pack-kick/Kick_v1.mp3 | 0 .../posts/creating-a-sample-pack-kick/Kick_v2.mkv | 0 .../posts/creating-a-sample-pack-kick/Kick_v2.mp4 | 0 .../posts/creating-a-sample-pack-kick/Kick_v3.mkv | 0 .../posts/creating-a-sample-pack-kick/Kick_v3.mp4 | 0 .../posts/creating-a-sample-pack-kick/Kick_v4.mkv | 0 .../posts/creating-a-sample-pack-kick/Kick_v4.mp4 | 0 .../posts/creating-a-sample-pack-kick/cover.png | 0 .../posts/creating-a-sample-pack-kick/disable_note_track.png | 0 .../posts/creating-a-sample-pack-kick/init_vital.png | 0 .../posts/creating-a-sample-pack-kick/kick_basic_shape.png | 0 .../posts/creating-a-sample-pack-kick/kick_lfo_1.png | 0 .../posts/creating-a-sample-pack-kick/kick_lfo_2.png | 0 .../posts/creating-a-sample-pack-kick/unison_phase.png | 0 .../3-clusters-and-gitea.png | 0 .../posts/dont-use-argocd-for-infrastructure/3-clusters.png | 0 .../posts/dont-use-argocd-for-infrastructure/cover.png | 0 37 files changed, 7 insertions(+), 17 deletions(-) delete mode 100644 src/assets/avatar.png delete mode 100644 src/assets/jsconfig.json rename src/{assets => static}/icons/beats.svg (100%) rename src/{assets => static}/posts/argocd-dynamic-environment-per-branch-part-1/cover.png (100%) rename src/{assets => static}/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png (100%) rename src/{assets => static}/posts/argocd-vs-helmfile/app-of-apps-main.png (100%) rename src/{assets => static}/posts/argocd-vs-helmfile/applicationset-test.png (100%) rename src/{assets => static}/posts/argocd-vs-helmfile/cover-applications.png (100%) rename src/{assets => static}/posts/argocd-vs-helmfile/cover-applicationset.png (100%) rename src/{assets => static}/posts/argocd-vs-helmfile/diff-in-ui.png (100%) rename src/{assets => static}/posts/argocd-vs-helmfile/goldilocks-ui.png (100%) rename src/{assets => static}/posts/argocd-vs-helmfile/update-in-ui.png (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/Kick_v1.mp3 (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/Kick_v2.mkv (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/Kick_v2.mp4 (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/Kick_v3.mkv (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/Kick_v3.mp4 (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/Kick_v4.mkv (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/Kick_v4.mp4 (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/cover.png (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/disable_note_track.png (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/init_vital.png (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/kick_basic_shape.png (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/kick_lfo_1.png (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/kick_lfo_2.png (100%) rename src/{assets => static}/posts/creating-a-sample-pack-kick/unison_phase.png (100%) rename src/{assets => static}/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png (100%) rename src/{assets => static}/posts/dont-use-argocd-for-infrastructure/3-clusters.png (100%) rename src/{assets => static}/posts/dont-use-argocd-for-infrastructure/cover.png (100%) diff --git a/.gitattributes b/.gitattributes index 41cb5bc..c2b8e77 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +1,2 @@ src/static/** filter=lfs diff=lfs merge=lfs -text src/static/**/* filter=lfs diff=lfs merge=lfs -text -src/assets/**/* filter=lfs diff=lfs merge=lfs -text -src/assets/** filter=lfs diff=lfs merge=lfs -text -src-bak/static/** filter=lfs diff=lfs merge=lfs -text -src-bak/static/**/* filter=lfs diff=lfs merge=lfs -text diff --git a/chart/Chart.yaml b/chart/Chart.yaml index 7ee79a2..b249eeb 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: badhouseplants-net description: A Helm chart for Kubernetes type: application -version: 0.8.5 +version: 0.8.6 appVersion: "4.20.0" dependencies: - name: remark42 diff --git a/chart/templates/deployment.yaml b/chart/templates/deployment.yaml index 1a0aacc..7b0ee77 100644 --- a/chart/templates/deployment.yaml +++ b/chart/templates/deployment.yaml @@ -41,7 +41,7 @@ spec: mountPath: "/tmp" readOnly: true - name: {{ .Values.volumes.rclone.name }} - mountPath: /assets + mountPath: /static readOnly: false resources: {{- toYaml .Values.rclone.container.resources | nindent 12 }} @@ -59,7 +59,7 @@ spec: {{- end }} volumeMounts: - name: {{ .Values.volumes.rclone.name }} - mountPath: /src/assets + mountPath: /src/static readOnly: false - name: {{ .Values.volumes.public.name }} mountPath: /src/public diff --git a/chart/values.yaml b/chart/values.yaml index 3671d73..ed5d115 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -10,7 +10,7 @@ nginx: tag: latest rclone: - command: "rclone copy -P badhouseplants-public:/badhouseplants-net-main /assets" + command: "rclone copy -P badhouseplants-public:/badhouseplants-net-main /static" container: name: rclone resources: {} diff --git a/kube/values-preview.yaml b/kube/values-preview.yaml index c4a721d..5789c75 100644 --- a/kube/values-preview.yaml +++ b/kube/values-preview.yaml @@ -26,4 +26,4 @@ values: | anonymous: true secretKey: $ARGO_REMARK_SECRET rclone: - command: 'rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /assets' + command: 'rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static' diff --git a/scripts/upload-media.pl b/scripts/upload-media.pl index 71ae760..13eb20d 100755 --- a/scripts/upload-media.pl +++ b/scripts/upload-media.pl @@ -19,7 +19,7 @@ print `git -C /tmp/$git_commit_sha lfs pull` or die; print "Creating a new hashed dir in the common bucket\n"; -print `rclone copy /tmp/$git_commit_sha/src/assets "$common_bucket/$git_commit_sha"` or die; +print `rclone copy /tmp/$git_commit_sha/src/static "$common_bucket/$git_commit_sha"` or die; if ($git_branch eq $main_branch) { print "Syncing to the production bucket\n"; diff --git a/src/assets/avatar.png b/src/assets/avatar.png deleted file mode 100644 index 54ec2f3..0000000 --- a/src/assets/avatar.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:475223457ecd56a9b4450e39a1273727f98c4b0c78c6427992f4f77f6b90b957 -size 686006 diff --git a/src/assets/jsconfig.json b/src/assets/jsconfig.json deleted file mode 100644 index fc0f90a..0000000 --- a/src/assets/jsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e16de0174ab4983fd8a83f2174362003b1f65973247eea4ff4d67143b8d8639c -size 109 diff --git a/src/hugo.yaml b/src/hugo.yaml index 74a3a83..a049ac5 100644 --- a/src/hugo.yaml +++ b/src/hugo.yaml @@ -10,7 +10,7 @@ Params: sidebar: avatar: enable: true - local: true + local: false src: avatar.png subtitle: PunkOps by allanger comments: diff --git a/src/assets/icons/beats.svg b/src/static/icons/beats.svg similarity index 100% rename from src/assets/icons/beats.svg rename to src/static/icons/beats.svg diff --git a/src/assets/posts/argocd-dynamic-environment-per-branch-part-1/cover.png b/src/static/posts/argocd-dynamic-environment-per-branch-part-1/cover.png similarity index 100% rename from src/assets/posts/argocd-dynamic-environment-per-branch-part-1/cover.png rename to src/static/posts/argocd-dynamic-environment-per-branch-part-1/cover.png diff --git a/src/assets/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png b/src/static/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png similarity index 100% rename from src/assets/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png rename to src/static/posts/argocd-dynamic-environment-per-branch-part-1/drone-pipeline.png diff --git a/src/assets/posts/argocd-vs-helmfile/app-of-apps-main.png b/src/static/posts/argocd-vs-helmfile/app-of-apps-main.png similarity index 100% rename from src/assets/posts/argocd-vs-helmfile/app-of-apps-main.png rename to src/static/posts/argocd-vs-helmfile/app-of-apps-main.png diff --git a/src/assets/posts/argocd-vs-helmfile/applicationset-test.png b/src/static/posts/argocd-vs-helmfile/applicationset-test.png similarity index 100% rename from src/assets/posts/argocd-vs-helmfile/applicationset-test.png rename to src/static/posts/argocd-vs-helmfile/applicationset-test.png diff --git a/src/assets/posts/argocd-vs-helmfile/cover-applications.png b/src/static/posts/argocd-vs-helmfile/cover-applications.png similarity index 100% rename from src/assets/posts/argocd-vs-helmfile/cover-applications.png rename to src/static/posts/argocd-vs-helmfile/cover-applications.png diff --git a/src/assets/posts/argocd-vs-helmfile/cover-applicationset.png b/src/static/posts/argocd-vs-helmfile/cover-applicationset.png similarity index 100% rename from src/assets/posts/argocd-vs-helmfile/cover-applicationset.png rename to src/static/posts/argocd-vs-helmfile/cover-applicationset.png diff --git a/src/assets/posts/argocd-vs-helmfile/diff-in-ui.png b/src/static/posts/argocd-vs-helmfile/diff-in-ui.png similarity index 100% rename from src/assets/posts/argocd-vs-helmfile/diff-in-ui.png rename to src/static/posts/argocd-vs-helmfile/diff-in-ui.png diff --git a/src/assets/posts/argocd-vs-helmfile/goldilocks-ui.png b/src/static/posts/argocd-vs-helmfile/goldilocks-ui.png similarity index 100% rename from src/assets/posts/argocd-vs-helmfile/goldilocks-ui.png rename to src/static/posts/argocd-vs-helmfile/goldilocks-ui.png diff --git a/src/assets/posts/argocd-vs-helmfile/update-in-ui.png b/src/static/posts/argocd-vs-helmfile/update-in-ui.png similarity index 100% rename from src/assets/posts/argocd-vs-helmfile/update-in-ui.png rename to src/static/posts/argocd-vs-helmfile/update-in-ui.png diff --git a/src/assets/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 b/src/static/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 rename to src/static/posts/creating-a-sample-pack-kick/Kick_final_result.mp3 diff --git a/src/assets/posts/creating-a-sample-pack-kick/Kick_v1.mp3 b/src/static/posts/creating-a-sample-pack-kick/Kick_v1.mp3 similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/Kick_v1.mp3 rename to src/static/posts/creating-a-sample-pack-kick/Kick_v1.mp3 diff --git a/src/assets/posts/creating-a-sample-pack-kick/Kick_v2.mkv b/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mkv similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/Kick_v2.mkv rename to src/static/posts/creating-a-sample-pack-kick/Kick_v2.mkv diff --git a/src/assets/posts/creating-a-sample-pack-kick/Kick_v2.mp4 b/src/static/posts/creating-a-sample-pack-kick/Kick_v2.mp4 similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/Kick_v2.mp4 rename to src/static/posts/creating-a-sample-pack-kick/Kick_v2.mp4 diff --git a/src/assets/posts/creating-a-sample-pack-kick/Kick_v3.mkv b/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mkv similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/Kick_v3.mkv rename to src/static/posts/creating-a-sample-pack-kick/Kick_v3.mkv diff --git a/src/assets/posts/creating-a-sample-pack-kick/Kick_v3.mp4 b/src/static/posts/creating-a-sample-pack-kick/Kick_v3.mp4 similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/Kick_v3.mp4 rename to src/static/posts/creating-a-sample-pack-kick/Kick_v3.mp4 diff --git a/src/assets/posts/creating-a-sample-pack-kick/Kick_v4.mkv b/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mkv similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/Kick_v4.mkv rename to src/static/posts/creating-a-sample-pack-kick/Kick_v4.mkv diff --git a/src/assets/posts/creating-a-sample-pack-kick/Kick_v4.mp4 b/src/static/posts/creating-a-sample-pack-kick/Kick_v4.mp4 similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/Kick_v4.mp4 rename to src/static/posts/creating-a-sample-pack-kick/Kick_v4.mp4 diff --git a/src/assets/posts/creating-a-sample-pack-kick/cover.png b/src/static/posts/creating-a-sample-pack-kick/cover.png similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/cover.png rename to src/static/posts/creating-a-sample-pack-kick/cover.png diff --git a/src/assets/posts/creating-a-sample-pack-kick/disable_note_track.png b/src/static/posts/creating-a-sample-pack-kick/disable_note_track.png similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/disable_note_track.png rename to src/static/posts/creating-a-sample-pack-kick/disable_note_track.png diff --git a/src/assets/posts/creating-a-sample-pack-kick/init_vital.png b/src/static/posts/creating-a-sample-pack-kick/init_vital.png similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/init_vital.png rename to src/static/posts/creating-a-sample-pack-kick/init_vital.png diff --git a/src/assets/posts/creating-a-sample-pack-kick/kick_basic_shape.png b/src/static/posts/creating-a-sample-pack-kick/kick_basic_shape.png similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/kick_basic_shape.png rename to src/static/posts/creating-a-sample-pack-kick/kick_basic_shape.png diff --git a/src/assets/posts/creating-a-sample-pack-kick/kick_lfo_1.png b/src/static/posts/creating-a-sample-pack-kick/kick_lfo_1.png similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/kick_lfo_1.png rename to src/static/posts/creating-a-sample-pack-kick/kick_lfo_1.png diff --git a/src/assets/posts/creating-a-sample-pack-kick/kick_lfo_2.png b/src/static/posts/creating-a-sample-pack-kick/kick_lfo_2.png similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/kick_lfo_2.png rename to src/static/posts/creating-a-sample-pack-kick/kick_lfo_2.png diff --git a/src/assets/posts/creating-a-sample-pack-kick/unison_phase.png b/src/static/posts/creating-a-sample-pack-kick/unison_phase.png similarity index 100% rename from src/assets/posts/creating-a-sample-pack-kick/unison_phase.png rename to src/static/posts/creating-a-sample-pack-kick/unison_phase.png diff --git a/src/assets/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png b/src/static/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png similarity index 100% rename from src/assets/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png rename to src/static/posts/dont-use-argocd-for-infrastructure/3-clusters-and-gitea.png diff --git a/src/assets/posts/dont-use-argocd-for-infrastructure/3-clusters.png b/src/static/posts/dont-use-argocd-for-infrastructure/3-clusters.png similarity index 100% rename from src/assets/posts/dont-use-argocd-for-infrastructure/3-clusters.png rename to src/static/posts/dont-use-argocd-for-infrastructure/3-clusters.png diff --git a/src/assets/posts/dont-use-argocd-for-infrastructure/cover.png b/src/static/posts/dont-use-argocd-for-infrastructure/cover.png similarity index 100% rename from src/assets/posts/dont-use-argocd-for-infrastructure/cover.png rename to src/static/posts/dont-use-argocd-for-infrastructure/cover.png -- 2.45.2 From f66fa876c539733af411f20774effaa265ae2d01 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 14 May 2024 12:59:55 +0200 Subject: [PATCH 102/111] Add avatar and favicon --- src/static/avatar.png | 3 +++ src/static/favicon.ico | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 src/static/avatar.png create mode 100644 src/static/favicon.ico diff --git a/src/static/avatar.png b/src/static/avatar.png new file mode 100644 index 0000000..54ec2f3 --- /dev/null +++ b/src/static/avatar.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:475223457ecd56a9b4450e39a1273727f98c4b0c78c6427992f4f77f6b90b957 +size 686006 diff --git a/src/static/favicon.ico b/src/static/favicon.ico new file mode 100644 index 0000000..c5d3be1 --- /dev/null +++ b/src/static/favicon.ico @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d872fe94954e47d14563d77ddba54f15aa62f5df0a76f3ead45764847e554154 +size 15406 -- 2.45.2 From 76c4f578452ab9ef50974999580f91dc3a04f9f7 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Tue, 14 May 2024 15:29:49 +0200 Subject: [PATCH 103/111] Fix the avatar that is not displayed on all pages --- src/hugo.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hugo.yaml b/src/hugo.yaml index a049ac5..1c17075 100644 --- a/src/hugo.yaml +++ b/src/hugo.yaml @@ -11,7 +11,7 @@ Params: avatar: enable: true local: false - src: avatar.png + src: /avatar.png subtitle: PunkOps by allanger comments: enabled: true -- 2.45.2 From 5414085273475be88e43c703c34b19ad59aee2eb Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Mon, 27 May 2024 09:34:42 +0200 Subject: [PATCH 104/111] Start using ingress instead of virtual service --- .woodpecker.yml | 93 ++++++++++++++++++++++++++++ chart/Chart.yaml | 4 +- chart/templates/virtual-service.yaml | 57 ----------------- chart/values.yaml | 8 --- kube/values-main.yaml | 50 ++++++++++++++- kube/values-preview.yaml | 49 ++++++++++++--- 6 files changed, 183 insertions(+), 78 deletions(-) create mode 100644 .woodpecker.yml delete mode 100644 chart/templates/virtual-service.yaml diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 0000000..fb34ac6 --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,93 @@ +--- +when: + event: + - push + +steps: + - image: alpine/helm + name: Publish the Helm chart + commands: + - helm plugin install https://github.com/chartmuseum/helm-push + - helm package chart -d chart-package + - helm repo add --username allanger --password $GITEA_TOKEN badhouseplants-net https://git.badhouseplants.net/api/packages/badhouseplants/helm + - helm cm-push "./chart-package/$(ls chart-package)" badhouseplants-net + secrets: + - gitea_token + + - name: Test a build + image: git.badhouseplants.net/badhouseplants/hugo-container + commands: + - hugo -s ./src + + - name: Build and push the docker image + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 + privileged: true + depends_on: + - Test a build + secrets: + - gitea_token + environment: + BUILDER_COMMIT: 2449b73b13a62ae916c6703778d096e5290157b3 + commands: + - rm -rf $DRONE_WORKSPACE/src/assets/ + - ./scripts/build-container.pl + backend_options: + kubernetes: + resources: + requests: + memory: 500Mi + cpu: 200m + limits: + memory: 1000Mi + cpu: 1000m + securityContext: + privileged: true + + - name: Sync pictures from lfs to Minio + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 + depends_on: + - Test a build + secrets: + - rclone_config_content + environment: + RCLONE_CONFIG: /tmp/rclone.conf + commands: + - echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG + - ./scripts/upload-media.pl + + - name: Deploy the application + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 + depends_on: + - Build and push the docker image + - Sync pictures from lfs to Minio + secrets: + - gitea_token + - argocd_auth_token + - argo_github_oauth_key + - argo_google_oauth_key + environment: + ARGOCD_SERVER: argo.badhouseplants.net:443 + commands: + - ./scripts/deploy-app.pl + + - name: Cleanup everything + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 + depends_on: + - Deploy the application + secrets: + - gitea_token + - argocd_auth_token + - rclone_config_content + environment: + ARGOCD_SERVER: argo.badhouseplants.net:443 + RCLONE_CONFIG: /tmp/rclone.conf + commands: + - echo "$RCLONE_CONFIG_CONTENT" > $RCLONE_CONFIG + - ./scripts/cleanup.pl + + - name: Spell-Checker + failure: ignore + image: node + commands: + - npm i markdown-spellcheck -g + - mdspell "src/content/**/*.md" -n -r diff --git a/chart/Chart.yaml b/chart/Chart.yaml index b249eeb..96d4f43 100644 --- a/chart/Chart.yaml +++ b/chart/Chart.yaml @@ -2,10 +2,10 @@ apiVersion: v2 name: badhouseplants-net description: A Helm chart for Kubernetes type: application -version: 0.8.6 +version: 0.9.0 appVersion: "4.20.0" dependencies: - name: remark42 - version: 0.5.5 + version: 0.7.0 repository: https://groundhog2k.github.io/helm-charts/ condition: remark42.enabled diff --git a/chart/templates/virtual-service.yaml b/chart/templates/virtual-service.yaml deleted file mode 100644 index 0db7593..0000000 --- a/chart/templates/virtual-service.yaml +++ /dev/null @@ -1,57 +0,0 @@ -{{- if .Values.istio.enabled -}} -apiVersion: networking.istio.io/v1beta1 -kind: VirtualService -metadata: - name: {{ include "badhouseplants-net.fullname" . }} - labels: - {{- include "badhouseplants-net.labels" . | nindent 4 }} - {{- with .Values.istio.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - gateways: - - istio-system/badhouseplants-net - hosts: - {{- range .Values.istio.hosts}} - - {{ . }} - {{- end }} - http: - - match: - - uri: - prefix: {{ .Values.istio.prefix }} - route: - - destination: - host: {{ include "badhouseplants-net.fullname" . }} - port: - number: {{ .Values.service.port }} -{{- end }} ---- -{{- if .Values.remark42.istio.enabled -}} -apiVersion: networking.istio.io/v1beta1 -kind: VirtualService -metadata: - name: {{ include "remark42.fullname" . }}-remark42 - labels: - {{- include "badhouseplants-net.labels" . | nindent 4 }} - {{- with .Values.remark42.istio.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - gateways: - - istio-system/badhouseplants-net - hosts: - {{- range .Values.remark42.istio.hosts}} - - {{ . }} - {{- end }} - http: - - match: - - uri: - prefix: {{ .Values.remark42.istio.prefix }} - route: - - destination: - host: {{ .Release.Name }}-remark42 - port: - number: {{ .Values.remark42.service.port }} -{{- end }} diff --git a/chart/values.yaml b/chart/values.yaml index ed5d115..c0463a3 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -39,14 +39,6 @@ hugo: env: HUGO_PARAMS_GITBRANCH: main -istio: - annotations: {} - enabled: true - hosts: - - badhouseplants.net - - www.badhouseplants.net - prefix: / - volumes: # ---------------------------------------------- # -- An emptydir volume where hugo should diff --git a/kube/values-main.yaml b/kube/values-main.yaml index 7555fdb..4d25e03 100644 --- a/kube/values-main.yaml +++ b/kube/values-main.yaml @@ -5,11 +5,33 @@ values: | tag: $ARGO_APP_IMAGE_TAG env: HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG - istio: - annotations: + ingress: + enabled: true + className: ~ + annotations: + kubernetes.io/ingress.class: traefik + kubernetes.io/tls-acme: "true" + kubernetes.io/ingress.allow-http: "false" + kubernetes.io/ingress.global-static-ip-name: "" + cert-manager.io/cluster-issuer: badhouseplants-issuer-http01 link.argocd.argoproj.io/env: https://badhouseplants.net/ link.argocd.argoproj.io/build: $DRONE_BUILD_LINK - link.argocd.argoproj.io/remark42: https://remark42.badhouseplants.net/web + pathtype: ImplementationSpecific + hosts: + - host: badhouseplants.net + paths: + - path: / + pathType: ImplementationSpecific + - host: www.badhouseplants.net + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: badhp-tls + hosts: + - badhouseplants.net + - www.badhouseplants.net + remark42: settings: secret: $ARGO_REMARK_SECRET @@ -26,3 +48,25 @@ values: | secret: $ARGO_GOOGLE_OAUTH_KEY storage: requestedSize: 300Mi + ingress: + enabled: true + className: ~ + annotations: + kubernetes.io/ingress.class: traefik + kubernetes.io/tls-acme: "true" + kubernetes.io/ingress.allow-http: "false" + kubernetes.io/ingress.global-static-ip-name: "" + cert-manager.io/cluster-issuer: badhouseplants-issuer-http01 + link.argocd.argoproj.io/remark42: https://remark42.badhouseplants.net/web + ## Hosts + hosts: + - host: remark42.badhouseplants.net + paths: + - path: / + pathType: ImplementationSpecific + + tls: + secretName: chart-example-tls + hosts: + - remark42.badhouseplants.net + \ No newline at end of file diff --git a/kube/values-preview.yaml b/kube/values-preview.yaml index 5789c75..c618bd8 100644 --- a/kube/values-preview.yaml +++ b/kube/values-preview.yaml @@ -1,12 +1,27 @@ --- values: | - istio: - hosts: - - $ARGO_APP_HOSTNAME - annotations: + ingress: + enabled: true + className: ~ + annotations: + kubernetes.io/ingress.class: traefik + kubernetes.io/tls-acme: "true" + kubernetes.io/ingress.allow-http: "false" + kubernetes.io/ingress.global-static-ip-name: "" + cert-manager.io/cluster-issuer: badhouseplants-issuer-http01 link.argocd.argoproj.io/env: https://$ARGO_APP_HOSTNAME/ - link.argocd.argoproj.io/remark42: https://remark42-$ARGO_APP_HOSTNAME/web link.argocd.argoproj.io/build: $DRONE_BUILD_LINK + pathtype: ImplementationSpecific + hosts: + - host: $ARGO_APP_HOSTNAME + paths: + - path: / + pathType: ImplementationSpecific + tls: + - secretName: badhp-$ARGO_APP_BRANCH-tls + hosts: + - $ARGO_APP_HOSTNAME + hugo: image: tag: $ARGO_APP_IMAGE_TAG @@ -17,13 +32,31 @@ values: | HUGO_PARAMS_COMMENTS_REMARK42_HOST: https://remark42-$ARGO_APP_HOSTNAME HUGO_PARAMS_GITCOMMIT: $ARGO_APP_IMAGE_TAG remark42: - istio: - hosts: - - remark42-$ARGO_APP_HOSTNAME settings: url: https://remark42-$ARGO_APP_HOSTNAME/ auth: anonymous: true secretKey: $ARGO_REMARK_SECRET + ingress: + enabled: true + className: ~ + annotations: + kubernetes.io/ingress.class: traefik + kubernetes.io/tls-acme: "true" + kubernetes.io/ingress.allow-http: "false" + kubernetes.io/ingress.global-static-ip-name: "" + cert-manager.io/cluster-issuer: badhouseplants-issuer-http01 + link.argocd.argoproj.io/remark42: https://remark42-$ARGO_APP_HOSTNAME/ + ## Hosts + hosts: + - host: remark42.badhouseplants.net + paths: + - path: / + pathType: ImplementationSpecific + + tls: + secretName: remark-$ARGO_APP_BRANCH-tls + hosts: + - remark42-$ARGO_APP_HOSTNAME rclone: command: 'rclone copy -P badhouseplants-public:/badhouseplants-net/$ARGO_APP_IMAGE_TAG /static' -- 2.45.2 From 33bce94b2b2f28b6a47723a2b983ec38f1850115 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Thu, 11 Jul 2024 12:32:44 +0200 Subject: [PATCH 105/111] Fix woodpecker --- .woodpecker.yml | 8 ++++---- kube/project.yaml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index fb34ac6..78c6dfb 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -20,7 +20,7 @@ steps: - hugo -s ./src - name: Build and push the docker image - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:f36cd03d00ce6624d86af735a5a293b3d694e1e7 privileged: true depends_on: - Test a build @@ -44,7 +44,7 @@ steps: privileged: true - name: Sync pictures from lfs to Minio - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:f36cd03d00ce6624d86af735a5a293b3d694e1e7 depends_on: - Test a build secrets: @@ -56,7 +56,7 @@ steps: - ./scripts/upload-media.pl - name: Deploy the application - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:f36cd03d00ce6624d86af735a5a293b3d694e1e7 depends_on: - Build and push the docker image - Sync pictures from lfs to Minio @@ -71,7 +71,7 @@ steps: - ./scripts/deploy-app.pl - name: Cleanup everything - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:9665015b44590b7ce2139f7acbad23af6628fff3 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:f36cd03d00ce6624d86af735a5a293b3d694e1e7 depends_on: - Deploy the application secrets: diff --git a/kube/project.yaml b/kube/project.yaml index fcb23c4..4b514fb 100644 --- a/kube/project.yaml +++ b/kube/project.yaml @@ -2,7 +2,7 @@ apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: badhouseplants - namespace: argo-system + namespace: platform finalizers: - resources-finalizer.argocd.argoproj.io spec: @@ -31,4 +31,4 @@ spec: # Enables namespace orphaned resource monitoring. orphanedResources: - warn: false \ No newline at end of file + warn: false -- 2.45.2 From f9457940bed71841adf61c197212ef3f27978e63 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Thu, 11 Jul 2024 12:35:12 +0200 Subject: [PATCH 106/111] Trigger build -- 2.45.2 From 59a0287b5e3fe30b0a4b2342e1a1b4e2ce763fb6 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Thu, 11 Jul 2024 13:18:21 +0200 Subject: [PATCH 107/111] Trigger build -- 2.45.2 From 79dd9a18d412f82457aedf5e089e33d32cdc56f0 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Thu, 11 Jul 2024 11:28:23 +0000 Subject: [PATCH 108/111] Update the app namespace --- kube/application.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kube/application.yaml b/kube/application.yaml index 6441ed5..e2b8240 100644 --- a/kube/application.yaml +++ b/kube/application.yaml @@ -6,7 +6,7 @@ metadata: branch: $ARGO_APP_BRANCH commit_sha: $ARGO_APP_IMAGE_TAG name: badhouseplants-$ARGO_APP_BRANCH - namespace: argo-system + namespace: platform spec: destination: namespace: badhouseplants-$ARGO_APP_NAMESPACE -- 2.45.2 From 3f5c97bf357ec902a1c5f25728ffa028bbc2034d Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 24 Jul 2024 17:58:07 +0200 Subject: [PATCH 109/111] Fix deployment --- kube/application.yaml | 2 +- kube/project.yaml | 10 ++++------ scripts/deploy-app.pl | 5 ++--- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/kube/application.yaml b/kube/application.yaml index e2b8240..cc41ea1 100644 --- a/kube/application.yaml +++ b/kube/application.yaml @@ -9,7 +9,7 @@ metadata: namespace: platform spec: destination: - namespace: badhouseplants-$ARGO_APP_NAMESPACE + namespace: $ARGO_APP_NAMESPACE server: https://kubernetes.default.svc project: badhouseplants source: diff --git a/kube/project.yaml b/kube/project.yaml index 4b514fb..f302767 100644 --- a/kube/project.yaml +++ b/kube/project.yaml @@ -11,14 +11,12 @@ spec: - '*' destinations: - - namespace: badhouseplants-* + - namespace: development + server: https://kubernetes.default.svc + name: in-cluster + - namespace: production server: https://kubernetes.default.svc name: in-cluster - - # Deny all cluster-scoped resources from being created, except for Namespace - clusterResourceWhitelist: - - group: '' - kind: Namespace # Allow all namespaced-scoped resources to be created, except for ResourceQuota, LimitRange, NetworkPolicy namespaceResourceBlacklist: diff --git a/scripts/deploy-app.pl b/scripts/deploy-app.pl index 4a6602b..7e53405 100755 --- a/scripts/deploy-app.pl +++ b/scripts/deploy-app.pl @@ -18,9 +18,9 @@ chomp($remark_secret); $ENV{'ARGO_APP_CHART_VERSION'} = $chart_version; $ENV{'ARGO_APP_BRANCH'} = $git_branch; if ($git_branch eq $main_branch) { - $ENV{'ARGO_APP_NAMESPACE'} = $git_branch; + $ENV{'ARGO_APP_NAMESPACE'} = "production"; } else { - $ENV{'ARGO_APP_NAMESPACE'} = "preview" + $ENV{'ARGO_APP_NAMESPACE'} = "development" } $ENV{'ARGO_APP_HOSTNAME'} = "$git_branch-dev.badhouseplants.net"; $ENV{'ARGO_APP_IMAGE_TAG'} = $git_commit_sha; @@ -72,4 +72,3 @@ foreach my $app (@all_applications) { } } } - -- 2.45.2 From d8faab209cd6b8555f74c279a10c850a2aafd067 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 24 Jul 2024 18:03:49 +0200 Subject: [PATCH 110/111] Use latest builder --- .woodpecker.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 78c6dfb..859f399 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -20,7 +20,7 @@ steps: - hugo -s ./src - name: Build and push the docker image - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:f36cd03d00ce6624d86af735a5a293b3d694e1e7 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:latest privileged: true depends_on: - Test a build @@ -44,7 +44,7 @@ steps: privileged: true - name: Sync pictures from lfs to Minio - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:f36cd03d00ce6624d86af735a5a293b3d694e1e7 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:latest depends_on: - Test a build secrets: @@ -56,7 +56,7 @@ steps: - ./scripts/upload-media.pl - name: Deploy the application - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:f36cd03d00ce6624d86af735a5a293b3d694e1e7 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:latest depends_on: - Build and push the docker image - Sync pictures from lfs to Minio @@ -71,7 +71,7 @@ steps: - ./scripts/deploy-app.pl - name: Cleanup everything - image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:f36cd03d00ce6624d86af735a5a293b3d694e1e7 + image: git.badhouseplants.net/badhouseplants/badhouseplants-builder:latest depends_on: - Deploy the application secrets: -- 2.45.2 From 7a8e163973a989e4da5fb0cd83dde03c3c956ca2 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Wed, 24 Jul 2024 18:07:42 +0200 Subject: [PATCH 111/111] Use https for argocd --- .woodpecker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 859f399..3189887 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -66,7 +66,7 @@ steps: - argo_github_oauth_key - argo_google_oauth_key environment: - ARGOCD_SERVER: argo.badhouseplants.net:443 + ARGOCD_SERVER: https://argo.badhouseplants.net:443 commands: - ./scripts/deploy-app.pl -- 2.45.2